两句闲话:
2020 年已经接近尾声,疫情还偶有小范围的爆发,大家出门在外注意做好防护工作,尤其是离家在外工作的朋友们,照顾好自己。
我个人也是离家找工作,因为个人想先去大城市发展,毕竟搞 Android 的在三线以外的城市是真的很难找到工作,有些公司甚至没有设 Android 岗,只有小程序!!!
年轻,就该趁着热情和拼劲,去外面闯荡一下,既然是闯荡,当然要进大厂,字节跳动的抖音就是我的目标。
一开始的面试也是磕磕绊绊,但是我没有放弃,继续投,在被拒了三次后,我终于拿下字节跳动的 offer。前前后后,今年,我在字节跳动面试了12次。
个人情况介绍:
湖南的一个农村家庭,学历也是省内普通二本,资历平平,没什么特别的优势。
上半年海投简历后,接到了个别公司的面试电话,但是都是小公司,字节跳动那边石沉大海,没有反应。
后面又投了两次,还在牛客这些地方找了比较靠谱的人内推了一下,经过了三次面试,终于进入了字节跳动。
以下主要分享面经和个人学习方法,会推荐当时看的书,其中包括很多PDF文档,如面试题库(含答案+解析)、学习笔记、实战文档和脑图等等~
一面面试官的思维非常跳跃,经常我说到一半的问题,突然询问其他相关问题,然后回答完再继续之前的说下去,有些许不适应这个节奏。顺序可能不太对。
类的加载过程,Person person = new Person();为例进行说明。
JVM 相关知识,GC 机制。
类的加载器,双亲机制,Android 的类加载器。
Android 中进程的级别,以及各自的区别。
插件化原理。
集合框架,list,map,set 都有哪些具体的实现类,区别都是什么。
concurrentHashmap 原理,原子类。
volatile 原理。
Binder 机制。
View 的绘制流程,事件传递机制,Handler 异步消息机制。
Interger 中的 128(-128~127),这里考的是常量池的概念,这个没回答上来。
线程池的相关知识。
Handler 机制,HandlerThread 实现等等。
LRUCache算法是怎样实现的。
就这样第一面基本结束。一共问了 14 个问题,其中美团的手写算法在业界算是比较出名,很多小伙伴可能卡在手写算法上。然后就是一些 Android 和 Java 的细节性东西,这些基础内容只要有 1 年经验的都基本能说出个一二三。
面试官可能没注意我前面提到过的事情,时间上和别的事情冲突了,不过还好顺利的约到第二天上午~
二面面试官感觉专业了很多,问问题也比较灵活。有时候会有点像在怼的打断然后追问,但是有答得不好的地方也会很耐心的引导
写个快速排序
生产者消费者伪代码(因为和面试官思路不同加上紧张,代码反反复复改了很久,面试官也一直在写代码引导我)
顺带讲了一下 wait() await() 这一系列方法
如何用数组实现队列(直接说抽象的环,但面试官一直在引导细节如何更优化,比如怎么判断队满,决定插入位置怎么省去 if…感觉面试官真的很耐心)
如何用数组实现栈
弱引用,有什么用?有没有用过?
如果写一个库中存在的类,包也一样,会怎么样?
提到类加载要确保类的唯一性,怎么确保?
三次握手,为什么要三次
TCP 怎么保证可靠
如果包乱序到达会发生什么
进程和线程的区别
追问进程之间为什么会相对比较独立?电脑上看起来运行着很多进程,是怎么隔离的?
如果一个进程需要一直读写内存,会影响其他进程吗?(这里我开始结结巴巴瞎说了…面试官安慰了一下)
知道几种单例模式的写法?有什么优缺点
Hashmap 原理
扩容具体是怎么做的?原本的元素要怎么放进新数组?
自我介绍
项目(项目怼了挺久的,一直深挖。建议大家要非常熟悉简历上的项目,一些细节也要注意到,这个环节差点被怼哭🤣)
有没有了解过插件化?插件化和组件化什么区别?
Applicatipn Context 在什么情况下不能使用。(面试官提示 dialog 了我还不会,这个需要重点注意一下)
加载一张特别大的图片,该如何操作?(一面面试官也问了这个问题!回答的特别流畅哈哈哈)
一定要在主线程中更新 UI 吗?能不能在子线程更新?(这个我有一点印象,最后是面试官疯狂提示才想出来的
surfaceView)
LRU 的底层数据结构?双向链表如何提高查询效率?
kotlin 是如何兼容 Java 的(这个我真不会,没想到连这都问)
你觉得你最大的优势是什么?(balabala 讲了一堆,主要讲自己的学习能力强,团队合作能力强)
反问环节
三面总结: 三面主要是围绕项目,然后面试官问的特别特别深。相比之下,二面比较注重广度,考察你对整个安卓体系的知识。三面比较注重深度,考察你对安卓底层源码以及框架源码有没有深入的研究。
HR 面
hr 面总结:其实 hr 面大家基本上如实回答就可以了,hr只是想要通过聊天对你有一个基本的了解,不要回答的太偏激太离谱就行。最终刷人也是综合一二三面的成绩排序。
字节跳动面试题答案:
因篇幅问题,面试题答案整理在pdf文档里,里面还有我在准备面试的那段时间里搜集整理出来的字节跳动的其他的面试题,并且我根据出现的频率进行了重要程度的标注,大家可以在短时间里面进行更高效的复习,在时间充裕的情况下进行有侧重点的全面复习。
需要这份字节跳动面试真题解析的朋友可以去文末我的个人文档拿。
(一)调整自己的心态,正确面对得失
面试中常见的问题,主要是心态,面试调整心态是第一位的,如何调整成最佳心态呢?很多求职者在面试过程中自己思路不清晰,语言不流畅,说话毫无逻辑,会不断否定自己,归根结底都是面试心态问题,所以调整自己的心态,正确面对得失是非常重要的,我的方法是给自己足够的心理暗示。
(二)提升技术,扩宽知识
对于程序员来说,要想成长为一名行业内的大牛大神级别的人物,那么唯一的办法就是通过学习,来不断提升自己的技术,扩宽知识,达到一定的高度和深度。那么如何提升自己的技术,扩宽自己的知识储备呢?
我在21天内啃完了1307页的 pdf 面试题(想要可以找我拿)
(三)刷题
如何刷题?这是很多现在面试者心中的困惑,我们都知道,面试前刷题是很有必要的,毕竟很多题目都有一定的共性,刷足够题目就能够做到举一反三,甚至在面试时,被问到原题,能够侃侃而谈,那么刷题如何进行呢?建议:最好找一些历年的面试原题,分专题来对自己进行训练。
要私藏题库可以找我
对于大厂面试,我最后想要强调的一点就是心态真的很重要,是决定你在面试过程中发挥的关键,若不能正常发挥,很可能就因为一个小失误与 offer 失之交臂,所以一定要重视起来。另外提醒一点,充分复习,是消除你紧张的心理状态的关键,但你复习充分了,自然面试过程中就要有底气得多。
希望大家面试顺利,拿下自己心仪的 offer!
转自CSDN