Android开发

2021年互联网大厂Android面经总结,一篇文章帮你解答

本文主要是介绍2021年互联网大厂Android面经总结,一篇文章帮你解答,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
## 闭关刷题 以前在网上找技术博客,不成体系的学习效果真的太低了,经常因为信息过多,还有信息不准确而耽误时间,很容易就分心了。 后面除了跟视频学习,就是一直在刷这套1307页Android 面试全套真题解析。 ![](http://www.www.zyiz.net/i/li/?n=2&i=images/20210704/1625409728156260.jpg) 这份资料是真的帮到了很多,内容全面,覆盖率比较高,省去了很多时间和精力。 ## 面试 前面面了贝壳找房和网易,都通过了,虽然最后没有谈好,但是有了一些信心。后面让朋友帮忙内推了腾讯,三面顺利拿下offer,薪资是28K,相比于上一份工作上涨了15K。 **这里主要放腾讯面经** **一面** 0、说说做过的项目(差不多包括了自我介绍) 说一下我表达的重点:我做了AndroidQ的适配;我在项目中使用了新的技术:LiveData、BiometricPrompt;我使用到了设计模式:工厂、简单工厂、单例;我在不断优化我的代码;我关注Google开发者大会 1、问上一份工作 抓着工作中的技术点问了很多,然后后面问题的差不多都是来自这里面。 2、EventBus和回调的对比。有没有其他办法可以解决类之间的耦合性。 说了LivaData,但其实差不多。老老实实说不知道了…… 现在想了想,这个题目那份资料里面好像也有提到过,但是……我没记住!!! 3、ListView和RecyclerView的比较,ListView没用了吗? 说了实现效果,代码、缓存方面、ViewHolder的差异,讲了一下RecyclerView在多个Fragment中有相同Item时的优越性。 ListView这个问题问到我时我差点没笑出来……我看了微信团队对于卡包界面是否要更新为RecyclerView的一篇文章,建议背诵全文…… 4、Service和AsyncTask对比。 因为AsyncTask由于不使用匿名内部类方式很可能出现内存泄露问题,所以自己不使用,基本都是开线程池。然后面试官问AsyncTask底层,也就说了一下handler+线程池。 现在回想,有这么几个点:生命周期方面;消息传递方面;底层实现方面。 5、线程通信机制。 handler、信号量、互斥量、临界区管理synchronized之类的、共享变量volatile。 6、Android进程通信机制。 AIDL、Binder、共享文件。 前两个没啥说的了,老特长了。 说一下共享文件,这个我本来觉得很low,但是最近研究SharedPreference的时候,发现如果APP签名一样的话,可以使用同一个SharedPreference,所以也就说了共享文件。我不是想表达我用共享文件作为进程通信方式,我只是想说我了解SharedPreference。 7、ArrayList和Vector对比……不会Vector,那么ArrayList和LinkedList对比。 底层,数组,链表。扩容问题,我概括了一下所有的集合类的扩容方式都是装载因子+当前容量+需要扩容容量。 我说线程安全的List有CopyOnWriteArrayList,但是面试官没有往下问。 8、为什么扩容很多情况下都是扩容为两倍? 这个不会,但是说底层代码很多情况下扩容都是移位操作进行的。可能和查询相关? 9、HashMap和HashTable对比,ConcurrentHashMap。 HashTable不是Map,HashTable是Dictionary,而且锁的时候是锁数组,并发的粒度很大。 ConcurrentHashMap用的是分段锁而且有一个:判空+判相等+CAS+synchronized的一个锁的过程,所以很强大。 10、CAS相关。 11、知道优先级反转吗? 不知道……回去研究去…… 12、TCP三次握手四次挥手。 主要思路是通过SACK和全双工来整体讲解。 13、代码,如何判断两个链表是否相交 。 我最开始想成了找到第一个相交结点,然后说了思路,面试官说有没有更好的。然后直接判断最后一个结点是否相等。面试官说如果有环呢,那只能用HashSet存一下了。 14、反问。 问了下面试官是什么事业群。 说是PCG平台,感觉自己应该是被PCG捞起来了。 后面就问了一下公司的一些不疼不痒的问题。 **总结** 整体答得还可以,就是以为是2点面试,结果3点30才面上,可能是我记错时间了。状态没有调整到最好。 **二面** 0、自我介绍。 1、hashCode和equals方法。 2、HashMap,hash冲突解决,红黑树相关。 3、String、StringBuilder。 面试官问String的加法 ``` String a = "a"+"b"+"c"; StringBuilder sb = new StringBuilder(); a = sb.append("a").append("b").append("c").toString(); ``` 这两者效率差别,我说没差别啊,第一种String的加法被编译器优化成第二种,他不信我……不过还好,最后达成共识面试官面试完自己去查。 现在复盘觉得面试官应该想问的是这种情况: ``` String a =""; a+="a"; a+="b"; a+="c"; ``` 我还是对的。 4、wait、notify。 问是不是只能在有锁的情况下wait和notify。 [图片上传失败...(image-1692c4-1602502611210)] 5、线程间通信方式。 handler那一套。 6、快排原理,最好情况和最坏情况时间复杂度。 最坏情况逆序n**2,顺序情况我的算法还是nlogn,问了优化思路。 7、算法题, ![image](http://www.www.zyiz.net/i/li/?n=2&i=images/20210704/1625409728619819.jpg) 用了贪心没ac,面试官提示快排,没想明白…… 8、思考题,如果我想将一颗二叉树存入文件,怎么样的格式存储可以使得读取效率最高。 这题是个开放讨论题,和面试官一直在讨论怎么做。 【当时以为自己凉了,没想到顺利收到了三面的通知】 **三面** 0、自我介绍 1、实习工作深挖 2、RePlugin原理深挖,其他插件化框架对比 3、为什么要选择RePlugin框架 4、你觉得自己对于Android掌握到了什么地步 5、看过什么源码 6、你为什么要看源码 7、你为什么要写博客 8、知道哪些著名开源框架 9、什么是进程,进程调度算法 10、什么是线程 11、你觉得什么是JVM 12、有哪些线程同步算法 13、死锁是什么,举个例子 14、Object有哪些方法 15、Java异常有哪些,Error和Exception区别 16、OSI七层模型,TCP、UDP是哪一层,应用层有哪些协议 17、如果要设计一个大量图片下载的方法,如何确定并发量,有哪些指标。 18、APP间传递消息安全吗?要怎么做才能安全呢? 19、广播怎么分类 20、自定义View重写的关键有哪些,onLayout和onMeasure区别 21、Android有哪些动画,MotionLayout讲一下。MotionLayout使用场景。 22、Activity四种启动模式,SingleTask和SingleTop的使用场景 23、一些Framework层的问题,不太会所以记不得了。 当时收藏一位B站UP主的视频,有需要可以去看一下 24、你为什么想了解Framework层知识。 25、算法题。 ![](http://www.www.zyiz.net/i/li/?n=2&i=images/20210704/1625409728550237.jpg) 26、你对于我们的Offer的态度 27、闲聊 ## 最后 Android学习是一条漫长的道路,我们要学习的东西不仅仅只有表面的 技术,还要深入底层,弄明白下面的 原理,只有这样,我们才能够提高自己的竞争力,在当今这个竞争激烈的世界里立足。 **人生不可能一帆风顺,有高峰自然有低谷,要相信,那些打不倒我们的,终将使我们更强大,要做自己的摆渡人。** **我把自己这段时间整理的Android最重要最热门的学习方向资料放在了**[我的GitHub](https://github.com/a120464/Android-P7/blob/master/Android%E5%BC%80%E5%8F%91%E4%B8%8D%E4%BC%9A%E8%BF%99%E4%BA%9B%EF%BC%9F%E5%A6%82%E4%BD%95%E9%9D%A2%E8%AF%95%E6%8B%BF%E9%AB%98%E8%96%AA%EF%BC%81.md)**,里面还有不同方向的自学编程路线、面试题集合/面经、及系列技术文章等。** 资源持续更新中,欢迎大家一起学习和探讨。
这篇关于2021年互联网大厂Android面经总结,一篇文章帮你解答的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!