持续集成学习笔记
1. 如何系统的学习全栈
去黑马程序员复社区,找到学习线路制图,一共是七个阶段:web、核心编程、前端进阶、后端框架、大型项目的构架、移动端的开发,扩展的课程有几个项目聊天室还有php如何爬虫。你看过之后大概就有学习的方向了,下面还有配套课程的视频和笔记,总之就是很全面。完全是系统的学习了。
2. 求1份读书笔记关于价值观,人生观的大概3000字
《敏捷软件开发:原则、模式与实践》读书笔记
(一)重温《敏捷软件开发宣言》
我们正在通过亲身实践和帮助他人实践,揭示更好的软件开发方法。通过这项工作,我们认为:
个体和交互 胜过 过程和工具
可以工作的软件 胜过 面面俱到的文档
客户合作 胜过 合同谈判
相应变化 胜过 遵循计划
虽然右项也具有价值,
但我们认为左项具有更大的价值。
原则性的东东,我们做到了多少?
law_bbc 2007-11-16 03:28 PM
(二)学习《敏捷宣言遵循的原则》
我们遵循以下原则:
●我们最优先要做的是通过尽早地、持续地交付有价值的软件来使客户满意。
●即使到了开发的后期,也欢迎改变需求。敏捷过程利用变化给客户创造竞争优势。
●经常性地交付可以工作的软件,交付的间隔可以从几个星期到几个月,交付的时间间隔越短越好。
●在整个项目开发期间,业务人员和开发人员必须天天都在一起工作。
●围绕被激励起来的个体来构建项目。给他们提供所需的环境和支持,并且信任他们能够完成工作。
●在团队内部,最具有效果并且富有效率的传递信息的方法,就是面对面地交谈。
●工作的软件是首要的进度度量标准。
●敏捷过程提倡可持续的开发速度。责任人、开发者和用户应该能够保持一个长期的、恒定的开发速度。
●不断地关注优秀的技能和好的设计会增强敏捷能力。
●简单——使未完成的工作最大化的艺术——是根本的。
●最好的框架、需求和设计出自于自组织的团队。
●每隔一定时间,团队会在如何才能更有效地工作方面进行反省,然后相应地对自己的行为进行调整。
好的原则,知易行难的原则。作为努力的方向吧!
law_bbc 2007-11-17 08:49 PM
(三)看看《面向对象设计的原则》
SRP 单一职责原则
就一个类而言,应该仅有一个引起它变化的原因。
OCP 开发-封闭原则
软件实体(类、模块、函数等)应该是可以扩展的,但是不可修改。
LSP Liskov替换原则
子类型必须能够替换掉它们的基类型。
DIP 依赖倒置原则
抽象不应该依赖于细节,细节应该依赖于抽象。
ISP 接口隔离原则
不应该强迫客户依赖于他们不用的方法。接口属于客户,不属于它所在的类层次结构。
REP 重用发布等价原则
重用的粒度就是发布的粒度。
CCP 共同封闭原则
包中的所有类对于同一类性质的变化应该是共同封闭的。一个变化若对一个包产生影响,则对该包中所有类产生影响,而对其他包不造成任何影响。
CRP 共同重用原则
一个包中的所有类应该是共同重用的。如果重用了包中的一个类,那么就要重用包中所有类。
ADP 无环依赖原则
在包的依赖关系图中不允许存在环。
SDP 稳定依赖原则
朝着稳定的方向进行依赖。
SAP 稳定抽象原则
包的抽象程度应该和其稳定程度一致。
开篇后前几页都是些原则性的东东呕。。。
law_bbc 2007-11-19 09:15 PM
(四)了解《极限编程实践》的概念
完整团队
XP项目的所有参与者(开发人员、业务分析师、测试人员等等)一起工作在一个开放的场所中,他们是同一个团队的成员。这个场所的墙壁上随意悬挂着大幅的、显著的图表以及其他一些显示他们进度的东西。
计划游戏
计划是持续的,循序渐进的。每2周,开发人员就为下2周估算候选特性的成本,而客户则根据成本和商务价值来选择要实现的特性。
客户测试
作为每个所期望的特性的一部分,客户定义出自动验收测试来表明该特性可以工作。
简单设计
团队保持设计恰好和当前系统功能相匹配,它通过了所有的测试,不包含任何重复,表达出了编写者想表达的所有东西,并且包含尽可能少的代码。
结对编程
所有的产品软件都是由两个程序员、并排坐在一起在同一台机器上构建的。
测试驱动开发
程序员以非常短的循环周期工作,他们先增加一个失败的测试,然后再使之通过。
改进设计
随时改进糟糕的代码,保持代码尽可能的干净、具有表达力。
持续集成
团队总是使系统完整地被集成。
集体代码所有权
任何结对的程序员都可以在任何时候改进任何代码。
编码标准
系统中所有的代码看起来就好像是被单独一个——非常值得信任的——人编写的。
隐喻
团队提出一个程序工作原理的共同景像。
可持续的速度
团队只有持久才有获胜的希望。他们以能够长期维持的速度努力工作。他们保存精力,他们把项目看作是马拉松长跑,而不是全速短跑。
极限编程的思想在很多开发团队中得到不同程度的应用。。
law_bbc 2007-11-20 11:36 PM
(五)第I部分 敏捷开发之篇首语
作者首先引用了Tom DeMacro和Timothy Lister在《人件》第5页的话,“人与人之间的交互是复杂的,并且其效果从来都难以预期,但却是工作中最为重要的方面。”
然后从三个层次阐述了对引言的理解:
(一)原则、模式和实践都是重要的,但是使它们发挥作用的是人。正如Alistair Cockburn所说,“过程和方法对于项目的结果只有次要的影响,首要的影响是人。”
(二)如果想要项目取得成功,就必须构建起具有合作精神的、自组织的团队。
(三)那些鼓励构建这种团队的公司比那些认为软件团队不过是由无关紧要的、雷同的一群人堆砌的公司具有大得多的竞争优势,有凝聚力的团队将具有最强大的软件开发力量。
人、团队、公司,逐层深入、环环相接,发人深省啊。
law_bbc 2007-11-21 11:49 PM
(六)第I部分 敏捷开发 第1章 敏捷实践之篇首语
海因里希•海涅(1797—1856,德国诗人)说:“教堂尖顶上的风标,即使由钢铁制成,如果不懂得顺应风势的艺术,一样会被暴风立即摧毁。”
许多人都经历过没有实践的指导而导致的项目噩梦。缺乏有效的实践会导致不可预测性、重复的错误以及努力的白白浪费。延期的进度、增加的预算和低劣的质量致使客户对我们丧失信心。更长时间的工作却生产出更加低劣的软件产品,也使得开发人员感到沮丧。
一旦经历了这样的惨败,就会害怕重蹈覆辙。这种恐惧激发我们创建一个过程来约束我们的活动、要求有某些人为制品(artifacts)输出。我们根据过去的经验来规定这些约束和输出,挑选那些在以前项目中看起来好像工作得不错的方法。我们希望这些方法这次还会有效,以消除我们的恐惧。
然而,项目并没有简单到使用一些约束和输出就能可靠防止错误的地步。当连续犯错误的时候,我们会对错误进行诊断,并在过程中增加更多的约束和人为制品来防止以后重犯这样的错误。经过多次这样的增加之后,我们就会不堪巨大、笨重的过程的重负,极大地降低我们完成工作的能力。
一个大而笨重的过程会产生它本来企图去解决的问题。它降低了团队的开发效率,使得进度延期、预算超支。它降低了团队的响应能力,使得团队经常创建错误的产品。遗憾的是,许多团队认为,这种结果是他们没有采取更多的过程方法引起的。因此,在这种失控的过程膨胀中,过程会变得越来越庞大。
用失控的过程膨胀来形容2000年前后的许多软件公司的情形是很合适的。虽然有很多团队在工作中没有使用过程的方法,但是采用庞大、重型的过程方法的趋势却在快速增长,在大公司中尤为如此。
看到过程方法的由来、演变,不难体会过犹不及。。。
law_bbc 2007-11-22 11:27 PM
(七)1.1敏捷联盟
2001年初,由于看到许多公司的软件团队陷入了不断增长的过程的泥潭,一批业界专家聚集在一起概括出了一些可以让软件开发团队具有快速工作、响应变化能力的价值观(value)和原则。他们称自己为敏捷(agile)联盟。在随后的几个月中,他们创建了一份价值观声明,也就是敏捷联盟宣言(The Manifesto of the Agile Alliance)。
1.个体和交互胜过过程和工具
人是获得成功的最为重要的因素。团队中只有好的过程而没有优秀的成员注定要失败,不好的过程可以使最优秀的团队成员失去效用。如果不能作为一个团队工作,那么即使拥有一批优秀的成员也一样会惨败。
合作、沟通以及交互能力比单纯的编程能力更为重要。一个由平均水平程序员组成的团队,如果具有良好的沟通能力,要比那些拥有一批高水平程序员但不能交流的团队更有可能获得成功。
合适的工具对于成功非常重要,像编译器、IDE、源代码控制系统等。但工具的作用不应被过分的夸大,使用过多庞大、笨重的工具就像缺少工具一样,都是不好的。
建议从使用小工具开始,尝试一个工具,直到发现它无法适用时才更换。不要认为更大、更好的工具可以自动地帮你做得更好,通常它们带来的障碍要大于帮助。
团队的构建要比环境的构建重要的多,应该首先致力于构建团队,然后再让团队基于需要配置环境。
看来作者更多的着眼于“度”,很辩证的。
law_bbc 2007-11-23 11:24 PM
(八)2.可以工作的软件胜过面面俱到的文档
没有文档的软件是一种灾难。代码不是传达系统原理和结构的理想媒介。团队需要编制易于阅读的文档,来对系统及其设计决策的依据进行描述。
过多的文档比过少的文档更糟。众多文档意味着大量时间,而保持文档与代码同步所需时间更多;一旦文档与代码失去同步,就变成庞大、复杂的谎言,会造成重大误导。
对于团队来说,编写并维护一份系统原理和结构方面的文档总是个好主意,但是那份文档应该是短小、主题突出的。
在给新的团队成员传授知识方面,最好的两份文档是代码和团队。代码真实地表达了所做的事情,虽然从代码中提取系统原理和结构可能是困难的,但代码是唯一没有二义的信息源。在团队成员的头脑中保存着时常变化的系统脉络图,人与人之间的交互是把这份脉络图传授给他人的最快、最有效的方式。
许多团队因为重视文档而非软件,导致进度拖延,这常常是个致命的缺陷。“Martin文档第一定律”可以防止该缺陷:直到迫切需要并且意义重大时,才来编制文档。
在中国的很多公司、团队能做到吗?
law_bbc 2007-11-24 10:29 PM
(九)3.客户合作胜过合同谈判
仅仅写下一份关于你想要的软件的描述,就让人在固定的时间以固定的价格开发,这种方式将导致低劣的质量和失败,有时失败很惨重。
成功的项目需要有序、频繁的客户反馈,。不是依赖合同或关于工作的陈述,而是让软件的客户和开发团队密切地在一起工作,并尽量经常地提供反馈。
一个指明了需求、进度和项目成本的合同存在根本性的缺陷。在大多数情况下,合同中指明的条款远在项目完成前就失去了意义。那些为开发团队和客户的协同工作方式提供指导的合同才是最好的合同。
项目成功的关键是和客户真诚的协作,而合同指导了这种协作。
law_bbc 2007-11-27 12:31 AM
(十)4.响应变化胜过遵循计划
响应变化能力常常决定着项目的成败,因此我们应该制定灵活、适应商务和技术方面变化的计划。
计划不宜考虑过远。原因:1、商务环境变化带来需求变动;2、客户可能随着系统运作的进程改变需求;3、需求不变,我们仍然无法很好地估算出开发所需时间。
较好的做计划的策略是:为下2周做详细计划,为下3个月做粗略计划,再以后做极为粗糙的计划。计划中逐渐降低的细致度,可以保证除近几周难以改变,计划的其余部分仍保持着灵活性。
law_bbc 2007-11-28 02:44 PM
(十一)1.2原则
从上述的价值观引出了12条原则,它们是敏捷实践区别于重型过程的特征所在。
1.我们最优先要做的是通过尽早地、持续地交付有价值的软件来使客户满意。
MIT Sloan管理评论杂志刊登过一篇论文,分析了对于公司构建高质量产品方面有帮助的软件开发实践。该论文发现了很多对于最终系统质量有重要影响的实践,其中一个实践表明,尽早地交付具有部分功能的系统和系统质量之间存在很强相关性。该论文指出,初期交付的系统中包含的功能越少,最终交付的系统质量就越高。
该论文的另一项发现是,以逐渐增加功能的方式经常性地交付系统和最终质量之间有很强相关性。交付越频繁,最终产品的质量就越高。
敏捷实践会尽早地、经常地进行交付。我们努力在项目开始的几周内就交付一个具有基本功能的系统,然后我们努力每2周就交付一个功能渐增的系统。
如果客户觉得目前的功能已经足够,客户可以选择把这些系统加入到产品中。
或者,他们可以简单地选择再检查一遍所有的功能,并指出他们想要做的改变。
law_bbc 2007-11-29 11:33 PM
(十二)2.即使到了开发的后期,也欢迎改变需求。敏捷过程利用变化为客户创造竞争优势。
这是一个关于态度的声明。敏捷过程的参与者不惧怕变化。他们认为改变需求是好事情,因为那些改变意味着团队已经学到了许多如何满足市场需要的知识。
敏捷团队会非常努力地保持软件结构的灵活性,这样当需求变化时,对于系统造成的影响是最小的。
3.经常地交付可以工作的软件,交付的周期可以从几周到几个月,交付的时间间隔越短越好。
我们不赞成交付大量的文档或计划,我们认为那不是真正要交付的东西,我们关注的目标是交付满足客户需要的软件。
4.在整个项目开发期间,业务人员和开发人员必须天天在一起工作。
为了能够以敏捷的方式进行项目开发,客户、开发人员以及涉众之间就必须进行有意义的、频繁的交互。软件项目不像发射出去就能自动导航的武器,必须要对项目进行持续不断的引导。
law_bbc 2007-12-2 12:51 PM
(十三)5.围绕被激励起来的个人构建项目。给他们提供所需的环境和支持,并且信任他们能够完成工作。
在敏捷项目中,人被认为是项目取得成功的最重要的因素。所有其他因素——过程、环境和管理对人有负面影响时就要进行改变。
6.在团队内部最具效果和最富的信息传递方法就是面对面交谈。
在敏捷项目中,首要、默认的沟通方式就是面对面交谈。敏捷团队不需要书面的规范、计划或设计。不会在文档中包含所有项目信息,只在迫切需要和意义重大时才编写文档。
7.工作的软件是首要的进度度量标准。
敏捷项目通过度量当前软件满足客户需求的数量来度量开发进度,而不是根据所处开发阶段、已编写文档的多少或已构建基础结构代码的数量进行度量。
8.敏捷过程提倡可持续开发速度,责任人、开发者和客户应该能够保持一个长期的、恒定的开发速度。
敏捷过程不是50米短跑,跑得过快会导致团队精力耗尽、出现短期行为以至于崩溃。敏捷团队会测量自己的速度,他们不容许自己过于疲惫,他们不会借用明天的精力来在今天多完成一点工作,他们工作在一个可以于整个项目开发期间保持最高质量标准的速度上。
law_bbc 2007-12-3 11:57 PM
(十四)9.不断关注优秀的技能和好的设计可以提高敏捷能力
高的产品质量是获取高的开发速度的关键,保持软件尽可能简洁、健壮是快速开发软件的途径。因而所有敏捷团队成员都致力于只编写他们能够编写的最高质量的代码,如果他们制造了混乱会在当天把它清理干净。
10.简单——使未完成工作最大化的艺术——是根本的。
敏捷团队不会去构建华而不实的系统,他们总是更愿意采用和目标一致的最简单的方法。他们并不看重对于明天会出现问题的预测,也不会在今天就对那些问题进行防卫。他们会在今天以最高的质量完成最简单的工作,深信即使明天发生问题也会很容易进行处理。
11.最佳的架构、需求和设计出自于自组织团队。
敏捷团队是自组织团队。任务不是由外部分配给单个成员,而是分配给整个团队,再由团队确定完成任务的最佳方法。
敏捷团队共同解决项目所有方面的问题。每一个成员都具有项目中所有方面的参与权,整个团队共同承担系统架构、需求或者测试等责任,每一个成员都能够影响它们。
12.每隔一定时间,团队会在如何才能更有效地工作方面进行反省,然后相应地调整自己的行为。
敏捷团队会不断地对团队的组织方式、规则、规范、关系等进行调整,他们知道为了保持团队的敏捷性必须随着环境的变化而变化。
law_bbc 2007-12-5 01:49 AM
(十五)第二章 极限编程概述
2.1极限编程实践
极限编程(XP)是敏捷方法中最著名的一个,它由一系列简单却相互依赖的实践组成,这些实践结合在一起形成了一个胜过部分结合的整体。
2.1.1客户作为团队成员
我们希望客户和开发人员在一起紧密地工作,从而知晓对方所面临的问题并共同解决之。
XP团队中的客户是指定义产品特性并排列这些特性优先级的人或团体。在XP项目中,无论谁是客户,他们都是能够和团队一起工作的团队成员。
客户和开发人员最好在同一个房间工作,工作距离小于100米次之。距离越远越难以融入团队,无法成为真正的团队成员。
如果确实无法于客户一起工作,建议去寻找能够在一起工作、愿意并能够代替真正客户的人。
2.1.2用户素材
为了制定计划必须知道和项目需求有关的内容,必须知道存在许多细节、细节的大致分类,但是你不必知道特定的细节。
需求的特定细节很可能随时间而变化,看到新系统问世是关注需求的最佳时刻。
在XP中我们和客户反复讨论,以获取对需求细节的理解,但是不去捕获那些细节。需求估算是基于和客户交谈期间所得到的对细节的理解进行的。
用户素材就是正在进行的关于需求谈话的助记符,它是一个计划工具,客户可以使用它并根据它的优先级和估算代价来安排实现该需求的时间。
law_bbc 2007-12-7 01:30 AM
(十六)2.1.3短交付周期
XP项目每2周交付一次可工作软件。每2周的迭代(重复周期或循环周期)都实现了涉众的一些要求。每次迭代结束后,会给涉众演示迭代生成的系统,以得到他们的反馈。
1.迭代计划
每次迭代通常花费2周。这是一次较小的交付,可能会被加入到产品中。它由客户根据开发人员确定的预算而选择的一些用户素材组成。
开发人员通过度量以前迭代完成的工作量来为本次迭代设定预算。只要估算的成本总量不超过预算,客户就可以为本次迭代选择任意数量的用户素材。
一旦迭代开始,客户就同意不再修改当前迭代中用户素材的定义和优先级。迭代期间,开发人员可以自由地将用户素材分解成任务,并依据最具技术和商务价值的顺序来开发这些任务。
2.发布计划
XP团队通常会创建一个包含随后大约6次迭代内容的计划,这就是所谓的发布计划。一次发布通常需要3个月的工作。它表示了一次较大的交付,通常会被加入到产品中。发布计划是由一组客户根据开发人员给出预算所选择的、排好优先级的用户素材组成。
开发人员可以度量以前发布的工作量来为本次发布设定预算。只要估算的成本总量不超过预算,客户就可以为本次发布选择任意数目的用户素材。客户同样可以决定本次发布中用户素材实现的顺序。如果开发人员强烈要求的话,客户可以通过指明哪些用户素材应该在哪次迭代中完成的方式,制定出发布中最初几次迭代的内容。
发布计划不是一成不变的,客户可以随时改变计划的内容。他可以取消用户素材,编写新的用户素材,或者改变用户素材的优先级别。
3. java学习作为一名java初学者,如何快速学习j
先介绍一下主要学习哪些内容吧!
1、Java语法
通过任何一本java入门书籍,都可以学会java的基本语法。千万不要认为,你把书上的例子程序都能写出来就算是学会java语法了。想要真正掌握,还需要做大量的测试题。对语法不准确的理解,会是你写的代码出现逻辑错误。而这些错误会使你在真正的项目开发中吃尽苦头:你认为正确才会写上去。而在几十万代码中找出几行有逻辑错误的代码,非常困难。因为你几乎不会怀疑你认为正确的代码存在错误。
2、常用类
永远不要写别人已经实现的代码。有很多功能,用JDK中现有的类就可以完成。你需要熟悉JDK,可以通过研究JDK帮助文档和JDK源代码的方式,逐渐了解,你需要的类都在什么地方。一方面,要熟悉有哪些可以直接使用的资源;另一方面,学习一下,SUN公司的工程是怎样写代码的。
3、IDE集成开发环境
现在企业最常用的是IBM公司的eclipse,类似的还有JBuilder、Idea、NetBeans等等。毕竟,只有5%的顶尖高手在使用简单的文本编辑器在写java代码。多数程序员都是在使用这些东西。
4、 数据库
MySql,Oracle,DB2。小项目多数使用MySql这样的免费数据库。大一些的项目会考虑使用Oracle或者DB2。 Java项目很少使用SqlServer。因此,你还需要学习数据库方面的一些知识。可以从SQL语言开始。这些数据库都支持标准SQL,学会基本的SQL,参考具体的数据库手册,就可以完成一般的项目开发了。当然,要想使你的程序运行的效率更高,需要更深入的学习。大部分的程序优化,都是从这部分开始的。
5、 JDBC Java数据库连接
使用Java程序操作数据库。这部分非常重要,几乎所有的企业项目都会用到。
6、 HTML CSS Javascript
HTML-- 超文本标记语言。
CSS --层叠样式表。
JavaScript--是一种由Netscape的LiveScript发展而来的脚本语言。
准确的说,这些东西和Java语言本身关系不大。但是,现在的企业项目,以B/S结构的居多。因此,我们的Java程序,会有大量的机会和它们打交道。需要提前准备一下。
7、你需要学习如何使用及管理WEB服务器,例如tomcat,并且知道如何在其基础上扩展和维护WEB程序,如何使用它的附加服务,如连接池。
8、 JSP Servlet
这两个是初级Java程序员必须掌握的基本技能,是所有B/S结构框架的基础。相应的,还需要学习EL以及JSTL(StandardTagLibraries)和可以选择的第三方TagLibraries,以提高表示层的处理能力。
9、企业流行框架 Struts、Spring、Hibernate等
10、Java设计模式
有一些特殊的功能,只有按照特定的设计模式才能实现。如果你有了5万行以上的代码经验,可以开始研究一下设计模式。
11、你还要跟上技术发展的步伐,了解在Java项目中使用的新技术。如Ajax等。
还有很多要学习的内容。先介绍这么多吧,自己学习这些内容,估计需要2年左右。如果有个好的指导老师,在培训学校进行系统学习,则需要4-5个月。
如果选择培训,一定要选择拥有多年JAVA项目开发经验、测试经验、及项目管理经验,采用“教”“练”结合,用真实项目案例进行训练的教学方式。让学员掌握实用的技能,在毕业后就有着实战项目开发经验,立刻上岗,成为诸多企业抢手的人才。
4. JAVA零基础者应该看什么书比较好
java 全栈工程师
一个java零基础自学网站分享-我的文章-知乎https://zhuanlan.hu.com/p/47785978
5. 上海外国语大学CI项目如何报考
CI是上来海外国语大学的一个独立源的培训项目,学制是2年制,毕业没有学历和学位。是高强度的交替传译、同声传译方面的培训。没有学历限制,可以是本科生也可以是研究生,每年的3月份会进行招生考试。
CI项目在2003年设立,是上外特有的专业;是全国唯一由教育部专项拨款建设的同声传译教学基地。会议口译专业提供两年全日制研究生层次专业教育。
培训的重点为会议口译专业实践技能(交替传译和同声传译)。完成学业并通过专业考试者,获得“会议口译专业证书”,证明其能胜任联合国、欧盟等国际组织,以及各种国际会议和外交场合的同声传译和交替传译工作。
6. GitHub 上有哪些值得推荐的开源电子书
语言无关类
操作系统
鸟哥的Linux私房菜 (简体)
Linux 系统高级编程
The Linux Command Line (中英文版)
Linux 设备驱动 (第三版)
深入分析Linux内核源码
UNIX TOOLBOX
Docker中文指南
Docker —— 从入门到实践
FreeRADIUS新手入门
Mac 开发配置手册
FreeBSD 使用手册
Linux 命令行(中文版)
- 智能系统
一步步搭建物联网系统
- web服务器
Nginx开发从入门到精通 (淘宝团队出品)
- 版本控制
Git教程 (本文由 @廖雪峰 创作,如果觉得本教程对您有帮助,可以去 iTunes 购买)
git – 简易指南
猴子都能懂的GIT入门
Git 参考手册
Pro Git
Git Magic
GotGitHub
Git Community Book 中文版
Mercurial 使用教程
HgInit (中文版)
沉浸式学 Git
Git-Cheat-Sheet (感谢 @flyhigher139 翻译了中文版)
GitHub秘籍
- NoSQL
NoSQL数据库笔谈 (PDF)
Redis 设计与实现
Redis 命令参考
带有详细注释的 Redis 3.0 代码
带有详细注释的 Redis 2.6 代码
The Little MongoDB Book
The Little Redis Book
Neo4j 简体中文手册 v1.8
Neo4j .rb 中文资源
- MySQL
MySQL索引背后的数据结构及算法原理
- 项目相关
持续集成(第二版) (译言网)
让开发自动化系列专栏
追求代码质量
selenium 中文文档
Joel谈软件
约耳谈软体(Joel on Software)
- Web
关于浏览器和网络的 20 项须知
前端知识体系
浏览器开发工具的秘密
Chrome 开发者工具中文手册
Chrome扩展开发文档
Grunt中文文档
移动Web前端知识库
正则表达式30分钟入门教程
前端开发体系建设日记
移动前端开发收藏夹
JSON风格指南
HTTP 接口设计指北
前端资源分享(一)
前端资源分享(二)
前端代码规范 及 最佳实践
w3school教程整理
- 大数据
大数据/数据挖掘/推荐系统/机器学习相关资源
- 编程艺术
程序员编程艺术
每个程序员都应该了解的内存知识(译)【第一部分】
取悦的工序:如何理解游戏 (豆瓣阅读,免费书籍)
- 其他
OpenWrt智能、自动、透明翻墙路由器教程
- 语言相关类 AWK
awk程序设计语言
- C/C++
C++ 并发编程指南 (@傅海平ICT)
Linux C编程一站式学习 (宋劲杉, 北京亚嵌教育研究中心)
CGDB中文手册
100个gdb小技巧
100个gcc小技巧
ZMQ 指南
How to Think Like a Computer Scientist (中英文版)
跟我一起写Makefile(PDF)
GNU make中文手册
GNU make 指南
Google C++ 风格指南
C/C++ Primer (by @andycai)
简单易懂的C魔法
Cmake 实践 (PDF版)
C++ FAQ LITE(中文版)
C++ Primer 5th Answers
- CSS/HTML
学习CSS布局
通用 CSS 笔记、建议与指导
CSS参考手册
Emmet 文档
前端代码规范 (腾讯alloyteam团队)
- Dart
Dart 语言导览
- Fortran
Fortran77和90/95编程入门
- Java
实时 Java 系列
Apache Shiro 用户指南
使用 Eclipse 和 Java SE 6 创建独立 Web Services 应用程序
第 1 部分: Web Services 服务端应用程序
第 2 部分: Web 服务客户端应用程序
JavaServer Faces 1.2 入门
第 1 部分: 构建基本应用程序
第 2 部分: JSF 生命周期、转换、检验和阶段监听器
用 Eclipse Europa 进行 Web 开发
第 1 部分: Eclipse Java EE
第 2 部分: PHP 开发工具
第 3 部分: Ruby Development Toolkit 和 RadRails
使用 JavaServer Faces 构建 Apache Geronimo 应用程序
第 1 部分: 使用 Eclipse 和 Apache MyFaces Core 构建基本的应用程序
第 2 部分: 在 JavaServer Faces 中使用 Tomahawk
第 3 部分: 使用 ajax4jsf 添加 Ajax 功能
第 4 部分: 使用 Apache Trinidad 组件扩展 JSF
第 5 部分: 将 JSF 应用程序与 Spring 集成
Apache Geronimo 和 Spring 框架
第 1 部分: 开发方法学
第 2 部分: 构建第一个应用程序
第 3 部分: 集成 DAO 与 ORM
第 4 部分: 混合使用 Spring AOP 和 Spring Web Flow
第 5 部分: Spring MVC
第 6 部分: Spring MVC:使用 Web 视图技术
终极 mashup —— Web 服务和语义 Web
第 1 部分: 使用与组合 Web 服务
第 2 部分: 管理 Mashup 数据缓存
第 3 部分: 理解 RDF 和 RDFs
第 4 部分: 创建本体
第 5 部分: 切换 Web 服务
Jersey 2.x 用户指南
MyBatis中文文档
- JavaScript
Google JavaScript 代码风格指南
Airbnb JavaScript 规范
JavaScript 标准参考教程(alpha)
Javascript编程指南 (源码)
javascript 的 12 个怪癖
JavaScript 秘密花园
JavaScript核心概念及实践 (PDF) (此书已由人民邮电出版社出版发行,但作者依然免费提供PDF版本,希望开发者们去购买,支持作者)
《JavaScript 模式》翻译,此书中文版有售,但是纸质书翻译的还没有这个版本翻译的好
命名函数表达式探秘 (注:原文由为之漫笔翻译,原始地址无法打开,所以此处地址为我博客上的备份)
学用 JavaScript 设计模式 (开源中国)
深入理解JavaScript系列
ECMAScript 6 入门 (作者:阮一峰)
jQuery
jQuery 解构
简单易懂的JQuery魔法
How to write jQuery plugin
Node.js
Node入门
七天学会NodeJS
Nodejs Wiki Book (繁体中文)
express.js 中文文档
koa 中文文档
使用 Express + MongoDB 搭建多人博客
Express框架
nodejs文档
Node.js 包教不包会
Learn You The Node.js For Much Win! (中文版)
Node debug 三法三例
underscore.js
Underscore.js中文文档
backbone.js
backbone.js入门教程 (PDF)
Backbone.js入门教程第二版
Developing Backbone.js Applications(中文版)
AngularJS
AngularJS最佳实践和风格指南
AngularJS中译本
AngularJS入门教程
构建自己的AngularJS
在Windows环境下用Yeoman构建AngularJS项目
zepto 简明中文手册
Sea.js
Hello Sea.js
CoffeeScript
CoffeeScript Cookbook
The Little Book on CoffeeScript中文版
ExtJS
Ext4.1.0 中文文档
Chrome扩展及应用开发
JavaScript入门教程
- PHP
PHP调试技术手册(PDF)
XDebug 2中文手册(译) (CHM)
PHP之道
PHP 最佳实践
PHP安全最佳实践
深入理解PHP内核
PHP扩展开发及内核应用
CodeIgniter 用户指南
Laravel4 中文文档
Laravel 入门
Symfony2中文文档 (未译完)
Phalcon中文文档(翻译进行中)
YiiBook几本Yii框架的在线教程
简单易懂的PHP魔法
swoole文档及入门教程
- iOS
iOS开发60分钟入门
iOS7人机界面指南
Google Objective-C Style Guide 中文版
iPhone 6 屏幕揭秘
Apple Watch开发初探
马上着手开发 iOS 应用程序
网易斯坦福大学公开课:iOS 7应用开发字幕文件
- Android
Android Design(中文版)
Google Android官方培训课程中文版
Android学习之路
- Python
小白的Python教程
简明Python教程
零基础学Python
Python 2.7 官方教程中文版
Python 3.3 官方教程中文版
深入 Python 3
PEP8 Python代码风格规范
Google Python 风格指南 中文版
Python入门教程 (PDF)
Python的神奇方法指南
笨办法学 Python (PDF版下载)
Django 文档中文版
Django 最佳实践
The Django Book 中文版
web.py 0.3 新手指南
Web.py Cookbook 简体中文版
Dive Into Python 中文版
Bottle 文档中文版 (需翻墙)
Flask 文档中文版
Jinja2 文档中文版
Werkzeug 文档中文版
Flask之旅
Introction to Tornado 中文翻译
Python自然语言处理中文版 (感谢陈涛同学的翻译,也谢谢 @shwley 联系了作者)
Python 绘图库 matplotlib 官方指南中文翻译
Scrapy 0.25 文档
ThinkPython
- Ruby
Ruby 风格指南
Rails 风格指南
笨方法学 Ruby
Ruby on Rails 指南
Ruby on Rails 实战圣经
Ruby on Rails Tutorial 原书第 2 版 (本书网页版免费提供,电子版以 PDF、EPub 和 Mobi 格式提供购买,仅售 9.9 美元)
编写Ruby的C拓展
Ruby 源码解读
- Shell
Shell脚本编程30分钟入门
- Go
Go编程基础
Go入门指南
学习Go语言 (PDF)
Go Web 编程 (此书已经出版,希望开发者们去购买,支持作者的创作)
Go实战开发 (当我收录此项目时,作者已经写完第三章,如果读完前面章节觉得有帮助,可以给作者捐赠,以鼓励作者的继续创作)
Network programming with Go 中文翻译版本
- Groovy
实战 Groovy 系列
- LaTeX
一份其实很短的 LaTeX 入门文档
一份不太简短的 LATEX 2ε 介绍 (PDF版)
- LISP
ANSI Common Lisp 中文翻译版
- Lua
Lua编程入门
- Haskell
Real World Haskell 中文版
- R
R语言忍者秘笈
- Scala
Scala课堂 (Twitter的Scala中文教程)
Effective Scala(Twitter的Scala最佳实践的中文翻译)
Scala指南
- Swift
The Swift Programming Language 中文版
- Perl
Modern Perl 中文版
Perl 程序员应该知道的事
- Prolog
笨办法学Prolog
Vim中文文档
- Vimscript
笨方法学Vimscript 中译本
Vim中文文档
- 读书笔记及其它 读书笔记
编译原理(紫龙书)中文第2版习题答案
把《编程珠玑》读薄
Effective C++读书笔记
Golang 学习笔记、Python 学习笔记、C 学习笔记 (PDF)
Jsoup 学习笔记
学习笔记: Vim、Python、memcached
图灵开放书翻译计划–C++、Python、Java等
蒂姆·奥莱利随笔 (由译言网翻译,电子版免费)
Octave 入门 (PDF版)
SICP 解题集
精彩博客集合
正则表达式简明参考
7. JAVA自学看什么书好啊
对于没有Java编程经验的程序员要入门,随便读什么入门书籍都一样,这个阶段需要你快速的掌握Java基础语法和基本用法,宗旨就是“囫囵吞枣不求甚解”,先对Java熟悉起来再说。用很短的时间快速过一遍Java语法,连懵带猜多写写代码,要“知其然”。
1、《Java编程思想》
在有了一定的Java编程经验之后,你需要“知其所以然”了。这个时候《Java编程思想》是一本让你知其所以然的好书,它对于基本的面向对象知识有比较清楚的交待,对Java基本语法,基本类库有比较清楚的讲解,可以帮你打一个良好的Java编程基础。这本书的缺点是实在太厚,也比较罗嗦,不适合现代人快节奏学习,因此看这本书要懂得取舍,不是每章每节都值得一看的,挑重点的深入看就可以了。
2、《Agile Java》中文版
这本书是出版社送给我的,我一拿到就束之高阁,放在书柜一页都没有翻过,但是前两天整理书柜的时候,拿出来一翻,竟然发现这绝对是一本好书!这本书一大特点是以单元测试和TDD来贯穿全书的,在教你Java各种重要的基础知识的过程中,潜移默化的影响你的编程思维走向敏捷,走向TDD。另外这本书成书很新,以JDK5.0的语法为基础讲解,要学习JDK5.0的新语法也不错。还有这本书对于内容取舍也非常得当,Java语言毕竟类库庞大,可以讲的内容太多,这本书选择的内容以及内容的多寡都很得当,可以让你以最少的时间掌握Java最重要的知识,顺便培养出来优秀的编程思路,真是一本不可多得的好书。
虽然作者自己把这本书定位在入门级别,但我不确定这本书用来入门是不是稍微深了点。 Java编程进阶类 打下一个良好的Java基础,还需要更多的实践经验积累,我想没有什么捷径。有两本书值得你在编程生涯的这个阶段阅读,培养良好的编程习惯,提高你的代码质量。
1、《重构 改善既有代码的设计》
这本书名气很大,不用多介绍,可以在闲暇的时候多翻翻,多和自己的实践相互印证。这本书对你产生影响是潜移默化的。
2、《测试驱动开发 by Example》
本书最大特点是很薄,看起来没有什么负担。你可以找一个周末的下午,一边看,一边照做,一个下午就把书看完,这本书的所有例子跑完了。这本书的作用是通过实战让你培养TDD的思路。 Java架构师之路 到这个阶段,你应该已经非常娴熟的运用Java编程,而且有了一个良好的编程思路和习惯了,但是你可能还缺乏对应用软件整体架构的把握,现在就是你迈向架构师的第一步。
1、《Expert One-on-One J2EE Design and Development》
这本书是Rod Johnson的成名著作,非常经典,从这本书中的代码诞生了springframework。但是好像这本书没有中译本。
2、《Expert One-on-One J2EE Development without EJB》
这本书由gigix组织翻译,多位业界专家参与,虽然署名译者是JavaEye,其实JavaEye出力不多,实在是忝居译者之名。
以上两本书都是Rod Johnson的经典名著,Java架构师的必读书籍。在我所推荐的这些书籍当中,是我看过的最仔细,最认真的书,我当时读这本书几乎是废寝忘食的一气读完的,有小时候挑灯夜读金庸武侠小说的劲头,书中所讲内容和自己的经验知识一一印证,又被无比精辟的总结出来,读完这本书以后,我有种被打通经脉,功力爆增的感觉。
但是后来我看过一些其他人的评价,似乎阅读体验并没有我那么high,也许是因为每个人的知识积累和经验不同导致的。我那个时候刚好是经验知识积累已经足够丰富,但是还没有系统的整理成型,让这本书一梳理,立刻形成完整的知识体系了。
3、《企业应用架构模式》
Martin的又一本名著,但这本书我只是泛泛的看了一遍,并没有仔细看。这本书似乎更适合做框架的人去看,例如如果你打算自己写一个ORM的话,这本书是一定要看的。但是做应用的人,不看貌似也无所谓,但是如果有空,我还是推荐认真看看,会让你知道框架为什么要这样设计,这样你的层次可以晋升到框架设计者的角度去思考问题。Martin的书我向来都是推崇,但是从来都没有像Rod Johnson的书那样非常认真去看。
4、《敏捷软件开发 原则、模式与实践》
Uncle Bob的名著,敏捷的经典名著,这本书比较特别,与其说是讲软件开发过程的书,不如说讲软件架构的书,本书用了很大篇幅讲各种面向对象软件开发的各种模式,个人以为看了这本书,就不必看GoF的《设计模式》了。
软件开发过程 了解软件开发过程不单纯是提高程序员个人的良好编程习惯,也是增强团队协作的基础。
1、《UML精粹》
UML其实和软件开发过程没有什么必然联系,却是软件团队协作沟通,撰写软件文档需要的工具。但是UML真正实用的图不多,看看这本书已经足够了,完全没有必要去啃《UML用户指南》之类的东西。要提醒大家的是,这本书的中译本翻译的非常之烂,建议有条件的看英文原版。
2、《解析极限编程 拥抱变化》XP
这是Kent Beck名著的第二版,中英文对照。没什么好说的,必读书籍。
3、《统一软件开发过程》UP
其实UP和敏捷并不一定冲突,UP也非常强调迭代,测试,但是UP强调的文档和过程驱动却是敏捷所不取的。不管怎么说,UP值得你去读,毕竟在中国真正接受敏捷的企业很少,你还是需要用UP来武装一下自己的,哪怕是披着UP的XP。
4、《敏捷建模》AM
Scott Ambler的名著,这本书非常的progmatic,告诉你怎么既敏捷又UP,把敏捷和UP统一起来了,又提出了很多progmatic的建议和做法。你可以把《解析极限编程 拥抱变化》、《统一软件开发过程》和《敏捷建模》这三本书放在一起读,看XP和UP的不同点,再看AM是怎么统一XP和UP的,把这三种理论融为一炉,形成自己的理论体系,那么你也可以去写书了。
软件项目管理 如果你突然被领导提拔为项目经理,而你完全没有项目管理经验,你肯定会心里没底;如果你觉得自己管理项目不善,很想改善你的项目管理能力,那么去考PMP肯定是远水不解近渴的。
1、《快速软件开发》
这也是一本名著。可以这样说,有本书在手,你就有了一个项目管理的高级参谋给你出谋划策,再也不必担心自己不能胜任的问题了。这本书不是讲管理的理论的,在实际的项目管理中,讲这些理论是不解决问题的,这本书有点类似于“软件项目点子大全”之类的东西,列举了种种软件项目当中面临的各种问题,以及应该如何解决问题的点子,你只需要稍加变通,找方抓药就行了。
8. 怎么学好java编程
Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言,它具有良好的通用性、高效性、平台移植性和安全性,广泛用于个人PC、数据中心、游戏控制台等,同时拥有较大的开发者专业社群。那么我们如何才能学好Java?
1、认真阅读Java相关的书籍
尽管如今在网络上有很多的视频能够收看,促使Java的学习培训越来越简易了起来,可是必须留意的是,这也只是是学习的途径变多了,又换句话说新手入门的方法多元化了,并不意味着着这门技术性越来越非常容易了。只不过是学会了毛皮。书籍一直是知识的最高载体,许多优秀程序员精心编写的编程书籍,不仅有很多知识,而且有很多是他们教导的思想,通过阅读这些书籍,不仅能学会技术,还能帮助熟练者理解编程思维。比如《实战Java程序设计》这是一本既注重实战,同时也注重底层“内功”(内存分析、JVM底层、数据结构)训练的书,本书能帮 助初学者打通Java编程“任督二脉”。本书集作者11年Java教学之精华,既适合初学者入门,也适合已经工作 的开发者复习。
2、学好基本语法,弄清Java的特点
学习Java说的直白些就是学习它的语法、功能、结构等,然后按照它的语法编写代码。语法是学习Java的基础,刚开始学习的时候可能会很难理解,但是没关系,这属于正常现象,只要多看、多问、多实践,慢慢地你就会入门。
3、学习没有捷径,一定要多动手实践
学习Java就像学习数学一样,在懂得理论知识后,一定要实践。学习Java不能搭便车,有些时候,句子和语法看起来很简单,但是亲自实践起来却总有自己不知道的知识盲点。哪怕是简单的小程序,书本上的小例子,只有多动手操作,也会提高自己的代码能力。
4、制定详细的学习计划
拥有一定的专业知识基本后,接下去大家务必制订一套行得通的学习规划。这里我关键指的是详细的学习培训线路。尽管Java学起来非常简单,但大家如果要学精学透,就得由浅入深的一步步把握。
5、学会总结
学编程有一个禁忌,那就是学了新的知识,就把之前的知识忘记了。这时候就要做到分阶段来进行总结,做到把遇到的问题以及解决思路记录下来,同时还要备注上自己的经验和技巧,在之后的日子里多去浏览自己曾经记下的这些东西,不断的积累,让自己的成长变得扎实和迅速。
9. 学习java的心得
这位朋友,我是学习java的,我也是学习这门语言的爱好者,我首先说说我的学习经历吧!我是山东潍坊的一个学生,现在学习的是java这门专业,我的爱好是编程.
1.我感觉学习java应该是循环渐进,有始有终,按部就班,脚踏实地.java是一门有着阶梯性的一们语言,如果要学习它.我觉得最好还是按照java的学习体系,先学习什么,在学习什么,只有这样,我们在学习中才会遇到更少的麻烦.java是一门更倾向于网络的语言.不要上来就学习JSP,这样不好,因为这没有基础.在以后的学习中很可能遇到很多的麻烦,这就不好了.
2.信心,恒心,毅力是最重要的.这是我们必须具备的心理素质.要是学习这门语言开始的时候很有兴趣,遇到苦难就退缩,这样最终会放弃学习java,没有经历风雨怎么见彩虹.编程就是有的时候就是那么这么人.会遇到很多的困惑.但是一旦你弄懂了,或者是你把问题解决了,你会感到很兴奋,编程的快乐就在此 了.呵呵^^
3.多看看一些资料,多多的向高手请教,这样才好.要学会总结和领会.^^^^^^^^^^,当然,学习java一个人有一个人的想法,也有自己的独特学习方法.总之适合自己的就是最好的,你说呢这位朋友?关于方法,还有很多,我就不在这里说了.
希望我的回答能给你带来帮助,祝福你学习一路顺风.
10. java学习心得
学习Java的第一步是安装好JDK,写一个Hello World, 其实JDK的学习没有那么简单,关于JDK有两个问题是很容易一直困扰 Java程序员的地方:一个是CLASSPATH的问题,其实从原理上来说,是要搞清楚JRE的ClassLoader是如何加载Class的;另一个问题是package和import问题,如何来寻找类的路径问题。把这两个问题摸索清楚了,就扫除了学习Java和使用JDK的最大障碍。推荐看一下王森的《Java深度历险》,对这两个问题进行了深入的探讨。
第二步是学习Java的语法。Java的语法是类C++的,基本上主流的编程语言不是类C,就是类C++的,没有什么新东西,所以语法的学习,大概就是半天的时间足够了。唯一需要注意的是有几个不容易搞清楚的关键字的用法,public,protected,private,static,什么时候用,为什么要用,怎么用,这可能需要有人来指点一下,我当初是完全自己琢磨出来的,花了很久的时间。不过后来我看到《Thinking in Java》这本书上面是讲了这些概念的。
第三步是学习Java的面向对象的编程语言的特性的地方。比如继承,构造器,抽象类,接口,方法的多态,重载,覆盖,Java的异常处理机制。对于一个没有面向对象语言背景的人来说,我觉得这个过程需要花很长很长时间,因为学习Java之前没有C++的经验,只有C的经验,我是大概花了一个月左右吧,才彻底把这些概念都搞清楚,把书上面的例子反复的揣摩,修改,尝试,把那几章内容反复的看过来,看过去,看了不下5遍,才彻底领悟了。不过我想如果有 C++经验的话,应该一两天时间足够了。那么在这个过程中,可以多看看《Thinking in Java》这本书,对面向对象的讲解非常透彻。可惜的是我学习的时候,并没有看到这本书,所以自己花了大量的时间,通过自己的尝试和揣摩来学会的。
第四步就是开始熟悉Java的类库。Java的基础类库其实就是JDK安装目录下面jre\lib\rt.jar这个包。学习基础类库就是学习rt.jar。基础类库里面的类非常非常多。据说有3000多个,但是真正对于我们来说最核心的只有4个,分别是
java.lang.*;
java.io.*;
java.util.*;
java.sql.*;
这四个包的学习,每个包的学习都可以写成一本厚厚的教材,而O'reilly也确实是这样做的。我觉得如果时间比较紧,是不可能通过读四本书来学习。我觉得比较好的学习方法是这样的:
首先要通读整个package的框架,了解整个package的class,interface,exception的构成,最好是能够找到介绍整个包框架的文章。这些专门介绍包的书籍的前几章应该就是这些总体的框架内容介绍。
对包整体框架的把握并不是要熟悉每个类的用法,记住它有哪些属性,方法。想记也记不住的。而是要知道包有哪些方面的类构成的,这些类的用途是什么,最核心的几个类分别是完成什么功能的。我在给人培训的时候一般是一次课讲一个包,所以不可能详细的介绍每个类的用法,但是我反复强调,我给你们讲这些包的不是要告诉你们类的方法是怎么调用的,也不要求你们记住类的方法调用,而是要你们了解,Java给我们提供了哪些类,每个类是用在什么场合,当我遇到问题的时候,我知道哪个类,或者哪几个类的组合可以解决我的问题,That'all!,当我们具体写程序的时候,只要你知道该用哪个类来完成你的工作就足够了。编码的时候,具体的方法调用,是边写代码,边查Documentation,所有的东西都在Documentation里面,不要求你一定记住,实际你也记不住3000多个类的总共将近10万个方法调用。所以对每个包的总体框架的把握就变得极为重要。
第五步,通过上面的学习,如果学的比较扎实的话,就打好了Java的基础了,剩下要做的工作是扫清Documentation里面除了上面4个包之外的其他一些比较有用处的类。相信进展到这一步,Java的自学能力已经被培养出来了,可以到了直接学习Documentation的水平了。除了要做 GUI编程之外,JDK里面其他会有用处的包是这些:
java.text.*;
java.net.*;
javax.naming.*;
这些包里面真正用的比较多的类其实很少,只有几个,所以不需要花很多时间。
第六步,Java Web 编程
Web编程的核心是HTTP协议,HTTP协议和Java无关,如果不熟悉HTTP协议的话,虽然也可以学好Servlet/JSP编程,但是达不到举一反三,一通百通的境界。所以HTTP协议的学习是必备的。如果熟悉了HTTP协议的话,又有了Java编程的良好的基础,学习 Servlet/JSP简直易如反掌,我学习Servlet/JSP就用了不到一周的时间,然后就开始用JSP来做项目了。
在Servlet/JSP的学习中,重头仍然是Servlet Documentation。Servlet API最常用的类很少,花比较少的时间就可以掌握了。把这些类都看一遍,多写几个例子试试。Servlet/JSP编程本质就是在反复调用这些类来通过HTTP协议在Web Server 和Brower之间交谈。另外对JSP,还需要熟悉几个常用JSP的标记,具体的写法记不住的话,临时查就是了。
此外Java Web编程学习的重点要放在Web Application的设计模式上,如何进行业务逻辑的分析,并且进行合理的设计,按照 MVC设计模式的要求,运用Servlet和JSP分别完成不同的逻辑层,掌握如何在Servlet和JSP之间进行流程的控制和数据的共享,以及 Web Application应该如何配置和部署。
第七步,J2EE编程
以上的学习过程如果是比较顺利的话,进行到这一步,难度又陡然提高。因为上面的知识内容都是只涉及一个方面,而像EJB,JMS,JTA等核心的J2EE规范往往是几种Java技术的综合运用的结晶,所以掌握起来难度比较大。
首先一定要学习好JNDI,JNDI是App Server定位服务器资源(EJB组件,Datasouce,JMS)查找方法,如果对JNDI 不熟悉的话,EJB,JMS这些东西几乎学不下去。JNDI其实就是javax.naming.*这个包,运用起来很简单。难点在于服务器资源文件的配置。对于服务器资源文件的配置,就需要看看专门的文档规范了,比如web.xml的写法,ejb-jar.xml的写法等等。针对每种不同的 App Server,还有自己的服务资源配置文件,也是需要熟悉的。
然后可以学习JTA,主要是要理解JTA对于事务的控制的方法,以及该在什么场合使用JTA。这里可以简单的举个例子,我们知道一般情况可以对于一个数据库连接进行事务控制(conn.setAutoCommit(false),....,conn.commit()),做为一个原子操作,但是假设我的业务需求是要把对两个不同数据库的操作做为一个原子操作,你能做的到吗?这时候只能用JTA了。假设操作过程是先往A数据库插一条记录,然后删除B 数据库另一个记录,我们自己写代码是控制不了把整个操作做为一个原子操作的。用JTA的话,由App Server来完成控制。
在学习EJB之前要学习对象序列化和RMI,RMI是EJB的基础。接着学习JMS和EJB,对于EJB来说,最关键是要理解EJB是如何通过RMI来实现对远端对象的调用的,以及在什么情况下要用到EJB。
在学习完EJB,JMS这些东西之后,你可能会意识到要急不可待学习两个领域的知识,一个是UML,另一个是Design Pattern。 Java企业软件的设计非常重视框架(Framework)的设计,一个好的软件框架是软件开发成功的必要条件。在这个时候,应该开始把学习的重点放在设计模式和框架的学习上,通过学习和实际的编程经验来掌握EJB的设计模式和J2EE的核心模式。
J2EE规范里面,除了EJB,JMS,JTA,Servlet/JSP,JDBC之外还有很多很多的企业技术,这里不一一进行介绍了。
另外还有一个最新领域Web Services。Web Services也完全没有任何新东西,它像是一种黏合剂,可以把不同的服务统一起来提供一个统一的调用接口,作为使用者来说,我只要获得服务提供者给我的WSDL(对服务的描述),就够了,我完全不知道服务器提供者提供的服务究竟是EJB 组件,还是.Net组件,还是什么CORBA组件,还是其他的什么实现,我也不需要知道。Web Services最伟大的地方就在于通过统一的服务提供方式和调用方式,实现了整个Internet服务的共享,是一个非常令人激动的技术领域。Web Services好像目前还没有什么很好的书籍,但是可以通过在网络上面查资料的方式来学习。