面试前了解到的公司技术栈要求:
-
参与各微服务的架构设计及研发任务分解、实施
-
负责产品线中间件服务的拆分及优化实施
-
重点参与SpringCloud开源框架的重构及源码性能优化
-
JAVA基础扎实,熟悉io/nio、多线程、集合等基础框架,熟悉JVM原理内存控制机制
-
精通Redis/RabbitMQ/ActiveMQ/Kafka等技术的原理,并根据需求进行合理运用
-
Netty、Spring Boot、MQTT、Spring Cloud或Dubbo等相关项目经验,主导优化架构设计
-
熟悉Linux基础运维以及Mysql、MongoDB、HBase等数据库
面试相关问题以及个人见解的一些答题思路:
省略一些千篇一律的介绍和寒暄……,……主要技术栈问题如下:
-
ArrayList和LinkedList的了解?-------------ArrayList底层使用的是Object数组,所以执行数据的插入和删除元素的时间可能会移动相应的元素。LinkedList底层使用的是双向链表数据结构,所以插入和删除不受元素位置的影响。但对于访问集合中的元素,ArrayList可以根据下标索引序号快速响应,而LinkedList不支持快速随机访问元素。
-
HashMap和Hashtable的了解?---------对于不同的JDK版本有着不同的底层结构。HashMap在JDK1.8之前底层是数组和链表结合而成的链表散列。HashMap通过key的hashCode处理得到hash值,然后通过(数组长度-1)&hash判断当前元素存放的位置,如果当前位置存在元素的话,就判断该元素与要存入的元素的hash值以及key是否相同,如果相同的话就覆盖,否则就通过拉链法解决冲突。JDK1.8之后当链表长度大于阀值就转化为红黑树减少搜索时间。至于和Hashtable的对比,从线程安全来说,Hashtable内部的方法经过synchronized修饰……
-
对于上面两个容器的初始值和每次扩充容量大小,以及为什么HashMap的长度是那个规律?--------如果不指定容器的初始值,Hashtable默认为11,每次扩充为原来的2n+1,HashMap默认初始为16,每次扩充为2的幂次方大小。至于为什么是2的n次方规律,和数据均匀分布减少碰撞有关……具体我也说不清。
-
HashMap多线程操作会导致什么问题?------没研究过……听面试官的交流会有链表的死循环???没明白。。。、
并发修改异常,线程不安全
-
谈谈synchronized关键字的理解?-------解决了多线程访问共享资源造成的数据紊乱,所以采用该关键字修饰的方法或者代码块在任何时刻只能由一个线程执行。
-
原子性的理解?锁的理解?--------多线程操作的一系列复合操作,要么全部成功,要么全部失败回到操作前的初始值。锁的加入就是为了防止多线程同时对共享资源的操作造成数据的紊乱……。
-
JVM的理解?Java1.8版本有什么了解?------运行于操作系统之上的虚拟机,其体系结构有类装载子系统,运行时数据区(Java栈,本地方法栈,程序计数器,方法区,堆),执行引擎,本地方法接口……等主要组件构成的。在Java7之前,方法区和永久区关联在一起,Java8用元空间代替了永久代,具体可以将堆画个草图出来。
-
JVM中ClassLoader类加载器的认识-------负责加载class文件,最好画个草图来阐述……加载流程。以及虚拟机类加载器的几种类别,启动类加载器、扩展类加载器、应用程序类加载器、用户自定义类加载器等
-
什么是OOM?StackOverflowError和OutOfMemoryError?----其实就把堆中对象的生命周期阐述出来即可,比如从伊甸园区创造新对象,伊甸园快满的时候执行一次MinorGC,把剩余的对象移到S1,然后继续创建对象,S1快满的时候执行MinorGC将剩余的对象移到S2,继续,直到移动到老年代中,导致老年代执行FullGC后依然无法进行对象的保存,就激发OOM异常。
-
JVM的常用参数调优?--------初始分配大小-Xms -Xmx,最大分配内存-XX:+printGCDetails,……具体的内存占比……
-
内存快照抓取和MAT分析hprof文件?------eclipse memory anayzer插件 设置在oom时导出对到hprof文件……
总结:一面主要是多线程、集合等基础框架,JVM原理内存的一些聊……基础理解和应用为主。
项目的穿插交流这里省略……,……
211本,985硕,女生,方向都是Java开发或者后台开发。
目前拿到了字节,百度,网易(白菜价,已拒),美团,小米的意向书,等最终结果通知的是华泰(已收到体检通知),招行信用卡,阿里
招银(资料审查中),网易互娱(二面没去),浦发(没去体检),农行(面试通过,没去笔试),腾讯(两次被捞都是一面挂,第三次还是深圳拒绝了面试),微软(笔试完),银联(笔试完),微博(拒绝了现场面试)
还有各种笔试挂的(流利说,爱奇艺,小红书,B站),后续拒绝了很多面试,再也没有精力再去了,持续躺尸中....
实习的时候真的是屡战屡败(阿里三次已回绝),真的要好好调整自己,面试过程中要充分思考,祝大家都收获自己满意的Offer😊
一. 字节跳动(北京)
字节跳动是提前批面的第一家公司,部门也是核心部门,但是但是当时脑抽投的北京岗位,很后悔没投南京的😭,日常眼馋实验室同学的南京字节Offer🤣
面试体验很好,给了自己信心和很多面试的查漏补缺以及思考方式,感恩。
还记得视频面紧张的不行,因为代码能力比较弱,很怕手撕代码,一面面试官看我没写出来,还换了一道特别简单的判断有无环,真的是感恩。
一面+二面+三面:(视频面)
- Redis数据类型的底层数据结构,String类型和SortedSet类型
- 中断处理中cpu现场环境存储在哪里
- MySQL中有a,b两列各自建立索引,在进行查询的时候,走哪个索引,怎么设计
- 三面主要问项目中的消息中间件和场景题
- 代码题目:leetcode 85最大矩形 , 判断链表有无环,手写hashmap
- 好多不记得了。。😂😂
- 还记得当时收到四面通知的崩溃,以为结束了,都在躺尸的时候收到了四面通知。。
四面(视频面)
-
灵魂拷问:觉得自己前面几轮面的怎么样,为什么觉得三面没面好,三面面试官提出的问题下面有去思考吗
-
针对被三面面试官问懵的项目问题,开始深挖和设置场景题...
-
如何比较对于同一个问题的两种算法的优劣性,不能计算时间复杂度和空间复杂度(信息增量)
二. 百度(上海)
一面(视频面)(1h20min)
- 代码题:单例模式,数组的题
- 阻塞队列实现
- 怎么设计一个线程池的各个参数,各种场景下线程池的设计
- cas底部是怎么实现的保证原子性(底部到硬件指令)
- 最后,讲一下虚拟机的知识点吧
- 只记得一些典型的问题了,一面还是基础问的比较多,细致~
二面(电话面)
- 聊项目.gif(感受到一丝凉意)
- hadoop和spark区别,为什么用spark,优势
- 为什么用这个消息队列,高可用,保证消息不丢失的机制
- 为什么用线程池,线程池有哪些,以及应用场景
- 垃圾回收的知识,为什么要垃圾回收,可达性分析,回收算法,垃圾回收器
- 写sql语句,查询各门科目成绩都>80的学生姓名
- 聚簇索引和非聚簇索引
- mysql事务和隔离级别,默认的隔离级别
- sychronized和可重入锁的区别
- ORM框架——mybatis
- Spring和Springboot (我以为会被挂的地方,不太懂Spring)
三面(电话面)
- 是个小姐姐,技术加HR面综合的感觉
- 主要问的分布式的项目以及Spark项目,没有基础知识和代码题
- 觉得自己的缺点是什么,周围人对你是什么评价,最有成就感的一件事
三. 网易(杭州)
几乎和百度同时进行~
一面(视频面)
- 为什么研究方向是机器学习,不做算法。。(我也想啊,这不是菜嘛😂)
- 聊项目.jpg,主要聊了分布式的项目,源码等等
- 那我们来问一下java知识吧
- java内存区域
- java有哪些等待通知机制
- Countdownlatch了解嘛,底层怎么实现的?
- 说下AQS
- 什么时候申请堆外内存
- 内存映射以及内存映射的方法是哪个
- 分布式缓存redis,怎么做成分布式
- 一致性hash
- 不用redis cluster怎么做?
- redis cluster一个宕机了会有哪些处理?
- 分布式数据库了解吗?
- 发布订阅模式,以及一个消费者组集群模式怎么消费
- 了解Spring吗(不了解不清楚别问我我没看)
- web下服务器怎么做负载均衡的?
二面(视频面)
- 项目和场景题
- 负载均衡的几种方法
- 缓存击穿,雪崩的应对方法,详细讲
HR面(现场面)
- 常规HR问题
四. 阿里(等最终通知)
一面(电话面)
- 项目相关:有调研其他的消息中间件吗?为什么用rocketmq?
- 线程池的原理以及各种线程池的应用场景
- 线程池中使用有限的阻塞队列和无限的阻塞队列的区别
- 如果你发现你的sql语句始终走另一个索引,但是你希望它走你想要的索引,怎么办
- mysql执行计划
- 数据库索引为什么用b+树(磁盘io的深入了解)
- 你在做sql优化主要从哪几个方面做,用到哪些方法工具
二面 + 三面 + 交叉面 + HR面(电话面)
(我已经忘完了,忘记记录面经了😭)
在坐地铁的路上面了个疑似交叉面的面试,刚开始以为是挂了,然后被别的部门捞了,也没听清楚是什么部门,内心很崩溃,当时面的感觉是秋招面的最差的一次。
却意外地等到了HR面,才知道前一面可能是交叉面(来自从没体验过交叉面的疑惑😅)~~
面试官让我帮忙推没有面过的简历,太难找了,问了别的实验室也没有,尽力啦,等最终通知!!
五. 美团(上海)
一面(电话面)
太太遥远了,不记得了.jpg
二面+三面+HR面(现场面)
距离一面有1个多月,期间收到了HR通知去上海现场面,但当时有些懒得跑,想等南京现场面,就木有去,终于等到南京现场面
- 线程池的原理以及各种线程池的应用场景
- 项目深挖,画出架构图,加MQ源码
- MQ不能保证只会消费一次,如果让你在MQ中加入,你要怎么设计
- 消息去重保证幂等性有哪些方法
我是只有七秒记忆么,这是最近面的一个了,大多还是不记得了😂
六. 小米(南京)
一面(现场面 2h)
去了南京小米公司面了一波,整整两个小时让我怀疑人生
- 问了研究方向
- 项目中使用的MySQL版本号,使用哪个引擎,为什么
- MySQL两个引擎的区别,为什么INNODB使用聚簇索引,而不用MyISAM行指针的形式
- SQL优化的几个方面
- Redis的数据类型,SortedSet底部实现
- Redis分片的几种形式,Redis Cluster
- 介绍一下JVM知识
- Java线程池原理及其应用场景
- Concurrent并发包里几个类介绍一下
- HashMap求hash值的时候,无符号右移16位的意义
- 解决hash冲突的几种方法,在哪些地方用哪种
- tcp粘包和拆包的方法,tcp可靠性通过哪几个方面保证
- http无状态的,session和cookie存储在哪里
- 调用一个模块的服务的请求参数是加在哪里,修改http请求头来保持请求的状态
- 一个服务部署在多个服务器上,怎么负载均衡,怎么让请求打到某个服务器上,怎么寻址,一个服务器宕机怎么感知
- io多路复用,select,poll,epoll的底部原理
- 手写一致性hash
- 算法题:两个集合求交集,其中相同的数字出现多次就输出多次,无序
二面(电话面)
不想再跑一趟了,向面试官改成了电话面
- 避免幻读的方法,MVCC中怎么避免幻读的某个方面
- Full GC什么时候发生,各种垃圾回收器,哪些是年轻代,哪些是老年代
- 数据库索引结构,为什么是B+树
- 项目ing
- 感觉面的不太好,二面面试官说有三面,没等来三面,等来了Offer Call
七. 华泰(南京)
一面
- 项目问题ing....
- http的get和post区别
- 大量数据不能一次性放到内存,出现频率最大的数字,数据倾斜的极端情况怎么办
课题考察
分布式全局唯一ID生成器
- 耗费心血,熬夜三天
HR面(5分钟)
主要问成绩,家庭情况和职业规划
已经收到体检通知啦,希望一切顺利,加油
八. 招商银行信用卡中心(等最终通知)
初面
- 项目里用了什么设计模式,详细讲一下
- 项目ing
- 微服务
终面(技术+HR面)
-
问了研究方向....详细讲讲看
-
项目问题
-
HR问题:如果转前端可以吗,学习要多久(回答的是更想做后端,害怕.jpg)