• 一位非科班硕士生专项做JAVA的心路历程
  • 发布于 1个月前
  • 74 热度
    0 评论
  • 放羊娃
  • 0 粉丝 40 篇博客
  •   

一、自我介绍

先来个自我介绍吧,本硕都是材料专业,还依稀记得当初考研就是为了有个更好的平台,以后想要读博的,可当自己进入研究生阶段后,发现事实却并非像自己想象的那种剧情发展的。对方向的不感兴趣(组里第一个这个方向,老板啥也不懂),尝试了一学期,无果,遂放弃!


期间接触了编程,决定转向互联网了。毕竟向我们这种偏基础学科的硕士出来其实挺尴尬的,高不成低不就的,认识的很多都转行了(大多数去了房地产,采购、销售、供应链之类的,很少说有转互联网做开发的)。


我个人编程语言水平可能就只是停留在写 HelloWord 的水平上,虽说学了小半年的 Python,但说实话没学到什么,若不是今年 2 月底打算学 Java 的话,可能现在还在为工作焦虑!


因为我开始的比较晚了,8月中旬才开始投简历。整个到签约为止,期间面试了 7 家(阿里电话一面、南京的一家公司,也是电面(开始预约面试的时候没听清楚是哪家公司,后面没好意思问)、ThoughtWorks、赛迪信息、华为、浪潮以及中兴),其中拿到了赛迪信息、中兴以及浪潮等offer。


女朋友在重庆这边,而且我也想呆在重庆,所以就签了中兴,毕竟中兴给的工资在重庆真的算是很不错的啦,属于中上水平,但如果相对于其他的一线城市还是一般。下面就自己的整个学习过程介绍一下吧,可能是比较典型的,毕竟我真的是零基础转的。


二、学习历程

从聊天记录上看,加峰哥的时间是2018年11月25日,当时就已经把我拉进了大数据学习群,不过去年那时候我一直学的是 Python。直到今年的 2 月20 号,稳不住了,看到群里很多都是根据峰哥的路径拿到了大厂 offer,特别是看到佳佳的经历,几个月转行,自学 Java拿到了百度、Keep 等大厂 offer,心想我是不是也可以呢?


从 2 月底便拉开了学习 Java 的序幕。从 Java SE -> 项目 -> 多线程 -> JVM 的打法路线。Java SE 就是看的慕课网的三个基础视频,看完也就大概知道了基本的语法,然后就直接找峰哥刚项目了,也不知道哪来的勇气。


其实刷基础视频的时候有很多都一知半解的,自己那个时候啥都不知道,经常纠结到需要彻底弄懂不,峰哥也跟我说别让这个影响自己的学习流程,不会的先跳过,很多其实后面就会弄懂的,事实确实也是这样的。


还有就是学习 Java SE 的时候最好能与峰哥的面经结合起来一起看,学到什么地方,看到面经上有的及时整理到博客里,一定及时整理!这个时候时间差不多是 3 月底 4 月初了。


后面自己越学其实心里越觉得是无底洞,什么多线程啊,JVM 是啥并不知道,而且老板还一直催我进度,每次开组会都被痛批,常担心自己能不能毕业,能不能顺利找到工作,真是那段时间感觉自己都快抑郁了。一遇到烦心事就会找峰哥诉苦,真是峰哥都没觉得我烦,耐心解答,真的是非常感谢峰哥!


烦心事是有,但是也不能让其一直影响自己的进度,可以先休息一小段时间,理清主次,循序渐进。

后面峰哥给了我一个 Java 基础视频,让我看看里面的多线程和 JVM。不得不说看视频是真的慢,但是的确讲的通俗易懂。看完这个视频大概花了接近两个月吧,好吧那会自己的效率确实也不高,主要还是那段时间被老板逼的很,白天做实验,晚上有时还要做,苦逼的很。


看完这个视频差不多就到 6 月份了,看完立马又开始写博客,根据面试题来记录常见的知识点,虽然很功利性,但是确实是一条捷径。我自己不仅仅看了峰哥的面经,网上自己也找了其他的面经综合在一起,这样也更全面!峰哥的面经是主线,其他的搭配在一起效果更佳。


对了我自己在多线程和 JVM 这两块看了两本书(当然没看完,只是重点看了几章),多线程就是《Java 并发编程的艺术》,JVM 是《深入理解 Java 虚拟机》。第一次看可能会觉得有难度,特别是 JVM 这块,基本上又都是纯理论方面的,第一次没看懂再看一次,着重看重点的几章,其他的可以适当了解,要分清主次,你是为了找工作而学习的(虽然有点急功近利),而不是要深入的完全研究透彻,以后工作了多的是机会的!


第一个项目刚完后,心里没底,一直想自己动手搭搭 SSM 的框架之类的,毕竟自己只是懂得大致的技术栈的原理,对于里面的细节实现实在是不清楚。事实证明面试的时候,面试官问的实现细节很少很少,具体的面试过程会在后面提及。

6 月份开始后,自己没有急着刚项目,而是对于前面学的知识,Java SE、多线程以及 JVM 等进行一个复习,其实也就是看面经(看面经最好还是一开始看到哪就把那一块的面经给吸收了,后面也可以多复习复习),然后整理到自己的博客里,便于自己后期的复习。


有次看集合源码的时候,有个地方不懂,问了下峰哥。确实也是如峰哥所说的那样,不要为了看源码而看源码,记住它的原理流程就行。比如 HashMap,一般问的多的也就是它的执行逻辑,比如 put() 方法具体的执行顺序,先干什么后干什么等等,也会随着问你扩容之类的,有些会问到 HashMap 的多线程,也就是 ConcurrentHashMap,JDK1.7 和 1.8 是有区别的。


后面也基本上就进入了暑假了,今年暑假我们老板破天荒的给我们放了4周的假期,按以往都只有两周,真是这4周对我来说太宝贵了!有了全心全意为秋招备战的时间,不用担心动不动就被老板找,做实验之类的杂事了。


暑假的几周大部分时间都是在刷算法,没错,暑假才开始刷算法,6月底也就大概看看剑指offer,没有动手敲过,只是理解其思想,进入暑假才开始动手敲。我是先从排序查找算法开始动手敲的,然后再动手做剑指 offer 的题目,时间太有限了,那本书没有敲完,好吧,只敲了一半多点。


算法这一块,千万不要学我, 真的,有时间得尽早的刷,我是没办法,开始的太晚了。可以先刷剑指offer这本书,还有时间的话可以刷刷 LeetCode 上的题目!这样基本上笔试和面试手撕算法基本上是问题不大的。


很多公司其实早就开始了提前批,但是我总怀疑自己的能力迟迟没有投递简历。直到 8 月中旬的时候将项目二学的差不多的时候,才慢慢开始投递。总共投递的简历不少于110份吧,我记录的就有90多份,还有很多没有及时记录下来的,还有很多在大街、51job等网站直接投的。我当时心里想的就是我要多积攒面试经验,我投100份,如果有十分之一能进面试我就满足了,实在不行我就投200,300份。总会有拿到 offer 的。



三、面试过程

一、阿里一面

阿里一面是电话面,不得不说阿里的效率真的高,记得8月中旬不到8月20号内推的,不到一周就约了面试,佩服佩服。当时面试的时候面试官开的扩音,根本听不清说的什么,有时候要问几遍,尴尬,以后如果有听不清的一定得及时提醒面试官吧,不然本来面试自己就很紧张,加上听不清导致最终效果会差很多的。

1.Zookeeper 的一些原理,介绍一下 Zookeeper,主要还是涉及 ZAB 协议
2. Zookeeper 的选举机制
3.RabbitMQ 在项目里的使用场景
4.结合 Dubbo 和 Zookeeper 一起
5.JVM 的类加载机制
6.Memcached 的缓存机制

还有一些当时没有及时记录下来,忘记了。基本上就是围绕你的简历来提问的!所以简历上有什么内容一定一定一定得非常熟悉!


二、南京的某企业

打电话的时候在自习室,急着插耳塞走出去没听清前面自己的介绍,后面没好意思问,就不知道具体是哪家公司。

1.简历上的两个项目的技术栈是有点出入的,问自己在使用上有过什么比较之类的;
2.模块怎么拆分的?比如你项目里面用到了 Dubbo,你做的模块哪些服务是依赖了别人的 Dubbo 服务的?
3.消息队列主要是传递什么消息的?
4.try…catch…会对应多个 catch 块的使用场景
5.常见的注解使用
6.常见的集合类型,怎么实现的?问源码,主要讲了 HashMap
7.Java的什么版本,JDK1.7 与 1.8 的区别?
8.String 的常用方法
9.你有什么想问的?


三、ThoughtWorks

笔试:跟牛客网里面的一模一样,无人机的路线规划,这个没有标准答案,主要还是让面试官知道你的优化的过程。笔试完后会让你拿你的结果找面试官去谈你的答案,笔试也会让你写出代码来,我没写出来,很大可能也是因为这个所以才挂的。跟面试官交谈后等了一会就是无领导小组讨论,会有5个左右的面试官在周围走来走去观察你的情况,当时讨论的是一个项目占有率越来越低,想开发另一个项目,从原项目里选取相关人员调到新项目里。


四、赛迪信息

真正意义上的线下专业面试,之前 ThoughtWorks 感觉也不算是专业面试。这是最想去的几家公司之一,是中冶赛迪(钢铁设计院)旗下的专门做信息化智能化方面的公司,业务之一是做智能制造方向,跟我的专业有很大的契合度,后面签中兴的原因是该公司流程太慢了,都面了一两周了还没有消息,私信 hr 也没人回,而且中兴也发了签约通知(现在我们学校是网签,发起签约通知后只有 48h 的考虑时间),最终没办法只能签中兴。

一面技术:
面向对象的三大特性是什么?
重写和重载的区别?
同一个文件里面可不可以有两个 public 类,这个当然是不可以的啦~
基础数据类型以及相应的占多少字节?
stringbuilder 和 stringbuffer的区别?
类的一个加载机制(加载->验证->准备->解析->初始化,我真的就只是说了这个,也没有简单的对其介绍,当时心里还想的要不要再简单介绍一下的,看面试官没说,我就没管了)
双亲委托模型
HashMap 与 TreeMap 的差别?
讲述一下快排
ZAB 协议
消息同步是怎么同步的?(忘了😂)
有一个 SQL 查询很慢,怎么去排查?(不知道,尴尬)
联合索引了解过没?(不懂)
数据库的隔离级别?
Redis 的数据类型支持
数据的备份模式?(不了解)
Solr 的倒排索引
Memecached 和 Redis 的区别?
Redis 持久化方式?
一致性 Hash
多线程,线程池的创建方式。
如果都满了怎么整?(不知道)
sleep 和 wait 的区别?
架构这方面有没有设计,数据库设计?(大概说了一下数据库的设计)

赛迪一面结束刚下楼梯,就打电话让我回去进行二面,二面 hr 也说了她这里不怎么刷人,问了下我期望的薪资,保守说了 8k,hr 笑了笑说期望的有点偏低,问是哪的人?为什么想呆在重庆……后面通过了会有一个测评链接,一般都不会刷人。但是过了一段时间hr先公布了一批人(做测评的),我没在名单里面,心里慌了,总在想是不是自己笔试的时候没做好(笔试成绩是71分,过了70才能有后面的面试,所以我是刚刚过了笔试),隔了几天又出来了名单,这才安下心来。


五、华为一面
只记得这么些,面试过程中被劝退,他丫的。

先自我介绍一下
介绍一下你的项目
你说到项目主要负责微信商城订单模块,那 session 是怎么管理的。
用到了 Dubbo 和 Zookeeper,说一下 Zookeeper 的选举机制
SpringMVC 讲一下请求的过程
Memcached 是怎么实现的?
多线程相关
讲一下GC
手撕算法:给一个字符串,再输入一个字母,输出最近的离这个字母的数组。比如:[loveleetecode]  e 输出:[3,2,1,0,1,0,0,1,0,1,2,1]。


六、浪潮
6个应聘者,3个hr,群面?开始分别进行自我介绍,然后从我开始进行技术面试:

JAVA中,类的组成(当时听不懂啥问题,尴尬)
8种基本数据类型(应该是答出来了的,但是当时面试官只说我答出7种)
Dubbo 和 Zookeeper 的区别(当时很懵,后面面试官说了,Dubbo的底层 xxxx 也可以作为注册中心)
Redis 和 MQ的区别(答的不好,后面面试官纠正了)
你都用了哪些数据库 (自然是 MySQL了,当时还以为会继续追问的,并没有)
介绍一下 Zookeeper。

只记得这么多了,我被问的时间比较长,然后最后面试官的结论是不是很熟悉底层的知识。


七、中兴
一面:

先做个自我介绍
数据库三大范式?
SQL 查询语句,年龄段之间的人数统计
JAVA多态实现需要的条件?(我只回答道继承,还有方法的重写,还需要有父类的引用指向子类对象(丫的,不知道怎么说后面两点,其实是知道的))
JAVA 线程启动,有哪些方式?
另一个hr,问有发表论文吗?是学硕还是专硕?
你还有什么问题吗?
流程走的贼快,面试过程也超快,一面不到10分钟,二面也就10来分钟,一面当一个 hr 说我这边没什么问题了看另一个 hr 的时候,我就在想不会这么快吧,果真另一个 hr 就问了有没有发表论文是专硕学硕?就没了,就没了,整个 9 分钟多一点,出来还以为必挂,哪知道最后竟然走完了全程……

二面 hr 面:基本上没有问任何的技术问题,拿到简历就问了一下用 Redis 是干嘛的,就没了,其他就是关于加班看法,期望工资之类的。


四、总结

1.明确目的,规划好路线。秋招自己想往哪个方向发展,前端?后端?还是其他方向。确定好大的方向后规划好自己的学习路线。对于初学者来说,最好是有前辈带着复习,因为很多时候自己一个人闷着学习,经常会被自己带偏的。


2.给自己设定一个 deadline。每一个模块学习的时间设定一个大概的 deadline,这样更容易把控好学习的节奏。比如学习 Java SE,看完基础视频大概要多久,每天要学习的内容是什么,还需要自己及时总结,能写到博客里是最好的,便于后期的回顾。


3.简历里面所写的内容一定要非常熟悉。你写的有哪些技术栈,它的基本原理以及相应的应用场景等等都要非常熟悉。

4.最后一点,也是最重要的,转行要趁早,早就是优势!

用户评论