非科班转行Java,半年内斩获猫眼、海康等大厂offer的校招之路!

从决定走 Java 后台开发到秋招结束,不到半年的时间内,就拿到了满意的 offer,其中的意识 + 打法真的是至关重要,以及在这半年内的每一步该如何走?该怎么走?都在值得思考的问题,看看他的秋招之路,希望给你带来启发!

自我介绍

我来自一所双非院校,今年上半年开始学习 Java,机械专业。目前秋招结束,拿了四个 offer,包括猫眼娱乐、VIPKid、海康威视、深圳金蝶,全部都是 Java 后端开发岗位。

对于这个结果我自己也比较满意了,毕竟自己学的时间也短,只能面向面试先补最重要的知识。很多东西也没有学习到位,暂时没有深入学习。我的经验比较适合非科班转行的同学。

初入大学

大学我选的志愿是机械专业,算是我们学校的王牌专业。回想起当初我对机械还是有着向往之情的,大一大二卯足了劲在学习机械,成绩也是保持在班级前三名的,这样下去,我保研机械绝对是没有问题的。

但我后面为啥放弃了这么多选择从零开始学习计算机呢?非科班的同学可能跟我有一样的心路历程,一开始只是有个转行的想法,但不是那么坚定,于是也就没有那么认真地学习计算机知识。另外一个,想着自己都学了那么久的本专业了,我现在开始能赶上计算机科班的同学吗?这两个问题当时也在困扰着我,尤其我本专业成绩还不错。

这其实就是沉没成本,那我为什么这么坚定转行了呢?那是在大二那一年的暑假,我们整班被学校拉去外省实习一个月,整天呆在工厂里,和机器打交道。那段时间非常辛苦,工厂里面干活工作环境噪音非常大,而且干的活我不是很感冒。我当时一想到我毕业后要跟这些机器打交道,我立马萌生了转行的念头。我回来后一直在思考,这是不是我想要的生活,得到了答案后,在那个暑假,我开始踏上了自学计算机的旅途。

自我摸索

学习计算机我当然要选择一门开发语言,最开始我选择的是 Python 开发语言,python 的培训教程也是浩如烟海,我认为这是以后非常火的方向,我还把 Flask、Django 这些 Python Web 开发框架学了,大三上半年把时间都花在了这上面。寒假的时候,我意识到下一学年大四了,这学习进度太慢了,最好的方法是上招聘网站看招聘要求。

我找了一圈,发现没几家公司招 Python 开发工程师,我当时完全慌了,跟一个我的科班同学好基友聊了之后,我发现他们都学的是 Java、C++ 这些。于是,我再一次抛弃 Python,完全投入 Java 的怀抱,这一次我完全是面向工作岗位学习,因为已经大三下半学期了,我还啥也不会,感觉自己会失业,机械在我浪了一个学期后,成绩也是往下狂掉。我知道我来到了一个分岔口,必须破釜沉舟。

非科班转行Java,半年内斩获猫眼、海康等大厂offer的校招之路!_第1张图片

Java 学习之路

1、
今年寒假我自己在家把 Java 的学习之路好好地规划了一下,我先利用一整个寒假的时间把 Java 的基础学了一遍,在中国大学 MOOC 上看的浙江大学翁恺老师的课程,购入了书籍 《Java 核心技术卷 I》,这本书也一直陪伴着我,供我查阅一些细节。

另外我也在慕课网上购买了一些视频,专题的每个视频我都是一边看一边在纸上写代码,没有追求速度,因为自己本来就是零基础,所以我知道自己要反反复复地看才能明白。链表和排序这一块我都是看了一周的,自己在纸上也是写了好多遍,写完了好几本本子。

2、
春招时我一直受挫,因为确实自己学习的时间太短了,短短两个月什么也经不住问。面试基本也是完蛋,当时我准备了一版简历后给学长内推,还捞了几个大厂面试,结果当然是全部挂掉。我当时完全想的是攒经验,压根也没想通过,看看自己对于真实面试场景的反应,而且面试中问到的题目我都记忆深刻,自己下来后也是不断总结,搞懂了一些问题。

这期间我也在坚持学习,计算机网络知识也是通过慕课网来学的,期间也是去看书来巩固一些细节,并且不断完善自己的知识体系。

五月底的时候,春招已经接近尾声了,这个时候我直接采取了海投策略,捞到了西安一家小公司的实习机会。估计公司也是急缺人手,一面完通知我过了,可以直接过去上班。当时,我本来都对实习不报任何希望了,打算自己暑假做一个项目准备秋招了,通知可以实习了后,我还是很开心地跑去上班了。

3、
实习期间,我们公司还是很辛苦的,因为我们是一个小团队,接的项目比较多,差不多是两个人负责一个项目,在我熟悉了两周开发环境后,我也接手了一个项目。当时自己压力也比较大,spring 框架都没掌握好,直接上手 springboot 框架,而且还要去改前端的一些 js 文件。我的导师也很忙,基本抽不出时间来回答我的问题。

中间有一段时间我都是加班到九点多才走,晚饭都来不及吃。这里特别说一下我的导师,我还是很感谢他的。我们经常聊一些 Java 学习的问题,他也把一些学习的经验倾囊相授,他说我要从基础开始好好学,然后去看一些 web 开发的东西、ssm 框架、去了解 springboot、springcloud 这些大厂用的东西。我的学习路径也慢慢清晰起来。

非科班转行Java,半年内斩获猫眼、海康等大厂offer的校招之路!_第2张图片

秋招之路

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基础

  1. HashMap1.7和1.8的实现区別
  2. HashMap中插入、添加、删除除元素的时间复杂度?
  3. ConcurrentHashMap的实现原理?
  4. newString(),一共创建了几个对象?
  5. 序列化和反序列化的底层实现原理?
  6. hashCode和equals方法的区别和联系?
  7. 讲讲String、StringBuilder、StringBuffer?
  8. Object类中常见的方法,为什么wait notify会放在Object里边?
  9. Arraylist与LinkedUstKU空间是多少?
  10. HashMap的默认空间、扩容因子等?
  11. 若hashcode方法永远退回1或者一个常量会产生什么结果?浅拷贝和深拷贝的区别?
  12. 反射的作用与实现原理?
  13. Java提供的排序算法是怎么实现的?

JVM

  1. JVM运行时内存区域划分?
  2. 常见的GC回收算法及其含义?
  3. 什么是类加载器?
  4. 什么是双亲委派模型机制?
  5. 一个类的生命周期、类是如何加载到JVM中的?
  6. 说说类加载的过程?
  7. 什么是强引用、软引用、裝引用、虚引用?
  8. Minor GC与Full GC分别在什么时候发生?
  9. 什么时候触发Full GC?
  10. Java中的大対象如坷进行存储?
  11. 为什么新生代内存需要有两个Survivor区?

MySQL

  1. MySQL常见的存储引擎以及他们之间的区别?
  2. MySQL索引为什么使用B+树?
  3. MySQL覆盖索引是什么?
  4. MySQL索引失效的条件,索引在什么时候不会起效果?
  5. MySQL如何进行优化的?
  6. 什么是explain命令?
  7. MySQL遇到的死锁问题、如何排查与解决?
  8. 常见的数据库优化方案,在你的项目中数据库如何进行优化的?
  9. 什么是redo日志,什么是undo日志?

多线程

  1. 说说synchronized实现原理(对象监视器)?
  2. volatile实现原理(禁止指令重排、刷新内存)?
  3. ThreadLocal原理分析,ThreadLocal为什么会出现OOM,出现的深层次原理?
  4. CAS无锁的概念、什么是乐观锁和悲观锁?
  5. AQS同步队列是什么?
  6. 什么是ABA问题,出现ABA问题JDK是如何解决的?
  7. 常见的原子操作类?
  8. 偏向锁、轻量级锁、重量级锁、自旋锁的概念?
  9. 一个线程连着调用start两次会出现什么情況?
  10. 线程池的实现?
  11. 重要参数及原理?
  12. 说说四种线程池?
  13. 任务拒接策略有哪几种?
  14. 线程状态以及API怎么操作会发生这种转换?

设计模式

  1. 单例模式
  2. 动态代理
  3. 工厂模式
  4. 责任链模式

分布式数据库

  1. 说说常见的几种分布式ID的设计方案?
  2. 分库与分表带来的分布式困境与应对之策(如何解决分布式下的分库分表,全局表?)
  3. 如何拆分服务、水平分割、垂直分割?

Redis

  1. Redis使用场景?
  2. Redis有哪些数据类型?
  3. 说说Redis持久化机制?
  4. Redis为什么是单线程的?
  5. 什么缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存降级?
  6. 说说Redis常见的回收策略?
  7. Hash—致性算法?
  8. Redis和数据库数据一致性的问题?
  9. Redis中zSet跳跃表问题?

Nignx

  1. 请解释什么是C10K问题或者知道什么是C10K问题吗?
  2. 正向代理和反向代理?
  3. Nginx几种常见的负载均衡策略?
  4. Nginx服务器上的Master和Worker进程分别是什么?

Zookeeper

  1. 什么是Zookeeper通知机制?
  2. Zookeeper集群管理(文件系统、通知机制)
  3. 讲讲Zookeeper分布式锁?
  4. 获取分布式锁的流程
  5. Zookeeper数据复制?
  6. zookeeper是如何保证事务的顺序一致性的?
  7. zookeeper是如何选取主leader的?
  8. zk节点宕机如何处理?
  9. zookeeper负载均衡和nginx负载均衡区别?
  10. 说说zookeeper watch机制?

消息队列问题及集群分布式

  1. 消息队列使用的场景介绍和作用(应用耦合、异步消息,流量削锋等)
  2. 如何解决消息队列丢失消息和重复消费问题?
  3. 什么是CAP、Base?
  4. 说说最终一致性理论?
  5. 什么是RPC、如何实现RPC、RPC的实现原理?
  6. 什么是Dubbo?
  7. Dubbo的基本原理、执行流程?集群Session解决方案?
  8. 分布式事务?
  9. 说说三种分布式锁的实现?
  10. 集群、负载均衡、分布式、数据一致性的区别和联系?

网络编程

  1. 三次搌手和四次揮手、为什么揮手需要四次
  2. 什么是TCP粘包/拆包
  3. TCP粘包/拆包的解决办法
  4. 从游览器中输入URL到页面加载的发生了什么?
  5. 什么是长连接和短
  6. 什么是长连接和短连连接?

Spring

  1. 讲讲静态代理模式的优点及其瓶颈?
  2. 对Java 接口代理模式的实现原理的理解?
  3. 如何使用 Java 反射实现动态代理?
  4. 谈谈对Cglib 类增强动态代理的实现?
  5. 什么是 AOP?
  6. 讲解OOP与AOP的简单对比?
  7. 讲解JDK 动态代理和 CGLIB 代理原理以及区别?
  8. 什么是 IOC?
  9. Spring IOC 怎么管理 Bean 之间的依赖关系,怎么避免循环依赖?
  10. BeanFactory 和 FactoryBean 有什么区别,BeanFactory 和 ApplicationContext 又有什么不同?
  11. 谈谈Spring Bean 创建过程中的设计模式?

微服务

  1. 什么是Spring Boot ?
  2. Spring Boot有哪些优点?
  3. Spring Boot中的监视器是什么?
  4. 如何实现Spring Boot应用程序的安全性?
  5. 如何集成Spring Boot和ActiveMQ ?
  6. 如何监视所有Spring Boot微服务?
  7. 如何使用Spring Boot实现异常处理?
  8. 什么是Spring Cloud ?
  9. 使用Spring Cloud有什么优势?
  10. 服务注册和发现是什么意思?
  11. Spring Cloud如何实现?
  12. 负载平衡的意义什么?
  13. 什么是Hvstrix ?它如何实现容错?
  14. 讲讲Hvstrix断路器?

秋招结束了,我的 Java 学习之路不会结束,我很开心地是现在不用带着要通过面试的心态去学习新知识了。我非常感激那些给我帮助的人, 在我迷茫时给我鼓励,相信我能成功上岸,永远感谢你们。

最后福利

在这里也分享一些我在准备期间整理的资料,资料很全面,各个方面都有涉及到,希望对各位程序员们有所帮助;需要的可以进我的学习交流群:909666042 找管理免费获取!

部分资料图分享

更多笔记分享

你可能感兴趣的:(非科班转行Java,半年内斩获猫眼、海康等大厂offer的校招之路!)