互联网大厂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):适用于排行榜、延迟队列等。
相关推荐
嘻哈∠※6 小时前
0061基于 SpringBoot 的投稿与稿件处理系统设计与实现
java·spring boot·后端
白狐_7987 小时前
408数据结构第8章:排序②——性质对比秒杀、场景选择与外部排序
java·数据结构·算法
zander2587 小时前
LeetCode 84:柱状图中的最大矩形——单调栈如何确定左右边界
java·数据结构·算法
码匠许师傅7 小时前
【C++ 面试真题】聊聊 C++ 的拷贝构造与拷贝赋值
java·c++·面试
glustful8 小时前
企业内部审计项目管理 系统开源(springboot+vue3)
vue3·springboot
极创信息9 小时前
系统安全隐患全方位排查方案:标准化渗透测试全流程
java·opencv·struts·数据挖掘·eclipse·语音识别·hibernate
汉字萌萌哒10 小时前
2019CCF-CSP入门级C++试题解析
java·开发语言·c++
喜欢的名字被抢了10 小时前
程序出问题怎么查,以及如何让它不掉线
java·运维·数据库
数据知道10 小时前
反序列化漏洞:Java、PHP、Python 三条线各讲透
java·网络·python·安全·网络安全·php
2601_9499506311 小时前
Java 面试准备,用练题簿把“背过八股”变成“真正会答”
java·开发语言·面试·刷题·小程序推荐