那么,在JAVA的这些课程中,哪些才是大,才是要事呢?请继续读下去。
JAVA自学之路 五:问题解决之道
[转载请注明出处:http://www.bjsxt.com/zixue/zixuezhilu_3.html] 既然是学习,就不可能不遇到问题。
既然是自学,就没有方便的和老师探讨的机会。
那么,遇到问题之后,环境配不通,程序调不过,运行不正常,遇见这些恼人的问题的时候,该怎么办呢?
首先我要恭喜你,遇见问题,意味着你又有涨经验的机会了,每解决一个问题,你的JAVA经验值就应该上升几百点,问题遇到的越多,知识提升的越快。
但是总是解决不了也是很恼人的,怎么办呢?
我一般要求我们的学生都是这样来进行的。
当你遇到一个问题的时候:
1:要仔细的观察错误的现象,是的,要仔细
有不少同学的手非常快,在编译一个程序的时候,报了一大堆的错误,扫了一眼之后就开始盯着代码一行一行的找,看清什么错误了吗?没有!
有的时候安装软件出问题了,一个对话框弹出来说出错了,马上举手问老师:“不得了了,出错了,出错了”。
“什么错误?”
“还没看呢?”
这都是典型的不上心的方法!请记住,学习编程并不是一件很容易的事情,自己首先要重视,要用心才可以。
在开发中,仔细观察出错信息,或者运行不正常的信息,是你要做的第一件事。
读清楚了,才能在以后的步骤中有的放矢,哭了半天,总要知道哭的是谁才成。
这里又分三种情况:
A:错误信息读懂了,那么请进入2步:要仔细思考问题会出在哪些环节
B:没读懂,愣是一点没看懂,进入第4步吧:google
C:读了个半懂,有些眉目但是不太能确定,第2步和第4步结合着来。
2:要仔细思考问题会出在哪些环节(重要)
当你读懂了一个问题之后,要好好的思考这个问题可能会在哪些环节上出错。
一辆汽车从总成线上下来,车门子关不上!
哪错了?你怎么查?
当然是顺着生产线一站一站的查下来。
程序也是一样的,也是一系列语句完成后产生的结果。
写一个网络程序,总是发现服务器端打印不出接收的数据,有几个环节会出错?
仔细分析这个现象的环节:
客户端产生数据->按“发送”按钮->发送到服务器->服务器接收到后打印
这几个环节都有可能会出错:
有可能客户端根本就没产生数据,有可能发送按钮按下去后根本就没发出去,或者发出去的不是你产生的东西,或者根本就没连接网络,或者发送出去服务器没有接收到,或者接收到之前就打印了等等等等。
学着去这样仔细的分析程序的环节和这些环节可能会产生的问题,你的经验值定然会大幅度快速的提升,这样做很累人,但是一件事情如果做下来一点都不累的话,这个东西还有价值吗?
在网页A输入了一个人的名字,提交到B,首先存储到数据库,然后再读出来,发现乱码!怎么办?
当然是分析环节:
客户输入->HTTP发送->B接收->存储到数据库->读出->展现到网页
每个环节都可能出问题,怎么才能知道哪里出的问题?继续往下读。
3:如何定位错误(重要)
分析清楚有哪些环节之后,下一步就是定位到底什么环节出错了。
定位有以下三种办法:
A 打印输出,比如java的System.out.println(),比如js的alert(),这种办法常用,必须掌握
B Debug,可以参考我们的视频《坦克大战》,详细讲了Eclipse的调试。
C 删掉一部分调试一部分,也就是去掉一部分的功能,做简化,然后调试剩下的功能,JSP和JavaScript常用。可以参考我们的视频《BBS》等
这些我说的比较简单,详细了解的话请关注以下我们的视频吧,在近期会逐步的将一些知识点的视频 进行免费的公布,http://www.bjsxt.com/download.html
4:如果还不行,google吧
还查不出来?恭喜你,你遇到的错误是值得认真对待的错误,是会影响你学习生涯的错误,问一下google或者百度吧。照着下面的方法查查看。
一般来讲,搜索引擎可以搜到各种知识点,我曾经跟同学们开玩笑说:“学会了怎么google或者baidu,其实没必要跟老师学了,自己全都搞懂了,尚学堂是没必要来的。”当然,只是玩笑,培训的作用有三个:
A:系统化知识
B:真实项目锻炼经验
C:少走弯路,节省时间
不知不觉开始做广告了,请原谅,处其位谋其事,总得为尚学堂说点什么:)
言归正传,如何查搜索引擎?
先精后粗,首先先进行尽量精确的查找,比如一个错误,SocketException,你怀疑它是在connect()方法出的问题,那么当然是选这样的关键词java connect SocketException
先中后英,本着以解决问题为主的想法,练习英文还是先放在一边吧,首先应该在中文网页中查询,还不行的话,搜索英文的吧,最近的尚学堂课程中会带大家阅读英文的书籍。有很多东西就像一层窗户纸,远看灰蒙蒙怪唬人的,你壮着胆子一捅,它就破了。阅读英文的书籍就是如此,不是想象中的那么困难:)宁可在沙场上战死,也不能被吓死不是吗:)
信息筛选,搜索出来的结果不见得能够完全匹配,建议大家多阅读前几页的搜索结果,多打开几个网页看看,不过,我的经验是超过3页一般就没意义了,所以超过3页还没有找到合适的答案,或许应该调整一下关键词,或者放粗整个搜索的结果了。
经常的进行知识难点的查询,如果一个问题牵扯的面比较广,就干脆到网上搜索一些相关的专题,比如“java 乱码 mysql” “oracle 创建用户”等等,如果有必要,不要犯懒,勤动手写一些小小的测试程序,来弄明白知识点的细节。这也是涨知识的重要的途径。
5:什么?还不行?那么就BBS吧
如果实在还不行,就到BBS上面问一问高手吧。
到哪个BBS上?
google或者百度不就行了么:)关键词“java论坛”“java bbs”
然后在搜索结果里好好的看看那些活动频繁的论坛,以后就是你经常光顾的地方了。http://community.csdn.net就很不错。
向别人提问是非常需要技巧的!
曾经有人问我这样的问题:“请问如何才能学好java呢?”
这个要求太泛泛了。
还有人给我一段代码甚至jar包也寄过来,然后说老师的我的代码中有个错误您帮我查查:(
我没有办法去花大量的时间建立环境去调试一个还不知道存在不存在的错误!
还有人在BBS上问这样的问题:“是否有人能帮我完成一个完整聊天的程序?请帮我写一个登陆模块吧!”
这个要求有些过分了,有人帮你做是你的运气,没有人帮你是正常反应。
向别人提问,应该首先确定你已经做了自己应该做的事,简单说是我前面列举的1,2,3,4步你都作过了,然后再求助于人。不要没有经过认真思考就草率的向别人提问,自己也不会有长足进步的。
那我该怎么样向别人提问呢?
在google或百度搜索《提问的智慧》,你会找到答案。
在这里我给出一个链接http://community.csdn.net/IndexPage/SmartQuestion.aspx,磨刀不误砍柴功,先花点时间去阅读一下吧。
得到别人的回答,要懂得感恩。
不需要去写信感谢,不需要支付费用,不需要那些花言巧语,做到下面这一点就够了:
当你逐步成为高手的时候,要回答别人在论坛上提出的问题,有时间有精力的前提之下!
6:还解决不了?问老师吧,这个只能是在你参加了培训的前提下了。
7:还解决不了?天哪,是不是思路从根上就搞错了?写信给我,让我也学习一下,共同进步吧。[email protected]@[email protected]
JAVA自学之路 六:项目的自学
[转载请注明出处:http://www.bjsxt.com/zixue/zixuezhilu_6.html] 现在就业竞争的激烈程度已经远远高于当年了,记得我当年毕业时,一个会编程的毕业生站到台上,大声问道:“我会ASP,月薪5000有没有人要?” 台下的企业马上哗的举起一大片手:"我要我要 !"
那时 没有任何项目经验也会有人提供学习的机会:)
这种好日子恐怕一去不复返了(有些夸张,但无疑当时找一份不错的工作是比现在要容易的多)
而现在,即便是各种必要的知识你掌握的差不多了,但还有一座大山横在你的面前,那就是-
项目经验。
有经验的程序员都知道,学习编程的最有效率的方式,恐怕就是把你扔到一个项目组,连滚带爬的做下一两个项目来,你马上会发现所有的知识点全都连到一起了,不再是分散的,而是形成一个整体了。那种感觉是仅仅深入钻研知识点而不写真实项目的人所不能体会的。一个项目就是一根绳子可以把大片的知识串到一起。
如果想锻炼实际开发的能力而不仅仅是背诵或者了解一些知识点,如果想成为真正的好手而不仅仅是背诵“回”字有几种写法,那么,作项目吧!
目前,各种编程的知识点变得越来越容易掌握,按照《JAVA自学之路 五:问题解决知道》中的各种办法也可以逐步积累自己知识的广度和深度,那现在什么才能够体现水平的不同?当然是项目经验。
目前,尚学堂的课程已经超越了知识点的研究和罗列,我们将在未来的时间里逐步公布各个知识点的视频,包括SSH、EJB等,这样做有两个好处:首先自学的同学可以免费得到原来商业培训的内容,这样起码可以节省一些时间,省一些力气。其次尚学堂自己可以更加专注于项目上。
目前尚学堂的项目写作占了课程50%左右的比重,尚学堂的项目也早已经超越了简单的MIS系统的概念,逐步的成为综合了搜索引擎、工作流、SCA/SDO、Linux/UNIX、大型数据库系统、设计模式、架构模式、负载均衡等各种深层应用的综合大型项目并且采用手把手式的教学方法,做的更加的深入和细致,从现在看效果相当好,最近142班的就业就完全证明了这一点(了解142的就业情况),我们的计划是最近逐步将项目比重提升到70%以上,相信效果会更好。
签于公司的规定,我们并不能将所有的项目实战都录制成视频来公布,但是已经公布的项目实战也是非常的有价值的:(http://www.bjsxt.com/download.html)
1:Chat & Tank系列
2:BBS
3:Shopping(近期公布)
那么如果自学我们应该怎么样才能学习项目的开发呢?
一个比较有效的办法是,可以在现有项目的基础上做的更深入一些,比如在你按照视频完成了BBS之后,可以增加一些其他的功能,例如注册/积分/精华/搜索/贴图等等,在完成了Shopping之后,可以增加一些评论/排行/统计/存货等等方面的业务逻辑,尝试用自己的技术将他们作出来,这样既积攒了项目经验,又记住了知识点。
那么如何才能确定我要写什么样的业务逻辑呢?
应该讲这对于一个初学者是非常困难的,一些简单的系统,比如说BBS、Shopping、图书管理等等,它们的业务逻辑很容易确定,去浏览和参考一些现成系统的功能,很容易就能了解了。但是对于商用的大型系统,光是了解业务逻辑本身就会花费大量的精力,如果有时间有精力有财力的话,还是建议考虑一下我们的培训吧,这样经验的积累和薪水的提升会更快,从以前的统计数据看非常容易就可以回收这笔投资(替尚学堂的广告,必须得写,请见谅,但保证真实)。
如果条件不允许,那么就按照上面的方法来学习项目吧,不要因为暂时不能接触更大型更深入的项目而气馁,记住:机会总是青睐有准备的头脑,努力吧。
JAVA自学之路 七:路线图明细
[转载请注明出处:http://www.bjsxt.com/zixue/zixuezhilu_7.html] 下面给出第二节《JAVA自学路线图》[http://www.bjsxt.com/zixue/zixuezhilu_2.html] 中知识点的明细:
注:
1:下面大多数的知识点我们已经公布了视频或者会近期公布(几个月之内),请大家关注一下这个网址http://www.bjsxt.com/download.html,可以按照该页面的提示,用电驴进行下载
2:这里是为方便大家自学给出的列表,请大家不要同尚学堂的课程画等号,下面的内容要比实际授课简单很多,另外很多知识是融汇在项目开发中的,适合面授,不适合自学。
一:J2SE
面向对象-封装、继承、多态
内存的分析
递归
集合类、泛型、自动打包与解包、Annotation
IO
多线程、线程同步
TCP/UDP
AWT、事件模型、匿名类
正则表达式
反射机制
2:数据库(Oracle或者MySQL)
SQL语句
多表连接,内外连接, 子查询等
管理表、视图、索引、序列、约束等
树状结构存储
存储过程、触发器
数据库设计三范式、
3:JDBC
JDBC基础
连接池
树状结构存储与展现
DataSource & RowSet
JDBC连接Oracle及MySQL
4:HTML_CSS_JAVASCRIPT
html、css、javascript基础语法
JavaScript Form判断
Dom编程基础(事件处理等)
JS常用效果如TreeView、下拉联动等
JS学习方法
JS调试方法
DreamWeaver初步(建立HTML、Table、Form、CSS)等
5:Servlet & JSP
tomcat基础
servlet基础
web.xml配置基础
web application的结构
servlet生命周期
request response等常用方法
ServletContext类
HTTP协议基础(GET POST)
Cookie
Session
Application
JSP的几种语法(包括JSTL等)注意在项目中练习,不要拘泥于语法细节而裹步不前。
6:Struts
多层架构理论
Model 1 and Model 2
Struts基本概念
MVC
Action与业务逻辑类的关系
在Struts与JSP之间传递数据
Struts处理流程(控制流)
Struts TagLib(了解常用的)
JSTL
ActionForm
字段收集
上传文件
类型转换
DTO
动态Action Form
验证框架
ActionForward 转发与重定向
动态生成ActionForward
全局与局部的ActionForward
Action Forward Scope
UnknownActionMapping
Action的线程安全
I18N
如何切换语言环境
Struts异常处理机制 程序处理 自动处理 自定义异常处理器
Struts的多模块配置
7:XML
(XML/XSL、XSLT/DTD、SCHEMA等基础的概念、关于Java的编程可以暂时扔在一边)
8:Hibernate
OR Mapping原理
Hibernate基础开发步骤
Hibernate基本接口(重点Session)
普通属性映射
关联关系映射
Native SQL
inverse lazy cascade
继承关系映射
HQL
性能优化 一级缓存 二级缓存 查询缓存
事务与并发 悲观锁、乐观锁
OpenSessionInView
CurrentSession
(至于JTA、联合主键、自然主键、动态主键、Any类型 Creteria Queries Intercepter and Event 自定义类型等,可以暂时扔在一边)
9:Spring
IOC/DI
Spring配置
Spring架构
AOP及Spring AOP
声明式事务(AOP)
Spring + Hibernate Spring支持Web
Scope
(其他的Spring模块对于自学来说可以暂时扔在一边)
10:EJB3.0
J2EE架构基础(JTA JMS等)
EJB基础(地位及基本理论、分类等)
Annotation
Ant编译与部署EJB
Session Bean
EJB的依赖注入
Persistence API
(可以用JBoss学习EJB3.0)
11:至于SOA,对于自学的同学来说,暂时不用特别关注。
梳理一下,你就会发现东西不是想象中的那么多呀!