上海景行智合安全技术Java实习面经(接offer了,实在面不动了)
《面试题目》
- 8投递
- 8约一面
- 8一面面试
- 8约二面
- 8二面面试
- 一面:22min,面完秒约二面
- 自我介绍
- 讲一下Agent项目
- 用友的实习项目挑两个个人产出讲一讲
- 实习产出我看你写了用线程池并行查询,能详细说一下你怎么设计的并行方案吗,线程池的参数你是怎么设计的,并行化的过程中有没有遇到哪些挑战
- 实习产出我看你写了用lua脚本和Redission分布式锁他们分别解决了什么问题,为什么不能只用一种呢
- 实习产出用到了TTL,那ThreadLocal和tableThreadLocal和TransmitterThreadLocal有什么区别,为什么在异步线程下前两者会失效
- Synchronized和Reentrantlock区别
- 线程池的拒绝策略有哪些
- 索引失效有哪些
- 如何解决慢查询问题
- Spring @Transactional 事务注解失效有哪些场景
- 反问:岗位业务
- 反问:几轮面试
- 反问:面试评价
- 面试官主动说了薪资待遇和其他一些基本信息(一天200,包住,早九晚六,双休)
- 最快什么时候入职
- 二面:13min,忘录音了,凭记忆说了
- 自我介绍
- 你学Java是以什么方式学的,学了多长时间
- 你自学项目总共学了多长时间
- 你班多少人,你觉得你在你们班能排第几(就想起来这些,然后还有一些非技术问题)
- 集合种类有哪些,他们各自适配的具体业务场景有哪些
- 事务注解通常放到哪层,为什么
- 讲一个你认为你在实习或者写项目遇到的难点
- 你认为你是有着什么样特性的人
- 反问:有三面吗
《参考解析》
-
MySQL深度:MySQL InnoDB使用B+树索引,支持ACID事务。关键知识点:聚簇索引(主键索引)叶节点存完整行数据;辅助索引叶节点存主键值(需回表);MVCC通过undo log版本链+ReadView实现多版本并发控制,解决脏读/不可重复读;事务隔离级别从低到高:读未提交→读已提交→可重复读(默认)→串行化。
-
Redis核心:Redis常用数据结构:String/Hash/List/Set/ZSet。持久化:RDB(定期快照,恢复快,数据可能丢失)和AOF(追加日志,数据安全,文件大)。缓存穿透用布隆过滤器;缓存雪崩加随机过期时间+多级缓存;缓存击穿用互斥锁或逻辑过期。分布式锁用SET key value NX PX + Lua脚本保证原子释放。
-
Spring框架:Spring IoC容器管理Bean生命周期,核心是依赖注入(DI)。AOP面向切面编程通过动态代理(JDK/CGLIB)实现横切关注点(日志/事务/权限)。Spring事务传播行为:REQUIRED(加入现有或新建)、REQUIRES_NEW(挂起当前,新建)、NESTED(嵌套事务)等。
-
Java并发:Java并发:synchronized关键字(偏向锁→轻量级锁→重量级锁升级);ReentrantLock(可重入、可中断、公平锁);volatile(内存可见性+禁止指令重排,不保证原子性);CAS(Compare-And-Swap,无锁乐观并发);ThreadLocal(线程本地变量,WeakReference,注意内存泄漏)。线程池核心参数:corePoolSize/maximumPoolSize/keepAliveTime/workQueue/handler。