因为内容过多,分为上、中、下
本篇内容:8000+ 字
建议阅读时间:20 分钟,如果有收获,建议收藏多次阅读
上篇目录
秋招之路复盘篇 楼主的自我介绍: 我自己复习范围: 我的项目很 low 怎么办?? 项目 low,无实习经验,还是个渣本,怎么拿到 offer 的 关于套路和技巧 你的秋招时间这么长,你的心态如何呢? 关于众多知识点和面经你又是怎么选择去看的呢? 简历应该怎么写??? 如果以上你都没有???我好慌,我该怎么办??? 实习、秋招、春招那点事 坎坷的offer故事: 总结:以下面经顺序为难易度排序及 offer 排序滴滴(11.5 offer):线上面8.9投简历:8.27笔试:9.16一面:80分钟左右10.17二面:50分钟左右10.29三面:36分钟左右11.1 HR面11.5 offer
秋招之路复盘篇:
楼主的自我介绍:
楼主:二本本科、无实习经验、CS专业(但是个人觉得和非科班没啥区别,专业课也没有听...)
岗位:Java开发 / 后端开发
秋招之路:6.28——10.29,战线很长、6.28的第一封简历投出、10.29的面完滴滴三面暨秋招结束
方向:Java方向、只会SSM,其他Redis、中间件都不会
海投简历:180+吧,在牛客网的求职校招日程里( https://www.nowcoder.com/school/schedule ) ,牛客打钱(手动狗头?),有合适岗位的公司都投,每天投几个,自然而然就到180+,但是投简历也是一个苦力活,可能会投的自闭,前期建议投一些小公司练练面试(找些套路),后期就是大公司干,千万不要认为自己没有准备好就不投,等你准备好,黄花菜都凉了
Offer:滴滴、京东、科大讯飞sp、58集团、用友、锐捷网络、联行科技(新公司大背景、薪资+补助下来跟滴滴差不多了)
我自己复习范围:
首先说明我是Java开发,我的范围只适合Java开发的,其他方向我不太了解,并且很多公司侧重点也不一样,比如字节不侧重语言,侧重操作系统四大金刚那些,也看公司吧,就像考不同的学校,会有不同的大纲,因为我是本科生,都比较侧重基础
Java:Java基础杂七杂八的(经典必考集合各种死磕源码吧)、多线程并发包各种死磕(我是死磕到源码),JVM死磕到细节、GC死磕到细节、JVM调优自己练习练习
框架:spring看看IOC和AOP的源码,但是太难太难了,就光那个方法名就特别长,前期就只知道个IOC和AOP是啥,后期就去看源码记大概一个原理过程,SpringMvc的流程,一些注解吧,Mybatis也是那些常考的点吧,缓存可以了解一下
数据库:数据库死磕,越深越好
操作系统和网络:背常考的、但是太深了,还是菜
设计模式:太多了记不住,我就是简单了解一下,叭叭给他说有啥用,Java里哪里用了xx模式
算法和数据结构:是我秋招开始补的、做完类型题进行总结,刷的就是LeetCode吧,我是先LeetCode,然后剑指offer,但是我也是有很多笔试直接挂的,除了遇到一些简单的,或者原题或者类似的题能A,一定要总结套题,类型题,一定总结一定总结一定总结
Redis:没有用过,但是就是记吧,那些常考的东西
IO模型、网络编程:比较菜了,不咋会
Linux:我也比较菜了,就会简单的命令
微服务、分布式、集群、中间件:我不了解,只知道有这个玩意
关于源码阅读:建立在自己会使用这个东西之后再去阅读源码,阅读常用的方法源码即可,第一次阅读源码建议看视频跟着阅读或者找博客,要不然比较生疏很难,,,,
我的项目很 low 怎么办??
low 不是你的问题,但是项目也可以“包装“啊,此“包装”非彼包装,举个例子吧:
Q:原项目有一个等级权限管理,就 3 层等级,数据库里设计好了就分 3 级,面试官就问到你了,你这个怎么做的。
A:自己一顿叭叭叭,
Q:面试官给你提了一个新需求,如果 3 层等级变了,变成了不一定多少层,你又怎么设计?
面试官给你说出了问题,不管你有没有回答出来,但是希望你面完之后,你对这个需求去重新设计一下,下一次面试自我介绍的时候说:
对于 xx 项目,我自己私下也有复盘,比如当需求变为 xxx 的时候,我考虑到这样设计:叭叭叭.....。
这样你的 low 项目就变得不再 low 了,突出你的思考、你的想法
项目 low,无实习经验,还是个渣本,怎么拿到 offer 的
死磕基础,把很多源码看了,集合、JUC下的,面试就磕源码,操作系统和计算机网络背不住,就是手写吧。我拿的offer里,基本都是Java问的很多
关于套路和技巧
关于面试:面完问一下面试官对你的评价,找到自己的不足,另一方面也表现出自己强烈的学习欲望,反正我每次问面试评价都是:基础不错,就是动手实践不是很好,xxx,,,,如果感觉跟面试官聊得不错的,可以厚着脸皮要个微信加,反正我面滴滴三面要微信加,被面试官拒绝了,其他的也有成功的,哈哈哈哈哈
面试复盘:我一般线上面试会录屏或者录音,面完之后复盘总结,不单单是总结,你还要找到自己的不足去弥补,防止下一次再被问,这就是为什么我面经这么全的原因,不是我记性好,,,,,哈哈哈哈哈
关于投简历:写一个 Excel 或者 Word 记录投的公司,时间,投递方式,方便后期去查询结果
你的秋招时间这么长,你的心态如何呢?
秋招历时足足 4 个月,心态就像心电图一样,考研就像前期平稳,后期曲线上涨,因为自己也很乐观,在整个秋招之路里,也有人说话,自己也有几个网上的小伙伴群,每次就是说说话,互相激励对方,如果你是一个人的话,希望找几个小伙伴一起交流说说话,避免自闭低沉消极
关于众多知识点和面经你又是怎么选择去看的呢?
1.先看众多的知识点,广度先建立起来,遇到一个不会的知识点千万不要入坑掉进去,越陷越深2.广度那么多,我看一遍记不住咋办,那就多看几遍,理解化记忆,找一些共同点进行记忆,手写记忆(秋招以来我大概写了 20+的单面 A4 纸吧),抱团组队,互相面试,互相讲解3.广度拉起来之后,去看看深度,了解一下源码 xx 的,深度是你从众多面试者脱颖而出的法宝4.面经看了一定的知识点之后再去看,作为查缺补漏之用,当你要准备面哪个公司之前,去看看这个公司的面经。
简历应该怎么写???
以下属于个人观点:
1.如果成绩好,写上你的 GPA 和排名2.学校好肯定是个亮点3.有博客(前提里面要有内容),有 GitHub 写上去4.大厂实习是个亮点5.项目负责模块最好用:用 xx 实现 xxx 解决了 xxx 问题,网上都说最好用 STAR 法则写,6.计算机类的比赛加分项吧、ACM.....7.技能栈写你会的,精通、熟悉、了解 xxxx。
划重点:字不能错,大小写要写明白,Java 不是 java,我不知道这个单词到底是怎么拼,去官网瞧瞧他怎么写的。
如果以上你都没有???我好慌,我该怎么办???
把你复习的众多知识点堆在技能栈上,前提是你要会!会!会!不会就不要写(别给自己挖坑),比如:
看多线程知识点前:
1.了解多线程编程
看知识点后:
1.熟悉多线程编程及原理,内存屏障和 CPU 缓存、线程池应用及原理、synchronize 锁优化、JVM 内存模型、J.U.C并发编程包
再次重点提醒!!!一定要会才往上写!!!
实习、秋招、春招那点事
坎坷的offer故事:
•贝壳是第一家面完 全部流程的公司,当时认为能过,结果被挂了,不知道是什么原因,可能学校吧...,当时挺难过的。
•京东是8.13 14的一二面,面完之后一直没信,二面面试官也说我技术面过了提交了HRBP处理了,等到了8.29正式批给我发来线下面试邀请再次联系了二面面试官帮我反馈,当天晚上收到HRBP的oc,给我说锁定简历,给我发offer,问了几个hr的问题,9.5问hrbp什么时候发offer,hrbp问我要了身份证,之后一直持续到9月底,期间给HBRP发了四次微信询问offer的事,没有一次回我微信的,9.30二面面试官帮我反馈了我一直没有收到offer的情况,HR那边还是没有给反馈,国庆期间最终找到零售校招HR帮我查了一下我的信息,结果说没有查找我的信息,我给他说了我是提前批,HBRP问我要了身份证各种情况,说帮我对接一下HBRP,最后发现是把我的信息遗漏了,重新给我提交,10.10收到offer,等待京东这段时间,身边的人都说我凉了凉了,但是我还是坚持下来了,天天找各种途径去查,最终也是没有辜负自己的努力。
•滴滴是8.9投的简历,8.27笔试,邀约9.7的线下面试,但是我拒绝了,期间一直想去问问能不能申请线上面试,结果没有找到途径,9.12电话邀约了9.16一面,面完之后一直就没有信了,也没有拒信,官网状态还是面试流程中,然后一直给滴滴的邮箱发消息问面试结果、不下5次吧,都是石沉大海,在牛客找滴滴hr联系方式,也没有方式,在10.15的时候再次给滴滴邮箱和滴滴招聘公众号发消息,下午来了hr约二面了,我坚持的等到了,9.16-10.15 一个月的时间啊,这期间也基本每个人都告诉我是挂了,是不会有感谢信的,但是我还是坚持,同样我是在10.10收到的京东offer,但是我还是不甘心,还是去坚持问滴滴,就是要个结果,挂就去京东,过就继续面,再约面滴滴这期间,我同样面试了其他家为了面试查缺补漏吧,大大小小公司我都投,一直坚持到offer,给自己的目标就是面完滴滴三面就不面了,结束秋招,因为太累太累了。。。
总结:
面试就是把自己变成商品,不遗余力地推销给面试官,从而打动他的过程。
面试就像一场考试,给定了要考的范围,就是你能不能去坚持死磕他了,坚持死磕对了,加上一点运气+临场发挥就是胜利,祝各位加油!!!冲冲冲!!!就是干!!!
以下面经顺序为难易度排序及 offer 排序
滴滴(11.5 offer):线上面
8.9投简历:
8.27笔试:
9.16一面:80分钟左右
1.Java集合说一说吧set ,list,map都问了一遍2.TreeSet和HashSet区别•红黑树区别,有序无序3.hashmap和concurrenthashmap4.线程池用过没,线程池的参数什么意思,每个都问了一遍5.拒绝策略说一说6.synchroBlockQueue 到底可以存几个7.锁用过没,•叭叭各种锁,8.锁的什么方法你用过•tryLock•getHoldCount9.lock和tryLock区别10.lock的公平锁和非公平锁的怎么实现的(源码级别),不限于概念11.类加载机制,不是类加载几个过程12.如果多个类加载器加载同一个类,会出现什么情况13.tomcat的加载过程14.spring的生命周期,不是bean15.AOP16.ASM怎么实现cglib17.mybatis的插件用过没,18.项目, 背景:暂存数据,每一次把用户填写的数据暂存到数据库,暂存字段,0暂存,1正式存1.如果实现a用户暂存数据1,b用户暂存数据2,实现a下次只能看见数据1,
给car表加一个操作人字段,每次判断
2. car表怎么设计的,
id,车牌号,xxx,xx,暂存标记
3. car表主键是什么
主键id
4.主键id有什么规则吗?
自增长
5.如果一个车牌号重复了,添加的时候怎么处理的
每次填入的时候,都会在数据库里查询一下,判断是否有
6.如果4个人同时填入车牌号为888的车,怎么处理这个问题
7.加锁为消化资源,你考虑一下在数据库进行操作吧
8.隔离级别是解决什么问题的啊
并发的时候问题,叭叭脏读等问题,
9.隔离级别什么时候才出来啊? 19.数据库索引,索引类别
唯一索引,聚簇索引,非聚簇索引
20.聚簇索引和非聚簇索引区别 21.二叉树和B+树的区别
叭叭半天,没有get到点上 1.B+树所有数据都在叶子节点,每次查找时间稳定 2.叶子节点都有指向下一个叶子节点的指针,范围查找比较方便
22.那如果把二叉树弄成,所有数据都存在叶子节点呢
二叉树,如果删除的话,可能会变成线性树,时间复杂度变高
23.那如果平衡二叉树呢
叭叭了,记得好像磁盘存储是用的b+树结构,索引是存在磁盘上的,用B+树会减少IO操作
24.怎么减少IO操作的 25.磁盘上所有文件都是B+树存储吗?
文件夹的文件吧
26.磁盘上怎么存储这些数据的 27.你了解什么文件格式
elf,a.out
28.Linux操作系统了解过吗
Linux不太了解过,用过Linux命令,进程同步
29.Linux命令用过哪些
cd,grep,pwd,mv,管道符,ps
30.Linux根目录下有哪些文件夹
etc,bin,我好像记得是,可能记不太清楚了
31.手撕翻转树,递归+递推
32.手撕最小路径和
10.17二面:50分钟左右
1.开源项目了解什么2.SpringBoot如何加载,源码3.学习源码如何深入学习的
叭叭叭ArrayList和LinkedList
4.如果去了解spring的启动过程,你怎么去了解 5.tomcat启动的流程,要加载什么资源 6.项目中有哪些收获 7.项目中负责哪些点,技术方向吧 8.为什么用mvc架构
面试官:其实这个mvc架构知识点还是很深的,要做好还是很难的
9.项目里Spring的事务是怎么管理的
在方法上加注解
10.那为什么加注解可以实现,这个加载机制是怎么实现的,源码级别 11.为什么这个注解可以实现事务 12.那这个事务和数据库的事务有什么关联
acid,事务隔离级别
13.那你们当时项目选技术是怎么思考,比如mybatis用的什么连接池
用的c3p0
14.那你知道有其他的连接池,各自有什么区别
c3p0、dbcp、druid三大连接池对比 - wawa3338的博客 - CSDN博客 https://blog.csdn.net/wawa3338/article/details/81380662c3p0,dbcp与druid 三大连接池的区别 - 泡面之家 - CSDN博客 https://blog.csdn.net/qq_34359363/article/details/72763491druid的功能强大、扩展好,
15.那你感觉连接池的功能都有什么
1.资源重用 2.更快的系统响应速度 3.新的资源分配手段 4.统一的连接管理,避免数据库连接泄漏
16.项目大概几个人,开发的人,源码包大小多少 17.juc看过哪些,说AQS的机制 18.Lock如果给线程分配锁的
叭叭ReentrantLock
19.公平锁和非公平锁的区别,源码级别
面试官补充:非公平锁就是抢占式的嘛
20.队列呢,了解什么
ArrayBlockQueue,LinkedBlockQueue
21.各个队列使用场景 22.queue里面都有什么方法
offer,add,put
23.各个方法仔细讲讲,都会出现什么情况,添加的方法有什么,都有什么不同出队列呢,都有什么,跟offer对应的 24.jvm看过什么、jvm常用命令 25.jstat的参数,比如看一个线程的回收情况,怎么看、其他的命令呢 26.动手去编译JDK源码 27.JVM的类加载流程,到解析到字节码 28.如何去验证版本的冲突的,比如jdk1.6到jdk1.7 29.初始化去怎么做的 30.实际运用中,ClassLoader都有了解什么 31.如何实现一个动态加载、实现哪些方法 32.如何获取当前的ClassLoader 33.那可以保持建立多个ClassLoader吗? 34.为什么加载器加载出来的类不一样 35.jvm内存模型 36.多线程如何实现主存同步的
缓存一致性扯一扯,Java内存模型
37.那通过什么指令去实现其他工作内存无效的 38.Java里怎么实现缓存一致性的
volatile、synchronized、lock、信号量、wait/notify
面试官补充:信号量也是加锁实现的
39.jvm的锁优化有什么
说了synchronized,
40.那还有其他编译器的锁优化吗,比如锁粗化
锁消除、、、、、
41.网络编程知道吗 42.创建socket的过程 43.从server端开始说吧,几个步骤 44. accept操作之后,然后呢 45. 怎么解析这个信息呢,输出到什么流里呢
46.互联网这块网络编程用的也挺多的,比如rpc框架什么的47. Java里的IO这块你了解吗,区别48.BIO、NIO、AIO的对应类实现了解吗49.shell命令50.进程通信方式51.Linux调度方式有什么52.Linux的缓存有几级53.jdbc连接mysql的几个步骤、为什么要加载驱动呢,原理是什么、PreparedStatement和Statement区别、返回结果如何查询
准备 private static final URL、、、 也可以用properties从文件中读取。load()、
1、首先注册驱动啊?怎么注册?反射啊,Class.forName("xx.xx.xx.Driver");底层怎么实现的?静态代码,DriverManager.registerDriver?启动的时候,会自动调用静态代码块的内容。
2、接下来就是获取连接啊,怎么连接?远程连接(三次握手操作),连接放哪里?作为资源必须放池子里。这样能提高性能。常见的连接池有DBCP,C3P0,传说中最安全,性能最好的Druid(国产),而且还能监控。
3、你总的有SQL语句吧,之后就是Statement编译那。这里会出现SQL注入的安全问题。在语句后面加"1=1"成立。所以我们采用预编译的方式,PreparedStatement。可以防止这种问题的出现。
4、查完之后获取结果集。rs.getString().
5、头疼的来了,释放资源。各种 if(xx != nu) {try{ xx.close();}catch{}} 不用担心JDK8 出来一个新特性,可以放在try-withresource中。还有各种异常可以采用通道的形式 XxxException | XxxException
6、各种异常需要你放到一个try{}catch{}中,出问题你也不知道问题在哪里?麻烦吗?不用担心,我们可以封装成一个工具类,需要的时候调用工具类.getConnection();还是麻烦啊,可以用Spring框架为我们集成提供了jdbcTemplate,HibernaterTemplate。用模板代码消除了大量的样板代码。
遍历结果集,叭叭
10.29三面:36分钟左右
1.说说ArrayList的源码各种方法吧,add,remove一系列方法2.MySQL的聚簇索引3.知道SQL注入吗、Java里怎么防止的呢4.Redis和数据库的一致性5.了解过什么开源的东西吗
Spring
6.那说说AOP吧