前言
先讲述一下自己为什么到字节跳动面试的原因吧,因为上一次面试被无良HR欺骗坑惨,面试的是一家上海某电商公司,给的薪资是不错。面试的时候,找我要了工资流水,然后给了我口头offer,就让我回去等了邮件了。回去之后就觉得offer没啥问题,稳稳当当了,就没再去面其他的公司,打起了游戏。结果等了两个礼拜也没等来邮件,问HR告诉我在走流程,我问是不是不要我,HR说要,让我继续等。
再过了几天我再去问,HR就怎么都不回我了,这个时候我才反应过来“坏了”。好在后来我马上开始面试其他的公司,阴差阳错拿到了字节跳动的offer,这也算是因祸得福了。
再后来,那家电商公司的HR又通知我去入职,我猜当时应该是有两个候选人,然后选了另一个,把我给吊着了,最后那个人鸽了他们,才又想起了我,我只能说这样的HR真的没有一点职业道德和修养,然后立马拉黑她了,好在我结局是好的,也不跟她做过多的计较。
这里给大家分享下自己的经验,也给自己做个归档,希望能给正在准备跳槽,找工作的朋友一点帮助
为什么面试成功了
我总结下来就是:
-
自信太重要了,你自己都否定你自己,觉得这不行,那不行,这样就导致你面试的时候畏畏缩缩的,我记得影响最深刻的就是面试官说我是他见过自信心不多的面试者,当然自信的前提是什么?我自己体会最重要的一点就是学习,只有学习才能让你保持有底气有自信,我现在每天也会保持学习2个小时,哪怕时间再不够我也会睡前看半个小时的书籍,你想要三年入大厂,就要三年学习足够的知识!
-
整理核心技能树,心中有墨,才能写得出来文章,同样的我们是靠技能吃饭的,只要我们技能足够强,哪怕60岁我也觉得不怕失业,国家网络安全员都有60多岁的老院士在任职
-
因为之前在三星工作过,所以自己也多多少少接触了一些大厂的朋友,在面试前我特意打了一个电话请教我再捷信做总监的朋友,相当于是阿里p7级别的岗位,他在我面试前又教会了一些我新的认知和视野,导致我在面试过程中能够和面试官聊天文和地理,面试我感觉很不错
准备简历
不要以为简历只是一个 “敲门砖”而已,事实上,它将伴随你走过应聘流程中的几个关键环节:简历评估,技术面试,HR 面试。
一份优质的简历有助于应聘者展示自己的能力和优势,同时,也可以为面试官提供 “提问指导” (通常面试官会根据简历内容有针对性地提问,有的放矢),因此不断去优化自己的简历是很有必要的。
关于简历,我可以提供我个人的简历模板给你参考:
面经过程
字节跳动一面(大约1h左右):
- 直接上来就手撕代码:重建二叉树
- 使用https就能保证数据安全吗?
- http协议处于网络模型哪一层
- 用post获取数据会有什么问题吗?get和post的区别有哪些
- c和Java的区别,本质区别
- 数据库优化:B+树,Hash索引,最左前缀,索引优化分析,一条龙服务,都问了一下。
- Redis:一来就是分布式锁,然后别的就没问了,可能也是觉得我回答得还行就跳过了。
- HashMap:扩容的触发条件是什么?我答只是一个达到负载就扩容了,明显错了。然后面试官纠正说负载和Hash冲突同时发生。
- 死锁怎么排查?
- JVM调优怎么做?
- 问了几个索引题。字符串要写单引号,字符串查询怎么增加查询效率,字符串索引太大了那就截取几个做索引,叫前缀索引。怎么判断一个索引字段选得好不好,看不重复的和总数的比值,越大越好。
- 假如现在系统里面就是要模糊匹配怎么办?
字节跳动二面(大约2个小时):
- 自我介绍
- 问我计算机网络,操作系统,组成原理,数据结构哪个学的最好?我说计网,因为我实习的时候看了很多计网相关的东西,他叫我把自己最熟悉的东西详细讲解出来
- JVM:类加载机制,沙箱安全
- 问到运行时数据区,我答漏了一个程序计数器,然后面试官就接着问到了程序计数器。
- 问可达性分析,什么样的对象可以作为GcRoot、加载的时候把这些对象提前找好用的OopMap
- 新生代几次对象几次到老年代?
- 有没有可能直接就把刚new出来的对象放在老年代?(第一次碰到这个问题,有些慌,我答的有可能,毕竟有些垃圾回收器会有一个空间分配担保策略)
- 多线程:volatile,CAS,总线嗅探,CPU缓存一致性协议
- 讲一讲ReentrantLock、ThreadLocal、Lock和Synchronized的区别。
- CountDownLatch,ABC三个线程怎么去保证顺序执行?
- 信号量解释一下,干什么用的?
- 死锁怎么产生的?
- 发生了死锁怎么办?
- 银行家算法了解么?
- 算法部分:
字节跳动三面(大约2个小时):
- redis集群,为什么是16384?哨兵模式,选举过程,会有脑裂问题么?raft算法,优缺点
- JVM类加载器,自定义类加载器,双亲委派机制,优缺点,tomcat类加载机制
- Tomcat热部署,热加载了解吗?怎么做到的?
- cms收集器过程,g1收集器原理,怎么实现可预测停顿的?region的大小,结构
- 类加载(给实际场景)
- innodb索引(给张表画索引) 回表
- mybatis怎么实现orm 说说自己理解 让你落地怎么去做
- 继续实现lru 不使用jdk提供的容器(答了双链表和hashmap 让优化 换思路 加一个时间标志 然后利用comparetor排序)
- 一个规律题 1 11 21 1211 111221
- 最近看了什么书,说一下自己平时的学习方法
- 说一说你对字节跳动的了解
- 拿到哪些公司的offer
- 算法1:给定一个长度为N的整形数组arr,其中有N个互不相等的自然数1-N,请实现arr的排序,但是不要把下标0∼N−1位置上的数通过直接赋值的方式替换成1∼N
- 算法2:判断一个树是否是平衡二叉树
结果肯定是美好的,给大家看看我新公司的工作环境哈哈哈
三轮面试,我的经验复盘
1.字节跳动面试注意事项
- 部门选择:从这三次面试经历来看,部门不同,问到的技术栈都有所区别,所以在面试前最好是根据自己所面试的部门做相应的准备。
- 岗位选择:根据岗位介绍能够洞见的关键信息并不多,基于有限的信息,所谓合适通常需满足以下几点:①自身的核心竞争力与所应聘的岗位具有较高的匹配度;②对岗位的工作内容感兴趣,至少不排斥;③岗位所在的业务具有良好的前景;④工作地点可接受。
- 应变能力:几轮面试下来,给我最大的一个感受就是一定要培养自己的应变能力。在面试过程中,面试官会根据和你交流的过程中,找一些细节进行提问,一旦应变能力不强,就容易慌了张影响面试发挥,导致失败。
2.面试核心知识点梳理
除了字节跳动以外,其他七七七八八的互联网公司我也面过不少,不说身经百战,那也面临过一些枪林弹雨的。所以,对于面试会问到什么技术栈,还是做了一些详细的梳理,这些面试梳理还是相当有说服力的。
针对面试核心知识点的梳理,我提供了以下的思维导图和面试核心点PDF:
- Java面试核心点PDF
- 阅读书籍文档:
- 看视频学习:
- 面试刷题:
BAT一线大厂面试题
写在末尾:一些建议和行业愿景
文章写到这里差不多可以停笔了,但是又好像还想说点什么,或许是对同行的你一些小建议,也或许是对整个行业的一些愿景。
近几年来,铺天盖地而来的“程序员35岁”制造了不少年龄焦虑,试问自己被公司裁员,被社会淘汰真的是年龄导致的吗?大多数还是与自己能力相关,在我接触到的认知里,互联网公司35岁以上的技术经理,技术大牛仍有不少。实际上,无论你是什么行业,能力不过关,都会被淘汰,而避免被淘汰的唯一办法:坚持学习。
所以,最后希望同为代码献身的我们,不负初衷,不畏困难,拥抱发展!