从决定走 Java 后台开发到秋招结束,不到半年的时间内,就拿到了满意的 offer,其中的意识 + 打法真的是至关重要,以及在这半年内的每一步该如何走?该怎么走?都在值得思考的问题,看看他的秋招之路,希望给你带来启发!
自我介绍
我来自一所双非院校,今年上半年开始学习 Java,机械专业。目前秋招结束,拿了四个 offer,包括猫眼娱乐、VIPKid、海康威视、深圳金蝶,全部都是 Java 后端开发岗位。
对于这个结果我自己也比较满意了,毕竟自己学的时间也短,只能面向面试先补最重要的知识。很多东西也没有学习到位,暂时没有深入学习。我的经验比较适合非科班转行的同学。
初入大学
大学我选的志愿是机械专业,算是我们学校的王牌专业。回想起当初我对机械还是有着向往之情的,大一大二卯足了劲在学习机械,成绩也是保持在班级前三名的,这样下去,我保研机械绝对是没有问题的。
但我后面为啥放弃了这么多选择从零开始学习计算机呢?非科班的同学可能跟我有一样的心路历程,一开始只是有个转行的想法,但不是那么坚定,于是也就没有那么认真地学习计算机知识。另外一个,想着自己都学了那么久的本专业了,我现在开始能赶上计算机科班的同学吗?这两个问题当时也在困扰着我,尤其我本专业成绩还不错。
这其实就是沉没成本,那我为什么这么坚定转行了呢?那是在大二那一年的暑假,我们整班被学校拉去外省实习一个月,整天呆在工厂里,和机器打交道。那段时间非常辛苦,工厂里面干活工作环境噪音非常大,而且干的活我不是很感冒。我当时一想到我毕业后要跟这些机器打交道,我立马萌生了转行的念头。我回来后一直在思考,这是不是我想要的生活,得到了答案后,在那个暑假,我开始踏上了自学计算机的旅途。
自我摸索
学习计算机我当然要选择一门开发语言,最开始我选择的是 Python 开发语言,python 的培训教程也是浩如烟海,我认为这是以后非常火的方向,我还把 Flask、Django 这些 Python Web 开发框架学了,大三上半年把时间都花在了这上面。寒假的时候,我意识到下一学年大四了,这学习进度太慢了,最好的方法是上招聘网站看招聘要求。
我找了一圈,发现没几家公司招 Python 开发工程师,我当时完全慌了,跟一个我的科班同学好基友聊了之后,我发现他们都学的是 Java、C++ 这些。于是,我再一次抛弃 Python,完全投入 Java 的怀抱,这一次我完全是面向工作岗位学习,因为已经大三下半学期了,我还啥也不会,感觉自己会失业,机械在我浪了一个学期后,成绩也是往下狂掉。我知道我来到了一个分岔口,必须破釜沉舟。
Java 学习之路
1、
今年寒假我自己在家把 Java 的学习之路好好地规划了一下,我先利用一整个寒假的时间把 Java 的基础学了一遍,在中国大学 MOOC 上看的浙江大学翁恺老师的课程,购入了书籍 《Java 核心技术卷 I》,这本书也一直陪伴着我,供我查阅一些细节。
另外我也在慕课网上购买了一些视频,专题的每个视频我都是一边看一边在纸上写代码,没有追求速度,因为自己本来就是零基础,所以我知道自己要反反复复地看才能明白。链表和排序这一块我都是看了一周的,自己在纸上也是写了好多遍,写完了好几本本子。
2、
春招时我一直受挫,因为确实自己学习的时间太短了,短短两个月什么也经不住问。面试基本也是完蛋,当时我准备了一版简历后给学长内推,还捞了几个大厂面试,结果当然是全部挂掉。我当时完全想的是攒经验,压根也没想通过,看看自己对于真实面试场景的反应,而且面试中问到的题目我都记忆深刻,自己下来后也是不断总结,搞懂了一些问题。
这期间我也在坚持学习,计算机网络知识也是通过慕课网来学的,期间也是去看书来巩固一些细节,并且不断完善自己的知识体系。
五月底的时候,春招已经接近尾声了,这个时候我直接采取了海投策略,捞到了西安一家小公司的实习机会。估计公司也是急缺人手,一面完通知我过了,可以直接过去上班。当时,我本来都对实习不报任何希望了,打算自己暑假做一个项目准备秋招了,通知可以实习了后,我还是很开心地跑去上班了。
3、
实习期间,我们公司还是很辛苦的,因为我们是一个小团队,接的项目比较多,差不多是两个人负责一个项目,在我熟悉了两周开发环境后,我也接手了一个项目。当时自己压力也比较大,spring 框架都没掌握好,直接上手 springboot 框架,而且还要去改前端的一些 js 文件。我的导师也很忙,基本抽不出时间来回答我的问题。
中间有一段时间我都是加班到九点多才走,晚饭都来不及吃。这里特别说一下我的导师,我还是很感谢他的。我们经常聊一些 Java 学习的问题,他也把一些学习的经验倾囊相授,他说我要从基础开始好好学,然后去看一些 web 开发的东西、ssm 框架、去了解 springboot、springcloud 这些大厂用的东西。我的学习路径也慢慢清晰起来。
秋招之路
1、
因为有了春招的惨败经验,对于秋招,我没有任何放松,我做好了打持久战的准备,甚至都想到了明年的春招。我是从六月份开始留意秋招的,因为这个时候 OPPO、Vivo 的提前批已经开始了,当然我也投递了简历,直接简历挂了。
我的策略还是海投,我知道我要面试经验,我要大量的面试实战来打磨自己的简历。我也认真反思了自己的春招经历,对于面试要求的基础、算法能力、项目这三样,我是每个方面都没有,我开始制定计划去刷算法题,因为这个时候我的算法专栏也快看完了;项目方面准备,实习期间,在我交付给公司上线后,我一直在思考自己项目中的亮点、难点、所用到的一些技术。
所有的这些优化点我都自己做了总结,并且倒背如流。基础方面,mysql 的学习我是看的掘金小册,也是认认真真地看,了解了索引原理、mvcc 这些常见考题。Java 虚拟机我是看的 《深入理解 Java 虚拟机》,Java 的同学应该感觉到了,这是一本神书,里面的内容建议通读三遍。
2、
提前批之路:前面说到我是准备了提前批的,我参加的提前批都参与了笔试,我第一家面的是网易云音乐,这也是我第一次通过大厂的笔试,当时得知自己有面试机会后,我专门请了一天假来面试,我是云音乐的死忠粉,自己把网易云音乐的一些产品功能做了一些深入理解。这一次面试我已经没那么紧张了,经过了春招的洗礼后,我已经可以熟练地开始自我介绍,然后进入答题模式了。这一次面试没有通过,我也是意料之中,自己代码没写出来,问题回答地也不够完善。
有了网易这次面试经验之后,后面每次面试前我都会把给我面试公司的企业文化、做的产品充分了解,因为大厂的产品我们可能很了解了,一些小厂我是采取的海投,可能通知我面试了,我还不知道他们做的是什么业务。对企业了解越深入,面试时非常加分,这说明候选人是很珍惜这次面试机会的,招来的也是志同道合的人。
提前批我还面了一些公司,我结果还是没有上岸,只能乖乖准备正式批。到了正式批,我都是在牛客网上找的内推投递的,我自己做了个 excel 表格,记录下了自己投递的每家公司以及面试进度。自己投递的公司实在太多,我借助这种方式让我合理地去安排我的面试。今年很多公司即便是内推的也一样是免不了笔试的,内推的作用只是保证我的简历不被刷下来。9 月初的一段时间里,我差不多每天都有两场笔试,高强度的笔试还是很消耗人的,为了得到更多的面试机会,我尽量是有笔试的都会参加。
3、
我第一个拿到的 offer 是深圳金蝶,前一天做完笔试题之后,第二天就通知我现场面试了,我也是第一次现场面试,一面撕了一道算法题,二面我跟面试官讲了项目的一些架构知识,面试官很满意,也让我过了。三面 HR,第一次到 HR,当时我很激动,我重点向 HR 展示了我强大的学习能力,因为面试时很多面试官都会问我为什么转互联网,这个时候我会结合自己的性格优势来回答,以及向他展示我的自学能力,表明我完全有能力胜任这份工作。
拿到 offer 后,我的心态完全不一样了,后面我完全进入了面试状态,有了保底之后,自己后面的面试也是非常放松。我是 9 月 11 号通过的面试,秋招从我六月份开始准备已经过去三个月了,我特别喜欢这种一站式现场面试,过不过直接当天出结果,而且在现场能通过我的热情去感染面试官。
后面我还面了华为、猫眼、vipkid 、海康威视、七牛云等一些公司,当我进入面试状态时,我自己是抱着一定要拿下这场面试的心态去面试的。现场面试时,比如面试官问 gc 的问题,我会从 JVM 的内存分配讲到垃圾回收算法再到垃圾收集器以及调优的一些思路。就这一个问题,我至少讲五分钟,我会把自己会的东西完整地展示给面试官。一场面试的时间差不多是固定的,你讲你会的东西多了,面试官就会顺着你的思路往下问,你不会的东西也就很好地掩藏起来了,这也是一个面试的思路。
一些硬核的能力,比如手撕算法,无他,唯手熟尔,现场你可以先跟面试官沟通你的思路,然后再上手写,一些小错误由于面试官也是肉眼编译,他也就忽略了。
4、
每个人都有一个大厂梦,我也不例外,我也尝试投了一些大厂。阿里一面挂掉了,问了一些高并发、分布式和架构设计方面的问题,自己确实缺少这方面的经验,沉淀太少,肯定是达不到阿里的要求的后来我也是特意去补了这方面的知识。美团霸面被拒,由于美团笔试和猫眼宣讲会冲突了,我放弃笔试直接去霸面的,现场小姐姐让我等了会之后让我走了,当时还在感叹美团慧眼不识珠。不过今年美团这情况,自己就算过了估计也是备胎,后面我也顺利通过了猫眼的面试,自己也挺满意的。
国庆前拿到了猫眼的 offer 后,我打算结束我的秋招了,猫眼直到十月底才沟通薪资,自己中途也是放弃了金蝶和海康威视的 offer,准备北漂去猫眼搬砖了,当然我还是会继续学习 Java 相关技术栈知识的,自己差的太多,还得好好补科班的基础知识。
回顾我的整个秋招,或者说我现在回想我的转行之路,我拿到现在这个结果我自己是比较满意的,学习 Java 的时间我满打满算都只学了半年,之前还去学了半年 python,由于没有看清形势,这半年可以说是浪费了,以至于今年我学习 Java 时一直在感叹时间不够,但是秋招的时间截点一直卡在那儿,箭在弦上,不得不发。
5、
这半年自己过的也是如履薄冰,我对自己的定位是一定要先找到一份工作,曲线救国,先进入计算机行业。这个目标就是我当时最大的愿望,秋招的时候,我每天都在想自己的面试表现,想自己的自我介绍,哪里做的不对,哪里需要改进,包括简历的改进,我起码改了十几版,最后面 vipkid 的时候,面试官就是拿着我的简历一行行往下面问的,问题也是非常详细,由于我对自己的简历太熟悉了,所以我几乎没什么悬念地通过了。
另外说一个「坚持」的问题,这半年可以说我的所有空闲时间都献给了 Java。我觉得一定是你的内心足够渴望,并且你对这个事业足够热爱,你才会把你所有的时间都花在上面,并且乐此不疲。不单单是学计算机,学任何东西都可以归结于此。我见过转行失败的,三分钟热度的,说到底都是不够热爱,一开始可能是被高薪吸引,但真正驱使你坚持下来的东西一定是你自己的兴趣。说这么多,我只是想告诉学弟学妹们,一定要相信自己,相信自己的学习能力,开始了之后,就坚持下去吧。
分享一些面试常问的题目
java基础
- HashMap1.7和1.8的实现区別
- HashMap中插入、添加、删除除元素的时间复杂度?
- ConcurrentHashMap的实现原理?
- newString(),一共创建了几个对象?
- 序列化和反序列化的底层实现原理?
- hashCode和equals方法的区别和联系?
- 讲讲String、StringBuilder、StringBuffer?
- Object类中常见的方法,为什么wait notify会放在Object里边?
- Arraylist与LinkedUstKU空间是多少?
- HashMap的默认空间、扩容因子等?
- 若hashcode方法永远退回1或者一个常量会产生什么结果?浅拷贝和深拷贝的区别?
- 反射的作用与实现原理?
- Java提供的排序算法是怎么实现的?
JVM
- JVM运行时内存区域划分?
- 常见的GC回收算法及其含义?
- 什么是类加载器?
- 什么是双亲委派模型机制?
- 一个类的生命周期、类是如何加载到JVM中的?
- 说说类加载的过程?
- 什么是强引用、软引用、裝引用、虚引用?
- Minor GC与Full GC分别在什么时候发生?
- 什么时候触发Full GC?
- Java中的大対象如坷进行存储?
- 为什么新生代内存需要有两个Survivor区?
MySQL
- MySQL常见的存储引擎以及他们之间的区别?
- MySQL索引为什么使用B+树?
- MySQL覆盖索引是什么?
- MySQL索引失效的条件,索引在什么时候不会起效果?
- MySQL如何进行优化的?
- 什么是explain命令?
- MySQL遇到的死锁问题、如何排查与解决?
- 常见的数据库优化方案,在你的项目中数据库如何进行优化的?
- 什么是redo日志,什么是undo日志?
多线程
- 说说synchronized实现原理(对象监视器)?
- volatile实现原理(禁止指令重排、刷新内存)?
- ThreadLocal原理分析,ThreadLocal为什么会出现OOM,出现的深层次原理?
- CAS无锁的概念、什么是乐观锁和悲观锁?
- AQS同步队列是什么?
- 什么是ABA问题,出现ABA问题JDK是如何解决的?
- 常见的原子操作类?
- 偏向锁、轻量级锁、重量级锁、自旋锁的概念?
- 一个线程连着调用start两次会出现什么情況?
- 线程池的实现?
- 重要参数及原理?
- 说说四种线程池?
- 任务拒接策略有哪几种?
- 线程状态以及API怎么操作会发生这种转换?
设计模式
- 单例模式
- 动态代理
- 工厂模式
- 责任链模式
分布式数据库
- 说说常见的几种分布式ID的设计方案?
- 分库与分表带来的分布式困境与应对之策(如何解决分布式下的分库分表,全局表?)
- 如何拆分服务、水平分割、垂直分割?
Redis
- Redis使用场景?
- Redis有哪些数据类型?
- 说说Redis持久化机制?
- Redis为什么是单线程的?
- 什么缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存降级?
- 说说Redis常见的回收策略?
- Hash—致性算法?
- Redis和数据库数据一致性的问题?
- Redis中zSet跳跃表问题?
Nignx
- 请解释什么是C10K问题或者知道什么是C10K问题吗?
- 正向代理和反向代理?
- Nginx几种常见的负载均衡策略?
- Nginx服务器上的Master和Worker进程分别是什么?
Zookeeper
- 什么是Zookeeper通知机制?
- Zookeeper集群管理(文件系统、通知机制)
- 讲讲Zookeeper分布式锁?
- 获取分布式锁的流程
- Zookeeper数据复制?
- zookeeper是如何保证事务的顺序一致性的?
- zookeeper是如何选取主leader的?
- zk节点宕机如何处理?
- zookeeper负载均衡和nginx负载均衡区别?
- 说说zookeeper watch机制?
消息队列问题及集群分布式
- 消息队列使用的场景介绍和作用(应用耦合、异步消息,流量削锋等)
- 如何解决消息队列丢失消息和重复消费问题?
- 什么是CAP、Base?
- 说说最终一致性理论?
- 什么是RPC、如何实现RPC、RPC的实现原理?
- 什么是Dubbo?
- Dubbo的基本原理、执行流程?集群Session解决方案?
- 分布式事务?
- 说说三种分布式锁的实现?
- 集群、负载均衡、分布式、数据一致性的区别和联系?
网络编程
- 三次搌手和四次揮手、为什么揮手需要四次
- 什么是TCP粘包/拆包
- TCP粘包/拆包的解决办法
- 从游览器中输入URL到页面加载的发生了什么?
- 什么是长连接和短
- 什么是长连接和短连连接?
Spring
- 讲讲静态代理模式的优点及其瓶颈?
- 对Java 接口代理模式的实现原理的理解?
- 如何使用 Java 反射实现动态代理?
- 谈谈对Cglib 类增强动态代理的实现?
- 什么是 AOP?
- 讲解OOP与AOP的简单对比?
- 讲解JDK 动态代理和 CGLIB 代理原理以及区别?
- 什么是 IOC?
- Spring IOC 怎么管理 Bean 之间的依赖关系,怎么避免循环依赖?
- BeanFactory 和 FactoryBean 有什么区别,BeanFactory 和 ApplicationContext 又有什么不同?
- 谈谈Spring Bean 创建过程中的设计模式?
微服务
- 什么是Spring Boot ?
- Spring Boot有哪些优点?
- Spring Boot中的监视器是什么?
- 如何实现Spring Boot应用程序的安全性?
- 如何集成Spring Boot和ActiveMQ ?
- 如何监视所有Spring Boot微服务?
- 如何使用Spring Boot实现异常处理?
- 什么是Spring Cloud ?
- 使用Spring Cloud有什么优势?
- 服务注册和发现是什么意思?
- Spring Cloud如何实现?
- 负载平衡的意义什么?
- 什么是Hvstrix ?它如何实现容错?
- 讲讲Hvstrix断路器?
秋招结束了,我的 Java 学习之路不会结束,我很开心地是现在不用带着要通过面试的心态去学习新知识了。我非常感激那些给我帮助的人, 在我迷茫时给我鼓励,相信我能成功上岸,永远感谢你们。
最后福利
在这里也分享一些我在准备期间整理的资料,资料很全面,各个方面都有涉及到,希望对各位程序员们有所帮助;需要的可以进我的学习交流群:909666042 找管理免费获取!
部分资料图分享
更多笔记分享