Java面试2021,从外包到拿下阿里offer

曾经终败给现在 2021-07-20 15:34 508阅读 0赞

线程

  • 线程的启动
  • 实现Runnab1e接口
  • 继承Thread类
  • 实现Callable接口
  • 线程的状态
  • 线程的方法
  • 线程的优先级
  • 守护线程
  • 未捕获异常处理器

e42224c81cca4b9fa211fe8d73f5288d.png

并发编程的问题

  • 线程引入开销:上下文切换与内存同步
  • 线程安全性(原子性+可见性)
  • 死锁

fab2b606fe9f5cd63b7ab9a01256c97f.png

线程间通信/线程同步 工具使用

  • synchronized
  • Lock
  • volatile
  • Atomic

192a093ec86e0f0a7432a91dbd49151b.png

Lock使用 深入

  • 可重入锁 ReentrantLock
  • Condition与wait&notify区别
  • await&signal
  • 公平锁
  • 读写锁 ReentrantReadWriteLock
  • LockSupport(锁住的是线程,synchronized锁住的是对象)
  • synchronized与Lock的区别
  • 原子操作类使用

f6238a08ce258157fe9f84060b96c647.png

Java内存模型 线程同步工具原理

  • JMM抽象结构
  • 指令重排序
  • 内存屏障
  • happens-before(抽象概念,基于内存屏障)
  • 顺序一致性
  • volatile原理
  • synchronized原理
  • 原子操作原理
  • 锁的比较
  • 锁的优化
  • 锁的分类
  • 偏向锁(只有一个线程进入临界区)
  • 轻量级锁(多个线程交替进入临界区)
  • 重量级锁(多个线程同时进入临界区)
  • CPU如何实现原子操作
  • Java如何实现原子操作
  • CAS在OpenJDK中的实现

92cf96c5adf809a8725180f8764ec1c6.png

同步容器

  • ConcurrentHashMap
  • CopyOnWriteArrayList
  • BlockingQueue
  • ThreadLocal

f8c0350fcb853e9601f176d76de5d47a.png

同步工具使用

  • Semaphore (信号量)
  • Cycli eBarrier (可循环使用的屏障/栅栏)
  • Exchanger (两个线程交换数据)
  • CountDownLatch (闭锁)
  • FutureTask (Future实现类)
  • 将批量同步操作转为异步操作(并行流/CompletableFuture)
  • 多个异步任务合并
  • API

2cf5e339341a12dff38b84c8888a49d5.png

线程池使用

  • 引入原因
  • 继承体系
  • ExecutorService
  • ScheduledExecutorService
  • ThreadPoolExecutor
  • 创建线程池
  • 线程动态变化
  • 扩展ThreadPoolExecutor
  • ScheduledThreadPoolExecutor
  • Executors
  • CompletionService

c43ef3662c9c6fb61435a3b4a893743f.png

J.U.C 源码解析

  • AQS的接口
  • AQS使用实例(互斥锁,tryAcquire只需一次CAS)
  • AQS实现
  • 同步队列
  • 独占式同步状态
  • 共享式同步状态
  • 独占式超时获取同步状态
  • ReentrantLock公平锁
  • ReentrantReadWriteLock
  • 读写状态的设计
  • 写锁的获取与释放
  • 读锁的获取与释放(放弃)
  • 锁降级
  • LockSupport
  • Condition
  • 等待队列
  • AtomicInteger
  • ThreadPoolExeuctor
  • 状态转换
  • 成员变量
  • 构造方法
  • 执行任务

9cfc7350402d750a58d20e1a3ada00c7.png

并发体系思维导图

Java内存模型(JMM)

  • 线程通信机制
  • 内存模型
  • synchronized
  • volatile
  • DCL

5405959c4b3af521181ef8ed290b366e.png

并发基础

  • AQS
  • CAS

8f4a688a8292b55f517f43e2bbb3ad4a.png

  • ReentrantLock
  • ReentrantReadWriteLock
  • Condition

1cc82b83246d2e5232c59869a6ae4f4f.png

并发工具类

  • CyclicBarrier
  • CountDownLatch
  • Semaphore
  • Exchanger

21bee34ab77e741b5374bbd018ff5d07.png

其他

  • ThreadLocal
  • Fork/Join

42b31b5a5851b362b76d31a33878086c.png

Java并发集合

  • ConcurrentHashMap
  • ConcurrentLinkedQueue
  • Concurr entSkipListMap
  • ConcurrentSkipListSet

7166c8bc200e54f450e3bd1bd426e25c.png

atomic

  • 基本类型类
  • 数组
  • 引用类型
  • 字段类

eb7d9aab2c30b4fc75a551a2a62e7dc9.png

阻塞队列

  • ArrayBlockingQueue
  • LinkedBlockingQueue
  • PriorityBlockingQueue
  • DelayQueue
  • SynchronousQueue
  • LinkedTransferQueue
  • LinkedBlockingDeque

fcd6c490c521f529e3cf08454328d156.png

线程池

  • Executor
  • Future

b59d865d59a3da048721eb1df0c64b0b.png

很多程序员,整天沉浸在业务代码的 CRUD 中,业务中没有大量数据做并发,缺少实战经验,对并发仅仅停留在了解,做不到精通,所以总是与大厂擦肩而过。

我把私藏的这套并发体系的笔记和思维脑图分享出来,理论知识与项目实战的结合,我觉得只要你肯花时间用心学完这些,一定可以快速掌握并发编程。

不管是查缺补漏还是深度学习都能有非常不错的成效,需要的话记得帮忙点个赞支持一下

总结

虽然面试套路众多,但对于技术面试来说,主要还是考察一个人的技术能力和沟通能力。不同类型的面试官根据自身的理解问的问题也不尽相同,没有规律可循。

e3729e317945e24e46a8f0be95fd7cc9.png

99a9fde9346869860f198b2f26b32889.png

上面提到的关于这些JAVA基础、三大框架、项目经验、并发编程、JVM及调优、网络、设计模式、spring+mybatis源码解读、Mysql调优、分布式监控、消息队列、分布式存储等等面试题笔记及资料都是免费分享的,有需要学习的小伙伴可以直接点点点点点这里免费下载

[外链图片转存中…(img-ctsGpzob-1625472857425)]

上面提到的关于这些JAVA基础、三大框架、项目经验、并发编程、JVM及调优、网络、设计模式、spring+mybatis源码解读、Mysql调优、分布式监控、消息队列、分布式存储等等面试题笔记及资料都是免费分享的,有需要学习的小伙伴可以直接点点点点点这里免费下载

有些面试官喜欢问自己擅长的问题,比如在实际编程中遇到的或者他自己一直在琢磨的这方面的问题,还有些面试官,尤其是大厂的比如 BAT 的面试官喜欢问面试者认为自己擅长的,然后通过提问的方式深挖细节,刨根到底。

发表评论

表情:
评论列表 (有 0 条评论,508人围观)

还没有评论,来说两句吧...

相关阅读