当前位置: 首页 > news >正文

Java - 当年很流行,现在已经淘汰的 Java 技术,请不要在继续学了!!!

最近这段时间收到了一些读者的私信,问我某个技术要不要学,还有一些在国外的同学竟然对 Java 图形化很感兴趣,还想找这方面的工作。

比较忙,一直没抽出时间去回答这类问题,刚好看到我关注的一位大佬回答过,这里分享一下,希望对你能有帮助。

Java 历史也算是悠久,见证了许多 Java 技术变迁,包括:

JavaEE 框架,从百家混战到现在 Spring 基本一统天下。

Web 开发,从标配的 SSH 到现在 SpirngMVC + MyBatis 组合。

IDE,从当年如火如荼的 JBuilder 到 Eclipse,再到更好用的 IDEA。

而本文,我主要谈一下那些 Java 知识“已经过时”,没必要继续学习了。

我判断的依据主要有以下几点:

  1. 实际开发能否用到?

  2. 是否有助于加深对技术的理解?

  3. 对面试是否有用?

JSP

JSP 在实际开发中,主要是作为 MVC 模型中的 V(View)层出现的。当然,View 层的渲染技术除了 JSP,还有 FreeMaker、Velocity 等。

JSP 作为页面模板,在后端通过 MVC 框架渲染成 HMTL,然后再发送到客户端(例如浏览器)来呈现。这也就是我们常说的“前后端不分离”,“混合式”开发。

而当前,包括我所在的公司,以及大部分互联网公司。要么已经抛弃这种模式,要么正在抛弃的路上,而转向彻底的“前后端分离”。

在“前后端分离”模式下,后端只负责提供服务接口(例如 REST),而前端(例如 HTML5)通过接口发送/获取,呈现数据(例如 JSON 格式)。

这样,在后端,原来的 MVC 框架,某种意义上已经演变为 MC 框架。因此,与 V(View)相关的一切模板技术都失去了学习的必要,其中当然也包括 JSP。所以,后来的 Java 学习者,我的建议是:

完全可以放弃对 JSP 的学习。”

Struts

在 Java 后端开发中,MVC 模型还是主流。而 Struts 作为一个 MVC 框架,单从技术上来说,还是很优秀的。

但是,现在 Spring 实在是太强势了,越来越成为 Java 开发中的“一站式”工具包,其中的一个利器就是 Spring MVC。

望名知意,Spring MVC 也是一个 MVC 框架。而且因为它是 Spring 的亲儿子,自然和 Spring 契合的非常完美。

同时,在设计之初,Spring MVC 就参照了其他 MVC 框架的优缺点(包括 Struts),所以用起来非常爽。因此,在 MVC 框架领域,Spring MVC 大有一统天下的趋势。

因此现在,很多公司,老的 Struts 项目还在维护。但新的项目开发,更多转向了 Spring MVC。因此,如果你是 Java 新手,正在学习中,我的建议是:

_不要再学习 Struts 了,从 Spring MVC 开始吧!_”

Hibernate

Hibernate 作为老牌的 OR 映射框架,功能非常强大,涵盖面非常广。但这既是它的优点,同时也成为它的“负担”,是开发人员“不能承受之重”。

Hibernate 的设计初衷,是为了最大程度的解放程序员,完全隔离数据库,实现彻底的 OR 映射。程序员甚至可以不写一行 SQL 语句,单通过配置就能实现对数据库的操作。

当然,为了实现这个目标,Hibernate 也设计的非常复杂、非常精巧。就不可避免的带来以下副作用:

  1. 学习成本高

  2. 配置复杂

  3. 调优困难

前两点不难理解,单说“调优困难”。

因为 Hibernate 的设计目标是彻底的 OR 映射,彻底的隔离 SQL 语句。但必然会带来一定的性能损失。大部分情况下,应用如果对性能不敏感,Hibernate 也没问题。但应用一旦对性能敏感,有 SQL 级别调优的需求,Hibernate 的优点反而成为缺点。

虽然 Hibernate 也支持 SQL 级别的调优,但因为框架设计的过于复杂和精巧,这就需要开发人员对 Hibernate 理解的非常透彻,这就带来了更高的学习成本。

而现在最流行的 MyBatis,作为一个“混合式”,轻量级 OR 映射框架,既继承了 Hibernate 的优点,同时也吸取了他的教训。在支持配置的同时,又能接触 SQL,从而带来了更多灵活性(包括调试、优化)。

当前,在实际开发中,Hibernate 使用的越来越少了。大家更偏爱 MyBatis 这种轻量级框架。所以,对后来学习者,我的建议是:

不需要再学习 Hibernate 了,学 MyBatis 就够了。”

Servlet(要精通)

当然,现在不会有任何公司,再用纯粹的 Servlet 来时实现整个 Web 应用,而是转向一些更高级的技术(例如各种 MVC 框架)。因此,会给人一种错觉:Servlet 已经过时,后来者就不需要再学习了。

在这里,我可以非常负责任的说:这种观点是极端错误,极端不负责任的。

Servlet 不仅要学,而且要学深,学透。

当前,Servlet 虽然不再是一个主流 web 开发技术,但依然是 Java Web 开发技术的基础,是 Java Web 容器的基石,是行业标准。而现在流行的各种 MVC 框架(包括 SpringMVC),在最底层,还是以 Servlet 为基础的。

为此,我画了一个简单的图(不准确,会意即可):

所以,如果你想要彻底掌握某个 MVC 框架,则必须彻底理解 Servlet。

而且,Servlet 作为一个基础设施。精通它,不仅有助于理解各种 MVC 框架。即使 Servlet 本身,也有很多实用价值。

如果你深刻理解了 Servlet 的生命周期,就可以在底层做很多事情。譬如在 Request 进来的时候,进行拦截,进行权限的判定。也可以在 Response 发出的时候,进行拦截,统一检查、统一附加。

所以,如果你正在学习 Java,对 Servlet,我的建议是:

Servlet 不仅要学,而且要学深,学透。”

其他

目前在国内,Java 更多是作为 web 后端技术出现的。因此在实际学习中,很多技术就不符合“国情”,学习的现实意义不大。下面我就简单列举下。

1.Applet

作为页面插件技术,不用多说,连 flash 都快被淘汰了,更无论从未流行的 applet。

2.Swing

作为桌面 UI 框架。且不说本身设计的咋样。现实开发中,我接触的桌面应用,要么用 C++(例如 MFC),要么用 C#(Winform、WPF)。所以,Swing 就没有学习的必要了。

3.JDBC

作为较低层的数据库基础设施,JDBC 被很多框架(例如 MyBatis)支持。但在实际开发中,程序员即使不了解也无大碍。因此,虽然我不能建议你放弃 JDBC 学习,但如果你时间有限,完全可以把它的优先级排低一点。

4.XML

XML 现在还在广泛应用。但作为一个 web 数据传输格式,正在逐渐被 JSON 替代。所以,对 Java 后端学习来说,XML 简单了解即可。至于庞杂的 XML 操作 API(例如 XPath),完全不必学习。将来真要用到,再查也不迟。

最后

上面是我的一家之言,肯定有武断之处,见谅!

最后,祝你学习顺利。

相关文章:

Java - 当年很流行,现在已经淘汰的 Java 技术,请不要在继续学了!!!

最近这段时间收到了一些读者的私信,问我某个技术要不要学,还有一些在国外的同学竟然对 Java 图形化很感兴趣,还想找这方面的工作。 比较忙,一直没抽出时间去回答这类问题,刚好看到我关注的一位大佬回答过,这…...

驻波比VSWR

最近看大家写的VSWR文章,发现有很多误解, 1)错误解释是入射波和反射波叠加的驻波的波峰/波谷。大家可以向下驻波也是正弦波,波峰和波谷的值不都是振幅吗?因此相当于VSWR恒等于1了。 2)VSWR越小越好; 正确…...

多线程-线程池

为什么要使用线程池 在Java中使用线程池的主要原因有以下几点: 提高性能:使用线程池可以减少线程的创建和销毁过程的开销。线程的创建和销毁是比较昂贵的操作,如果每次需要执行任务时都创建一个新线程,会造成系统资源的浪费。而线…...

护网期间遇到的几个上传bypass waf、edr

1. weblogic部署war的时候 http/1.1 改成http/2绕过waf 其实jar和ear部署应该也可以,但是我没成功。 weblogoic 部署war死活出错,用linux下的浏览器 linux下打包war马 zip -r zipjob4.zip job/ mv zipjob3.zip zipjob3.war 然后部署成功之后&am…...

简述MVC模式

这里为什么讲MVC模式,是因为在学习的过程中,很多人不知怎的,将观察者模式和MVC混为一谈。MVC模式最开始出现在WEB开发中,该模式能够很好的做到软件模块的高内聚,低耦合,所以其思想逐渐在各个软件开发领域都…...

C#--Mapster(高性能映射)用法

1.Nuget安装Mapster包引用 2.界面XAML部分 <Window x:Class"WpfApp35.MainWindow"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d"http://schemas.m…...

mysql实战——Mysql8.0高可用之双主+keepalived

一、介绍 利用keepalived实现Mysql数据库的高可用&#xff0c;KeepalivedMysql双主来实现MYSQL-HA&#xff0c;两台Mysql数据库的数据保持完全一致&#xff0c;实现方法是两台Mysql互为主从关系&#xff0c;通过keepalived配置VIP&#xff0c;实现当其中的一台Mysql数据库宕机…...

关于同一个地址用作两个不同页面时,列表操作栏按钮混淆状态

同一个地址用作两个不同页面时&#xff0c;列表页的操作栏中有好多个按钮&#xff0c;如果用了v-if&#xff0c;可能会导致按钮混淆状态如disabled等属性混乱 解决方法1&#xff1a; 将v-if换成v-show&#xff0c;用了v-show之后意味着所有按钮都在只是在页面上隐藏了 解决方…...

Oracle段延迟分配(Deferred Segment Creation)解析

目录 一、基本概念二、工作原理三、优势四、潜在风险与注意事项五、配置与管理 Oracle段延迟分配&#xff08;Deferred Segment Creation&#xff09;是Oracle 11g引入的一项重要特性&#xff0c;旨在优化资源使用和提高数据库管理效率。 一、基本概念 段延迟分配意味着当创建…...

Linux:IPC - System V

Linux&#xff1a;IPC - System V 共享内存 shm创建共享内存shmgetshmctlftok 挂接共享内存shmatshmdt shm特性 消息队列 msgmsggetmsgctlmsgsndmsgrcv 信号量 semSystem V 管理机制 System V IPC 是Linux系统中一种重要的进程间通信机制&#xff0c;它主要包括共享内存 shm&am…...

Laravel 图片添加水印

和这个配合使用 Laravel ThinkPhP 海报生成_laravel 制作海报-CSDN博客 代码 //水印 $x_length $imageInfo[0]; $y_length $imageInfo[1];$color imagecolorallocatealpha($posterImage, 255, 255, 255, 70); // 增加透明度参数alpha$font_size 40; //字体大小 $angle …...

嵌入式进阶——矩阵键盘

&#x1f3ac; 秋野酱&#xff1a;《个人主页》 &#x1f525; 个人专栏:《Java专栏》《Python专栏》 ⛺️心若有所向往,何惧道阻且长 文章目录 矩阵按键原理图按键状态检测单行按键状态检测多行按键状态检测 状态记录状态优化循环优化 矩阵按键 矩阵键盘是一种常见的数字输入…...

请说出vue.cli项目中src目录每个文件夹和文件的用法

在Vue CLI项目中&#xff0c;src目录是存放项目源码及需要引用的资源文件的主要位置。以下是src目录下常见文件夹和文件的用法&#xff1a; components 用途&#xff1a;存放可重用的Vue组件。这些组件通常用于在多个页面或布局中共享UI和功能。特点&#xff1a;组件应该是模块…...

【MySQL精通之路】InnoDB磁盘I/O和文件空间管理(11)

主博客&#xff1a; 【MySQL精通之路】InnoDB存储引擎-CSDN博客 目录 1.InnoDB磁盘I/O 1.1 预读 1.2 双写缓冲区 2.文件空间管理 2.1 Pages, Extents, Segments, and Tablespaces&#xff08;很重要&#xff09; 2.2 配置保留文件段页面的百分比 2.3 页与表行的关系 …...

基于springboot+html的二手交易平台(附源码)

基于springboothtml的二手交易平台 介绍部分界面截图如下联系我 介绍 本系统是基于springboothtml的二手交易平台&#xff0c;数据库为mysql&#xff0c;可用于毕设或学习&#xff0c;附数据库 部分界面截图如下 联系我 VX&#xff1a;Zzllh_...

正点原子[第二期]Linux之ARM(MX6U)裸机篇学习笔记-24.3,4 SPI驱动实验-I.MX6U SPI 寄存器

前言&#xff1a; 本文是根据哔哩哔哩网站上“正点原子[第二期]Linux之ARM&#xff08;MX6U&#xff09;裸机篇”视频的学习笔记&#xff0c;在这里会记录下正点原子 I.MX6ULL 开发板的配套视频教程所作的实验和学习笔记内容。本文大量引用了正点原子教学视频和链接中的内容。…...

【Pandas】数据处理方法

1.数据拆分 pandas.Series.str.extract() Series.str.extract(pat, flags0, expandTrue)[source]extract(提取) 参数 pat: 带分组的正则表达式。 flag: re模块中的标志&#xff0c;例如re.IGNORECASE&#xff0c;修改正则表达式匹配的大小写、空格等 expand: 默认为True&…...

【ArcGIS For JS】前端geojson渲染行政区划图层并加标签

原理 通过DataV工具 生成行政区的geojson&#xff08;得到各区的面元素数据&#xff09;, 随后使用手动绘制featureLayer与Label&#xff0c;并加载到地图。 //vue3加载geojson数据public/geojson/pt.json,在MapView渲染上加载geojson数据 type是"MultiPolygon"fetc…...

Spring AOP原理详解:动态代理与实际应用

1. Spring AOP概述 1.1 什么是AOP AOP&#xff08;Aspect-Oriented Programming&#xff0c;面向切面编程&#xff09;是一种编程范式&#xff0c;旨在将横切关注点&#xff08;Cross-Cutting Concerns&#xff09;从业务逻辑中分离出来。横切关注点是指那些分散在应用程序多…...

死锁的四个必要条件

死锁的四个必要条件如下&#xff1a; 互斥条件&#xff08;Mutual Exclusion&#xff09;&#xff1a;资源是独占的&#xff0c;即在同一时间内一个资源只能被一个进程或线程所使用&#xff0c;其他进程或线程无法访问该资源。 请求与保持条件&#xff08;Hold and Wait&#…...

永磁同步电机矢量控制进阶:电流环前馈补偿的5个关键点与避坑指南

永磁同步电机矢量控制进阶&#xff1a;电流环前馈补偿的5个关键点与避坑指南 在工业伺服系统与新能源驱动领域&#xff0c;永磁同步电机&#xff08;PMSM&#xff09;凭借其高功率密度和动态响应特性占据主导地位。而电流环作为矢量控制的内环&#xff0c;其性能直接影响整个系…...

OBS Studio架构深度解析:如何构建专业级直播系统的核心技术栈

OBS Studio架构深度解析&#xff1a;如何构建专业级直播系统的核心技术栈 【免费下载链接】obs-studio OBS Studio - 用于直播和屏幕录制的免费开源软件。 项目地址: https://gitcode.com/GitHub_Trending/ob/obs-studio OBS Studio作为开源直播录制软件的标杆&#xff…...

计算机视觉:从基础到深度学习应用

计算机视觉&#xff1a;从基础到深度学习应用 1. 背景与意义 计算机视觉&#xff08;Computer Vision&#xff0c;简称CV&#xff09;是人工智能领域的重要分支&#xff0c;旨在使计算机能够理解和处理图像信息。随着深度学习的发展&#xff0c;计算机视觉取得了突破性进展&…...

GIL Free ≠ Thread Safe:从Linux futex源码到Python对象头重定义,解构无锁环境下的引用计数崩溃根因(含gdb逆向调试录屏脚本)

第一章&#xff1a;GIL Free ≠ Thread Safe&#xff1a;核心命题与崩溃现象全景Python 的全局解释器锁&#xff08;GIL&#xff09;长期被视为多线程性能的桎梏&#xff0c;而 PyPy、Jython 乃至最新 CPython 3.13 的实验性 GIL-free 构建&#xff0c;常被误读为“天然支持安全…...

金仓V9智能运维揭秘:如何用国产数据库实现分钟级部署与自动化备份

金仓V9智能运维实战&#xff1a;从分钟级部署到自动化备份的全流程解析 在数字化转型浪潮中&#xff0c;数据库作为企业核心基础设施&#xff0c;其运维效率直接影响业务连续性。金仓数据库V9全平台版凭借智能运维体系&#xff0c;正在重新定义国产数据库的管理标准。本文将深入…...

OpenClaw环境隔离方案:百川2-13B专用Python虚拟环境配置

OpenClaw环境隔离方案&#xff1a;百川2-13B专用Python虚拟环境配置 1. 为什么需要环境隔离&#xff1f; 上周我在尝试让OpenClaw运行一个基于百川2-13B的自动化写作技能时&#xff0c;遭遇了令人头疼的依赖冲突问题。系统原有的Python 3.8环境与百川模型要求的torch 2.1.2不…...

Linux g++编译与GDB调试完整流程(文末附图)

验证安装 C which g g --versionC which gcc gcc --version安装 **centOs**&#xff1a;sudo yum install gcc **centOs**&#xff1a;sudo yum install g **ubuntu**&#xff1a;sudo apt-get install gcc **ubuntu**&#xff1a;sudo apt-get install g **kyLin**&#xff1a…...

别再到处找安装包了!Win10下Apache 2.4保姆级安装与配置(附网盘资源)

Win10下Apache 2.4终极安装指南&#xff1a;从零避坑到高效部署 第一次在Windows上配置Apache服务器时&#xff0c;我盯着命令行里反复出现的"Syntax error"提示整整两小时——直到发现是因为配置文件里少了个引号。这种看似简单的环境搭建&#xff0c;往往藏着无数…...

Python基础实战——批量处理文件(适合入门)

一、学习目标掌握 Python 文件操作&#xff08;读取、写入、遍历&#xff09;&#xff0c;学会批量处理指定目录下的文件&#xff0c;比如批量修改文件名、提取文件内容&#xff0c;适合刚入门 Python 的程序员巩固基础语法。二、核心知识点os 模块&#xff1a;遍历目录、修改文…...

实战指南:在Stable Diffusion WebUI Forge中打造你的专属AI绘画模型

实战指南&#xff1a;在Stable Diffusion WebUI Forge中打造你的专属AI绘画模型 【免费下载链接】stable-diffusion-webui-forge 项目地址: https://gitcode.com/GitHub_Trending/st/stable-diffusion-webui-forge 你是否曾羡慕那些能够生成特定风格或角色的AI绘画模型…...