写点什么

两年 Android 开发三面上岸腾讯,这些核心知识点建议收藏

发布于: 2021 年 11 月 07 日

2.Handler


1.内部原理。Handler 必会的啊,android 的消息机制,可以称为 android 程序的引擎来的。


2.同步屏障。涉及到绘制优化、屏幕刷新机制等。


3.阻塞唤醒原理。这里一般是会问为何 loop()方法是死循环却不会占用 cpu 时间片 or 为何 next()方法阻塞却不会卡死。更深一点会问到 Linux 的 IO 多路复用 epoll 原理。


4.卡顿与内存优化。整个主线程的所有任务都必须经过 Looper,是排查卡顿和 ANR 的关键点,以及消息太多会造成的后果等。


5.消息复用。


3.图片


1.计算一张图片大小。分辨率 x 像素点大小,考察得很多次。


2.加载优化。如 LaunchActivity 同时加载的图片太多如何优化、view 的大小比图片小如何优化等。


3.缓存优化。内存缓存、硬盘缓存。


4.Glide 框架。重点就是 Glide 对上面的优化的实现


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


原理,因此需要着重看 Glide 的缓存原理。


5.drawable。对比使用图片和 drawable 的好处,以及 drawable 的原理。


4.SharePreference


  • 内部原理

  • commit 和 apply 的区别

  • 这部分考察得不多,但建议读者可以深入理解 sp 的缺点,如导致 ANR 原理,以及新框架 MMKV、Data Store 的优点。


5.window


考察得非常少,主要 window 的类型、以及 window 的真正定义理解即可。


6.view


  • 事件分发流程。考察得最多,基本把整个分发流程讲清楚就好了;其次还会考察如何解决具体的冲突场景。

  • 应用界面的 view 层级。

  • 绘制流程与时机。activity 启动时到 onResume 方法被调用,view 依旧还未被绘制。


7.IPC


  • 常见 IPC 类型以及优缺点。

  • Binder 机制。优点、缺点、特点、和传统 IPC 比较。Binder 涉及到的很多是偏底层,更多的时候考察的是上层的应用,如和 socket 比较等。

  • socket。这个会重点问,涉及优缺点、使用场景、和 binder 相比等。


8.序列化


serializable 和 parcelable 的原理,以及各自的优缺点、应用场景。


9.jetpack


  • 使用 jetpack 的好处与坏处。

  • 框架原理。这部分如果写在简历也很少问,看面试官;但如果问的话,一般会问原理。


10.okHttp


  • 拦截器以及责任链思想。这个是问的最多的。

  • 内部调度器对线程、任务数的并发控制。

  • 优点缺点,和 URLConnection 相比的好处,诞生的背景等。


11.优化


  • 性能优化。问得很多,主要看自己平时有没有做过优化。

  • 卡顿优化。一般询问如何定位和解决卡顿问题。

  • 内存优化。一般是内存泄露、或者减少内存占用等。

  • ANR。一般会考察原理以及如何解决。

  • 工具:leakcanary、profiler。优化涉及的内容太多,这个属于比较深的内容,还是得看自己平时的项目积累。

Java

Java 的考察是一个非常考验功底的地方,很多的知识点都是基础中的基础,同时又都可以延伸到底层的逻辑。这些知识点在实际的运用中,也有很多的情况需要考虑,考察我们对于知识点的运用。例如线程池,可以从参数作用、到线程池原理、到阻塞唤醒机制、到实际项目的参数配置,有非常多的知识点可以考察。因而这一块就看各位的造诣了。


当然,一些基础或者常考的知识点还是得会的。


1.集合框架


  • HashMap。几乎每家公司都问,主要是内部原理如 hash 算法、冲突解决方案、扩容方案、红黑树的优缺点等。必会的内容,不会就直接当场去世了。

  • HashSet。内部使用 HashMap 来实现,value 设置为 object。记住这个就好了。

  • ConcurrentHashMap。必问。他的并发原理以及好处,同时有些面试官也会问缺点等问题。

  • Hashtable、SychronizeMap。一般和 ConcurrentHashMap 一起问,进行对比。

  • CopyOnWriteArrayList。一般会作为线程安全方法来进行比较优缺点。

  • 集合框架重点还是在 Map,但是其他的框架 List 和 queue 的原理也是要了解的。


2.访问限制符


public protect default private 四个要懂,基础知识了。(笔者就是忽略了这些当时回答错了)特别注意 protect 是可以跨包访问的。


3.类


  • 4 种内部类,特别注意每个 class 编译后都会产生一个 class 文件,不管静态或非静态。面试踩坑了


lambda 的本质。就是匿名内部类。


  • 抽象类和接口的区别。这个很看理解,如果有开发过具体项目的会回答得更加深刻,这是背八股文体现不出来的。


4.异常


异常体系、分类、机制。


与 error 的区别。


5.IO


主要还是问 NIO 的原理以及优缺点。建议把缓冲流的原理也得学一学并进行比较。


6.线程池


  • 内部原理。必会的啊。

  • 关键参数作用及如何配置。重点在如何配置,需要结合具体的机器情况、任务情况等等考量。

  • 线程池的作用。不仅仅只是线程复用,更重要的是管理线程、控制线程数量。这个也比较考察具体的项目运用理解。

  • 常见的四种线程池。


7.并发


  • sychronize。必问,java 的锁机制。特别是 jdk6 之后的锁优化以及运用场景。为什么是重量级的、JVM 层如何实现如果了解可以加分。

  • Lock。必问,AQS 的原理最好懂。一般会拿来和 synchronize 比较。

  • volatile。必问,会拿来和锁比较,他的两个重要作用。更深点会问到 cpu 缓存一致性协议、以及指令重排的类型与原理。

  • CAS。必问,问原理以及 ABA 问题。

  • 死锁。一般询问如何解决或者产生的条件。

  • Object 的 wait 和 notify。阻塞唤醒,一般会用一个代码或者具体的场景来询问如何保证多线程同步。

  • ThreadLocal。原理、内存泄露等


这一块问的还是比较多,而且大都可以深入去问,看自己的学习程度了。


8.JVM


  • GC 机制。必问。

  • 类加载机制。必问,同时还会问双亲委托机制。

  • 方法调用过程。这个也问的挺多,也看对 JVM 的学习程度了。

  • 线程与进程的内存关系。如一个线程占多少内存、一个进程可以开多少线程、一个进程占用多少内存等。

  • 内存分布。JMM、运行时数据区、native 内存分布。很看对 JVM 的理解程度。

Kotlin

kotlin 其实问的很少,现在大部分的项目还是使用 Java 开发的。一些有 kotlin 业务的公司会问,但是问的内容也不多。这一块如果还没学习其实不急的,把 Java 学好才是王道,kotlin 和 java 在原理上,都是互通的。


1.协程


问的是最多的,主要是理解线程和协程的关系、协程的优缺点。这个也看个人的学习程度了。


2.run、let、also、with、apply


注意返回值以及作用域


3.特性的具体实现


如默认参数的具体实现。有了解过最好了,没有的话就联想 Java 是如何实现的,如默认参数可以联想方法重载。

计算机网络

计网这一部分主要还是 HTTP 和 TCP 的内容了,经典中的经典。需要注意的是链路层、网络层的一些协议要了解,也是计算机基础了,被问到不会的话会比较尴尬。其次是一些新的协议如 QUIC、http3.0 等可以了解一下,面试会很加分,同时也可以进一步去理解 TCP 的优缺点。


1.HTTP


  • http 在 android 上的体现并不多,因为大部分的工作都给框架解决了,问的问题其实很少。

  • 历代 http 的优化以及原因

  • 请求方法、响应码


2.HTTPS


必问。一定要会了


  • 原理以及和 http 的区别。加密算法、hash 摘要、ca 证书验证都要了解

  • 建立连接过程

  • 破解:中间人攻击等


3.数据链路层、IP 层


  • ARP 和 RARP 协议

  • NAT 协议

  • DNS


这部分主要问一些常见的协议,考察计网功底,这里列出来的是笔者考察过的,读者需要比价系统地去学习这一块。


4.TCP


  • 握手挥手

  • 拥塞控制

  • 可靠传输原理

  • 缺点以及如何改进。这个是比较重要的,对应 http3.0 的优化就是针对 TCP 的缺点来入手的。

  • TCP 的连接数目上限

  • TCP 非常重要,必问的内容,不会的读者一定要去好好学习一下。


5.UDP


  • 优缺点

  • 和 TCP 比较

  • 应用场景

  • 一般和 TCP 一起出现,询问他们的区别,以及如何通过 UDP 来优化 TCP 的缺点。


6.数据格式


json 的优缺点,为什么要使用 json 而不是 XML。熟记就可以了。

设计模式

设计模式这一块问的不是很多,原因是设计模式需要实际的编码才能去真正理解他的好处。所以大部分情况下面试官都是询问在项目中用了哪些设计模式、或者哪些开源框架用了什么设计模式。其次问的最多的就是三大架构模式了,必会的。


1.常见的设计模式


一般面试官会让我们讲自己认识的设计模式,按照自己的理解讲出来就好了。


2.在项目和源码中的体现


问的最多的就是:你看过的框架源码都使用了哪些设计模式。不仅考察了设计模式、还考察了源码。另外也会问在项目中运用了哪些设计模式。


3.MVC\MVP\MVVM


基本必问了。结合具体的项目实现以及自己的思考,分析他们的优缺点、适用场景等。

计算机基础

计算机基础这里包括了 c 语言、操作系统、数据库库、以及前面的计网等等。这部分直接问的内容不多,但却是非常重要的,也是考验我们基础扎不扎实的地方。其次,面试官也会用一些业务场景来考验我们的理解程度,如聊到 java 并发时,问具体为何线程切换代价高;又如聊到 JVM 内存分布时,问在 native 层是怎样的内存分布以及逻辑内存物理内存等;再如聊到 volatile,会问到 cpu 缓存一致性的问题等等。这些都是非常考验功底的内容。因而,这些基础内容要学好,不仅是为了面试,更是为了让我们自己可以更好地学习理解知识。


1.C 语言


问的很少,偶尔会问到。笔者只被问到:同构结构体的内存占用、指针相关问题。


C 语言作为语言鼻祖,一些基础还是要会的。


2.操作系统


  • 中断原理、作用。

  • 死锁原理以及如何解决。

  • 操作系统这一块确实问的不多,同样也是考察基础功底了。可以不问,但是问到一定要会。


以上就是大厂面试高频知识点,并不是说以上所有知识点都要掌握,世上没有万能人,大家都有知识盲区,遇到困难太正常了。遇到困难还能现场解决,才能体现出自身价值。即便无法解决问题,也可尝试说出自己的思路,而一个人的思路,往往能反映出这个人的心智模式和未来潜力。


总之,技术准备,功在平时。还是应该修炼基本功,有了这份基本功,就不怕变化,毕竟万变不离其宗。至于该怎么提升基本功,建议多学习、多思考、多实践、多总结。

下面是我在面试期间刷过的真题。需要的朋友只需要 点赞支持一下 后,然后【点击这里免费获取

评论

发布
暂无评论
两年Android开发三面上岸腾讯,这些核心知识点建议收藏