上半年面试(扑街)经验总结 | 掘金技术征文

2020-10-15 10:19:27 浏览数 (1)

今年面试感觉好难啊,是不是我太菜了。

给大家上点菜。

Java基础

  1. java 内存模型 答案传送门
  2. 类的生命周期 答案传送门
  3. gc root 以及垃圾回收算法 答案传送门
  4. 字节码相关 INVOKEVIRTUAL INVOKESPECIAL INVOKESTATIC之间的区别 INVOKEVIRTUAL调用类的方法 INVOKESPECIAL 调用父类 INVOKESTATIC 调用静态方法

数据结构

  1. 聊聊红黑树 答案传送门
  2. 聊聊哈希桶

网络

  1. https 流程以及原理 这是我觉得写的最好的https流程
  2. tcp 三次握手

gradle相关

  1. gradle 编译流程以及原理
  1. 混淆的时机,以及混淆的原理是什么 时机是在transform完成之后,要拆开R8之前和R8之后两种处理逻辑。
  2. aspectj gradle plugin 之间的区别 以及 plugin的增量编译 自己给自己开个传送门

安卓

  1. 描述下事件拦截机制
  2. hanlder 机制
  3. ui卡顿 卡顿的原因 如何监控
  4. 热修复的原理是什么
  5. 聊聊组件化
  6. ndk 有没有写过(肯定没写过啊)
  7. sharedperfence原理 commit apply之间的差别 如果写入失败了会怎么样
  8. 如何做包体积优化,如果让你做dex包体积优化你会怎么做 自己给自己开门
  9. apt 和gradle transform的差别是什么 apt生成的是java的class,而且不能更改原始的类,而transform这个东西你可以为所欲为,但是毕竟操作的是字节码,风险系数更高,面试官还特地问了我下是不是有classnotfound问题,其实貌似真的发生过,但是想想感觉有些丢人没敢承认,毕竟有点一知半解。
  10. .class .java .dex之间的区别是什么 吐了,虚拟机什么的我面试的时候都给忘了。哎,太难了。.java是给开发看的,.class是给机器看的,而.dex是给安卓虚拟机看的。当然这边更多是想问安卓虚拟机相关的,反正答的稀烂
  11. okhttp 的拦截器机制 如果让你监控网络请求的耗时你会怎么写 把责任链说了,写了关键字得分了,面试官也没继续往下问,其实还是可以聊聊dispatcher什么的,okhttp的源代码说实话有点深。
  12. kotlin 协程和java的线程有什么区别
  13. 启动优化是如何做的 我个人拙见哦,启动的东西要么延迟,要换缓存。时间轴总长其实比较难以优化,我们参考的是阿里的starup的任务图模式。
  14. 如何只拉起推送进程而不拉起app的进程 死亡题目,完全不知道答案,有没有哪位老哥知道的 给我点思路啊。
  15. TraceView 和 Systrace直接的区别 哈哈哈 之前看过 然后忘了 这种东西一阵子不用吧就真的会忘掉

算法

  1. 无序数组中取出缺失的数字

项目经历相关

剩下来的就是和项目经历相关的啦。

  1. 主要是做了一些项目包体积的优化,因为项目内有很多历史债务的图片,所以能优化的数量级还是比较大的。所以还是做出了一些成绩的,自己写了个python的命令集可以帮助项目快速的去把当前工程内的图片进行一次压制。
  2. 其次就是优化了下启动速度,主要的方案还是参考阿里系的,讲启动任务task化,然后通过graph的方式将执行顺序排列好,之后使用多线程以及countdownlaunch去完成同步,不需要锁死application的延迟。
  3. 因为要推进一部分代码演进以及重构,所以需要有个工具快速去帮各业务去定位需要改动的点,所以我这边通过自定义lint的方式去把需要更改的类做了一次标识。可以去看下我的另外一篇文章
  4. 将一些中间件给抽取了出来,以便后续更新优化等等,比如路由,图片库等等。
  5. 对项目内的post的请求做了一次cache的优化,通过annotation retrofit的方式标识当前api是否可以进行缓存。
  6. dns 的二次缓存,由于运维设置的ttl时间过短,而且域名实在太多了,所以做了一次下发缓存以及策略的优化。
  7. 剩下的就是一些和业务相关的了,这里就不多废话了。

结尾

今年面试我的看法就是真的好难啊。要准备基础还要刷算法题,不仅问安卓,还要问jvm虚拟机,顺便问问并发,还要会kotlin,最好还能来个flutter,给各位跪了。

0 人点赞