你好,我是 Guide。今天来分享一位三年经验的社招面经,47 min 的八股盛宴,全程被吊打!
下面是正文。
这是一场 47 分钟的社招面试,岗位是招银云创(武汉),感觉全程被吊打。
面试过程:
如何保证你的流程引擎和业务代码解耦?用到了哪些架构设计或设计模式?抽象了哪些业务功能? 我的流程审批完之后一般调用方法 A,现在想调用方法 B 或其他 n 个方法,怎么设计这种需求?(从设计模式或动态注入方面来说)我回答了策略模式,面试官说不够解耦(后面提示是责任链模式)。 聊一聊 Spring Cloud 的 Eureka,Eureka 服务探活。(不会) 说下代理模式,什么场景下使用代理模式,业务层面怎么使用?(不能说 Spring 框架下使用的 AOP、声明式事务的代理模式) 索引的原理,可以根据版本来说明,不同版本区别还是挺大的。(不清楚具体指的是哪个版本差异,可能是自适应哈希索引,但只是了解过,不熟) 索引的类型有哪些(按照数据结构维度划分:BTree 索引、哈希索引、RTree 索引、全文索引;按照底层存储方式角度划分:聚簇索引、非聚簇索引;按照应用维度划分:主键索引、普通索引、唯一索引、覆盖索引、联合索引、全文索引、前缀索引) 索引如何进行检索?(先根据关键词也就是索引列的值在索引目录里查找,找到对应的条目位置,包含主键值或完整数据行的位置,这和是否是聚集索引有关) 联合索引失效的场景?(未遵守最左匹配原则) a, b, c
联合索引,b = null
、a = xx and b = xx or c = xx
会生效吗?(b = NULL
不会使用索引,查询条件中使用 OR,且 OR 的前后条件中有一个列没有索引,涉及的索引都不会被使用到)说一说 clone
方法,clone
原理是什么,为什么是浅拷贝?(只知道是浅拷贝,原理不清楚)为什么 Redis 是单线程却支持高并发?(基于内存、基于 Reactor 模式设计开发了一套高效的事件处理模型、内置了多种优化过后的数据类型/结构实现、通信协议实现简单且解析高效) 千万级别的数据表,查询效率很慢,有什么优化方法?(数据量太大可以分库分表,另外加缓存是万金油) 分库分表如何设计?(被面试官指出没有实际分库分表经验,回答偏八股) 数据库的 explain
命令,explain
有哪些字段,分别是什么意思,重点关注哪些字段?(面试官补充说rows
也很重要,rows
显示 MySQL 执行查询的行数,数值越大越不好。我的疑问是,如果数据量多,rows
不就越大吗?)说下 ConcurrentHashMap
,有没有遇到ConcurrentHashMap
线程不安全的场景?或者哪个 API 线程不安全?(面试官指出ConcurrentHashMap
的线程安全指的是每个方法单独调用(即原子操作)都是线程安全的,但代码总体的互斥性并不受控制)。我的疑问是,那ConcurrentHashMap
的线程安全有什么用?线程的几种状态?(Java 线程的生命周期包含 NEW、RUNNABLE、BLOCKED、WAITING、TIMED_WAITING 和 TERMINATED 六种状态) 什么 API 让线程从就绪状态变成运行状态?(我回答 start
,start
是初始状态变成就绪状态,面试官说是run
方法,但我感觉说错了,线程状态变化图上写的是系统调度执行run
,不是run
方法)什么 API 让线程从运行状态变成阻塞状态?(试图进入 synchronized
代码块或方法,但锁被其他线程持有,Object.wait()
、Thread.join()
和LockSupport.park()
会导致线程进入 等待 状态,而不是 阻塞 状态)如何唤醒线程?(WAITING 状态下 notify
和notifyAll
方法,BLOCKED 状态下持有的线程释放锁)notify
和notifyAll
的区别?(前者唤醒一个等待线程,后者唤醒所有等待线程)sleep
和wait
的区别?start
和run
的区别?双向链表有哪些类?(说了 LinkedHashMap
,面试官说是单向的,怀疑他是不是听错了,AQS 也有使用,但当时可能因为紧张没有说)你有哪些精通的技术栈?(面试官表示 Spring 只是一个框架,没什么好聊的。我只能说 Spring、Spring Boot 熟悉) Spring Boot 相对于 Spring 有哪些区别?(很简单的问题) Spring 的事务机制?(推荐一篇文章:7000+字的 Spring 事务总结) Spring 事务失效的场景?(同一个类中调用 @Transactional
注解的方法、被@Transactional
注解的方法所在的类未被 Spring 管理、方法不是 public、底层使用的数据库不支持事务机制)ORM 框架,说下 MyBatis 的缓存。(不会) Spring Core 的核心组件。(没看过) MVCC 说一下。(忘了)
JavaGuide( javaguide.cn ):Java 学习 + 面试指南。笔者维护了六年,累计收获了 146k star,持续更新完善,内容全面,文章质量非常高。 《Java 面试指北》:面试专版,Java面试必备,和 JavaGuide 的内容互补。
反问环节: 面试官对我的评价:面试官反馈项目是内部项目,在大数据量和分布式的场景有所欠缺,没有使用过分库分表、MySQL 集群、Redis 集群,这些都是很常见的操作了,技术功力不够深厚。
总结:
面试问了很多八股文之外的内容,或者是一些很少被问到的八股知识点,很多都没有复习到,导致很多问题不会。另外,一些细枝末节的地方也因为记忆不清而回答错误,需要加强记忆。果然第二天一大早就收到了感谢信。
📌Java 后端技术面试准备强烈推荐《Java 面试指北》 和 JavaGuide ,400 多人参与维护完善,质量非常高。另外,目前的面试趋势是场景题变多,可以参考《后端面试高频系统设计&场景题》(20+高频系统设计&场景面试题)进行准备!
⭐面经合集:《Java 后端面经精选》
秋招结束,我拿到了华为小奖状! 毕业两年,成功跳槽! 百度毕业后拿到京东offer,总包 51w! 24届校招,入职杭州某股份制银行! 大厂四年,2024 阿里、字节、蚂蚁、小红书面试经历分享 焦虑选手成功上岸美团了! 双非本+无实习,圆梦快手! 面试了南京的两家小公司
专属面试小册/一对一交流/简历修改/专属求职指南,欢迎加入我的知识星球 ,和 3w+球友一起准备面试!