即将毕业,前途迷茫,想学Java的进

即将毕业,前途迷茫,想学Java的进:Java与企业级项目开发,高薪就业的秘诀
前言
Java无疑是现在以及可预见的将来最热门的软件开发技术,随便在任何一个求职网站(比如51job、chinahr等等)搜索关键字:java,一定是软件开发相关的搜索结果最多的。每一个刚刚找到工作的学员,回来的反馈都包含有同一个信息:现在学Java真好找工作!现在的Java程序员正是企业最需要的时候!如果你是一位有2到3年工作经验的Java程序员,平均薪资5000元/月以上就是现在业界认可的水平。对于经验比较丰富、分析及设计能力较强的程序员,薪资甚至可达8000元/月以上。

我从2000年开始从事JAVA相关项目开发,一直到现在,接触过各种各样的项目,接触过JAVA及其相关技术中的各个部分,也接触过各种各样的JAVA初学者、JAVA资深开发人员、客户、项目经理等等等等。因为本文的主题是面向初学者,所以,我就侧重于把与初学者交流过程中的一些体会总结一下,以供大家借鉴。

无数刚刚进入培训班的学员,都向我表达过这样的看法:“原来Java还有这么多东西要学呢,我曾经以为Java也就是JavaSE那些东西了”,“原来企业级应用开发(企业级项目、JAVAEE)才是Java最重要的核心,我还以为自己把一个坦克大战编写完就知道了什么叫项目,可以去找工作了呢,结果学完了坦克大战其实连项目的皮毛都没有学到,学到后面,才知道自己当初是多么的无知,也才知道什么才叫真正的项目开发!”,“原来Java是用来做项目的啊!”(什么?你还不知道什么叫项目?你还不知道项目究竟是个什么东西?你太落伍了!赶紧向你的师兄师姐中的牛人们了解一下吧!)

所以,我强烈地意识到,普及JAVA的常识是当前最紧迫的任务,其中最核心的就是让大家了解,如果你想从事JAVA开发,你究竟要学哪些东西,以及如何学习这些东西。

基础知识
Java就是用来做项目的!Java的主要应用领域就是企业级的项目开发!要想从事企业级的项目开发,你必须掌握如下要点:
1、掌握项目开发的基本步骤
2、具备极强的面向对象的分析与设计技巧
3、掌握用例驱动、以架构为核心的主流开发方法
没有人愿意自己一辈子就满足于掌握了一些代码实现的技巧,别人告诉你要实现什么,你就用代码堆砌来实现别人的要求!你必须学会从整个项目的角度去思考!你必须学会假如你是项目经理,你该如何思考!你必须学会假如你是架构师,你该如何思考!你必须掌握针对某个特定问题领域的分析方法!

这些内容绝对不是空泛的,更不能泛泛而谈,我们将会从实际项目开发的角度,让你对这些内容有所认知,并进行实际的锻炼。

磨刀不误砍柴工,下面,我首先从基础知识部分开始,让大家对自己的目标有所了解。假如你愿意从事Java开发的工作,那么首先要给自己树立目标,你究竟要达到一个什么程度?

Java技术包含的主要内容(我强调是主要内容,所以我不会列出JAVA涉及到的所有技术):从技术点上来划分,Java主要包含JavaSE和JavaEE(JavaME我就不提了,因为相对用得比较少)两大部分;从应用领域来划分,可包含企业级应用、桌面应用和手机应用三大部分!

从技术点划分来看,JavaSE是Java平台基础中的基础,打好基础绝对是非常有必要的!JavaEE需要学习的主要包括Servlet、JSP,以及用于辅助开发的SSH三大框架

下面是知识点的一个简单列表和总结,我列出了其中一些重要的点,你可以看看这些名词或知识点,看是否能说出个一二三四来。

JavaSE
----基本语法、数据类型、操作符等:int、long、Integer、Long、if、else、for、while
----面向对象:class(类)、Object(对象)、instance(实例)、state(状态)、behavior(行为)、field、method、new、可见性(访问控制)、attribute、property、package、import、static variable、class variable、instance variable、heap、method area、stack、GC(垃圾回收)、override、overload、对象转型(casting)、多态、this、super
----异常处理:理解编译期错误和运行期错误的区别、Exception、RuntimeException、checked exception、unchecked exception、try、catch、finally、throw new XXXException、throws XXXException、异常处理的基本原则
----数组与集合:数组的定义和使用方法、Collection、List、Set、Map、ArrayList、HashSet、HashMap、Iterator、equals、hashCode、Comparable、Comparator
----常用类:String、intern、常量池、StringBuffer、java.util.Date、SimpleDateFormat、Regex(正则表达式)
----反射机制:Class、Method、Field、invoke、newInstance、BeanUtils(apache-commons)、PropertyUtils(apache-commons)
----输入输出流:InputStream、OutputStream、Reader、Writer、Adapter设计模式与原始流类、Decorator设计模式与包装流类、对象序列化和反序列化
----多线程:Thread、Runnable、sleep、wait、notify、synchronized、lock

Servlet和JSP
----HttpServlet、doGet、doPost、HttpServletRequest、HttpServletResponse、request.getParameter()、request.setAttribute()、request.getAttribute()、request.getSession()、ServletContext、Filter、web.xml、tomcat、forward与redirect、http协议的无状态性、cookie、JSP Scope Object、<c:out …/>、<c:forEach …>

HTML与JavaScript
----你需要能够理解常见的网页标签、理解在网页中引入JavaScript的方法、以及JavaScript的基本语法与使用方法

以上,就是你进一步学习Java所必备的基本知识。特别是一些个专业术语和名词,看到这些名词,如果你像看到亲爹一样亲切,那么说明你对Java的基础知识就很熟悉了。

但是,一定要切记,这是基础知识,非常重要的基础知识,但千万不要骄傲自满,因为打好基础是为了后头更重要的任务!如果你能够把基础知识打得很牢固,那么以后的学习将是一个快乐的过程,否则,以后继续的学习将是你痛苦的源泉!看到上面这些英文有点头晕了吗?

马上行动
那么,请你闭着眼睛在脑海中想象一下,在企业招聘的展台前面,你费尽九牛二虎之力挤到了最前面,递上你的简历,负责招聘的人员只是轻描淡写的说:“放这里吧!”或甚至说:“我们不招没有经验的技术人员”,一棍子就把你打死了!甚至你已经尽可能的放低自己对工资的期望值了,但你也只能看着漂亮的展台,看着非常具有吸引力的薪资和职位,却与这些无缘!你会在心里开骂:“~!@#$$%,谁一毕业就有经验,你面试官一开始就会有经验啊?@#!@#$%$%”

接下来,请你在脑海中再想象一下,你只是把简历挂到了招聘网站上,还没有进行定向投递,就每天电话不断,面试机会很多,经过筛选,有多家公司愿意拿出8000元/月以上的工资来吸引你去入职!而你还在纠结于究竟要去哪一家更好!(现在的公司真的很缺人!那你真的是他们所需要的人吗?你如何才能成为他们所需要的人呢?),很多学员在毕业之后给我打电话,就是这种情形,他们正在快乐的发愁着。

现在,请你告诉我,哪一种场景是你想要的?我想我不应该听到不同的答案!

第一种场景也许是你经常经历的,第二种场景也许是你不敢想象的!你怀疑这种机会真的会降临到你头上吗?在现在这个人才流动频繁的社会中,对于从事专业技术开发的人来说,很少存在怀才不遇的情况!特别是程序员这个行业。这个行业存在的普遍情况是:非常缺乏有经验的、能够独立解决问题的程序员。如果你能成为这样的程序员,那么第二种场景就会变为现实。

所以,与其抱怨公司不给你机会,不如马上行动起来,让自己成为一个充满竞争力的人!如果你已经决定进入Java开发这个行业,那么你的目标就是成为一个具有极强竞争力的Java程序员!如何才能成为一个充满竞争力的Java程序员呢?你的目标在哪里呢?换句话来说,你究竟要学什么东西,要学到什么程度?

我给你的第一个目标:上面我列举了最基础的Java知识,对于这些专业术语或知识点,我随便挑出其中一个来,请你能够就以其相关的内容给我连续聊至少10分钟以上!

如果你达到了第一个目标,那么,接下来的任务就显得不那么艰难了!

三大框架
我们接下来要学习的是Struts2+Spring+Hibernate三大框架。对于初学者来说,这三大框架被赋予了太多神秘的色彩,似乎它们是重中之重的知识!但是对于拥有多年Java开发经验的专业技术人员来说,对于那些Java牛人来说,却对这三大框架不太感冒!难道它们不重要吗?

现在很多企业都在用这三大框架,所以很多企业也把掌握这三大框架作为招聘的必备条件。不可否认的是,也有很多大型企业没有用这三大框架,这些企业经过多年发展,自身已经有一定的技术积累,也形成了自己独特的技术框架体系。这三大框架既可以说很重要,也可以说不重要。

说重要的原因在于:这三大框架对JavaEE开发中所存在的普遍的问题,提供了优美的解决方案,它们蕴含了这个行业中最NB的开发人员的努力和想法,所以,学习这三大框架,你就可以窥探到这些处于技术巅峰的牛人们究竟对一个问题是怎么想的,通过一种什么样的设计思路去解决问题的。所以,对于你来说,你没有太多项目开发的经验,经验是什么?经验就是你知道可能会遇到哪些问题,针对哪个问题可以有哪些解决方法,在某个情景下,哪种解决方法是较好的,哪种方法不太好等等!如果你没做过什么项目,你根本就不会去意识到你可能会遇到哪些问题,而这些问题往往又是非常关键的!解决得不好,会影响到你的程序的稳定性、可扩展性等等!三大框架就给初学者提供了了解你以后可能会遇到哪些问题,以及针对这些问题的解决方案!

当你了解了这三大框架为什么是重要的,那么你也就能理解,为什么这三大框架也可以说是不重要的。如果你曾经开发过很多项目,你碰到了各种各样的问题,凭着你的技术功底,逐个击破了这些问题,在这些人眼里,三大框架(是不是还有N个框架?呵呵)都是浮云!

你属于哪一种人呢?如果你没有太多项目开发经验,那么三大框架对于你来说就是非常重要的!而且,由此你也知道了该怎么去学这三大框架。对于三大框架的学习而言,着力点在于给你展示问题,并触发你自己主动的思考,我们鼓励你提出自己的想法,也许你的想法很白痴,但那毕竟是你自己的想法,如果你不知道牛人的想法,那你怎么知道自己的想法是很白痴的呢?在这种思想的碰撞过程中,你就会逐渐提高自己!所以,三大框架学完之后,你不应该只是看到一大堆配置文件,你不应该只是看到了一些Action,一些Service,一些映射文件,你不应该只知道session.save/update/delete,你不应该只是知道struts2中有一堆interceptor,你不应该只是看到一堆jar包……

如果你只是知道拷贝一堆jar包,定义一系列配置文件之后,SSH三大框架就能够运行起来了,也可以给你干活了,那么,很悲哀的是,你仍然没有掌握三大框架的精粹!请你回答以下问题:

Struts2:
为什么每次请求都要创建一个Action对象?
ModelDriven拦截器的配置中refreshModelBeforeResult解决了什么问题?
为什么在web.xml中配置的StrutsPrepareAndExecuteFilter要过滤所有的请求?
请你给我谈谈ValueStack?
Struts2是如何实现MVC设计模式的?

Spring:
你为什么要用Spring?
请你聊一聊IOC/DI?
什么是声明式的事务管理?为什么要使用声明式的事务管理?Spring如何实现声明式的事务管理?
把spring和hibernate集成,定义事务管理特性的时候,为何要将除了添加、删除、更新操作之外的方法,即主要执行查询任务的方法定义为read-only?

Hibernate:
请你谈谈你对OR映射的理解?
很多人说Hibernate不适合大项目,性能有问题,你是如何理解的?
Hibernate为什么一定要定义一个数据库标识?
为什么Hibernate建议你的实体类实现hashCode和equals方法?
谈谈你对Hibernate实体类中的数据库标识与数据库主键之间关系的认识?
谈谈你对Hibernate关联映射与数据库外键之间关系的认识?
调用session.save()方法,hibernate一定会发出insert语句吗?谈谈你的理解
调用session.update()方法,hibernate一定会发出update语句吗?谈谈你的理解
请你聊一下以下名词、概念或用法:lazy、lazy=”extra”、inverse、fetch、fetch=”join”、fetch=”subselect”、batch-size
配置了lazy=”true”一定会实现懒加载吗?
请你谈谈Hibernate中的“N+1”问题
请你谈谈Hibernate有哪些最佳实践?

以上并非SSH中全部重点的问题,但它们能考察你能否灵活运用SSH框架!如果你能深刻理解这些问题,再配以合适的实战项目训练,你也会逐渐成为牛人!

项目!项目!项目!
经过前述阶段的修炼,我想,你已经迫切地需要一个极具挑战性的、能够把所有知识点融合起来、体现你的学习成果的项目了!请记住你的目标:让那些公司哭着喊着要你到他们公司入职!当你入职之后,让他们用各种优惠的福利条件把你留住!要达到这个目标,你还有很长的路要走!

对于我刚才列出来的JavaSE中的知识点,每个知识点你都可以聊上10分钟以上了!对于SSH中的各种原理,你也了解透彻了,你甚至可以每个地方都能给我聊上1个小时以上了!其实,你仍然还没有接触到Java技术的核心!不过,虽然你还没有接触Java技术的核心,但你放心,你已经打下了很好的基础!接下来,我就要聊聊Java技术平台的核心了。

不管你是学Java还是别的技术,你的根本目的在于给客户创造价值!否则,你下大力气学习的东西,随着技术的进步和更新,很快就会过时!所以,技术的核心在于用技术创造有价值的成果!也就是说,客户需要什么,你就要用技术把客户需要的东西给他造出来!一个公司之所以要用各种福利条件极力挽留你,是因为你能够给公司带来极高的利益!那么,你有什么可以给公司利用的呢?公司最看重你的哪方面的能力呢?

我们首先要给自己定位,然后再来谈能力。我给你的定位就是:软件公司Java核心技术人员或架构师!如果你的定位是公司老总,那么接下来的内容你就不用看了。一个软件公司主要的业务就是做项目(或产品),所以,更加具体的定位就是:你要能够把一个项目拿得起来!你要成为这个项目中最中坚的力量!

还记得我一开始讲的吗?你必须掌握的内容:

1、掌握项目开发的基本步骤
2、具备极强的面向对象的分析与设计技巧
3、掌握用例驱动、以架构为核心的主流开发方法

这需要的能力太多了,其中最核心最基础的就是建模能力(现在最主流的就是面向对象建模!)。什么是建模能力呢?

我给大家一个面试题(这个面试题是我的一个学员给我提供的,也是我在课堂上要求学员去自行完成的,感谢潘同学给我提供的素材):

一个保险公司的保险卡管理模块:销售人员领取保险卡信息(保险卡数量、卡号、领取日期),然后直接销售给客户,销售完毕后,将保险卡信息录入保险公司系统内部(销售人员信息、购买人信息、购买的保险卡数量、卡号等),客户登录保险公司网站激活保险卡,需要填写(保险卡卡号、激活密码、被保险人信息、受益人信息)

要求就是:如果这个模块交给你来做,你要怎么做?你要解决哪些问题?你可否画个图,给我描述一下你的想法是什么吗?

这只是一个面试题而已,因为只有简单几句话,所以我把它放到这里,让大家感受一下所谓建模要解决什么问题。而业务领域的问题实在是太多了!也许一个几十上百页的需求文档才能把某个业务领域的问题描述清楚,而你的职责就是要把它们实现出来!

某个公司要开发一个考勤管理系统,要求与现有的人力资源系统对接,你是主要的技术负责人,那么,你要做哪些工作呢?

某ERP项目要实现一个排班管理模块,交给你去完成,你如何去完成呢?

不要抱怨项目经理给你的信息太少(只有几句话),不要抱怨客户没有描述清楚他们的需求……你的价值就在于理顺所有的问题,用各种手段获得你想要的信息,按照一定的思路汇总,并在特定的时间里逐个解决它!

是的,这样的要求对于初学者的你来说,也许是太高了!我的目的不是让你现在就能够把一个项目完全拿起来(因为这因人而异),而是让你意识到你学习技术的方向!你应该意识到学Java不是一个坦克大战、一个网络飞车、一个CMS、一个DRP、一个OA那么简单,你不要沉迷于那些技术细节(虽然也是有必要的,但不要转牛角尖),不要满足于实现了CRUD式的项目需求(虽然这是基础中的基础),在你的前方,永远有一个目标在那里,需要你去努力追赶!

今后你将面对更加繁杂的需求,在学习和培训阶段,绝不要被各种培训机构所谓“真实的商业项目”所迷惑!你学习项目的唯一目的,就是:学习如何将需求转化为实现,如何对需求进行分析,如何建立概念模型,如何理顺各种概念之间的关系,如何进行设计,如何选择合适的技术来实现你的设计方案,如何对你的实现进行测试,如何解决你所遇到的形形色色的问题(性能、需求变更等)。当你真正到公司里面从事了几年开发之后,你就会同意我的说法!

所以,我的项目训练理念就是:尽可能多的展现在项目开发中所遇到的各种问题,并触发学员自行思考解决方案,我会针对某些常见问题设定需求,要求学员去实现,这样学员就会自行发现问题!尽可能多的让学员吃苦,然后对问题进行点拨。对于学有余力的学员,我会触发他们思考更复杂的需求如何进行分析和设计;对于学习能力较弱的学员,我会要求他们实现基本的需求。

我不会为了降低学员的学习压力而降低对项目开发的要求!相反,我鼓励学员将自己的认识和问题进行分享,鼓励学员提出自己独创的思维!

总结起来,在项目学习阶段,核心思想就是:发现问题、理解和分析问题、解决问题。

在项目学习阶段,第一步就是掌握方法,以及常见的实现技巧。我们在办公自动化(OA)这个项目中集中了大量的问题,要解决这些问题,你必须付出全部身心,必须将你曾经学过的东西形成系统性的想法(而不是零碎的知识点),学以致用,你的脑子要高速运转,才能掌握分析与设计的精粹!学员的普遍反映就是:这个项目(OA)很难,但收获很大!

项目学习的第二步就是大量的项目实践,在培训期间,你肯定没有时间再去用代码一行一行地实现第二、第三甚至更多的项目了!我说过你在项目中要锻炼的主要是建模的能力,因此,在项目实践的时候,除了OA之外,我们提供大量的项目需求,学员必须自行分析和理解这些需求,对需求进行建模,理解其中的业务流程,并提出自己的想法!不仅如此,我还要求每个学员必须进行总结,我会针对这些项目提出各种各样的问题,学员必须针对这些问题,把自己的思路和想法表达出来,而且是当着所有学员的面,把自己的想法大声表达出来!

你感到胆怯了吗?我们要培养的是有自己独立思维的人,我们要培养的是能够初步具备担当起项目技术负责人职位的人!如果你连自己的想法都不能够流畅的表达出来,你如何期望到了公司里面能够有进一步的发展呢?你如何确保你能够与客户沟通想法呢?

在整个培训的过程中,你将不断经历面向对象思维方法的磨练,你将有无数的机会袒露你的不足和弱点!从一开始的词不达意,到流畅的沟通想法,我相信只要你付出,就一定会有收获。

我们是谁?
写作本文的目的,是希望有更多的人可以了解领航致远的培训理念,这种理念将会一直贯彻实施,并会在学员不断的反馈中持续完善!我们也意识到还有很多需要改进的地方!也有意与同行沟通想法,让我们多一点踏实的作风,少一点浮夸的做法,切实为软件开发行业培养更多的人才!这也是我们创办领航致远的根本宗旨。

同时我们在网上公布了从基础知识(包括JavaSE、Servlet、JSP、HTML、CSS、JavaScript)到基本项目开发(网络飞车游戏、基于Servlet和JSP的CMS内容管理系统、基于SSH的消息管理系统等)的视频,这些文章和视频不可能让你成为专家,但能让你认清方向,给正在艰苦的路上探索的你打打气、鼓鼓劲,让你不走歧路,提供些许帮助。如果你对Java软件开发有兴趣,如果你想进入一个全新的行业,那么也许接受四个半月的系统性的锤炼是你更佳的选择!随时欢迎与我们联系,对各种问题进行探讨。

想了解更多资讯,请访问网站:http://www.leadfar.org
免费400多份高质量视频主页地址:http://6.cn/profile/17724918.html
OA办公自动化项目演示地址:http://www.leadfar.10dig.net:8080/
CMS内容管理系统项目视频地址:http://6.cn/playlist/307742
CMS内容管理系统演示地址:http://www.leadfar.10dig.net:8080/cms/
CMS内容管理系统后台管理地址:http://www.leadfar.10dig.net:8080/cms/backend/login.jsp
基于SSH的消息管理系统项目视频地址:http://6.cn/watch/14789303.html
网络飞车游戏项目视频地址:http://6.cn/playlist/304399
基于Socket和多线程技术的多客户端聊天程序:http://6.cn/watch/14593942.html
线程的协作示例程序:http://6.cn/watch/14592846.html
基于Swing、UDP技术的聊天程序:http://6.cn/watch/14594994.html




你可能感兴趣的:(java,Hibernate,框架,项目管理,企业应用)