Java程序员供需分析
学生姓名:张挥
黑龙江八一农垦大学理学院数学系信息与计算科学2010级
中文摘要
Java是一种简单的,面向对象的,分布式的,说明型的,健壮安全的,结构中立的,可移植的,性能优异、多线程的动态语言。JAVA程序员广义上是指一群以JAVA为谋生手段的软件开发人员。狭义的说,是指拥有SUN公司JAVA认证的程序员。
Sun Java认证分为两个级别:Sun 认证Java程序员和Sun 认证Java开发员。Sun 认证Java程序员考试内容涉及Java所有相关知识、编程概念及applet开发技巧。Sun认证Java程序员考试旨在考察您通过应用软件分配进行复杂编程的能力。之后还要测试您完成编程所需的知识。每次考试都包括65道以上的多项选择题,时间大约为90分钟。考试合格后由Sun公司颁发的国际通用的Java程序员证书。
关键词:JAVA,JAVA程序员,JAVA开发员,动态语言。
引言
Java是一种简单的,面向对象的,分布式的,说明型的,健壮安全的,结构中立的,可移植的,性能优异、多线程的动态语言。Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由Sun Microsystems公司于1995年5月推出的Java程序设计语言和Java平台(即JavaSE, JavaEE, JavaME)的总称。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台、科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。Java分为三个体系JavaSE(Java2 Platform Standard Edition,java平台标准版),JavaEE(Java 2 Platform,Enterprise Edition,java平台企业版),JavaME(Java 2 Platform Micro Edition,java平台微型版)。所以一般JAVA培训也分为J2SE,J2EE,J2ME培训,各个体系的方向有所不同,JAVA培训的内容也有所不同。
通过JAVA培训,学员可以系统把握面向对象编程语言JAVA的核心语法,能够理解J2SE、J2ME、J2EE三种体系架构的理论思想和架构内容,把握JAVA程序设计的主要模式和核心思想,熟练把握基于JAVA语言的编程技巧和编程工具,能够独立完成基于JAVA的客户端和服务器端应用程序的开发、调试、部署和执行。一般JAVA培训包括以下内容:HTML/XML语言。数据库技术。Java程序设计。数据结构与算法。Java设计模式。J2EE设计和应用。
Eclipse/CVS/OpenSource.软件测试/安全性编码技术。UML设计。UNIX.项目实战。
JAVA程序员广义上是指一群以JAVA为谋生手段的软件开发人员。狭义的说,是指拥有SUN公司JAVA认证的程序员。
Sun Java认证分为两个级别:Sun 认证Java程序员和Sun 认证Java开发员。Sun 认证Java程序员考试内容涉及Java所有相关知识、编程概念及applet开发技巧。Sun认证Java程序员考试旨在考察您通过应用软件分配进行复杂编程的能力。之后还要测试您完成编程所需的知识。每次考试都包括65道以上的多项选择题,时间大约为90分钟。考试合格后由Sun公司颁发的国际通用的Java程序员证书。
1、Java语言的四大应用领域
Java技术自1995年问世以来,在我国的应用和开发也得到了迅速普及,总体来看,这些应用主要集中于企业应用开发。据有关单位调查显示,从开发领域的分布情况上看 Web开发占了一半以上,为57.9%,JavaME移动或嵌入式应用占15%,C/S应用占11.7%,系统编程占15.4%。近30%的开发者用Java从事C/S应用或系统级应用的开发。在桌面应用上,尽管Java在桌面GUI方面尚有不尽如人意之处,但仍然有很多开发者用来开发运行在多种操作系统平台上的桌面应用。具体应用在如下几个领域: 1.行业和企业信息化
由于Sun、IBM、Oracle、BEA等国际厂商相继推出各种基于Java技术的应用服务器以及各种应用软件,带动了Java在金融、电信、制造等领域日益广泛的应用。如清华大学计算机系利用Java、XML和Web技术研制开发了多个软件平台,东方科技的Tong Web、金碟的Apusic、中创的Inforweb 等J2EE应用服务器及和佳ERP和宝信ERP等ERP产品,已在许多企业得到应用。2.电子政务及办公自动化
东方科技、金碟、中创等开发的J2EE应用服务器在电子政务及办公自动化中也得到应用: 如金碟的Apusic在民政部、广东省市工商局应用;东软电子政务架构EAP平台在社会保险、公检法、税务系统得到应用;中创的Inforweb等Infor系列中间件产品在国家海事局、山东省政府及中国建设银行、民生银行等金融系统应用;无锡永中科技基于Java平台开发的国产化集成办公软件“永中Office”也已在一些省市政府部门得到应用。3.嵌入式设备及消费类电子产品
无线手持设备、通信终端、医疗设备、信息家电(如数字电视、机顶盒、电冰箱)、汽车电子设备等是今年以来比较热门的Java应用领域。在这方面的应用有中国联通CDMA 1X网络中基于Java技术的无线数据增值服务——UniJa。4.辅助教学
在辅助教学方面,东南大学与中兴通讯公司开发了远程教学系统,用于本地网上教学、课后学习和异地远程教育,清华大学用Java进行了“计算机软件基础课”教学改革,分析研究Java教学软件BlueJ的汉化方案,电子科技大学应用Java RMI技术进行远程教育,西安电力高等专科学校采用Java技术,开发了交互式电站仿真系统,实现电站锅炉仿真、锅炉膛火焰仿真,为实现网上仿真进行有益探索。
不过,与Java技术应用比较普及的国家相比,我国在应用的深度和广度上都还存在一定的差距。为了加快Java技术在我国的普及,笔者在此提出以下几点建议: 1.政府主管部门要把Java技术及应用作为落实”十一五”软件及信息产业发展规划的重要环节,继续支持开发有自主版权的软件产品,支持建立Java技术产品评测中心,加强对相关产品的质量监管。
2.各行业主管部门及行业协会应积极组织软件企业开发基于Java的行业应用软件,有条件的可以建立行业软件组件库,这是防止低水平重复开发,加快国产软件商品化、产业化的有效办法。
3.通过学会、协会与有关企业合作,继续组织各种类型的Java技术交流及科普活动。
4.搞好Java社区及Java网站,采用多种途径加强Java的宣传教育培训与人才培养。
2、Java程序员就业发展方向:
Java程序员的未来发展方向大致分为两类:
一是成为管理人员,例如产品研发经理,技术经理,项目经理等;
二是继续他的技术工作之路,成为高级软件工程师、需求工程师等。
3、java程序员就业前景分析
目前,我国对软件人才的需求已达20万,并且以每年20%左右的速度增长。在未来5年内,合格软件人才的需求将远大于供给。2005年,我国软件人才的缺口已达42.5万,其中尤以JAVA人才最为缺乏。根据IDC的统计数字,在所有软件开发类人才的需求中,对JAVA工程师的需求达到全部需求量的60%~70%。同时,JAVA工程师的薪水相对较高。通常来说,具有3~5年开发经验的工程师,拥有年薪10万元是很正常的一个薪酬水平。80%学员毕业后年薪都超过了5万元。
现在,虽然JAVA人才的薪水很高,但是对该类人才需求旺盛的IT企业却很难招聘到合格的JAVA人员。其中,最根本的原因就是许多计算机专业的毕业生在读期间没有掌握实用的技能与经验,距离企业的实际用人需求有较大的差距。因此,计算机专业的大学生欲成为JAVA工程师,最便捷的一条路就是参加以实战项目为主要教学方法的JAVA职业技能培训,从而有效地缩短同企业具体用人需求之间的差距。全球有25亿Java器件运行着Java,450多万Java开发者活跃在地球的每个角落,数以千万计的Web用户每次上网都亲历Java的威力。今天,Java运行在7.08亿手机、10亿智能卡和7亿PC机上,并为28款可兼容的应用服务器提供了功能强大的平台。这么多应用,彻底改变了用户的生活。越来越多的企业,因为使用了Java而提高了生产效率。在中国,越来越多的用户,因为Java而降低了成本,享受了生活。
Sun公司副总裁、Sun研究院院士、软件部首席技术官詹姆斯·戈士林(JamesGosling)博士以“Java技术之父”闻名于世。作为Sun研究院院士,他亲手设计了Java语言,完成了Java技术的原始编译器和虚拟机。在他的带领下,Java现已成为互联网的标准编程模式以及分布式企业级应用的事实标准,其跨平台的技术优势为网络计算带来了划时代的变革.自1995年5月正式推出的11年以来,Java已从编程语言发展成为全球第一大通用开发平台。Java技术已为计算机行业主要公司所采纳,同时也被越来越多的国际技术标准化组织所接受。1999年,Sun推出了以Java2平台为核心的J2EE、J2SE和J2ME三大平台。随着三大平台的迅速推进,在世界上形成了一股巨大的Java应用浪潮。作为唯一在互联网上开发的语言,Java平台以其移动性、安全性和开放性受到追捧。据IDC预计,自2001年起的其后5年内,采用Java的IT产品的价值将翻番,在2006年将达到4.53亿美元,年增长率为14.9%。截止到2003年5月,Java注册开发商超过300万人,对JRE(Java运行环境)的下载达7200万次。詹姆斯·戈士林博士预计在3~5年内Java技术开发商将发展到1000万。无线Java也在迅速攀升。
据Sun公司副总裁詹姆斯·戈士林透露,Sun刚与中国联通和振戎融通公司结成了技术联盟,将用“UniJa”品牌进一步促进Java技术的无线应用和服务。手机制造商TCL公司也已取得了Java2平台的移动版的许可,使中国移动用户得以使用基于Java技术的新型TCL手机。而目前世界上采用Java技术的手机已有1.2亿部,全球七十多家运营商基于Java技术推出了200多款的不同类型的手机。詹姆斯·戈士林博士最近指出,“在短短的十年间,Java社团已发展成为拥有数百万之众的群体,他们以其聪明才智和协同作战的方式,为Java这一未来最酷的技术作出了巨大的贡献。那么,下一个十年,Java将发展到怎样的程度?只有那些使Java发展到今天的开发商群体才有资格回答这一问题。
我们相信,Java发展之路将把我们带向更加令人神往的前方。Java的前景一片辉煌!” Java程序员是美国SUN公司国际认证的程序员,她是目前全球最受重视、最受欢迎的程序员资格认证之一,具备这一认证就可以获得极好的工作机会和丰厚待遇。Java跨平台等许多特性使之成为当代成长最快的软件产品:它受到了大约150个许可证颁发机构、200所大学和50万开发者的拥戴;1000多个应用程序是用它编写的;有关它的书籍有800余种;Java开发套件的下载次数超过一百万次;Java BEANS? 开发套件的下载次数超过10万次;受到了全球所有主要计算机厂商的支持,而这一切都发生在其发表后的800天内;Java闯入企业计算的心脏正成为大众传媒舆论的推动力量,正在改变企业的计算环境。它通过为因特网商务提供安全和稳健平台的方式改变商业自身。
Java计算是各行各业中倍受信赖的企业解决方案。独立于平台的Java计算环境可以降低企业的总成本,缩短产品上市周期,安全地扩展公司的网络。不少国家到中国寻求合作伙伴时,都把能否用Java进行编程作为合作的前提条件。当前世界各地持有Java Programmer证书的人员供需差距极大,迫使企业不得不用高薪聘请Java程序员。因此,Java Programmer的含金量比一般的技术人员要高出很大一块。在美国、加拿大、澳大利亚、新加坡等发达国家和中等发达国家,持有Java Programmer认证证书的人年薪均在4-10万美金,而在国内持有Java Programmer认证的程序员也有极好的工作机会和很高的薪水。Java程序员是美国SUN公司国际认证的程序员,她是目前全球最受重视、最受欢迎的程序员资格认证之一,具备这一认证就可以获得极好的工作机会和丰厚待遇。Java跨平台等许多特性使之成为当代成长最快的软件产品:它受到了大约150个许可证颁发机构、200所大学和50万开发者的拥戴;1000多个应用程序是用它编写的;有关它的书籍有800余种;Java开发套件的下载次数超过一百万次;Java BEANS? 开发套件的下载次数超过10万次;受到了全球所有主要计算机厂商的支持,而这一切都发生在其发表后的800天内;Java闯入企业计算的心脏正成为大众传媒舆论的推动力量,正在改变企业的计算环境。它通过为因特网商务提供安全和稳健平台的方式改变商业自身。Java计算是各行各业中倍受信赖的企业解决方案。独立于平台的Java计算环境可以降低企业的总成本,缩短产品上市周期,安全地扩展公司的网络。不少国家到中国寻求合作伙伴时,都把能否用Java进行编程作为合作的前提条件。
当前世界各地持有Java Programmer证书的人员供需差距极大,迫使企业不得不用高薪聘请Java程序员。因此,Java Programmer的含金量比一般的技术人员要高出很大一块。在美国、加拿大、澳大利亚、新加坡等发达国家和中等发达国家,持有Java Programmer认证证书的人年薪均在4-10万美金,而在国内持有Java Programmer认证的程序员也有极好的工作机会和很高的薪水。詹姆斯·戈士林博士指出,“在短短的十年间,Java社团已发展成为拥有数百万之众的群体,他们以其聪明才智和协同作战的方式,为Java这一未来最酷的技术作出了巨大的贡献。那么,下一个十年,Java将发展到怎样的程度?只有那些使Java发展到今天的开发商群体才有资格回答这一问题。我们相信,Java发展之路将把我们带向更加令人神往的前方。Java的前景一片辉煌!”
总结
JAVA人才社会需求量大,根据IDC的统计数字,在所有软件开发类人才的需求中,对JAVA工程师的需求达倒全部需求量的60%~70%。同时,JAVA工程师的薪水相对较高。通常来说,具有3~5年开发经验的工程师,拥有年薪10万元是很正常的一个薪酬水平。80%学员毕业后年薪都超过了5万元。Java平台以其移动性、安全性和开放性受倒追捧。
【参考文献】
1、张京,闫术卓,《Java程序员生存手册 问自己赢得一份IT名企职位》,2010年7月。
2、保罗·戴特尔,哈维·戴特尔,《Java程序员教程》,2010年5月。
3、(美)Douglas A.Lyon著;朱剑平,汪青青等译,《Java程序员指南》,2005年。
4、(美)(D.I.乔希)Daniel I.Joshi,(美)(P.A.沃罗别夫)Pavel A.Vorobiev著;吕宏辉,李建萍译,《Java程序员参考大全》,1999年。
1 概述
许多程序设计语言的异常处理机制, 多出现在对错误问题的解决处理时却遇到健壮的程序, 这种相对不匹配的情况。Java语言属于目前主流型使用软件, 是具备异常处理机制的典型。它主要包括了对一个错误、异常信号的抛出和对获得的抛出的错误信号的正确处理两方面, 即抛出异常和捕获异常。Java的关键字与它本身的异常处理机制中三个组成部分都有较密切的联系, 下面就这些分别进行说明。
Throws:即后面跟随所有隐在的异常类型, 是为方便客户程序员对该方法的控制, 对客户程序员进行抛出异常这一环节。作为方法定义中的一部分, Java程序员必须将可以处理的潜在错误状态进行明确的指出, 并利用所有可以用得上的该方法中的代码进行处理。这个新的方法的编写必须经Java编译器强制性操作整个过程。
Throw:即后面跟随异常对象。判断用户自定义异常对应错误在何种情况下算是产生的, 这是throw语言的作用之一, 属于抛出这个异常新对象时对该方法的一种调试功能。在这个过程中, 编程者必须在程序选择较为合理的位置创建自定义异常的异常和对这个新的异常对象以throw语句形式进行抛出, 以此作为系统不能识别和创建用户自定义异常的一种处理办法。
Try-catch-finally:即try块 (警戒区) 中对全部可能抛出异常代码部分的收集、处理。finally块是可变化的, try块中的catch块中紧跟着所有的异常及其应该处理的部分, finally块一经确定, 无论是否处于有异常产生的情况下都会执行处理功能的。对关闭文件和流、释放系统资源等方面的清理, 必须在把控制权传输给其它程序之前通过这一方法进行处理。把系统恢复到原有状态, 是finally块的最终目的。
依据研究发现, 总程序数中try和throw语句程序分别占据了23.4%和24.6%, 是异常处理机制广泛使用中的常用比例设计, 这样不仅可以降低程序代码量, 也是描述具体操作的代码与专门纠正错误的代码相分离的重要工具;但就异常处理机制的内部结构、内容而言, 过程内部或过程之间的控制流极易受到continue、goto、exit语句的类似结构的影响, 这会成为信息结果不准确的诱因之一, 从而造成在结构测试、回归测试、静态程序切片、动态程序切片、程序理解等软件工程任务应用中的严重错误。
上面内容就是先进软件的主流程序Java程序中异常结构对控制流、数据流、控制依赖在分析技术应用的影响, 是程序软件普遍具备的一种特性, 是我们保障软件顺利应用必须时刻注意的问题。下面就此作出分析。
2 异常结构对Java程序静态分析的具体影响
所测试的程序在静态分析程序中无需执行就可扫描正文、直接分析程序的数据流和控制流、送出测试报告。
2.1 异常结构影响控制流分析
控制流图以控制状态为描述主体, 通过对系统控制转移路径的刻画和在特定数据驱动下具体状态的反映, 将程序控制流从控制角度进行详细描述的一种图示方法。在软件应用中, 数据流分析、控制依赖分析等许多程序分析技术和结构测试、回归测试等软件工程任务都在利用控制流图的描述信息。程序所有可能的执行路径, 用语句层次上的控制流图表示;程序语句块用控制流图中的结点表示;程序语句块之间可能的控制转移用边表示。将异常结构引入语句层次的控制流图可以促进控制流信息更加准确地把握, 换句话说, 就是对控制流的整个程序分析必须对执行try语句的所有路径实行系统性研究。为了保障这一过程, 控制流图进行四种有效路径的合理增加。一是当异常在try块顺利完成且被finally块抛出后沿调用栈传播继续传播;二是当异常被try块抛出后该曾未经处理或catch块抛出其它异常时, 将继续沿调用栈传播;三是当异常被try块抛出后该曾的catch块将异常已经进行了处理;四是当异常被try块抛出后由相应的catch块捕捉了后finally块又抛出了另一异常。
过程间的控制流图, 需要将所有过程按照下列方法连接。一是将每个调用结点和被调用方法的控制流图中的入口结点连接起来;二是将控制流中的退出结点和调用方法相对应的结点连接起来;三是当异常被一个方法抛出后经调用方法捕捉, 将退出结点与调用方法中相应的catch结点连接起来。异常被调用方法传播同时也已捕捉;异常被调用方法传播却并未处理异常。这两者均是异常处理机制在过程间的控制流图中逐步加入的两个路径。
2.2 影响数据流分析的异常结构
数据变换是系统模型的主要功能作用。系统模型是一系列加工单元对软件系统的抽象表现, 数据流促进各单元之间的相互关联、让加工单元传输并向其不断转化。程序中使用数据、定义数据和数据依赖等信息的汇聚过程就是数据流分析。
带有异常结构的数据流在现阶段有两种基本方法进行分析。一是数据流不断加入异常结构;二是单独表现异常结构的数据流。数据流分析中受异常结构的影响中, 程序信息被控制流图表示出来, 异常结构的数据流逐渐加入到原数据流图中。下面就用举例法对数据流分析中异常结构的影响作用进行分析。
图1中, 调用结点和被调用方法的控制流图中的入口结点用较粗的虚线连接, 而异常退出结点和调用方法中相应的catch结点用较细的虚线连接。考虑异常路径影响到达-定值、活跃变量、定值-引用链的具体情况, 是带有异常结构的控制流图进行数据流分析的必要条件。变量的定值点到达的点会在异常路径中有所变化, 是到达-定值常出现的情况。新的到达点 (8) (9) (10) 在变量x的定值点增加后, 必然导致到达点 (5) 的减少, 某些变量的活跃点在异常路径中明显有所增加。一方面, 异常结构对定值-引用链的影响, 使定值-引用链无法沿异常路径被发现。若 (9) 对变量x的引用被它在 (1) 的定值忽略, 就会导致定值-引用链<3, 5>的丢掉。另一方面, 新的定值-引用链在沿异常路径中被增加。若 (9) 对变量x的引用被它在 (1) 的定值增加了, 就会导致新的定值-引用链<1, 9>的增加。在用控制流图表示数据流信息后, 也会因此将数据流中异常对其产生的影响加以表示在该图上面。
2.3 影响程序依赖性分析的异常结构
通常情况下会利用程序依赖图表示程序的依赖性。控制依赖和数据依赖, 是定义中程序依赖图的结点之间存在的两种有向边。其中, 程序中条件语句、循环语句等对嵌入其中的语句的控制关系是由控制依赖描述的, 而赋值语句中左值对右值的数据依赖关系是由数据依赖进行描述的。由于控制依赖和数据依赖在异常的影响下表现类似, 本文只对控制依赖在异常影响下的表现进行了论述。entry结点与程序的关系为控制依赖, 属于通常定义中程序的入口结点。如图2所示, 是图1源程序的控制依赖图中的控制依赖部分。
一般情况下, 程序控制依赖受异常的影响, 主要产生了两个方面的表现。一是经常借助其他方法表示catch块中的语句。如g () 方法中的 (4) , 是main () 中的catch块中的语句 (9) (10) 经常产生依赖的, 而不是对方法main () 的入口;二是某个方法在被调用的过程中可能会将异常抛出, 从而导致有关调用方法的返回位置不能被确定, 被调用方法中的语句可能被方法中的某些语句产生依赖。若g () 在main () 的调用中将异常抛出, 就将进行main () 中 (8) 的执行命令;若是没有将异常抛出, 就会在 (7) 的返回后进行执行命令的继续。事实上, g () 中的 (4) 就会被该方法main () 中的 (7) 产生依赖。现阶段, 有人为了实现传统的程序依赖图对程序语句之间的依赖信息准确表达出来, 逐渐开始了程序依赖图新的表示方法的分析研究。
3 结语
Java语言是现今主流软件的典型代表, 本文以此进行了传统程序分析技术在异常结构下的影响表现分析。许多软件工具都在将控制流分析、数据流分析、控制依赖分析得到的信息进行了应用。从实际情况分析, 为了保障获取信息的准确度, 必须将异常结构对控制流分析、数据流分析、控制依赖分析三者的具体影响充分考虑进去。否则, 一些不确定信息在软件工具中的实际运用, 只会造成软件程序运行的一些严重性后果的产生。
摘要:控制流、数据流、控制依赖等是软件任务执行中比较常用的进行程序分析、技术分析和理解程序的程序模式。可提供较完善的异常处理机制, 是现阶段市场上流行的程序设计语言都基本具备的功能。本文着重分析了Java语言程序中的异常结构, 并对该程序结构在分析技术方面产生的不同影响进行了简单阐述, 希望在后期软件技术发展中有所借鉴。
关键词:异常结构,控制流分析,数据流分析,控制依赖分析,Java语言
参考文献
[1]宋道远, 贲可荣.Java程序异常信息分析插件的研究与设计[J].计算机科学, 2014 (08) .
[2]岳珍梅, 张伟刚.Java程序分析工具在复杂网络背景下的分析与设计[J].电子技术与软件工程, 2014 (13) .
[3]时雷, 虎晓红, 席磊, 张浩.Java程序设计课程教学分析[J].计算机教育, 2010 (14) .
[4]杜延宁, 赵银亮, 韩博, 李远成.一种数据结构制导的线程划分方法与执行模型[J].软件学报, 2013 (10) .
关键词:数据库;Java;JDBC;连接池
中图分类号:TP311.13文献标识码:A文章编号:1007-9599 (2013) 06-0000-02
目前各种各样的软件信息技术都逐渐的融入到了生活中,为社会发展和人们生活做出了极大的贡献。其中Java语言程序的开发和应用,在社会中都有着很大的突破,它不但打破了传统语言程序的模式,还要有效的对其信息技术进行了有效的发展。因此在进行Java程序数据访问时候,要从各方面入手,从而达到信息的最大化。
1Java语言程序的特点
目前Java已经广泛的应用在人们的生活和办公,而与其传统的语言设计程序相比,这种技术有着很好的通用性和高效性,而且随着信息防护技术的较强,Java程序已经将这种技术融入到了该软件的应用当中,从而也提高了该程序的安全性,使得人们的信息技术有了很好的保障。由此可见,我们在进行程序设计开发的时候,对于信息的安全保护这是十分重要的,只有有效的保护了信息,这种软件程序也能收到人们的清青睐。
当我们在进行应用程序的开发时,对于数据库的链接也是十分重要的,如果当程序在运行的时,对于应用程序数据库的没有提高其连接率,那么将会严重的影响着应用程序的功能,这也给人们带来了许多的不便,而且在进行程序开发的过程中,怎么样才能使得数据库得到高效的访问,这对信息技术施工人员来说是十分重要的。而且只有提高应用程序对访问的效率才能使得,该应用软件得到很好的发展。因此,我们可以看出Java数据的访问技术,是Java应用程序的命脉。
2JDBC访问数据库的方式
JDBC是Java中连接数据库的接口技术,它是支持基本SQL功能的—个通用低层的应用程序编程接口。JDBC主要有两类接口:面向程序开发人员的JDBC API和面向JDBC驱动程序的JDBC、Driver和API。Java语言提供了一组用来执行基本的数据库操作的种类和接口的JD—BC API,这些API包含在Java语言的java.sql包中。开发者使用这些API可以完成所有基本的数据库操作,诸如管理JDBC驱动程序,并可进行数据库连接、处理相关的操作、返回操作结果等。JDBC为Java开发人员开发数据库提供了统一的机制,然而在使用JDBC访问数据库的驱动程序的具体实现方式上。
3实现方式的比较分析
Java对数据库访问的方式主要有四种,它们分别是JDBC—ODBC桥接方法、本地API连接方式、网络协议和本地协议。对这些方法分类主要是因为在不同的情况下,这些方法有着不同的运用方式和应用效果。而且不同的访问方式也存在着不同的差异。所以,我们在访问方式的选取的时候,一定要选取合适的访问方法,否知在应用软件运行的时候,将会出现极大的问题,这对人们的办公和生活有严重影响。
3.1JDBC—ODBC桥接方式
这种方式是通过ODBC驱动程序来提供JDBC对数据库的访问。使用该方式,只需要在操作系统中创建数据库管理系统(例如Oracle)的某一ODBC数据源,就可在Java程序中访问该数据源。由于操作系统中的ODBC管理程序目前已基本能支持各种类型的数据源,在Java应用程序中可以直接使用JDK所附带的驱动程序sun.idbc.odbc.Jdbc Odbc Driver进行连接,因此这种方式是一种最便捷的使用方式。但是这种方式由于需要在JDBC API和ODBC API之间进行转换,因此从效率上来说,是最不理想的一种方式。
3.2本地API方式
是一种将标准的JDBC调用转换为本地调用,即转化为某—数据库管理系统(如Oracle)的客户端调用。因此,所调用的JDBC API将实际上转换为特定数据库供应商提供的数据库API,然后通过该数据库供应商的数据库API访问数据库。这类方式的效率比第—类稍高,然而依然存在JDBC API和本地API桥接转换的问题。此外,这种方式要求在每台客户机上预装本地API库,因此不利于应用系统的维护。
3.3网络协议方式
网络协议方式是将JDBC调用转换为独立于数据库管理系统的网络协议。JDBC驱动程序并没有直接和数据库进行通信,而是和一个中间件通信,然后这个中间件和数据库进行通信。这个中间件可将Java应用程序连接到不同的数据库。
3.4本地协议方式
本地协议方式也就是我们常说的本地连接,是采用纯Java驱动程序为基础的一种新型的连接模式,在其应用的时候是通过将JDBC调用系统直接转换为能够为数据库管理做服务的一种结构体系,进而生成一种网络管理协议体系,以保障访问数据库的顺利、持续和科学。这一类驱动器的应用是以驱动程序为基础,有数据库开发商自行开发和研制的一个环节。同时这种方式的应用对于一个生成其他数据库结构都是十分必要和关键的。
通过上述方式进行比较得出,我们可以看出这四种实现的协议连接方式中,网络协议和本地协议的使用和选择在访问率上有着重大的优势,同时存在着众多可移植性的优势,在这两个方面上,这两种连接和驱动方式是极为关键和有力的。在选用访问数据库来作为实现方式的时候,我们应当根据现有工作要求的实际情况入手去总结和归纳,针对程序库中需要访问数据的类型和结构体系来加载合适的处理模式和方法,从而顺利、科学的执行相关命令与要求。
4可复用的数据库连接池机制与实现
在Java程序来进行书库卡访问的时候,数据库的连接可谓是一条不可缺少的条件,也是现代化社会发展中最为关键的一个核心环节。在工作中,需要在访问之初设置一个可靠的连接通道,在访问结束之后需要及时的关闭这一连接通道。这样的访问方式对于预防各种新建、销毁文档有着重要的保护作用,同时还可以增加应用程序的工作效率,降低开发成本,因而在目前的操作中需要针对这一现象加以研究和处理,尤其是针对那些用户和速度要求高的数据库应用系统中,更是要及时的对这些问题加以总结和处理完善,从而使得整个管理体系得到有效的完善。这种结构体系在应用中数据库结构的连接完成之后,能够及时的将数据库的连接交还给连接池,将其中扩展到连接池的功能供应要求,使得其中的配置和管理策略方面的问题都能够得到有效的连接。在此之后,执行数据库的时候就和常规的应用程序相差无几了,其无论是程序类型还是程序连接技术,都能够根据连接管理方式的不同来进行归纳和总结,从而做到因地制宜的访问,以便数据库管理连接的正常、科学进行。
5结束语
当前,由于电子信息化时代的到来给我们的生活带来了极大的方面,让人们在足不出户的情况下,就可以了解到先关的知识点,这对社会的发展和人们的生活都有着极大的作用。目前,随着一些应用程序的普遍使用,人们在开始对其进行了一定的认识。不过由于我国在电子信息处理技术和数据访问技术等方面还是存在着严重的不足,而且这些也是电子信息应用程序的命脉,因此想要将电子信息应用程序进行很好的发展,我们只有对着些程序中存在的问题进行不断的完善和发展,而且在进行相关程序的我们还要向发达国家进行请教,只有这样才能推动我国的电子信息应用软件的发展,才能使人们的生活更加的便利。
参考文献:
[1]李阳,李晓东.基于JDBC的数据库连接池技术的研究[J].科技信息,2009(06).
[2]石义良,邓娟.JSP数据库访问技术研究[J].科技资讯,2009(02).
[作者简介]常红(1980.07.21-),女,汉族,黑龙江大庆人,黑龙江生物科技职业学院讲师,硕士学位,研究方向:计算机科学与技术专业。
1.abstract class Name { private String name;public abstract boolean isStupidName(String name){} }大侠们,这有何错误?答案: 错。abstract method必须以分号结尾,且不带花括号。
2.public class Something { void doSomething(){ private String s = “";int l = s.length();} }有错吗? 答案: 错。局部变量前不能放置任何访问修饰符(private,public,和protected)。final可以用来修饰局部变量(final如同abstract和strictfp,都是非访问修饰符,strictfp只能修饰class和method而非variable)。
3.abstract class Something { private abstract String doSomething();}这好像没什么错吧? 答案: 错。abstract的methods不能以private修饰。abstract的methods就是让子类implement(实现)具体细节的,怎么可以用private把abstract method封锁起来呢?(同理,abstract method前不能加final)。
4.public class Something { public int addOne(final int x){ return ++x;} }这个比较明显。
答案: 错。int x被修饰成final,意味着x不能在addOne method中被修改。
5.public class Something {
public static void main(String[] args){ Other o = new Other();new Something().addOne(o);}
public void addOne(final Other o){ o.i++;} } class Other { public int i;}和上面的很相似,都是关于final的问题,这有错吗? 答案: 正确。在addOne method中,参数o被修饰成final。如果在addOne method里我们修改了o的reference,(比如: o = new Other();),那么如同上例这题也是错的。但这里修改的是o的member vairable(成员变量),而o的reference并没有改变。
6.class Something { int i;
public void doSomething(){ System.out.println(”i = “ + i);} } 有什么错呢? 看不出来啊。
答案: 正确。输出的是”i = 0“。int i属於instant variable(实例变量,或叫成员变量)。instant variable有default value。int的default value是0。
7.class Something { final int i;
public void doSomething(){ System.out.println(”i = “ + i);} }和上面一题只有一个地方不同,就是多了一个final。这难道就错了吗? 答案: 错。final int i是个final的instant variable(实例变量,或叫成员变量)。final的instant variable没有default value,必须在constructor(构造器)结束之前被赋予一个明确的值。可以修改为”final int i = 0;“。
8.public class Something {
public static void main(String[] args){ Something s = new Something();
System.out.println(”s.doSomething()returns “ + doSomething());}
public String doSomething(){ return ”Do something...“;} } 看上去很完美。
答案: 错。看上去在main里call doSomething没有什么问题,毕竟两个methods都在同一个class里。但仔细看,main是static的。static method不能直接call non-static methods。可改成”System.out.println(“s.doSomething()
returns
”
+ s.doSomething());“。同理,static method不能访问non-static instant variable。
9.此处,Something类的文件名叫 OtherThing.javaclass Something {
private static void main(String[] something_to_do){ System.out.println(”Do something...“);} } 这个好像很明显。
答案: 正确。从来没有人说过Java的Class名字必须和其文件名相同。但public class的名字必须和文件名相同。
10.interface A{
int x = 0;} class B{ int x =1;}
class C extends B implements A { public void pX(){ System.out.println(x);}
public static void main(String[] args){ new C().pX();} } 答案:错误。在编译时会发生错误(错误描述不同的JVM有不同的信息,意思就是未明确的x调用,两个x都匹配(就象在同时import java.util和java.sql两个包时直接声明Date一样)。对于父类的变量,可以用super.x来明确,而接口的属性默认隐含为 public static final.所以可以通过A.x来明确。
11.interface Playable {
void play();} interface Bounceable { void play();}
interface Rollable extends Playable, Bounceable { Ball ball = new Ball(”PingPang“);}
class Ball implements Rollable { private String name;public String getName(){ return name;}
public Ball(String name){ this.name = name;}
public void play(){
ball = new Ball(”Football“);System.out.println(ball.getName());} }这个错误不容易发现。
答案: 错。”interface Rollable extends Playable, Bounceable“没有问题。interface可继承多个interfaces,所以这里没错。问题出在interface Rollable里的”Ball ball = new Ball(“PingPang”);“。任何在interface里声明的interface variable(接口变量,也可称成员变量),默认为public static final。也就是说”Ball ball = new Ball(“PingPang”);“实际上是”public static final Ball ball = new Ball(“PingPang”);“。在Ball类的Play()方法中,”ball = new Ball(“Football”);“改变了ball的reference,而这里的ball来自Rollable interface,Rollable interface里的ball是public static final的,final的object是不能被改变reference的。因此编译器将在”ball = new Ball(“Football”);“这里显示有错。
JAVA编程题 1.现在输入n个数字,以逗号,分开;然后可选择升或者降序排序;按提交键就在另一页面显示按什么排序,结果为,提供reset import java.util.*;public class bycomma{
public static String[] splitStringByComma(String source){ if(source==null||source.trim().equals(”“))
return null;
StringTokenizer commaToker=new tringTokenizer(source,”,“);String[] result = new String[commaToker.countTokens()];int i=0;
while(commaToker.hasMoreTokens()){ result[i] = commaToker.nextToken();i++;} return result;} public static void main(String args[]){
String[] s = splitStringByComma(”5,8,7,4,3,9,1“);int[] ii = new int[s.length];for(int i = 0;i for(int i=(s.length-1);i>=0;i--){ System.out.println(ii[i]);} } } 2.金额转换,阿拉伯数字的金额转换成中国传统的形式如:(¥1011)->(一千零一拾一元整)输出。package test.format;import java.text.NumberFormat;import java.util.HashMap;public class SimpleMoneyFormat { public static final String EMPTY = ”“;public static final String ZERO = ”零“;public static final String ONE = ”壹“;public static final String TWO = ”贰“;public static final String THREE = ”叁“;public static final String FOUR = ”肆“;public static final String FIVE = ”伍“;public static final String SIX = ”陆“;public static final String SEVEN = ”柒“;public static final String EIGHT = ”捌“;public static final String NINE = ”玖“;public static final String TEN = ”拾“;public static final String HUNDRED = ”佰“;public static final String THOUSAND = ”仟“;public static final String TEN_THOUSAND = ”万“;public static final String HUNDRED_MILLION = ”亿“;public static final String YUAN = ”元“;public static final String JIAO = ”角“;public static final String FEN = ”分“;public static final String DOT = ”.“; private static SimpleMoneyFormat formatter = null;private HashMap chineseNumberMap = new HashMap();private HashMap chineseMoneyPattern = new HashMap();private NumberFormat numberFormat NumberFormat.getInstance();private SimpleMoneyFormat(){ numberFormat.setMaximumFractionDigits(4);numberFormat.setMinimumFractionDigits(2); = numberFormat.setGroupingUsed(false);chineseNumberMap.put(”0“, ZERO);chineseNumberMap.put(”1“,ONE);chineseNumberMap.put(”2“, TWO);chineseNumberMap.put(”3“, THREE);chineseNumberMap.put(”4“, FOUR);chineseNumberMap.put(”5“, FIVE);chineseNumberMap.put(”6“, SIX);chineseNumberMap.put(”7“, SEVEN);chineseNumberMap.put(”8“, EIGHT);chineseNumberMap.put(”9“, NINE);chineseNumberMap.put(DOT, DOT);chineseMoneyPattern.put(”1“, TEN);chineseMoneyPattern.put(”2“, HUNDRED);chineseMoneyPattern.put(”3“, THOUSAND);chineseMoneyPattern.put(”4“, TEN_THOUSAND);chineseMoneyPattern.put(”5“, TEN);chineseMoneyPattern.put(”6“, HUNDRED);chineseMoneyPattern.put(”7“, THOUSAND);chineseMoneyPattern.put(”8“, HUNDRED_MILLION);} public static SimpleMoneyFormat getInstance(){ if(formatter == null) formatter = new SimpleMoneyFormat();return formatter;} public String format(String moneyStr){ checkPrecision(moneyStr);String result; result = convertToChineseNumber(moneyStr);result = addUnitsToChineseMoneyString(result); return result;} public String format(double moneyDouble){ return format(numberFormat.format(moneyDouble));} public String format(int moneyInt){ return format(numberFormat.format(moneyInt));} public String format(long moneyLong){ return format(numberFormat.format(moneyLong));} public String format(Number moneyNum){ return format(numberFormat.format(moneyNum)); private String convertToChineseNumber(String moneyStr){ String result; StringBuffer cMoneyStringBuffer = new StringBuffer();for(int i = 0;i < moneyStr.length();i++){ cMoneyStringBuffer.append(chineseNumberMap.get(moneyStr.substring(i, i + 1))); //拾佰仟万亿等都是汉字里面才有的单位,加上它们 int indexOfDot = cMoneyStringBuffer.indexOf(DOT);int moneyPatternCursor = 1;for(int i = indexOfDot1) cMoneyStringBuffer.delete(cMoneyStringBuffer.length()1, JIAO); cMoneyStringBuffer.insert(cMoneyStringBuffer.length(), FEN);if(cMoneyStringBuffer.indexOf(”零角零分“)!=-1)//没有零头,加整 cMoneyStringBuffer.replace(cMoneyStringBuffer.indexOf(”零角零分“), cMoneyStringBuffer.length(), ”整“); else if(cMoneyStringBuffer.indexOf(”零分“)!=-1)//没有零分,加 整 cMoneyStringBuffer.replace(cMoneyStringBuffer.indexOf(”零分“), cMoneyStringBuffer.length(), ”整“);else { if(cMoneyStringBuffer.indexOf(”零角“)!=-1) cMoneyStringBuffer.delete(cMoneyStringBuffer.indexOf(”零角“),cMoneyStringBuffer.indexOf(”零角“)+2); tmpBuffer.append(”整“); } result = cMoneyStringBuffer.toString();return result;} private void checkPrecision(String moneyStr){ int fractionDigits = moneyStr.length() -moneyStr.indexOf(DOT)-1; if(fractionDigits > 2)throw new RuntimeException(”金额“ + moneyStr + ”的小数位多于两位。“);//精度不能比分低 } public static void main(String args[]){ System.out.println(getInstance().format(new Double(10010001.01)));} } 3、继承时候类的执行顺序问题,一般都是选择题,问你将会打印出什么? 答:父类: package test; public class FatherClass { public FatherClass(){ System.out.println(”FatherClass Create“);} } 子类: package test; import test.FatherClass; public class ChildClass extends FatherClass { public ChildClass(){ System.out.println(”ChildClass Create“);} public static void main(String[] args){ FatherClass fc = new FatherClass();ChildClass cc = new ChildClass();} } 输出结果: C:>java test.ChildClass FatherClass FatherClass Create ChildClass Create 4、内部类的实现方式? 答:示例代码如下: package test; public class OuterClass { private class InterClass { public InterClass(){ System.out.println(”InterClass Create“);} } public OuterClass(){ InterClass ic = new InterClass();System.out.println(”OuterClass Create“);} public static void main(String[] args){ OuterClass oc = new OuterClass();} Create } 输出结果: C:>java test/OuterClass InterClass Create OuterClass Create 再一个例题: public class OuterClass { private double d1 = 1.0;//insert code here } You need to insert an inner class declaration at line 3.Which two inner class declarations are valid?(Choose two.) A.class InnerOne{ public static double methoda(){return d1;} } B.public class InnerOne{ static double methoda(){return d1;} } C.private class InnerOne{ double methoda(){return d1;} } D.static class InnerOne{ protected double methoda(){return d1;} } E.abstract class InnerOne{ public abstract double methoda();} 说明如下: 一.静态内部类可以有静态成员,而非静态内部类则不能有静态成员。故 A、B 错 二.静态内部类的非静态成员可以访问外部类的静态变量,而不可访问外部类的非静态变量;return d1 出错。故 D 错 三.非静态内部类的非静态成员可以访问外部类的非静态变量。故 C 正确 四.答案为C、E 5、Java 的通信编程,编程题(或问答),用JAVA SOCKET编程,读服务器几个字符,再写入本地显示? 答:Server端程序: package test;import java.net.*;import java.io.*;public class Server { private ServerSocket ss;private Socket socket;private BufferedReader in;private PrintWriter out;public Server(){ try { ss=new ServerSocket(10000);while(true){ socket = ss.accept();String RemoteIP = socket.getInetAddress().getHostAddress();String RemotePort = ”:“+socket.getLocalPort();System.out.println(”A in!IP:“+RemoteIP+RemotePort);in = new BufferedReader(new client come InputStreamReader(socket.getInputStream()));String line = in.readLine(); System.out.println(”Cleint send is :“ + line);out = new PrintWriter(socket.getOutputStream(),true);out.println(”Your Message Received!“);out.close();in.close();socket.close();} }catch(IOException e){ out.println(”wrong“);} } public static void main(String[] args){ new Server();} } Client端程序: package test;import java.io.*;import java.net.*;public class Client { Socket socket;BufferedReader in;PrintWriter out;public Client(){ try { System.out.println(”Try to Connect to 127.0.0.1:10000“);socket = new Socket(”127.0.0.1“,10000);System.out.println(”The Server Connected!“);System.out.println(”Please enter some Character:");BufferedReader line = new BufferedReader(new InputStreamReader(System.in)); out = new PrintWriter(socket.getOutputStream(),true);Out 3、接口和内部类、抽象类的特征答:接口:在一个类里,只有申明没有实现。内部类:是在一个类的内部定义的一个类;抽象类:是以abstract 定义的,里面至少有一个抽象方法。 4、文件读写的基本类 答:File Reader 类和FileWriter类分别继承自Reader类和Writer类。FileReader类用于读取文件,File Writer类用于将数据写入文件,这两各类在使用前,都必须要调用其构造方法创建相应的对象,然后调用相应的read()或 write()方法。 6、线程的基本概念、线程的本状态以及状态之间的关系 ?新建(Born): 新建的线程处于新建状态?就绪(Ready): 在创建线程后,它将处于就绪状态,等待 start()方法被调用?运行(Running): 线程在开始执行时进入运行状态?睡眠(Sleeping): 线程的执行可通过使用 sleep()方法来暂时中止。在睡眠后,线程将进入就绪状态?等待(Waiting): 如果调用了 wait()方法,线程将处于等待状态。用于在两个或多个线程并发运行时。?挂起(Suspended): 在临时停止或中断线程的执行时,线程就处于挂起状态。?恢复(Resume): 在挂起的线程被恢复执行时,可以说它已被恢复。?阻塞(Blocked)– 在线程等待一个事件时(例如输入/输出操作),就称其处于阻塞状态。?死亡(Dead)– 在 run()方法已完成执行或其 stop()方法被调用之后,线程就处于死亡状态。 5、串行化的注意事项以及如何实现串行化答:如果有循环引用是不可以串行化的。对象输出流的WriteObject方法和 对象输入流的ReadObect 方法 7、线程的同步、如何实现线程的同步答:当两个或多个线程同时访问同一个变量,并且以个线程需要修改这个变量。就要用到线程同步。在Java 中,同步是通过 synchronized 关键字来定义的。诺是想同步化某程序段,可以使用 synchronized(object){}方法,其中{}内的程序语句被同步化。 9、socket通信(tcp/udp区别及JAVA的实现方式)TCP——传输控制协议,具有极高的可靠性,保证数据包按照顺序准确到达,但其也有着很高的额外负担。UDP——使用者数据元协议,并不能保证数据包会被成功的送达,也不保证数据包到达的顺序,但其传输速度很快。大多数我们会使用TCP,偶尔才会动用UDP,如声音讯号,即使少量遗失,也无 关紧要。 10、JAVA的事件委托机制和垃圾回收机制 java 事件委托机制的概念,一个源产生一个事件并将它送到一个或多个监听器那里。在这种方案中,监听器简单的等待,直到它收到一个事件。一旦事件被接受,监听器将处理这个事件,然后返回。垃圾回收机制 垃圾收集是将分配给对象但不在使用的内存回收或释放的过程。如果一个对象没有指向它的引用或者其赋值为null,则次对象适合进行垃圾回收 11、JDBC调用数据库的基本步骤导入必要的类,装入JDBC驱动程序,识别数据源,分配一个Connection对象,分配一个Statement对象,使用Statement执行一个查询,从返回的ResultSet对象中检索数据,关闭ResultSet,关闭Statement对象,关闭Connection对象 12、解析XML文件的几种方式和区别答:Dom解析 在内存中创建一个DOM树,能随机访问文件内容,也可以修改原文件内容SAX解析 线性解析,不能随机访问,也无法修改原文件Dom解析要先用SAX解析创建DOM树 13、JAVA的四种基本权限的定义public private protected 默认 Java是计算机应用程序编程语言,被广泛用于创建Web应用、服务器处理、用户端的API开发乃至数据库等多个领域。下面厚学网小编列出了8个有助于你开发Java应用程序好的Java工具。 1.SparkJava 这是一款体形轻巧,功能强大的Web应用框架。Spark拥有简单而直接的方法。您可以通过一些繁琐的XML配置来使用Spark框架编写应用程序。Spark能让你花费很少的精力来开发Java的Web应用程序。 2.jClarity jClarity是两款产品的结合:illuminate用于性能监控,而census则可以收集日志和分析数据。jClarity支持云集成,并且其框架紧凑轻巧。 3.Clover Clover是用于代码覆盖的一大利器。该工具有助于用于应用程序测试的代码。我们可以在IDE或持续集成系统中运行Clover。该工具能让测试的运行速度更快。 4.JProfiler JProfiler拥有直观的用户界面,可以帮助你解决性能瓶颈和理解问题。JProfiler能让你轻松约束内存泄漏和修复线程的问题。 5.VisualVM VisualVM是一个集多功能于一身的Java故障排除工具。你可以使用VisualVM整合多命令行JDK工具。此轻便的工具有着惊人的分析能力。你可以在各种技术,如jvmstat、JMX和Serviceability Agent(SA)中使用VisualVM。VisualVM出名的是附加了API,以获得更多的数据,以及自动使用更快捷。 6.Elasticsearch Elasticsearch提供了可以整合现有的应用程序来驱动其与输入数据的交互的工具。这款开源工具提供了实时搜索和分析引擎。Elasticsearch可用于可靠性和可扩展性作为重要因素的分布式环境。该工具提供了超简单的全文搜索体验。 7.Sonarqube Sonarqube是一个用来管理代码质量的开放式平台。基于Web的应用程序可以与Java应用程序进行配置。它提供了规则、警报、阈值、排除和设置功能。SonarQube允许用户将指标结合在一起,以及使用历史的措施混合。 8.Takipi Takipi是一个轻量级的Java代理。Takipi安装方便,用不了几分钟就可以搞定。它对代码注释或配置并没有要求。你可以使用一台具有完全功能的服务器与Takipi工作。此款 Java工具能帮助你减少调试时间。 总结 个人资料: 姓 名:xxx 性 别:男 出生日期:199x年xx月xx日 年 龄:25 电 话:137xxxxxxxx 住 址:xxxxxxx 毕业院校:xxxxxxxxxxxxxxxxxxxxxx 学 历:本科 E-mail: x xxxxxxxxxxxxxxxxxxxx 英语水平:xxx 择业目标: 基于Windows/RedHat Linux平台的Java软件开发工程师 教育背景: 2008年09月—2012年077月 xxxxxxxxxxxxxxxxxxx 计算机科学与技术 学历:本科 学位:学士学位 专业技能: 熟悉Core Java 编程,有良好的编码习惯 熟悉Linux/Unix操作系统,熟悉Apache Tomcat应用服务器; 熟练使用IDE集成开发工具Eclipse/MyEclipse在Linux或Window下进行Java程序开发; 熟练使用Oracle、Mysql数据库,熟悉JDBC技术; 熟悉Struts,Hibernate等开源架构及MVC设计模式; 熟悉XML、HTML、Servlet、JSP、JavaScript、了解AJAX、JQuery、CSS等技术; 项目经验: 1. 项目名称:网上购物系统(模拟当当网)【JSP+Servlet+Hibernate+MySql+Ajax】 项目描述:该项目可以分为:用户注册模块、用户登录模块、购物车模块、用户结算、订单管理模块,用户通过简单注册即可成为会员,利用会员身份可以进行商品的购买,用户购买商品后,在购物车用户还可以修改、删除所购商品,如需后续操作还可以进行商品的结算,保存订单及发货。 技术描述:整个项目的选型为:JSP+Servlet+Hibernate+MySql+Ajax。为提高网站的交互和用户友好性,在jsp界面设计过程中采用异步传输技术(Ajax)技术,使用户在购买商品后可以直接查看购物车,而购物车的更新操作使用Ajax技术,避免再次增删商品,造成页面刷新。 Hibernate负责简化DAO层代码的编写,利用Hibernate提供的缓存机制,优化网站整体的效率,其中分页功能也依赖Hibernate提供的接口,应用工厂方法模式、泛型以及反射技术、编写DAO工厂,并提供一个Service层,注入DAO工厂,为Action中的DAO的供给,提供解释能力,接下来的工作就是用户权限的控制和增删改查的封装。实习经历: 2012年08月-2012年12月 加拿大达内外企IT培训 外企软件工程师培训 深入的了解了Java语言及J2EE的架构。同时认真完成了学校布置的项目实战,使自己的技术达到一个更高的阶段,在此期间锻炼了自己的编程能力和团队合作意识,培养了良好的开发习惯和设计思路,积累了一定的编程经验。 自我评价: 1伪随机数生成原理及JAVA程序分析 1.1伪随机数的生成原理分析 对伪随机数生成需要满足几个重要的条件, 只有在这一基础上才能够实现伪随机数, 主要就是序列的任意数值间的相互独立以及对概率分布的确定。从现阶段的发展情况来看, 生成随机数的方法主要有两种:第一种就是通过物理方法产生的真正随机数;第二种就是在数学方法的作用下产生的有统计规律的随机数列, 这两种生成方法就是最为主要的形式。在这一过程中通过相关算法产生的随机数其实并不是真是的, 这就是所谓的伪随机数, 其产生的主要原理就是通过编译器对伪随机数提供生成器, 然后在生成器的作用支持下对产生的数列精确度及均匀性最大化的保障, 接着就是进行对整数实际的应用并传输给函数, 这样就能够对数段间的整数数量进行有效的制约。 1.2关于JAVA程序的理论分析 这一程序对源代码以及二进制字节码间的转换后。通过虚拟技术进行执行字节码, 这样就对编译和到处执行等跨平台特性的实现比较有利。JAVA程序在语言上相对比较简单, 并且是分布式以及安全的, 虽然在这些方面有着优越性, 但其自身还是存在着一些局限, 也就是需要对程序中伪随机数的应用进行分析才能够实现。 2伪随机数生成的方式及在JAVA程序当中的实际应用 2.1伪随机数的生成方式分析 伪随机数的生成方式是多样性的, 它可以通过多种方式来生成, 最为常见的就是平方取中法以及线性同余法和非线性同余法等。其中伪随机数能够通过递推公式来产生, an+1=f (an) n=1, 2, ……通过这一通用公式就能够看出, 在计算的方法及初值得到了确定之后, 那么在随机数列方面也就得到了确定, 这和随机数列独立性要求是有着矛盾性存在的。不仅如此, 伪随机数还会出现周期性的循环, 在这一情况下要能够满足分布的均匀性及统计上的独立性和足够长的周期, 并要在内存的占用上要达到最少, 所产生的随机数速度要足够的快。 从伪随机数的线性同余法的方式上来看, 这是最为常用的一种方法, 这是在上世纪五十年代提出的, ni+1= (af (ni) +b) mod mi=0, 1, 2, ..., m-1生成数值序列称为是同余数列, 并在其序列当中常熟的选择, 对随机序列相关随机性能都有着直接性的关系, 所以对常熟进行适当的选择能够对伪随机数的区间均匀性得到有效保持。想要提高种子的均匀性就是通过算法的处理进行对整数溢出加以防止, 从而才能够保障伪随机数均匀并不重复。在这一过程中, 线性同余法不只是和种子有关, 同时和参数m、a、c的选取也有着关联 (如下表所示) 。 种子及参数关系表 a b no m周期随机序列 2.2伪随机数在JAVA程序当中的实际应用 Random类的实现方面主要是在JDK最初版本发布时候就能够使用JAVA.util.Random类产生随机数, 所以Random类也主要是在next Int这一方法的作用下得以完成的, 这一过程结果可通过代码进行详细的了解: Random random Generator=new Random () ; int random Number=random Generator.next Int (n) ; 其中就使用到了random类的next Int方法, 在这一方法的产生随机数范围基础上, 可结合特定应用程序需要的不同而进行转变。首先要进行递进参数: value=1+random Generator.next Int 在这一语句当中就产生了从1到6范围内的随机整数, 当进行递进参数而对过程中, 通过next Int这一方法返回值范围为0到参数值减1。在这一过程中需要对应用程序当中的骰子滚动和显示进行实际的应用, 这时候就需要在roll Dice的方法下进行滚动骰子, 应用程序中就能够生成6个数字键的随机数, 通过对制定的骰子图片显示, 进而来计算出骰子表面的数据和, 这样就能够实现游戏程序的开发以及应用。 与此同时, 也能够通过JAVA中的Math类所提供的random方法, 调用形式为double x=Math.random () , 这一方法的返回值是在0.0—1.0之间的浮点数, 产生任意low及high两数间随机数以及使其随机树的范围在8.0到300.0之间就可以通过以下的表达式进行实现: 8.0+Math.random () *292 3结语 综上所述, 针对伪随机数的实际应用, 主要是在JAVA当中的应用, 在经过了长期完善以及发展, 这一方式的应用已经成了主要的程序设计的语言, 通过不同方式的伪随机数的生成方式, 能够对实际额需求最大化的满足。由于本文的篇幅限制不能进一步的深入研究, 希望能够起到抛砖引玉的作用以待后来者居上。 参考文献 [1]边利亚, 叶飞跃.产品防伪中伪随机数的应用技术研究[J].计算机工程与设计, 2013 (02) . 摘要:目前,很多高校的软件学院都开设有《Java程序设计》这门课程,但都存在重理论,轻实践的问题。本文在深入分析该门课程目前存在问题的基础上,提出了相应的解决办法,并且通过一个学期的课程改革试验,证明了建议解决办法的可行性及有效性。 关键字:Java教学改革;应用型人才;软件学院 Abstract: At present, many university software schools have“Java programming” course, but there are pay attention to theory, light practice problems. Based on in-depth analysis of the course at present on the basis of existing problems, and puts forward the corresponding solutions, and through a semester course reform experiment, proved that the proposed solution is feasible and effective. Keyword:Java teaching, Application type talents, School of software 一、Java课程概述 《Java程序设计》课程是软件学院学生的核心专业课程,它的内容是介绍J2SE相关知识,包括Java语法基础、面向对象理论知识、基本类库、图形用户界面及事件处理机制、异常处理机制、多线程程序设计、数据库的连接访问、输入输出流和网络编程等。本课程学习的效果不仅关系到后续课程的学习和毕业设计的效果,而且直接关系到学生程序设计水平的提高和专业素质的培养。 二、问题分析及建议 以下结合本人多年的Java开发及教学经历,对一些存在的问题进行分析并提出相应的建议。 1.加强实践训练及实践管理 问题分析:Java语言是一门实践性很强的计算机语言,但目前成了单一为考试而设置的一门课程,其结果是有的学生连最基本的实践操作也不会做。有的实践教学学生只是将书上的程序输入电脑运行一下,并没有去思考为什么会是这样的结果。学生只是机械地完成了程序的运行,过后就忘了,没有达到练习的目的,更不能做到学以致用。 建议:在条件许可的情况下,教师上课均应采用多媒体教学。在讲授Java理论的同时,在课堂上给学生进行使用演示,这样不仅使学生对所学的理论知识有直观的认识,而且能提高学生的学习兴趣,引发其好奇心,促使课后实际动手练习。另外,教师在讲授该门课程时,除了教材上既有的实例外,还应多找一些典型的实例,在课堂上给学生讲解和演示,加深学生的理解。 2.选择合适的教材 问题分析:传统的教学方法都是注重教学的系统性和完整性.按照一般教科书的编排顺序组织教学,想把Java语言讲透,至少得100课时以上。这样的教材内容,必然有大量的语法结构生涩且难以理解,使学生望而生畏,学习效果较差。 建议:尽量选择有较多实际例子的教材,或者选择有配套实验手册的教材,方便学生实践练习。 3.注重双师型教师的培养 问题分析:在指导学生使用Java程序设计实践教学方面,由于目前双师型教师的匮乏,师资队伍存在着知识结构、能力结构不合理问题,难以完成应用型人才Java程序设计的实践教学要求。 建议:教师在上课之余,应该多学习Java领域的最新技术,并且利用假期时间多去企业参观,学习企业用的最多的开发技术,才能教出符合企业需求的信息技术专业人才。 三、课程改革及成效 在对Java程序设计课程目前存在的问题深入分析后,本人上学期对第2部分中提到的各个建议解决办法进行了试验,以下简单予以介绍: (1)关于加强实践方面。在讲述理论的同时,教材90%的代码均在上课时现场输入、现场演示、现场评讲。另外,除了教材上的实例,还通过查阅搜寻一些典型的实例,在相应的章节进行演示。 (2)关于教材选择方面。经过仔细对比研究后,上学期选用了机械工业出版社的《Java语言程序设计教程》一书作为上课的教材。本书由叶乃文主编,于2010年第一次出版,所讲Java技术和业界最新技术基本同步,而且综合性实例较多,非常方便学生进行课后练习。 (3)关于双师型教师培养方面。2010年暑期,去北京中关村一些知名IT企业进行学习参观,历时20余天。通过学习参观,了解到目前企业最新的Java应用人才需求,也学到了不少企业的开发经验,返回学校后对学生进行了相应的指导,学生反响强烈。 上学期,经过以上3点措施的实施,Java程序设计课程的教学效果相比以前明显改善,学生们普遍反映良好。具体表现为:因为实践动手多了,学生对学习Java的兴趣提升,实践动手能力快速提升,上机作业质量明显提升,教学效果持续改善。 四、小结 针对应用型高等学校人才的特点,作者依据多年从事Java技術开发的实际工作经验与理论教学实践经验,分析了企业对Java技术人才的需求及现今Java程序设计课程体系中存在的问题,提出了一些建议解决办法,并进行了相应的课程改革实践。实践结果证明了提出的建议解决办法的可行性和有效性。 【参考文献】 [1]朱剑锋,王冬,熊志斌,尹成国.《项目教学法在Java程序设计课程教学中的应用》[J].琼洲学院学报.2011,(2):82-84. [2]张建东.《Java程序设计教学探讨》[J].科技信息.2009,(24):700. 【Java程序员供需分析】推荐阅读: java开发程序员01-08 Java程序员和C++程序员的区别03-02 java程序员实习过程09-23 java程序员面试问题10-15 JAVA程序员简历模版10-30 java程序员就业感言11-11 【黑马程序员】Java基础总结05-30 java程序员面试技巧02-16 Java程序员的未来发展之路01-06 java程序员面试题(笔试&面试题)10-07Java程序员供需分析 篇5
java程序员简历 篇6
Java程序员供需分析 篇7
Java程序员供需分析 篇8