该篇 由圈主[Rocky编程日记] 记录
一面
自我介绍;
交流项目:项目介绍、问一些项目细节是如何实现的、某些极端情况有无考虑、数据库表如何设计;
HashMap:HashMap的数据结构, put方法的细节,map中链表特别长之后会有什么变化,
扩容为什么每次都是扩大2倍,或者说为什么容量是2的幂次 put操作和扩容的先后顺序
线程池:线程池的参数;
单例模式:是什么?有啥用?有几种实现方式?静态内部类实现单例模式为什么属于懒汉式的?写代码(双检锁实现)
为什么要有两个if(singleton==null)?用volatile关键字修饰的作用。为什么实例化对象不是原子操作?包含哪些步骤?
如果不加volatile关键字会出现什么问题?使用private修饰构造函数的作用?
反射了解吗?反射能访问private的方法或字段吗?即然利用反射机制可以破坏单例模式,有什么方法避免呢?(一开始回答使用个字段标识是否已经实例化,但似乎行不通;然后回答了改成enum、饿汉式实现单例;)
MySQL数据库:事务隔离级别,及其解决的问题;详细说说脏读、脏写、不可重复读和幻读;为什么用了MVCC还不能解决幻读?
快照读和当前读;说说聚簇索引和非聚簇索引;索引的数据结构;B+树的优势;(回答中提到了B+树更矮,面试官直接逼问“B+树真的更矮吗”
写代码
leetcode 15.三数之和(面试用的代码平台运行不了,只讲了代码思路)
面试时间快到了,问我“哪些你比较了解,但是在本轮面试没考察的,我可以反馈给下轮面试官”(回答了JVM、JUC、Redis、Netty、计算机网络);
二面
自我介绍;
TCP为什么要三次握手、四次挥手?
并发事务下会出现什么问题(脏写、脏读、不可重复读、幻读)?解决方法(事务隔离级别)?
说说Spring中IoC和AOP;
说说动态代理的两种实现方式(回答JDK、CGLib);
静态代理和动态代理的区别;
Session和Cookie的区别;什么场景下使用?怎么保存Session?(说了Redis)
ThreadLocal的作用;
死锁是什么?产生的原因?产生的条件?怎么解决?
MyBatis的作用;
用过dubbo吗?你会怎么实现远程过程调用(RPC)?
两个栈怎么实现队列?说说思路;
写代码:字符循环右移(ABCDEFG->DEFGABC)
介绍简历中的项目,自己在其中负责的工作;怎么部署的?
场景题:班级、学生、课程怎么设计数据库表;
场景题:某用户在快手刷视频时,怎么进行视频去重,让用户看过的不再刷到?(回答利用Java或redis中的set数据结构保存已看过的id)怎么从大量的短视频中选出其中合适部分呈现给用户?(回答推荐算法)
反问环节;
三面
自我介绍;
城市意向;岗位意向;公司意向(互联网、国企、制造业)
Java用了几年了?对哪些框架、工具比较熟?
自己感觉python和java的区别?
对加班的看法?
遇到哪些印象深刻的困难?
遇到困难怎么解决?
最近关注了哪些行业热点?(聊了ChatGPT)
最近看了哪些书?
用得比较多的Java工具(回答集合、线程池);
MyBatis的底层原理、运行流程?(回答不太了解,然后问你会怎么实现MyBatis);
用过哪些设计模式?
如设计一个系统,你会怎么为功能分层?(回答了MVC)
说说个人优缺点;
面试官介绍部门的情况,负责的业务和功能,问我倾向哪个;
个人爱好;
喜欢什么类型的公司?
反问。
HR面
交流了一些比较常规的问题,例如城市意向;岗位意向;个人爱好;优缺点;对哪一面印象深;
问了我当前offer情况;