大学生后端学习常见问题解答(学习方法+工作实操项目)
Posted 石臻臻的杂货铺
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了大学生后端学习常见问题解答(学习方法+工作实操项目)相关的知识,希望对你有一定的参考价值。
作者简介:石石臻臻 Kafka Contributor 、 LogiKM PMC、nacos Contributor、华为云 MVP 、公众号:石臻臻的杂货铺 号主。 滴滴Kafka技术专家 、开源项目践行者。
哈喽、大家好 我是石臻臻
之前有一些同学问了我一些后端相关的问题,那么我在这篇文章里面偶一个解答。
1 后端的学习路线应该如何进行,数据结构与算法应该如何深入学习?
后端学习路线的话推荐2021CSDN年度博客之星Top2的 哪吒 整理的学习路线了。
Java学习路线总结(思维导图篇)
Java学习路线总结,搬砖工逆袭Java架构师
这个整理的是相当的全了,当然你也可以去我的公众号:石臻臻的杂货铺 回复:福利,领取相关全套资料
数据结构 就按照学校的教科书学习就足够了
算法是需要刷题练习的, 有机会可以参加 ACM、蓝桥杯啊之类的赛事,一般学校可能都会有相关的训练营,专门的算法老师指导
平时也可以自己刷一刷LeetCode、牛客等等一些可以刷题的网站。
这里我推荐一位CSDN 2021年度博客之星Top1 英雄哪里出来
老哥非常的肝,每天5点起床刷题直播写博客, 你可以跟着英雄老哥一起刷题,还提供专业指导!
2 目前是一名PythonWeb后端开发工程师,我自己想往架构师发展。但感觉自己的学习方法可能有问题,效率不太高。想知道大佬初中后期的学习路线和学习方法,我想从中借鉴一下
那我就简单的讲一下我自己整个目前为止的职业发展、学习路线和学习方法, 希望能够作为一个样本参考一下。
因为我自己本身是对技术有追求的人,可能有的同学从事这一行只是为了一份收入尚可的工作,内心并不喜欢搞技术, 毕竟这一行确实挺累的。但是我其实是比较喜欢研究技术的那类人, 我大学学的专业也是软件工程, 工作接触的越多,发现自己懂的越少, 内心就越渴望学到更多。
加上那个时候(现在也一样)经常有很多人贩卖焦虑:35岁下岗危机
就是这样一种环境下, 那时候的我在意的只有一件事情:那就是学习!
我甚至用便利贴在出租房里面贴满了便签,上面写着:警惕35岁危机!还不去学习!
虽然我这个行为看起来有点滑稽,但这确实是我当时真真实实的行为,也就是说我刚从业这一行就在为了35岁危机而担忧,而做准备。 但我相信不止我一个这么想, 稍微有一点危机意识的同学,应该也在为了自己未来能够更有竞争力而努力奋斗(卷)。
那么,我又是怎么学习的呢,学习路线又是怎么样的呢?
我把它分成以下几个部分
前期: 利用一切时间和精力来学习提升自己 以看书为主
基本上那时候工作日的早上, 还有周末的时间,我都是用来看书的, 为啥没有晚上? 因为晚上一般在改Bug.
每天早上第一个到公司, 拿出自己买的技术书啃起来, 比如 Java核心啊、Jvm虚拟机、Spring技术内幕、mysql精通、等等之类的。每天基本上早上能看一个小时的书。
看书的话我觉得是这个阶段快速提升自己的一种方式了, 吸收总结作者的的精华。比我们自己去看源码,或者到处去网上找资料学习高效的多(网上找的资料参差不齐,甚至有很多错误)
中期:积累实战项目经验,多思考,学会总结,多写博客记录
在工作中参与的这些项目都是我们宝贵经历,在这个过程中我们可能会写很多的bug,遇到很多的异常情况,有的时候你能够解决,有的时候你束手无策, 可能有的时候一整天都找不到原因解决不了, 这是一个痛苦的过程, 最后这个bug可能你改了,也可能同事帮你解决了, 但是你绝对不能就这么过去了,学会总结,学会记录,会让你不会在一个坑上踩多次。
关于多思考, 这个并不是一句空话,其实我们在写代码的过程中,并不是简简单单的去实现当前的需求,而是要多思考当前的设计是否能够应对未来的发展
比如你实现某个功能是否能够用到某个设计模式、你写的接口是否具备扩展能力,万一以后有需求变更你是否能够快速响应变更、代码是否合理健壮和优雅、还有是否能够应付未来的业务量的增大所带来的压力。
你如果有这样子想就说明什么? 说明你已经有了 架构思维!
那么你思考的这些怎么去落实, 这个就是你的架构能力, 怎么去把你的想法落地,是需要你拥有相应的知识储备的、整个后端体系那一套的技术栈 那么你得会吧。
中后期:读大量开源项目源码,并参与贡献, 尝试自己造轮子
在上面我们已经具备了一定的理论知识和实战经验之后, 我们需要多去读一读开源项目的代码。
因为毕竟你在公司参与的项目比较受限. 所以我们需要去开源社区了解优先的项目甚至参与它!
我自己是读过很多的源码并写过相关的文章的, 比如
Spring、SpringBoot、Nacos、Seata、Kafka 等等
我读源码的时候 ,把这个源码吃透了 我会写相关的源码分析的技术文章,你可以看看我之前写过的博文,都是我读这些源码并分享的痕迹。
读源码跟写出来是两回事, 你写一篇文章需要构思从哪个方向写, 如何写才能够把你想要表达的重点很好的表现出来。 那么就需要你非常的了解他, 哪怕是若干年后你忘记了, 回头来看看自己写过的文章也能迅速的理解。
所以,多读优秀的源码,并写出来吧!
当然了,你读了这么多源码,你肯定对你读过的项目很熟悉了,那么干嘛不参与贡献一下呢?
领取一个issue,尝试的去解决它, 会让自己得到极大的满足感。
我之前一直是写后端的, 但是我并不想只做一个CURD Boy,所以后来我就自己在业务的时候写写组件给其他同事用用,大家用着还不错, 后来我就跟领导说,我要不开发一个XXX组件吧,它能够提升我们的工作效率. 理所当然的 领导就让我着手去干, 所以我就慢慢的一边带着后端研发团队,另一边又在开发组件, 后来就慢慢的直接组建了一个中间件的小团队来服务技术团队。
如果你想造轮子, 那么你就必须对其他的轮子非常了解!
后期:提升技术影响力 多做技术分享
提升自己在团队中的技术影响力, 也提升自己在外部中的技术影响力
内部影响力可以多做一些技术分享,多帮其他同学解决一些问题
外部技术影响力可以通过写写技术文章比如CSDN、或者公众号啊等等。
3 后端java需要重点学习的领域是什么?有可推荐的学习工具或项目学习资源吗?(对于今后在工作中实际应用比较多的)
后端技术栈真的太多了, 但是如果你是刚进入这个领域的话, Java、Spring、SpringBoot、Mybatis、Mysql、Redis、Dubbo、Mq 这些你需要会用, 基本上会用这些 工作上来说没啥问题。
但是如果你想进阶的话, 数据结构、操作系统、设计模式、多线程高并发、Jvm虚拟机、等等等等是你绕不开的
如果你现在还在学校里面,我非常强烈的建议你把 数据结构、操作系统、Java语言 给学好, 因为后面你所用到的大部分框架都是基于这些来构建的。
如果你这些基础打好了,你后面看其他的框架代码就非常轻松了, 否则的话别人的源码你看起来会觉得是一种折磨。
推荐学习资源的话:关注公众号【石臻臻的杂货铺】回复:福利 关键字
4 JAVA后端方向良好的学习方法都有什么?作为计算机专业的学生应该具备哪些素质?
整个后端体系的技术栈是非常的广也非常的深的,我觉得首先一点就是要有对技术的敬畏之心。
还需要对技术要有一定的热爱和钻研精神,搞技术有的时候确实是挺苦的, 选择这条路那么就是选择了与孤单做朋友 (如果你只是满足于curd,那么当我没说)
那么我们如何能够在这条孤独的路上走的更稳、更远呢?
-
确定方向
当然,我们这里的问题已经确定了是Java方向, 那么我们后面要学习的方向就已经有了一个大方向了, 为什么我要重点把确定方向单独说一下,因为我碰到了太多同学就像无头苍蝇一样,东碰西撞的, 那里学一点,这里学一点, 今天学的是后端的技术栈、明天看到前端好像很酷炫又去学前端的技术栈、后台大数据很火又去学大数据了,好像什么都学了又好像什么都没有学。并且每个方向的技术栈都非常的广, 这样就会导致你自己会很焦虑,怎么要学这么多东西呢?!根本就么有那么多精力。
所以,希望你在开始的时候就确定好你要学的方向, 至少能让你快速的找到自己的目标, 精力更充沛更集中。哪怕你后面再转方向,你就把精力都放到要转的方向. 也比你无目标的乱撞要好! -
分清楚主次
确定方向之后,静下心来学习, 但是也要分清楚主次问题, Java后端技术栈多的你无法想象, 要你会的也很多, 但是如何合理的分配自己有限的时间和精力才会重中之重比如说你是个刚入行的从业者
没有人会要求你对Mysql精通无比, 但是你需要知道如何写Sql语句、如何配合Mybatis实现你对数据库的CURD.
也没有人会要求你手写RPC,但是你得知道如何调用RPC、如何配置,如何写接口
没有人要求你精通Linux,但是你得会对操作系统有个基本的认知、还基本的操作。
所以, 这个时候的主是什么?主就是你需要从整个技术栈有一个简单的认知, 不需要你精,但需要你会。
有求知欲很好,但是得懂得合理分配。再比如说你已经从业两三年了
那么需要对你已经会的慢慢变成你懂的, 而不是一知半解, 会就行了。会让你成为curd boy。
懂,才能让你在碰到问题的时候能够有一个排查方向,快速响应问题。 -
保持激情渴望
保持对技术的激情和渴望, 我相信你能够走的更远。
-
持续学习
技术一直在发展,轮子也在不停的重复的造, 没过一段时间就会有新的技术出来声称着要革了谁的命。
当然有些是炒作,有些是真的具有颠覆性的创新, 我们需要对这些技术保持关注,有必要的话可能分配一点精力去学习。
因为两耳不闻窗外事很可能会被时代的浪潮无情的抛弃。
你所洋洋得意的技术也许正在慢慢的被替代
所以,持续学习能让你顺应时代的发展!
5 想跟您了解下后端数据处理以及项目部署到服务器上相关的知识,可以举例吗?
-
后端数据处理
很多新同学可能不知道后端是具体干什么的。
简单来说, 前端是用户所能够感知的, 比如 App和网页的展现形态 ,还有一些交互事件 比如点击按钮
后端呢就是监听(当然并不只是监听)这些事件来做对应逻辑。比如我们举个例子,你在某个网站注册一个新用户。
那么你提交的电话号码、昵称 等等这些信息是不是需要你保存到数据库里面?以方便你下次登录访问的时候能够返回这些信息(例如你登录的时候 有你的个人信息展示页)
你点击注册这个按钮的时候,前端感知到你这个点击事件,就会调用 后端 写好的注册接口。
这个注册接口就是你问的后端数据处理逻辑,那么它逻辑是什么?
就是简单的先验证一下该用户是否已经注册、如果没有注册的话,那我们就去数据库里面写入一条数据来说明注册成功了。(当然可能还有其他的逻辑这里不赘述)
-
项目部署到服务器
项目如何部署到服务器?如何能够让大家给访问到?这个简单的描述一下
这个服务器可是是windows、Linux,不过一般用的Linux比较多。
项目开发完成之后,会将项目打成jar、war包等等。 然后这些部署包可以放到 Tomcat、Jettty web服务期里面启动部署。这样子就算部署了, 例如你本地启动IDEA也算是部署。如何让大家能够访问到你的项目呢? 那么就需要将你服务端口开放到外网就行了。
一般你本地部署了,你同一个局域网的人是可以访问到你的项目的。既然要外网可以访问。
所以你需要有一台公网服务器,并且开放端口, 比如阿里云ECS。
可能以前比较原始和粗糙的做法都是手动scp到ECS, 然后手动启动。
这样子就比较低效, 那么更方便的做法就是用Jenkins来做自动化部署。
大一点的公司一般都会自研部署系统,通常会集成很多功能, 但是底层一般都会用到Jenkins。
6 对于在实际工作应用中所需要后端能力,作为准备,学生需要重点掌握学习哪些技术?有推荐的技巧吗?
请看问题 3 和 4.
7 工作中后端测试主要需要掌握哪些技能?可以举例吗?
1、要掌握接口测试,可选用工具/脚本辅助进行,比如postman、jmeter工具,也可以用python或者java脚本。最终实现接口自动化
2、要会查看服务报错日志,能精准定位问题,需要对微服务架构有一些简单的了解
8 可以介绍您之前做过的某一个后端相关项目具体过程吗?想通过实例学习下
我做过的项目很多, 而且项目也不是一句两句就能说的清楚的。
想通过实例学习,建立可以去GitHub上多看看一些优秀的开源项目。
这里我可以提供一个我只前写的一个 Redis延迟队列的小组件。
项目地址:https://gitee.com/songwaimai/redis-delay-queue
对你学习Java多线程、Redis、Java锁等等有有帮助。
欢迎加我交个朋友:szzdzhp001
以上是关于大学生后端学习常见问题解答(学习方法+工作实操项目)的主要内容,如果未能解决你的问题,请参考以下文章
#私藏项目实操分享# Angular Change Detection 的学习笔记
18年毕业!历经3年到现在的快手架构师,聊聊我的java后端学习之路!