概述
时间过得是真TM快,回想自己是16年从学校毕业,现在是出来工作的第五个年头啦。在不同的大小公司都待过,就在前段时间顺利的完成了一次跳槽涨薪,面试了几家公司,最终选择了字节跳动。今特此前来跟大家进行分享,希望对大家有所帮助。
面试过程
一面(40min):
- a. 线程池的底层原理
- b. 四种引用类型
- c. JAVA GC
- d. Sychornized关键字
- e. 静态同步函数
- f. 可不可以调用Abstrut 父类的super方法
- g. HTTP协议中POST,GET 的区别
- h. TCP/IP协议栈 i. TCP和UDP的区别
- j. 三次握手是什么?可以两次握手么
- k. 进程和线程的区别
- l. 手写ViewGroup树结构遍历
第一次面试稍微有些紧张,但总体来说发挥还是OK的
二面(1h):
- a. ArrayList / LinkedList的区别
- b. HashMap的底层实现原理
- c. 两个线程分别调用同一个类的实例函数和类函数
- d. 什么是可见性?举例场景
- e. volatile关键字的意义
- f.Class对象
- g. 线程结束的方法:Interrupt之后需要做什么
- h. Android Activity切换生命周期
- i. Activity保存状态的函数
- j. 子线程对UI的操作方法
- k. 如何在应用程序远程调用中表明用户身份
- l. 单例模式、建造者模式、中介模式
- m. 手写中位数查找算法
中规中矩,就是Activity回答的不是很好
三面(50min):
- a. 聊聊项目
- b. Handler和Looper的底层结构
- c. postRunnable方法的底层实现
- d. Thread Run和Start的底层调用区别(是否中断陷入)
- e. BroadCast的使用方法
- f. Intent的使用方法
- g. Intent-Filter
- h. 手写外部排序
上面就是我大致的一个面试过程,能记得的面试内容就这些了,其实面试中问道的还是有很多,问的都比较全面,主要都是从自己简历上填写的项目经历问过去的,顺着还延伸的问了一些。
面试过程其实大部分时候是,面试官或者公司是主导方,大部分的节奏是跟着面试官走,但是我觉得面试其实就是一个相互探讨的过程,不仅是公司在选择你,你也在选择公司、以后工作的同事和leader。
所以我这次面试中,更多的是和面试官探讨,也会反问面试官一些问题,不仅仅是最后面试官说可以问他几个问题,在面试过程中就会询问一些,优秀的面试官会跟你探讨,并且讨论出一个合理的方案或者正确的答案,整个过程非常愉悦,相互都学习到了。
这里概括一下给同伴们的几个小建议:
1、把自身的技能练扎实,
2、找跟你过往经历匹配度非常高的岗位,
3、面试的时候充分展现你个人的软实力硬实力。
关于内推的(同公司应该是hr伙伴的良心建议):
1、内推如果长时间没动静可能是简历没过。
2、投递一些部门没过,可以再投别的部门,甚至有可能会有别的部门看到简历,然后捞起来。