一面、笔试
笔试题还是比较中规中矩,比较幸运没有算法,公司可能比较看中SQL能力,所以大部分题目都是SQL相关的,有道并发解决问题,需要你提供技术解决方案。
- 本次没有算法
- SQL
- 高并发解决方案:流量削峰的整体设计方案(高可用,一致性等方法考虑)
二面、技术面试
做完笔试题和个人基本信息的填报,紧接着就是二轮技术面试,面试官很和蔼,言语之间很有礼貌,所以交流的比较舒服和流畅。
- 自我介绍
大部分面试流程一样,首先自我介绍,我主要是根据个人情况,工作经历,日常,性格等简单介绍了一下,也就是开场白。
自我介绍之后,也就进入了面试的正题,大致从基础,中间件,数据库等几个层次去面,题目还算接近开发,没有偏、怪、冷的这种刁钻题目。
- JVM
- JVM运行时数据区(方法区、堆、栈、本地方法栈、程序计数器) 常规介绍
- JVM内存模型(堆) MetaSpace,Old,Young(Eden,S0,S1) JDK不同版本的对比
- 为什么去除永久代? 没有永久代,长期使用的对象存储等
- 内存分配比例,Eden,S0,S1这三者中的关系和垃圾回收顺序,垃圾回收的方法等。
- GC
- GC的常用算法
- 垃圾回收器(G1等) JDK版本升级过程中,垃圾回收器的演进
- 多线程
- sync、volatile关键字实现原理
- sync的锁升级
- JMM内存模型(内存屏障等)
- Reentranlock的实现原理
- lock和sync的区别对比
- lock中公平锁和非公平锁区别,是怎么具体实现的
- 什么是AQS(抽象同步队列)
- AQS是如何基于CAS实现线程抢占锁的
- CAS的实现原理
- 原子性?可见性?volatile保证保证了原子性了吗?
- 中间件
- Redis常用的数据结构,使用场景,数据结构的底层实现
- Redis为什么效率高?(单线程,基于内存)
- Redis是如何在单线程的前提下,实现高性能的呢? (NIO 多路复用)
- 什么是NIO,什么是BIO,什么是AIO,NIO的多路复用是什么?
- NIO的使用场景,Netty底层实现原理。
- Redis穿透,如何解决(布隆过滤器)?
- 什么是布隆过滤器?实现原理?布谷鸟过滤器与其的区别和选取场景
- 数据库
- MySQL语句的执行流程(缓存,解析,预处理,优化器,执行计划,执行引擎,存储引擎)?
- 什么是索引,索引的实现原理。
- InnoDB,MyISAM的区别
- MySQL的B++Tree的落地形式
- MySQL索引的使用规则,如何解决慢SQL等
- 索引为什么能够提高效率
以上基本是技术面的大致问题,Spring源码,Mybatis源码,Dubbo,Zk,Cloud等原理没有涉及到。但是这些也基本是面试的高频面试题目
三面、项目面试
技术面,紧接这就是项目面试,经过技术面试的洗礼,接下来就是项目面试的考察。
- 简历项目中,项目的整体项目介绍,设计模块,用到的方案技术。
- 项目中的技术成长。
- 项目中用到的技术的原理介绍(拓展)。
- 项目中SQL的使用情况
- 慢SQL的解决方案,如何查看执行计划,如何通过执行计划来考虑优化SQL的方向
四面、CTO面试
经过技术面试和项目面试,接着就是CTO的整体把控,CTO还是很有气场的,主要是对面试者的整体考察。
- 自我介绍
- 项目经历
- 项目中的亮点,难点
- 哪个项目对自己的帮助最大,成长最快
- 从你认为的难点中考察Java基础(基于个人项目,不同的人可能是不同的)。
- 什么是Spring的AOP,Spring是如何实现AOP的(动态代理)
- 什么是动态代理?JDK的动态代理,实现原理,invoke方法?涉及到的参数?
- 什么是ClassLoader(类加载器)
- 如何通过切点进去切面?
- 自己如何实现AOP切面编程?
- 如果让你做一次技术分享,从熟悉的技术点中选一个自认为学习最好的(整个技术的全面考察)。
五面、人事面试
经过这么多轮面试,终于到了谈人生和理想的环节了,本人最喜欢的环节!!!
- 工作经历
- 是否在职?
- 为什么离职?
- 个人认知(对自己技术的评价)
- 个人成长
- 之前公司的薪资状态
- 期望薪资
总结
总体来说,这次面试面试官都很平易近人,没有区别对待的感觉,很和蔼的跟你进行面试交流,你不会的问题或者错误的理解会对你答疑和纠正,也会化解尴尬,说拓展问题,不会可以理解。
技术方面,也基本都是JAVA相关的考察问题,个人答得还算可以吧。