IT培训网

达内论坛

 找回密码
 立即注册
搜索
查看: 327|回复: 2

为何有些java后端技能没有必要学

[复制链接]

1248

主题

1417

帖子

4810

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
4810
QQ
发表于 2018-12-26 14:05:53 | 显示全部楼层 |阅读模式
目前 Java 后端有哪些不是很有必要去学的?
目前大三,自学Java中,想问一下如果想往后端发展,哪些东西是很必要的,哪些是不要花太多精力的,还有就是想了解一下,一个产品的开发流程大体是什么样的,谢谢
javaws, webstart,applet这些东西现在基本见不到了,就别学了。有些朋友说applet这玩意不算后端,它的确不算,但是曾经它也是我们后端程序员工作的一部分,就好像后来的jsp一样,这玩意说是view,但又不能扔给前端做,所以只能后端做。
UI方面有awt,swing,javaFX和swt, jface,可以学,但我觉得意义不大。你要非要让java做这些,还不如去学c#呢。当然这些也完全是后端范畴。
jsp和标签库,这个虽然还有不少人用,而且说实话性能还是杠杠的。但我觉得现在没必要像十几年前那样去重点学习了。类似的还有jsf。这两个应该作为有时间可以看看,但不应该作为首要学习的目标了。
j2ee的体量太大了,尽管很多东西已经非常陈旧, 但用的人还是很多,比如说spring也还在被非常多的公司使用,我觉得学学也还可以。但可以从一些比较新的工具链开始:
servlet还是很多web框架的基础,但也要兼顾一些新的东西,比如说netty和基于netty的一些框架,比如说webflux,从他们官网盗个图,我们从图中也可以看出spring所包含的内容也在变迁。
我接触 Java已近20年了,见证了许多Java技术变迁,包括:
JavaEE框架,从百家混战到现在Spring基本一统天下。
Web开发,从标配的SSH到现在SpirngMVC + MyBatis组合。
IDE,从当年如火如荼的JBuilder到Eclipse,再到更好用的IDEA。
在另一篇回答中,我分享了如何快速有重点的学习Java。
而本文,我主要谈一下那些Java知识“已经过时”,没必要继续学习了。您也可以把本文看做上篇文章的补充。
我判断的依据主要有以下几点:
实际开发能否用到?
是否有助于加深对技术的理解?
对面试是否有用?
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项目还在维护。但新的项目开发,更多转向了SpringMVC。因此,如果你是Java新手,正在学习中,我的建议是:
“不要再学习Struts了,从Spring MVC开始吧!”
Hibernate
Hibernate作为老牌的OR映射框架,功能非常强大,涵盖面非常广。但这既是它的优点,同时也成为它的“负担”,是开发人员“不能承受之重”。
Hibernate的设计初衷,是为了最大程度的解放程序员,完全隔离数据库,实现彻底的OR映射。程序员甚至可以不写一行SQL语句,单通过配置就能实现对数据库的操作。
当然,为了实现这个目标,Hibernate也设计的非常复杂、非常精巧。就不可避免的带来以下副作用:
学习成本高
配置复杂
调优困难
前两点不难理解,单说“调优困难”。
因为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开发技术的基础,是JavaWeb容器的基石,是行业标准。而现在流行的各种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),完全不必学习。将来真要用到,再查也不迟。
最后
上面是我的一家之言,肯定有武断之处,见谅!

最后,祝你学习顺利。





上一篇:常用的PHP工具有哪些
下一篇:如何了解java并发编程
官方网站:http://www.cnitedu.cn
回复

使用道具 举报

1248

主题

1417

帖子

4810

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
4810
QQ
 楼主| 发表于 2018-12-26 14:06:40 | 显示全部楼层
如果我是一个新人,想学后端的Java开发,我会这么学:
初级阶段
拿本core java,把java的语言特性熟练掌握,学会io/nio/net/jdbc这些基础知识,熟练使用util包中的map/set/list/queue,掌握多线程编程并熟练应用concurrent包中的工具。
中级阶段
有了初级阶段的知识储备后,找本讲HTTP协议的书来看,然后把Netty框架的代码下下来,看看它如何用初级阶段提到的知识去实现一个HTTP Server/Client。
理解了Netty的实现后,就能很容易学会使用Vert.x、Node.js这类异步事件驱动的平台框架。
高级阶段
取决于想往哪个方向走,有数据库、大数据/NoSQL、各类中间件。
想做数据库,得把基本的数据库理论基础补上,阅读H2数据库的代码是Java程序员从事数据库开发的最好起点。
大数据/NoSQL方向更加庞大,通常阅读Google的老三篇是起点,然后学习hadoop/spark/flink,hadoop权威指南那本书可以快速了解大数据方向的概况。
中间件稍微容易点,有服务框架、消息中间件、分库分表这类传统中间件,不太需要多高深的理论。
JVM
找本专门讲JVM原理的书来读读即可,除非工作需要,HotSpotVM的代码能不碰就不要碰,不要担心面试时碰到面试官问HotSpot VM的实现细节怎么办,真懂HotSpot VM实现细节的人在国内屈指可数。
补充
有网友看了觉得这样学就废了,意思是觉得容易或没用吧?2010年我就会netty的代码了,三年前我重新做web项目,不想用spring全家桶,找到了vert.x,读了一个下午官方的文档我就拿来开发应用了,vert.x的核心还是基于netty的,vert.x web也只不过在netty的http协议实现之上做了一层包装。
达到中级阶段足够开发java web应用了,谁要是觉得简单,有机会被我面试时最好做好心理准备,一个netty就能把你问出汗。
再补充
看了几个其他高赞的回答,你们若是到了我这把年纪还想用spring撸点刚毕业的新人就能做的java web应用,请忽视我说的。
知乎的受众群就这点技术追求?!jdbc都不学,你连给某个数据库实现个jdbcdriver的能力都没有,你连MyBatis的代码都看不懂,真的就是个只会调api的低端CRUD码农了,还想个毛线的架构师,来我这应聘连个初级程序员我都不想给。

官方网站:http://www.cnitedu.cn
回复 支持 反对

使用道具 举报

1248

主题

1417

帖子

4810

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
4810
QQ
 楼主| 发表于 2018-12-26 14:07:18 | 显示全部楼层
后端得从Servlet学起,必要时看看Http协议,像常用的请求响应首部含义、状态码都得自己动手试试;然后折腾一下原始的AJAX请求。有了这些基础,折腾一些框架,或者学SpringBoot就很快了,看看视频就行了。
设计模式、IO、并发这些都是Java基础里要学扎实的,不过个人感觉这些首次学Java时候没有应用场景很难学精,后面在学框架时遇到相关问题不要放过再学习提高的机会。
官方网站:http://www.cnitedu.cn
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

IT培训网

QQ|小黑屋|手机版|cnitedu Inc. ( 豫ICP备16023996号-1 )

GMT+8, 2019-7-17 20:56 , Processed in 0.130544 second(s), 11 queries , File On.

Powered by Discuz! X3.3

© 2011-2017 cnitedu Inc.

快速回复 返回顶部 返回列表