写点什么

Android 面经:入职网易的那一天,我哭了,狂刷 200 道数据结构与算法

用户头像
Android架构
关注
发布于: 2021 年 11 月 05 日

前期准备和知识点

一般外地的面试,前几轮都会选择电话面试的方式。所以大家约好时间后,请记得到时候一定要腾出时间,找个安静的地方,放松心情专心接面试的电话,耐心的听完面试官的问题,快速仔细的分析题目想考的知识点,再结合自己的理解回答面试官的问题。


在面试前,需要给自己定制一个学习计划,一些基础的必问的知识点需要牢牢的记住,我稍微例举下一些常考的问题:


1、网络通信方面,一些基础的协议概念。比如 TCP 的握手挥手问题,Http 和 Https 的区别以及 Https 传输过程中用到的加密方式,Http1.0、Http2.0 和 SPDY 之间的区别,Http2.0 做了哪些优化等。


2、Java 方面的一些基础问题,比如 HashMap 的原理以及 HashTable 的区别、Android 方面的 SparseArray 的实现、ArrayList 和 LinkedList 的实现原理等等。


3、线程方面的,比如线程的同步机制、线程的几种状态、锁和 volatile、线程池的使用和管理、甚至到 AsyncTask 的源码以及在不同版本的变化。


4、Jvm 虚拟机这一块的内容,比如执行过程、JMM 模型、java 的 Gc 回收原理、类加载器等等。


5、数据结构和算法方面,这个没什么好讲的,就是拼基础,把基本的数据结构和数组字符串方面的算法多刷一刷,毕竟面试一般面不到太难的,强烈推荐去 leetCode 刷题,每天限定任务必须完成多少。


6、Android 方面基础知识点,就是四大组件。关于 Activity 的启动流程和启动模式可以说是必须掌握的,中间牵扯到进程间通信,所以关于 binder 跨进程通信这方面的知识点也是需要深入了解。


7、Android 的 Handler 可以说是 Android 通信的核心,所以关于这块的原理简直是基础必备。但是需要注意的是 Handler 中有牵扯到 ThreadLocal 的使用,所以关于 ThreadLocal 也需要看和理解下。还有 HandlerThread 和 IntentService 的使用等等。


8、对于系统服务的了解,比如 ActivityManagerService、WindowManagerService 和其他各种系统服务的过程,多了解多加分。关于跨进程通信 binder 这块的知识点建立在理论上的会比较多,但是别担心,可以在理解了一遍之后去看 AIDL 服务,根据 AIDL 可以更好的理解 binder 的使用。


9、还有就是关于 View,比如自定义 View 的绘制,SurfaceView 的原理,view 的 onMeasure、onLayout 和 onDraw 的方法执行意义等。还有关于手势事件的分发机制和滑动冲突的处理。其他的一些系统常用控件的源码分析也很必要,比如 ListView 和 RecyclerView 的区别缓存机制、viewPager 的页数缓存实现原理等等。


10、剩下的基本功就是性能优化方面了,各种死丢丢(AS)工具的使用比如 Android Profiler, Lint,查看 ViewTree 啊,还有 MAT 啊,LeakCanary 啊(这个的实现原理能搞懂最好)等等。布局的优化和内存泄露的查找,大图片的处理。对了,还有图片的处理和图片框架的缓存原理包括 LruCache 的实现原理,和 DiskLruCache、列表的优化方案等等。


11、然后就是关于你项目中使用到的一些开源库,关于你用到的开源库,一定要深入到源码去理解其中的实现方案。我拿 Retrofit 打比方,大概需要掌握到的深度是 Retrofit 的设计风格、Restful Api 的概念、Retrofit 核心实现方式动态代理,优缺点(比如动态代理不能代理抽象类,和用到了反射),如何优化(比如 CgLib,和依赖注入的方案)。这个其实就是考核你对技术的研究深度到底到什么程度。所以你项目中使用到的技术一定要深入了解,大厂是不需要知其然不知其所以然的人。


12、关于数据库,分享一个失败的案例,就是我个人曾经把 ORM 的概念搞混淆导致被刷掉,这个是人生中的奇耻大辱,特此记录。


13、关于项目开发的整体架构的理解,比如 MVC、MVP 和 MVVM。关于市面上主流的插件化和组件化开发的设计思想和实现方案的理解等。


14、此外,如果你会一些其他的开发方式或语言也会加分不少。比如 Kotlin,Js,ReactNative 或者 Weex 等等。


《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》
浏览器打开:qq.cn.hn/FTe 免费领取
复制代码

面试的具体思路

一般面试官都会让你先来个自我介绍,可以介绍下自己的学习经历和工作经历。在项目中担任的角色和从事的工作。然后会侧重点让你讲一个你的代表作和用到的技术,然后根据你讲的技术对你深挖。也会问到你项目中碰到的难题和问题是如何解决的,这个就是考验你解决问题的能力。最好可以提前准备好一两个经典的案例到时候好有的讲。


其次就是沟通过程中不要太紧张,尽量让自己充分的思考,把自己所会的和能联想到的用较好的表达方式告诉面试官,让面试官可以走进你的思考方式中。一个拥有好的沟通和表达的程序员会更加受到面试官的喜爱。


你的职业规划和想法

如果你的职业技能满足了面试岗位的需求,剩下的面试官会关注你对自己的职业规划和想法。切记不要好高骛远,一山更比一山高。


我觉得低调做人高调做事更符合我们程序员的性格,对技术的渴望和追求不断提升自我才可以让你在这个专业领域走的更远。最后衷心祝福大家找到好的归宿。

面试前复习路线

1.梳理知识


一般的面试,会被问到 JVM 原理、Android 基础、四大组件和热修复等内容,这都是一名普通 Android 开发人员的知识结构,那么肯定是需要具备更多的知识树,需要掌握更全面的知识体系,所以就需要对知识进行一个系统的梳理了。


一、基础技能:




用户头像

Android架构

关注

还未添加个人签名 2021.10.31 加入

还未添加个人简介

评论

发布
暂无评论
Android面经:入职网易的那一天,我哭了,狂刷200道数据结构与算法