一、自我介绍 & 编程语言
- 先简单介绍一下今天的学习和实践经历。
- 你提到了解过其他语言,能大概说一下了解过哪些吗?
- 除了课堂上学的语言之外,其他语言你是怎么去学习或者去了解的?(不是问方法论,而是问你之前实际是怎么做的)
- 你刚提到了解 Go 的基础,能简单讲一下吗?(基于哪些基础类型)这里表意不清晰,而且说基础我就以为将协程呀这些东西,但是他想要的不是那个,这一点面试体验下来非常的难受
- 按你现在理解的来讲,Go 的基础类型有哪些?
- 你写 Go 写了多久?大概写了什么 demo?
- 后面就没有再去接触或继续了解过 Go 了吗?
二、Spring AOP & 代理
- 你说 Go 的"中间件"类似 Java 的 AOP,那简单介绍一下 Spring AOP。
- AOP 除了环绕增强还支持哪几种增强方式?/ Spring AOP 提供哪几种通知方式?
- 如果我要去做 AOP,可以用哪一种方式来做?(具体的工具/注解,不是概念)
- 场景题:同一个 class 里有 public 方法 A 和方法 B,两个都开启了 AOP;从外部调用 A,A 内部又调用 B。这种情况下 B 的 AOP 增强会生效吗?
- 如果我希望 A 调用 B 时也能让 B 的增强生效,可以怎么做?这里我说拆Bean的方式但是被他否定了然后他想让我说直接获取AOP对象的那个方法但是我不记得,然后就各种绕弯子的暗示,面试起来非常的难受。为什么不明说呀!
- 但我不希望 A 也加上 AOP(事务要最小粒度),这种情况下怎么处理?通过获取代理对象去调?那样会不会出现循环依赖?
- 换一个问题:Java 提供的代码增强方式有哪几种?
- 动态代理具体是怎么实现的?讲一下。
- Java 自身提供的代理是面向接口还是面向类的?
- 动态代理有哪些常用工具可以用?这里他想问的是AspectJ和CGLIB这些东西但是他说代码增强,emm我觉得还是提问的方式非常的奇怪
- 有没有了解过 CGLIB?它在什么情况下会用到?
- CGLIB 是面向类还是面向接口的?它和 JDK 动态代理的本质区别是什么?
- 你说 CGLIB 在"字节码那个时间段"增强------这个"时间段"具体指什么?这里确实是我表达的不系统导致的,这个也是我这次面试最大的问题,面试官后续评价也是知识广度可以但是细节不到位而且表述不出来
三、JVM & 类加载
- 我看你写最熟悉 JVM 的结构,能简单介绍一下一份
.java源文件变成一个类的过程吗? - 类加载顺序是什么样的?(即源文件 → JVM 中可执行字节码的分步过程:静态变量、常量、静态方法等分别在哪个阶段加载?)这个地方确实是我很久没有背八股了然后将C相关的链接等东西还有绝对地址相对地址这些东西说进去了,还是表达不系统的原因,认了
四、JUC & 并发
- JUC 应该是了解的吧?简单介绍一下 JUC。
Lock(如 ReentrantLock)底层实现和synchronized的区别是什么?synchronized能锁什么?(对象、方法、代码块)
五、线程池
- 线程池有用过吧?构建一个线程池需要哪些参数?
- 这些参数分别是干什么的?讲一下线程池的执行流程(核心线程数、最大线程数、阻塞队列、拒绝策略之间的关系)。
- 拒绝策略具体有哪几种?
- 场景题:核心线程数 5,最大线程数 10,新创建的线程池(没有提交过任何任务),这时一次 submit 11 个任务进去,会有多少个线程?
- 那如果我现在就只提交 1 个任务呢?
六、Redis
- 你常用过哪些中间件?
- Redis 常用的数据结构有哪些?
- 怎么读取某个 String 类型 key 对应的 value?
- 如果我希望获取所有以
tensas开头的 key,可以怎么做?问得有点细节了,可是我真的不记得了,但是我知道是有redis指令可以获取的,不理解为什么要这么细? - 你平时用过 Redis 哪些命令?
- 详细说一下
SETNX:它有哪些参数?返回值是什么?
七、MySQL
- MySQL 是如何保证一致性的?
- MySQL 有哪些隔离级别?
- 你刚说的 MVCC 在哪些隔离级别下是存在的?
- 读已提交(RC)也有 MVCC 吗?那它和可重复读(RR)的 MVCC 区别是什么?这里他说我需要引导的应该就是这部分的内容导致的,因为个人确实需要去挖掘,然后他对我有压力,然后我就有点犹豫
- 读未提交也有 MVCC 吗?
- 介绍一下间隙锁。
- 间隙锁在哪种隔离级别下才会建立?
八、AI 编程
- 你最近有用过 AI Coding 或者 AI 相关的工具吗?
- 简单介绍一下你的使用经历。
- 有没有想过自己写一些 Skill,对 AI 进行一些约束?
九、算法题
- 做一道算法题:合并两个有序数组,要求空间复杂度 O(1)。
- 你能先解释一下"空间复杂度 O(1)"是什么意思吗?
- ArrayList 的底层是什么?扩容时会发生什么?扩容算不算额外空间?
- (简化)假定第一个数组长度为 8,例如
[1, 1, -1, 4, 0, 8, ...],应该怎么做?
这个题目我没有做过但是刚开始的时候我用List去处理的但是他给我补充上下文之后需要我去修改,然后给的时间比较少最后就不了了之了,emm,给LeetCode完整的题目不行么非要阉割那么多前提条件!!!
面试官最后的反馈
- 知识面比较广,但大部分东西都需要面试官引导才能讲出来,缺少主动成体系的输出。
- 面试是双向交流,不是单向问答;候选人不需要严格按面试官的预期作答,而是应该围绕问题自然展开。
个人感觉CSIG的这一次面试体验非常的不好,主要就全部都是八股的追问对我的项目一点都不感兴趣。从面试官风格上,这是我面试体验最差的一家,因为跟他面试有非常大的压力的感觉,而且面试官是那种心里有一个答案,然后需要你去说出来,但是给的上下文不够全面而且我还是没有主动去问去确认细节按照我的想法来回答,然后就导致面试官一直去不断的引导我回去,但是引导的方式确实不太好emm
后续:一面秒挂