互联网大厂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):适用于排行榜、延迟队列等。
相关推荐
像我这样帅的人丶你还14 小时前
Java 后端详解(四):分页与搜索
java·javascript·后端
她的男孩14 小时前
数据权限为什么不能只靠注解?Forge 的 Mapper 层 SQL 改写源码拆解
java·后端·架构
tntxia15 小时前
Mybatis的日志输入
java
亦暖筑序16 小时前
Java 8老系统Browser Agent实战:三层拦截把AI操作后台变成可审计流程
java·后端·设计模式
用户2986985301419 小时前
Java 实现 Word 文档加密与权限解除
java·后端
Yeats_Liao20 小时前
14:Servlet中的页面跳转-Java Web
java·后端·架构
未秃头的程序猿20 小时前
告别"if-else地狱"!Java 21模式匹配,代码优雅了10倍
java·后端·面试
鹤望兰67520 小时前
字节跳动国际支付-后端开发-三面面经
java
Flittly20 小时前
【AgentScope Java新手村系列】(14)人机交互
java·spring boot·spring
RainCity21 小时前
Java Swing 自定义组件库分享(十二)
java·笔记·后端