首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  程序员

Java 后端开发,应该重点学习哪些知识/技能?

  •  1
     
  •   javaWeber · 2018-11-18 21:35:44 +08:00 · 6064 次点击
    这是一个创建于 382 天前的主题,其中的信息可能已经有所发展或是发生改变。
    如果想在接下来的五年,还继续做后端开发。
    那么,应该重点学习哪些知识 /技能,才会比较有用?
    我主要是用的 java。。其他语言的后端开发也可以分享下经验。。
    30 回复  |  直到 2019-08-17 17:34:14 +08:00
        1
    tedzhou1221   2018-11-18 22:08:37 +08:00 via Android
    个人觉得多线程并发吧。
        2
    LowBi   2018-11-18 22:13:13 +08:00
    工作经验告诉我,还是用到什么学什么吧,毕竟现在东西那么多,用也不会全用上
        3
    storypanda   2018-11-18 22:17:18 +08:00 via Android
    我个人有考虑转后端,然后同事给我看的是 JAVA EE 轻量级框架的那本实践书,spring+radius,然后我自己学习 JSP 语言,Java Web 这些。。
        4
    sudoz   2018-11-18 22:19:34 +08:00
    后端和 Java 有什么关系。
    你要关注的后端开发往深了做需要面对哪些技术问题,而不是停留在语言层面,这些技术问题和语言是无关的。
    系统稳定性,并发能力,分布式事务的实现方案,等等
        5
    NeinChn   2018-11-18 22:36:42 +08:00
    @sudoz
    你这么说就好像...
    学操作系统和 C 有什么关系
    操作系统主要是 IO,FS,blahblah
        6
    Raymon111111   2018-11-18 23:11:48 +08:00   ♥ 1
    划掉 Java 是个合格的题目

    已经工作 5 年还没发现后端开发是个语言无关的活吗?
        7
    xiaochen2018   2018-11-18 23:24:39 +08:00 via iPhone   ♥ 1
        8
    javaWeber   2018-11-19 09:15:40 +08:00
    @Raymon111111 大佬。。我没有工作 5 年啊。。我还是菜鸟。所以才有此一问。
        9
    wleexi   2018-11-19 09:17:41 +08:00
        10
    javaWeber   2018-11-19 09:22:31 +08:00
    @LowBi 工作经验告诉我,还是用到什么学什么吧,毕竟现在东西那么多,用也不会全用上
    ======================================================
    就是因为东西实在太多了,现在用过一点 redis 缓存,zookeeper 分布式一致性,kafka 消息队列。。
    后面还有一大堆的东西不知道重点学哪些。
    搜索引擎 elstaicSearch,容器 docker,数据库分库分表 myCat。。还有 mongodb、nginx、netty。。我都快疯了。
    学不同的东西,肯定效果是不一样的。有的几年后可能就过时了没用了,有的还很有用,可以当成积累。。
        11
    javaWeber   2018-11-19 09:25:09 +08:00
    @storypanda 除了 ssm 和 redis。。还有个 springBoot。特别好用。
        12
    realkenshinji   2018-11-19 09:31:19 +08:00
    如何更好的科学上网,我觉得这个最重要了
        13
    cyhulk   2018-11-19 09:51:45 +08:00
    @javaWeber 其实想知道你做了几年,都会啥
        14
    javaWeber   2018-11-19 10:00:42 +08:00
    @cyhulk 做了一年多吧。会一点 ssm,springBoot,redis,zookeeper。。其他的有的用过,但是不明白原理。
        15
    mccreefei   2018-11-19 10:09:39 +08:00
    jdk 集合、多线程 源码
        16
    sayzly   2018-11-19 10:43:27 +08:00
    网络 搜索 并发 分布式设计 算法 消息队列什么的 精通一些方向咯
        17
    micean   2018-11-19 10:52:08 +08:00
    从 HTTP 协议开始
        18
    wleexi   2018-11-19 10:58:18 +08:00
    上面发过一个网址,是所有的 java 的规范,LZ 说到 springboot 好用,有去了解下是怎么实现自动装配,如何外部化配置,为什么可以实现注解驱动。。balabala...

    springboot 很大程度上是依赖的 servlet3.0 规范的。可以去了解下。

    语言基础方面可以了解下底层知识。
    字节码 /JVM/内存...
    后端代码总要连接数据库吧.. 不如再了解下数据库知识...
    关系型数据库 /NoSQL 数据库 /HBase/文档数据库....
        19
    Neojoke   2018-11-19 11:22:01 +08:00   ♥ 8
    如果是长远的后端开发,那就要全面深入的发展,首先是语言,没有哪种语言,是和后端或者 web 开发划等号的,Java 要想深入,不要过多的搞设计模式。语言知识你要掌握的知识的一部分,以下多个方面你都要掌握,记住,当你有能力掌握这么多知识的时候,你的学习能力有具备了,具备了学习能力,什么具体的 java 技术、后端技术,都不是什么问题,哪怕下一次技术更新,你还能依靠你的学习能力,继续保持技术先进性。
    1. JVM 深入了解,Tomcat 深入了解,多看 Java 库的源码
    2. 计算机网络深入理解,物理层、数据链路层,可以不用深究,但是网际层、会话层、应用层的概念要熟悉,IP 协议、HTTP 协议要熟悉,基于 IP 协议的子网划分,要熟知
    3. 操作系统,这是无论哪方便开发都要熟悉的,不论是前端、移动端、后端、数据库、运维,只要是搞计算机的,都要有扎实的计算机操作系统的功底,操作系统的体系结构、运行机制,Linux 内核、账户管理、安全,多用户多进程模式、内存管理、进程管理、进程间通讯等等,《深入理解计算机原理》,《 Linux 入门到精通》等等,要多学多练习,可以使用 Java 去调用操作系统的底层 API,试试,如果想不明白的,可以使用 C 多去研究一下
    4. 数据库方面,SQL 与 NoSQL,SQL 要注意 SQL 语言的范式模型,从逻辑上理解究竟什么是 SQL,SQL 语句为什么能标识数据查询,SQL 能做到什么,不能做到什么,然后就是 SQL 数据的实现,mysql、oracle、postgresql,深入理解数据引擎,游标这些东西
    5. 有了上述基础,再去学习一些理论知识,比方说马丁大叔提出的 IOC 理论、Roy Thomas Fielding 提出的 Rest 理论,SOA 的提出和发展、微服务的提出和发展,充实对现代分布式计算架构的理解
    6. 尝试自己实现一套 IOC、SOA、微服务框架,锻炼自己通过理论去进行实践的能力,当然这点不是要求你造轮子,只是为了能够让你到达,能够通过理论,造轮子的程度
        20
    xhinliang   2018-11-19 11:35:28 +08:00
    @storypanda 跟 radius 协议有什么关系吗...
        21
    icegreen   2018-11-19 12:30:43 +08:00
    沟通能力, 设计思维, 站在客户角度思考分析问题的能力
        22
    lihongjie0209   2018-11-19 12:43:40 +08:00
    1. 并发是基础, 学的时候还能接触到 Java 内存模型.
    2. 网络层的分层来学, Web 开发用到的 HTTP 协议, 那么 HTTP 要熟, 同时还要往下一层探究: TCP
    3. 操作系统, 这里面的操作系统指的操作系统原理, 而不是 Linux 系统管理, 大概分为 3 个部分: 虚拟化, 并发(第一点接触过), 持久化(IO)
    4. 数据库大概有几个部分: 1. 数据库设计 2. sql 语法 3. sql 执行过程包括优化 4. 物理层的数据存储, 事务, 索引的实现(操作系统中的知识点都会涉及).

    单机学到这里应该差不多了, 分布式没接触过.


    至于设计模式属于一个不断学习的过程, 因为全靠不断的犯错才能正真体会到设计模式的优点, 所以这个要在项目中不断积累.
        23
    CtrlSpace   2018-11-19 14:08:27 +08:00
    别想五年那么长远吧,想想现在的自己需要补足什么。

    事物变化很快的,说不定你第二年就干别的事情了。
        24
    Balloonwj   2018-11-19 14:10:24 +08:00
        25
    colincat   2018-11-19 14:16:07 +08:00 via iPhone
    多了解基础吧,最后所有的东西都是基础的东西演变,万变不离其中
        26
    mugglezzz   2018-11-19 14:21:22 +08:00
    @Raymon111111 #6 光看清题目,看不清描述? 大家都友好一点吧。
        27
    alery   2018-11-19 18:57:14 +08:00
    @Neojoke 不要过多的搞设计模式是啥意思? 不要太纠结?
        28
    Neojoke   2018-11-20 08:28:52 +08:00
    @alery 设计模式属于归纳总结出来的实践经验,刻意学习是会不得法的,应该是实践大量的代码,跳了无数的坑,自己觉得不想再写那么多代码了,不想再跳那么多坑了,再去寻找设计模式去解决你的问题,才有用,在没有大量实践的情况下去学习设计模式,基本上没有什么用,并且在现在大多数工程师,都是在做业务开发的情况下,有效代码不超过百万行的时候,设计模式没有什么太大的作用,还没有良好的编码风格有用。
        29
    champloo   110 天前
    接口 a = new 实现类。但凡实现类中自定义方法,使用 a.自定义方法会报错,也就是说,子类自定义方法不能通过这样的方式调用,所以在一开始定义接口的时候,就得想好接口实现什么样得方法
        30
    champloo   110 天前
    貌似回错帖子了,抱歉
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   4388 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 22ms · UTC 06:08 · PVG 14:08 · LAX 22:08 · JFK 01:08
    ♥ Do have faith in what you're doing.