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

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

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

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

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

    语言基础方面可以了解下底层知识。
    字节码 /JVM/内存...
    后端代码总要连接数据库吧.. 不如再了解下数据库知识...
    关系型数据库 /NoSQL 数据库 /HBase/文档数据库....
    Neojoke
        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、微服务框架,锻炼自己通过理论去进行实践的能力,当然这点不是要求你造轮子,只是为了能够让你到达,能够通过理论,造轮子的程度
    xhinliang
        20
    xhinliang  
       2018-11-19 11:35:28 +08:00
    @storypanda 跟 radius 协议有什么关系吗...
    icegreen
        21
    icegreen  
       2018-11-19 12:30:43 +08:00
    沟通能力, 设计思维, 站在客户角度思考分析问题的能力
    lihongjie0209
        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. 物理层的数据存储, 事务, 索引的实现(操作系统中的知识点都会涉及).

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


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

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