最后,再给两点建议:
-
一个人光看不练是不行的,一个人瞎琢磨效率偏低。
-
最好可以买几本书或者课程指导。我是看了辉哥的课程,阅读了极客时间的刘超的数据结构,还阅读了书籍算法4。把基础都补充好后,可以去leetcode中对每一个数据结构专项进行训练。在这些基础上,在做一做剑指offer中经典题目也就差不多了。
关于专业知识
网上很多人都在求大厂面试的真题,实际上我看来意义并不大。因为面试官并不会面试你写在简历之外的随意一个问题。一般都是问你简历上的工作成果,以及背后延伸出来的知识点。更多的还是需要自己日常的积累。
当然也有一些老生常谈的基本考点,如Handler,多线程等。 因此,背面试题不是最重要。关键是回顾你的简历上的工作成果以及简历上的知识点,并不断的深挖。
下面是面试情况,以及一些简答。实际上在回答的过程中,可以回答的更加详细,本文只是筛选了部分问题简单介绍了知识点的要点。
字节面试
字节面试一共4面。字节的面试风格偏向基础的内容,以及简历上知识点的扩展。
字节1面
-
自我介绍,项目经历,项目上的优化项以及原因
-
为什么使用mmap优化io读写,mmap和传统读写有什么区别?为什么选择它?
-
Object 中有什么方法?
-
Object 的equal实现?重写equal需要注意的方面。
-
synchronized 原理。
-
volatile原理
-
ui优化
-
内存优化与LeakCanary的源码?以及LeakCanary的缺点和如何解决。
-
算法:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字(Leetcode原题)。
字节2面
-
自我介绍,项目经历,项目上的优化项以及优化的原因
-
Rxjava源码原理,以及项目中你是如何将Rxjava流进行复用。
-
你项目中高度自定义了DiskLRUCache。问LRUCache的实现?问LinkedHashMap的实现?问DiskLruCache的实现?问Glide中实现的DiskLruCache的运用。
-
Handler的原理
-
volatile原理
-
synchronize 锁的转化流程。
-
ReentrantLock 实现。
-
ui 优化,首屏渲染时机优化
-
启动优化,与AlphaManager的实现。
-
插桩的原理以及运用。
-
ASM
-
Javapoet
-
动态代理
-
LiveData 和 ViewModel的源码实现
-
x2c 源码实现
-
DNS 原理
-
https的原理
-
算法:判断一个字符串是否是回文串(注意保证原字符串不可改变,可用O(n)的空间复杂度)。
方向:栈的考究。
字节3面 Leader面
-
1.工作软技能的考核,以及团队中的定位
-
2.如何进行io 优化,指标是什么,优化后的结果以及参数是多少?
方向:可以使用/proc/pid/stat读取cpu的idle,iowait等。使用mmap优化后的结果。
- 3.算法:在一个单链表中,每k个节点进行反转,无法被反转的部分放在末尾。
腾讯面试
腾讯的面试风格,普遍是基于你的简历上项目经历,往细节往深处问。我是面试因算法失败了一次,后面第二次就成功了。
总结一下2次腾讯面试
腾讯第一次面试1面
-
自我介绍,项目经历,项目上的优化项以及原因
-
ARouter 源码实现,项目中对ARouter的扩展实现详细设计
-
ui 优化,启动优化,首屏展示时机优化
-
volidate 实现
-
Java异常捕获
-
DNS 原理
-
https的原理
-
jni 中JNIEnv 和线程的关系
-
jni中有几种注册native方法。
-
Native异常捕获
腾讯第一次面试2面
-
自我介绍,项目经历,项目上的优化项以及原因
-
ARouter的实现,以及自定义扩展ARouter的实现
-
项目中的io 优化,以及为什么用mmap于io优化
-
mmap的实现
-
mmkv 中 对应 mmap 断电时候的处理机制
-
mmap没调用msync时候,落盘时机。
-
算法:合并三个单链表(可参考leetcode 合并多个单链表)
因为自己画蛇添足,把每一个节点拷贝了一次,还没有往后迭代,实在是错漏百出就挂了。脑袋还是不够清醒,结果饮恨而归。
腾讯第二次面试1面
-
自我介绍,项目经历,项目上的优化项以及原因
-
ARouter 的实现,以及扩展的实现
-
启动优化,以及ARouter的启动优化方式,ARouter的分区方式
-
Navigation的源码解析
-
基于Navigation 编写路由框架NavigationRouter 的源码实现,以及实现的优点
-
Navigation 实现的路由框架中如何处理Activity和Fragment 嵌套启动的方式
-
class的加载流程
-
Handler的实现(最好能回答到epoll和eventfd的层面)
-
实现一个多线程下的消费者生产者模式
腾讯第二次面试2面
-
自我介绍,项目经历,项目上的优化项以及原因
-
io 优化 与 使用mmap的优势和缺点
-
ARouter 的实现,以及扩展的实现
-
多进程实现的路由
-
如何进行多进程的同步调用,此时另一个进程还没有启动?
-
数据结构中不支持多线程的数据结构,如果使用多线程操作会造成什么结构
-
ArrayMap 实现
-
HashMap 与 ArrayMap比较,两者的优缺点
-
handler 的原理
-
handler 是怎么进行postDelay 延时操作。
-
当handler 只有一个延时的message时候,Looper中是如何运行。
-
volidate 原理
-
当没有添加volidate 修饰属性的时候,数据什么时候从缓存行刷新到主存。
-
算法题:在一个n*n的方格中。有两种方格,1代表阻塞不能经过,0代表可达。两点坐标,a和b。问a到b的最短路径。
腾讯第二次面试3面和4面
腾讯3面和4面是联系到一起的,这里一起说了
-
自我介绍,项目经历,项目上的优化项以及原因
-
mmap 实现原理和io优化
-
View的绘制流程,从 setContentView 解析xml到View的绘制结束。
-
硬件渲染流程
-
SurfaceFlinger 在 View绘制流程中扮演的角色
-
Choregrapher 的工作原理
-
OOM 如何优化,内存爆满是虚拟内存容易先爆掉还是物理内存容易,一口气映射4g的内存是否会发生异常。
-
Bitmap 如何优化避免OOM,为什么放在native中bitmap不容易OOM
-
一个进程最多可以使用多少fd
-
你研究过RN和Flutter,RN的渲染机制和Flutter的渲染机制是如何运作的?他们之间区别是什么?
-
插件化你是如何实现的。
-
算法1: 将一个int的数字转化成汉语说法。如10000转化为一万。
-
算法2:中国下棋的马,能否吃掉另一个坐标的旗子,请找出坐标
腾讯二次面试5面
本次面试是两个面试官进行考察,考察的东西偏向网络协议。
-
自我介绍,项目经历,项目上的优化项以及自己开源在GitHub上项目的特点。
-
当遇到弱网络时候的优化