概述感觉毕业后时间过得真快啊从 19 年 7 月本科毕业入职后到现在快两年了前段时间金三银四期间想着找一个新的工作前前后后花了一个多月的时间复习以及面试面试好几家大厂最后选择了腾讯。也祝各位想找工作的同学都能去自己心仪的公司我不建议频繁的跳槽除非被逼无奈频发跳槽不光会成为面试官害怕的一个方面对自己的沉淀也是没有帮助的。同时我不建议裸辞这样会存在太多的不定性因素如果面试时间拖得太久这段事件你没有经济收入但是你还在支出(房租日常生活开销)。这样会代来无形的压力同时如果面试受挫很容易失去信心甚至怀疑自己的能力。但是离职也有他的好处因为有些公司可能项目非常急需要迅速上岗那么你离职的交接办理也会耽误一些时间那么也会成为面试官考虑的一个因素。所以还是要结合自己的情况而定。一面(1h)自我介绍问项目的一些细节优化方案等SurfaceView, TextureView及View的区别。SurfaceView怎么控制它处于的层级Binder工作流程介绍一下MVCMVPMVVM你们项目用的是哪个对组件化的理解你们是怎么实现组件化的功能模块之间互相引用会有什么问题内存优化工具LeakCanary和MAT的原理JVM内存模型Java同步机制有哪些volatile和syncronized区别HashMap和HashTable区别ConcurrentHashMap分段加锁的原理二叉树的前中后遍历算法判断一棵树是否是平衡二叉树算法题给定一个链表L1、L2,每个元素是为10以内的正整数链表表示一个数字表头为高位。 求两个链表之差以链表形式返回Java和Kotlin的一些区别Kotlin的缺点SurfaceView和TextureView的区别了解过哪些插件化的实现说说ARouter的原理两个业务组件模块之间怎么实现相互调用接口让你设计一个下载功能实现多个大文件同时下载考虑哪些(断点续传)有没有音视频开发经验怎么处理内存泄漏强引用弱引用LeakCanary原理说一下。二面(1h)问更熟悉Java还是Kotlin答Java所以问的都是Java相关的一些题HashMap扩容机制Java volatile原理和作用乐观锁悲观锁区别线程池工作原理各个参数的作用Android 三缓存是什么为什么需要它讲讲做的业务开发中比较有挑战的项目还有一些比较常规的Android方面的问题具体想不起来了算法题查找单链表中倒数第k个节点。做完后面试官问是不是刷过这道题那我再出一道吧…题给定一台8核的手机设计一个快速检索出sdcard下所有文件名为a的程序返回一个列表三面(1.5h)主要深挖项目细节有些不太清楚的最好别提不然被挖到了很尴尬平时怎么学习技术在之前的公司你对自己的成长满意吗在面哪些公司情况怎么样面试总结毕业时选择的是一家非一线大厂的公司在这边工作的近两年时间里业余学习了许多 Android 相关的专业知识(因为不忙)但是由于业务原因且公司发展一直在走下坡路我在项目上的经验比较欠缺因此考虑进一家大厂继续磨练磨练自己。我面试的不是很多但是也让我知道自己的不足知道自己在数据结构与算法这方面很弱同时开发中的问题总结java基础与高级知识不足源码阅读不够深入掌握的知识很虚没有理解到重点框架用的多但是只停留在会使用的阶段。网络相关知识薄弱。后台开发流程与知识薄弱(所有的逻辑与难点其实都在后台同时了解后台也有助于Android开发与接口调试协作)。这些都是我以后的学习方向。高频知识点总结知识点有腾讯遇到的也有其他公司面试遇到的我都做了一个整理。需要特别注意的是这并不是全部的知识体系仅仅是笔者遇到的面试题读者可以按照大体的方向去学习但切不可认为这样就足够了这里提到的知识点是远远不够的。面试的过程中更多的时候不会单纯地考察知识点而是会结合一些需求或者业务场景来多方面考察对知识点的理解。因此笔者建议对于知识点要以理解为首要任务而不是背诵答案。面试的过程中更多的时候不会单纯地考察知识点而是会结合一些需求或者业务场景来多方面考察对知识点的理解。因此笔者建议对于知识点要以理解为首要任务而不是背诵答案。Android1.Activity1.Activity启动流程。其中考察最多的类似问题是【从桌面点击一个图标之后到界面显示这个过程发生了什么】。很多时候面试官会结合activity生命周期来考问在启动流程的哪些阶段哪些生命周期被回调此时Activity状态如何。2.启动模式。也就是常见的四种启动模式但面试官更喜欢问何时使用他们也就是使用场景。3.生命周期。这个很少单独问一般和启动流程或者具体的业务场景结合考问。4.context。主要是内存泄露的考察以及application和activity两种context如何选择。2.Handler1.内部原理。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对上面的优化的实现原理因此需要着重看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。优化涉及的内容太多这个属于比较深的内容还是得看自己平时的项目积累。JavaJava的考察是一个非常考验功底的地方很多的知识点都是基础中的基础同时又都可以延伸到底层的逻辑。这些知识点在实际的运用中也有很多的情况需要考虑考察我们对于知识点的运用。例如线程池可以从参数作用、到线程池原理、到阻塞唤醒机制、到实际项目的参数配置有非常多的知识点可以考察。因而这一块就看各位的造诣了。当然一些基础或者常考的知识点还是得会的。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.JVMGC机制。必问。类加载机制。必问同时还会问双亲委托机制。方法调用过程。这个也问的挺多也看对JVM的学习程度了。线程与进程的内存关系。如一个线程占多少内存、一个进程可以开多少线程、一个进程占用多少内存等。内存分布。JMM、运行时数据区、native内存分布。很看对JVM的理解程度。Kotlinkotlin其实问的很少现在大部分的项目还是使用Java开发的。一些有kotlin业务的公司会问但是问的内容也不多。这一块如果还没学习其实不急的把Java学好才是王道kotlin和java在原理上都是互通的。1.协程问的是最多的主要是理解线程和协程的关系、协程的优缺点。这个也看个人的学习程度了。2.run、let、also、with、apply注意返回值以及作用域3.特性的具体实现如默认参数的具体实现。有了解过最好了没有的话就联想Java是如何实现的如默认参数可以联想方法重载。计算机网络计网这一部分主要还是HTTP和TCP的内容了经典中的经典。需要注意的是链路层、网络层的一些协议要了解也是计算机基础了被问到不会的话会比较尴尬。其次是一些新的协议如QUIC、http3.0等可以了解一下面试会很加分同时也可以进一步去理解TCP的优缺点。1.HTTPhttp在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.操作系统中断原理、作用。死锁原理以及如何解决。操作系统这一块确实问的不多同样也是考察基础功底了。可以不问但是问到一定要会。以上就是大厂面试高频知识点并不是说以上所有知识点都要掌握世上没有万能人大家都有知识盲区遇到困难太正常了。遇到困难还能现场解决才能体现出自身价值。即便无法解决问题也可尝试说出自己的思路而一个人的思路往往能反映出这个人的心智模式和未来潜力。总之技术准备功在平时。还是应该修炼基本功有了这份基本功就不怕变化毕竟万变不离其宗。至于该怎么提升基本功建议多学习、多思考、多实践、多总结。由于篇幅限制这里只能展示部分内容朋友们如果需要这份完整版的PDF资料合集微信扫描下方CSDN官方二维码【免费获取】。总结文章篇幅较长总结的心得与方面有很多通过这阶段面试主要认识到自己java基础源码阅读能力数据结构与算法网络编程知识与实际开发出现问题的总结能力还有待加强这是一个面试重点也是自己今后需要努力的方向同时自学能力也是面试一个重要因素所以我们不要成为码农而要成为一个优秀的程序员这才是我们努力的方向做好规划努力学习记录总结。养成这样的习惯。好了暂时只能想到这些后面如有想到其它东西再补充哈祝想找工作的同学都能去自己心仪的公司前程似锦