众所周知,Java 的知识体系繁冗复杂,但是有很多知识在实际工作中几乎没有人用。

很多人在学习过程中,却经常把有限的时间和精力花在了这些“没有用”的知识上,事倍功半。

下面我捋一捋 Java 中那些不建议学习的知识点,让大家能避过雷区,尽量提升些学习的精准度。

Java 的桌面 GUI 相关技术

GUI,即 Graphical User Interface,图形用户界面。

Java 的 GUI 相关技术包括:

  1. AWT
  2. Swing
  3. SWT/JFACE
  4. JavaFx
  5. JavaFx2

Java 的 GUI 技术到目前的代表应用是两个:一个是 Eclipse,是用 SWT 开发的;另一个是 Jetbrains 下面的所有开发工具,典型代表是 IntelliJ IDEA。

我为什么把图形界面相关技术放在这里,说不用学呢?因为在我们国内,一个程序员的整个职业生涯里可能都很难和这个技术有所接触。

  • 一是因为国内本身使用 GUI 开发桌面应用的岗位本来就非常少见。国内的主流就是互联网,相关技术岗位几乎占了 IT 圈子的 80% 以上,没有什么 GUI 技术的岗位。

  • 二是因为 Java 的 GUI 技术难用。虽然 Eclipse 和 IntelliJ IDEA 都使用的 Java 的 GUI 技术,但是 Java GUI 的难用是出了名的,哪怕是最新出的 JavaFx2,也是各种问题一堆,各种内存泄露。

说的这里,我想起来了,我第一份工作还真用过 Swing,当时有个 CS 结构的项目用到了 Swing。

当时我纯小白,Java 还没学明白,更别提用 Swing 了,然后特意买了一本书学习。

不过等我从小白到能写代码的时候,这个项目已经快做完了,所以我也没贡献多少代码……一直到现在,我还清楚记得,那个项目的界面真朴素,性能也很朴素。

从那次之后,工作十几年之中,我再也没接触过 Java 的 GUI。我身边做这方面的程序员也几乎没有。

总的来说,Java 相关 GUI 的东西可以跳过不学,因为用的机会太少了,学起来费劲,相关岗位也少,性价比太差。

Java 的 XML 相关 API

这里说的 XML 相关 API,其实就是说的 Java 中内置的相关 XML 解析 API,这些相关 API 被统一称作 JAXP。

在 JAXP 里,有两种解析 XML 的方式,都有各自对应的 API:一种叫做 DOM 解析方式,一种叫做 SAX 解析方式。

DOM 解析方式就是 Java 内置了一套解析工具,可以把 XML 内容读取到应用里挨个解析对应的元素,然后形成一棵树。

而 SAX 解析方式就是 Java 内置了一系列的事件对应于不同的 XML 内容的元素,当使用 SAX 解析方式后,碰到一个 XML 元素,就发一个事件到对应的监听器。比如,当 SAX 遇到某个<a>aaa</a>,就会发出 startElement 事件,然后,你就可以写个监听器,去做对应处理。

我之所以说不要学 XML 相关 API,首要原因是这套体系非常庞大。你表面看着是套 API 使用而已,可是要熟练使用对应的 API,你还得对 XML 本身的构造和相关知识也要有足够了解。

这些知识除了多和杂,最关键的一点是,这些知识过时了。现在用 XML 的场景已经不多了,以后基本也没人会用这些东西了,XML 相关的东西,基本被 JSON、YAML 这些后起之秀替代了。

所以,如果你正在学 XML,就停下来跳过去,如果准备学 XML,就赶紧避过去。同时我建议:

把精力花在学习 JSON、YAML 的结构、以及如何解析JSON、YAML上

Java 的安全相关

这里说的 Java 安全包含了两个部分:

  • java.security 包中的所有相关类和接口
  • JAAS 框架

先说第一个,java.security 包在实际工作中,都已经被封装了起来,大家往往使用的都是已经写好的工具类。同时呢,java.security 里有些功能可以通过安全策略去限制一个系统用户去访问对应的 Java 类或者远程下载一个类。

但是在实际当中,限制用户访问,完全可以通过开源的权限框架去限制,而且限制访问资源即可。限制访问一个 Java 类什么的,实际意义并不太大。

接下来再说 JAAS,它的全称是 Java Authentication Authorization Service。它可以认证系统的使用者,说白了就是登录成功的规则。比如,用户登录可以使用密码,也可以无密码,只去验证用户存在的密钥。但现实情况是,这些东西其实基本上很少有人用了,现实里大家基本都在用 OAuth2。

所以,Java 安全的学习可以缓缓,建议把这个时间去学习下 OAuth2,这才是有实际价值的东西。

Java 的国际化

这里说的国际化就是平常大家听到的 Java 的 Internationalization 相关技术。

国际化的根本目的就是做能给用户展示出不同语言的系统界面。而这种需求,其实在国内行业需求很少。

但是,当我们学习刚入门的时候,Java 国际化理解起来门槛比较高,有各种各样的格式化和相关字符串替代,还得明白大致的配置文件是如何加载的。而且就算理解了,由于工作不会经常用到,最终都会全部忘光。

与其花很大功夫学懂弄通 Java 的国际化这门知识,最后很可能又因为忘记了需要重新学,不如省下时间去学好 Java 基础。

又或者是学习怎么在某些框架下进行国际化,比如在 Spring 框架搞国际化,只需要弄懂如何使用即可,原理之类的不必深究,不建议钻进去花时间深入学习。

Java 的 native 方法

Java 的 native 方法就是 Java 如何去访问 C 或者 C++ 所写的函数的方式。

但是,还是像上面说的一样,我工作的十几年中,用到的次数屈指可数。所以,可以不用学,真要用的时候,我想那时候你已经是一位高级工程师了,现用现学都可以。

所以,研究 native 方法,不如去学些 Java 的高级特性、最佳编码实践。

Struts 和 Hibernate

Struts、Hibernate 当年都是非常优秀的 MVC、OR Mapping 框架,后来随着 Spring 和 MyBatis 的出现,这些后起之秀们越来越流行,Struts 和 Hibernate 用的越来越少了。

如果是自己学习的话,建议直接从 Spring 和 MyBatis 开始,毕竟它们参考了 Struts 和 Hibernate,吸收了前人的优点,改正了前人的缺点。

可能有人觉得“需要学 Struts、Hibernate”——这种观点存在也正常,因为现在还有很多公司的老项目用的就是它们。

所以,对于 Struts 和 Hibernate,学了也就学了,说不定以后会用到。还没学的话,直接学 Spring、MyBatis 就行。

其他

Java 中还有很多已经过期,但是至今无论是书籍还是培训机构,有时候还在提的东西,比如 JSP 啊、JSTL 标签库啊,这些真的都可以不学了。

甚至有些时候,根据自己的实际情况,连 Java 的底层网络编程,比如如何使用 Socket、如何使用 HttpUrlConnection 这些都可以先放到一边,转而等后面学习如何使用 HttpClient 什么的更好,又或者后面自己看看网络原理后再回头来学。

总之,Java 的冗余很多,最好在学习之前,把一些可学可不学的先排除掉,集中精力学最有用的。

总结

我一直推崇精准学习,因为从事程序员这行,要学的内容太多了。

我见过许许多多的优秀程序员,并不是他们学习能力有多强,只是他们非常聪明,他们可以准确找到他们需要学习的知识点。

根据二八定律,把最核心最重要的 20%,而在日常工作却占了 80% 比重的部分学精学透,这就已经足以成长为能处理各种棘手难题的优秀程序员了。

学习,请精准学习,要学会放弃,知道舍得。


你好,我是四猿外。

一家上市公司的技术总监,管理的技术团队一百余人。

我从一名非计算机专业的毕业生,转行到程序员,一路打拼,一路成长。

我会把自己的成长故事写成文章,把枯燥的技术文章写成故事。

欢迎关注我的公众号,关注后可以领取高并发、算法学习资料。

Java全家桶的这些知识,不用学了的更多相关文章

  1. 使用react全家桶制作博客后台管理系统 网站PWA升级 移动端常见问题处理 循序渐进学.Net Core Web Api开发系列【4】:前端访问WebApi [Abp 源码分析]四、模块配置 [Abp 源码分析]三、依赖注入

    使用react全家桶制作博客后台管理系统   前面的话 笔者在做一个完整的博客上线项目,包括前台.后台.后端接口和服务器配置.本文将详细介绍使用react全家桶制作的博客后台管理系统 概述 该项目是基 ...

  2. 【知识总结】多项式全家桶(三)(任意模数NTT)

    经过两个月的咕咕,"多项式全家桶" 系列终于迎来了第三期--(雾) 上一篇:[知识总结]多项式全家桶(二)(ln和exp) 先膜拜(伏地膜)大恐龙的博客:任意模数 NTT (在页面 ...

  3. 【知识总结】多项式全家桶(一)(NTT、加减乘除和求逆)

    我这种数学一窍不通的菜鸡终于开始学多项式全家桶了-- 必须要会的前置技能:FFT(不会?戳我:[知识总结]快速傅里叶变换(FFT)) 以下无特殊说明的情况下,多项式的长度指多项式最高次项的次数加\(1 ...

  4. 【知识总结】多项式全家桶(二)(ln和exp)

    上一篇:[知识总结]多项式全家桶(一)(NTT.加减乘除和求逆) 一.对数函数\(\ln(A)\) 求一个多项式\(B(x)\),满足\(B(x)=\ln(A(x))\). 这里需要一些最基本的微积分 ...

  5. Java秋招面试复习大纲(二):Spring全家桶+MyBatis+MongDB+微服务

    前言 对于那些想面试高级 Java 岗位的同学来说,除了算法属于比较「天方夜谭」的题目外,剩下针对实际工作的题目就属于真正的本事了,热门技术的细节和难点成为了面试时主要考察的内容. 这里说「天方夜谭」 ...

  6. 最全最新java面试题系列全家桶(带答案)

    最全最新java面试题系列全家桶(带答案) 置顶 2019年04月06日 22:40:28 青春季风暴 阅读数 14082 文章标签: java面试题技术栈 更多 分类专栏: 面试   版权声明:本文 ...

  7. IP 基础知识全家桶,45 张图一套带走

    前言 前段时间,有读者希望我写一篇关于 IP 分类地址.子网划分等的文章,他反馈常常混淆,摸不着头脑. 那么,说来就来!而且要盘就盘全一点,顺便挑战下小林的图解功力,所以就来个 IP 基础知识全家桶. ...

  8. Vue全家桶之一Vue(基础知识篇)

    全家桶:Vue本身.状态管理.路由.   异步组件:     

  9. 10分钟详解Spring全家桶7大知识点

    Spring框架自2002年诞生以来一直备受开发者青睐,它包括SpringMVC.SpringBoot.Spring Cloud.Spring Cloud Dataflow等解决方案.有人亲切的称之为 ...

随机推荐

  1. 刷算法,这些api不可不知!

    大家好,我是老三,最近在刷算法,发现有些api记得不熟,所以整理了一波,如果你也在刷题,赶紧收藏吧! 集合 在刷题中,各种数据结构是我们常常用到的,例如栈实现迭代.哈希存储键值对等等,我们来看看常用集 ...

  2. 可搜索加密技术 - 学习笔记(二)- 预备知识:HMAC-SHA256函数

    由于在之后的算法中会用到HMAC-SHA256函数,这里先简单对其进行一个介绍. 一.HMAC算法 什么是HMAC算法? HMAC是密钥相关的哈希运算消息认证码(Hash-based Message ...

  3. SpringBoot缓存管理(三) 自定义Redis缓存序列化机制

    前言 在上一篇文章中,我们完成了SpringBoot整合Redis进行数据缓存管理的工作,但缓存管理的实体类数据使用的是JDK序列化方式(如下图所示),不便于使用可视化管理工具进行查看和管理. 接下来 ...

  4. C语言:c++ ++c

    #include <stdio.h> int main() {int a=3,x; x=(a++)+(++a)+(++a); printf("%d",x); getch ...

  5. 【记录】如何造一个vite插件(1)

    在看文章前,先做个定位,这不是一篇纯粹的技术性文章,可以把它理解成一个叙述文章,记录我开发插件的过程. 开始前简单的吹个牛 vue2 也写了很多年了,多人合作始终避不开用到别人的组件.关键是有些组件没 ...

  6. 数组去重汇总—v客学院技术分享

    上周基础班结束了数组的学习内容,这几天有时间整理了下几种比较常用的数组去重的方法供大家查阅!!!!! 话不多说,直接贴代码吧~~~~~~~ 欢迎大家指正,共同学习,一同进步!!! (php开发,web ...

  7. mysql - 按条件统计

    在表中分别统计mt =0 和 mt>0 的个数 方法一:select count(if(mt=0,1,null)) as a,count(if(mt>0,1,null)) as b fro ...

  8. 2021 NOI冬令营

    2021 NOI冬令营 -- 本来想写得稍微文艺一点的,但是停课这么久已经退化到不会写文章了. 毕竟省选了我才来补的,时间也过去很久了. 毕竟这次我没有获得任何奖项. 我唯一的获得就是-- --好好看 ...

  9. P7324 [WC2021] 表达式求值

    P7324 [WC2021] 表达式求值 闲话 WC2021 我只得了 20 分,三道题总共 20 分.我是下场了突然后知后觉这件事的,主要原因是我开了 C++11,然后 T1 T2 都没分了.在洛谷 ...

  10. 【洛谷P1061 Jam的计数法】搜索

    分析 超级暴力,在尾部+1,再判断. AC代码 type arr=array[0..27]of longint; var st:string; a:array[0..27]of longint; s, ...