==

撸这篇文章不会透漏任何楼主面过的任何一家公司,只从面试的战略思维上去引导诸位如何准备面试。

最近刚入职,在忙找房子搬家的事,端午节会更新第二波

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的启动流程基本可以用一张图来解决,那么一张图很容易看明白,但其中蕴含的一些知识点是你应该所关注,映射出来的一些奇奇怪怪的问题比如:

  1. 为什么不能在子线程中更新ui
  2. 是否只能在子线程当中更新ui
  3. view.post 做了哪些事,以及为何某些情况不生效

Android冷启动解读

Android垂直同步与缓冲buffer

第三方框架EventBus、retrofit、okhttp、RxJava、leakcanary、Tinker等源码阅读。

你可能感兴趣的:(==)