震惊!文科生如何三个月转行成为Java工程师?

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
简介: 点击上方“程序员江湖”,选择“置顶或者星标” 你关注的就是我关心的! 作者:以大橘为重链接:https://www.nowcoder.com/discuss/156087 楼主是19届应届生,去年在牛客学到了很多东西,在实习和秋招也收获了一些offer(Java后端开发工程师)。


楼主是19届应届生,去年在牛客学到了很多东西,在实习和秋招也收获了一些offer(Java后端开发工程师)。在20届春招即将开始之际,把整理了很多资料给大家分享一下,顺便打个广告233。

有点标题党,学习Java可能有两年时间,不过春秋招复习加起来大概就花了三个月(但是感觉比之前学的内容加起来都多...)。


复盘

首先要说的我自己肯定不是什么大神,也拿不到一堆ssp,只是想分享给大家,一个不是很聪明的人(我高中是文科生,数学什么的很差),如何能尽自己所能找到一份程序员的工作。


学习历程

  • 大一的时候因为自己学习的专业就业前景一般,并且没有做学术的志向,家境一般很想找份薪资高点的工作,然后知乎一股CS至上的风气让我下了转专业的决心。大一的时候也并不清楚自己适不适合、能不能做这一行,尤其是转专业很容易,一直以来心里都没什么底。大一的时候自学了JavaSE,当时看了一吨的各种培训机构的教学视频,然后读了几本《Java核心技术》、《Java编程思想》等语法书,然后自己照着培训结构的视频做了个XX管理系统,然后大一就结束了。

  • 大二一年过得很艰难,一年要上两年的课(补大一的课),但还是自己抽了一些时间去学JavaEE的技术(也是为了做课程设计),比如Spring、Hibernate、Spring MVC等框架,还有MySQL、Redis等存储技术,然后学了一点前端,勉强能自己写个网站的demo。这时候对Java的原理以及框架的原理都不懂,只能说会用。而且当时培养了一种错误的观念,就是框架学的越多,学的框架越牛逼,就好像自己也牛逼了,大把时间都跑去学各种框架了,写了一堆demo。

  • 大二下不知自己几斤几两地参加了菜鸟的春招,结果一面还不到10min就GG了。原因大概是一些专业课比如OS、网络等都没学过,记得当时问了一些比如Spring原理、Redis原理等问题,自然是啥都不会,还问了有没有正式的项目经历,写了一堆demo的我自然也是没有...

  • 大二下大概也是正常上课,因为有门课的课程设计跟数据分析有关,又跑去学Python、Numpy、Pandas啥的,半途而废了...

  • 春招失败,但还是想去找个实习。在大二暑假开始前,学长介绍有个公司招暑期实习,然后就屁颠屁颠去了。结果当时准大三的我,还有几个准大四的学长,面试好像就随便问了几个问题,就莫名其妙GG了...听说最后是要了准大四的学长...

  • 大二暑假意识到只学框架是不够的,最好是能有项目经验,但是项目经验也是要实习才能拿到的。此处可以祭出这张图。


640?wx_fmt=png

没有正式上线的项目经验,就只能靠基础知识补了。


  • 暑假补了补Java的并发、NIO相关的基础,写了一个聊天室项目(不知道为啥后来就100+star了...);然后是读了一些并发的书《Java并发编程实战》。

  • 然后是想起学JavaSE时候有个教程教如何手写(只用JavaSE API)一个WebServer,然后就模仿着自己写了一个,最初的版本也就1000行,后来春招又完善了一下。

  • 当然又补了一些框架/中间件,比如SpringBoot、Dubbo、RocketMQ的学习,又写了一堆demo。有一个demo(自己)觉得还不错的,就是自己在本机上搞了一堆虚拟机模拟分布式,分库分表,还有用MQ来解分布式事务的问题(其实也没啥技术含量,只不过比单机的demo强一点...)

  • 学框架/中间件的教程(一些什么架构师教程233...)中看到了Netty,了解到Netty是一个网络编程框架,做分布式网络通信的(也就是做中间件的,不是搞应用开发的),读了《Netty权威指南》,又写了一些demo。

  • 再后来...一言难尽,自制力不足去打王者荣耀了emmmm。

  • 大三上的话课程也是有点多的,还有课程设计,为了课程设计学了Vue.js和PHP(这部分对找工作来说实践证明是没用的...),然后想要读一读框架源码的,就花了大概一两周读了Spring源码,读了《Spring源码深度解析》,还写了一些源码解析文章(当然和网上流传的大同小异),然后又自己模仿着《架构探险-从零开始写JavaWeb框架》,自己又写了一个简化版的Spring IOC+AOP(不过后面面试的时候讲这个项目讲着讲着就讲到了Spring源码)。

  • 大三上快结束的时候意识到马上要决定以后的去向了,顿时慌得一批,自己分析了一下去向。成绩应该能保研,但是最后是放弃了,给自己找了一些理由:

  • 只能保研本校本专业,不能去更好的学校

  • 读研最好是能搞机器学习之类的,做Java开发搬砖啥的好像也不用读研

  • 懒吧,觉得要读研就要在两年后再经历一场春招秋招...还不如现在把这个事解决掉,要不又要提心吊胆担心失业

  • 另外自己觉得前两年也算是为找工作做了一点准备,也不至于说从零开始

决定了之后就开始迷茫,不知道要学哪些东西,学到什么程度。然后就花了好几天的时间去牛客网上找面经,大概看了有100篇+的面经,把问题分类都记了下来,算是心里有了点底。

  • 之后就进入寒假,回家准备复习春招了。


春招

  • 大概是从1月中旬开始复习,然后3月上旬开始投简历,中旬开始面试,一直面试到4月中旬。

复习的内容大概是以下这些,我自己是文科生,在高中时时候就有个习惯是记笔记,因为自己记性很差,看过的书过几天就忘光了,所以自己记了很多笔记,之后在春找面试期间/秋招复习可以只看笔记快速复习。


640?wx_fmt=png

  • 这些笔记我不太确定是否合适放到网上,因为在记笔记的时候是到处抄(当前自己也有总结),有抄书上的,有抄别人博客的,图省事都没记录下出处。所以在这想问一下大家这些资料是否合适上传到网上,被原作者发现有什么后果.....

  • 复习顺序大概是先去复习数据结构和算法,这部分因为自己不太聪明吧,学的很吃力。当时也买了牛客网的直通BAT面试算法精讲课。然后刷了《剑指Offer》,本来打算刷leetcode的,但是这里想讨点巧,自己确实不擅长,如果公司真的要求很高,干脆就放弃好了(对,说的就是你,头条)。

  • 然后是看操作系统、计算机网络、数据库理论之类的,这部分就看的当前上课时候整理的笔记

  • 之后是Java、分布式还有框架/中间件的复习。这部分是看了好多书,感觉这个寒假看的书比前两年加起来的都要多emmmm。

《Java并发编程实战》

《Java并发编程的艺术》

《深入理解Java虚拟机》

《Java编程思想》(这本不建议突击看,最好是平时看)

《分布式Java应用 基础与实践》

《大型网站技术架构 核心原理与架构分析》

《大型网站系统与Java中间件实践》

《Head First 设计模式》

《Spring 源码深度解析》

《架构探险 从零开始写JavaWeb框架》

《深入分析Java Web技术内幕》

《Redis实战》

《高性能MySQL》

《从Paxos到Zookeeper 分布式一致性原理与实践》

《深入剖析Tomcat》(这本看的比较粗略,看博客也行)

《深入分布式缓存 从原理到实践》

《剑指Offer》(神书!除了头条、腾讯或者外企或者其他国内比较重视算法的公司,这本书足够应付面试了,当然对算法比较感兴趣的建议刷leetcode,更稳一些,笔试也不容易被刷,另外左程云的《程序员代码面试宝典》也很好,有时间可以看)

《Netty实战》

此外还要看操作系统、计算机网络、数据结构和Linux相关的教材。

另外还有一些我还没来得及看,但感觉非常好的书:

《Redis设计与实现》

《MySQL技术内幕 InnoDB存储引擎》

《大规模分布式存储系统》

《亿级流量网站架构核心技术》

  • 因为学了Netty、Dubbo等技术,打算再深入一点,把Netty用在一个稍微正式一点的项目上,不要只停留在demo上。所以花了一些时间手写了一个RPC框架,最初版本也就1000+行。

  • 这个时候觉得写一些网站的(尤其是非正式上线的项目,自己写着玩的)之类的写不出什么花来,翻来覆去还是用别人的东西。但是面试,尤其是阿里巴巴,对原理要求挺高的,你在项目里用了啥,你最好是能说得出来它是怎么work的。如果自己去造个轮子之类的,你会对某个组件或框架变得很熟悉,比读一遍源码在理解上要深一些(而且没有SSM那么low...)。

  • 然后就开始春招了,总共投了18家公司,最后是收到了5家公司的offer(酷家乐、快手、菜鸟、携程、网易),最后是选择了菜鸟,主要是因为阿里巴巴对Javaer吸引力确实很大。说到菜鸟还是挺有意思的,一方面是去年就透过实习,另一方面内推名额不是找人要的,而是一位师兄在Github上爬虫爬到我的,然后就给我发了邮件说你的Github上的项目很让人印象深刻balabala,然后发了内推。后来实习入职以后问这位师兄,因为特别好奇是哪个项目被阿里大佬看上了,结果人家说是全发了...没有筛选(这可太尴尬了....)

  • 之后5月份中旬就跑去实习了,虽然学校规定是7月份期末考完才能出去,但是自己算了一下7月份实习到9月份转正答辩的话实习时间太短了,感觉做不了什么事情,所以提前就溜了。当然另一方面是课程也比较少,不过考试很多,要考好几次。实习了大概三个月就买了十几张南京——杭州的高铁票(感觉实习完全没赚到钱,全花在路费上了emmmm)

  • 4月中旬到5月中旬也是忽然颓废的一个月,明明后面还有秋招,但又去打游戏(那时候frostpunk刚出,玩了好几天),看小说。技术上就只是把WebServer这个项目又完善了一下,把原来的网络实现从BIO改成了BIO/NIO/AIO。


实习

然后就开始了实习,实习的时候大概做了几件事,比如给师兄研发的中间件开发一个Web控制台,做一个快递相关的业务系统,还有一个类似于ABTest的系统。

  • 第一件事其实业务很简单,只是熟悉了集团内部的一些中间件,但是后来觉得这样后面面试的时候实在没得聊,就把师兄自研的中间件的源码读了一遍,自己总结了一下。

  • 第二件事花的时间最多,但是代码快写完了突然收到通知说项目取消,业务没谈成...这件事对我来说打击挺大的,至此对业务开发就产生了很多负面情绪,这也是我后来离职重新秋招的主要原因。

  • 第三件事也是挺简单的,基本上没学到什么新东西。

  • 在实习后期觉得自己做的事情技术难度不大,学不到什么新的东西;而且觉得业务开发不好,很想去做中间件或者基础设施相关的研发。在一番纠结后(大概是7月下旬)决定重新秋招。但是自己情况很差劲,一方面实习任务还是挺重的,没有时间学新的技术;另一方面春招复习的内容也忘得七七八八了。

  • 之后打算先做点新的东西,总不能跟春招一个水平吧。然后就花了两个多周(主要是晚上和周末)把RPC项目重新写了一遍(模仿着Dubbo的分层结构),最后大概有4000行左右。

  • 另外抽时间把Dubbo、RocketMQ等中间件的源码也看了一遍。

  • 之后就决心要离职了,白天也开始复习春招时候的笔记,复习了大概一周,然后就离职了。


秋招

秋招时候一门心思想找偏技术的方向,先是联系了一些阿里的其他部门,包括集团的中间件、蚂蚁的中间件等,外面的面的比较少,只面了PDD和网易。比较遗憾的是集团的中间件没有面过,还是自己的水平不足。其他的拿到了offer,最后是选择了蚂蚁中间件。


建议

  • Java方向的话最好是写点有自己思考的项目,不仅限于CRUD的那种。比如我简历中写了4个项目,一个是Web项目,其他都是小轮子,大部分面试官明显都对小轮子感兴趣,对全是套路的JavaWeb项目感觉兴趣不大。

  • 简历中项目中的各个实现要尽量熟悉,如果做得时间久了,可以考虑画一个类图或者时序图来加深印象

  • 有真实的、在线上运行的、有一定用户量的项目会加分的

  • 笔试的话一定要给后面的编程题留足时间

  • 不够熟悉的技术干脆不要往简历上写,比如我会写Vue.js,但仅限于使用,而面试官一定是会问基础的,做Java的前端基础不够好的话就不要写熟悉前端了...

  • 多刷刷牛客的面经

面经

这里简单的总结了一下面试过程中经常被问到的,自己记性不太好,没有在每次面试完之后记一遍问到的问题(明明是懒...)


  • Java集合框架源码,几乎每个公司直接间接地都问过

  • Java并发相关的知识,源码问的较集合少一些

  • Linux常用命令,列举一些

  • 关系数据库的事务、索引、锁、范式

  • JVM, 基本都在《深入理解Java虚拟机》上

  • 基础数据结构(链表、二叉树、队列、栈)以及排序查找算法

  • TCP UDP等网络协议,OSI七层,三次握手四次挥手等

  • 设计模式

  • 项目,这部分看个人情况,你在项目上写过什么技术,面试的时候就更容易被问到,而且往往会侧重原理

  • 关注公众号「黄小斜」后回复「Java」、「Python」、「C++」、「大数据」、「机器学习」、「算法」、「AI」、「Android」、「前端」、「iOS」、「考研」、「BAT」、「校招」、「笔试」、「面试」、「面经」、「计算机基础」、「LeetCode」 等关键字可以获取对应的免费学习资料。


相关实践学习
基于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
相关文章
|
3月前
|
监控 网络协议 Java
《Java工程师成神之路》阿里技术专家之作,囊括Java所有知识点!
很多Java程序员一直希望找到一份完整的学习路径,但是市面上很多书都是专注某一个领域的,没有一份完整的大图,以至于很多程序员很迷茫,不知道自己到底应该从哪里开始学,或者不知道自己学习些什么。
|
4月前
|
消息中间件 Java 应用服务中间件
|
6月前
|
存储 缓存 负载均衡
想成为一名顶尖Java开发工程师?这些优化手段一定要掌握!(六)
想成为一名顶尖Java开发工程师?这些优化手段一定要掌握!
|
2月前
|
Java
电子书阅读分享《Java工程师成神之路》
电子书阅读分享《Java工程师成神之路》
50 1
|
4月前
|
设计模式 架构师 Java
2024到来!一到五年Java工程师想跳槽,大环境不好,怎么破?
会不会因为裁员潮,市场上工作机会比往年跳槽季更少,同时求职者因为失业或裁员潮带来的恐慌心理,很多人在找工作时更怕错过机会而不做过多思考和选择就入职。这样的形势下跳槽或者求职时,该如何判断和做出选择?
|
1月前
|
消息中间件 Dubbo Java
互联网 Java 工程师1000道面试题(485页)
互联网 Java 工程师1000道面试题(485页)
28 0
|
1月前
|
人工智能 监控 Java
招个Java工程师,却发现了一个宝藏平台
招个Java工程师,却发现了一个宝藏平台
21 0
招个Java工程师,却发现了一个宝藏平台
|
2月前
|
Java
电子书阅读分享《Java工程师成神之路》
电子书阅读分享《Java工程师成神之路》
69 2
|
4月前
|
Java 数据库连接 数据库
Java大数据开发工程师__Spring学习笔记(待更新)
Java大数据开发工程师__Spring学习笔记(待更新)
28 1
|
4月前
|
算法 Java 大数据
大数据Java工程师必备____2021年数据结构思维导图!
大数据Java工程师必备____2021年数据结构思维导图!
103 0