Skip to content

面试速答(先看这里)

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

60秒标准回答:

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

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

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

**答题顺序:**结论 → 原理/机制 → 关键流程 → 场景与取舍 → 易错点

回答主线:

  • **要点1:**预警模块的优化,线程池,批处理 - 》流处理,优化前和优化后的效果数据有吗?
  • **要点2:**之前 10w 条数据处理会崩溃的原因是什么?
  • **要点3:**线程池的原理介绍一下?
  • **要点4:**为什么不建议使用 Executors 创建线程池 ?
  • **要点5:**Run 方法和 start 方法有啥区别?

**记忆锚点:**laiyanhong-9tr5c → wwwyuquecom → zwpzru → https → CAS → volatile

易错提醒:

  • 为什么不建议使用 Executors 创建线程池 ? 创建线程有哪些方式?
  • 有什么避免回表的方式吗?

加分表达:

  • ES、kafka、 定时任务是用的开源框架, E-job , 预警模块的优化,线程池,批处理 - 》流处理,优化前和优化后的效果数据有吗?
  • 核心线程数,最大线程数该该设置成多少该怎么定?

追问准备:

  • ES、kafka、 定时任务是用的开源框架, E-job , 预警模块的优化,线程池,批处理 - 》流处理,优化前和优化后的效果数据有吗?
  • 之前 10w 条数据处理会崩溃的原因是什么?
  • 那你这个方案能解决的原因是什么?
  • 线程池的原理介绍一下?

面试者背景 ​

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

面试过程 ​

> 项目介绍一下,定时任务,采集数据,从哪个数据源采集数据。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? > > 什么是聚簇索引?有什么避免回表的方式吗?下推、覆盖索引?

题目解析 ​

> Q:预警模块的优化,线程池,批处理-》流处理,优化前和优化后的效果数据有吗? > > 之前10w条数据处理会崩溃的原因是什么?那你这个方案能解决的原因是什么?

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

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

> 本次技术改造中遇到的问题是什么? > > 问题是怎么来的? > > 你是如何解决的? > > 你的方案为什么可以解决这个问题? > > 还有没有其他的方案可以选择? > > 你的方案还有没有什么改进的空间?

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

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

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

关于线程池,请参考:https://www.yuque.com/laiyanhong-9tr5c/zwpzru/mtv157rnzlxeyvwb

线程数:https://www.yuque.com/laiyanhong-9tr5c/zwpzru/na8uawnuuq4nnnk6

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

关于线程的创建方式,请参考:https://www.yuque.com/laiyanhong-9tr5c/zwpzru/hdpv1goiolic24sq

> 多线程的执行是同步的还是异步的?虚拟机会等线程执行完在shutdown吗? > > Run方法和start方法有啥区别?守护线程了解吗?守护线程和用户线程的区别? > > GC是有单独的线程吗?STW > > WAITING和TIMED_WAITING

run和start区别问题:https://www.yuque.com/laiyanhong-9tr5c/zwpzru/yqq0q5ue2l2td9lv#t6Mya

守护线程&虚拟机shutdown问题:https://www.yuque.com/laiyanhong-9tr5c/zwpzru/lowhfo86hsgp19aq

waiting&timed_waiting问题:https://www.yuque.com/laiyanhong-9tr5c/zwpzru/blof3s7fwb1bcbsn#pvTzP

> 什么是CAS?CAS都有哪些应用?乐观锁、自旋 > > Synchronized的自旋是怎么实现的?代码上是如何实现的? > > CAS有什么问题吗?ABA问题、忙等待。通过自旋的角度思考一下CAS的问题? > > JAVA中的CAS怎么实现的?如何保证的原子性,

CAS的问题:https://www.yuque.com/laiyanhong-9tr5c/zwpzru/dwdxi7zsdghed6u4

CAS与自旋:https://www.yuque.com/laiyanhong-9tr5c/zwpzru/xrr162iqwkek218r

CAS的实现:https://www.yuque.com/laiyanhong-9tr5c/zwpzru/fi4vwezzr7glba2h

> 有了synchornized为什么还需要volatile?锁、 > > 双重校验锁实现单例?volatile, > > 怎么实现的用了voaltile就会有内存屏障。

有了sync为什么还需要volatile: https://www.yuque.com/laiyanhong-9tr5c/zwpzru/frv1cxzg65tzy0xb

内存屏障:https://www.yuque.com/laiyanhong-9tr5c/zwpzru/ikfxcifku560pt50#rNo8M

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

枚举单例的好处:https://www.yuque.com/laiyanhong-9tr5c/zwpzru/lgwduwpmkaaslpe6

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

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

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

聚簇索引:https://www.yuque.com/laiyanhong-9tr5c/zwpzru/uthlh8w2gadl6z64

回表、索引下推、覆盖索引:https://www.yuque.com/laiyanhong-9tr5c/zwpzru/ea403nwsrw5g0o3s