JAVA程序员自荐书

2024-09-28

JAVA程序员自荐书(共8篇)

JAVA程序员自荐书 篇1

java程序员面试宝典_java程序员面试经验

一些Java软件工程师求职者们,可能因为种种原因,对Java语言及其深层原理掌握不牢固,以至于在面试中犯各种错误。本期乔布简历小编将为大家带来的主题是java程序员面试经验,一起来了解一下java程序员面试宝典吧~

关键词:java程序员面试宝典,java程序员面试经验

以下是一些java程序员面试需要注意的地方:

1、对于此类岗位而言,具体的项目是用人单位招聘时最看重的参考因素。即便是没有工作经验的应届生,也要准备可作为自己能力参考的具体作品。如果从未参加过任何项目,可以准备自己在相关领域的课程设计,如有必要还可以将其修改为完整的项目。对于这份具体作品,求职者要有相当的了解。通过求职者对于该作品的讲解,招聘官会判断求职者的技术能力到底如何。

2、Java程序员要求掌握的技能会比较多,求职者在简历上可以分类依次列举出自己所掌握的专业技能,有证书的列出自己所持有的证书名称。在面试的时候,可以对自己所掌握的技能做出介绍,并辅以实例证明,这样会更具有说服力。

3、基础很重要,不要生疏了。不管应聘什么程序员岗位,基础永远都是最重要的。只有有了踏实的基础,再辅以较好的学习能力,这样才不会被互联网日新月异的变化甩开。很多程序员在面试时往往是因为答不出最基础的问题才会错失工作机会。面试前巩固一下基础知识,永远不要轻视了基础。

程序员要时刻关注技术前沿,将新技术与自己所从事的工作联系到一起,做一些深入思考,面试时谈谈这样的问题也是向面试官展现自己学习能力的好机会~

本文来源简历http://cv.qiaobutang.com/knowledge/articles/5652f8b30cf2a980ccfbcec2

JAVA程序员自荐书 篇2

Java是由Sun Microsystems公司于1995年5月推出的一种程序设计语言, 主要应用于互联网、个人PC、数据中心、游戏控制台、科学超级计算机。它刚开始的名字叫“Oak”, Java最初是为电视、控制烤面包机等家用电器的交互操作而设计的, 但当时并没有得到成功的推广、随着互联网的发展, Java经过数次的设计和改进后演变成当前受到极大欢迎的Java。

基于Java前身设计的特点, 其具备了可移植性和平台无关性, 成为了可以运行于不同的环境、不同的CPU上的程序语言。当前Java在全球得到了大量的推广和应用, 在计算机应用中发挥着强大的作用。

2 Java的特征

人们在传递信息时常利用自身的器官进行表达, 如声音、情绪、动作、姿态等。但这些声、图、像是转瞬即逝的, 在当前计算机发达的社会, 为保留这些信息并把信息进行传递, 程序语言便应运而生。

程序设计语言是表达软件的工具, 是面向机器的人工语言。Java作为一种高级的程序语言, 在实际应用中拥有面向对象, 简单性, 可移植性, 分布性, 动态性, 健壮性, 体系结构中立性, 安全性等多种优点。

2.1 简单性 (Simple)

Java语言是对C++语言的升华, 有不同与C++语言, 它在C++语言的基础上进行了很大的改进, 在保留了C++语言精华部分的同时也摒弃了C++语言中不常用、不易于理解、繁杂的部分。因为Java是在C++语言的基础上发展的所以懂得C++语言的人如果学校Java就会变的很简单, 同时, 学习Java语言也不需要拥有C++语言基础。

2.2 面向对象 (Object-oriented)

Java语言虽然是杂合语言, 但它是纯面向对象的编程语言。出了基本的数据类型外, 为了使程序语言更容易理解, Java程序语言的编写思想是纯粹面向对象的。

2.3 体系结构中立 (Architecture-neutral)

Java源程序经编译后的字码节与计算机体系结构及平台无关, 可在多种系统上运行。

2.4 可移植性 (Portable)

体系结构的中立性使Java程序可以在不同的平台上运行, 但Java语言的文本是统一的, 在面对不同的机器结构时, 整数32位、长整数64位保持不变。Java系统提供的类库是可以访问任意不同的平台的, Java语言的可移植性实现了软件的“一次开发, 处处运行”。

3 Java运行原理

程序语言是需要经过编译或者解释后才能被电脑执行的, Java程序语言需要经过编译和解释两个过程后才能够被电脑执行, Java源程序准备好, 第一步需要将其翻译成源代码;第二步由虚拟机将源代码转换成电脑能够识别的程序。

Java虚拟机 (Java Virtual Machine) 是想象中的机器, 它的实现需要通过在现实中的计算机上进行软件模拟, Java虚拟机有自己想象中的硬件, 如处理器、堆栈、寄存器等, 还具有相应的指令系统。虚拟机是机器与编译程序之间的连接者, 它具有抽象性, 在编译程序翻译成虚拟机能够识别的源代码之后, 解释器就能够将源代码转换成电脑能够执行的程序。由于编译程序与虚拟机拥有共同的接口, 所以编译程序主要的面向对象即是虚拟机, 只需要生成虚拟机能够理解的程序。在Java中称能够被虚拟机理解的代码为字节码, 虽然各个平台的解释器各不相同, 但是虚拟机都是相同的。Java源程序经过编译器编译后变成虚拟机能够理解的字节码, 虚拟机对字节码进行解释, 虚拟机将字节码发送给解释器, 解释器将其翻译成特定机器能够理解的机器码, 然后进行运行。

Java虚拟机由指令集、寄存器、栈、无用单元收集堆和方法区域五个部分组成, 它是Java语言的基础, Java语言相对于其他的程序语言而言比较容易学习, 使用的概念不多, 较简单。而且Java自身具有自动内存垃圾收集功能, 在运用Java时不需要对内存进行释放。

4 Java编译案例

4.1 Java开发工具

Java可采用的开发工具有多种, Sun公司开发的Java开发工具包JDK (Java Development Kit) 在Java开发中较为常用。

4.2 Java编译

在编写Java程序时, 首先需要按照Java语言的语法规则编写相应的源文件代码利用编译程序将Java源程序编译成可执行的程序, 生成由虚拟的机器代码组成的类文件。下面简要分析简单的Java程序。

使用编辑程序时, 输入上例中的源代码, 并以普通文本格式保存, 且保存时文件名必须为Hello Lucy.java。

然后用编译程序javac.exe编译上述源程序文件, 在Windows系统中输入javacHello Lucy.java

经编译后生成类文件Hello Lucy.class

然后使用解释程序java.exe进行解释运行, 命令为:java Hello Lucy

解释运行后, 屏幕将输出:

Hello, Lucy!

5 结语

Java的诞生是对传统传统计算机模式的挑战, 对计算机软件产业都产生了深远的影响, 随着信息时代的发展, Java在未来的时间里将会有更广阔的应用前景。

摘要:Java是随着软件开发技术的演变而出现的, 它是一种功能强大的新型的面向对象的程序设计语言, 可以解决很多传统上的程序设计难题。本文主要从java语言的历史、特点、编译等方面对Java程序设计进行了简要阐述。

关键词:Java语言,软件开发,程序设计,信息

参考文献

[1]冀振燕, 程虎.Java编译程序技术与Java性能[J].软件学报, 2000 (2) .

[2]闫伟, 谷建华.Java虚拟机即时编译器的一种实现原理[J].微处理机, 2007 (5) .

Java程序混淆技术综述 篇3

关键词:Java程序;混淆技术;软件水印;防篡改;软件版权保护

中图分类号:TP311.52 文献标识码:A 文章编号:1007-9599 (2012) 09-0000-02

人们对于计算机的依赖性随着软件技术的不断给人们带来便利和乐趣,使工作更富有主动性和操作性,但是任何事物在发展过程中都会有其负面效应与之相对,随着计算机软件应用量和种类的不断扩展,其使用安全问题便开始影响到人们的正确使用,并开始逐渐打击使用计算机的积极性,以及对于安全问题的无奈。主要攻击形式是通过对软件备份的破坏而直接将软件彻底摧毁,根据现有问题,当前的软件已经经过改良,重新调试,但是攻击则换角度也将攻击破解方式进行重组,使改良的部分无法发挥其作用,这样软件就不会得到应有的保护,依旧能够以非正规途径得到软件的任何数据,从而进行大面积的传播,这也就是为何当今软件盗版现象严重的途径之一。Java程序的出现,首先能够在网络上加快传播速度并且无客观條件可以轻松普及,但同时却能够通过无关性对产权进行有效的保护,不会轻易的被人盗用。

一、软件混淆技术基本原理

(一)基本释义

软件混淆技术是为了能够在软件受到侵害或是盗用时可以被保护的一种现代技术,软件技术首先咋1977年新西兰首次被提出,其实是将原有的程序的语言转换成一种密码语言,不能被一般的软件所识破的一种转换,并且研制出能够对这种转换进行评估的理论计算。转换的形式未变,只是在形式上保留原有的运行根组成,添加一些其他能够扰乱破坏和读取的程序代码。如今混淆技术开始不断的发展,诸多的被应用于产权的保护中,所谓的混淆就是通过语词的转变但保持其语义依然与之前相同,这就能保证软件在使用时功能是不变的,却能够防止逆向工程攻击和被静态分析。

(二)软件混淆技术的分类

当Java文件经过处理,在原有的基础上添加了其他程序代码成为类文件,这种类文件包括魔数( magic number) 、版本( version) 、常量池( constant pool ) 、访问标识( access flag s) 、(this)类、(super)类、接口( interfaces) 、域( fields) 、方法(methods) 和属性(attributes) 。

软件混淆主要通过类内混淆和类间混淆来根据不同的使用对象进行划分,类内混淆主要是克服(methods)中的code字段,而类间混淆却是针对多种类文件的综合体进行混淆处理,其主要的方式是合并和拆分相对的过程处理。

下面分别介绍两种混淆。

(1)、类内混淆

能够支持类内混淆的途径有数据混淆、控制混淆、切片混淆以及针对特定工具混淆四种。数据混淆是对数据的结构组成元素原有的书写方式进行修改,使其不再成为能够被认知的程序。主要有:变量存储和编码混淆、变量聚合混淆、顺序调整混淆、词法混淆以及移除注释和调试信息混淆。控制混淆是在信息传输过程中的保护,主要采取追踪定位等方式实时监测信息的状态,从而对其他袭击系统进行抵御。切片混淆,正常在一般的软件中问了能够让计算机更好的识读软件,所以增加了切片以帮助更好的理解,降低难度,而混淆了切片则能够使其首先无法有助于难度的下降,另外会造成对于程序的误导可能降低了或是更改了某些其他的程序,达到了增加难度混淆的目的。针对特定工具混淆软件为了能够起到保护作用,本身具有一定的反编译和反混淆的功能,会在一定的紧急时刻自动启动,而针对特定工具就是抑制了自动的传导,对于能够使软件本身内部之间的反编译都可以正常的进行,但是对于外部的反编译就不会在自动启动,这就是混淆的高级之处。相区别与前三者人的行为,针对特定工具混淆具有自动的功能针对的是自动化。如果能够与以上三种任意搭配就能够达到防住人机的共同目的。

(2)、类间混淆

类间混淆是合并拆分类文件而造成混淆的目的其中又有三种表现形式:类合并、类拆分、隐形类间混淆。类合并是要面对多个文件的自身组成的函数变量,通过将函数、变量的名称进行更改,注意在更改过程中一定不能同时出现两个或以上的名子,如果在合并中有参数同系统提示无法进行更改,则要为其中一个虚拟一个参数。另外如果合并文件中有继承关系的则需要在合并成功后加入一个布尔型的私有变量用于区分标识符相同的函数。类拆分则是观察现有的文件是否进行拆分,同时并作出相应的调整。对于结果是可拆分的类就是将A拆分为A1与A2,为了能够使A的要素都能够实现所以应该是A2处于继承A1关系。类型隐藏是通过接口来实现混淆,并且能够保证原文件并不需要改变接口,所以被称为隐形。相比类合并,类拆分和隐形类间混淆所用的时间相对较短。

二、软件混淆算法的攻击模式

(一)混淆算法的理论研究

混淆技术的提出者曾经试图将整个运行过程当做是一个虚拟黑箱来看,也就是说对于其他程序来说这就完全是另外一个软件和原软件无任何联系,从它的输入和输出的方式内容和代码都不同,这种在理论中是可以站的住的,但是在实际操作中会受到很多因素的限制,但在相对宽松的要求下还是可以实现混淆技术的使用。后来又根据该理论研究通过点函数来实现虚拟黑箱,总而言之其未来的研究空间还有很大,期待它的日益成熟。

(二)混淆算法的攻击模式

1.针对数据混淆算法的攻击

假定T 是对程序P 的一个单向的混淆变换,当且仅当从原始程序P 除去某些信息后,无法通过混淆后的程序Pc恢复出P。词法变换是最典型的不可逆混淆算法。虽然对于经过词法变换的程序进行攻击不可能恢复程序的原貌,但只要理解程序各个模块的含义就可能对程序产生威胁。例如根据无法被混淆的系统API 名称等关键字,攻击者可以推测出该模块的大致功能。

2.针对控制流混淆算法的攻击

目前,针对控制流混淆算法的主要攻击方法是动态分析。动态分析对大部分混淆算法的攻击作用,并阐述攻击模型. 对于控制流混淆而言, 变换后生成的程序中若存在始终不执行的分支,通过动态分析就能找到对破解程序有用的信息.针对控制流混淆,还有黑盒测试攻击, 该方法通过对程序进行黑盒测试,了解各个类及其函数的功能, 从而获取攻击者需要的信息. 这种方法对大多数的混淆变换均能加以攻击。同时,该方法也存在着一定的局限性: 黑盒测试缺乏自动分析工具,需要依靠大量的人力来完成分析工作。

三、对于混淆技术的未来预估

混淆技术是一种可用于抵制逆向工程和重组工程、对软件知识产权进行保护的程序变换技术。使用混淆技术虽然会使代码的效率有一定程度的降低,但是它的实现代价相对较小, 因而在近年引起了广泛的关注.由于混淆技术不改变程序功能的特性, 并且有些词法混淆算法甚至可以减小原程序的体积, 因此混淆技术得以在保护移动代码方面得到广泛的应用. 受移动平台资源的限制,今后混淆技术的研究方向一方面要加大混淆的力度,增加攻击者反编译的难度,另一方面也要考虑降低混淆算法对目标程序的运行负担。文献探讨了混淆技术在移动代理上的应用。目前保护软件知识产权的新技术主要有3种:混淆技术、软件水印技术和防篡改技术。这3种技术各有特长,将它们互相结合使用,可以给予目标软件更为可靠的保护,这也是目前研究的一个重要方向。对于混淆算法的评估、正确性验证以及如何研制高效可靠的混淆算法, 也是将来的发展方向之一。

四、总结

混淆技术是对软件进行的基础产权保护,为了能够增加破译的难度和代价,从而使产权盗版的情况发生率降低,同时还能提高软件水银的鲁棒性,有人提出将程序的编译混淆, 而不是混淆程序本身。但是该方法还有若干问题需要考虑。使软件的安全度进一步提升,给人们的使用带来了更多的福音,虽然该技术已经广泛运用也颇收到好评,在技术上依旧有大的发展前景,需要投入更多的研究力量。

参考文献:

[1]霍建雷,范训礼,房鼎益.Java标识符重命名混淆算法及其实现[J].计算机工程,2010,第1期

[2]咸星海.面向对象代码混淆技术研究及软件实现[J].中国科技博览,2010,第19期

[3]刁俊峰.软件安全中的若干关键技术研究[D],北京:北京邮电大学,2007

[4]李新良,罗戈夕.基于Java的代码混淆算法研究[J].湖南文理学院学报:自然科学版,2010,第3期

[5]霍建雷,范训礼.房鼎益,Java标识符重命名混淆算法及其实现[J].计算机工程,2010,第1期

[6]李婧.基于控制流混淆轉换的代码保护技术[J].计算机安全,2009,第8期

[7]袁征,冯雁,温巧燕,张华.构造一种新的混淆Java程序的不透明谓词[J].北京邮电大学学报,2007,第6期

JAVA程序员自荐书 篇4

JAVA时间格式化处理 日期格式化

import java.util.Date;import java.text.SimpleDateFormat;class dayTime { public static void main(String args[]){ Date nowTime=new Date();System.out.println(nowTime);SimpleDateFormat time=new SimpleDateFormat(“yyyy MM dd HH mm ss”);System.out.println(time.format(nowTime));} }

2007-05-17 09:54 转载地址

http://tb.blog.csdn.net/TrackBack.aspx?PostId=3809041、通过MessageFormat转化

String dateTime = MessageFormat.format(“{0,date,yyyy-MM-dd-HH-mm:ss:ms}” , new Object[] { new java.sql.Date(System.currentTimeMillis())});说明: yyyy-MM-dd-HH-mm:ss:ms 年yyyy 月MM 日dd 时(大写为24进制,小写为12进制)分mm 秒ss 微妙ms

2、修改数据库时用

queryDataSet.setDate(“dateField”, new java.sql.Date(new java.util.Date().getTime()));queryDataSet.setDate(“dateField”, new java.sql.Date.valueOf(“2005-05-03”));

3、通过SimpleDateFormat 转化

SimpleDateFormat dateFm = new SimpleDateFormat(“yyyy-MM-dd”);//格式化当前系统日期 String dateTime = dateFm.format(new java.util.Date());

4、具体讨论

Java 语言的Calendar(日历),Date(日期), 和DateFormat(日期格式)组成了Java标准的一个基本但是非常重要的部分.日期是商业逻辑计算一个关键的部分.所有的开发者都应该能够计算未来的日期, 定制日期的显示格式, 并将文本数据解析成日期对象.我们写了两篇文章, 这是第一篇, 我们将大概的学习日期, 日期格式, 日期的解析和日期的计算.我们将讨论下面的类:

1、具体类(和抽象类相对)java.util.Date

2、抽象类java.text.DateFormat 和它的一个具体子类,java.text.SimpleDateFormat

3、抽象类java.util.Calendar 和它的一个具体子类,java.util.GregorianCalendar

具体类可以被实例化, 但是抽象类却不能.你首先必须实现抽象类的一个具体子类.Date 类从Java 开发包(JDK)1.0 就开始进化, 当时它只包含了几个取得或者设置一个日期数据的各个部分的方法, 比如说月, 日, 和年.这些方法现在遭到了批评并且已经被转移到了Calendar类里去了, 我们将在本文中进一步讨论它.这种改进旨在更好的处理日期数据的国际化格式.就象在JDK 1.1中一样, Date 类实际上只是一个包裹类, 它包含的是一个长整型数据, 表示的是从GMT(格林尼治标准时间)1970年, 1 月 1日00:00:00这一刻之前或者是之后经历的毫秒数.一、创建一个日期对象

让我们看一个使用系统的当前日期和时间创建一个日期对象并返回一个长整数的简单例子.这个时间通常被称为Java 虚拟机(JVM)主机环境的系统时间.//-----------------------import java.util.Date;

public class DateExample1 { public static void main(String[] args){ // Get the system date/time Date date = new Date();

System.out.println(date.getTime());} } //-----------------------

在星期六, 2001年9月29日, 下午大约是6:50的样子, 上面的例子在系统输出设备上显示的结果是 1001803809710.在这个例子中,值得注意的是我们使用了Date 构造函数创建一个日期对象, 这个构造函数没有接受任何参数.而这个构造函数在内部使用了System.currentTimeMillis()方法来从系统获取日期.那么, 现在我们已经知道了如何获取从1970年1月1日开始经历的毫秒数了.我们如何才能以一种用户明白的格式来显示这个日期呢? 在这里类java.text.SimpleDateFormat 和它的抽象基类 java.text.DateFormat 就派得上用场了.二、日期数据的定制格式 假如我们希望定制日期数据的格式, 比方星期六-9月-29日-2001年.下面的例子展示了如何完成这个工作:

//-----------------------import java.text.SimpleDateFormat;import java.util.Date;

public class DateExample2 {

public static void main(String[] args){

SimpleDateFormat bartDateFormat = new SimpleDateFormat(“EEEE-MMMM-dd-yyyy”);

Date date = new Date();

System.out.println(bartDateFormat.format(date));} } //-----------------------

只要通过向SimpleDateFormat 的构造函数传递格式字符串“EEE-MMMM-dd-yyyy”, 我们就能够指明自己想要的格式.你应该可以看见, 格式字符串中的ASCII 字符告诉格式化函数下面显示日期数据的哪一个部分.EEEE是星期, MMMM是月, dd是日, yyyy是年.字符的个数决定了日期是如何格式化的.传递“EE-MM-dd-yy”会显示 Sat-09-29-01.请察看Sun 公司的Web 站点获取日期格式化选项的完整的指示.三、将文本数据解析成日期对象

假设我们有一个文本字符串包含了一个格式化了的日期对象, 而我们希望解析这个字符串并从文本日期数据创建一个日期对象.我们将再次以格式化字符串“MM-dd-yyyy” 调用SimpleDateFormat类, 但是这一次, 我们使用格式化解析而不是生成一个文本日期数据.我们的例子, 显示在下面, 将解析文本字符串“9-29-2001”并创建一个值为001736000000 的日期对象.//-----------------------import java.text.SimpleDateFormat;import java.util.Date;

public class DateExample3 {

public static void main(String[] args){ // Create a date formatter that can parse dates of // the form MM-dd-yyyy.SimpleDateFormat bartDateFormat = new SimpleDateFormat(“MM-dd-yyyy”);

// Create a string containing a text date to be parsed.String dateStringToParse = “9-29-2001”;

try { // Parse the text version of the date.// We have to perform the parse method in a // try-catch construct in case dateStringToParse // does not contain a date in the format we are expecting.Date date = bartDateFormat.parse(dateStringToParse);

// Now send the parsed date as a long value // to the system output.System.out.println(date.getTime());} catch(Exception ex){ System.out.println(ex.getMessage());} } } //-----------------------

四、使用标准的日期格式化过程

既然我们已经可以生成和解析定制的日期格式了, 让我们来看一看如何使用内建的格式化过程.方法 DateFormat.getDateTimeInstance()让我们得以用几种不同的方法获得标准的日期格式化过程.在下面的例子中, 我们获取了四个内建的日期格式化过程.它们包括一个短的, 中等的, 长的, 和完整的日期格式.//-----------------------import java.text.DateFormat;import java.util.Date;

public class DateExample4 {

public static void main(String[] args){ Date date = new Date();

DateFormat shortDateFormat = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT);

DateFormat mediumDateFormat = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.MEDIUM);

DateFormat longDateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG);

DateFormat fullDateFormat = DateFormat.getDateTimeInstance(DateFormat.FULL, DateFormat.FULL);

System.out.println(shortDateFormat.format(date));System.out.println(mediumDateFormat.format(date));System.out.println(longDateFormat.format(date));System.out.println(fullDateFormat.format(date));} } //-----------------------

注意我们在对 getDateTimeInstance的每次调用中都传递了两个值.第一个参数是日期风格, 而第二个参数是时间风格.它们都是基本数据类型int(整型).考虑到可读性, 我们使用了DateFormat 类提供的常量: SHORT, MEDIUM, LONG, 和 FULL.要知道获取时间和日期格式化过程的更多的方法和选项, 请看Sun 公司Web 站点上的解释.运行我们的例子程序的时候, 它将向标准输出设备输出下面的内容: 9/29/01 8:44 PM Sep 29, 2001 8:44:45 PM September 29, 2001 8:44:45 PM EDT Saturday, September 29, 2001 8:44:45 PM EDT

五、Calendar 类

我们现在已经能够格式化并创建一个日期对象了, 但是我们如何才能设置和获取日期数据的特定部分呢, 比如说小时, 日, 或者分钟? 我们又如何在日期的这些部分加上或者减去值呢? 答案是使用Calendar 类.就如我们前面提到的那样, Calendar 类中的方法替代了Date 类中被人唾骂的方法.假设你想要设置, 获取, 和操纵一个日期对象的各个部分, 比方一个月的一天或者是一个星期的一天.为了演示这个过程, 我们将使用具体的子类 java.util.GregorianCalendar.考虑下面的例子, 它计算得到下面的第十个星期五是13号.//-----------------------import java.util.GregorianCalendar;import java.util.Date;import java.text.DateFormat;

public class DateExample5 {

public static void main(String[] args){ DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.FULL);

// Create our Gregorian Calendar.GregorianCalendar cal = new GregorianCalendar();

// Set the date and time of our calendar // to the system&s date and time cal.setTime(new Date());

System.out.println(“System Date: ” + dateFormat.format(cal.getTime()));

// Set the day of week to FRIDAY cal.set(GregorianCalendar.DAY_OF_WEEK, GregorianCalendar.FRIDAY);System.out.println(“After Setting Day of Week to Friday: ” + dateFormat.format(cal.getTime()));

int friday13Counter = 0;

while(friday13Counter <= 10){

// Go to the next Friday by adding 7 days.cal.add(GregorianCalendar.DAY_OF_MONTH, 7);

// If the day of month is 13 we have // another Friday the 13th.if(cal.get(GregorianCalendar.DAY_OF_MONTH)== 13){ friday13Counter++;System.out.println(dateFormat.format(cal.getTime()));} } } } //-----------------------

在这个例子中我们作了有趣的函数调用: cal.set(GregorianCalendar.DAY_OF_WEEK, GregorianCalendar.FRIDAY);和: cal.add(GregorianCalendar.DAY_OF_MONTH, 7);

set 方法能够让我们通过简单的设置星期中的哪一天这个域来将我们的时间调整为星期五.注意到这里我们使用了常量 DAY_OF_WEEK 和 FRIDAY来增强代码的可读性.add 方法让我们能够在日期上加上数值.润年的所有复杂的计算都由这个方法自动处理.我们这个例子的输出结果是: System Date: Saturday, September 29, 2001 当我们将它设置成星期五以后就成了: Friday, September 28, 2001 Friday, September 13, 2002 Friday, December 13, 2002 Friday, June 13, 2003 Friday, February 13, 2004 Friday, August 13, 2004 Friday, May 13, 2005 Friday, January 13, 2006 Friday, October 13, 2006 Friday, April 13, 2007 Friday, July 13, 2007 Friday, June 13, 2008

六、时间掌握在你的手里

有了这些Date 和Calendar 类的例子, 你应该能够使用 java.util.Date, java.text.SimpleDateFormat, 和 java.util.GregorianCalendar 创建许多方法了.5、具体讨论2 这里只讨论java中对日期的几个简单类: 1.java.util.Date 2.java.text.DateFormat(Abstract),java.text.SimpleDateFormat 3.java.util.Calendar(Abstract),java.util。GregorianCalendar 首先看一下Date类,Date中只提供了几个获得本地时间的方法,具体用法见下: import java.util.Date; public class DateFormatTest { public DateFormatTest(){ }

public static void main(String[] args){ Date dt=new Date();

String localeString=dt.toLocaleString(); String gmtString=dt.toGMTString(); System.out.println(localeString); System.out.println(gmtString); System.out.println(dt.getTime());

System.out.println(System.currentTimeMillis()); } } 输出结果为: 2004-12-31 9:34:04 31 Dec 2004 01:34:04 GMT 1104456844281 1104456844500 从结果中可以看到,dt.getTime()与System.currentTimeMillis()这两个方法得到的时间是相同的。因为Date的构造函数中调用了System.currentTimeMillis()方法来从系统获得当前时间。其结果实际上是从1970年1月1日开始到当前所经历的毫秒数。以下的例子展示的是一个简单的格式化日期的代码: import java.text.*; import java.util.Locale; import java.util.Date; public class DateFormatTest { public DateFormatTest(){ }

public static void main(String[] args){ DateFormat df=DateFormat.getDateInstance();

SimpleDateFormat defaultSDF=new SimpleDateFormat(); SimpleDateFormat sdf=new SimpleDateFormat(“yyyy-MM-dd”); System.out.println(new Date());

System.out.println(df.format(new Date())); System.out.println(defaultSDF.format(new Date())); System.out.println(sdf.format(new Date())); }}

输出结果是:

Fri Dec 31 09:48:19 CST 2004 2004-12-31 04-12-31 上午9:48 2004-12-31

SimpleDateFormat的构造函数中String中字符的含义列如下表: Letter Date or Time Component Presentation Examples G Era designator Text AD y Year Year 1996; 96 M Month in year Month July; Jul; 07 w Week in year Number 27 W Week in month Number 2 D Day in year Number 189 d Day in month Number 10 F Day of week in month Number 2 E Day in week Text Tuesday; Tue a Am/pm marker Text PM H Hour in day(0-23)Number 0 k Hour in day(1-24)Number 24 K Hour in am/pm(0-11)Number 0 h Hour in am/pm(1-12)Number 12 m Minute in hour Number 30 s Second in minute Number 55 S Millisecond Number 978 z Time zone General time zone Pacific Standard Time; PST; GMT-08:00 Z Time zone RFC 822 time zon 上面展示的例子是将Date格式化成我们想要的格式,通常还会遇到需要将有些已经格式好的String再解析成Date的问题。在下面的文章中将会讲到。import java.text.*;import java.util.Locale;import java.util.Date;public class DateFormatTest { public DateFormatTest(){ } public static void main(String[] args){ String dateToparse=“30-12-2004”;

JAVA程序员自荐书 篇5

Java是时下最流行的编程语言之一。市面上也出现了适合初学者的大量书籍。但是对于那些在Java编程上淫浸多时的开发人员而言,这些书的内容未免显得过于简单和冗余了。那些适合初学者的书籍看着真想打瞌睡,有木有。想找高级点的Java书籍吧,又不知道哪些适合自己。

别急,雪中送炭的来了:下面我将分享的书单绝对值得拥有。ps,我也尽力避免列出为特定软件或框架或认证的Java书,因为我觉得那不是纯Java书。

1.《Java in a Nutshell》(Java技术手册)

与其说是必读书籍,还不说是参考文献。

2.《The elements of Java style》(Java编程风格)

目标读者就是Java程序员。通过提出一系列的Java从业规则,以及一些标准、惯例和准则,来说明如何有助于编写可靠又易于理解和维护的Java代码。

3.《Effective Java》(通用程序设计)

北京尚学堂-cctv央视网广告合作伙伴,专业IT培训机构,口碑最好的java培训、iOS培训、android培训、hadoop大数据培训、web前端培训机构,0元入学,先就业后付款,平均就业薪水9500以上

这本书真的只适合那些深入了解Java的开发人员。它汇集了78种不可或缺的程序员经验法则:为你每天在工作中都会遇到的编程挑战,提出了实践的最佳解决方案。

4.《The Java language specification》(Java编程规范)

作者为Java的发明者,这本书不仅提供了完整和准确的语言覆盖范围,还包含了实际编译行为时的正式语言规则。虽然阅读这本书不能让你学到什么技能,但是如果你想在Java VM更进一步的话,那就非读不可。

5.《Design patterns: elements of reusable object-oriented software》(设计模式:可复用面向对象软件的元素)

其实,这本书中的例子是用C ++和Smalltalk写的,是不是很奇怪为什么我还要推荐它呢?如果你想成长为一个开发人员,那么你就必须知道设计模式,这样才能充分利用他人最佳的实践经验,以及还可以向那些面临过相同问题的开发人员学习。当然其他类似的书籍还有很多,但它们都只能当做一些辅助性的学习。

北京尚学堂-cctv央视网广告合作伙伴,专业IT培训机构,口碑最好的java培训、iOS培训、android培训、hadoop大数据培训、web前端培训机构,0元入学,先就业后付款,平均就业薪水9500以上

6.《The Pragmatic Programmer: From Journeyman to Master》(程序员的修炼:从中级到大师)

此书并不只适合于Java开发人员。“这本书之所以值得推荐,其原因是它大大保持了编程过程的新鲜度,还有助于我们从前人那里汲取力量、不断地自我成长。”

7.《Patterns of Enterprise Application Architecture》(企业应用架构模式)

学会了设计模式之后该如何应用到企业框架中呢?这本书介绍了很多常见的企业设计模式。

北京尚学堂-cctv央视网广告合作伙伴,专业IT培训机构,口碑最好的java培训、iOS培训、android培训、hadoop大数据培训、web前端培训机构,0元入学,先就业后付款,平均就业薪水9500以上

8.《Refactoring: Improving the Design of Existing Code》(重构:改善现有代码设计)

如果你已经在编程行业淫浸过几年了,那么你一定得读一读这本书。重构可以使得代码可读性更强,也更容易维护。

9.《OSGi in Action: Creating Modular Applications in Java》(OSGi实战:用Java创建模块化应用)

无论如何,了解一下面向服务的编程是怎么回事,总归不是坏事。这本书的前几章就给出了非常不错的入门介绍和具体的例子。

北京尚学堂-cctv央视网广告合作伙伴,专业IT培训机构,口碑最好的java培训、iOS培训、android培训、hadoop大数据培训、web前端培训机构,0元入学,先就业后付款,平均就业薪水9500以上

10.《Clean Code: A Handbook of Agile Software Craftsmanship》(代码整洁之道)

最后但并非最不重要的,时不时地检查编码风格总是对的。开发人员90%的精力是花在维护上的,所以干净的代码真的非常重要。

作为程序员,你爱上读书了吗?

【最新文档更新请加入尚学堂】

java程序员情诗 篇6

一、初级版

我能抽象出整个世界... 但是我却不能抽象出你...

你肯定是一个单例,因为你是那样的独一无二...所以我的世界并不完整...

我可以重载甚至覆盖这个世界里的任何一种方法... 但是却不能覆盖对你的思念...

也许命中注定了 你与我存在于不同的包里...在 你的世界里,你被烙上了私有的属性...我用尽全身力气,也找不到访问你的接口...我不愿就此甘心,找到了藏身在javaeye神殿的巫师,教会了我穿越时空的方法...终于,我用反射这把利剑,打开了你空间的缺口...并发现了接近你的秘密...当我迫不及待地调用了爱你这个方法... 并义无返顾的把自己作为参数传进这个方法时... 我才发现爱上你是一个没有终止条件的递归... 它不停的返回我对你的思念并压入我心里的堆栈... 在这无尽的黑夜中,终于体验到你对我爱的回调...我的内存里已经再也装不下别人...当我以为将与你在这个死循环中天荒地老时...万恶的系统抛出了爱的异常...此刻我才发现,我不过是操纵于虚拟机下的一个线程,你也是...但我毫不后悔,因为在爱的洗礼之后...我看见了一个新的生命,那是我们的, 继承

引用于http:///note/93166942/

二、设计模式版

我可以抽象整个世界 但是却无法抽象出你。。于是我服了自己 我能封装任何对象,却无法描述你的属性。。

用了这么多单例,我发现单例也并不是一定安全的,因为它经不起分布式,跨VM。才发现你才是单例,因为,你是唯一的,即使我们分布在不同的地方。原型可以用在机器人身上,于是科学家不断的努力着人工智能。但它却克隆不出第二个你,因为这世上根本没有第二个你。。

我喜欢装饰,任何调用我的人,你会发现其实我是那么的简单。。

但在你面前,我却不会用它了,因为这太复杂了,以致于我无法解释它。。生活中每天都是模版,因为,它太像了,每天就是上班,下班,吃饭。但它却无法用在你身上,因为,你就像天气,于是模版就这样就丢弃了。。我喜欢命令,它要做的计划早已存在。只需要我去做就行了。你很喜欢用它,于是我希望够多定义几个属于我们的未来的方法。

我不太会用责任链,因为一切的责任都是我负责,我也不想会有其他的负责人。于是,我对它不熟。

访问者是个好东西,对于其他人来说,我们很好,虽然有时候会不好,但我们很快就会好。于是,它只会说我们很好。

代理是我们不可或缺的,月亮代表我的思念,秋风带走我的忧伤 正因为有了代理,才让我们无时不刻的感受着对方。

观察很好用,让我们可观悉这个世界的任何事物,因为它们有个共同的属性都是Object的子类。

JAVA程序员自荐书 篇7

目前纯粹的繁体字符主要由BIG5编码所规定, BIG5码中共规定了13053个繁体字;而纯粹的简体字符主要由GB2312编码所规定, 仅有6763个简体字。

设计思路是:先参照BIG5码的规范, 生成13053个繁体字 (每个繁体字都有一个唯一的Unicode编码) , 再由诸如Word等权威软件, 完成13053个繁体字到简体字 (每个简体字也都有一个唯一的Unicode编码) 的转换, 从中找出每个字在转换前后所对应的Unicode编码是否有发生变化。

如果前后有发生变化, 则在繁体字的Unicode编码和对应的简体字的Unicode编码之间建立映射关系, 并将该映射关系存入一张Hash表中, 以便于将来进行繁体到简体映射的查找。如果前后没有发生变化, 说明当前繁体字与简体字的字形是一致的, 不需要映射。

2 根据BIG5字符集产生繁体汉字

2.1 BIG5编码中的汉字

BIG5码使用了双字节储存方法, 以两个字节来编码一个字。第一个字节称为“高位字节”, 第二个字节称为“低位字节”。高位字节的编码范围0Xa1~0Xf9, 低位字节的编码范围0x40~0x7E及0Xa1~0Xfe。

在上面的基本编码规则下, 各编码范围对应的字符类型如下:0Xa140~0Xa3BF为标点符号、希腊字母及特殊符号, 另外于0Xa259~0Xa261, 存放了双音节度量衡单位用字:兙兛兞兝兡兣嗧瓩糎;高字节0Xa4~0Xc6, 低字节0x40~0x7E及0Xa1~0Xfe, 其中0Xc6A1~0Xc6FE为日文字符要除外, 共5401个常用繁体汉字, 先按笔划再按部首排序;高字节0x C9~0x F9, 低字节0x40~0x7E及0Xa1~0Xfe, 其中0x F9D6~0Xc6FE字符要除外, 共7652个非常用繁体汉字, 亦是先按笔划再按部首排序。因此, BIG5码共有5401+7652=13053个繁体汉字, 第一个繁体汉字为“一”, 最后一个繁体汉字为“龘” (读dá, 意思:龙腾飞的样子) 。

2.2 代码实例

下面是根据BIG5编码字符集生成所有繁体汉字的部分代码实例:

2.3 编码输出格式

在输出的繁体字符文档中, 规定字符串格式:先是每个字符连续输出, 最后加上一个换行回车, 这样是为了保证该文件被Word转换后, 能保持前后大小一致。因为Word在转换后保存时, 会默认加上换行回车。如果转换之前的文档结尾没有换行回车, 那么将导致转换后的文档大小不一致。如果已经有了, 则不必再增加。

生成的文件如果使用GBK编码格式输出, 文件大小为26108个字节 (13053*2+2, 其中两个字节分别为换行和回车) , 因为GBK是使用两个字节表示一个汉字, 用一个字节表示换行, 一个字节表示回车。使用Word进行转换后, 大小不变。

生成的文件如果使用UTF-8编码格式输出, 文件大小为39161个字节 (13053*3+2, 其中两个字节分别为换行和回车) , 因为UTF-8对于汉字需要使用3个字节来表示, 但是对于换行回车各只需要一个字节。使用Word进行转换后, 大小变为39164个字节。

因此, 在输出繁体汉字到文件时, 最好是使用GBK编码, 而不要使用UTF-8编码, 因为如果使用UTF-8编码进行文件输出, 在利用Word进行繁体到简体的转换后, 文件大小前后会发生变化, 将不利于后期建立Hash表。

另外一个重要的原因是:由于使用的是中文操作系统, 其默认编码是GBK, 所以如果输出文档是用GBK编码, 那么在用Word打开时, 不需要进行格式转换;如果使用UTF-8编码输出, Word文档在读取该文档时, 会对其进行格式转换, 除了会导致文件转换前后大小不一外, 在后续的比较过程中, 也会出现问题。

3 利用Word进行文档转换

将前文中所得的繁体字符文档复制为两份, 用Word打开其中的一份, 进行繁体到简体的转换。整个文档转换完毕需要大约1分钟, 完成后保存。

这里有一点要特别说明:Word在进行繁/简体转换时, 默认情况并不是仅仅对单个字进行转换, 而是会对词进行转换。如:繁体词组“全形”经过转换后就会变为简体词组“全角”!因此在使用Word进行转换前, 应对Word进行必要的设置, 保证Word在进行转换时, 不会对词组进行转换, 而只会对单个字符进行转换。在Word的“工具”、“语言”、“简体繁体转换”中可以设置是否对词汇进行转换。

4 生成映射Hash表

通过Word转换后, 就会得到包含全部繁体字符的文档和与之对应的简体字符的文档。下面的工作就是找出两个文档中, 繁体和简体不同的汉字, 并以此为参照, 建立HashMap, 用于快速繁体到简体的映射。

因为两个文档中共有13053个汉字和两个字节的换行加回车, 所以最终结果是共比较了13055个字符, 其中相同个数:10163;不相同个数:2892;HashMap大小:2892。这表明BIG5编码所定义的繁体字中, 实际上只有2892个繁体字与其对应的简体字不同, 需要进行映射。

下面是生成HashMap的部分代码实例:

5 繁/简体转换

生成Hash表后, 就可以利用该Hash表进行繁/简体映射转换。进行映射转换前, 一定要判断当前字符是否为Unicode汉字, 如果是汉字, 才进行映射转换, 毕竟映射转换需要查找HashMap。

判断语句如下:

通过上述方法, 判断当前字符是否为广义Unicode汉字。接下来就可以进行映射转换了, 部分代码如下:

6 结语

通过Java实现的是从繁体转换到简体汉字, 这也是实际中最常用的功能。而在某些特定情况下则是要将汉字从简体转换到繁体, 但从实际情况来看, 从简体转换为繁体, 相对于繁体转换为简体来说更为复杂。因为往往一个简体字会对应多个繁体字, 即为一对多的映射, 如:简体的“发”字就对应繁体的“發”和“髮”两个字, 这也是为何简体字中有大量多音字的原因。因此, 在进行简/繁体转换时, 如果只是简单地进行字与字之间的转换映射, 必然有一部分转换是错误的。这时候就需要对要转换的文档进行分词, 建立简体词组到繁体词组的映射关系, 这个问题将留待以后继续研究。

摘要:在实际应用中, 为了方便读者阅读, 常常需要进行繁/简体汉字之间的字形转换。这里所说的转换, 准确意义应该称之为映射。即两者都对应各自的Unicode编码, 在不同编码之间构筑一个映射关系。主要研究了在编写的Java程序中实现繁/简体转换映射。

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

软件的生命性

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

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

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

正因为普通人对软件存在短视误区,对功能追求高于基础架构,很多吃了亏的老程序员就此离开软件行业,带走宝贵的失败经验,新的盲目的年轻程序员还是使用老的思维往前冲。其实很多国外免费开源框架如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和设计模式一样,不是一种新的理论,而是实战经验的总结,它将前人使用面向模型设计的方法经验提炼出来,供后来者学习,以便迅速找到驾驭我们软件项目的根本之道。

上一篇:幼儿园环保节水课件下一篇:领导科学与艺术a