Java程序员的堕落

2024-09-25

Java程序员的堕落(精选10篇)

Java程序员的堕落 篇1

Java程序员的堕落

我曾在多个场合撰文说过,现在培训出来的企业Java开发兵团只知道使用某种框架,但完全不知道这些框架的底层原理。今天早上,在依次对三个职位的应聘者面试中,我又再次见到了这种情形。

我们的顾问公司收到了一个客户的招聘需求,要一个经验丰富并通晓SQL的Java开发人员。我们公司在这个客户那里享有非常好的声誉,于是我们从招聘代理公司要来了一批简历,开始搜寻合适的目标。

首先,关于他们的简历——每份简历都有数页,详细的描述了在各个公司干过的各种工作。每份简历上都有一个技术列表,表面上看这些都是应聘者懂得的技术。下面这个清单是一个真实的简历上记载的各种技术:

Core Java, J2EE, JSP, JDBC, Servlets, AJAX, XML, HTML, XSLT, Web Services, CSS, JavaScript, SQL, Oracle 10g, MySQL 5.0., JMS,Eclipse, Adobe Flex Builder 3.x,UML, JDBC, SVN, JUnit, VSS, Jira, HTML, DHTML, CSS, AJAX, JavaScript, XML, MXML, Action Script, Servlet, JSP, JSTL, Hibernate 3.x, Spring 2.x, IBatis, SOAP, UDDI, WSDL, Apache Axis, Web logic Server 8.x, Apache Tomcat 5.0, Struts Framework, MVC, ANT, Maven.相当的让人印象深刻…——对于那些从来没有面试过Java程序员的人来说。我并不想说这些应聘者在撒谎,只是这些人跟你的谈话坚持不到三分钟就会在80%的这些技术上露馅。他们可能听说过或者是试过这些技术或工具,这对于他们来说已经足够可以把它们列入简历了。那剩余的他们能说清楚的20%是什么?框架。基本上他们都会向你解释如何配置Struts

或Spring,甚至如何让Spring和Hibernate通信。顺便说一句,他们全都喜欢Hibernate,因为它能让你省去了写SQL,而他们对SQL查询语言的知识知之甚少。

每当我看到简历上写满了这些Struts,Springs,Hibernates等东西,我就会这样问,“假设,你不允许使用任何框架。你要从数据库中的客户表和订单表中取出数据,把它们放到Web页面上,请详细完整的解释一下这整个过程。”对大部分人来说,让他们写出一些纯SQL将是一种致命请求…

有个人在简历上写了JQuery。我问她,“你为什么要用JQuery”…20秒钟的停顿…“我喜欢它,它很好呀!”这就是所有我能从她那挖掘出的关于JQuery的信息。

两周前,我参加了一个旧金山JavaOne大会里的一个技术主题会。Brian Goetz向我展示了一些Lambda表达式(也就是闭包)的样例代码,这个东西将在明年的Java8中出现。这是一个相当高级的语言特征,它所用的Java语法是给有勇气的人准备的。我在想,“在企业Java世界,谁会去用闭包?10%的程序员?5%?”。Java中引入这些表达式只是好玩?只因为它很酷?是因为其它函数式语言中有它?

软件开发产业正在发生变化。它将不再需要更多的程序员。它需要的是高级匠师,能够在软件出问题时配置并替换相关代码。理想情况下,你的团队中应该有一个Java高手,他能真正理解你们应用中的代码,不仅能够从模块级调整它们,并且能理解每行Java代码。这样的人多少也该知道如何写SQL外连接,知道如何纠正编译问题,等等。

典型的企业经理都希望手下拥有更多的软件开发人员。多管一些人是向上晋升的一种捷径。是这么回事。但如果你足够聪明,你应该确保你那一堆框架程序员中至少有一个是货真价实的。

我又收到了一份简历,将在明天早上10点面试。这简历看起来很眼熟。我只看了它工作过得公司和干的项目。上面其它的信息都是没用的——明天早上10点钟他自然会现出原形。

明天的更新。现在是早上10点15。又一个面试结束了。第四个错误的回答是,要想把数据传送到浏览器,一个servlet需要把数据放到HTTPSession对象属性里。在听了10分钟这样的回答后,你会认为我终止这次面试的行为很粗鲁吗?

明天的明天的更新。我给这个职位每小时的报酬上增加了5美元。偏偏这第一个面试者就扛着胜利的大旗通过了我的面试。别以为这区区5美元就能叩开栖息着有才能的程序员的奇异世界的大门!

Java程序员的堕落 篇2

Java程序设计教学的目标,不仅要求学生掌握Java程序设计的基本理论,更要求学生能编写出符合实际需求的程序,使软件产品符合用户的使用习惯,在此教学中引入项目教学法较合适。如在“数据库编程”教学中,可选择“学生信息管理平台设计”这一项目,并设计“编写学生信息输入模块程序”、“编写学生信息查询模块程序”和“编写总控模块程序”三个任务,设计的任务和问题要照顾不同程度学生的需求。

1 Java小程序和应用程序

用Java可以编写两种类型的程序:小程序(Java Applet)和应用程序(Java Appli Cation)。小程序是嵌入在HTML文档中的Java程序而Java应用程序是从命令行运行的程序。对Java而言,Java小程序的大小和复杂性都没有限制。事实上,Java小程序有些方面比Java应用程序更强大。但是由于目前工nternet通讯速度有限,因此大多数小程序规模较小。小程序和应用程序之间的技术差别在于运行环境。Java应用程序运行在最简单的环境中,它的唯一外部输入就是命令行参数。另一方面,Java小程序则需要来自Web浏览器的大量信息:它需要知道何时启动,何时放入浏览器窗口,何处,何时激活关闭。由于这两种不同的执行环境,小程序和应用程序的最低要求不同。

由于www使小程序的发布十分便利,因此小程序更适合作为Internet上的应用程序。相反,非网络系统和内存较小的系统更适合用Java应用程序而较少用Java小程序实现。另外,Java应用程序也很容易以Internet为基础环境,事实上有些优秀的Java应用程序正是如此。例如,Hotjava(用Java语言编写的WWW浏览器)。

2 教学思考

如何有效地进行Java程序设计教学是许多教师都在思考的问题。笔者根据多年教学经验关于Java程序设计的教学从以下几个方面进行探索:

2.1 精选教材,注重程序设计能力的培养

合适的教材,是有效教学的重要保障之一。合适的Java教材,应具有较好的知识覆盖面,难度适中,适合学生的具体情况。由于是新生,大多没有程序设计基础,所以诸如《Thinking in Java》、《objects First with Java》、《he Java Programming Language》经典书籍都不太适合初学者,而《Java:How to program》和《Java:in two Semesters》等教材则较为合适。

在开发工具方面,则选择了免费的Blue)。没有选择JBuilder,Netbean等集成开发环境以DE),是因为它们隐藏了很多Java处理机制,虽然容易上手,但不利于对Java语言本身的理解;而如果直接使用记事本、DOS命令环境则过于复杂。可见,开发工具的选择也是以培养程序设计能力为主要目标的。

在内容的选择上,推崇简化的原则,忽略了一些不常用的内容,如跳转标签、复杂的表达式运算规则、位运算、嵌套类等,既节约了课时,也能充分引导编写学生简单、可读性好的程序代码。

2.2 与时俱进,不断更新改进教学内容

Java语言处于不断的发展过程中,如从Java1.0版到现在的1.5版,有关图形用户界面设计的内容已经发生了很大变化,引入了事件委托模型、Swing组件等内容;在输入处理方面,引入了Scanner类,有效地简化了非GUI程序的输入问题。因此在选择教学内容时,也应与时俱进,采用新技术、新知识,与Java语言的发展保持同步。在教学过程中,用Scan-ner类代替了由程序员自己提供的输入处理类及其函数;在介绍GUI程序设计时,也尽量地使用更新Swing组件。

但在教学内容的选择上,也不应一味盲目求新,而应围绕预定的教学主线筛选教学内容。

2.3 综合运用多种教学手段,努力提高教学质量

根据《Java语言程序设计》的特点,采用多媒体教学与传统教学方式相结合的方式进行教学:

1)课堂教学应把多媒体教学方式与传统教学方式结合起来,适时切换使其互补,对重点、难点内容以及问题的推理过程,教师仍需要进行必要的板书,教师要有一定的时间离开键盘、鼠标和屏幕,结合传统教学方式,用自己的语言、身体姿态和表情传达知识和信息,并要经常性采用启发式提出问题,分析问题,得到问题的结论,灵活运用多媒体技术,将图、文、声、形相结合,展示动态的变化过程,以加深学生的印象和记忆,达到最佳教学效果。

2)在多媒体教学中,课件播放时间、速度、方式,教师的讲解、板书要与学生视觉、听觉、思考进行恰到好处的衔接,不能违背学生的认识规律,要解决好多媒体课堂中师生双向交流问题,适时从多媒体展示转换到传统的讲授,教师通过渊博的知识,巧妙地组织和精彩的讲授吸引学生,凭借丰富的表情,眼神和手势等,实现与学生广泛深入的交流与沟通,营造和谐默契的教学气氛,引发师生之间的共鸣,使教学进入最佳状态。

所以,在教学过程中,应综合应用多种教学手段,展示与演示相结合,黑板与投影与结合。对于不同的内容,也应采用不同的教学方法。比如,对于Java语法基础,选择与循环结构等比较基础、简单的内容,可以多通过屏幕展示的方式,强调关键点,再辅以一些恰当的实例,通过程序演示的方式深化这些语法。比如要介绍System.out.println与System.out.print的区别,就无需费尽口舌,只需编写一个简单的程序,让学生从直观的程序运行结果中去体会就行了。而对于类的聚合、类的继承、类的多态性等内容,则应从程序设计的算法思想、思路和步骤着手,先启发、调动学生,让学生知道接下来要做什么,引导学生积极主动地参与到算法的设计过程中来,必要时可以一边编写一边讲解。还可以给学生穿插一些比较有效的分析、设计工具,如可以教给学生使用简单的UML来设计类,从而引导学生用软件工程的思维来设计、编写程序。但在这个过程中,要注意把握好度,不应喧宾夺主。

总之,多媒体教学方法的运用一定要与Java课程的要求和教学特点结合起来,以培养学生良好的程序设计方法和解决问题的能力为主要目标,既要考虑传授的知识量和信息量,也应充分照顾授课的效果。

2.4 精选实例,强调教学内容连贯性

教师可以将企业中的项目案例进行拆解与组织,由于企业的项目案例并不能直接用于教学,需要把它分开,并合理有效的组织起来,这样才能达到应有的教学效果。通过合理的拆解与组织,将其应用到课堂上来。课堂上的案例分析可以提高学生对Java软件设计过程中的分析能力,教师在课堂中尽量使用比较接近学生本身的案例进行分析,这样的项目案例分析起来使得学生更加容易理解并接受。由于该案例接近学生自己的日常管理,因此,通过学生管理系统案例分析,强调教学内容的连贯性,学生更容易理解,更能够提高学生的学习兴趣。

2.5 注意实用性、趣味性,调动学生学习积极性

爱因斯坦有句名言:“兴趣是最好的老师”。在有限的课堂时间内,不可能把所有的东西都交给学生,尤其是对于Java语言,提供了丰富的类库资源,不可能在课程上一一介绍。因而,培养学生的学习兴趣,调动学生的学习积极性,自我学习,自我探索,意义重大,也是教学的重要目标之一。

相对来说,程序设计是比较枯燥的,特别是在初学阶段,所选的实例往往没有实用性、趣味性。所以,在教学过程中,要尽可能的选择一些实用的、有趣的例子。一种方式是采用前面所说的连贯性原则,这样可以在有限的时间内介绍一些实用的例子。可以引人类似用于Java学习的Robocode游戏实验项目Rohocode是IBM的一位工程师Mat Nelson用Java语言所创造的机器战斗仿真引擎,是一款专门为程序员设计的游戏半成品。利用该引擎,学生编写几行简单的代码,就可以创造出一个在屏幕上四处疾驰的机器人坦克,参加游戏对战。为了提升自己设计的坦克的能力,学生就要使用选择、循环、继承、多态等手段通过编程实现,于满足中增加兴趣,于不满意中锐意进取。

3 结束语

Java编程语言程序的认识误区 篇3

软件的生命性

软件是有生命的,这可能是老调重弹了,但是因为它事关分层架构,反复强调都不过分。

一个有生命的软件首先必须有一个灵活可扩展的基础架构,其次才是完整的功能。

目前,很多人对软件的思想焦点还是落在后者:完整的功能,觉得一个软件功能越完整越好,其实关键还是架构的灵活性,就是前者,基础架构好,功能添加只是时间和工作量问题,但是如果架构不好,功能再完整,也不可能包括未来所有功能,软件是有生命的,在未来成长时,更多功能需要加入,但是因为基础架构不灵活不能方便加入,死路一条。

正因为普通人对软件存在短视误区,对功能追求高于基础架构,很多吃了亏的老程序员就此离开软件行业,带走宝贵的失败经验,新的盲目的年轻程序员还是使用老的思维往前冲。其实很多国外免费开源框架如ofbiz compiere和slide也存在这方面陷阱,貌似非常符合胃口,其实类似国内那些几百元的盗版软件,扩展性以及持续发展性严重不足。

那么选择现在一些流行的框架如Hibernate、Spring/Jdonframework是否就表示基础架构打好了呢?其实还不尽然,关键还是取决于你如何使用这些框架来搭建你的业务系统。

存储过程和复杂SQL语句的陷阱

首先谈谈存储过程使用的误区,使用存储过程架构的人以为可以解决性能问题,其实它正是导致性能问题的罪魁祸首之一,打个比喻:如果一个人频临死亡,打一针可以让其延长半年,但是打了这针,其他所有医疗方案就全部失效,请问你会使用这种短视方案吗?

为什么这样说呢?如果存储过程都封装了业务过程,那么运行负载都集中在数据库端,要中间J2EE应用服务器干什么?要中间服务器的分布式计算和集群能力做什么?只能回到过去集中式数据库主机时代。现在软件都是面向互联网的,不象过去那样局限在一个小局域网,多用户并发访问量都是无法确定和衡量,依靠一台数据库主机显然是不能够承受这样恶劣的用户访问环境的。

从分层角度来看,现在三层架构:表现层、业务层和持久层,三个层次应该分割明显,职责分明,持久层职责持久化保存业务模型对象,业务层对持久层的调用只是帮助我们激活曾经委托其保管的对象。所以,不能因为持久层是保管者,我们就以其为核心围绕其编程,除了要求其归还模型对象外,还要求其做其复杂的业务组合。打个比喻:你在火车站将水果和盘子两个对象委托保管处保管,过了两天来取时,你还要求保管处将水果去皮切成块,放在盘子里,做成水果盘给你,合理吗?

上面是谈过分依赖持久层的一个现象,还有一个正好相反现象,持久层散发出来,开始挤占业务层,腐蚀业务层,整个业务层到处看见的是数据表的影子(包括数据表的字段),而不是业务对象。

当然适量使用存储过程,使用数据库优点也是允许的。按照Evans DDD理论,可以将SQL语句和存储过程作为规则Specification一部分。

Hibernate等ORM问题

现在使用Hibernate人也不少,但是他们发现Hibernate性能缓慢,所以寻求解决方案,其实并不是 Hibernate性能缓慢,而是我们使用方式发生错误:

“最近本人正搞一个项目,项目中我们用到了struts1.2+hibernate3,由于关系复杂表和表之间的关系很多,在很多地方把lazy都设置false,所以导致数据一加载很慢,而且查询一条数据更是非常的慢。”

Hibernate是一个基于对象模型持久化的技术,因此,关键是我们需要设计出高质量的对象模型,遵循DDD领域建模原则,减少降低关联,通过分层等有效办法处理关联。如果采取围绕数据表进行设计编程,加上表之间关系复杂(没有科学方法处理、侦察或减少这些关系),必然导致系统运行缓慢,其实同样问题也适用于当初对EJB的实体Bean的CMP抱怨上,实体Bean是Domain Model持久化,如果不首先设计Domain Model,而是设计数据表,和持久化工具设计目标背道而驰,能不出问题吗?关于这个问题N多年前就争论过。

这里同样延伸出另外一个问题:数据库设计问题,数据库是否需要在项目开始设计?

如果我们进行数据库设计,那么就产生了一系列问题:当我们使用Hibernate实现持久保存时,必须考虑事先设计好的数据库表结构以及他们的关系如何和业务对象实现映射,这实际上是非常难实现的,这也是很多人觉得使用ORM框架棘手根本原因所在。

当然,也有脑力相当发达的人可以实现,但是这种围绕数据库实现映射的结果必然扭曲业务对象,这类似于两个板块(数据表和业务对象)相撞,必然产生地震,地震的结果是两败俱伤,软的一方吃亏,业务对象是代码,相当于数据表结构,属于软的一方,最后导致业务对象变成数据传输对象DTO,DTO满天飞,性能和维护问题随之而来。

领域建模解决了上述众多不协调问题,特别是ORM痛苦使用问题,关于 ORM/Hibernate使用还是那句老话:如果你不掌握领域建模方法,那么就不要用Hibernate,对于这个层次的你:也许No ORM 更是一个简单之道。

Spring分层矛盾问题

Spring是以挑战EJB面貌出现,其本身拥有的强大组件定制功能是优点,但是存在实战的一些问题,Spring作为业务层框架,不支持业务层Session 功能。

具体举例如下:当我们实现购物车之类业务功能时,需要将购物场合保存到 Session中,由于业务层没有方便的Session支持,我们只得将购物车保存到 HttpSession,而HttpSession只有通过HttpRequest才能获得,再因为在Spring业务层容器中是无法访问到 HttpRequest这个对象的,所以,最后我们只能将“购物车保存到HttpSession”这个功能放在表现层中实现,而这个功能明显应该属于业务层功能,这就导致我们的Java项目层次混乱,维护性差。 违背了使用Spring和分层架构最初目的。

领域驱动设计DDD

现在回到我们讨论的重点上来,分层架构是我们使用Java的根本原因之一,域建模专家Eric Evans在他的“Domain Model Design”一书中开篇首先强调的是分层架构,整个DDD理论实际是告诉我们如何使用模型对象oo技术和分层架构来设计实现一个Java项目。

我们现在很多人知道Java项目基本有三层:表现层、业务层和持久层,当我们执着于讨论各层框架如何选择之时,实际上我们真正的项目开发工作还没有开始,就是我们选定了某种框架的组合(如Struts+Spring+Hibernate或Struts+EJB或Struts+ JdonFramework),我们还没有意识到业务层工作还需要大量工作,DDD提供了在业务层中再划分新的层次思想,如领域层和服务层,甚至再细分为作业层、能力层、策略层等等。通过层次细化方式达到复杂软件的松耦合。DDD提供了如何细分层次的方式

当我们将精力花费在架构技术层面的讨论和研究上时,我们可能忘记以何种依据选择这些架构技术?选择标准是什么?领域驱动设计DDD 回答了这样的问题,DDD会告诉你如果一个框架不能协助你实现分层架构,那就抛弃它,同时,DDD也指出选择框架的考虑目的,使得你不会人云亦云,陷入复杂的技术细节迷雾中,迷失了架构选择的根本方向。

现在也有些人误以为DDD是一种新的理论,其实DDD和设计模式一样,不是一种新的理论,而是实战经验的总结,它将前人使用面向模型设计的方法经验提炼出来,供后来者学习,以便迅速找到驾驭我们软件项目的根本之道。

java程序员的成长之路 篇4

基础阶段, 可能需要经历1-2年吧.这个时段, 应该多写一些基础的小程序(自己动手写的越多越好).计算机是一门实践性很强的学科, 自己动手的东西, 记忆非常深刻, 效果要胜过读好多书.当然, 学Java基础的时候, 书籍的选择也非常重要, 好的书籍事半功倍, 能让你打个非常好的基础.而差的书籍, 很容易将你带入歧途, 多走很多弯路.书籍不在多, 而在乎读得精(有些书, 你读十遍都不为过).我记得我学Java的第一本书是的中文版, 网上有很多人都建议不要把这本书作为第一本的入门教程来看, 太难.我却想在此极力推荐它, 这本书确实是本经典之作.而且书中确实讲的也是Java中的一些基础技术, 没有什么太难的东西, 只不过比较厚, 学习周期比较长, 所以很多人中途会选择放弃.其实, 这本书是一本难得的入门教程, 对Java一些基础的东西, 讲得很全, 而且也很清晰, 更重要的是, 这本书能让你养成很多好的编程习惯, 例子也很多.建议你把大部分的例子自己去实现一遍.我的亲身经历, 我记得当时认真的看了2遍, 花了大概7个月的时间, 不过真的有很好的效果.另外一个教程, 就是卷一, 卷二的话可以不必要买.卷一看完, 自己再钻研一下, 就已经能达到卷二的高度了:).到那时, 你就会觉得看卷二没啥意思, 感觉浪费钱了.还有一个, 就是张孝祥的Java视频, 看视频有个好处, 就是比看书的记忆要深刻, 还有很多你可以跟着视频的演示同步操作.张孝祥的Java视频对初学者来说, 确实很有作用.总结起来: 看这些资料的时候, 一定要多写例子, 写的越多越好!

2.中级阶段

中级阶段, 是一个更漫长的时期, 能否突破此阶段, 跟个人的努力和天资有着很大的关系.你不得不承认, 同样一门新技术, 有些人一个月领悟到的东西, 比你一年的都多.这就是天资, 程序员是一个需要天才的工作.我想, 很多人听说李一男吧, 此君就是这样的人物, 三个月的时间就能解决好大一帮人几年解决不了的问题, 给华为某部门带来了很多的收益.哦, 这是题外话了, 与此篇的主题无关, 只是本人偶尔的感慨而已:).这个阶段, 就需要研究很多专题性的东西了, 比如: IO的实现原理, 多线程和Java的线程模型, 网络编程, swing, RMI, reflect, EJB, JDBC等等很多很多的专题技术, 钻研得越深越好.为了更好的提高, 研究的更深入, 你需要经常到网络上搜索资料, 这个时候往往一本书起不来很大的作用.选一个JDK版本吧, 目前建议选用1.6, 多多研究它, 尤其是源

代码(尽量!就是尽自己最大的努力, 虽然研究透是不可能滴).比如

说: util, collection, io, nio, concurrent等等包.可能有人会反对我说, 不是有API文档吗, 为什么还要研究这么多的源代码? 错了, 有API文档, 你仅仅只是知道怎么用而已, 而认真仔细的研读这些大牛的源码, 你就会深入更高的一个阶层, 自己的编码, 设计都会有很大的提高.如果有能力和精力, 我建议你把JDK的每一行代码都熟悉一遍, 绝对只有好处, 没有坏处!而且你会有些意外的收获, 比如, 当你仔细地读完concurrent包的时候(不多, 好像总共是86个类吧), 你就会对Doug Lea佩服得五体投地.这个时候最忌碰到难题就去寻找帮助, 去网上找答案!先把自己的脑袋想破吧, 或者等你的老板拿着砍刀冲过来要把你杀了, 再去寻求帮助吧.对于专题的学习, 英文原版的阅读是非常必要的, 看的越多越好, 多上上IBM的developer, SUN的网站吧, 当然Javaeye也很不错:), 有很多大牛, 呵呵.这个时候, 你应该建立自己的代码库了, 你应该自己去研究很多有意思的东西了.从一个200多M的文件中寻找一个字段, 最坏情况(在文件的末尾咯)也只需要1秒左右的时间, 你知道吗?这个阶段, 有很多很多类似的有趣的东西可以供你去研究, 你需要更多地关注性能, 规范性, 多解决一些疑难问题.需要学会所有的调试技术, 运用各种性能工具, 还有JDK附带的很多工具, 这些你都要熟练得跟屠夫操刀一样.也可以看看

, 这本书总结的也不错, 对写高效稳定的Java程序有些帮助.也可以看看模式方面的东西, 但是我建议模式不要滥用, 非得要用的时候才用, 模式往往会把问题搞复杂:).总结起来: 这个阶段是一个由点延伸到面的过程, 经过不断的学习, 演变成全面的深入!Java技术中你没什么盲点了, 还能解决很多性能问题和疑难问题, 你就成了一个合格的程序员了!:)[要想成为优秀程序员, 还得对数据库和操作系统很精通.]

3.高级阶段

高级阶段, 我就不敢妄言了.呵呵, 我感觉自己也是处于中级阶段吧.也是根据自己的一些经验, 谈谈自己的理解吧:

这个阶段, 需要研究各种框

架, Spring, struts, Junit, Hibernate, iBatis, Jboss, Tomcat, snmp4j等等, 我觉得这个时候, 只要是用Java实现的经典框架, 你都可以去研究.------在此申明一下, 我的意思不是说会用.光会用其实是远远不够的, 你可以选择自己喜欢钻研的框架, 去好好研究一下, 兴趣是最好的老师嘛.建议开始的时候, 研究Junit和Struts吧, 小一点, 里面都采用了很多的模式, 呵呵, 可以熟悉一下, 尽量想想人家为什么这么做.我建议主要的精力可以花在spring和jboss上, 尤其是jboss,经典中的经典, 设计, 性能, 多线程, 资源管理等等, 你从中可以学到的东西简直是太多了.而且它还有一本写得很好的参考书, 叫, 英文方面的资料也是非常的多.在工作中如果有机会参与架构的设计, 业务问题的讨论, 一定想方设法杀进去!这对自己的设计能力, 以及对设计如何运用在业务上有很大的帮助.毕竟, 程序都是为了更好地实现用户的业务的.这个时候, 需要更多看看软件工

java程序员的NB情书 篇5

// 老婆是私有,全局唯一,不可更改继承的 private static final class 老婆 {

// 老婆,r 代表换行

private static final String 漂亮等级 = “世界上最美丽的r”;

private static final String 温柔等级 = “世界上最温柔的r”;

private static final String 勤劳等级 = “世界上最勤劳的r”;

private static final String 善良等级 = “世界上最善良的r”;

private static final String 可爱等级 = “世界上最可爱的r”;

private static final String 懂我等级 = “世界上最懂我的r”;

private static final String 疼我等级 = “世界上最疼我的r”;

private static final String 照顾我等级 = “世界上最精心照顾我的r”;

private static final String 对我的意义 = “你是我一生最爱的人r”;

// 老婆是不能构造的,只能迎娶

private 老婆(){

}

private static final 老婆 marryMe(){

return new 老婆();

}

private boolean 笑(){

System.out.println(“老婆笑了:)”);

return true;

}

private boolean 哭(){

System.out.println(“呜呜,老婆伤心了。”);

return true;

}

private boolean 不在家(){

System.out.println(“老婆不在家。”);

return true;

}

private void 生气了(){

throw new 老婆很生气Exception(“老婆今天很生气,不爱理你。”);

}

private void 破涕为笑(){

System.out.println(“老婆破涕为笑。”);

}

@Override

public String toString(){

return “老婆你是:r” + 漂亮等级 + 温柔等级 + 勤劳等级 + 善良等级 + 可爱等级

+ “你也是:r” + 懂我等级 + 疼我等级 + 照顾我等级 + “总之,r” + 对我的意义;

}

}

/*

* 老婆很生气异常

*/

private static final class 老婆很生气Exception extends RuntimeException {

private static final long serialVersionUID = ***1319L;

private 老婆很生气Exception(String msg){

super(msg);

}

}

@SuppressWarnings(“unused”)

public static void main(String[] args){

老婆 myWife = 老婆.marryMe();

System.out.println(“老婆,首先我想对你说:” + myWife);

System.out.println(“如果你笑,”);

if(myWife.笑()){

System.out.println(“我更加高兴。r”);

}

System.out.println(“如果你哭,”);

if(myWife.哭()){

System.out.println(“我哄你笑。r”);

}

if(myWife.不在家()){

System.out.println(“我就很难入睡。r”);

}

System.out.println(“生活中难免有琐碎、摩擦。”);

try {

myWife.生气了();

} catch(老婆很生气Exception e){

System.out.println(e.getMessage());

System.out.println(“都是我的错,是我不好。请老婆不要生气。”);

} finally {

System.out.println(“直到....”);

myWife.破涕为笑();

// 为了空行

System.out.println();

}

int myAge = 28;

// 爱你一万年

while(myAge <= 10028){

boolean 我是否爱你 = true;

myAge++;

}

System.out.println(“希望能就这样平平静静的牵你手,一直走。”);

System.out.println(“我爱你,我的老婆。”);

System.out.println(“t ——你的老公于:2012年5月25日晚”);

}

Java程序员的堕落 篇6

成都java程序员培训哪个好?Java前景如何

中国每年有大量的计算机类毕业生进入企业,企业会把那些程序员列入优秀人才加以重视呢?斩获高薪的程序员需要哪些素质呢?

模块化思维能力

经常可以听到一些程序员有这样的抱怨,写了几年程序,变成了熟练工,每天都是重复写 一些没有任何新意的代码,这其实是中国软件人才最大浪费的地方,一些重复性工作变成 了熟练程序员的主要工作,而这些其实是完全可以避免的。

模块化思维就是要程序员在完成任何一个功能模块或函数的时候,要多想一 些,不要局限在完成当前任务的简单思路上,想想看该模块是否可以脱离这个系统存在,是否可以通过简单的修改参数的方式在其他系统和应用环境下直接引用,这样就能极大避免重复性的开发工作,如果一个软件研发单位和工作组能够在每一次研发过程中都考虑到 这些问题,那么程序员就不会在重复性的工作中耽误太多时间,就会有更多时间和精力投 入到创新的代码工作中去。一些好的程序模块代码,即便是70年代写成的,拿到现在放到一些系统里面作为功能模块都能适合的很好,而现在我看到的是,很多小公司软件一升级或改进就动辄全部代码重 写,大部分重复性工作无谓的浪费了时间和精力。四川地处中国大西南,肥沃的土地,丰富的自然资源,悠久的历史和绚烂多彩的少数民族文化,构成了多样性的自然和文化旅游资源。随着社会竞争的日益激烈,在很多大城市中,毕业就意味着失业。在大本生遍地的今天,本科甚至更低学历的毕业证书,早已不是求职的敲门砖了。工作经验和掌握的技术成为现在应届生的求职“利器”,难道要面“对剑未配妥,出门已是江湖”的窘境吗,赶紧抓紧时间,找一个自己感兴趣、适合自己的技术进行学习吧~

一说起it培训,很多人都表示苦不堪言,总有人被虚假信息坑过。很多人表示自己对其一窍不通,实在不知道怎么办才好。别着急,让小编为你奉上这些必备小技巧,带你快速简单的上手。那么,实用的攻略有哪些?一般会选择哪家呢?哪个是最实用呢?下面就随小编来看一看吧~

如何学习学好Java编程,学完后尽快成为一个可以参加工作的Java开发者。如何准备转行学习Java。相信很多初学Java者都在考虑这个问题。

如果你是在校学生,务必要在学好基础(比如计算机系统、算法、编译原理等等)的前提下,再考虑去进行下面的学习。第一部分:对于尚未做过Java工作的同学,包括一些在校生以及刚准备转行Java的同学。

Java基础首先去找一个Java的基础教程学一下,这里推荐国信安基础教学视频,学习Java基础的时候,应该尽量多动手,很多时候,你想当然的事情,等你写出来运行一下,你就会发现不是这么回事儿,不信你就试试。学完以上内容后,你应该对Java有一个基本的了解了,你可以用Java语言写出一些简单的程序,并且你用的是最简单的编辑器,比如记事本。这个时候,不要急于进入下一部分,留下几天好好写一些程序,尽可能熟悉这些基础内容。

java开发等你写上几天程序以后,你往往会比较迷茫,因为你写的东西似乎看起来毫无用处,比如实现一个简单的计算器,读取一个文件等。这个时候你就

应该去学着写一些让你觉得有意思的东西了,所以你应该学习更多的知识。这些内容主要是Web开发相关的内容,包括HTML/CSS/JS(前端页面)、Servlet/JSP(J2EE)以及Mysql(数据库)相关的知识。它们的学习顺序应该是从前到后,因此最先学习的应该是HTML/CSS/JS(前端页面)

你可以试着自己写一些页面,当然,你可以尽你最大的努力让它变得最漂亮。这部分内容对于后端Java来说,理论上不是特别重要,但至少要达到可以自己写出一些简单页面的水平。接下来,你需要学习的是Servlet/JSP(J2EE)部分,这部分是Java后端开发必须非常精通的部分,因此这部分是这三部分中最需要花精力的,而且这个时候,你要学会使用开发工具,而不能再使用记事本了,可以选择eclipse。当你下载安装好eclipse以后,看视频中的教程一步一步去学习,一定要多动手。关于Servlet/Jsp部分视频的选择,业界比较认可王勇老师的Java视频教程,因此推荐给大家。

当你完成开发框架的学习以后,你就该找工作了,在校的找实习,毕业的找全职。与此同时,在找工作的同时,你不应该停下你的学习,准确的说,是你在以后都不能停下学习。上面这些内容你只是囫囵吞枣的学会了使用,你可以逐步尝试着去了解更多的东西,网络是你重要的老师。好了,说了这么多了,就到此为止吧,希望本文可以帮助到作为程序猿或即将成为程序猿的你。

Java程序员的堕落 篇7

下面介绍一下如何使用JAVA来进行网络编程:

(1) 由于客户端通过IE同服务器建立联系, 所以客户端使用Applet, 服务器端使用Application。

(2) 服务器应设置成多线程, 应答多个客户的请求。

(3) 两端通信使用SOCKET机制。

1、Java中输入/输出流概念

过滤流Data Input Stream和Data Output Stream除了分别作为Flter Input Stream和Filter Output Stream的子类外, 还分别实现了接口Data Input和Data Output。接口Data Input中定义的方法主要包括从流中读取基本类型的数据、读取一行数据、或者读取指定长度的字节数, 如read Boolean () read Int () 、read Line () 、read Fully () 等。接口Data Output中定义的方法主要是向流中写入基本类型的数据或者写入一定长度的字节数组, 如write Char () 、write Double () Data Input Stream可以从所连接的输入流中读取与机器无关的基本类型数据, 用以实现一种独立于具体平台的输入方式;Data Input Stream可以向所连接的输出流写入基本类型的数据。

2、Socket机制

Socket是面向客户/服务器模型设计的, 网络上的两个程序通过一个双向的通讯连接实现数据的交换, 这个双向链路的一端称为一个Socket。Socket通常用来实现客户方和服务方的连接。客户程序可以向Socket写请求, 服务器将处理此请求, 然后通过Socket将结果返回给用户。

Socket通信机制提供了两种通讯方式:有联接和无联接方式, 分别面向不同的应用需求。使用有联接方式时, 通信链路提供了可靠的, 全双工的字节流服务。在该方式下, 通信双方必须创建一个联接过程并建立一条通讯链路, 以后的网络通信操作完全在这一对进程之间进行, 通信完毕关闭此联接过程。使用无联接方式时其系统开销比无联接方式小, 但通信链路提供了不可靠的数据报服务, 不能保证信源所传输的数据一定能够到达信宿。在该方式下, 通信双方不必创建一个联接过程和建立一条通讯链路, 网络通信操作在不同的主机和进程之间转发进行。

3、Java语言

Java语言的优点主要表现在:简单、面向对象、多线程、分布性、体系结构中立、安全性等方面。

(1) 简单性

Java与C++语言非常相近, 但Java比C++简单, 它抛弃了C++中的一些不是绝对必要的功能, 如头文件、预处理文件、指针、结构、运算符重载、多重继承以及自动强迫同型。Java实现了自动的垃圾收集, 简化了内存管理的工作。这使程序设计更加简便, 同时减少了出错的可能。

(2) 面向对象

Java提供了简单的类机制和动态的构架模型。对象中封装了它的状态变量和方法, 很好地实现了模块化和信息隐藏;而类则提供了一类对象的原型, 通过继承和重载机制, 子类可以使用或重新定义父类或超类所提供的方法, 从而既实现了代码的复用, 又提供了一种动态的解决方案。

Java是一种完全面向对象的程序设计语言, 它除了数组、布尔和字符三个基本数据类型外的其它类都是对象, 它不再支持全局变量。在Java中, 如果不创建新类就无法创建程序, Java程序在运行时必须先创建一个类的实例, 然后才能提交运行。

Java同样支持继承特性, Java的类可以从其它类中继承行为, 但Java只支持类的单重继承, 即每个类只能从一个类中继承。

Java支持界面, 界面允许程序员定义方法但又不立即实现, 一个类可以实现多个界面, 利用界面可以得到多重继承的许多优点而又没有多重继承的问题。

(3) 多线程

多线程使应用程序可以同时进行不同的操作, 处理不同的事件。在多线程机制中, 不同的线程处理不同的任务, 他们之间互不干涉, 不会由于一处等待影响其他部分, 这样容易实现网络上的实时交互操作。

Java程序可以有多个执行线程, 如可以让一个线程进行复杂的计算, 而让另一个线程与用户进行交互, 这样用户可以在不中断计算线程的前提下与系统进行交互。多线程保证了较高的执行效率。

参考文献

[1]廖雷等, Java程序设计教程, 中国电力出版社, 2003

[2]Warton, Java多线程编程初步, 电脑报, 2004.4.10

Java程序员的堕落 篇8

关键词 黑莓 BlackBerry Java 拍照程序

中图分类号:TP311 文献标识码:A

0引言

黑莓智能手机在2008年至2011年可以说一直是移动领域的霸主,其炫酷的外形,强大的硬件,多彩的应用,安全的通讯,令人们对其爱不释手,尤其是“911”事件发生后,其展现的强大通讯功能更让黑莓手机成为了美国官方通讯设备。本文在介绍了黑莓公司和黑莓智能手机的基础上,使用JAVA语言开发设计了一款拍照程序。

1黑莓(RIM)公司介绍

黑莓公司(Research in Motion,即RIM公司),是加拿大的一家通信公司,主要产品为手提通讯设备黑莓手机。公司由Mike Lazaridis与Jim Balsillie共同创立。黑莓公司使用C++和Java技术为其产品研发自己的软件。同样,黑莓公司也销售嵌入式无线通讯零部件。

1984年希腊裔加拿大商人的Mike Lazaridis与伙伴Doug Fregin成立RIM公司;1995年推出Pager 900。1998年,RIM生产有计算机键盘的PDA;1999年首支能通话的黑莓机RIM 6230问世,有强大的电子邮件功能,支持Push Mail电邮服务。Push mail最大的好处就是高实时性,用户像收短信一样收到邮件,并且使用了标准的QWERTY键盘。因为键盘上的按钮很像草莓种子,因此命名为“黑莓手机”。2004年,RIM公司有第100万位用户。

黑莓的主要用家是商务人士和政要,如总统、部长级官员、国会议员等等。2005年,RIM公司有400万用户,当中超过20万用户为美国政府官员。《福布斯》杂志在“2005年全球20大高增长品牌”评选BlackBerry的品牌的增长率36%,仅次于后来iPhone的38%。

2黑莓手机介绍

如今,黑莓手机已经有了近十年的历史,其发展出了Blod系列、Curve系列、Torch系列、Storm系列等。每一个系列都有经典机型,令人爱不释手。此外,从软件上说,黑莓当下主要有两个系列,一个是传统的BlackBerry OS,最新版本为7.1,另一个为BlackBerryOS10,为最新操作系统。

本文编写的软件主要用于OS7,以BlackBerryBold9900机型为测试机。

黑莓Bold9900是黑莓首次将QWERTY键盘和触摸屏幕结合,并且搭载全新的OS7系统,采用的是1.2GHz的处理器,通信方面支持3.5G的HSPA+以及NFC近场通讯。根据 BGR 的说法,BlackBerry 7 OS 是在 OS 6.1 基础上的改进,并未采用 PlayBook 平板的 QNX 系统,,"Liquid Graphics"触摸屏效果感觉不错,支持 HSPA+,720p HD 视频录制,8GB 存储,768 MB RAM,支持 NFC 和 AR(虚拟现实)。2011年8月12日至16日左右黑莓Bold 9900在中国上市。

黑莓Bold9900搭载了BlackBerry OS 7系统,其特色是相比过去在功能上有诸多改进和提升。比如拥有更出色的网络浏览器、并且系统的声控搜索功能也将被加入到全局搜索中,不但可以搜索本机内容,而且还可以搜索网页内容。而除了更易用和更方便的操作体验之外,新系统中还提供了Blackberry Balance服务,其特色在于可以更好的平衡用户的个人生活和工作之间安排。

最新的BlackBerry OS 7.0操作系统(非QNX),搭载主频为1.2GHz的高通 Snapdragon MSM8655处理器和768MB RAM,8GB ROM,性能可谓相当强悍。同时黑莓9900还加入了触屏加全键盘设计,使用起来更是如鱼得水,为用户带来更简便的操作。机身背部的摄像头有500万像素,配有闪光灯,成像质量较佳,并且支持720P录像拍照程序分析。

3总结与展望

本文在介绍了黑莓公司及相关背景的基础上,使用java语言开发了黑莓设备的一款拍照程序。此程序还可以进一步加入数字图像处理和UI界面的美化等代码,以达到更好的效果。

参考文献

[1] Cay S.Horstmann&Gary Cornell.Java核心技术.机械工业出版社,2014

[2] Y. Daniel Liang.Java.语言程序设计.机械工业出版社,2011

[3] 邓凡平.深入理解Android:Wi-Fi、NFC和GPS卷.机械工业出版社,2014.

[4] 明日科技.Java从入门到精通.清华大学出版社,2012.

Java程序员的堕落 篇9

首先说明,这几年接触的最多的程序员就是C++程序员和Java程序员,这只是我自己的一点体会而已,一个人的眼光难免是浅薄的。不过,欢迎拍砖,也欢迎对号入座。

从对基础知识掌握的程度来说,例如数据结构和算法,C++程序员要比Java程序员牢靠得多。究其原因,大概是因为C++程序员需要经常自己实现那些项目基础设施,但是Java程序员大多拿来即用。公平地说,C++不是一门适合程序员初学者的语言,但是Java是。C++程序看起来确实要比Java程序稍难懂一些,C++程序员往往思维更加严密。另一方面,我也发现内地的程序员要比沿海和发达城市的程序员基础扎实,而且低调内敛,不那么浮华,但是就是善于解决那些难啃的问题。

从视野的角度来说,Java程序员往往要更宽泛一些。由于语言本身上说,Java将很多C++逃不掉的陷阱和坑洞都填补了,仅从语言上说,无论是入门还是使用都显得更加简单,程序员就有更多精力来关注语言本身之上的事情。而且,Java领域的类库明显要丰富得多,所以在考虑某一个设计实现的时候,Java程序员很喜欢到处寻找可以拿来即用的类库,但是C++程序员习惯于自己去做其中大部分的事情。对于面向对象设计,模块和组件的设计,Java程序员往往要掌握得稍好一些。

在读书的时候,很多程序员都会给自己订立一个方向,有的喜欢写底层实现,有的喜欢研究人工智能,有的喜欢做企业应用,有的喜欢涉足互联网……就像对C++和Java等语言的选择一样。当然,工作有时候并不如心中所愿,这方面可能和自己最初的方向并不一致——有人选择继续,发现这个活儿也不错;有人就会选择放弃,继续执着地寻找自己喜欢的事情。我有三个当初和我一起学Java学J2EE的朋友,现在一个成了DBA,一个卖水果去了,还有一个在创业搞机顶盒。

当然,也有很多程序员天天都在纠结:学什么更赚钱?C++还是Java有前途?前端还是后端有前途?转管理还是转咨询?也有人这样问我,对于这样深不可测的问题,为了避免显得我没文化、见识浅,我总是一笑置之。

以下是我的观点:

对语言我始终没有一个固定的方向。在学校我见长的c和C++,数据结构及各类课程设计都是用C或C++完成的。但工作10年来,我一直在用Java,在我的博客中也大多是java的内容。但这其中,编程过一个C++和作为项目组长管理过一个C++(pure)CenterServer级的。

语言只是工具。用的好,写出符合要求的代码。客户实现才是我的终极目标。我更喜欢架构。最初是java或C++架构。新的问题是java(前端web层)+ C++(底层)这样的架构。能够实现是最终结果。过程却充满乐趣。

java程序员需掌握的知识点 篇10

答:是指作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行。事务处理可以确保事务性单元内的所有操作都成功完成,否则永久不会更新面向数据的资源。通过将一组相关操作组合为一个要么全部成功要么全部失败的单元,可以简化错误恢复并使应用程序更加可靠。一个逻辑工作单元要成为事务,必须满足所谓的ACID(原子性、一致性、隔离性和持久性)属性。

事务是数据库运行中的一个逻辑工作单位,由数据库管理系统(DBMS)中的事务管理子系统负责事务的处理。

原子性

事务必须是原子工作单元;对于其数据修改,要么全都执行,要么全都不执行。通常,与某个事务关联的操作具有共同的目标,并且是相互依赖的。如果系统只执行这些操作的一个子集,则可能会破坏事务的总体目标。原子性消除了系统处理操作子集的可能性。

一致性

事务在完成时,必须使所有的数据都保持一致状态。

隔离性

由并发事务所作的修改必须与任何其它并发事务所作的修改隔离。事务查看数据时数据所处的状态,要么是另一并发事务修改它之前的状态,要么是另一事务修改它之后的状态,事务不会查看中间状态的数据。

持久性

事务完成之后,它对于系统的影响是永久性的。该修改即使出现致命的系统故障也将一直保持。

二、多态,重写,重载

重写:重写的方法必须和被重写的方法相同的方法名、参数列表和返回值类型。

重载:重载时只能通过相同的方法名、不同的参数形式实现。不同的参数类型可以是不同的参数类型,不同的参数个数,不同的参数顺序(参数类型必须不一样)。

多态:父类对象持有对子类的引用,并可以调用子类的方法,但该方法的实际持有对象是子类。

三、JDBC思想

JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java编写的类和接口组成。1.注册驱动(只做一次)2.建立连接(Connection)

3.创建执行SQL的语句(Statement)

4.处理执行结果(ResultSet)

5.释放资源(ResultSet, Statement,Connection)

四、抽象类与接口的区别

1、接口是公开的,里面不能有私有的方法或变量,是用于让别人使用的,而抽象类是可以有私有方法或私有变量的。

2、实现接口的一定要实现接口里定义的所有方法,而继承类可以有选择地重写需要用到的方法

3、接口要用implement实现,抽象类要使用extends继承。

五、jsp和servlet之间的联系

六、面向对象3大特征

继承:继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。对象的一个新类可以从现有的类中派生,这个过程称为类继承。新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父

类)。派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要。继承性很好的解决了软件的可重用性问题。

封装:封装是面向对象的特征之一,是对象和类概念的主要特性。封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。

多态性:多态性是指允许不同类的对象对同一消息作出响应。很好的解决了应用程序函数同名问题。

七、MVC

Model(模型)是应用程序中用于处理应用程序数据逻辑的部分。MVC模式:用一种将业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。

通常模型对象负责在数据库中存取数据。

View(视图)是应用程序中处理数据显示的部分。

通常视图是依据模型数据创建的。Controller(控制器)是应用程序中处理用户交互的部分。

通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据。

八、软件开发模型:快速原型模型 优点:耦合性低、重用性高、部署快、可维护性高。

缺点:没有明确的定义、不适合小型,中等规模的应用程序、增加系统结构和实现的复杂性。

九、hibernate的延迟加载:延迟加载也叫懒加载,是提高程序执行效率的一种机制,即只有真正使用该对象的数据时才会创建。

十、exeuteupdate()和executequery()区别:前者用于修改已有数据,比如增删改。后者用于查询数据,需返回查询结果。

十一、单例模式

package SingletonDemo;//单例设计模式 public class Singleton {

/** * 实际开发中,我们通常会将饿汉模式和懒汉模式结合在一起来书写单例设计模式。//这个成员变量就是用来返回记录当前对外提供的那个对象。private static Singleton singleton;static{//在static初始化块中初始化,饿汉模式。确保成员变量仅仅被初始化一次。

} //构造方法私有化 private Singleton(){}

} //定义一个对外的方法,能够让用户调用该方法来获取一个属于该类的实例方法。//不管是哪个用户来调用这个方法都需要注意这个方法的返回对象永远是同一个。public static Singleton getInstance(){

} //懒汉模式

if(singleton==null){//第一次初始化。

} singleton=new Singleton();

singleton=new Singleton();return singleton;*/

十二、不用stop()的原因:因为它不安全。它会解除由线程获取的所有锁定。

不用suspend()的原因:suspend()方法容易发生死锁。调用 suspend()的时候,目标线程会停下来,但却仍然持有在这之前获得的锁定。挂起:wait()重写启动线程:notify()线程有四种状态分别是:运行、就绪、挂起、结束。

十三、什么时候使用同步和异步

如果数据将在线程间共享,必须进行同步存取。

同步 的实现方法有两种,分别是 synchronized, wait

上一篇:龙虎风云的四字成语下一篇:绿色志愿者培训手册