2021.3.20投出第一份实习简历,5.28收到华为实习意向书。8月12日实习离职开始投递秋招,期间边面试边查缺补漏,算法能力、面经八股文以及项目经验都在这个过程中不断提高,最终收获了几个比较满意的offer。国庆假期刚结束,我的秋招之旅也随之结束。在非科班转码的路上,走了很多的弯路也干了很多无意义的工作,其中的酸甜苦辣只有经历过的朋友才能体会,最终如愿成功上岸,我十分庆幸自己的选择和坚持,也十分感谢一路上互相帮持的转码小伙伴。
背景介绍
本科江苏某双非一本,机械天坑专业,研究生江苏某国防七子之一,继续机械专业。完完全全的非科班选手,在决定转码之前,本科双非、非科班、无实习、无竞赛、无奖项,我是标准的“五无人员”,最终转码JAVA后端,所以大家不要害怕什么学历歧视,什么没奖项,互联网大厂对学历等等并不是十分看重,只要你技术厉害就会要你,不像一些国企研究所,本科不是211面试机会都没有。因为我十分确定毕业要留在南京,所以投递秋招基本找南京的投,不过也投递了几个中厂练练手。目前拿下的offer有:京东、美团、荣耀、东方财富、中兴;池子等通知:华为、vivo;凉凉:阿里、shein。
为何要转码?
为何要转码?我讲一下我的心路历程,当然我转码的想法也不是一下子就形成的。我本科是双非一本,我清楚的记得在大四上学期,很多同学开始找工作,当时来我们学校的都是叫不上名的机械企业(学校不好,好的企业根本不来招聘)。我们两个机械班级签约的工作工资平均在4000左右,当时隔壁班有个一人签约了一个7000的,当时觉得7k也太多了,好羡慕啊。后来和学生会计算机系的同学聊天才发现人家普遍都是10k以上,计算机入学分数还没机械高,结果找工作差这么多,当时第一次感受到计算机的“魔法”。还有一个经历我也记忆深刻,当时学校的实习参观活动,我们去了某世界500强的工厂参观生产,里面全是机床,噪音巨大,铁屑乱飞,当时就坚定了一个想法,长大一定不能去车间,一定不能***械!!!
后来考研来到南京,研究的是嵌入式方向,期间自学了c/c++等,在写程序的过程中,也逐渐喜欢上了编程。加上从上届师兄处得来的反馈,一是java后端的岗位很多,二是工资比其他岗位要高,自此踏上了转JAVA后端的征途。
自学经历和一些感悟
1. 自学转码和毕业课题
先用一句网络名句开头,“工作若没有,毕业有何用;工作都有了,拼死也能毕”。相信很大一部分读研的小伙伴目标就是通过读研让自己找到的工作更好一点,平台更大一点。所以我们要明确自己读研的目标。其次,毕业课题很多时候都是可以水的,没有毕不了业的硕士,这句话是有道理的,就拿我们学院来说,到最后的答辩的时候,基本每个答辩组都会放水,只要你不是太离谱,基本不会卡你毕业。所以说最终的问题还是我们和导师的问题。有些同学比较幸运,老师比较放养,这时候转码就方便很多,自己可利用的时间比较多。有些老师会管的比较严格,这时候就需要你情商高一点,多揣摩一下老师的想法,如果他只是要求你每周要汇报进度等等,那就自己早睡晚起挤时间,读研了就会发现其实实验室很多人都是早上会起来的比较晚,一般人都是10点才会到教室,我那段时间就严格晚上12点睡觉8点起床,我早上到实验室学了一两个小时了其他人才到,这种感觉非常爽,像偷了时间一样。除非特别离谱的老师,一般上我们只要想挤时间绝对是有的,转码也绝对够用,我们自己要有转码的决心和毅力,坚持不了就想想以后每年能多赚的达不溜吧。
2. 实习重要么?
我是在3月份投递了华为的实习招聘,然后经历了笔试和一轮技术面一轮主管面拿到了华为实习offer(实习面试比正式秋招简单不少)。实习重要么?我的想法是如果你的导师暑假不怎么管你,或者你能和老师商量一下这个事,能去则去,实在老师不放人问题也不大,只要好好准备八股面经(这一部分算是面试重点了,当然一定要时时刻刻把自己的学习总结下来)、项目和算法,秋招上岸大厂也不是梦,因为大厂很看重面评,只要你面试简历上的都会,算法题手撕写出来基本问题不大。我能去实习也是经历和老师的斗争,当时拿到了offer,自己知道老师不会放人。我当时在他办公室做了好久的心理建设,进去和他谈。主要说了几个想法:一有实习经历会对秋招有帮助,希望老师能帮帮忙,自己很想去华为。二是写了一个书面材料,保证实习回来后安心科研,如果延毕了责任在我和老师无关(我老师逼我写的,不写不让去)。最终去了实习,不过实习并没有学到什么真技术,主要是学习了华为的企业文化等等,一共写了几十行代码。有大厂实习经历有用么?肯定有用,如果你有机会,我推荐你去,如果没机会,不必耿耿于怀,身边有很多非科班转码的没实习经历靠自己扎实的准备秋招也拿到了不错的大厂offer。所以说有无实习经历并不是拿到offer的决定因素。
另外如果大家暑期去实习,有一点一定要注意,现在大厂开始秋招的时间越来越早,提前批很多都是7月就开始,在实习的期间一定要同时兼顾秋招的学习,注意自己想去大厂的动向,同时实习的结束时间不要太晚,否则会影响你秋招的进程。很多大厂基本9月中就进行的差不多了。金九银十已经跟不上形势了,十月份已经基本结束了。
3. Java**基础的学习**
我是从c++转的java,当初学c++的时候并不觉得有很多需要学习的东西,后来在b站跟着视频学习,看到学习目录就惊呆了。这啥啊都是,各种奇怪的名词都没见过,什么dubbo、什么kafaka、什么redis数据库,springboot又是啥?就觉得怎么这么多需要学的,看名字也没觉得和java相关啊。当初就是一脸迷茫,不过我想说的是,千万不要被这么多的陌生名词吓到了,这些都是纸老虎,我们学习一个新的技术,刚入门感觉到迷茫很正常,只要学习路线正确,然后脚踏实地一步一步来,当你做过一个完整的SSM或者SpingBoot项目时,就会拨的云开见月明,就会对java知识体系有自己的理解。相信我,每一个初学者都是这么过来的,万事开头难,千万不要丧失信心。我当时是先跟着学了javaSE相关内容,这部门内容基本是java编程的实现,包括java语法实现、面向对象的实现、常用集合、反射啊等等,学习的时候切勿眼高手低,跟着多敲几遍,面试的java语言的八股基本就在这部分。学习完JavaSE,紧跟着学习了JavaEE的相关内容,在这期间学了很重要的一部分内容,那就是数据库中间件的使用,包括典型的关系型数据库Mysql,非关系型数据库Redis,以及Nginx的部署使用,当时只是跟着视频部署了一下,我也没想到这部分在后面的面试中有多么的重要,所以在java体系中,深刻的理解和使用数据库以及和此相关的查询调优、索引优化,数据库事务等等先关的知识是非常重要的,大家一定要重视起来。再到后面做了项目,接触到微服务框架springboot,以及很多组件的使用。总结一下,java的学习,刚开始大家会觉得需要学习的知识杂而多,这时候不要多想,只要跟着正确的学习路线,一步一步走下去,不要眼高手低,多动手,最后一定会柳暗花明。
4. 项目经历如何实现
项目经历加上实习做的事我一共写了三个,这里建议大家简历上项目最好写两个,不要超过三个,否则给面试官的体验会比较差。三个项目分别为仿牛客论坛、秒杀商城和在华为做的微服务解耦相关的项目。项目的话其实现在很普遍,但是我建议找有前端源码和教学视频的,因为我们找后端工作前端部分是不需要掌握的,前端代码只要看一看就行,自己写太浪费时间!如果有需要的可以私聊我哈~但是大家在学习的时候一定要注意,一是代码要自己敲,不要眼高手低,项目最起码要自己部署一遍,其中遇到的错误都可以自己写博客记录下来,这些做项目中遇到的报错也是很珍贵的,很多面试官都喜欢问项目中遇到的问题等等,如果不是自己亲手部署过,可能很多问题并不会发现。二是要边做项目边思考和做笔记,不要因为有官方的笔记就自己不记录,好记性不如烂笔头,在做项目时遇到的好的技术,有趣的代码实现都要自己写笔记记录一下,可以想想面试官会怎么问,或者自己怎么在简历和自我介绍中引导面试官问这些问题,如果问到了你还能流利的回答,那将大大加分。说到这里还有一点也十分重要,那就是简历怎么写,每场面试开始环节的自我介绍怎么说。大部分面试官都会从你的简历和自我介绍中找问题点开始提问,所以很多“面试老手”可以做到引导面试官问自己熟悉的问题,故意挖坑等面试官“上钩”,面试官问的都是你提前准备好的问题那基本这场面试就拿下了,如果毫不引导,让面试官随意提问,那危险程度将大大增大。首先自己可以去网上看一些优秀的互联网简历的排版以及格式,然后在项目上要突出亮点和自己想被问的点,在每次面试的自我介绍环节,要多提自己项目的亮点,你说得多了,面试官自然会问,那么你就可以侃侃而谈了。根据我这么多面试的经验,有需要的可以找我,帮你看看简历什么的。
最后说一点,大家如果用网上热门的比如仿牛客项目,可以给项目套壳,因为面试官看到太多一样的名字会反感。所以换个名字,换汤不换药可能会好一点,说成自己在学校和同学合作的等等。不过这也是我自己的看法,仅供参考。
5. 算法题怎么刷?
算法题也是至关重要的一环,现在很多大厂除了笔试,面试环节都有手撕代码,如果这个代码题写不出来也没有明确思路,那么就算前面答的很好,面评的结果可能也不乐观,所以这个算法更要重视。关于这点我的建议是拉长战线,每天练习。在刚开始学习java的时候,你就可以分出一些时间,学习一下数据结构的知识,然后就可以开始着手刷题了。后面的学习路程中,每天都抽出一到两小时刷题,这是个长征,不是一朝一夕就能发生产生质变。
刷题可以从剑指offer或者力扣HOT100的简单题开始,每一个不管自己能不能写出来,都要看一下优秀的解题思路,思考自己的解题方法有没有优化的可能,面试官很喜欢问算法能不能降低复杂度等问题,这些在自己平常就要多思考。
另外最重要的一点,刷题一定要自己总结,对相同算法思想的题目进行归类,切不可无脑刷题,这样下去你会发现自己写过的题再写还是不会。应付秋招的笔试和面试手撕代码,常用的算法思想有BFS、DFS、回溯、动态规划等等,一定要深刻理解算法的思想,再找相同类型的题目进行归纳总结,这样才能达到事半功倍的效果。另外一个小提示,我们平常都在力扣或者牛客刷题,这些模式都不需要我们处理输入输出,在真正的大厂笔试时,很多时候需要我们对输入输出进行处理,不过这部分并不复杂,在牛客上找一些大厂真题练习即可。
秋招面经
这里记录了我从三四月份实习开始到秋招面试的所有面经,我每次及时的把面经记录下来,进行查漏补缺和巩固扩展。建议大家在秋招的时候也把每次面试官的问题记录下来,不断完善自己的知识网络。
京东(已OC base北京 一面技术,二面hr)
8.16
1.讲一下CMS垃圾收集器以及每个过程是怎么做的
2. 垃圾回收算法
root有哪些
内存结构
5.项目中哪里用到redis,为什么使用redis
6.redis的缓存击穿雪崩
7.redis和mysql的数据一致性如何保证
8.redis持久化方式有哪些
有何优势,默认持久化方式是什么
10.设计模式有哪些分类
11.讲讲观察者模式
的隔离级别
13.出现幻读怎么办
14.间隙锁如何实现?
8.20 hr面
1.为何不留在华为
2.工作上遇到问题怎么办?如何请教组里的大牛?没时间理你如何处理
3.觉得从学生走向社会最大的不同是什么
4.说一下自己的优点和缺点
5.对京东有什么了解
6.对电商模式有什么看法
7.意向工作地点
阿里(一面挂,后面我的简历在阿里内部部门一直流转,有人捞我面试,我自己没面)
8.23
-
TCP为何是三次握手,两次握手会怎样?
-
可以怎么设计两次握手并且避免问题
-
了解java多线程么?项目中使用了么?
-
线程池如何创建?
-
线程池的参数如何设置?每个参数表示什么意思?
-
谈谈对GC的看法,垃圾回收器如何选择?
-
Mysql索引结构是什么,它的搜索功能如何实现?
-
遇见过索引失效么?如何解决?
-
慢查询如何解决?
-
静态代理和动态代理区别
-
有序的集合类有哪些?Treeset底层实现
-
Hashmap扩容了解么?如何扩容
-
出现hash冲突如何解决
-
垃圾回收的时机
-
BIO/NIO/AIO
-
对http无状态是怎么理解的
-
假如有5000万行的数据,放入mysql中,B+树存储这些数据需要几行?
阿里是电话面试,我自认为回答的还不错,谁知道就凉了,无语。。。
美团(已OC,三轮技术,一轮hr)
9.2
-
tcp握手挥手原理
-
Tcp流量控制,拥塞避免
-
数据发送与接收的过程
-
Udp为何不可靠
-
Spring ioc原理,如何解决循环依赖?
-
Spring事务用过吗,失效怎么办
-
Aop底层是什么?动态代理和静态代理的区别
-
synchronized与lock的区别,synchronized底层原理
-
了解乐观锁和悲观锁么,乐观锁实现的原理
-
了解锁升级么
-
线程池的拒绝策略了解么?
-
arrayList线程安全么?不安全怎么办
-
讲一下类加载过程
-
双亲委派了解么
-
什么时候需要打破双亲委派?
-
手撕代码:实现LRU算法
9.4
-
项目中为何用mongoDB?要能说服面试官
-
它相比于mysql的优势?
-
了解mongoDB底层索引么?
-
评论热点排行榜怎么做?
-
Redis缓存击穿雪崩
-
秒杀中redis和mysql中数据库一致性如何实现
-
延时双删为何删除两次?
-
用户登录怎么实现
-
请求中的token被窃取怎么办
-
项目都用了springcloud框架,如果出现异常如何处理?
-
使用微服务框架你觉得有什么缺点?
-
在华为实习的数据库解耦的业务背景
-
数据库解耦遇到了那些问题
-
链表和数组的区别,读写的复杂度
-
了解LinkedHashMap么?什么时候会使用?底层原理是?
-
Lock和synchronized的区别
-
Lock如何有序性和可见性?Volatile呢?
-
了解mysql 的日志么?
-
Redolog和binlog的作用
-
索引为何用b+树?b树不可以么?
-
算法题:判断是否为环形链表,如果是则找出环形链表的入口
题目以前总结过,无压力写出来,不过为了看起来不像是背出来的,写的过程中做思考状。
9.8 hr面
1.怎么好多人简历中都有谷粒商城?
2.这些项目有真实跑过么,有没有做过压测?
3.为何要转专业?
4.转专业遇到的最大困难是什么?
5.你觉得和科班差在哪里?有哪些优势?
6.讲一讲最让自己自豪的事和最挫败的事
7.家是哪里的?考虑来北京么?有女朋友么?女朋友怎么想的?
8.实习期间遇到的困难如何解决?
9.有什么爱好?会读java相关的书么?
10.手里有哪些offer?
Shein(据说是四轮,不过我第二轮hr面凉了)
Shein是一家做跨境电商的外企,总部在广州,我看他在南京有分部就投了,面试答得还行,不过看网上说shein的hc特少,面试有kpi的嫌疑
8.20(一面)
-
用过哪些集合类?
-
arrayList是线程安全的么?不是,如何解决?
-
如何安全在arrayList遍历时删除数据
-
Java抽象类和接口的区别?做项目时用过么
-
Ioc是什么?讲一下原理?
-
Aop呢?底层了解么
-
实例化对象的方式有哪些?
-
Bean的生命周期了解么?
-
了解工厂模式么?一般在什么时候使用?
-
思考题:观察过电梯么?电梯调度你有什么想法?没人乘坐的时候电梯一般停在几楼?为什么这么设计?
-
了解过淘宝电商和现在的抖音电商么?有什么想法
-
实习遇到什么问题?
-
反问:部门的技术栈、部门的业务(做出口)
中兴(一面技术+hr)
中兴是我遇到最水的面试,大家转码的同学可以投这个涨涨自信,保个底哈哈,从今年的情况来看,中兴真的是只要学校是211以上基本都要,面试聊天居多
8.15(技术,面试的部门用的c++,不会java)
-
java的面向对象和c++面向过程有何不同?
-
Java static什么意思?
-
Java的继承和c++有何区别?
-
Java的重写和重载是怎么回事
-
愿意转c++么?愿意,以前写过c++
-
为何不留在华为?(这问题基本把把必问,无语)
-
有女朋友么?会留在南京么?
-
反问?部门是做什么的?
-
意向薪资
东方财富(2轮技术+hr)
9.8 一面
-
重写和重载的区别
-
final finally 和 finalize的区别
-
抽象类和接口有什么不同
-
Hashmap底层原理?Jdk1.8和之前的有区别么?
-
什么时候链表转换为红黑树?为何用红黑树不用一般的平衡二叉树?
-
了解concurrentHashMap么?底层原理?Jdk1.8的和1.7的区别是?
-
说到了CAS,讲讲CAS怎么实现的?
-
公平锁和非公平锁怎么理解
-
乐观锁和悲观锁怎么理解
-
项目中有用过这些锁么
-
TCP三次握手,假如最后一次没成功会怎样?
-
为何挥手要四次?
-
Tcp流量控制讲一讲
-
拥塞避免算法了解么
-
Jvm内存结构说一下
-
垃圾回收一般发生在哪个区域?
-
哪个区域不会发生内存泄漏
-
如何判断一个对象是否需要回收?
-
GC roots是什么
-
垃圾回收算法了解么
-
垃圾回收器有哪些?
-
G1和CMS各自的优势了解么
-
算法题:写一个归并排序(这真是我遇见过最朴实无华的手撕代码)
9.10 二面
二面面试官是从华为跳槽出来的,我俩先吐槽了一会华为的加班。。
-
了解双亲委派么?为何要这样子设计?会有什么问题么?
-
类加载的过程能说一下么?
-
什么时候需要加载类?
-
了解动态加载的应用场景么
-
构造方法可以重载么?
-
Springboot这种高度封装的框架你觉得有什么缺点么
-
使用springcloud框架做项目中用到了哪些组件?
-
Mybatis中#{}和${}区别?
-
除了使用#{}解决sql注入的问题还有其他办法么?
-
查询数据库时分页你一般怎么处理
-
多线程了解么?有什么实现方式
-
线程池自己创建过么?参数该怎么设置比较好
-
TCP/UDP的区别?分别有哪些应用
-
浏览器输入网址后是怎么处理我们才能看到最终的网页?
-
Session和cookie有什么区别?项目中用到了么?Session有过期时间么?如何设置
-
算法题:三数之和(力扣原题)
9.15 hr面
1.为何转行?南航机械不是挺好的?
2.研究生的毕业课题是哪方面的?
3.如何兼顾自学代码和课题?老师什么态度?
4.为何不留在华为?华为平台那么大(hr说东财加班一定比华为少)
5.看你简历是河南人,要留在南京么?除了南京还想去哪里?
6.有女朋友么?女朋友在做什么工作?对工作地点有什么想法?
7.平常了解过东方财富么?玩过基金么?
说我一面代码题太简单,要给我加一题。。。
算法题:最长回文子串(力扣原题,直接在纸上写,写完拍照,太狠了。。。。)
荣耀(1面技术+2面hr)
9.17
-
string、stringbuilder、stringbuffer的区别以及底层实现原理
-
用过的集合。Arraylist线程安全么?不安全怎么办?
-
哪些集合类可以排序?去重呢?
-
排序的源码看过么?
-
讲一下归并排序的思想
-
Arraylist遍历删除会出现什么问题?如何解决
-
Hashmap底层实现
-
了解泛型的概念么?
-
为何重写equals和hashcode
-
Hash冲突有哪些解决办法?
-
转发和重定向有何区别
-
http是无状态的你怎么理解
-
如何解决http无状态这一问题
-
实习项目中微服务直接的接口调用怎么实现?
-
项目中数据库的分库分表自己操作了么?基于什么原则?
-
复盘笔试题(这里提醒一下小伙伴,有些公司喜欢复盘笔试比如华为、荣耀,面试前最好把笔试题再看看搞明白,自己当时写的有什么优化的空间,不打无准备之仗。)
9.18 主管面
1.在实习中感受到公司和学校最大的差别是什么?
2.对华为公司的文化怎么看?
3.对现在的加班文化怎么看?自己能接受加班么
4.觉得公司中的团队合作的效率高么?
5.团队合作中哪些因素会影响效率?
6.本科加入过社团,你从中收获了什么?有什么感悟?
7.从自己进公司后的规划是什么?(建议说想注重技术,不要说自己想当管理者之类的)
8.最失败的事是什么?
9.意向薪资
华为(2面技术+1面主管)
9.23
-
java中的双亲委派能说一下么?有什么问题?那些地方需要打破?
-
讲一下类加载的过程
-
哪些情况会触发类加载?
-
了解过stream流么
-
写代码都遇到过哪些异常?讲一下java的异常机制
-
Volatile作用是什么?和synchronized有何区别?
-
线程和进程有何区别?
-
能达到多线程的效果么
-
一般什么情况会出现死锁?如何避免死锁
-
了解过锁升级么?
-
悲观锁和乐观锁有哪些应用场景?
-
手撕代码:每日温度(lc739)给时间大概20min,在本地ide写,需要跑出结果
9.26
-
项目中用到了redis,为何要使用redis?
-
Redis的缓存雪崩击穿,如何解决
-
Redis的数据类型有哪些?你项目中如何使用?
-
库存查验和扣减操作的原子性如何在redis中保证?
-
Redis和mysql的一致性呢?
-
写了两个sql,比较简单,就是根据年龄排序之类
-
Mysql的索引失效时怎么回事
-
聚簇索引和普通索引有何区别?所谓的回表是什么意思?
-
一般什么情况我们需要建立索引?
-
Mysql一般推荐使用自增主键,想过这样做的优势么?
-
建立索引后实际测试过么?效率提高了多少?
-
如果一次查询的数据量过大该怎么办?
-
用户登录的session如何解决分布式的问题
-
在实际项目中cookie和session是如何配合的?
-
手撕代码:(基本计算器 lc224)
10.8 主管面
这次主管面比较轻松,纯聊天。。
-
在华为实习感觉怎么样?
-
为何换部门(答主实习在数通,秋招在运营商)
-
对华为文化有何理解
-
怎么看待美国的制裁
-
最失败和最成功的的事
-
反问(没啥问的,结束。。)
面试手撕总结(自己和朋友遇到的):
-
数组中出现超过一半次数的字(建议摩尔投票法)
-
最小覆盖子串
-
三数和(复杂度低于n3,建议双指针)
-
接雨水
-
链表环问题
-
单例模式
-
观察者模式
-
快排优化实现TopK问题
-
双线程轮流打印
-
数组实现优先队列
-
LinkedHashMap实现LRU
总结
从我开始转java到现在已经过去整整一年,这一年中现实生活中一直是我一个人孤军奋战,因为我之前的师兄没有转码的,所以现实生活中并没人可以请教,很多事都是自己上网摸索,牛客,****这两个论坛给了我很多帮助,也在网上认识了一些一起努力从“天坑”中爬出来的小伙伴。在这期间最大的阻力就是一边完成老师的任务,一边自己自学java,当然因为自己主要心思在转码上面,期间也少不了老师的批评,还有自己一个人起早贪黑,实验室寝室的其他同学玩的时间会比你多很多,这些都要自己承担,要坚定自己的信念,明白自己做的事对以后的人生轨迹会产生怎样的影响,吃这几个月一年的苦,能走一条完全不一样的人生之路,不得不说太赚了,加油吧!同学!