互联网大厂Java求职面试实录:谢飞机的“水货”之路

互联网大厂Java求职面试实录:谢飞机的"水货"之路

第一轮提问

面试官:请介绍一下Java中的多线程实现方式。

谢飞机:这个...我用过Thread类,还有Runnable接口,还有Callable...对了,还有一个Future。

面试官:那你知道线程池的几种实现方式吗?

谢飞机:哦,线程池...我用过ThreadPoolExecutor,还有FixedThreadPool、CachedThreadPool这些。

面试官:你知道线程池的核心参数有哪些吗?

谢飞机:这个...核心线程数、最大线程数、空闲时间...还有那个拒绝策略?

面试官:那你知道拒绝策略的几种类型吗?

谢飞机:哦,有AbortPolicy、CallerRunsPolicy、DiscardPolicy...等等,还有一个...

面试官:那你知道线程池的工作流程吗?

谢飞机:这个...我好像记得一个队列,然后是核心线程、最大线程数...好像还有一条拒绝策略的规则?

第二轮提问

面试官:请说一下HashMap的底层实现原理。

谢飞机:这个...我用过HashMap,它内部有数组和链表,还有红黑树?

面试官:那你知道HashMap的扩容机制吗?

谢飞机:扩容...好像是当元素个数超过某个阈值就扩容?

面试官:那你知道HashMap的负载因子是什么?

谢飞机:负载因子...应该是0.75?

面试官:那你知道HashMap的哈希冲突是如何处理的?

谢飞机:哈希冲突?我好像记得用链表和红黑树来解决?

面试官:那你知道ConcurrentHashMap的实现原理吗?

谢飞机:ConcurrentHashMap...我用过它,好像是线程安全的?

第三轮提问

面试官:请你说一下SpringBoot的自动装配原理。

谢飞机:SpringBoot...我用过它,它会自动配置很多东西?

面试官:那你知道SpringBoot的starter机制吗?

谢飞机:starter...我用过它,它能快速集成一个组件?

面试官:那你知道MyBatis的执行流程吗?

谢飞机:MyBatis...我用过它,可以映射SQL?

面试官:那你知道Dubbo的负载均衡策略有哪些?

谢飞机:负载均衡...我记得有随机、轮询、最少活跃调用?

面试官:那你知道Redis的几种数据结构和使用场景吗?

谢飞机:Redis...我用过它,有字符串、哈希、列表、集合、有序集合?

结束语

面试官:好的,谢飞机,你回去等通知吧。

谢飞机:好的,谢谢!


面试答案详解

多线程实现方式

Java中实现多线程主要有三种方式:

  1. 继承Thread类:通过继承Thread类并重写run方法。
  2. 实现Runnable接口:实现Runnable接口的run方法。
  3. 实现Callable接口:与Runnable类似,但可以返回结果,并抛出异常。

线程池的实现方式和核心参数

线程池主要通过ThreadPoolExecutor类实现,核心参数包括:

  1. corePoolSize:核心线程数。
  2. maximumPoolSize:最大线程数。
  3. keepAliveTime:空闲线程存活时间。
  4. unit:keepAliveTime的时间单位。
  5. workQueue:工作队列,用于存储等待执行的任务。
  6. threadFactory:创建新线程时使用的工厂类。
  7. handler:拒绝策略,当任务无法被处理时的策略。

拒绝策略类型

  1. AbortPolicy:直接抛出异常。
  2. CallerRunsPolicy:调用者运行策略,让调用线程执行任务。
  3. DiscardPolicy:直接丢弃任务。
  4. DiscardOldestPolicy:丢弃队列中最老的任务。

HashMap底层实现原理

HashMap内部使用数组+链表(或红黑树)的结构,通过哈希函数计算元素位置。当链表长度超过阈值(默认为8)时,链表转红黑树。

HashMap扩容机制

当HashMap中元素个数超过容量*负载因子时,会触发扩容,新容量为原容量的两倍。

HashMap负载因子

默认负载因子为0.75,表示当元素个数超过容量的75%时会触发扩容。

ConcurrentHashMap实现原理

ConcurrentHashMap在JDK 1.7中使用Segment分段锁,JDK 1.8中使用CAS+同步锁实现线程安全。

SpringBoot自动装配原理

SpringBoot的自动装配通过@Import注解导入自动配置类,然后使用条件注解@ConditionalOnXXX来决定是否加载特定的Bean。

SpringBoot starter机制

starter是一个特殊的模块,它封装了特定功能的依赖和配置,使得开发者可以通过简单的配置快速集成特定组件。

MyBatis执行流程

  1. 读取MyBatis配置文件。
  2. 构建SqlSessionFactory。
  3. 通过SqlSession获取Mapper代理对象。
  4. 执行SQL语句。

Dubbo负载均衡策略

  1. 随机负载均衡(Random LoadBalance):随机选择一个提供者。
  2. 轮询负载均衡(RoundRobin LoadBalance):按权重轮询。
  3. 最少活跃调用(LeastActive LoadBalance):选择活跃调用数最少的提供者。

Redis数据结构和使用场景

  1. 字符串(String):适用于缓存、计数器等。
  2. 哈希(Hash):适用于存储对象的字段信息。
  3. 列表(List):适用于消息队列、时间线等。
  4. 集合(Set):适用于去重操作。
  5. 有序集合(Sorted Set):适用于排行榜、延迟队列等。
相关推荐
水无痕simon2 小时前
1.单机部署Nacos1.3.2
java
Java小生不才4 小时前
spring AI文生图
java·人工智能·spring ai
苍煜4 小时前
ThreadPoolExecutor线程池终极全解:同步异步判定+SpringBoot生产实战
java·开发语言·spring boot
c++之路4 小时前
C++ 动态内存
java·jvm·c++
2301_800976939 小时前
数据库的基本操作后续
java·数据库·sql
SECS/GEM9 小时前
SECS/GEM如何实现越南现场自定义消息
java·服务器·数据库
lv__pf9 小时前
集合框架1
java·开发语言
Hui Baby9 小时前
java抠图
java·开发语言