撸这篇文章不会透漏任何楼主面过的任何一家公司,只从面试的战略思维上去引导诸位如何准备面试。
最近刚入职,在忙找房子搬家的事,端午节会更新第二波
26、7岁时,您静不下心来读书看文章,到了30岁,你还风吹而树不止,讲道理,这篇文章您瞅瞅就行,走好!
个人整理不代表所有,批评乐意接受,喷子绕道而行!
持续画图中,我觉得最好的记忆便是图形记忆,画图很简单,如何画的别人也理解很难...
面试前你该准备什么
- 购买《深入理解Java虚拟机》书籍
- Java锁机制的深入了解
- Java线程池
- Java线程间通信
- Java HashMap
- Android Handler机制的源码研究透彻
- Android Binder机制
- Android Activity Window之间的关系
- Android View绘制流程
- Android 事件分发
- Android nested scroll原理与 behaviour 实现
- Android冷启动解读
- Android垂直同步与缓冲Buffer
- 第三方框架retrofit、okhttp、rxjava、leakcanary、Tinker等源码阅读。
- java常用设计模式
本片文章会从以上几个点去分析面试中遇到的一些问题!
《深入理解Java虚拟机》
这本书目前我只阅读完了了三个章节,第二章节(自动内存管理),第三章节(垃圾回收机制),第七章节(类加载机制)... 这几个章节我不可能在这篇文章中具体体现出来,但楼主只花费了1个礼拜不到的时间就阅读完毕了,并对自己以前的一些错误认知进行了修复。
1. 自动内存管理
下面是知识点,带着脑子去读
- 栈、堆、方法区、本地方法区、程序计数器 这些jvm的内存布局概念与它们内部分别存储了什么数据
- class文件头信息中Mark World 需要重点理解
- jvm 的内存模型,工作内存与主内存
- jvm如何分配一个对象的内存(为第七章做接入准备)
- 直接指针与句柄
...
带着这些疑惑去看第二章,你会收获较多,接下来第二章的内容我会用一张简短的图来表示。
待补充。
2. 垃圾回收机制
下面是知识点,带着脑子去读
- jvm如何判断一个对象为垃圾的
- GCROOT集合
- jvm 堆区的对象回收
- 青年代(eden,from,to)
- 老年代
- 持久代
- jvm 在gc时,是如何回收垃圾对象的内存的
- 标记清除法
- 标记复制法
- 标记整理法
...
这个章节在面试过程中变得极其常见,特别是堆区对于对象的管理更是面试技巧中的一门艺术,也是面试中的加分项
3. 类加载机制
这个章节就比较有意思了,坑很多,但说实话,对于你对static这类的关键字会有更深入的了解!
- 类变量和对象变量(对应类加载过程中的’准备‘和'初始化'阶段)
- 类加载过程,以及每个过程做了什么
- 双亲委托机制
- BootClassLoader
- ExtClassLoader
- 应用程序类加载器
...
4. 关于jvm的面试题有哪些
- jvm 堆和栈有什么区别
- jvm 方法区都存放了那些数据
- 类变量和成员变量
- static修饰的成员变量是否能在static静态代码块中进行赋值操作
- jvm 分代收集理念(强引用,软引用,弱引用,虚引用),说出具体的区别
- jvm如何判断一个对象是垃圾
- gc 如何回收内存
当你了解上面这些知识点的时候,你会发现,什么是内存抖动,什么事内存泄漏,而不是只是一个概念性原则的问题;为了能够对标阿里P6,面试者必须掌握这些知识,you can do it!
Java锁机制的深入了解
这个章节就比较有意思了,建立在你理解了Class 文件头信息Mark World的存储结构上
- 原子性、可见性、有序性
- volatile、synchronized、ReentrantLock之间的区别
- 公平锁与非公平锁
- 偏向锁、轻量锁与重量锁
- synchronized是不是可重入锁
- CAS锁和Monitor ACC_SYNCHORNIZED锁机制
Java线程池
- corePollSize->核心线程数
- maxPollSize->最大线程数
- Queue->线程队列
- InvokeHandler->拒绝策略
Java线程间通信
- 线程通信有哪几种方式
- 如何在一个线程当中等待其它子线程结束再退出当前线程(CountDownLatch)
- 如何得到一个线程处理结果(FeatureTask)
Java HashMap
- 数据结构
- bucket index相同的情况下如何获取key的value
- 与ArrayMap的比较
java常用设计模式
Android Handler机制
- Handler机制工作原理(Handler,Looper,MessageQueue是三者之间的持有关系以及如何sendMessage和dispatchMessage的)
- Message 的obtain和你自己new 一个Message有什么区别
- postDelay中的Runnable是如何参与到消息机制中的
- postDelay delay效果是如何实现的
- 如何将一条Message放入到消息队列的队首位置
- Looper的block是如何实现的
- Android主线程更新ui的几种方式
- view.post 做了什么可以得到宽高
- HandlerThread
Android Binder机制
- Binder机制的实现原理
- Binder机制的数据传输(Parcelable和Serializable的区别)
- AIDL
- Handler的getMessenger
我觉得Binder机制是必问的一个问题,那么在你了解ServiceManager 以及 Binder之间的关系后,另一个深入点的问题便是-> client 向 ServiceManager 注册service时,ServiceManager是如何工作的!
呵呵,毫无疑问,这是大厂才会问的,回答出来了,我想最起码这是一个加分项。
Android Activity Window->View绘制流程
Android 创建view的流程activity的启动流程基本可以用一张图来解决,那么一张图很容易看明白,但其中蕴含的一些知识点是你应该所关注,映射出来的一些奇奇怪怪的问题比如:
- 为什么不能在子线程中更新ui
- 是否只能在子线程当中更新ui
- view.post 做了哪些事,以及为何某些情况不生效
网友评论