- 让你写脚本清理无用代码,如何避免清除掉反射部分的代码?
- 图片压缩到什么程度呢?有了解过具体的量化规则吗?
- 微信资源压缩具体是怎么压缩的了解吗?
**Q4:**当apk压无可压的时候,了解插件化、补丁这些吗?
**A:**补丁不太了解,只知道一些热修复的使用。
**Q:**热修复怎么用?
**A:**我们基于美团Robust热修复,就是在要修改的方法前加注解@Modify,或在方法里面第一行,代表该方法要进行修复。
**Q5:**了解动画有几种吗?
**A:**帧动画、补间动画和属性动画。
**Q6:**大图OOM这部分怎么做的?
**A:**基于Glide库,在加载到内存前进行一次压缩。当时的情况,调inSampleSize等,控制在一定范围内,提及freeMemory等。
**Q7:**代码重构的部分做了什么?
**A:**比如将底部面一些提示抽取成Wrapper或FooterView等,主要是界面级别的。
**Q8:**看你写了EventBus,了解EventBus的原理吗?
**A:**原理不是很了解,知道基本的使用方法,register和unregister等。
**Q:**知道事件处理的几种模式吗?
**A:**注解的方式标注,有四种处理模式。POSTING MAIN BACKGROUND 和ASYNC,默认是POSITING。(每个的处理线程说了一下。)
**Q9:**TCP协议如何进行优化?
**A:**滑动窗口、延迟回复、捎带回复等。
**Q10:**进程和线程的区别是什么?
**A:**进程是资源分配的最小单位,线程是任务调度的最小单位。
**Q11:**你主要用Java还是Kotlin?
**A:**前面用Java,C公司的APP编写用了Kotlin。
**Q12:**了解类加载的过程吗?
**A:**不知道 o(╥﹏╥)o(回去默默复习)
**Q13:**觉得Kotlin比Java的优势在哪?
**A:**链式调用对程序员非常友好。
**Q14:**做个题,有一个大文件里面有10亿个整数数字,乱序且不同,找到中位值?
**A:**乱答了一通,说不想排序 balabala说了一堆废话,宛如一个智障。
**Q15:**你的家乡和学校都在北方,为什么要来深圳啊?
**A:**我喜欢有海的城市
**Q:**喜欢…海… 行
**Q16:**你有什么要问我的问题吗?
**A:**请问您是什么业务组的?
**Q:**xx业务组。还有其他问题吗?
**A:**请问一下最后一个找中位数的题,您有什么比较好的方法呢?
**Q:**我一般不在面试时做回答。
**A:**好的,没有问题了,谢谢。
###3.25 19:40 二轮面试 - 视频面 ,40分钟
(3.25 9:15 打电话确认时间
我真的是,差点自己错过面试机会。面试通知是通过微信公众号的方式推送给我的,在这里面并没有面试链接,我以为到时间会再有推送,结果什么都没有。19:45面试官给我打电话,问我为什么没有进入考场,我说我不知道地址在哪。o(╥﹏╥)o被自己蠢哭了。面试官说那就用qq视频吧,然后开了一个qq共享文档。其实会在邮箱里面有面试地址,请留意。
**Q1:**写一段会造成死锁的代码。
**A:**写。
**Q2:**写一个重排列的算法,返回一个与输入最接近的、并且比它大的结果,没有就返回-1,输入为字符串,输出为整型。如输入“1234”,应返回1243,输入“4321”,返回-1。
**A:**写。
**Q:**从代码健壮性的角度,会不会有什么异常。
**A:**String转Int,substring等。
**Q3:**想一个问题,假如有一个表情库,每个表情都有名字(字符串表示),用户每次输入需要与库中某一表情名字完全匹配才向服务器请求相应的表情。如何存储这个表情名字库?
**A:**我比较想用一个数组存每个字的笔画数,匹配的上,再匹配两个String是否相等。
**Q:**为什么不用HashMap呢?是怕有陷阱吗?
**A:**啊,不是。我没想到HashMap。
Q:(笑)那你想想能不能用HashMap呢?
**A:**如果多线程可能会有线程不安全的问题。
**Q:**如果确定是在单线程呢?
**A:**应该可以。
**Q:**那它的内存占用情况是怎样的?
**A:**要量化到具体单位这种吗?
**Q:**不用,就是可能引起怎样的内存问题?
**A:**可能刚超过一点,内存就要翻倍。
**Q:**怎么优化呢?
**A:**优化哈希碰撞的算法,提高载入因子。
**Q:**还有什么呢?存储的名字怎么优化呢?
**A:**想了一会没想出来,encode处理?
Q:其实常用的就那么些字,Unicode编码范围很广,我们可以对常用的汉字进行重新编码存储。
**Q4:**还有什么要问我的问题吗?
**A:**没有了。谢谢,辛苦了。
###3.26 19:30 三轮面试 - 视频面,2小时… …
(没有电话确认,3.26 14:18 直接公众号推送
19:40面试官还没有进来,给总部打电话确认,刚接通面试官就进来了,说刚才有点事耽搁了,表示抱歉,就开始面试了。
**Q1:**简单介绍一下你做过的项目吧。
**A:**介绍。
**Q:**你上一个公司在深圳也有分部啊,你实习那么久了怎么没有留下来。
**A:**在上一个公司收获真的非常多,但还是想试试。
**Q:**行吧,就是想试试看是吧,好,先开始吧。
**Q2Q3Q4:**与一面Q3、Q6、Q7类似
**A:**回答也类似
但被微怼
你这个网上都能查到资料
这个网上没说,但官方文档里面总有吧?
为什么要用微信资源压缩?gradle配置里面不是有自带的吗?
图片压缩有具体的标准吗?你那些不都是经验值吗?
**Q5:**图片缓存怎么做?
**A:**三级缓存。(具体的三级说了一下)
**Q6:**内存级别缓存多少比较合适?
**A:**几十兆?
**Q:**为什么?不同手机这个值一样吗?
**A:**不一样。又是经验值。o(╥﹏╥)o
**Q7:**每个线程都可以创建Handler吗?
**A:**主线程可以直接创建,子线程要先创建Looper。
**Q:**Looper是干什么的?
**A:**从MessageQueue里面循环取消息,交给Handler进行处理的。
(这是唯一一个答完没有被怼的题啊,我一个暴哭)
**Q8:**了解常用设计模式吗?
**A:**常用的就是Builder、单例和Adapter。
**Q:**什么时候用Builder?好处是什么?
**A:**构造参数特别多、又非必须的时候,提升代码友好度。
**Q:**Adapter怎么用的?
**A:**常用的是数据的处理,还有平时的RecyclerView里面也用到了这个模式。
**Q9:**有什么我没问到的,但你觉得挺有挑战的事吗?
**A:**apk瘦身那次,我本来什么都不懂,后来慢慢学习,(强调自己很刻苦balabala的)终于完成了。
**Q:**这也没什么啊(小声嘟囔)
A:(⊙x⊙;) 行
**Q10:**写一个题,牛客网的环境。小明发现了一个自增数组,就是说每次操作能让数组中的一个元素+1,问至少操作多少次,可以让数组中的每个元素不一样?输入为两行,第一行代表数组长度,第二行代表数组中每个元素的值。数组中值的范围为-10000<=X<=10000。
如输入
5
1 2 3 2 5
应输出
2
**A:**思路是先排序,遇到与前一个数字一样的,边+1边后移,找到第一个大于该值的就插入,期间的元素依次左移。
**Q:**行,写吧。
**A:**有的用例对,有的不对。
找bug,面试官跟着一起找。
**Q:**其实没必要排序,可以用HashMap做。你还要把你的代码写完吗?
写,找bug,改,还是没出来。。。
**A:**我可以试试您说的方法吗?
**Q:**想清楚就可以写。
**A:**写。
运行,对了。
**Q:**行吧,其实输入格式还有点问题,但时间差不多了,回去多写写代码吧。可能也是这个环境没法调试,所以改起来不好改。
**A:**好
**Q11:**你现在是在北京上学吗?为什么要来深圳?
**A:**是我和我男朋友讨论之后共同决定的。
**Q:**哦,男朋友在这边是吗,行吧。那今天先到这里吧。
**A:**好的,谢谢,再见。
###3.29 18:27 HR面 - 电话面,15分钟
(没有电话确认,没有公众号推送
那天北京风嗷嗷的刮,我走在学校主干道上。
**HR:**自我介绍了之后问,现在方便吗?
**A:**方便。
**HR:**可以做个自我介绍吗?包括教育经历、校园经历、实习经历、参加大赛情况和家庭情况。
**A:**好的。
(刚说两句… 大风还是嗖嗖的)
**HR:**同学,你那边有点吵。
**A:**不好意思,我这边风确实有点大。我马上就走到实验室了,您可以10分钟之后打来吗?
面试复习笔记:
这份资料我从春招开始,就会将各博客、论坛。网站上等优质的Android开发中高级面试题收集起来,然后全网寻找最优的解答方案。每一道面试题都是百分百的大厂面经真题+最优解答。包知识脉络 + 诸多细节。
节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习。
《960页Android开发笔记》
《1307页Android开发面试宝典》
包含了腾讯、百度、小米、阿里、乐视、美团、58、猎豹、360、新浪、搜狐等一线互联网公司面试被问到的题目。熟悉本文中列出的知识点会大大增加通过前两轮技术面试的几率。
《507页Android开发相关源码解析》
只要是程序员,不管是Java还是Android,如果不去阅读源码,只看API文档,那就只是停留于皮毛,这对我们知识体系的建立和完备以及实战技术的提升都是不利的。
真正最能锻炼能力的便是直接去阅读源码,不仅限于阅读各大系统源码,还包括各种优秀的开源库。
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门,即可获取!
源码,只看API文档,那就只是停留于皮毛,这对我们知识体系的建立和完备以及实战技术的提升都是不利的。
真正最能锻炼能力的便是直接去阅读源码,不仅限于阅读各大系统源码,还包括各种优秀的开源库。
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门,即可获取!