面试

分库分表之后,id 主键如何处理?

痞子三分冷 提交于 2020-12-19 05:00:38
点击上方“ Java知音 ”,选择“置顶公众号” 技术文章第一时间送达! 作者: yanglbme 链接:https://github.com/doocs/advanced-java 面试题 分库分表之后,id 主键如何处理? 面试官心理分析 其实这是分库分表之后你必然要面对的一个问题,就是 id 咋生成?因为要是分成多个表之后,每个表都是从 1 开始累加,那肯定不对啊,需要一个全局唯一的 id 来支持。所以这都是你实际生产环境中必须考虑的问题。 面试题剖析 数据库自增 id 这个就是说你的系统里每次得到一个 id,都是往一个库的一个表里插入一条没什么业务含义的数据,然后获取一个数据库自增的一个 id。拿到这个 id 之后再往对应的分库分表里去写入。 这个方案的好处就是方便简单,谁都会用;缺点就是单库生成自增 id,要是高并发的话,就会有瓶颈的;如果你硬是要改进一下,那么就专门开一个服务出来,这个服务每次就拿到当前 id 最大值,然后自己递增几个 id,一次性返回一批 id,然后再把当前最大 id 值修改成递增几个 id 之后的一个值;但是无论如何都是基于单个数据库。 适合的场景:你分库分表就俩原因,要不就是单库并发太高,要不就是单库数据量太大;除非是你并发不高,但是数据量太大导致的分库分表扩容,你可以用这个方案,因为可能每秒最高并发最多就几百

面试 LockSupport.park()会释放锁资源吗?

走远了吗. 提交于 2020-12-19 04:48:23
欢迎关注我的公众号“彤哥读源码”,查看更多源码系列文章, 与彤哥一起畅游源码的海洋。 (手机横屏看源码更方便) 引子 大家知道,我最近在招人,今天遇到个同学,他的源码看过一些,然后我就开始了AQS连环问。 我:说说AQS的大致流程? 他:AQS包含一个状态变量,一个同步队列……balabala……互斥锁balabala,共享锁balabala…… 我:AQS中除了同步队列,还有什么队列? 他:还有个Condition,Condition中有个条件队列…… 我:条件队列和同步队列有什么区别? 他:条件队列balabala,然后调用LockSupport.park()进入休眠,等待被唤醒,……,balabala 咦,这时我灵感突发:LockSupport.park()和Thread.sleep()有什么区别? 他:Thread.sleep()不会释放锁资源,……,balabala 我:LockSupport.park()会释放锁资源吗? 他:会吧。(估计和Object.wait()搞混淆了) 我:会吗?会吗?会吗? 他(羞涩地低下了头):彤哥,不知道,你的文章里没写。(这段我瞎写的哈^^) OK,今天我们就来看看LockSupport.park()到底会不会释放锁资源。 Thread.sleep()和Object.wait()的区别 首先,我们先来看看Thread.sleep(

最新 多点Dmalljava校招面经 (含整理过的面试题大全)

梦想与她 提交于 2020-12-19 04:23:50
从6月到10月,经过4个月努力和坚持,自己有幸拿到了网易雷火、京东、去哪儿、多点Dmall等10家互联网公司的校招Offer,因为某些自身原因最终选择了多点Dmall。6、7月主要是做系统复习、项目复盘、LeetCode与牛客刷题等准备工作,并且投了字节跳动、拼多多、猿辅导在内的几家公司的提前批,当然还是挂在了简历,因为毕竟自己的学校、学历、项目经验肯定比不过牛客网上那些大厂实习的大佬了,有时间也给自己做个总结,也希望能帮助到大家 校招心得 注重实力,保持良好心态 :面试过程中,继续巩固好自己的技术栈,然后保持一个良好的心态,尤其是还没有Offer的时候,心态别崩,其实到最后大家都会找到工作的,唯一的区别就是公司的方向、规模、待遇方面,也别太在意别人拿到了牛X的Offer,尤其是牛客网,天天神仙打架,刚开始自己也是很纳闷,怎么就能这么牛,最后也都见怪不怪了~。好多之前一直没Offer的人,可能突然某一天就收获到了几份Offer,所以不断提升自己的综合能力才是关键,与其在这羡慕别人,不如让自己心态沉静下来,认真复习、厚积薄发。 多交流,多思考,刻意锻炼表达 :牛客网上有各种面经、面试经验,数不胜数,多去刷刷面经,和一起找工作的小伙伴们或者牛友们交流下面试经验、疑难问题什么的,收获也会很大的,也能放松自己紧张的身心。通过交流与思考要能总结出属于你自己的那一套正确的面试技巧

MySQL:互联网公司常用分库分表方案汇总!

。_饼干妹妹 提交于 2020-12-19 03:05:51
点击上方 IT牧场 ,选择 置顶或者星标 技术干货每日送达! 一、数据库瓶颈 不管是IO瓶颈,还是CPU瓶颈,最终都会导致数据库的活跃连接数增加,进而逼近甚至达到数据库可承载活跃连接数的阈值。在业务Service来看就是,可用数据库连接少甚至无连接可用。接下来就可以想象了吧(并发量、吞吐量、崩溃)。 1、IO瓶颈 第一种:磁盘读IO瓶颈,热点数据太多,数据库缓存放不下,每次查询时会产生大量的IO,降低查询速度 -> 分库和垂直分表。 第二种:网络IO瓶颈,请求的数据太多,网络带宽不够 -> 分库。 2、CPU瓶颈 第一种:SQL问题,如SQL中包含join,group by,order by,非索引字段条件查询等,增加CPU运算的操作 -> SQL优化,建立合适的索引,在业务Service层进行业务计算。 第二种:单表数据量太大,查询时扫描的行太多,SQL效率低,CPU率先出现瓶颈 -> 水平分表。 二、分库分表 1、水平分库 概念: 以字段为依据,按照一定策略(hash、range等),将一个库中的数据拆分到多个库中。 结果: 每个库的结构都一样; 每个库的数据都不一样,没有交集; 所有库的并集是全量数据; 场景: 系统绝对并发量上来了,分表难以根本上解决问题,并且还没有明显的业务归属来垂直分库。 分析: 库多了,io和cpu的压力自然可以成倍缓解。 2、水平分表 概念:

如何画出优秀的架构图?

青春壹個敷衍的年華 提交于 2020-12-19 02:38:32
作者 | 三画 来源 | 公众号「阿里巴巴云原生」 导读: 技术传播的价值,不仅仅体现在通过商业化产品和开源项目来缩短我们构建应用的路径,加速业务的上线速率,也体现在优秀工程师在工作效率提升、产品性能优化和用户体验改善等经验方面的分享,以提高我们的专业能力。本文作者阿里巴巴技术专家三画,分享了自己和团队在画好架构图方面的理念和经验,首发于阿里内部技术分享平台,梓敬、鹏升和余乐对此文亦有贡献。 当我们想用一张或几张图来描述我们的系统时,是不是经常遇到以下情况: 对着画布无从下手、删了又来? 用一张图描述我的系统,并且让产品、运营、开发都能看明白? 画了一半的图还不清楚受众是谁? 画出来的图到底是产品图功能图还是技术图又或是大杂烩? 图上的框框有点少是不是要找点儿框框加进来? 布局怎么画都不满意…… 如果有同样的困惑,本文将介绍一种画图的方法论,来让架构图更清晰。 先理清一些基础概念 1. 什么是架构 架构就是对系统中的实体以及实体之间的关系所进行的抽象描述,是一系列的决策。 架构是结构和愿景。 系统架构是概念的体现,是对物/信息的功能与形式元素之间的对应情况所做的分配,是对元素之间的关系以及元素同周边环境之间的关系所做的定义。 做好架构是个复杂的任务,也是个很大的话题,本篇就不做深入了。有了架构之后,就需要让干系人理解、遵循相关决策。 2. 什么是架构图

算法面经大乱斗Plus

為{幸葍}努か 提交于 2020-12-19 00:09:11
作者 | huasdahadi 整理 | NewBeeNLP 面试锦囊之 面经分享 系列,持续更新中 写在前面 现在距离秋招结束也好长一段时间了,今天总结一下自己在秋招中的一些经验和教训,希望可以帮助到学弟学妹们。 先介绍一下我自己的情况,我本科211,硕士985,软件工程专业。我投的都是算法岗,最后有幸拿到了腾讯、百度、美团、网易游戏、华为公司的offer。19年秋招中算法岗竞争很大,不过20年情况貌似更惨了,大家加油。 面试建议 我对于秋招、春招的建议,其中最重要的一点就是一定要多投简历多面试、积极主动(对于很厉害的人,当我没说😑)。因为每个人的侧重点不同,把过多的时间放在看帖子、复习基础上,可能会导致走偏了还一直没有发现,面试可以看出来哪些东西是重要的,纠正方向。 多投简历多面试可以针对性的发现自己的问题,一定要记录面试内容,方便后续复习。 积极主动更加重要,有很多的情况是投完简历就石沉大海,能获得面试的机会寥寥无几。我的建议是尽量找内推,至少保证自己的简历被看到,一旦发起面试,要主动跟进面试流程。 可能大家都懂这些道理,但是据我观察到的,做到这样子的真的不多! 废话就说到这里,下面是一些实际操作!! 秋招面试一般有笔试+三次技术面+hr面。 笔试在线上做一些题目 一面问基础知识和做一些算法题目。 二面会问一些项目或者场景题,但是如果一面的算法题目做的不好,也会继续做做题目。

超详细,理解这6个核心概念,轻松入门Java多线程!

走远了吗. 提交于 2020-12-19 00:00:25
前言 小编这里整理了一份JAVA多线程并发编程的详细思维导图,想了解的小伙伴可以点开看看呢。 多线程相对于其他 Java 知识点来讲,有一定的学习门槛,并且了解起来比较费劲。在平时工作中如若使用不当会出现数据错乱、执行效率低(还不如单线程去运行)或者死锁程序挂掉等等问题,所以掌握了解多线程至关重要。 小编接下来会从基础概念开始到最后的并发模型由浅入深,讲解下线程方面的知识。 一、并发与并行 并行,表示两个线程同时做事情。 并发,表示一会做这个事情,一会做另一个事情,存在着调度。单核 CPU 不可能存在并行(微观上)。 临界区 临界区用来表示一种公共资源或者说是共享数据,可以被多个线程使用。但是每一次,只能有一个线程使用它,一旦临界区资源被占用,其他线程要想使用这个资源,就必须等待。 阻塞与非阻塞 阻塞和非阻塞通常用来形容多线程间的相互影响。比如一个线程占用了临界区资源,那么其它所有需要这个资源的线程就必须在这个临界区中进行等待,等待会导致线程挂起。这种情况就是阻塞。 此时,如果占用资源的线程一直不愿意释放资源,那么其它所有阻塞在这个临界区上的线程都不能工作。阻塞是指线程在操作系统层面被挂起。阻塞一般性能不好,需大约8万个时钟周期来做调度。 非阻塞则允许多个线程同时进入临界区。 二、锁 死锁 死锁是进程死锁的简称,是指多个进程循环等待他方占有的资源而无限的僵持下去的局面。

JavaScript优化技巧

无人久伴 提交于 2020-12-18 23:19:13
作为开发人员,我们一直在寻找让我们的代码更快更好的方法。但在此之前,编写高性能代码需要做三件事: 了解语言及其工作原理 基于用例进行设计 调试!修复!重复 记住这一点 任何傻瓜都可以编写计算机可以理解的代码,优秀的程序员编写人类可以理解的代码。- 丁·福勒 我们来看看如何使 JavaScript代码运行得更快。 延迟 延迟算法将计算延迟到需要执行时才执行,然后生成结果。 const someFn = () => { doSomeOperation() return () => { doExpensiveOperation() } } const t = someArray.filter((x) => checkSomeCondition(x)).map((x) => someFn(x)) // 现在,如果有需要在执行 t.map((x) => t()) 最快的代码是未执行的代码,所以尽量延迟执行。 JavaScript 使用原型继承,JS 中所有对象都是Object的实例。 MDN说: 尝试访问对象的属性时,不仅会在对象上搜索该属性,还会在对象的原型,原型的原型等上搜索该属性,直到找到匹配属性名或原型链的末端。 对于每个属性,JavaScript引擎都必须遍历整个对象链,直到找到匹配项。 如果使用不当,这会占用大量资源,并影响应用程序的性能。 所以不要这样: const name

2020阿里,字节跳动,JAVA岗(一线企业校招、社招)面试题合集

放肆的年华 提交于 2020-12-18 21:42:42
前言 以下面试题全属于一线大厂社招以及校招的面试真题,各位在做这些题目对照自己的时候请平凡心对待,不要信心受挫。其实 做为致力于一线企业校招或者社招的你来说,能把每个知识模块的一小部分问题去深入学习和总结,已经很棒了!然后文末有我自己总结的一些答案和更多面试题的文档总结,需要可以自取! 首先展示一下以下文档包含的路线图 基础 排序实现原理和Collection实现原理 和而的区别(编译之后) 线程池的种类,区别和使用场景 分析线程池的实现原理和线程的调度过程 线程池如何调优 线程池的最大线程数目根据什么确定 动态代理的几种方式 HashMap的并发问题 了解LinkedHashMap的应用吗 反射的原理,反射创建类实例的三种方式是什么? 可克隆接口实现原理,浅拷贝或深拷贝 JavaNIO使用 哈希表和hashmap的区别及实现原理,hashmap会问到数组索引,散列碰撞怎么解决 数组列表和链接列表区别及实现原理 反射中,Class.forName和ClassLoader区别 字符串、字符串缓冲区、StringBuilder的区别? 有没有可能2个不相等的对象有相同的哈希码 简述nio的最佳实践,比如netty,Mina 树状图的实现原理 Jvm相关 类的实例化顺序,比如父类静态数据,构造函数,字段,子类静态数据,构造函数,字段,他们的执行顺序 Jvm内存分代 JAVA

扩招1W人,字节跳动内部公开12月份Java岗71道面试题

拜拜、爱过 提交于 2020-12-18 17:31:54
前言 近日,字节跳动官宣扩招信息,在年底前再招满 10000 人!这其中技术岗的需求占比非常高。 不少人对字节跳动技术岗的 体系结构 和 技术要求 设置不太清楚,想去面试心里没底,下面简单介绍一下字节跳动技术岗要求体系,并给大家分享一份最新入职字节跳动的同事总结出的 完整面试题! 字节跳动的 职级 研发序列一共 10 级: 不同序列间月薪base差异较大,技术base整体偏高。比如2-1月薪会在20k+,2-2的package会在60w-100w左右(算上期权,大概会占30%左右)。T2-2级别的薪资约40k,500股票/每年。 字节技术岗平均薪资情况: 字节跳动对技术岗的要求 1、3年以上开发经验; 2、精通Java,理解io、泛型、多线程、集合等Java基础使用和实现原理; 3、熟悉Spring、SpringBoot等框架,理解JVM的实现机制及性能调优; 4、掌握MySQL使用,熟悉数据库性能优化; 5、熟悉主流Key-Value存储系统,能够进行系统性能调优; 6、掌握Linux 操作系统;熟练使用一种脚本语言,Shell或Python; 7、拥有高并发、分布式系统经验优先; 8、有业务系统中台化经验者优先。 有以下经验者优先: ① 熟练掌握Golang/Python并能灵活运用; ② 具有大规模分布式系统的调优经验,如JVM调优、SQL调优、缓存优化、RPC优化等; ③