💡应聘技术问题
问题:"什么是TCP三次握手,为什么需要三次而不是两次?"
参考答案:TCP三次握手是指建立TCP连接时的三个步骤:
- 客户端发送SYN包(seq=x)给服务器,进入SYN_SENT状态
- 服务器收到SYN包,回复SYN+ACK包(seq=y, ack=x+1),进入SYN_RCVD状态
- 客户端收到SYN+ACK包,回复ACK包(ack=y+1),双方进入ESTABLISHED状态
需要三次而不是两次的原因:
- 防止已失效的连接请求报文段突然又传送到了服务端,导致服务端错误建立连接
- 两次握手只能保证一方知道对方能收能发,无法双向确认
问题:"解释一下Java中HashMap的工作原理"
参考答案:HashMap基于哈希表实现,工作原理如下:
- 底层结构:JDK 1.8中,HashMap采用数组+链表+红黑树的结构
- 存储过程:通过key的hashCode()计算哈希值,经过扰动函数处理后确定数组索引位置
- 冲突处理:如果位置为空直接插入;如果有元素,通过链表或红黑树解决冲突
- 扩容机制:当元素个数 > 容量×负载因子(默认0.75)时,扩容为原来的2倍
- 红黑树转换:当链表长度 > 8且数组长度 > 64时,链表转换为红黑树,提升查询效率
时间复杂度:正常情况下O(1),最坏情况O(log n)(红黑树)
问题:"什么是线程安全?如何实现线程安全?"
参考答案:线程安全指多个线程同时访问某段代码或共享资源时,不会出现数据不一致或预期之外的错误。
实现线程安全的方法:
- 同步代码块/方法使用synchronized关键字,保证同一时刻只有一个线程执行
- 锁机制ReentrantLock、ReadWriteLock等,提供更灵活的锁控制
- 原子类AtomicInteger、AtomicReference等,利用CAS操作保证原子性
- volatile关键字
- 线程安全集合ConcurrentHashMap、CopyOnWriteArrayList等
- ThreadLocal
- 不可变对象String、Integer等,创建后状态不可修改
选择原则:根据场景权衡性能和安全性,优先使用高级并发工具。
问题:"什么是数据库索引?有哪些类型?"
参考答案:索引是数据库表中一列或多列值的副本,按特定顺序存储,用于加速数据查询。
索引类型:
按数据结构分类
- B+树索引:最常用,适合范围查询,InnoDB默认索引
按列数分类
按物理存储分类
索引优点:加快查询速度、加速排序和分组 索引缺点:占用存储空间、降低增删改性能
问题:"解释一下Spring IoC和AOP的核心概念"
参考答案:
IoC(控制反转)
- 概念:将对象的创建和管理权交给Spring容器,而非手动new对象
- 核心容器:ApplicationContext、BeanFactory
AOP(面向切面编程)
- 概念:将横切关注点(日志、事务、权限等)从业务逻辑中分离
- 连接点(JoinPoint):程序执行的某个位置(方法调用、异常抛出等)
- 通知(Advice):切面在特定连接点执行的动作(前置、后置、环绕、异常、最终)
- 织入(Weaving):将切面应用到目标对象的过程
- 实现方式:JDK动态代理(接口)、CGLIB代理(类)
🎯应聘面试准备
问:想应聘上述岗位,需要做哪些准备?
答:
简历优化
1.核心信息前置
- 学历背景:
- 工作经验:
- 技术栈: 熟悉Java、MySQL、Spring等主流技术栈
- 意向岗位:
2.匹配岗位关键词
- 技术栈: Java、C++、Python、JavaScript、MySQL、Spring
- 工程能力:
- 工具与平台: Git、Maven、IntelliJ IDEA、Docker
- 能力标签:
技能梳理
后端开发技能
- 编程语言
- 框架Spring Boot、Spring MVC、MyBatis
- 数据库
- 中间件
前端开发技能
网络与协议
算法与数据结构
面试准备
经典问题
系统设计
项目经验准备
编程大赛经历