✅985应届生,并发编程底层原理

面试者背景

985应届本科生,秋招中,最近在找工作,但是还没拿到满意的offer,自述主要技术栈:java后端,mysql,jvm,kafka

面试过程

:::warning 项目介绍一下,定时任务,采集数据,从哪个数据源采集数据。ES、kafka、

定时任务是用的开源框架,E-job,

预警模块的优化,线程池,批处理-》流处理,优化前和优化后的效果数据有吗?

之前10w条数据处理会崩溃的原因是什么?那你这个方案能解决的原因是什么?

线程池的原理介绍一下?JAVA中如何创建线程池?线程池有哪几种?线程数如何设置?核心线程数,最大线程数该该设置成多少该怎么定?IO密集、CPU密集?为什么IO密集型可以设置的多一些?

为什么不建议使用Executors创建线程池?

创建线程有哪些方式?Callable可以单独用吗?FutureTask

多线程的执行是同步的还是异步的?虚拟机会等线程执行完在shutdown吗?

Run方法和start方法有啥区别?守护线程了解吗?守护线程和用户线程的区别?

GC是有单独的线程吗?STW

WAITING和TIMED_WAITING

什么是CAS?CAS都有哪些应用?乐观锁、自旋

Synchronized的自旋是怎么实现的?代码上是如何实现的?

CAS有什么问题吗?ABA问题、忙等待。通过自旋的角度思考一下CAS的问题?

JAVA中的CAS怎么实现的?如何保证的原子性,

有了synchornized为什么还需要volatile?锁、

双重校验锁实现单例?volatile,

怎么实现的用了voaltile就会有内存屏障。

设计模式,用枚举实现单例有什么好处?为什么枚举可以防止单例被破坏?为什么枚举实现的单例就线程安全了?static修饰的对象特点?类加载的过程是线程安全的吗?为什么?

如何实现一个类加载器?为什么是LoadClass而不是findClass?

什么是聚簇索引?有什么避免回表的方式吗?下推、覆盖索引?

:::

题目解析

:::color4 Q:预警模块的优化,线程池,批处理-》流处理,优化前和优化后的效果数据有吗?

之前10w条数据处理会崩溃的原因是什么?那你这个方案能解决的原因是什么?

:::

这个问题,主要是考察面试者对于自己做过的项目,尤其是技术改造是不是真的做到了掌握,对于这一类问题,是大厂面试官非常喜欢问的一类问题。

所以,如果你在简历、或者面试的时候提到自己做了一些技术改造、技术选型、线上问题的解决等 ,一定要想清楚下面这几个问题:

本次技术改造中遇到的问题是什么?

问题是怎么来的?

你是如何解决的?

你的方案为什么可以解决这个问题?

还有没有其他的方案可以选择?

你的方案还有没有什么改进的空间?

切忌类似回答:不知道为什么这么做,主管(架构师、老师)让我这么做的,我来的时候就是这样的

:::color4 Q:线程池的原理介绍一下?JAVA中如何创建线程池?线程池有哪几种?线程数如何设置?核心线程数,最大线程数该该设置成多少该怎么定?IO密集、CPU密集?为什么IO密集型可以设置的多一些?

:::

如果在项目中用到线程池,一定要能清楚为什么要用、不用行不行、他的原理是什么、用了之后还会不会带来其他的问题?

关于线程池,请参考:https://www.yuque.com/hollis666/xkm7k3/fb5th6

线程数:https://www.yuque.com/hollis666/xkm7k3/zanzx4giay7gixf6

:::color4 创建线程有哪些方式?Callable可以单独用吗?FutureTask

:::

关于线程的创建方式,请参考:https://www.yuque.com/hollis666/xkm7k3/gmgb2a

:::color4 多线程的执行是同步的还是异步的?虚拟机会等线程执行完在shutdown吗?

Run方法和start方法有啥区别?守护线程了解吗?守护线程和用户线程的区别?

GC是有单独的线程吗?STW

WAITING和TIMED_WAITING

:::

run和start区别问题:https://www.yuque.com/hollis666/xkm7k3/bw9p42#t6Mya

守护线程&虚拟机shutdown问题:https://www.yuque.com/hollis666/xkm7k3/dlg6vw

waiting&timed_waiting问题:https://www.yuque.com/hollis666/xkm7k3/rt6e6b#pvTzP

:::color4 什么是CAS?CAS都有哪些应用?乐观锁、自旋

Synchronized的自旋是怎么实现的?代码上是如何实现的?

CAS有什么问题吗?ABA问题、忙等待。通过自旋的角度思考一下CAS的问题?

JAVA中的CAS怎么实现的?如何保证的原子性,

:::

CAS的问题:https://www.yuque.com/hollis666/xkm7k3/cgckk3

CAS与自旋:https://www.yuque.com/hollis666/xkm7k3/cle1ag1rfu3uuwzg

CAS的实现:https://www.yuque.com/hollis666/xkm7k3/ed72dt8guaf4fvn8

:::color4 有了synchornized为什么还需要volatile?锁、

双重校验锁实现单例?volatile,

怎么实现的用了voaltile就会有内存屏障。

:::

有了sync为什么还需要volatile: https://www.yuque.com/hollis666/xkm7k3/nl3dfw

内存屏障:https://www.yuque.com/hollis666/xkm7k3/aylaul#rNo8M

:::color4 设计模式,用枚举实现单例有什么好处?为什么枚举可以防止单例被破坏?为什么枚举实现的单例就线程安全了?static修饰的对象特点?类加载的过程是线程安全的吗?为什么?

:::

枚举单例的好处:https://www.yuque.com/hollis666/xkm7k3/if7kxl

:::color4 如何实现一个类加载器?为什么是LoadClass而不是findClass?

:::

要想实现一个类加载器,可以继承ClassLoader类,并重写其中的loadClass或者findClass方法,如果想要遵循双亲委派的原则,则直接重写findClass就行了。如果想破坏双亲委派,则重写loadClass方法。

:::color4 什么是聚簇索引?有什么避免回表的方式吗?下推、覆盖索引?

:::

聚簇索引:https://www.yuque.com/hollis666/xkm7k3/hogrm3

回表、索引下推、覆盖索引:https://www.yuque.com/hollis666/xkm7k3/vr22wd

原文: https://www.yuque.com/hollis666/xkm7k3/hg0igrzyrzy5nelw