毕业倒计时 — 科班仔Java后端的点滴与学习路线规划

毕业倒计时 — 科班仔Java后端的点滴与学习路线规划

一、前言

题记 —— 我也不知道计算机读出来是干啥的。

毕业倒计时的两个月,总想回顾一下大学四年都经历了啥,提键盘又不知道写什么。

我也不知道四年前为什么会选择计算机科学与技术(Computer Science and Technology)以下简称CS,也从来没有想过将来能干什么。很惭愧,直到大三才渐渐醒悟不能再浑浑噩噩的,2019年3月28号 正值2019年春招火热期,借此机会 一个渣渣把简历投向了各种大厂中厂小厂,看着招聘软件与官网下的技能要求,才知道再不努力毕业即失业的惨状会降临到我头上,于是在那个风雨交加的晚上,伴随这一句 "我打算走Java"从我微信发出,开启了我的程序人生。
—— 谨以此文 致即将毕业的自己。
在这里插入图片描述

二、选好方向—“站在风口上,猪都能上天”

虽是就读CS专业,但在大一二时却从未思考过将来能干点啥,就业方向是啥,大部分原因归于自己从来没去想过也没去打听过吧,到了大三时恨不得当年在大一的时候能看到一篇文章,讲清自己专业的学习规划路线or职业规划路线(如果时间能重来,我还是选择浪)。说一下笔者认知上的大部分的本科技术岗的技术方向吧。

  • 前端开发网页前端 技术更新较快,负责页面渲染 常涉及技术如 html,js,react,vue等;
  • 后端开发/服务端开发 后端的选择语言很多,而且各个公司的语言可能会有不同,假如特别想去的A公司主要开发语言是C++的话 很有可能把java技能树相关的简历直接筛掉 当然也不排除按Java知识点面试你入职后转语言。目前较多的还是 C CPP JAVA三大经典语言占领市场,以及近些年势头很猛的Go也慢慢被很多公司选择 ;
  • 算法工程师 算法可以分成很多种研究方向如推荐算法/广告算法/视觉算法等等 职业要求难度也是极高的一个岗位,对算法要求极高 ACM大佬的选择;
  • 客户端开发 ios与android ,与前端有点类似,负责的是移动端上的开发,也有种说法叫大前端。ios了解的不多 知道的相关技术又object C,安卓开发目前可分为两个选择 java 或者kotlin ;
  • 运维 运开/运维开发,服务器管理 服务可用性保障,一般都会要求 shell或者python以及Linux系统的命令;
  • 测试 测开/测试开发,简单来说就是找别人的茬 有没有bug等;

其实还有很多很多种岗位与职位性质(如 游戏开发/大数据/数据分析 等等等),但数量相比的话,这些还是占据了大多数,特别是后端。按照2019年秋招的状况来看,客户端的缺口最大,最火热的当属后端 狼多肉多,竞争最惨烈的 算法 狼多肉少但肉好吃。

标题中的站在风口上 不要误解笔者鼓吹要学Java,而是提醒读者 一定要最好大致路线规划 明确学习方向,一句伤透技术人的心就是——“你学的这个现在不咋用了” 方向也一样,有个建议就是可以去各大招聘APP看一些互联网公司的技术岗位需求以及技能需求,比如说 智联招聘、拉勾、boss直聘 或者直接去一些公司的招聘官网或公众号下。

在这里插入图片描述

切忌啥都学!!样样会没样精啥都能懂点但深问都不懂是很尴尬的局面,可以有一门主攻开发语言,精通一门和熟悉多门本身是没有冲突的,而且语言自身并没有绝对的界限,有的是应用上的区分 就时间精力有限 还是慎重选择决定吧。

三、学习资源途径

  1. b站是个好用的学习网站,各类视频,入门进阶,应有尽有。
  2. 各种博客网站 诸如 csdn 博客园 简书 等会有很多学习资源文章及大佬们的源码解析,基本上学习过程报了啥错误 上csdn一搜就有。
  3. 中国慕课网、网易腾讯云课堂 等,有收录很多科班课程视频 计算机网络/数据结构 等。
  4. 书 有钱可以买纸质书 看起来可以不收电脑手机影响 电子书能提供搜索的便利(主要不用钱)
  5. Stack Overflow 实在查不到的问题解决方案 可以试试 国外的论坛 (痛批一下当前的环境 百度出来的好多都是复制粘贴,一模一样 标点符号都不带改的)

—————华丽丽的分割线—————

上面废话了很多有的没的,以下进入正文,后端开发/java方向的学习规划方向 (个人总结,仅供参考)

四、学校教的基础知识到底有多重要

科班仔都经历过的七大课程 《数据结构》《计算机网络》《计算机组成原理》《操作系统》《数据库概论》《算法设计》《软件工程导论》

  • 关于《数据结构》与《算法设计》—— 程序=算法+数据结构

    程序=算法+数据结构 这句话是笔者大一时书上第一页看到的,以第一页的地位 就可以看出数据结构跟算法的重要性了hhh。即使很多框架、库函数 屏蔽掉了很多算法细节以及内部实现采用的数据结构,使用者只要导入依赖库调用入参获取出参就可以了,但免不了有很多不适用的情况。而且 数据结构与算法也是校招里极为关键的一个考察点

    • 八大数据结构:数组、栈、队列、链表、树、散列表、堆、图。 笔者的经验来看对于图的考察基本可以忽略不计,可能对于本科要求的掌握程度仅到前七种吧。数据结构一定要学扎实,这是一切程序的支架。
    • 七种常考算法:二分法、递归、回溯、排序、搜索、贪心、动态规划。里面如排序又包括了 稳定排序和非稳定排序,搜索又可再细分为 DFS深度优先和BFS广度优先等,除此之外还有许多算法 如kmp字符串匹配算法等,算法是贯穿整个计算机的,算法思想还是有通用性的,这些基本算法在平时也经常会用到,题海战术是一个很好提高算法能力的选择。如果常年混迹在ACM的 这些应该是基本里最基本的了,而像笔者这种浪子回头型的 算法虐我千万遍,我待算法如初恋。
    • 学习/备战/提高:理论实践相结合,看书理解思想(晦涩难懂的话可以选择看视频 有人讲解起来会清晰很多),前面提到题海战术,推荐个刷题网站 LeetCode 里面揽收了很多很多很多算法题,甚至笔者断言 求职过程99%遇到的算法题 都可以在leetcode找到一模一样的或者类似改造的。
  • 关于《计算机网络》—— 连接分散计算机设备以实现信息传递的系统

    这是百度上的一个定语,计算机网络这门课程里理论化的东西居多,但却不管身处哪一个岗位,只要跟互联网沾的上边 都逃不过它。计算机网络的知识体系很庞大,但需要掌握的重点也不算很多。

    • OSI七层模型与TCP/IP 四层模型,必知必会的点了
    • 按层级划分的话,重点落在 网络层 运输层 应用层,所以看书的话 对于全部看过的人来说的话,重点关注这几大章就基本够了(没听过课的话 还是仔细的整本过一遍吧 毕竟层层体系的联系在一起完全不看不好贯穿)
    • 几种经常会出现的P:IP TCP UDP HTTP FTP 等等等。IP地址子网划分、TCP握手挥手、HTTP应用连接响应、FTP文件传输等,都是校招笔试面试绕不开的话题,尤其是HTTP和TCP。
  • 关于《计算机组成原理》—— 书如其名,计算机组成原理,重要不也重要

    重要是因为许多上层只是都不开这门课程的知识,诸如 计算机基本组成 输入设备 输出设备 中央处理器CPU 内存 外存,这些可以说是在计算机系统里面的五脏六腑了,包括数据的机器语言表示 浮点、反码、补码 以及各种底层知识,对于理解高级语言 java c以及系统设计等等 都很有利。要说不重要,只是单独的拿计算机组成原理作为考察知识点的不多,那些恐怖的指令系统、寻址、中断都不是软件开发从业人员的要求点。

  • 关于《操作系统》—— 系统设计的导读书

    因为之前学校学的操作系统是以linux系统为例,解读里面的 进程管理 处理机调度 存储管理等,单纯的以为这是一本介绍linux系统的书,但是后来慢慢学习发现,很多上层应用开发都离不开这本书的基本知识点。

    • 进程管理:进程与线程的概念、通信方式、死锁、银行家算法。
    • 处理机调度算法:先来先服务、短作业优先、时间片轮转等。
    • 存储器与页面置换算法:包括寄存器、缓存、内存、磁盘等,先进先出算法FIFO 最近最久未使用算法LRU。

    这些知识都是在系统设计层面的,而说抽象点 有时我们实现的很多应用系统 都多多少少跟此有很多共性。(笔者在秋招笔试的时候就遇到了一道用链表及哈希实现一个LRU_Cache的功能)

  • 关于《数据库概论》—— 数据最终都要持久化

    算是比较基础的数据库知识,应该教学内容都是关系型数据库,基本SQL语句和几种关系范式等。而数据库操作是后端开发人员必备的技能,CURD增删改查都是在数据库层面上,这门课程后 不管是对于mysql和oracle或是其他关系数据库,都能较快的上手。

  • 关于《软件工程导论》—— 软件是怎么一步步开发出来的

    之前以为这门课程是教如何手写代码开发一个软件,上了课后才知道原来就是个写PPT和word的课,再到后来实习过后才明白,原来这门课程里曾经被笔者称为过家家的东西 都是在企业开发中极为重视的。需求分析、概要设计详细设计、编码、测试等等,软件开发的生命周期 算是实际工作中的理论体系课程。

课程学校都有指定教材,跟学校的和老师学就好了,就不做书籍推荐了。

五、大学期间做点啥能受益匪浅

  1. 大一:极大多数人对于计算机都是同一起跑线,而此时如果能抓住机会付出点努力多敲敲代码刷刷题,进军ACM行列,肯定是最好的选择路线之一,实力足够强大拿点含金量足的奖牌在之后的求职过程就是一张很好的通行证。
  2. 大二:比赛或项目。各种各样的比赛,校的也好 省的也行 国家的牛逼,只要是有意义的比赛都可以尽量多的参加,得奖与否不关键,比赛跟项目=项目经验,项目经验是啥?就是面试过程中最好吹的东西!
  3. 大三:大三就可以着手准备找工作了,首先关注自己的学分 确保自己能毕业,不够赶紧补,不要留到大四!大三下学期会有面向上一届的春招和本届的实习招聘,千万不要错过,能上岸就最好的,没有的话,攒攒经验为后续的秋招做铺垫也很值。
  4. 大四:秋招 秋招 秋招 ,重要的事情说三遍。

六、我是如何入门Java后端的

学校的教学语言是C++ 所以前两年都是学的C++ 也学的很一般,后来因为项目入了Java的“坑”,也因此在这条路上越走越远了。以下以笔者的学习路线 因为主要学习途径是书 也一边案例书籍吧

  • Java程序基础:首推《Java核心技术卷 I》,不是我看不起那些噱头“入门到精通的书” 而是里面真的会缺斤少两 少掉很多内容,核心技术卷 I 是很全面的书,不管深度广度都极佳。这本书看完 Java语言的基础就大致全部过了一遍了,也即Java SE 。不过里面的GUI Swing相关的内容 是可以跳过的一部分,实际上基本不会用这些。

在这里插入图片描述

  • Java并发编程:并发编程是一个比较重要又很难运用的知识体系,业务场景的复杂没有一个通用的解决方案,所以在校招的笔试面试 都是一个极为关键的部分。推荐《Java并发编程实战》 笔者阅读的第2版,一本很值得打磨多次阅读的书,口碑极佳。校招常问:锁策略、线程安全、死锁····。

在这里插入图片描述

  • JVM虚拟机:Java绕不开的话题,推荐《深入理解Java虚拟机》,虽然说里面的JVM调优、优化是很难搞很顶的东西,但是很多基础知识确实公司里实打实要求,而且JVM也可以更深入的理解Java这门语言的特性。校招常问:内存区域、溢出异常、类双亲委派、GC垃圾回收····。

在这里插入图片描述

  • JavaWeb技术:以上的三本书,都可以列为Java的基础知识,很浅也很深。后面就是应用层面了,Web这算是继SE之后一个分支了,也是比较主要的一个方向,Java在Web服务端/后端领域的疆土还是很广阔的。《深入分析Java Web技术内幕》不错 但是只看过里面的一部分 因为这本收录的东西很杂,上至Spring 下至JVM 都多多少少有谈到。笔者的认为是 对于Web领域的基础知识看了就行,早期的web技术里的 如jsp已经基本被弃置不用了 所以对于jsp可以只做了解。重点关注 Cookie、Session、Servlet、HTTP、Tomcat

  • JavaEE框架:常见SSH、SSM框架,目前SSH已经慢慢的退出舞台了,SSM即 Spring+SpringMVC+Mybatis ,前面提到了一个叫Servlet的东西,现在已经不再是Servlet来接受请求doGet或doPost,取而代之的是Controller,但是Servlet这个东西还是尤为关键,Spring MVC最核心的一个东西 DispatcherServlet,推荐《Java EE互联网轻量级框架整合开发》,里面包含了SSM+Redis的基本使用以及框架应用里的许多前导知识 反射、动态代理等。

在这里插入图片描述

  • Spring三剑客:发展至今,说Java几乎离不开Spring我觉得不过分。Spring三剑客包括《Spring实战》,《SpringBoot实战》,《SpringCloud实战》。Spring为Java开发提供了很多便利,Spring实战详细的列出了Spring都能干些啥,很多知识在上一本SSM的那本书肯定见过 但是有一些是这里才有的 如Spring Security权限控制等。SpringBoot更像是一个快速构建服务的东西,前面构建SSM时 会有很多杂乱看着就让人头晕的xml配置文件,而到了SpringBoot 更推崇约定大于配置,以注解和一个中心配置文件 yaml/properties 来构建项目基本环境。Spring Cloud是解决分布式系统的一个微服务框架,但我不大建议一开始就读这本,后面会推另外一本。基本校招技术要求 也就到了SpringBoot 。

在这里插入图片描述

  • Sql/NoSql:虽然在学校里有数据库课程,但是那些知识是不足以拿来企业开发的,可以根据自己想法,选择数据库学习,我选择的是 MySQL和Redis。Mysql推荐《高性能Mysql第三版》的第1/5/6/7章 这本书厚的没人性 当然有精力可以全看,作为前导知识 B和B+树也得去了解一下。Redis选择《Redis实战》和《Redis设计与实现》,后面那本书就讲得是Redis的底层实现,C语言编写 学过C/C++的读起来会轻松不少。

在这里插入图片描述

在这里插入图片描述

  • 分布式系统与中间件等:这是我目前正在学习的东西,前面提到不推荐一开始就读《SpringCloud实战》,它更偏向于应用手册而不是理论手册,推荐《大型网站系统与Java中间件实践》 这是书虽说有点年代,但它阐述了分布式系统诞生的过程,解决方案的提出与思考。
    在这里插入图片描述

  • 其他书籍:Java技术的广度和深度绝不仅于此,但精力有限的情况下,前面的书籍已经足以支撑去找一份满意的工作了,Java网络编程的《Netty实战》,设计模式《Head First设计模式》,编程习惯《Effective Java》都是值得一看的书。

七、校招生要学到什么程度

这个是没有比较明确的界限的,从资本家的角度当然是越多越好啦(手动狗头),但大部分情况下,校招更看重基础知识以及在项目中运用的技术,并不会明确要求说要会什么技术什么工具。以我而言,即使在大四秋招时 我还是没接触过中间件和分布式系统的,这是签好工作后 有时间慢慢学过来的,所以Java基础知识过后,SSM+Spring Boot就差不多了。

八、备战实习春招和正式校招

实习春招是在大三的下学期,金三银四 三月份是最关键的,正式校招是 大四的上学期 金九银十 九月份最火热 牛客网统计九月份当日最高笔试人次高达5W。时间要先明确,船开过了就补不上票了。

  • 实习春招的关键:笔试、基础、项目经验。实习是上大厂的岸的一个很好的途径,很多都是实习转正的校招offer 这种又能有实习又免去了后面找正式工作的烦恼 简直不要太爽。而且 实习=实习经验+项目经验,一举两得。
  • 秋招的关键:笔试、基础、项目经验、实习经验。在大三到大四的那个暑假是一个很关键的转折点。

从校招进度来谈谈咋整吧,路线规划跟方向真的太重要了。
投简历——>笔试——>技术一轮面试——>技术二轮面试——>HR面试——>结果。

  1. 投简历:越早越好,事情是有两面性的 晚投可能复习的全面一点 早投有hc充足的优势。但总体来说还是越早越好,因为晚了HC就没了!不要等待截止时间 很可能已经招满人了。(说是金三金九 提前批可能提前一个月就开始走上笔试面试流程了,而有些公司提前批就会发出大量的offer),去哪投是关键,前面提到的很多招聘软件 恕我直言 招聘质量都很一般 智联招聘/拉钩/boss直聘 并不是校招生的首选,虽有 但不多,我选择化身牛吹,推荐牛客网,很多面向校招生的招聘渠道,内推信息、面经等。

  2. 笔试:如果平时有刷leetcode的话 笔试基本是无忧的,笔试题前面说过很多是跟leetcode原题 或者相近的解决方法,如果平时没有积累 时间又不是很充足,建议刷**《剑指offer》**系列题,里面是五六十道常见题目 难度适中,基本能搞懂的话 笔试也不会有大问题。不要只想着作弊,往往面试也会让手撕算法题,笔试除去算法题外 也会包含一些选择填空甚至解决方案设计、数据库表设计、sql语句编写等。还是题海战术,刷题 牛客网是一个良心网站

  3. 技术面试:主要就四个东西,项目 理论 解决方案 手撕算法

    • 聊项目:几乎会占据一半的时间,所以一定要提前去回顾一下项目的内容 技术难点 以及如何解决难点等技术问题。所以如果没有项目的话 可能会入不了面试官的法眼,直接failed或者加大理论考察的深度广度

    • 理论 :一般来讲都会挖的很深,挖到不会为止,这是个很磨人的阶段 大脑迅速检索知识 组织语言 清晰表达,恐怖一点还会挖到源码深入JVM等层面,做好复习,路线规划推荐一个fork大佬的整理Java复习路线 github链接:

      https://github.com/YoungerJam/JavaGuide ,Java外还有前面第四提到的基础知识。

    • 解决方案: 方案设计,场景题 这个就看个人的平时积累跟脑洞了 见仁见智,不要不敢说 对错是一回事 体现出自己的思考才是关键。

    • 手撕算法 :要么足够强 要么刷的题足够多。

    关于这方面的东西,我还是继续吹一下牛客网,里面大量的面经可以做参考。

  4. HR面试:基本就是聊聊家常聊聊薪水了。

  5. 结果:没有拿到正式的offer邮件或书面offer,口头offer一个标点符号都不能信。不管本次结果怎么样 如果有精力 过于不过都继续坚持的投下去,这像极了高三时的自己 处于自己的一个知识顶峰了。如果运气不好 迟迟没有offer 不要放弃留到春招,可怕的二八定律(20%的大佬拿了80%的offer)大佬们会慢慢把hc吐出来的 此时被捞上岸的几率很大。

九、结语

—— 别慌,月亮也正在大海的某处迷茫。

@Author Jam 2020.3.31

发布了7 篇原创文章 · 获赞 6 · 访问量 1818

猜你喜欢

转载自blog.csdn.net/TheJam/article/details/105226554