本人 21届双非本科,在大二的时候开始学习Java感谢我的恋爱6年之久的女朋友哈(她也是Java ),一同经历了一年多的努力,互相理解互相鼓励,秋招也都算一起拿到了满意的offer(有赞、网易、京东、美团、奇安信、蘑菇街、58等),虽然没有像大佬们一样拿了很多大厂,但对于我们双非本已经心满意足了 。以下分享一下个人的一些总结!大佬勿喷哦 !
关于校招
大家都知道每年都有春招和秋招两次招聘 ,春招一般在2月中旬就陆续开始了,面向的是 本届应届生招聘 和 次届的暑期实习生招聘,对于应届生招聘,可能春招的招聘力度与hc是没有秋招多的,据我了解大多数应该是大佬们秋招拒了很多offer后的补录名额,可能竞争会相比与秋招更加激烈,但是春招对于次届毕业生而言,个人觉得是进入大厂的好机会,各大公司会招聘暑期实习生, 面试难度会比秋招小一些,转正的概率还是很大的,也就是说人家还在忙于秋招,你已经转正结束秋招了(身边有几个朋友就是转正在大厂了)!当然有很多大佬会选择 鱼与熊掌兼得 边忙于实习转正答辩边秋招面试。
秋招的话,是应届生最好的招聘机会,提前批有的公司7月份就已经开始了,8月中旬可能陆陆续续开始正式批,个人觉得如果准备充分,就大胆的投提前批吧,一般提前批都是免笔试直接面试的,况且SP的几率挺大的应该,但是竞争会激烈一些,都是大神,还有要注意有的公司声称提前批与正式批不冲突,但其实往往都会有你的面试表现的,提前批如果表现不好的话,可能就凉凉了 ,我今年就没敢投,也有部分原因是在实习一天很忙,也没能抽出时间复习。
个人的春招秋招面试感受:面试可以很快的提升自己,每一次面试都要找一下自己的不足,最好手机录音,之后review一下自己答的不好的地方,避免下次面试答不出来,我第一次面试是在大三找寒假日常实习,记得那时面试很紧张,说话有些语无伦次,没有任何面试技巧,后来随着面试场次的增多,自己也变得能“白话”(东北话,就是能说会道的意思吧 )了,秋招的时候每次都能和面试官聊的比较好!除了技术面之外还有就是有些公司hr也有决定权,所以提前准备一些hr常问的,不至于现场答不好,被hr PASS掉。下面举例一些我认为比较难答的问题:
关于准备
下面分享一下楼主秋招前的准备吧(仅供参考哈)!
首先Java开发,我个人主要是先BFS,再DFS,针对不同面试官有不同的收获吧,有的就比较考察知识面的广度,有的就比较喜欢深挖一个点,挖到你不会为止 !总之多多准备是没有坏处的哈。
个人主要分为以下几个模块准备的:
项目
有一个好的项目可以对我们面试有很大的帮助,也会提起面试官的兴趣,因为很多问题是随着项目展开问的。并且我觉得最好是有落地项目的支撑,有一个实习经历是很好的,当然如果是大厂实习就更棒了!没有当然也没有关系, 现在有很多开源项目,或者教学视频,可以跟着动手做一做,或者自己添加一些可以唠嗑的亮点 切记要多问自己为什么,为什么要用这个技术?解决了什么问题?以及用到的技术与其他技术点的对比等等。且要考虑健壮性与特殊情况吧,很多面试官会当场对你的项目给你抛出问题,问你解决方案等。我们也可以适当留出空隙等他问(但是一定要会解决哦 )。当然场景题我们能提前准备,且解决方案越多越好被,择优选择,不单单是我们自己的项目,也可以多参考别人的问题(面经啦,同事的难点啦什么的),解决问题多了,自然大部分场景题都不至于没有思路回答不上来了。关于项目就不再多说啦,每个人有每个人的理解,但是网上资源很多的也,如果没有好项目可以自己寻找感兴趣的做一个两个哈。
算法
由于本人算法比较薄弱,算法实在给不出什么建议,就说说我自己准备了哪些吧,前期是看了牛客推出的 左神大佬的算法视频 讲的通俗易懂(有需要我可以帮忙翻一翻资料 ),之后就是着手每天强制自己刷题做总结,感觉笨笨的我,随着日积月累,还是有所成长的 , 面试中算法题大部分还是可以秒出来的,本人主要刷了 剑指offer 3-4遍 + leetcode 前450道 2-3遍左右的样子,主要是太笨了 刷了忘,忘了刷,没办法,那我就多做几遍好了。
如果时间不够,我建议还分类去准备一些常见的题目比较好,8大排序算法一定是要会的,然后就是可以针对链表、树分别找出常考的20-30道题目去做去吸收,还有一些DP、贪心、排列组合经典题目,图的话可能code的不多,但是图的算法还是要掌握的,必要时讲出来,拓扑、迪杰斯特拉、普利姆和克鲁斯卡尔啥的。
操作系统、计算机网络、数据结构
个人觉得这三类基础知识无论是前端、后端任何语言还是测开应该都会考的吧
数据结构
数据结构 ,无非就是数组、链表、栈、队列、树、图这几类,最重要的应该是对他们的使用场景和区别要有所了解。比如树的话,搜索树、平衡搜索树、红黑树、前缀树、B、B+这些。
可以多看面经和博客或者抽时间读一本书比较好,关于数据结构,我有读过 《大话数据结构》个人觉得还不错,适合入门。
计算机网络
关于计算机网络,《计算机网络自顶向下》 还是比较不错的,还有就是可以针对性看一看面经与牛友分享的文章,其实常问的就是那几个问题而已,例如:
操作系统
个人觉得OS这块还是比较好准备的,考的主要就是进程线程、虚拟内存这两大块比较多。Linux考的更多的是常用命令,以及给你个问题怎么排查什么的。
先分享两篇大佬写的文章:
进程、线程全家桶
https://www.nowcoder.com/discuss/450511?source_id=profile_create&channel=2002
内存管理
https://www.nowcoder.com/discuss/445401?source_id=profile_create&channel=2002
面试题举例:
Java基础
Java基础个人觉得主要看一些源码吧,例如Hashmap(可以1.7和1.8都看一下)、List的实现、ThreadLocal、Iterator、String、Integer、Java8的新特性、NIO相关的等等,且像集合类一般都会继续问线程安全的实现类也需要看,例如CurconrentHashMap、CopyOnWriteArrayList等等。其他基础常问问题网上都有总结,很好找的,且比较全面。我就不多说了哈!
Java多线程
关于多线程, 《Java并发编程的艺术》这本书比较不错,话不多说直接举例一些面试题吧:
JVM
关于JVM部门,建议阅读 《深入理解JVM》 这本书,首先主要掌握就是JVM的内存划分,各部分存储什么,干什么的,堆的划分、对象分配原则(对象在老年代还是新生代,怎么移动什么的)、垃圾回收算法、如何标记对象(引用计数法的缺点?GCroots法都哪些对象可以当作根)、对象由哪几部分组成、垃圾回收器(就是G1、CMS可以主要看看,再者可以看下ZGC收集器)、双亲委派原则及破坏、类的加载过程(可以从.java生成.class过程说起,JIT编译器)等等。
大多数比较常见的题目,再者就是JVM调优相关,这个怎么说,就是按自己理解和项目的不同来说吧。之前有看过这篇博客,介绍的还比较全:https://blog.csdn.net/wisgood/article/details/52634852
设计模式
这个怎么说,我个人就是看书和看这个 https://refactoringguru.cn/design-patterns 来学习,看完后用自己的话总结,写个demo理解。另外就是发现各大框架有哪些地方用到过,各类模式的好处(本菜鸡在项目中还没用过 )。
框架
框架部分我也就是主要学了Spring、SpringMVC、Mybatis、SpringBoot、Netty和Dubbo吧,SpringCloud只是了解了解。
传智播客、黑马、慕课网、B站都能找到相应的视频,面试的话可能也是主要看一看各个框架的原理和理解吧,例如Spring的IOC,AOP?循环依赖怎么解决的?bean的生命周期?SpringBoot的启动流程?RPC框架都包含哪几部分?
我在面试中框架问的还是不多的,问也都是一些特性原理,常见的一些问题,花点时间准备下应该问题不大。
数据库
数据库方面我只学习了MySQL,也是比较常问的,书的话我个人觉得 《高性能MySQL》和 《深入了解InnoDB引擎》还不错,举例:
Redis
现在缓存可能也是很常问的了, 《Redis的设计与实现》这本书还是很适合读的,通俗易懂,最好深入学习一下例如说下底层命令什么的,常见面试题举例:
中间件
关于中间件,我了解的可能首先就是消息队列,我最常使用的就是 RabbitMq,但是也要对其他的产品特性与应用场景有所了解,例如Kafka、RocketMq的对比。消息队列常问的问题例如:
然后我就是学习来ZK、搜索引擎ES和Solr、ngnix与LVS
ZK可以掌握它的应用场景以及ZAB原子广播协议和崩溃协调,
搜索的话可以学习下倒排索引,以及二者的区别和ES写入原理之类的。
负载均衡可以对比ngnix和LVS区别,以及LVS的三种模式,ngnix的话我们经常使用ngnix+keepalive一起使用,避免ngnix的单点故障,当然还要知道一些负载均衡算法。
分布式
分布式相关的知识还是要掌握的,毕竟我们以后的系统都不可能是单点部署的,这就可以看下CAP理论?BASE理论?分布式事务?限流的方案?分布式id生成策略?分布式锁?或者常用的Hystrix组件等。楼主也是简单的学习了一下,面试时还是考的居多的。
大数据类型
这类题可以多看几个,思路大多大同小异,还是比较好准备的,例如:
智力题
关于智力题,可能就要多看一些了,这题没看过的话一般现场很难想出来,这里推荐一下这位牛客大佬整理的智力题:https://www.nowcoder.com/discuss/526897
分享下大佬们总结的比较好的资料
附上春招时的状态和面经:
春招时状态:学习Java也有一年多了,之前零零散散的学习,看书,做项目,二月份开始抱着试一试的态度准备春招,开始复习投简历,基础知识慢慢积累,再加上看牛友面经,现在也还算可以。算法leetcode的Top 250刷了两遍,剑指刷了3遍,感觉有时面试还是对算法题发怵哈
好在有好多公司给了 面试机会。虽然offer没拿到啥,一场又一场的面试也让我有所成长哈!在此非常感谢所有给我面试机会的公司,抱拳了 首先我还要特别感谢阿里,提前批面了好多次, 让自己恶补了很多知识点。先后面了cvte(两轮技术面+一轮hr面,hr面完告诉我不合适, 可能觉得我家离广州太远了点吧),跟谁学(两轮技术面,已经发了我offer),蘑菇街(两轮技术面,二面挂),腾讯(一面挂),阿里(三面挂),美团(二面挂),作业帮(两轮技术面+一轮hr,hr说hr面过了在部门审核,说基本上过几天就oc了),京东,百度
由于今年疫情,感觉好多厂都hc大减啊,竞争有点大的还是,哎,春招的成绩很不理想,用东北话说就是完犊子,啥也不是(在此给自己俩大嘴巴子 ),自己也有时心态崩溃,颓废学不下去,可是回头想想这样的状态太不应该了,春招已经过去了,现在要做的就是调整好自己的心态了。
阿里一面(80分钟)
3-30号笔试,3-31号接到熟悉的0571-号码 ,约了4.1晚8点一面
刚开始自我介绍后开始简单介绍第一个项目,延申到dubbo,一些机制及通信方式,zookepper的使用,
问了nginx怎么使用的,以及负载均衡的策略。
之后谈了谈第二个项目,设计了一些场景题,印象最深刻的就是redis挂了怎么办(不能用了)
说了一些限流算法,对比优缺点固定窗口、滑动窗口、漏桶
有分析过CPU情况吗,或者JVM一些优化
Java基础--------------------------
说一下HashMap、1.7和1.8,hash方法为什么高16异或低16
为什么1.8引入红黑树,为什么阈值是8,红黑树的特点,时间复杂度,与其他数据结构的比较, 为什么每次扩容二倍
线程安全的CurconrentHashMap,1.7与1.8,中间因为说了volitale,又转到volitale,底层怎么实现的,解决什么问题
volitail不能解决什么问题,产生脏数据问题,用什么解决(CAS、加锁、还有吗(想不到))
sychronized、jdk1.6的优化,重量级锁自旋次数设置的参数
与ReenTrantLock区别,有 sychronized、为什么引入 ReenTrantLock
创建线程的方式,callable返回值作用
线程池,参数、流程,拒绝策略,如果让你自己定义一个拒绝策略呢
数据库MySQL--------------------------
索引,数据结构,锁,隔离级别,MVCC,如何解决串行化,间隙锁,创建索引注意事项,(面试官基本上都会在回答后再问为什么 )
联合索引,怎么建
一面后两个多小时约的4.2号二面(一个小时15分钟)
阿里二面(60分钟)
首先二面和一面没有重复问题,二面也是基础居多
自我介绍后开始说项目,因为项目用到了nginx,让说下nginx与LVS区别,具体点,再具体点,这块没怎么深入了解过,答得不好
对项目提出了一些问题,分布式锁,分布式事务,
消息队列怎么用的,rabbitmq、rocketmq、kafka对比
消息丢失怎么办
网络----------------------------
介绍网络常用协议
http与https区别
https为什么安全呢,详细介绍握手过程
操作系统-------------------------------
linux如何定位线程
cpu飙升如何排查
cpu负载和cpu使用率,负载很高,但使用率很低有什么什么场景
数据结构------------------------------------
问了各种树吧,为什么,就都解决什么问题,什么场景使用
扯到了ES的倒排索引,由于ES不太会,没太深入
问了mysql实现乐观锁与悲观锁
有问笔试什么情况
最后问了下,大公司的系统怎么做的,想到哪些面都说一下
问现在在学习什么技术,不会没关系,说一说
反问环节
二面感觉答得还可以,二面后就没消息了。。。。
cvte一面(75分钟)
一面80分钟,主要问了很多基础
Java内存模型
JVM垃圾回收算法
介绍G1和CMS回收器,比较
full GC 会怎样,什么时候产生full GC
引用计数法与可达性算法的区别和问题
举例你实际应用中的多态
HashMap、ConCurrentHashMap
Sychronized,AQS,底层
volatile底层,
线程池参数工作流程
mysql索引,间隙锁
redis底层数据结构,跳表说一下
过期策略,内存淘汰策略
AOF与RDB区别
Spring中加载流程
循环依赖怎么解决
Jdk与Cglib区别
cvte二面(60分钟)
二面问的项目,面试官很nice,会引导我
假设了项目很多的问题让我解决
mysql挂了怎么后续处理
redis挂了怎么处理
消息队列如何保证顺序性,可靠性
分布式锁如何实现
redis穿透,雪崩,解决方式
热key问题
手撕了sql,
还有一道力扣medium209
cvte Hr面(30分钟)
问了很多问题,感觉cvte的hr时最难的
对前两面进行评分
说说自己的不足
有女朋友吗,咋打算的,未来规划
家里和女朋友对你未来工作地点有要求吗
家里干什么的
为什么不考研
经历的最大挫折
说下你的弱点
期望毕业薪资
还有好多,忘记了,都是挺难答的问题
蘑菇街一面(65分钟)
上来扣项目,让我介绍,之后对我的某个逻辑设场景题,让我想办法解决,
问了redis并发相关的场景,还有提高响应速度,我说了些用消息队列解耦之类的。
之后引申到消息队列消息丢失之类的,因为我用的rabbitmq利用confirm机制+磁盘持久化+消费应答。
http内部字段,怎么保持长连接,如果客户端挂了,服务器怎么办(我答的就是保活计时器+探测报文),
浏览器输入http://www.baidu.com后发生的过程(包括域名解析过程)
项目缓存雪崩,缓存穿透,
慢sql怎么处理(explain或者慢查询日志,加索引啥的),
abcd四个字段,你如何建联合索引(使用频率最高优先),
还问了java基础,记不清了,挺简单
spring加载过程(底层源码方法),如何处理循环引用bean(利用三级缓存),
linux中发现cpu使用过高,你怎么办(我不太会linux,只说了ps查进程,之后top分析cpu使用率)
总的来说场景题还是多一些的,有两个想不起来了
蘑菇街二面(20分钟)
面试官是个leader,很严肃
就是全程问了项目,包括说对一些名词的理解
webService和http区别
20分钟就结束了,凉凉
跟谁学一面(50分钟)
主要问了Java基础比较多,有些记不清了
int和Integer 出了个代码题,是关于IntegerCache的
mysql索引优化
出了个组合索引语句,问哪个字段可以用到,最左匹配原则
隔离级别,如何解决的不可重复读,MVCC+间隙锁解决幻读
说了MVCC底层原理
Spring的IOC和AOP,
SpringBoot的流程
快排
链表反转
跟谁学二面(60分钟)
先问了项目,巴拉巴拉
印象深刻的是
AQS底层
读写锁底层,挖的挺深的,差点扛不住
如果sleep(0)会怎样(降低优先级)
算法:很多个数找到top10(我用的优先队列)
腾讯一面(60分钟)
一个.java到.class文件再执行的过程
Spring的事务传播
TCP和UDP区别
虚拟内存
之后就是出了四道算法题
1.删除链表中重复元素
2.岛屿问题
3.最长连续子序列
没办法我菜,前俩秒,第三个这么经典的问题竟然卡了太久太久,之后就结束了
作业帮一面(80分钟)
问了项目,单点登录实现,
nginx+LVS高可用
如何解决分布式session
redis集群怎么做的,主从复制流程
RDB和AOF,如果AOF文件很大怎么办,AOF重做,还是特别大怎么办,分片复制
TCP三次握手四次挥手
三次挥手行不行,为什么
状态码301与302的区别
Linux找到文件夹下包含某个字符的所有记录
分页查询页数很大效率低怎么办,join 连接主键优化
聚簇索引和非聚簇索引
索引覆盖
算法:下一个排列
作业帮二面(70分钟)
solr怎么用的,zookeeper怎么用的
如何保证solr与数据库一致性
DNS递归和迭代
CAS原理,ABA问题,解决方法
Dubbo原理
注册中心宕机怎么办
RPC分为哪几部分
Linux常用命令,让我按要求查日志,就是grep,cut,啥的
ES倒排索引
算法:
1.一个字符串数组,按长度大小,相同长度按字典顺序
2.EXCEL数字转字母
作业帮hr面(20分钟)
说说生活中你是怎样的人
举个例子
了解作业帮吗
说说你的缺点
说说你觉得经历过比较困难的时间
有看非技术的书吗,推荐下,
介绍下*本书讲了什么
对未来的规划
想来北京发展吗等等
美团一面(80分钟)
主要就是基础+项目
Java并发的相关基本上都说了
Sychronized、AQS、volatile、线程池
HashMap1.7,1.8
ConCurrentHashMap1.7与1.8
JVM问的也比较多,JVM调优
介绍各种树
网络Http1.0,1.1,2.0
问了分布式事务实现
讲了限流算法
项目问了很多,
就是问为什么用某某技术,解决了什么问题
写了个快排
最后一面面试官表示了对我非常肯定的态度,
美团二面(50分钟)
一面很顺利,可惜二面凉的透透的
因为软件工程专业,被疯狂怼,属实怼懵比了
问我软件工程是什么,
软件工程概论是什么
这个课讲了什么
怎么理解软件工程
UML图代表什么,干什么的
哎,这些真的不知道啊
最后来了个算法
三个线程交替打印10次A,B,C
京东一面(30分钟)
全是基础。。。忽略吧
京东二面(35分钟)
全程问的项目,限流怎么做,临界问题
redis挂了怎么办
消息队列作用
有百万个请求,如何保证消息队列不挂掉
抢过票吧,抢票怎么做的,抢不到会怎样,排队中怎么做
漏桶算法
分布式事务:2pc,3pc,TCC,本地消息表
redis事务与mysql事务的区别
线程与进程区别,
保证消息队列不挂掉没答好
面试官很和蔼哈,只不过现在还是复试中的状态
许愿hr面
4.25百度下午一口气面到了三面(有些问题不记得了)一面(50分钟)
先是聊了聊项目
ArrayList与LinkedList
CopyOnWriteArrayList
HashMap1.7与1.8
为什么高16与低16异或
线程池个数如何设置
线程可以被无限创建吗,与哪部分内存什么有关
Integer缓存
select * from A join B on A.a=B.b;
select * from A left join B on A.a=B.b;
select * from A right join B on A.a=B.b;
这仨语句怎么建索引(不会)
Spring的IOC,自己实现呢
Spring的bean初始化流程,源码都有什么接口
三级缓存解决循环依赖
算法:
俩栈实现一个队列
A,B俩无序数组中,找A中有B中没有的,不能用set,map,别暴力法
感谢一面面试官给我过了
半小时后二面(50分钟)
二面小哥全程笑脸,哈哈
聊项目,,
redis我想现在不停服务加集群集器怎么做
redis底层数据结构(说了SDS,dict,跳表啥的)
为什么redis快,Io多路复用是啥
浏览器上输入网址后的流程
提到百度你想的第一个词是什么,我说搜索吧,小哥笑了说,还好不是广告??
之后说了lucene 倒排索引
假设你是供应商,请提供一个排序的api,比如用户可以选择快排,堆排,归并啥的
感觉主要是看代码的面向对象的设计吧
问了让你实现现在咱俩共享代码这个功能,你的思路是
最后小哥给我过了
20分钟后三面(40分钟)
挑个你在做项目中的困难
问了为什么不想考研
考虑再北京发展吗,
期间掺杂着几个技术问题
Solr和ES的区别,没答好
及现在在看什么书,学什么呢
自己评价下自己是个怎样的人
为什么选择Java后端
文中所提及的学习资料,部分已经下载公众号后台,有需求的同学进入公众号菜单点击资料,即可找到。
欢迎关注公众号:编程算法学习之路