腾讯Android开发面试记录
没有再提炼了,全是原汁原味的对话,有帮助的话就最好啦~
3.22 12:00 投递简历,总共3轮技术面+1轮HR面
3.23 15:30 一轮面试 - 电话面 ,40分钟
(3.22 22:15打电话确认时间
Q1:你简单介绍一下自己吧。
A:我大三开始接触Android开发。之后有三段实习经历,大四有半年在A公司的APP进行开发,主要负责2个任务,分别是xxx和yyy。之后研一有两个月在一个B公司进行APP开发,主要完成xxx yyy和zzz功能。最近一年在C公司进行APP的开发,负责xxx yyy和zzz等功能。
Q2:你在C公司的实习情况是怎么样的呢?比如是全职,还是一般一周去三天左右的?
A:全职。
Q3:我看你有写apk瘦身的部分,可以介绍一下是怎么做的吗?
A:图片保留3x、Lint清代码、图片压缩、微信资源压缩、xml中api大于21的抽取style
期间细致的问:
- Lint清代码如何处理反射的部分?
- 让你写脚本清理无用代码,如何避免清除掉反射部分的代码?
- 图片压缩到什么程度呢?有了解过具体的量化规则吗?
- 微信资源压缩具体是怎么压缩的了解吗?
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分钟之后打来吗?
HR:好的,稍后联系。
(15分钟后,电话再次响起)
HR:你好,现在可以了吗?
A:可以了,刚才不好意思。
HR:好,那还是请你先自我介绍。
A:介绍。
HR:家里还有兄弟姐妹吗?
A:没有,是独生子女。
HR:哦,那我看你家庭和学校都在北方,不留在北京,来深圳没问题吗?
A:嗯,我觉得北京和深圳对我来说都一样,但是我和我男朋友之后都会在深圳发展。
HR:男朋友也是一届的同学吗?
A:比我大一届,他已经在深圳了。
HR:不会是我们公司吧?
A:是的。
HR:啊,我就随口一问,他是哪个BG的呢?
A:xBG。(反正和我面的不是一个)
HR:那什么时候能来实习呢?
A:7月-8月。
HR:坦白讲,你的实习时间有点短,来了之后还有培养周期。包括后面能否转正肯定也会参考,还是希望早些来。不过主要肯定还是看个人能力和产出。
A:我明白您说的。我能保证的是7月入职,如果可以,肯定也想尽早。
HR:好的,那我这边也说一下。专业面和HR这边面试反馈都还是不错的,一周之内会给到offer。还有什么其他问题吗?
A:想再跟您确认一下,是xx业务组吗?
HR:是的。
A:好的,谢谢,再见。
4.2 16:44 录用信息确认,2分钟,3小时之后发录用通知函
❤Tips❤
- 随时做好面试准备
- 视频面试的时候找到一个安静的环境
- 面试开始前提前进入考场链接,测试摄像头与耳机
- 开着本地IDE,方便调试,之后粘到牛客
- 不要小看HR面试,会挂人
自我总结:
其实自我感觉前两面都表现的比较满意,三面就有点没那么顺利了。包括整个回答问题的气氛、还有面试官给到的反馈,尤其算法题那么久没做出来,我内心确定已经凉了。不过想到之前学姐嘱咐的话 “永远不要放弃思考”,就一直坚持写完了。
两个小时,没有一丝慌乱,我的心理素质比以前好太多了,这个是让自己比较惊喜的地方。可能是我的心态打动了三面的面试官?谁又说得准呢。出现不会的问题可太正常了,一定要让自己稳下来。另外,四次面试,三次都提及了为何选择深圳的问题,可见稳定性也是一个重要的考量,谁也不想费心费力培养了那么久最后没留下来吧。总体来说我觉得自己的还是比较幸运的,我准备的很多都问到了,不会的就是真的不会。希望大家也能一样幸运~
最后在文末放上我自己整理出来的一份更详细的面试资料和关于安卓学习的思维导图提供给大家参考下,毕竟学习还是需要一个准确的方向的,才能使学习更有成效。