互联网大厂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):适用于排行榜、延迟队列等。
相关推荐
budingxiaomoli6 小时前
Spring IoC &DI
java·spring·ioc·di
Spider Cat 蜘蛛猫6 小时前
Springboot SSO系统设计文档
java·spring boot·后端
未若君雅裁6 小时前
MySQL高可用与扩展-主从复制读写分离分库分表
java·数据库·mysql
月落归舟6 小时前
一篇文章了解Redis内存淘汰机制与过期Key清理
数据库·redis·mybatis
学习中.........6 小时前
从扰动函数的变化,感受红黑树带来的性能提升
java
计算机安禾7 小时前
【c++面向对象编程】第24篇:类型转换运算符:自定义隐式转换与explicit
java·c++·算法
weixin199701080167 小时前
【保姆级教程】淘宝/天猫商品详情 API(item_get)接入指南:Python/Java/PHP 调用示例与 JSON 返回值解析
java·python·php
环流_7 小时前
redis核心数据类型在java中的操作
java·数据库·redis
雨辰AI7 小时前
SpringBoot3 项目国产化改造完整流程|从 MySQL 到人大金仓落地
java·数据库·后端·mysql·政务
带刺的坐椅7 小时前
Java 流程编排新范式 Solon Flow:一个引擎,七种节点,覆盖规则/任务/工作流/AI 编排全场景
java·spring·ai·solon·flow