不灭的火

革命尚未成功,同志仍须努力下载JDK17

作者:AlbertWen  添加时间:2018-04-15 09:28:57  修改时间:2025-06-05 12:33:00  分类:08.Java基础  编辑

摘自:https://www.zhihu.com/question/21142149/answer/346032466

 

陈龙   陈龙 全栈架构师

不管你是在校、出来实习、在培训班、刚刚毕业,只要想在未来三五年专心做技术,想从新手成长为一名架构师,都可以先关注我。我只要有点时间就会写点东西。如果觉得自己的问题能代表一大票新手,也别单独私信我了,直接在知乎里创建一个问题,然后邀我回答,这样可以分享给更多人。

未来三五年你的职业规划是什么?这也是我最近几年面试新手必问的一个问题,也是你自己在开始程序员之路前自己需要清楚的问题。

下面是原答案------------------------------------------

 

不要再学Struts了!!!

也不要再用JSP了!!!

更不要在URL里面放动词(get,query,delete,create,do)了!!!

不要去学那些已经变成历史尘埃的东西!!!

我的回答就是从这个问题引流的,把你从SSH/SSM拐走的!

 

Java服务器端学 Spring Boot/Spring MVC(RESTfull)/JPA(Hibernate Implementation)。

作为00年毕业的老程序员,02年开始实践Struts,见证了Struts/Spring/Hibernate的整个发展过程,我对Java新手的建议就是:现在开始学JHipster。

关于JHipster可以先看我在另外一个问题的回答。这里先说一句:JHipster不是新框架,而是个超级Boilerplate。最好等着马上发布的5.0,跟着JHipster一起升级到Spring 5/Spring Boot 2/Spring Cloud 2,开始Java服务器端的Microservices和Reactive Programming之旅!

如何看待JHipster框架?

评论区那么多不理解的,超乎我的想象。做技术,不要只顾着低头走路,也要看方向!看方向往往更重要!!!汽车已经发明了,大家都奔驾校的时候,你就不要去学骑马了。你非要说骑马也是技术,必须学,也行,但是这技术日常出行真的是用不上了。开阔你的视野,了解整体架构蓝图,然后在这个整体架构上补全你的技术板块。而现在的这个架构已经不是SSH了,里面也没有JSP这个板块。

 

关注这个问题的都是Java服务器端程序员,所以我建议你们了解一下前端。做web开发一定前后端协同发展,学会两条腿走路,也就是全栈。对于新手来说,这个肯定比较难,但是要有一个清晰的目标,在达到这个目标的路上不要把时间浪费在Struts和JSP上。这里推荐我的另一个回答:

vue,react之类的框架是不是弱化了对前端人员js水平的要求?

视野还局限在服务器端,认为开发是服务器端的天下,HTML只要用JSP输出就可以了的,看我另一个回答:

HTML5跟HTML的区别;我个人觉得HTML5不是增加了一些标签,还有什么功能?​

评论里还有提到jfinal,我竟然第一次知道有这么个东西。你如何选择框架,看我这个答案:

当你作为前端 Leader 做前端技术方案选型的时候,你是怎么做决策的?​

上面这个答案是回答前端如何选择框架的,但也完全适用于服务器端,也适用于个人日常选择框架。现在处于前端技术的爆发期,快进入稳定期了,所以还要继续面对选择恐惧症一段时间。Java服务器端基本尘埃落定了,只是现有规范版本的不断升级。你们可不知道,服务器端的15年前就是前端的今天,那时候Rod Johnson(Spring)+Gavin King(Hibernate)的阵营和J2EE官方阵营之间的论战和拉锯。

 

评论里很多人关心的几个问题,我在评论也回复了。现在把回答放在答案里,便于大家找到:

1,到底学不学JSP?

JSP知道一下就行了。JSP也不是什么网页标准,HTML5才是。JSP只是Java 若干规范中的一个,Java所有的规范都要学你也学不完。JSP只是Java Server Page,现在主流的架构已经不需要服务器端动态生成HTML了。如果你面试遇到还在用JSP的公司,果断不去就行了。这样的公司你就算入职了,技术也不会得到提高。

JSP绝对不像XML和JSON一样是一种通用技术。XML和JSON是数据交换的通用技术,和语言无关,而JSP仅仅是Java语言在服务器端动态生成HTML的技术。JSP也是J2EE(现在改叫EE4J了)里绝对必须跳过的一个环节,因为最佳实践告诉我们:服务器端不应该知道客户端任何表现和交互类业务逻辑!早期(Spring出来之前),大家认为只有用了EJB(Enterprise Java Bean)才算J2EE,Rod Johnson的文章(Expert One-on-One J2EE Development without EJB)让大家知道没那么复杂,Spring+Hibernate的组合比EJB简单的多。现在竟然出来JSP是J2EE跳不过去的一个环节...

只能说ASP,JSP这一类xxx Server Page都是早期IE6称霸浏览器时代前端技术没有发展起来之前的产物。

企业应用其实早就该淘汰JSP了。JSP的升级技术是JSF(Java ServerFace),但是由于前端技术的迅速发展,市场早已偏离了SUN/Oracle的预判,JSF从来就没有被大量使用。前端使用Angularjs/Angular/VUE/React,至少用Extjs/easyUI。前后端分离开发分离部署,前后端之间只有HTTP上的JSON通信,服务器端不应该知道界面上的任何东西。前端JS发送AJAX请求调用服务器端提供的Restfull API访问Resrouces,服务器端相应JSON数据。前端拿数据去做什么,怎么展现,用户经过什么样的操作才发送的这个AJAX,服务器统统不关心。我从07-09年用Extjs,09-11年用GWT,这段时间我都做企业应用,应该说早就看出JSP要淘汰了。

 

2,哪里找资料?

我个人认为的任何软件技术的最佳入门路径都是:1:先看官方文档。好的技术和框架,官方文档一定全面丰富详实,JHipster就是这样,http://Spring.io更是好文档的典范。所以先把官方文档过一遍,理解的就理解,不理解的要记住在文档的哪一节。2:开始实践!有些知识只有实践的过程中才能理解,并且加深认识。遇到问题,知道这个问题对应文档的哪一部分,然后去查文档。3:做完一两个实际项目之后,返回去再读一遍文档,这时你会发现自己站在一个新高度上。4:1/2/3部分循环...

 

3,HTML怎么生成?

HTML是键盘敲出来的啊,不需要服务器端提供模版引擎动态生成。前端静态资源(HTML,JS,CSS,图片...)只要放在(部署)HTTP Server(Nginx/Apache)上就行,甚至放在CDN,等着浏览器请求加载。前端用框架操作HTML(Template)绑定数据(JS)生成浏览器最终的DOM(VIEW)。问到这个问题的,都是已经被JSP固化了思想的人,也就是手里拿着锤子看到什么都是钉子,认为和界面相关的都应该且必须由JSP完成。

 

4,为什么URL里不要包含动词?

URL是Uniform Resource Locator,统一资源定位。URL是用于资源定位的,只允许包含资源位置的信息,不能包含具体操作(动词)的信息。一次HTTP请求就像一次快递,快递单上写的是URL和header部分,包裹里面的是body(payload)部分。邮寄地址写:xx市xx街道xx号,但是不能写:"请投递到"xx市xx街道xx号。具体操作行为由HTTP的method(GET,POST,PUT,DELETE...)说明。

面试的时候只要问一下HTTP有哪些method就基本清楚对方是否了解REST了。只用过GET,POST的人,赶紧升级你的技术体系。

 

5,如果不用JSP生成HTML,前端接收JSON,SEO(搜索引擎优化)怎么办?

企业应用大部分不需要SEO。因为有些应用是内网的,公网隔离。有些应用则没有要被大众搜索到的需求。

如果有SEO的需要,那么现在三大框架基本上都有了SSR(Server Side Rendering)技术。

6,学不学mybatis。

学吧。因为有很多公司在用。

但是,说实话,我没用过Mybatis。从名字还叫ibatis的时候,我就只是了解,但没实际用过。Java服务器端持久化应该采用JPA(Java Persistence API),而Hibernate的JPA实现是被最广泛采用的。Hibernate可不是给不会SQL的人设计的,而是为了达到面向对象的思想。ORM嘛,把关系映射成对象,用操作对象的思想来操作数据。就拿我建议学习的JHipster来说吧,服务器端一直没有整合进Mybatis。有人在Issues里问到这一点,看一下JHipster团队的成员是怎么回答的:does Jhipster support Mybatis? · Issue #5195 · jhipster/generator-jhipster 这个回答,也解答了我很多年的疑惑。

如果你开发一个新应用,数据库是全新设计的,或者你对数据库表结构有完全把控,那就用JPA。

如果你开发一个应用,要整合已经存在的数据库。那个数据库表结构早已被定义好,你无权修改,也不能修改。那就用Mybatis。

 

 

所有新手请记在心里:

大家一定要明白一点,整个IT产业(软件和互联网)都是朝阳产业,就像一个婴儿,每天都会有变化。我毕业18年了,你们可能今年毕业,但是我们的上一代人没有做程序员职业的。上一代人中少有的一点编程人员可能都在科研单位或大学,完全没有成为一种职业。我们都是这个职业的第一代人!技术怎么可能在这一代人手里就停滞!

建筑业,从原始人开始就挖洞了。机械,从工业革命就开始了。这些产业还在不断技术进步更新换代,软件怎么可能停滞不前!

记得01年做对日外包的时候只会Servlet,然后要用JSP,网上的JSP资料非常少,也没有Google/Baidu。自己一个人跑去西单图书大厦,发现就没有JSP的书,还都在讲Servlet。那时候用Servlet输出拼好的HTML就像现在前端React的JSX。记得02年韩日世界杯前后吧,在海淀黄庄站坐717回家,车上听一个人对另一个人说:你知道Struts吗....。那是我第一次知道Struts,也是Struts让我知道有Apache这么个网站,这个网站上有好多优秀的Java开源项目。到06年的时候又意识到Servlet才能坚持到最后,而且也不用输出"<xxx></xxx>"了,只有JSON...

 

我的回答没有针对"如何学习...", 而是针对"新手"这个词。你是新手,可以没有高起点但是要有新的起点!你是新手,可以没有经验但是要有眼光!你们是90后哦!我们团队刚刚招聘了一个99年的妹子,明后年我都可能招到00后了...

在我之前的工作经历中,见过无数人,他们把大学毕业后进入一家公司时用到的技术就作为这辈子不变的吃饭工具。他们心中对技术的理解就是学了这个然后永远用下去。这简直太可怕了,但是这种人也太多了,你们千万不要成为这种人!!!评论里说还有很多公司在用JSP的,那你们去这种公司吧,和这群僵尸为伍吧...