前言
当你准备跳槽面试的时候,明明只是一份15K的工作,却问你会不会多线程,懂不懂高并发,火箭造得让你猝及不防,结果就是两个字——凉凉!而在如今的市场,什么多线程、高并发、分布式、负载均衡、集群、微服务等等等等,都可说是Java高级后端开发求职的必备技能。
2022的秋招可以说也是完美收官,前段时间收到字节跳动的面试邀请,虽有点震惊,但却依旧保持平常心去对待,结果一不小心就吊打了面试官(前后一个半小时的面试过程全程没卡壳,项目和算法全部搞定,甚至聊到了面试官的盲点…)
而最终的结果……当然是顺利的接到了字节跳动的Offer,定级为2-2资深研发人员。
面试前的准备
老实说,我自己平常没事就会看一些面试题,所以我都是直接去面的。不过我还是要建议大家如果准备面试的话,需要做以下准备
- 背题:看一看最近的面经文,了解现在公司都在面什么类型的题,准备一些常见题,开背吧!如果一些基础的 js 都不会那问题就有点小大了。
- 算法:做一些算法题,leetcode 上面的一二三星就够了,前端算法很简单,基本都是初中数学的难度吧。
- 项目:项目回顾,把你做的项目从技术架构到源码都要做到足够了解,至少面试的时候不要被面试官问住了。并且要体现出你在工作中的作用,体现出自驱性(大公司都很看重自驱性)
- 亮点:准备亮点,回答问题的时候不用全部回答上来,但是在面试的过程中一定要有亮点(不然你就会得到反馈,面试官说你还行,但是没有过~) 我一般会准备几个点,每个点都保证可以睡上半小时。另外一定要了解得很深入,并且能够用自己的话流畅的表达出来!!(我准备的几点,性能优化、工程化、缓存、http)
- 内推:最好找人内推,成功率会提高一些
- 练手:先找几家不太想去的公司(规模差不多)练练手,如果第一次面试就去心仪的公司面试,淘汰率会非常高。
- 心态:心态很重要,面试不过很正常,不证明你不优秀,只是不适合,总结面试经验,为下一次做准备。
- 答题:怎么把自己会的问题说好,这个很关键
- 逻辑清晰:一定要逻辑清晰,不然即使你知道这个问题的答案,面试官也不会满意,如果你逻辑清晰,即使这个答案不会,面试官也会给你加分
- 独特理解:现在的面试题大同小异,那么如何体现出你的优势就很重要。结合业务以及你自身的知识储备来讲
- 深入思考:对每个问题一定要有深入的思考,不然就很难进入大公司了,深度上要有一个拔高才能在面试中获得好的成绩
- 流畅表达:面试就是一个表达的过程,一些问题心里明白不行,还要流畅的表述出来,基本上如果面试官觉得你表达的很流畅,当你讲到一半就不会再让你说下去了,证明已经通过了
刷题绝对是最重要的,于是问了我在阿里的同学要来了一全套他们公司P8整理的系列大厂面试题,刷到天昏地暗,如今既完美收官了,这些面试题还有自己之前收集整理的一份核心架构进阶知识点。
字节跳动4面(3面技术+1面HR)面试经历
1.1 字节跳动一面
- 线程池用过哪些,线程池有哪些参数,然后问我几个常用线程池的用法和实际场景问题。
- 集合框架的知识,hashmap,ArrayList,LinkedList源码相关知识,基本整个介绍了一遍, 与hastable,concurrenthashmap相互的关联和区别
- 说几个垃圾回收器,cms回收器有哪几个过程,停顿几次,会不会产生内存碎片。老年代产生内存碎片会有什么问题。
- 讲讲快速排序,分析一下时间复杂度?
- 双亲委派模型介绍一下
- Java中同步、 volatile关键字
- Jvm内存分区,为什么要有新生代和老年代
- 有做个JVM内存优化吗?
- 数据库索引主键和唯一索引有什么区别
- 聚集索引和非聚集索引的区别?
- MySQL存储引擎innoDB和MyISAM的区别?
- innoDB的B +树索引叶子节点的Data域存储的是什么?MyISAM的B +树索引叶子节点的Data域存储的是主键还是物理地址?
之后就问了我最近看了哪本书,学到了什么,最近还在学的什么技术呢?问了我职业规划,兴趣爱好,还说了说公司的语言选型,我后来问了下对于我的面试表现评价,人家不方便说,又问了新人培养等问题。
1.2 字节跳动二面
- MySQL innodb的b+树索引,主键索引,聚簇索引有什么区别。
- 数据库四大特性
- 事务的四大隔离级别
- Jvm场景问题,标记清除多次后老年代产生内存碎片, 引起full gc,接下来可能发生什么问题。
- MySQL里有哪些锁,行锁表锁,乐观锁呢
- MySQL的死锁怎么产生的,举了两个例子。
- dubbo里的zookeeper是做什么的
- aio,nio,bio的了解,NIO的核心概念有哪些?
- 常用的NIO框架有哪些?优劣势
1.3 字节跳动三面
这个面试官应该是一个总监级别的,说话非常的硬气,肯定是一个资深大佬,一共面了40多分钟。常规的面试基础都没问,纯怼深度和广度了。
- 分布式下redis如何保证线程安全
- redis持久化的方式以及区别
- zookeeper如何实现分布式锁、其他分布式锁怎么实现
- kafka的架构,如何用kafka保证消息的有序性
- 数据库的优化包含哪些?MySQL的优化,谈两个你优化的例子。
- 最有技术难度的项目,介绍下相关核心设计流程。
- 工作中,遇见了技术瓶颈无法解决,你的解决思路?
1.4 字节跳动四面
HR面,大约35分钟,主要是问个人职业规划、薪资待遇,以及对字节跳动的期许等等
最后:分析一波,Java核心架构进阶知识点
面试成功其实都是必然发生的事情,因为在此之前我做足了充分的准备工作,不单单是纯粹的刷题,更多的还会去刷一些Java核心架构进阶知识点,比如:JVM、高并发、多线程、缓存、Spring相关、分布式、微服务、RPC、网络、设计模式、MQ、Redis、MySQL、设计模式、负载均衡、算法、数据结构、kafka、ZK、集群等。而这些也全被整理浓缩到了一份pdf——《Java核心架构进阶知识点整理》,全部都是精华中的精华,本着共赢的心态,好东西自然也是要分享的
内容颇多,篇幅却有限,这就不在过多的介绍了,大家可根据以上截图自行脑补
最后只一句,机会永远是留给有准备的人!也祝愿大家身体健康,顺利拿到心仪的offer!