Android面经|字节22届校招提前批(1234面)
前言
说说时间线,7.22一面,7.28二面,8.4三面,8.11四面,8.16意向书。其中,一面和二面完之后,第二天就发邮件预约下一次面试;三面完之后过了两天预约下一次面试;四面结束后隔了5天发意向书,期间发了字节跳动面试体验问卷调查(还以为凉凉了)。
一面(约50min)
由于一面的时候忘了录音,只能根据记忆想起一些问题,其实一面问的偏向于基础,背熟常见的八股文就行了,主要是Java、Android、计算机网络和操作系统等问题。
1、HashMap原理
2、HTTP1.0和HTTP2.0的区别
3、讲一讲HTTP的状态码
4、进程和线程
5、翻转链表的时间复杂度是多少?
6、算法题:LeetCode 21.合并两个有序链表
二面(49min)
1、问项目相关的问题
2、Activity A启动另一个Activity B,生命周期变化?如果B是Dialog呢?
3、View的事件分发机制?( dispatchTouchEvent、onInterceptTouchEvent和onTouchEvent)
4、View的ACTION_CANCEL事件是什么?(手指从当前View的范围滑到了另一个View范围内,会触发CANCEL事件)
5、Java的final关键字
6、Thread A启动Thread B,如果A退出了,B会怎样
7、HTTPS的工作流程
8、浏览器输入URL后发生了什么(DNS解析、TCP握手、HTTP请求)
9、算法题:LeetCode 3.无重复字符的最长子串
10、反问阶段
三面(1h7min)
1、问项目相关的问题
2、Android数据持久化,如sharedpreference、sqlite等用过吗?有什么区别?sharedpreference的commit和apply的区别?
3、Handler工作原理分析(MessageQueue、Looper和Handler各自的原理、Java层和Native层消息循环、Linux的epoll,高频考点)
4、Looper.loop()为什么不会卡死?(会阻塞到native的epoll调用,但有UI刷新事件可以及时解除阻塞,表现为不会卡死)
5、对于在Native层的的消息循环中,epoll()监控的mWakeEventFd的了解?(3、4、5实际上是一个连贯的考点,需深入源码细节理解)
6、一个Java对象占用多少内存?(markwork、klass pointer和实例变量)
7、Handler的postDelay()是怎么实现的?
8、简单说说Retrofit2的工作原理?(动态代理设计模式、底层用okhttp、ServiceMethod、Converter等)
9、说说okHttp的线程池?
10、说说内存泄漏该如何定位?
11、Java对象的finalized()方法什么时候调用?(GC最后阶段,可达性分析算法没有被标记)
12、软引用和虚引用?
13、将资源回收放在finalized()方法里面可以吗?
14、什么情况下finalized()方法没有被调用?
15、有了解过JNI吗?
16、说说对于域名劫持的了解?
17、算法题:LeetCode 93.复原IP地址(楼主当时没想出来怎么做,只能用迭代的方法去暴力破解,写得磕磕碰碰,实际上应用用回溯算法)
18、反问阶段
四面(51min)
1、主要是问项目相关的问题(深挖项目细节,不局限于Andorid的问题,用到了什么技术如后端、深度学习等的话都会展开来问,聊了约30分钟)
2、说说对于域名劫持的了解?HTTPS能防止域名劫持吗?
3、聊了聊平时的学习情况
4、算法题:LeetCode 240.搜索二维矩阵2的变种,要求找出数字在数组中第一次出现的位置(数字可重复)
5、反问阶段