写点什么

Android 面试题集锦在这里,Android 开发面试基础

发布于: 刚刚

闭关刷题

以前在网上找技术博客,不成体系的学习效果真的太低了,经常因为信息过多,还有信息不准确而耽误时间,很容易就分心了。


后面除了跟视频学习,就是一直在刷这套 1307 页 Android 面试全套真题解析。



这份资料是真的帮到了很多,内容全面,覆盖率比较高,省去了很多时间和精力。

面试

前面面了贝壳找房和网易,都通过了,虽然最后没有谈好,但是有了一些信心。后面让朋友帮忙内推了腾讯,三面顺利拿下 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、算法题,



用了贪心没 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、算法题。



26、你对于我们的 Offer 的态度


27、闲聊

尾声

最后,我再重复一次,如果你想成为一个优秀的 Android 开发人员,请集中精力,对基础和重要的事情做深度研究。


对于很多初中级 Android 工程师而言,想要提升技能,往往是自己摸索成长,不成体系的学习效果低效漫长且无助。 整理的这些架构技术希望对 Android 开发的朋友们有所参考以及少走弯路,本文的重点是你有没有收获与成长,其余的都不重要,希望读者们能谨记这一点。


这里,笔者分享一份从架构哲学的层面来剖析的视频及资料分享给大家梳理了多年的架构经验,筹备近 6 个月最新录制的,相信这份视频能给你带来不一样的启发、收获。


Android 进阶学习资料库

一共十个专题,包括了 Android 进阶所有学习资料,Android 进阶视频,Flutter,java 基础,kotlin,NDK 模块,计算机网络,数据结构与算法,微信小程序,面试题解析,framework 源码!



**本文已被[CODING 开源项目:《Android 学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》](


)



收录**


最后自我介绍一下,小编 13 年上海交大毕业,曾经在小公司待过,也去过华为、OPPO 等大厂,18 年进入阿里一直到现在。

深知大多数初中级 Android 工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此也是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

用户头像

还未添加个人签名 2021.10.19 加入

还未添加个人简介

评论

发布
暂无评论
Android面试题集锦在这里,Android开发面试基础