最近面了BAT、美团、快手、字节、爱奇艺、京东、小米、好未来、茄子快传、伴鱼、永辉等公司,拿了一些公司offer,最终选择入职字节,记录一些面试中遇到的问题,给大家和日后的自己一些参考。其实面试大部分问题都是按简历上的技术点来的,但不排除有些面试官还是按自己准备的套题来面试。
Android相关的
1、ui还原度(怎么确认你做的效果和ui的切图、尺寸标注是一样的,怎么快速对比?谁去确认这个事,是开发、测试还是设计?)
2、启动速度优化做了哪些,优化的效果是怎么样?应用启动时长怎么统计?系统耗时部分怎么统计?从点击launcher的应用图标到application.attachBaseContext这段时间的时长怎么统计?如果发现某个系统库加载特别慢,如何优化?闪屏页或是首页统计到哪个点比较好,到用户可见可操作的?
自己看到的一些黑科技:1)提高cpu锁频,对system/cpu中文件进行写值,暴力拉伸cpu
2)抑制GC,避免创建太多对象,如何抑制,可以参考支付宝的文章https://www.sohu.com/a/278007600_608959
3) 用javassist查看每一个方法耗时
4)redex用interindex调整类在dex文件中的顺序,原理,怎么调整类顺序,怎么找到为启动所需要的类
5)类预加载,类加载过程去掉预检验
3、应用被安装了但从未启动过,如何给它发送push消息,让用户打开应用?
4、插件化动态换肤原理,插件资源如何加载,图片命名一样,怎么区分?一个类可以有两个Resources么?
5、泛型擦出是在哪个阶段被擦出?运行时怎么获取到泛型类型?为什么被擦出了还能在运行期间获取到?泛型信息保存在类结构的哪个区域?gson解析时是如何获取泛型类型?怎么获取泛型数组的?
6、flutter为什么要用skia引擎渲染,有什么好处?dart vm了解么?组件是有状态的还是无状态的?
7、组件间通信,路由合并是怎么合并的?如何实现组件间通信?serviceloader了解么?
8、hprof的文件结构了解么?当上传到服务器特别大,该如何对其进行裁剪?hprof文件怎么分析,有没有什么工具能快速找出大对象或是重复对象?
9、art和dalvik区别,android7.0有什么特别
10、图片在不同的android版本上,分别分配在哪个区域?
11、https的握手过程,tcp的三次握手和tls的四次,证书是怎么检验的?
12、okhttp责任链模式优点?连接池复用是怎么复用的,依据什么规则来判断一个连接是否可以复用?连接池清理是怎么清理的?弱网优化?
13、http2优点?QUIC是什么,Cornet有什么优点?
14、select epoll poll的区别
15、Activity.onCreate中通过handler. post可以获取到view的宽高么?通过view. post可以获取到图片宽高么?他俩有什么区别?
16、retrofit的动态代理用来干什么?
17、eventbus的实现原理?它有哪些缺点?
18、fresco和glide的区别?fresco的内存缓存原理?为什么需要保存未解码的图片?什么情况下会往未解码的缓存中放?Imagepipeline的实现了解么?glide线程池怎么设计的?
19、线性布局和约束性布局有什么区别?约束性布局为什么需要测量两次?线性布局添加weight属性计算宽高的规则?为什么需要测量两次?
20、view绘制原理,SurfaceFlinger Choreographer WindowManager Window WindowManagerService
21、Activity的启动流程?ActivityThread, ActivithThreadProxy, ActivityManagerService, ActivityManager, ApplicationThread, ApplicationThreadProxy等区别
22、pkms为什么每次都扫一遍应用,而不读磁盘?apk安装后,是如何解析的?apk有什么作用?
23、插件化有哪些框架,原理是什么?
24、一个应用最多可以创建多少个线程,怎么确认创建线程不会使应用发生OOM?
25、系统启动流程?
26、JetPack有哪些组件?
27、MVVM, MVP,MVC的区别?
28、约束性布局为什么要测量两次,线性布有weight属性,是怎么测量的?
Java相关的
1、new一个对象的流程,类的加载流程
2、死锁的条件,怎么预防死锁
3、垃圾回收机制,分代回收机制,内存模型,GC Roots等
4、六大设计原则
5、NIO, IO,OKIO, 线程池,线程安全
算法相关
1、链表逆序
2、判断两个链表是否相交,怎么找相交结点
3、字符串中单词逆序
4、二叉树怎么找到每一层最右边的节点
5、一个很大很大的文件存储的是整数,怎么计算这些整数的和,要考虑越界,考虑内存
6、求一个整数里包含多少个1
7、从一个相对有序的数字里,找到次数超过一半的那个数
8、KMP算法,求某个字符串是否是另一个字符串的子串
9、给定一个字符串,返回其所有可能的全排列
10、找二叉树两个结点的最近公共祖先
11、链表部分逆序,K个一组翻转链表
12、手写LRU Cache算法
13、数组转成二叉树,堆排序
其他
1、设计一个照片云同步系统,需要考虑哪些方面,包含哪些功能,包括哪些模块,怎么设计?用什么组件?怎么同步?
2、设计和架构的区别?
3、如果有工作需要另一个组帮忙,但这项目工作对另一个组没有任何利益,该如何处理?
4、大前端和原生,怎么看?
5、在XX公司技术上最大的收获是什么?
6、你的计划和目标是什么?