CatTalk's Blog

[旧文归档]面试知识点整理

Date: 2020年3月25日 GMT+8 下午10:49:44

MAYI

// 最终C层去调用dex的时候会调用OpenDexFromOat,会判断有没有对应的oat文件
Runtime::Current()->IsDex2OatEnabled()

https://juejin.im/post/5c3462a8f265da61602d1b26

-

- <https://juejin.im/post/5a73cbbff265da4e807783f5>
	- 最终借助CPU指令,实质上还是个原子操作,

## 多线程问题复习
- 操作系统是以进程为单位进行资源分配的,但是 CPU 这个资源却比较特殊,CPU 的分配是以线程为单位的,这是因为具体占用 CPU 运行的是进程中的线程
- 守护线程 VS 用户线程(无用户线程 JVM就会退出)
- 线程之间的协作或者说是通信(比如生产者-消费者模型),常用的就是需要个同步设施来完成公共资源的访问或者读写。常见的同步措施有哪些
	- 一种是寄托于公共资源本身(object本身),比如object的wait、notify、notifyAll等,这些方法本身的调用需要首先获取到monitor,也就是常在比如Synchronized代码块里面才能调用,否则会抛出状态异常。其实内部实现就是有一个monitor对应的AQS,不断的通过CPU时间片驱动,去不断的运转起来。
	- 以object本身提供的方法来实现一个简单的生产者消费者模型
- 线程的中断模型:interrupt到底发生了什么
	- Thread.interrupt() 仅仅设置了中断标志位后立即返回:抛出interrupted Exception
	- 根据中断标志位,做一些其他例子
- 线程死锁问题的本质:竞争同一资源,互相不释放对方的占有条件
	- 互斥条件
	- 请求并持有条件
	- 不可等待条件
	- 环路条件
- Java内存模型(主存模型),CPU缓存,数据总线
- Synchronized  & volatile语义
	- Synchronized 重量级锁,通过monitorenter,monitorexit来实现,在monitor中标记当前线程,主要是保证可见性和原子性
	- Volatile,主要是保证可见性,在轻量级的情况下,通过lock指令,锁缓存,另缓存的读取和写入都失效,跟主内存打交道。不能保证原子性,只能保证可见性。
- AtomicLong等类型中的CAS(无锁底层指令)实现:
	- 使用锁必然有性能方面的损耗,线程上下文切换和重新调度的考量,虽然也提供了volatile非阻塞的操作,但不能保证原子性,因此Java还提供了一种基于底层硬件指令实现的原子操作,compare and swap
	- 在unsafe.compareAndSwap实现里面:

boolean compareAndSwap(Object obj, long valueOffset, long expect, long update) {

	```
//传入四个参数:对象内存地址,对象中变量的偏移量,变量预期值,变量新值

如果对象obj中内存偏移量为valueOffset位置的标量值为expect则使用新值update替换旧expect,这个底层处理器提供了一个原子性指令
//所谓便宜量,你可以理解为当前对象的某一属性的内存地址

while(compare and swap)
\\}

Java泛型、注解、反射与动态代理

泛型

注解

反射

动态代理

Java集合

Java关键字

Android 知识

总结自我成长

简历层面

字节跳动面试

算法:

计算机基础

Java

Android

Flutter

大体如下:

  1. 数组实现队列
  2. gc的流程
  3. java软引用与弱引用区别
  4. java中的this编译时的原理
  5. final变量用反射修改
  6. HashMap的内部结构,给定一个key,如何找到对应的value,使用equal
  7. volatile
  8. Java线程池有什么作用
  9. Java动态代理
  10. handler机制
  11. android跨进程通信的方式 12.自定义控件方式 13.Canvas绘制过什么 手写功能 14.断点续传的实现 15.如何设计图片加载库 16.有看过哪些安卓的源码 View树绘制 事件分发 Activity启动 handler 17.看过哪些开源项目 eventbus volley 图片 线程池管理 插件化 资源加载 18.app 启动速度的优化做过哪些 19.fresco加载图片原理 优势是什么 20.写程序时,堆和栈有什么优化点 内存回收时机 如何判断对象可被回收 引用计数法和gc root法
  12. 事件分发 cancel事件一般在什么时候被触发
  13. touchdelagate 一个父view只能设置一个delegate,如何解决设置多个
  14. App整个架构了解么 24.mvvm data binding
  15. webview 26.fragment startactivity
  16. 动画的原理
  17. 黄油计划 vsync
  18. 职业规划 做些有挑战的事儿 有意义的事儿 缺乏实战场景 我: 30.设计一个离线视频下载功能

开源框架

面试-手淘直播

计算机网络

算法类

面试大纲

Java基础

public static Integer valueOf(int i) \\{

if (i >= IntegerCache.low && i <= IntegerCache.high)

``` return IntegerCache.cache[i
+ (-IntegerCache.low)];


```

return new Integer(i);
\}

Android 基础

Android进阶

开源框架解析

计算机网络基础

算法与数据结构

参考