一位材料专业研究生的Java转型复盘

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 一位材料专业研究生的Java转型复盘

一、自我介绍


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


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

我个人编程语言水平可能就只是停留在写 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 是啥并不知道,而且老板还一直催我进度,每次开组会都被痛批,常担心自己能不能毕业,能不能顺利找到工作,真是那段时间感觉自己都快抑郁了。一遇到烦心事就会找峰哥诉苦,真是峰哥都没觉得我烦,耐心解答,真的是非常感谢峰哥!



image.png


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


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


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


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


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


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


image.png


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


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


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


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


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



image.png


三、面试过程


一、阿里一面
阿里一面是电话面,不得不说阿里的效率真的高,记得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.常见的集合类型,怎么实现的?问源码,主要讲了 HashMap7.Java的什么版本,JDK1.7 与 1.8 的区别?8.String 的常用方法9.你有什么想问的?



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



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


一面技术:

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


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



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


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



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


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

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



七、中兴一面:

  1. 先做个自我介绍
  2. 数据库三大范式?
  3. SQL 查询语句,年龄段之间的人数统计
  4. JAVA多态实现需要的条件?(我只回答道继承,还有方法的重写,还需要有父类的引用指向子类对象(丫的,不知道怎么说后面两点,其实是知道的))
  5. JAVA 线程启动,有哪些方式?
  6. 另一个hr,问有发表论文吗?是学硕还是专硕?
  7. 你还有什么问题吗?

流程走的贼快,面试过程也超快,一面不到10分钟,二面也就10来分钟,一面当一个 hr 说我这边没什么问题了看另一个 hr 的时候,我就在想不会这么快吧,果真另一个 hr 就问了有没有发表论文是专硕学硕?就没了,就没了,整个 9 分钟多一点,出来还以为必挂,哪知道最后竟然走完了全程……


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



四、总结


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


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


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


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


--end--

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
6月前
|
NoSQL Java 关系型数据库
BAT最新java800+合集面试复盘,能掌握80%就去进BATJTMD
金三银四俗称跳槽黄金期,很多同学都想趁着这段时间拿高薪,去更牛逼的公司工作,认识更多大牛,提升自己的职场竞争力。 那怎样才能通T面试官的考核?怎样成为一名Offer收割机? 之前讲过收割Offer有一个最直接的公示:Offer=硬实过BAT面试官的考核?怎样成为一名Offer收割机? 之前讲过收割Offer有一个最直接的公示:Offer=硬实力*软实力*好的心态,三者缺一不可。
java之上转型与下转型对象
java之上转型与下转型对象
|
Java
JAVA对象的转型
JAVA对象的转型
64 0
|
6月前
|
Java
Java获取字符串最后一位
【5月更文挑战第9天】Java获取字符串最后一位
556 5
|
3月前
|
存储 缓存 网络协议
复盘女朋友面试4个月的Java基础题
这篇文章是关于Java基础面试题的复盘,涵盖了HashMap原理、对象序列化作用等高频面试问题,并强调了Java基础知识的重要性。
复盘女朋友面试4个月的Java基础题
|
4月前
|
安全 Java 程序员
【Java探索之旅】多态:向上下转型、多态优缺点、构造函数陷阱
【Java探索之旅】多态:向上下转型、多态优缺点、构造函数陷阱
46 0
|
6月前
|
JavaScript 小程序 Java
Java毕设之高校专业信息管理系统的设计与实现
Java毕设之高校专业信息管理系统的设计与实现
49 2
|
6月前
|
人工智能 Kubernetes Java
Java开发工程师如何紧跟技术前沿对于保持专业竞争力、提升工作效率以及适应行业发展?
【4月更文挑战第4天】Java开发工程师如何紧跟技术前沿对于保持专业竞争力、提升工作效率以及适应行业发展?
85 4
|
6月前
|
数据采集 监控 安全
java数字工厂MES系统全套源码Java+idea+springboot专业为企业提供智能制造MES解决方案
"MES" 指的是制造执行系统(Manufacturing Execution System)。MES在制造业中扮演着至关重要的角色,它是位于企业资源计划(ERP)系统和车间控制系统之间的系统,用于实时收集、管理、分析和报告与制造过程相关的数据。
64 0
|
6月前
|
Java
普通玩家也能掌握的Java游戏加点系统,专业到让你无敌!
普通玩家也能掌握的Java游戏加点系统,专业到让你无敌!
40 1
下一篇
无影云桌面