java程序员职业规划

2024-06-22

java程序员职业规划(精选16篇)

1.java程序员职业规划 篇一

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) .

2.浅谈Java桌面应用程序开发 篇二

【摘 要】Java对于服务器,个人电脑和移动设备来说是一项伟大的技术。由于需要java的跨平台的特性,因此java在服务器和移动设备方面的应用是非常成功的。Java开发的桌面程序既有友好易用的图形用户界面,也能够实现相应的功能。【关键词】桌面开发

AWT

Swing SWT Java与桌面端现在流行的桌面平台要数Windows、Mac和 Linux。但它们不是十全十美的,Windows主宰着桌面操作系统的市场,其上有巨大的应用和开发群体,但它昂贵且有许多安全漏洞。Linux有着稳固的基础,它是开源的软件,比Windows更可靠。Mac非常容易操作且不是黑客的目标,但与Windows和Linux比起来,Mac的硬件和软件可选的余地非常的有限。Windows、Linux和Mac 在桌面的流行创造了多样性,这种多样性正是Java需要的,这就使得Java在桌面有举足轻重的地位。跨平台的支持Java 运行于所有相关的操作系统,包括Windows、Mac和Linux。也就是说把现有的应用从一个操作系统移植到另一个操作系统而不用做太多的改动,所以Java是首选的桌面开发平台。或许用微软的可视化工具很容易构建.NET应用,但是这将使软件被绑定在了Windows平台上。也许有人想用Linux 代替Windows 从而避免由微软操作系统的漏洞带来的问题,但是用户不能容忍的问题之一是当从Windows移植到Linux时所带来的巨大的费用。如果应用程序用Java构建,就没有了这些问题,Java的图形用户界面看上去会跟使用的操作系统一样,而并不需要做什么改动。丰富的特征最初,Java只有非常有限的一些特征去构建图形用户界面,思想就是用与平台无关的Java应用程序接口打包不同的操作系统的本地图形用户界面,称之为抽象的窗口工具。它仅有普通的部件如文件域、文本区、选择框、单选按钮、列表框和按钮被AWT支持,图形和图像的特性支持非常有限,也就是说,只能够构建简单的applet程序。认识到需要更高级的图形用户界面组件和图形能力,Sun公司开发了Swing,Java 2D,Java 3D,图像的输入/输出,Java高级图像(JAI)和很多其它的组件。这些中的一些窗体组件现在已经是Java 2标准版(J2SE)里的一部分。例如Swing、Java 2D、图像的输入/输出都是Java的核心API,它们随着Java开发工具包(JDK)和Java运行环境一起被提供给用户。Java图形界面工具Java有三个主要的图形界面工具:AWT,Swing和SWT。Swing 是构建java图形界面标准的API(应用程序接口),一些AWT类由Swing继承而来。SWT是一个非常有前途的新的窗体工具,由IBM资助。但是事实上,这三者相互补充,它们满足不同的需求。AWT抽象窗口工具包(Abstract Windowing Toolkit)(AWT)是Java的平台独立的窗口系统,图形和用户界面器件工具包。AWT是Java基础类(JFC)的一部分,为Java程序提供图形用户界面(GUI)的标准API。AWT提供了JavaApplet和Java Application中可用的用户图形界面GUI中的基本组件(components)。由于Java是一种独立于平台的程序设计语言,但GUI却往往是依赖于特定平台的,Java采用了相应的技术使得AWT能提供给应用程序独立于机器平台的接口,这保证了同一程序的GUI在不同机器上运行具有类似的外观(不一定完全一致)。SwingSwing是一个用于开发Java应用程序用户界面的开发工具包。它以抽象窗口工具包(AWT)为基础使跨平台应用程序可以使用任何可插拔的外观风格。Swing开发人员只用很少的代码就可以利用Swing丰富、灵活的功能和模块化组件来创建优雅的用户界面。工具包中所有的包都是以swing作为名称。SWTSWT是IBM为它的Eclipse集成开发环境而开发的图形用户界面工具。SWT可以在Eclipse环境外使用,而且提供对操作系统本地图形用户界面的直接访问。因此,基于SWT的Java应用程序拥有本地的图形用户界面并且可以和本地别的应用程序和部件集成在一起。SWT社区现在正在设计浏览器API,这些API可以产生基于IE或者Mozilla的HTML窗口。SWT现在可以在AIX,HPUX,Linux,QNX,Solaris,和Windows下面运行。误解与Bug对于java/Swing一直有着误解,诸如:Java/Swing太慢了,或者是Java/Swing需要更多的内存。也许老式的奔腾运行JDK1。2确实很慢,但是PIII级别的CPU运行JDK1。4环境是足够快的。一个应用程序中鼠标在1毫秒和在10毫秒的反映的差异,从使用者方面来说是没什么区别的。Java不但在企业级的上千人同时在线的服务器中表现良好,而且在仅有有限资源的移动设备上的表现也是很出色的。总结Java作为一种网络技术,是为了在浏览器中能够运行小应用程序而发布,但是它从开始就有运行独立的桌面应用程序的能力。不幸的是,AWT没有提供足够的桌面端的程序所需的特性。Swing着手于解决这些问题,但是它有不少的bug。今天,Java有构建大型桌面端应用程序的能力并修复了bug。Java独有的优点是“只写一次,到处运行”——在Windows,Linux,Mac和其它操作系统上运行Java代码的能力。【参考文献】[1]Eric,Java编程思想[M],第4版,机械工业出版社,2007年4月[2]Metsker S J,Java设计模式[M],第2版,电子工业出版社,2012年09 月[3]毕建信,基于MVC设计模式的Web应用研究与实现[D],武汉理工大学出版社,2006年5月

3.java程序员职业规划 篇三

自从2000年千禧年之后,IT泡沫破灭,之前被广泛看好的IT行业遭遇致命打击,在之后的几年里,全世界的IT商业市场发展不顺利,在2005年后,随着新一轮IT经济热潮的袭来。IT及互联网得以跨时代的发展,这使得IT科技技术融入老百姓的生活,几乎全世界每一个人都因此而受益。到2011年,互联网已经彻底的融入人民的生活,虚拟世界不再是虚拟世界,因为互联网已经成为现实世界人们商业和生活不可或缺的一部分。

这些年来IT互联网的发展也带动了IT技术职业的丰富,各种编程语言、各种技术职位、各种工作职称,然而,以后随着时代的发展,IT分工将会越来越细致,也会越来越清晰。但,从总体上来看呈现3种职业方向。如下:

1.开发人员

IT过去曾经只是有关于管理和配置硬件与软件的,而现在它则越来越多地与网络的应用程序有关,这些程序需要被熟练地操作,简明易懂,也不用训练或者技术支持的介入。还有一种程序就是手机程序 — 包括本地程序和移动网络程序。在现今的IT行业,更多的技术行业的力量正从对程序进行配置和支持的人转移至创建它们的人。这一趋势已经开始并且在未来的十年里它只会加速。

2.项目经理

大多数能够在传统公司里生存下来并且没有离开的IT专业人士都会成为项目经理。他们不会成为集权化的IT部门的一员,但会涉足各个不同的业务单位和部门。他们会成为能够帮助公司领导和经理做出好的与技术有关的决定的商业分析员。如果你仔细观察,你就会发现现在有许多IT经理正在朝着这一方向转变。

3.顾问式人员

我们面对现实吧,几乎所有的大型的企业都不愿意雇佣IT专业人士,就算有,也会尽可能地减少人数。这不是为了要刻意针对天才,只是因为IT专家的雇用费用太高,而且当IT部门过于大而集权化时他们就会总是说“不”。他们拖后腿的次数比他们作出贡献的次数还要多。许多IT管理员和技术支持专员目前都直接为公司工作,但在将来,他们会转变成为大型的供应商或顾问公司工作,因为公司会为了减少开支、得到更高水平的专业服务和全年不间断的覆盖范围而转为按需购买IT服务。

位于沈阳和平区三好街的北大青鸟,推崇技能+学历+经验的教学模式。无论是学资学历、师资力量还是专业技术在同类机构中都占据不少优势,更重要的是北大青鸟入学就签订就业协议,很大程度上解决了学员的就业难题。

4.java程序员职业规划 篇四

成都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视频教程,因此推荐给大家。

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

5.java程序员职业规划 篇五

第一章:

2分钟看完,老生常谈,即使没怎么用过java也知道这些。

第二章:

1.instanceof应该是c++中没有的,c++使用RTTI解决这个问题的,很难用。

2.super这种引用父类的方法也是比较简单的,C++中是用父类名::父类方法()解决的,有点难看。

3.自动类型转换和C++一样,精度变高的随便转,精度变低的会丢失。

4.强制类型转换只有(type)这一种,不像c++有static_cast、dynamic_cast、reinterpret_cast、和const_cast。

5.运算符什么的和c++几乎一模一样。

半小时看完。

第三章:

1.break可以跳出语句块,c++中没有语句块。语句块的定义就是在一段语句前加上花括号和冒号;

其他基本上和c++一样,5分钟看完。

第四章:

1.java数组越界会在运行时抛异常,c++不会,声明数组的方法也有些不一致。

java 声明数组的所有办法

int[] a = new int[4];

int a[] = new int[4];

int[] a = {1, 15, 26};

int a[] = {1, 15, 26};

2.java的数组是一个对象,自带length属性,使用简单。c++的数组不自带方法和属性,要知道数组长度只能sizeof(arrayObject)/sizeof(int)。当然如果使用STL中的vector之类的也和java一样简单。

3.java的所谓数组赋值(或者叫数组拷贝)其实就是c++中的两个数组指针的赋值,java没有指针,所以作者费了一大堆口水。好在java有垃圾回收,要不然一个指针的内存就算泄露了。至于真正的数组内容赋值,是使用System.arraycopy(ir, srcPos, ir, destPos, length);而C++一般使用memcpy等函数。若使用STL中的vector,那么就看vector的拷贝构造函数怎么写的,应该是vector的对象赋值过去而不是指针指过去。

4.重温了冒泡排序(时间复杂度O(n2)),和快速排序(最坏情况的时间复杂度为O(n2),最好情况时间复杂度为O(nlog2n))。

5.For-Each语法被引入java了,在很多地方用起来真是简单。Python和c#早就支持了,c++中虽然STL的algorithm包中引入了for_each,但是由于需要使用函数指针还是略显繁琐。

这章挺多,看了一个多小时啊!

第五章:类和对象

1.Java中方法的重载和c++的一样,都是通过参数的不同来区别。但是c++中可以设置默认参数,而java不可以。

2.java中的对象大部分只能new出来,或者clone出来,或者反射出来,而不能直接在栈上定义出来。而c++的对象在栈上和堆上创建的都很多。

3.基本类型的参数传递,java和c++都是传值。对象的参数传递,java是传引用,c++是拷贝,也就是传值。其实c++中大部分时候也是传引用或者传指针,但java没有指针,也没有选择耗时耗空间的拷贝,只能传引用了。

这章对于c++程序员来说太简单,几分钟过一遍就可以了。

第六章:继承

1.方法被覆写后,如果要调用父类的方法,c++必须用父类名::方法名,而java用super.方法名即可。

2.多态和动态绑定,java和c++几乎一样,都很简单。

3.final关键字:java中的final关键字可以将一个类限制为无法继承的,同样的还有C#中的sealed关键字。而c++是没有这个玩意的。

4.java的抽象类和c++几乎一样。

5.java是独根语言,引入了Object类,它的clone方法就好像c++中的拷贝构造函数,它的equals方法是用来比较内容的,而toString方法是将对象作为字符串输出的。

这章对于c++程序员来说同样简单,几分钟过一遍就可以了。

第七章:接口

1.java中有接口。C++没有,唯一类似的是含有纯虚函数的虚类(没有纯虚基类这个说法)。但是COM、CORBA等中间件中都有IDL语言(接口定义语言),使用这些中间件的c++程序员也没有少写接口。

2.接口实现的一些规定:

1)如果实现接口的不是抽象类,则必须实现其接口的所有方法才能被实例化;

2)接口中所有的方法默认为public;

3.接口可以用来实现多态;

4.java的内部类和c++差不多,都没人关心,最多懒得想名字的时候用用那个匿名内部类(例如什么UI的响应函数)。

5.java的对象克隆,吹了一堆就是个c++中的拷贝构造函数。所谓什么“浅克隆、深克隆”问题,就是c++中拷贝构造是遇上类中定义了指针的问题。C++程序员一望即知。

接口是为了维护单继承机制弄出来的,花半小时看看还是值得的。

第八章:面向对象编程

C++程序员不用看。

第九章:异常处理

1.java的异常处理中有finally语句块,而c++中没有,所以程序员要自己想办法来处理异常发生后诸如“资源释放”之类的问题;

第十章:线程

1.java语言自带线程机制,c++目前还是不带线程机制的。虽然boost::thread库也被众多c++程序员广泛使用。但是windows下用得最多的还是windows SDK自带的线程函数;而linux下用得最多的还是pthread。另外还有一些号称同时支持多个平台的多线程库。

2.java多线程有两种方法实现,第一是派生Thread类,第二种是实现Runnable接口。

3.java线程分为4种状态:new、runnable、non runnable和done,这和其他线程库大同小异;

4.run、start、stop、sleep、suspend、resume、yield、wait、notify和notifyall等方法的含义也和其他线程库一致。但suspend、resume和stop等方法是不建议使用的,因为可能会导致死锁。

5.java可使用join方法来等待线程结束,而在某些线程库中join方法经常是不可用的。

6.java的互斥使用synchonized关键字实现,它很类似于boost.thread中的lock(mutex),只不过它是对线程对象隐含的锁加锁。其实这很不利于新手理解。另外还介绍了synchonized的一些乱七八糟的用法,相信对于新手这只有反作用。

这一章对于线程,介绍得比较浅显,实现简单的多线程应该没问题,但是稍微复杂一点的也许就需要其他的开发包了。Java线程连个Mutex类都没有,这是最让我吃惊的,仅仅使用synchonized来实现同步、互斥、信号量该多麻烦啊,也许是我还没弄懂java多线程吧。

第十一章:图形编程

1.IDE的年代,GUI还是画出来吧。Java中也就Layout类需要看看,其他大部分Layout类也是凑数的,根本不会有人用。

第十二章:事件处理

随便看看了解即可,新手可以试着写写代码,老手直接IDE中添加事件即可。

第十三章:Swing用户界面设计

同第十一章,随便看看即可。界面一般有专人搞,普通程序员能看懂就行了。

总结:《java从入门到精通》这本书整体质量尚可,c++熟手大概一到两天可以看完,掌握程度在80%左右。看完后能够有一些基本概念,可以写一些基本程序。看完后离入门还早,更谈不上精通了。

6.java程序员职业规划 篇六

“Java程序设计”是计算机相关专业教学体系中的一门重要课程, 重点培养学生Java技术体系中的基础知识。目前的“Java程序设计”课程在实际教学中主要存在以下几个方面的问题:

(1) 学生普遍反映对Java程序设计有兴趣, 但同时也畏难。学生的兴趣来源于实际就业需要, Java的广泛应用是学生们想学习Java的主要原因。学生们通常对编程没有足够的了解, 在初学编程时, 很少会有学生真的因为爱好编程而学习Ja va。

由于程序设计不仅要求设计者具有很强的逻辑思维能力, 思路清晰, 也要求设计者能不断自我学习, 适应现代编程技术的变化。这对一些学生造成了学习压力, 进而导致这些学生畏难, 害怕编程。

(2) 希望获得更多实用技能和动手能力的培养。“Java程序设计”在课程改革以前, 主要通过传统的语言教学方法来进行, 在内容上从了解语言特征入手, 重点强调基础Java语法。尽管在实践教学中逐步引入了案例教学, 不过仍缺乏如何运用Java完成实际项目的内容。另外, 教学内容中也欠缺一些与编程相关的能力培养。包括使用参考文档的能力、使用开发工具的能力、debug的能力和项目部署的能力等。虽然这些内容均不属于传统教学范围, 但都是学生在实际动手环节中必须用到的能力。因此有必要在“Java程序设计”教学内容和方法上做一些调整, 以促进学生实用技能的提高。

2“Java程序设计”教学改革

2.1 课堂教学改革

为提高教学质量, 提高学生学习兴趣, 目前在“Java程序设计”的课堂教学中, 教学内容按难易程度被重新组织, 简化了难度较大但实用性不大的内容, 然后将与程序设计相关的一些技能如项目配置、部署和测试等引入到课堂教学内容中来。

(1) 合理安排教学内容, 引入项目教学法。目前的“Java程序设计”教学内容定位于Java SE知识范围之内, 而通用的教材中所包含的内容往往只是Java SE的一部分。如果完全按照教材上的知识点组织以及顺序讲解, 那么一方面学生将难于借助阶段性的学习内容完成小型项目, 其次某些知识点如流控语句等, 可能和其它语言的教学内容发生重复, 会导致学生感到乏味。因此为提高教学质量, 在实践中我们从教学内容和教学方法两方面入手进行了改革。

首先, 在内容上对全部Java SE知识点按类别以及难易程度加以区分。然后依据项目实践需要和学生能力水平, 精心选择具体的教学范围, 安排知识点的教学次序。实践中我们将“Java程序设计”的教学内容分成了基础部分、高级部分和扩展部分3类。其中基础部分注重Java语言的核心语法, 采取初期了解, 后期通过项目强化记忆的方法进行教学。高级部分与项目实践有紧密联系, 在课堂上借助小型项目重点讲解。扩展部分包括项目实践相关技能, 穿插到课堂、实验和练习中以帮助学生提高项目实践能力。

其次, 在实践教学中引入项目教学法。项目教学法是指在一个教学过程的某一个阶段, 借助项目来完成教学目标的活动。项目教学法通常将学生分成不同的小组, 完成一个具体项目的开发工作。在“Java程序设计”教学实践中, 选取了“数独”、“二维魔方”等常见的小型游戏程序作为项目教学的主要内容, 串联全部基础以及部分高级知识点, 按由易到难的次序进行讲解。然后以学生为主体, 参考老师讲解的内容分组完成目标项目。通过这种形式全面培养了学生分析问题和解决问题的能力。

(2) 通过小型案例讲解独立知识点, 以案例模仿的形式促进学生动手能力。在“Java程序设计”课堂教学中采用了案例教学方法对每一个单一知识点进行教学。选取的案例都尽可能小而精, 针对特定问题。例如讲解循环和条件时, 通过一个猜数字的游戏程序说明循环和条件在Java程序中的使用。在讲解类和对象时, 通过一个骑车程序来讲解类、对象、属性和行为之间的关系。为了达到更好的案例教学效果, 我们不仅要求学生读懂课上的案例, 还要求学生在练习和实验中以教学案例为模板, 通过模仿、修改、完善模板等形式来锻炼读写程序的能力。这样不仅能帮助学生巩固已学的知识, 同时也能帮助学生提高自学能力和设计能力, 强化案例教学的效果。

2.2 实验教学的改革

实验课是“Java程序设计”课程的重要组成部分, 是通过实际的上机操作来巩固和强化课堂上的理论知识的重要手段。目前的实验课内容往往全部来源于实验教材, 并且多数实验的类型属于独立完成的验证型实验。实践中我们借鉴国外大学的实验课的组织, 通过如下手段改进了实验教学过程。

(1) 增加综合性、设计性实验促进学生动手能力。首先将“Java程序设计”实验内容按难度分成基础复习、前后综合和提高3部分内容, 并按照一定比例组织, 如3:6:1。在基础复习部分, 主要以最近的课堂教学内容为基础, 在提供必要的参考资料、实验工具和实验方法后, 以验证型实验为主, 要求学生熟悉课堂教学内容。在前后综合部分, 以综合和设计型实验为主, 要求学生将以前所学的全部知识综合运用, 通过查阅参考资料, 设计出合乎目标要求的程序, 最终达到复习以前知识、提高动手能力的目的。在提高阶段, 以综合型实验为主, 要求学生提前了解一部分课堂上涉及较少的知识, 以提高学生的自学和研究能力。这样的实验安排表面上只花了少量的时间对基础内容进行复习, 但实际上每次综合阶段的实验都是对以前所学的一次强化。学生可以对以前所学的知识做到融会贯通。另外综合和设计型实验也迫使学生必须参与思考、研究和自主学习。因此这样一种安排可以显著提高学生学习能力。

(2) 采用分组实验组织形式。在实验的组织形式上, 除了采用独立实验对知识点进行强化熟悉之外, 我们在实践教学中也仿照国外大学补充了少数分组实验, 以完成小型任务为目标, 锻炼学生合作和设计能力。在分组实验中, 学生以3个人左右的小规模进行分组, 这样一方面可以保证每个学生都有动手实践的机会, 同时也能充分参与合作。学生个人的最终成绩取决于团队的最终成绩、个人在团队中的贡献以及教师对个人表现的评价。分组实验中通过竞争机制和团队成员的交流可以促进学生学习兴趣和提高团队合作能力。

3 实践效果与总结

在07至08年的实践教学过程中, 以上的系列改革措施在个别班级的实践教学中采用, 并同其它同年级没有采用改革措施的班级进行了跟踪比较。通过一段时间对学生上课情况的观察以及学习成绩的反馈, 发现在采用了改革措施的班级中, 学生的学习兴趣有明显提高, 学习成绩普遍比没有采用改革措施的班级提高5%~10%。另外在采用了新措施的班级中, 学生不仅积极完成课内任务, 同时也开始主动自学, 共同讨论和研究一些知识点, 学习气氛浓厚。特别是设计型实验以及Greenfoot等工具的引入, 激发了学生的学习兴趣和设计热情, 起到了非常理想的实践教学效果。事实证明, 这些改革措施不仅可以帮助学生对Java编程基础知识全面学习, 同时也能锻炼实际动手能力, 激发学习兴趣, 提高实践教学质量。

参考文献

[1]全成斌, 杨士强, 赵有健.计算机工程实践教学的改革与探索[J].计算机教育, 2008 (4) .

7.java程序员职业规划 篇七

关键词:Java程序设计 面向对象 质量监控

中国分类号:G424 文献标识码:A 文章编号:1673-9795(2013)02(b)-0177-02

1 课程背景和定位

我院在2011年9月对软件技术专业人才培养方案重新进行论证,并详细修订了实施方案,将软件技术专业分成微软合作、印度国家信息技术合作、浙大嵌入式方向合作三个方向,其中印度国家信息技术合作方向确定了以Java为软件开发平台的信息系统开发和网站架构的培养路线。在第二学期开设第二编程语言《Java程序设计》,其中前导课程是《计算机应用基础》《计算机导论》和《C语言程序设计》。

学生通过前导课程的学习掌握了程序设计的基本结构,初步建立了面向过程的编程思想,具备了数据结构以及算法的基础知识、网络及通信的基础知识,所以在Java程序设计教学中淡化语法和算法,重点突出关键技术,建立面向对象的编程思想,利用Java语言创建桌面应用程序。为后续的《JavaWeb程序设计与应用开发》《JavaEE企业应用开发》《移动应用开发》等课程提供扎实的语言基础和正确的思维模式。

我院从2008年开始开设《Java程序设计》课程,在多年的授课过程中积累了丰富的教学经验,该课程紧扣“应用为主旨、能力为本位”的高等职业教育理念,以“项目导入、任务驱动”教学法贯穿整个课程的教学。

2 课程的教学内容设计

2.1 知识点结构

依据软件技术专业人才培养方案的教学计划,Java程序设计课程的计划课时是128学时,理论和实践各64学时,将其教学内容划分成两个阶段:基础应用和进阶应用。

基础应用阶段,是对Java语言的基础语法、OOP基础(封装、继承、多态)、GUI开发基础、JDBC基础及IDE工具的综合运用等相关知识点及技巧进行详细的讲解及实训演练。

进阶应用:基础应用阶段的基础上,对Java的高级特性进行详细剖析,使学生掌握多线程、IO编程等技术,理解面向对象程序设计基本原则,并能熟悉一些常见的设计模式。

2.2 课程案例设计

针对Java语言在信息领域广泛应用的深入分析,我们选取了简化版的“超市收银平台”作为教学导入项目。对课程项目进行详细分析,并对项目中涉及的知识点进行初步概述。从课程项目中将各模块知识点案例分离出来,该案例与项目前后呼应,目的是让学生理解对应的理论知识点。在每个模块结束时,通过阶段性案例让学生能融合本阶段内容,理解所学知识能应用的范围及如何应用,然后将所做的案例融合到课程项目框架中。

3 课程的教学方法和手段

3.1 “项目导入、任务驱动”贯穿教学过程

教学团队在教学中主要采用以项目导入、任务驱动为主要形式的课程教学模式,遵循“边学边做,先会后学;理论够用,突出技能”的原则,注重对高职专业课程的开发与整合,关注传授知识的实用性和应用性,加强学生专业实践能力。将“超市收银平台”开发项目贯穿于教学的始终,用项目进行新知识的引入,按照项目实施过程将项目划分为一个个具体的比较容易掌握的任务,将知识点隐含在每个任务中,通过完成一个个具体的任务来组织课堂教学。整个教学过程就是整个项目中各个任务的实施,也就是经历以下几个阶段的过程:学生接受任务、发现和提出问题,教师对问题进行思路分析,学生思考和实践,教师讲解和编程演示、其间运用已有知识点并引出新的知识点,学生在观摩和体会的同时获得了新的知识点和技能,教师设置与新技能相关的实训内容,学生自主完成实训内容、主动掌握新的技能,教师答疑并引导学生对问题进行总结和提升。

3.2 庖丁解牛,分組协作

深刻理解Java的关键技术,特别是类对象的封装。封装数据和对数据的操作,使得面向对象程序设计的编码量比面向过程程序设计要多的多。每个成员函数就是一个独立的数据操作,所以编程时要一个一个成员函数来编。让学生通晓庖丁解牛的故事,要求学生做到面目全牛,分组协作。在实训中以项目为单位,小组成员搭配合理,由项目组长、项目副组长进行青蓝结对的形式,达到互助互利的效果,并优化实训课堂氛围,学生实训任务、职责明确。通过一次全过程的学习机会,项目组内部以及组与组的互评和反思,学生能真正掌握专业技能。如图1所示。

3.3 注重实训,量化过程

教学过程中注重实训,量化过程。学生在课前预习、课堂教学及课后巩固环节较难控制,因此,本课程注重实训环节的质量监控,并且以实训环节来带动课前预习、课程教学及课后巩固环节。在每次实训中,给出本次的实训讲义,该讲义中包含实训要求、实训讲解、方法与技巧和编码习惯等相关提示信息,在实训讲义中穿插下次课的新知识点,来达到课前强制预习的目的,有助于下次课堂教学的接受;并且在重要实训中提供相关操作视频,便于课堂及实训中未能理解或掌握的同学课后巩固。这样,利用实训环节,将课前预习、课堂教学及课后巩固环节串联起来。如图2所示。

在高职院校中,学生自我学习的方法和能力较差,为提高实训环节及整个课程的教学质量及效果,我们需要对一些重要的环节进行量化。对于量化公平及量化所带来的额外工作量的简化,可以用信息化管理软件来提供支撑。为此我们开发了用于监控教学过程(包括考勤记录、课堂演练记录、课堂回答提问记录、作业及测验批改记录等环节)的教学过程监督平台,监控实训过程(包括实训讲义的浏览、实训作业的提交、检查、评价、反馈)的实训管理平台、以及监控课后巩固情况的课程论坛、课程资源库、在线题库平台等信息化平台。通过对学生实践过程的监控,降低了学生对语言类课程学习的难度,达到本课程教学培养目标的要求,为后续计算机课程打下一定的专业基础。

参考文献

[1] 潘永惠,陈伟军,包芳.基于项目教学的软件技术课程建设探索[C]//.中国信息技术与应用学术论坛论文集(一),2008.

[2] 张洪军.Java语言方向教学改革探讨[J].工会论坛,2010(11).

8.java程序员考核 篇八

2)从同一地点出发的相同型号的飞机,可是每架飞机装满油只能绕地球飞半周,飞机之间可以加油,加完油的飞机必须回到起点。问至少要多少架次,才能满足有一架绕地球一周。

智力部分(共20分)选择题(每个2分,共10个)

Java部分(共60分)

一、选择题(每个2分,前5个为单选,后5个为多选)

1.下列语句哪一个正确()

A. Java程序经编译后会产生machine code

B. Java程序经编译后会产生byte code

C. Java程序经编译后会产生DLL

D. 以上都不正确

2.执行如下程序代码

a=0;c=0;

do{

--c;

a=a-1;

}while(a>0);

后,C的值是()

A.0 B.1 C.-1 D.死循环

3.下列说法正确的有()

A. class中的constructor不可省略

B. constructor必须与class同名,但方法不能与class同名

C. constructor在一个对象被new时执行

D. 一个class只能定义一个constructor

4.下列哪一种叙述是正确的()

A. abstract修饰符可修饰字段、方法和类

B. 抽象方法的body部分必须用一对大括号{ }包住

C. 声明抽象方法,大括号可有可无

D. 声明抽象方法不可写出大括号

5.下列哪种说法是正确的()

A. 实例方法可直接调用超类的实例方法

B. 实例方法可直接调用超类的类方法

C. 实例方法可直接调用其他类的实例方法

D. 实例方法可直接调用本类的类方法

6.下列说法错误的有()

A. 数组是一种对象

B. 数组属于一种原生类

C. int number=[]={31,23,33,43,35,63}

D. 数组的大小可以任意改变

7.不能用来修饰interface的有()

A.private B.public C.protected D.static

8.下列说法错误的有()

A. 在类方法中可用this来调用本类的类方法

B. 在类方法中调用本类的类方法时可直接调用

C. 在类方法中只能调用本类中的类方法

D. 在类方法中绝对不能调用实例方法

9.下列标识符不合法的有()

A.new B.$Usdollars C.1234 D.car.taxi

10.下列说法正确的有()

A. 环境变量可在编译source code时指定

B. 在编译程序时,所能指定的环境变量不包括class path

C. javac一次可同时编译数个Java源文件

D. javac.exe能指定编译结果要置于哪个目录(directory)

二、简答题(3个简述题,共20分)

1)请描述一下Thread和Runnable的区别和相同点。(6分)

2)请说明一下抽象类和接口的区别和相同点。(6分)

3)请叙述什么是多线程、多线程会经历哪些周期。(8分)

三、算法题(每题10分)

1)请用*号编写以下图形

*

**

**

**

**

**

**

**

*

(如图所示)

2)

Vector存储位置变换

------

姓名 性别 年龄 出生年月 籍贯

------

赵一 男211989.1汉

------

钱二 女221988.2满

------

张三 男231987.3回

------

李四 女241986.4藏

------

当前取得此表格信息为Vector类型

定义Vector 名为:vtr;

Vector集合内容:

[[赵一,男,21,1989.1,汉],[钱二,女,22,1988.2,满],[张三,男,23,1987.3,回],[李四,女,24,1986.4,藏]]

现在需要将次Vector集合转换为:

9.JAVA程序员招聘要求 篇九

岗位职责:

1、参与公司项目的设计、开发与维护;

2、具有独立完成模块开发工作的能力;

3、较好的沟通能力,能积极应对工作,具备较好的抗压性;

4、能够快速接受并掌握新知识;敢于面对和克服困难,具有分析和解决问题的能力;

5、做事认真负责,有责任心,有良好的团队合作精神。

岗位要求:

1、学历要求:专科以上学历,计算机及其相关专业毕业。

2、熟练掌握Java基础,Java WEB基础,具备面向对象思想;

3、熟练掌握HTML/XHTML、CSS、JavaScript、AJAX、JSON等Web页面技术;

4、熟练使用MYSQL数据库,熟练使用SQL;

5、熟悉Tomcat服务器,熟悉Linux操作系统;

6、做事认真细心,责任心和服务意识强,积极诚恳;

7、具有团队精神,可以很好的与团队沟通,有学习热情。

月薪:3000-4000 福利待遇:双休、带薪年假、保险、免费中餐 本职位年薪:4-6万

10.java程序员职业规划 篇十

关鍵词:JAVA 教学分析 措施

中图分类号:G642.4 文献标识码:A 文章编号:1673-9795(2013)05(a)-0148-01

1 JAVA概述

JAVA是一种计算机的编程语言,目前仍然是较为常见的计算机编程语言,具有效率高、覆盖面广、简单易用等特点,不但可以用来进行桌面程序的开发,还可以适用于与互联网应用的开发,在当前具有广泛的应用。JAVA是面向对象的编程语言,在计算机、网络和多线程等技术领域都涉及到JAVA的相关知识,学习JAVA编程语言应经成为软件技术开发相关人才培养的基础。在我国,随着计算机和互联网技术的不但发展,JAVA编程技术人员需求巨大,相关专业的就业前景很好,很多高校都开设了JAVA语言相关课程。

2 当前JAVA教学存在的主要问题

2.1 JAVA课程的认知困境

近年来,高校扩招和民办高校的发展,使得更多的学生进入大学学习,加上激烈的市场竞争和宣传,计算机编程专业成为很多学生心目中理想的学习和就业方向。在这种大趋势下,学习JAVA编程的学生显著增加,但由于很多的学生对JAVA知识并不了解,只是为了获得理想的就业而选择编程,在学习时缺乏主动积极性。JAVA语言作为计算机编程基础知识,需要学习者具有较好的逻辑思维能力、严谨踏实的态度和抽象思维能力。这些较高的要求使得JAVA学习成了很多学生的难点,产生了畏难和认知的偏差。

2.2 JAVA课程设置问题

当前大多数高校的JAVA课程设置,由于学生大多没有相应的基础,因此所设置的课程大多集中在以JAVA SE平台教学为主,包括有面向对象编程方法、JAVA多线程、JAVA界面及事件编程、JAVA数据库连接、网络编程等基础知识。但是这些知识并不能构建完整的JAVA知识体系,学生在学习之后不能了解JAVA与C++等计算机编程语言之间的关系,JAVA语言编程的优越性,并且认为这些知识就可以满足社会对JAVA人才的要求。其次是由于缺乏相应的后续自主学习能力,不能适应JAVA编程技术的新发展,在JAVAEE等新对社会流行编程技术面前感到吃力,学生在完成学习走向社会岗位时,仍然不能满足社会的要求。课程设置的不合理实际上从整体降低了JAVA学习的应有水平。

2.3 JAVA作业和实验设计中的问题

由于JAVA学习的特殊性,其作业和毕业实验设计等需要学生具有良好的自主思考和动手能力,但是在实际的教学中,学生对JAVA的动手实践和综合运用能力较差,不能独立的进行实际问题的解决;毕业设计等过度依赖已有的资料,套用现象严重,不能进行原创;学生在学习期间也没有形成良好的设计习惯,表现出对系统设计和实现的随意性。

2.4 JAVA教学老师的问题

JAVA技术是一门不断深入发展的技术,在当前的计算机网络多个方面有着广泛的运用,高校的JAVA教学老师缺乏长期的一线实践开发经验,不能适应发展的新技术,教学效果不理想。JAVA学习的特殊性要求其必须做好教学与实践之间的结合,对老师的教学内容和方法提出了更高的要求,很多老师并不能有效的实现学生理论知识与实践动手能力之间的协调发展。

3 JAVA的教学设计探讨

3.1 合理的规划教学内容

JAVA知识主要包括有JAVA基础知识、JAVA核心知识和JAVA提高知识三个部分。基础知识要求学生对面向对象的编程、JAVA的语法和异常处理、JAVA的环境等知识进行很好的掌握,是进一步学习JAVA知识的基础。核心知识部分要求学生对面向对象的继承性、封闭性、抽象性和多态性等,并掌握这些特性设计的技术。JAVA提高知识部分是指根据专业方向学习的不同需要,选择多线程、图形处理、数据库处理、网络等内容学习。教学内容的设置,要求学生在掌握基本的JAVA基础知识的基础上,建立面向对象思想、算法设计思想等,为更深入的学习和提高程序设计水平奠定基础。

3.2 案例教学,启发学生的编程思想

JAVA编程语言的学习,重要的是在基础知识学习的基础上实现对其编程思想的掌握,从而真正实现举一反三,能够进行独立的编程开发工作。编程思想的形成,需要在不断的实践观察、分析和思考总结的基础上完成,因此,在教学中采用案例教学,是符合JAVA知识特点的有效手段。采用的案例一定要小而精,符合学生已掌握的JAVA知识,使得学生可以在原有知识体系的基础上通过自我实践和探索,实现对新知识的学习和体系构建,不但可以实现对新知识的有效掌握,还可以实现对自学和设计能力的锻炼。

3.3 运用多媒体教学与传统教学方法相结合

多媒体教学作为新的教学手段,在教学实践中取得了良好的教学效果,在JAVA知识的教学中采用传统教学模式与多媒体教学相结合的形式,可以将多媒体直观、形象和吸引力强等优点充分发挥。老师在教学时以传统方式进行理论知识讲解,以多媒体技术进行实践和案例的讲解,增加理论与实践之间的结合。

3.4 加强实践教学,提高JAVA知识综合运用能力

JAVA程序设计是一门应用为目标的教学,要求学生具有很强的实践动手能力,当前高校的JAVA课程教学,应该在讲解代码、编程调试等基础知识外,还应该加强上机实践的相关内容。可以探索校企结合的教学模式,让学生在企业实际JAVA研发项目的参与中体会需求分析、设计、编写代码和进行测试等各个环节,增加学生的软件开发实践经验和培养专业的职业素质。

3.5 提高教师的专业素质

JAVA知识需要在不断的实践开发项目中进行提升和锻炼,这是当前教学老师所缺乏的。应该尝试建立老师的继续深造和培训实践制度,如定期参加合作单位的企业JAVA开发项目,获得实践经验和与一线开发人员进行交;参加JAVA程序培训班;对老师的入职考核加大力度,对JAVA的自主开发创新能力进行严格要求。

4 结语

JAVA语言是计算机软件和网络编程的重要语言之一,本文结合实际的教学经验对当前JAVA的教学现状进行了分析,并且提出了改变教学方法、合理设计教学内容和增强实践运用等方面的建议,以期促进JAVA教学事业的发展。

参考文献

[1]耿祥义,张跃平.Java2实用教程[M].3版.北京:清华大学出版社,2006.

[2]吴跃,陈峥.面向对象程序设计教改探索[J].计算机教育,2010(8):60-63.

11.java程序员职业规划 篇十一

1 Java程序混淆技术的原理

混淆技术[1]实际上就是代码变换技术, 通过变换, 将原始程序P变换为新的程序P1, 它们的功能相似或者相近, 代码安全性非常高。

如果原始程序P, 经过混淆变换T, 变换为新的程序P1, 也就是P1=T (P) , 这个软件混淆变化必须满足以下条件:如果P结束, 那么P1也必须结束, 并且输出结果与P相同;如果P无法结束, 或者以错误状态结束, 那么P1不一定结束;对于P和P1的计算任务, P1比P消耗的时间长, 而且保持在一个特定的范围内;攻击者如果想要将P1恢复成P, 那么所需要消耗的时间远远大于将P转换为P1的时间。

2 Java程序混淆技术的分类

2.1 数据混淆

数据混淆[2]是指对程序的组成元素, 如常量、变量和数据结构进行混淆变换, 增大攻击者反编码的难度。

1) 分裂和合并变量混淆:分裂变量混淆指的是在保持程序原义的前提下, 将一些比较简单的数据结构和数据类型分解成一些变量的组合, 就可以达到隐藏原始程序的效果。

合并变量混淆指的是将几个数值变量或者整型数据合并成一个变量或数据, 从而达到隐藏原始数据的目的。

2) 数组重构混淆:数组是程序中的基本数据结构, 对数组进行重构混淆, 包括数组分裂变换、数组合并变换、数组平滑变换以及数组折叠变换。数组分裂变换指的是将一个数组分裂成两个或者两个以上的数组;数组合并变换是指将两个或两个以上的数组合并为一个数组;数组平滑变换是指减少数组的维数;数组折叠变换是指增加数组的维数。

3) 将静态数据转换为与程序相关的数据:静态数据, 特别是字符串数据, 包含大量信息。通过混淆变换, 可以将静态数据转换为一个函数或者一段子程序, 在执行程序的时候, 可以通过程序调用生成相应的字符串, 从而增加程序的复杂程度。

2.2 词法混淆

词法混淆是变换函数和变量的名称, 违背Java见名知义的软件原则。词法混淆是根据Java虚拟机规范中的类文件结构的有关规定, 混淆常量池中存储的类、字段、方法以及变量等名称的“CONSTANT_Utf8_info”类型数据。词法混淆主要有三种方法:用名称相同但是类型不同的字段进行替换;有意义的标识符用没有任何意义的字符来替换;用Java虚拟机不限制但是Java语言禁止的字符或者字符串来代替原始的字符或者字符串。词法变化具有单向性, 不需要额外的执行代价, 所以程序的复杂几乎不受影响, 在实践中应用比较广泛。

词法混淆还包括移除和改名。移除是指将程序中的注释、调试信息等格式化信息删除掉, 这种方法具有单向性, 一旦混淆无法恢复, 操作简单, 但是强度很差。改名是指将程序中的常量名、变量名等标识符改为没有意义的标识符。

2.3 控制混淆

1) 循环条件插入变换:通过不透明谓词把一个循环的终止条件变得更加复杂。

2) 分支插入变换:对于一串语句, 加入一个控制条件, 增加程序的复杂程度。可以加一个不透明谓词, 构造一个不会执行的分支, 或者另两个分支上的语句都和原语句相同, 从而影响后面语句的执行。

3) 将可制约的控制流转换为不可制约的控制流:利用不透明谓词, 加入一个假分支, 将一个循环变换为多个循环, 增加控制流图的翻译难度。

4) 并行化代码:并行程序比串行程序更复杂, 难以被分析。使用并行技术, 可以构造不透明谓词, 混淆程序的控制流。可以将串行程序并行化, 还可以在程序中添加代码, 增加程序的理解难度。

5) 控制顺序混淆:一般情况下, Java类文件包含了很多控制信息, 对这些控制转换信息进行掩藏可以通过打乱表达式、方法的顺序, 增加程序的理解难度。

2.4 类结构混淆

1) 类合并:类合并[3]指的是将两个或两个以上的类合并成一个类, 包括各个类所包含的变量和函数, 从而破坏系统的类, 隐藏系统的整体设计。根据重命名的变量和方法, 如果合并的类中有相同标识符的函数和变量, 那么就将它们改为不重复的变量或函数;如果合并的类中, 构造函数的标识符和参数都是相同的, 那么就增加一个伪造的参数;如果合并的两个类之间存在着继承的关系, 那么为了区分标识符相同的函数, 可以增加一个布尔型的私有变量。

2) 类分裂:类分裂指的是将一个类C拆分成C1和C2两个类, 并且C2是C1的子类。另外还要保证C中的变量和方法, 由C1继承或者由C2包含。

3) 类型隐藏:

在Java中, 除了类之外, 还有接口, 接口也是一种类型。通过接口, 可以声明待混淆类的变量和方法, 从而实现类型的隐藏。另外, 如果引入的所有接口只服务于一个类, 那么很容易被识别, 为了使自动分析变得困难, 可以使引入的接口同时为几个类服务。

3 Java程序混淆技术的算法

1) 滥用标识符混淆算法:滥用标识符混淆算法[4]是指用同一个标识符代替一个类中出现的所有标识符, 主要是通过Java中标识符中的重命名来实现的。

2) 重载无关联方法算法:重载无关联方法算法与扩展转换和方法重载有很大的关系。这种方法是将被混淆类中的所有实体用相同的标识符来重命名。在Java程序中, 如果某个编译时刻通过了一个象征性的参考, 那么混淆操作一定会被执行, 如果用这种方法对已操作程序反编译, 并重新执行, 就会改变程序的代码。

3) 非法标识符替换算法:非法标识符替换算法[5]是将程序中的普通标识符用关键词和非法字符结合的字符串或者纯粹的关键词来代替。这种混淆算法, 很容易迷惑大多数的反编译软件。

4) 重写静态方法算法:重写静态方法算法可以处理一些被编译过的Java类。它的混淆变化非常细微, 很难被察觉, 从而增加了攻击者的难度。

4 Java程序混淆技术的应用

1) 保护DRM技术。DRM技术的安全性和关键数据的保护有很大的关系, 采用Java程序混淆技术, 可以保护DRM技术的关键数据信息。

2) 保护算法。如果开发者想要将一个新算法应用到软件中的时候, 可以通过代码混淆技术混淆算法的一部分, 从而增加算法的理解难度, 达到保护算法的目的。

3) 代码抗篡改。当进行网络软件操作或者执行相关任务的时候, 代码的安全是相当重要的。软件设计者可以采用Java程序混淆技术保护操作软件, 防止外来用户或者恶意主机篡改代码。

4) 病毒变种。杀毒技术的重要方法就是模式匹配。对于病毒码, 如果采用混淆技术, 那么就可以产生很多不同特征的病毒变种, 威胁到网络安全。

5 结束语

Java程序混淆技术在不改变程序功能的基础上, 增加攻击者对程序反编译的难度, 提高软件知识产权的保护力度, 因此混淆技术在代码保护方面, 应用非常广泛。今后的混淆技术不仅要加大混淆力度, 提高防篡改力度, 还要考虑混淆算法的运行负担。

参考文献

[1]王建民, 余志伟, 王朝坤, 等.Java程序混淆技术综述[J].计算机学报, 2011, 34 (9) :105-108.

[2]霍建雷.用于Java软件保护的代码混淆技术研究与实现[D].西安:西北大学, 2009.

[3]郭玉杰.面向Java的代码混淆技术的研究[D].苏州:江苏大学, 2010.

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

12.java程序员面试题 篇十二

年龄:

工作年限:

1.int和Integer有什么区别?

2.抽象类(abstract class)和接口(interface)有什么异同?

3.List、Set、Map的区别?

4.Spring支持的ORM有哪些,哪些是你用过的?

5.使用Spring可以通过什么方式访问Hibernate或你使用过的任一ORM?

6.请你说明Spring路径“user/info/1”的含义?

13.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年。

14.java程序员职业规划 篇十四

以下笔者就对构造方法的调用方式进行分析。Java语言中构造方法的调用有三种方式。

一、在程序中通过new语句调用

当我们定义的类没有继承其它类时, 直接通过new语句来调用当前类的构造方法来创建对象。

1. 无继承类的构造方法的调用

例如:有以下类的定义:

Son类没有父类, 也没有显示定义构造方法, 所以调用默认的无参构造方法来创建对象s。如果在类Son中显示定义了一个或多个带参数的构造方法, 创建对象时Java编译器会根据创建的对象语句中的参数的个数、类型、顺序来选择相应的构造方法, 完成不同对象的初始化工作。

2. 隐式调用父类的无参构造方法

当一个子类继承父类时, 子类的构造过程中必须调用父类的构造方法。特别是当子类没有定义构造方法时, 系统自动调用父类的无参构造方法。例如, 有以下定义:

在上例中, 由于没有定义Son类 (子类) 的构造方法, 语句Son s=new Son () 自动调用Father类 (父类) 的无参数的Father () 构造方法, 完成对象的创建。所以此时必须要保证父类中有无参构造方法, 如果当父类中的显示定义了带参数的构造方法时, 就必须要显示定义无参数的构造方法, 以确保父类中无参构造方法存在, 否则就会出现编译错误。即进行如下操作:

二、通过super调用父类的构造方法

在上述实例中, 一般是子类和父类都没有定义构造方法, 或者是子类没有定义构造方法。父类既显式定义了带参数的构造方法, 又显式定义了无参数的构造方法, 那么子类一般隐式调用父类无参构造方法。但在实际应用中, 大多数类都是显式地定义了构造方法。当父类和子类都定义了构造方法时, 如果父类的构造方法初始化父类定义的成员, 子类的构造方法初始化子类定义的成员, 在创建子类的对象时, 这两个构造方法都要执行。这种情况下, 必须在子类的构造方法中使用关键字super来调用父类的构造方法。

例如:

如果子类通过super语句来调用父类的构造方法时, 它必须作为子类构造方法的第一条语句, 而且super所带的实际参数列表中的参数个数、类型、排列顺序与父类构造方法定义中的形式参数必须一致。

三、用this语句调用当前类的其他构造方法

当子类调用父类的构造方法时可以用super语句来完成, 但是如果在同一个类中的构造方法需要相互调用时我们如何来解决?this语句可以完成此功能。例如:

当用this语句来调用同一个类中其他构造方法时, 必须作为当前构造方法的第一条语句。只能在一个构造方法中用this语句来调用类的其他构造方法, 而且this所带的实际参数列表中的参数个数、类型、排列顺序与所调用的构造方法的形式参数必须一致。

构造方法的调用是Java程序设计中最重要、最基本的操作, 因此我们一定要正确理解其调用方式和原则。

参考文献

[1]刘志成, 张杰.Java进阶教程[M].北京:机械工业出版社, 2009.

15.java程序员职业规划 篇十五

关键词:Java程序设计;项目驱动教学模式

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

在目前的java程序设计教学中,普遍存在着课本不及时更新,无法摆脱应试模式框架,以及教育与实际脱轨等一系列的问题。而java程序设计是一个对学生的操作和实践很有依赖性的学科,所以,只有选择项目驱动教学的方式,才能使得学生的实践和操作能力得到一定的发展,更好地学习java的程序设计。

一、什么是项目驱动教学

项目驱动教学法是指通过进行一个完整的项目工作,来达到教学的目的,让知识和学生的动手能力都可以得到很好的进步。项目驱动教学模式主要应用于计算机软件这种比较复杂,学生可以借助项目的发展,来接受一些诸如程序设计之类的知识系统。

二、项目驱动教学模式的意义

项目驱动教学模式可以具体针对每一个学生来进行程序设计的教学。通过分组讨论等方式,可以使得学生的思路更清晰,更好地掌握java程序设计的知识理论。可以大大提高学生的学习兴趣和实践能力,使得高职院校更好的和社会接轨。所以,项目驱动教学模式是一种具有划时代意义的教学史上的重大改革。

三、就java程序设计对项目驱动教学模式的研究

(一)如何选择授课项目

项目的选择应该与当下社会的发展趋势相匹配,这样的授课项目才可以与时代的发展接轨。项目的选择要根据授课时间、授课地点以及学生的学习能力来判断。如果项目过难,学生不易接受,反而达不到预期的效果。反之,项目过易,学生的积极性不容易被调动起来,也容易达到事倍功半的效果。如果项目的基体过于庞大,教师很难完全的对项目进行细致的分析,会影响教学的完整性。而项目的技术含量如果太高,就会使得学生失去学习的兴趣,打击学生对项目研究的勇气和信心。所以,教师应该根据学生的接受能力,授课的周期来具体分析,为学生选择合适的项目来进行授课作业。

(二)如何合理安排学生分组和授课进度

授课项目的选择是为了完成整个学期的学业。所以项目的安排要合理地分散于学生学习的一个周期之内。根据授课的进度,适当增加项目的难度以及技术含量。这样比较利于学生的学习积极性和学习兴趣一直处于一个合理的状态,避免了填鸭式教学的传统弊病。

学生的分组可以按照学生的接受能力和领导组织能力。领导组织能力强的同学可以作为每个小组的组长,接受能力高的同学可以作为副组长。这样就能更有利地组织学生来一步步完成项目的每个阶段。并且能更好地激发学生的团体协作精神和部分同学的领导力,并且可以大幅度减少教师的教学负担。还能使得学生更好地适应今后的工作。

(三)如何进行项目驱动教学

1.教师讲解软件开发的环境

在授课的开始,教师一定要本着当下软件开发的环境为学生作深入细致的讲解。当下,软件开发企业为了降低成本,提高速度,使用的是一体化的集成设备,即把数据库,服务器等集成在一起,这就增加了学生学习的难度,使得原本简单的东西复杂化。

Java的后台程序都是英文版的,这就要求教师更合理地引导学生来正视软件开发的难度,同时借助语言,肢体,以及软件的实际操作来打消学生的负面心理,提高学习的积极性。

2.确定授课的软件

在教学过程中,一定要选择合适的授课软件及其辅助工具。因为java的程序设计不但要求学生知道程序设计的目标,更要让学生知道该过程及其原理,以及软件开发的条件和必备工具。在授课初期,教学过程一定要采用可视化的软件,这样可以使得学生更直观地看到程序的管理,编程等的产生和形成。在授课达到一定程度之后,再采用非可视化的开发工具,锻炼学生的能力,使得学生更好地掌握软件开发的知识,更好地锻炼学生的动手能力和操作能力。

3.授课的考核

在当下,传统的考核方式已经不再适应项目驱动授课的教学模式。在项目驱动的模式下,我们不应该只用笔试,口试的方法对学生的能力和知识量来进行评定。在此,我们应该在教学到了某一进度时,让学生亲自动手制作某软件或者某程序。例如:让学生自己动手来编程,而不是让学生在纸上填写编程代码。当学生的考核完成以后,由学校的权威专家来逐个评判考核的结果,并评分,计入考核档案。这样才能防止某些学生作弊,更好地体现考核的权威性和公平性。

4.教学实践

当学生的考核完成并且合格以后,就应该让学生来参加实践。实践可以是教师根据企业的发展来设计出的项目,也可以是学生自己寻找的项目,无论如何,都要和日后学生即将步入的社會相适应,不可以搞形式主义,让学生空有一身知识而无处倾泄。实践可以更好地锻炼学生的动手能力,以及对之前的知识更为系统地掌握和消化。并且能让学生更为自信的走向社会。

5.引导学生就业

当学生的知识掌控的比较随心所欲,并且动手操作能力也能得心应手时,教师应该主动引导学生走向社会,即让学生就业。根据学校的优惠政策和人脉关系,为学生选择一个适合的行业来发挥他们的最大才能。初入社会的学生并不懂得社会上的一些潜规则和人际交往,教师应该用委婉的语言向学生合理解释,如果话说的太直接,容易导致学生对社会产生恐惧的心态,打消学生走向社会的积极性。学生应该努力自己走向社会,用自己的知识和能力,选择合适的就业岗位,并且在教师的帮助下,把自己的一切做到最好,发挥自己最大的优势适合自己的空间。

四、小结

项目驱动的教学模式现在的我们已经不陌生,它的作用是把教学和实践完美的结合在了一起。杜绝了以往学生只知理论,不懂社会实践的尴尬局面。学生步入社会以后可以更快,更好地接受社会所给于的压力,及时把自己的知识应用在工作中。所以,项目驱动的教学模式是今后教育改革的必由之路。

参考文献:

[1]马玉青.计算机绘图教学中应用“任务驱动”教学法初探[J].职业教育研究,2005,(10)

[2]姜大源.职业教育专业教学论初探[J].教育研究,2004,(05)

[3]张哲,陈桂生.在Java语言教学中实施“项目驱动”教学法的实践探索[J].教育与职业,2007,(18)

[4]张党省.论职校教师在项目教学法中的角色[J]. 科教文汇(下半月),2006,(09)

[5]岳云峰,顾晖,李跃华.计算机硬件课程教学中的项目驱动教学法[J]. 南通大学学报(教育科学版),2007,(03)

[6]吴言.项目教学法[J]. 职业技术教育,2003,(07)

[7]兰景英,范勇.基于项目驱动的软件测试人才培养模式[J].计算机教育,2011,(6):10-13

[8]陆芸婷.基于工作过程的《数据库基础》课程设计[J]. 中国科技信息,2009,(15):269-271

[9]朱雄军,杨旭东,陈晴.高职计算机网络专业基于工作过程的课程体系设计[J].职业技术教育,2008,(5):32-33

[10]罗伟,张莹,张翠英.基于“工作过程”的铁道技术专业课程体系构建[J].陕西教育(高教版),2008,(3):34

16.程序员面试宝典java 篇十六

在JAVA的util包中有两个所有集合的父接口Collection和Map,它们的父子关系:

java.util

+Collection 这个接口extends自 --java.lang.Iterable接口

+List 接口

-ArrayList 类

-LinkedList 类

-Vector 类 此类是实现同步的

+Queue 接口

+不常用,在此不表.

+Set 接口

+SortedSet 接口

-TreeSet 类

-HashSet

+Map 接口

-HashMap 类 (除了不同步和允许使用 null 键/值之外,与 Hashtable 大致相同.)

-Hashtable 类 此类是实现同步的,不允许使用 null 键值

+SortedMap 接口

-TreeMap 类

以下对众多接口和类的简单说明:首先不能不先说一下数组(Array)

一、Array , Arrays

Java所有“存储及随机访问一连串对象”的做法,array是最有效率的一种。

1、

效率高,但容量固定且无法动态改变。

array还有一个缺点是,无法判断其中实际存有多少元素,length只是告诉我们array的容量。

2、Java中有一个Arrays类,专门用来操作array。

arrays中拥有一组static函数,

equals:比较两个array是否相等。array拥有相同元素个数,且所有对应元素两两相等。

fill():将值填入array中。

sort():用来对array进行排序。

binarySearch():在排好序的array中寻找元素。

System.arraycopy():array的复制。

二、Collection , Map

若撰写程序时不知道究竟需要多少对象,需要在空间不足时自动扩增容量,则需要使用容器类库,array不适用。

1、Collection 和 Map 的区别

容器内每个为之所存储的元素个数不同。

Collection类型者,每个位置只有一个元素。

Map类型者,持有 key-value pair,像个小型数据库。

2、Java2容器类类库的用途是“保存对象”,它分为两类,各自旗下的子类关系

Collection

--List:将以特定次序存储元素。所以取出来的顺序可能和放入顺序不同。

--ArrayList / LinkedList / Vector

--Set : 不能含有重复的元素

--HashSet /TreeSet

Map

--HashMap

--HashTable

--TreeMap

Map----一组成对的“键值对”对象,即其元素是成对的对象,最典型的应用就是数据字典,并且还有其它广泛的应用。另外,Map可以返回其所有键组成的Set和其所有值组成的Collection,或其键值对组成的Set,并且还可以像数组一样扩展多维Map,只要让Map中键值对的每个“值”是一个Map即可。

Collection下 1.迭代器

迭代器是一种设计模式,它是一个对象,它可以遍历并选择序列中的对象,而开发人员不需要了解该序列的底层结构。迭代器通常被称为“轻量级”对象,因为创建它的代价小。

Java中的Iterator功能比较简单,并且只能单向移动:

(1) 使用方法iterator()要求容器返回一个Iterator。第一次调用Iterator的next()方法时,它返回序列的第一个元素。注意:iterator()方法是java.lang.Iterable接口,被Collection继承。

(2) 使用next()获得序列中的下一个元素。

(3) 使用hasNext()检查序列中是否还有元素。

(4) 使用remove()将迭代器新返回的元素删除。

Iterator是Java迭代器最简单的实现,为List设计的ListIterator具有更多的功能,它可以从两个方向遍历List,也可以从List中插入和删除元素。

2.List的功能方法

List(interface): 次序是List最重要的特点;它确保维护元素特定的顺序。List为Collection添加了许多方法,使得能够向List中间插入与移除元素(只推荐LinkedList使用)。一个List可以生成ListIterator,使用它可以从两个方向遍历List,也可以从List中间插入和删除元素。

ArrayList: 由数组实现的List。它允许对元素进行快速随机访问,但是向List中间插入与移除元素的速度很慢。ListIterator只应该用来由后向前遍历ArrayList,而不是用来插入和删除元素,因为这比LinkedList开销要大很多。

LinkedList: 由列表实现的List。对顺序访问进行了优化,向List中间插入与删除得开销不大,随机访问则相对较慢(可用ArrayList代替)。它具有方法addFirst()、addLast()、getFirst()、getLast()、removeFirst()、removeLast(),这些方法(没有在任何接口或基类中定义过)使得LinkedList可以当作堆栈、队列和双向队列使用。

3.Set的功能方法

Set(interface): 存入Set的每个元素必须是唯一的,这也是与List不同的,因为Set不保存重复元素。加入Set的Object必须定义equals()方法以确保对象的唯一性。Set与Collection有完全一样的接口。Set接口不保证维护元素的次序。

HashSet: HashSet能快速定位一个元素,存入HashSet的对象必须定义hashCode()。

TreeSet: 保持次序的Set,底层为树结构。使用它可以从Set中提取有序的序列。

LinkedHashSet: 具有HashSet的查询速度,且内部使用链表维护元素的顺序(插入的次序)。于是在使用迭代器遍历Set时,结果会按元素插入的次序显示。

HashSet采用散列函数对元素进行排序,这是专门为快速查询而设计的;TreeSet采用红黑树的数据结构进行排序元素;LinkedHashSet内部使用散列以加快查询速度,同时使用链表维护元素的次序,使得看起来元素是以插入的顺序保存的。需要注意的是,生成自己的类时,Set需要维护元素的存储顺序,因此要实现Comparable接口并定义compareTo()方法。

3、其他特征

* List,Set,Map将持有对象一律视为Object型别。

* Collection、List、Set、Map都是接口,不能实例化。

继承自它们的 ArrayList, Vector, HashTable, HashMap是具象class,这些才可被实例化。

* vector容器确切知道它所持有的对象隶属什么型别。vector不进行边界检查。

三、Collections

Collections是针对集合类的一个帮助类。提供了一系列静态方法实现对各种集合的搜索、排序、线程完全化等操作。

相当于对Array进行类似操作的类Arrays。

如,Collections.max(Collection coll); 取coll中最大的元素。

Collections.sort(List list); 对list中元素排序

四、如何选择?

1、容器类和Array的区别、择取

* 容器类仅能持有对象引用(指向对象的指针),而不是将对象信息copy一份至数列某位置。

* 一旦将对象置入容器内,便损失了该对象的型别信息。

2、

* 在各种Lists中,最好的做法是以ArrayList作为缺省选择。当插入、删除频繁时,使用LinkedList();

Vector总是比ArrayList慢,所以要尽量避免使用。

* 在各种Sets中,HashSet通常优于HashTree(插入、查找)。只有当需要产生一个经过排序的序列,才用TreeSet。

HashTree存在的唯一理由:能够维护其内元素的排序状态。

* 在各种Maps中

HashMap用于快速查找。

* 当元素个数固定,用Array,因为Array效率是最高的。

结论:最常用的是ArrayList,HashSet,HashMap,Array。而且,我们也会发现一个规律,用TreeXXX都是排序的。

注意:

1、Collection没有get()方法来取得某个元素。只能通过iterator()遍历元素。

2、Set和Collection拥有一模一样的接口。

3、List,可以通过get()方法来一次取出一个元素。使用数字来选择一堆对象中的一个,get(0)...。(add/get)

4、一般使用ArrayList。用LinkedList构造堆栈stack、队列queue。

5、Map用 put(k,v) / get(k),还可以使用containsKey()/containsValue()来检查其中是否含有某个key/value。

HashMap会利用对象的hashCode来快速找到key。

* hashing

哈希码就是将对象的信息经过一些转变形成一个独一无二的int值,这个值存储在一个array中。

我们都知道所有存储结构中,array查找速度是最快的。所以,可以加速查找。

发生碰撞时,让array指向多个values。即,数组每个位置上又生成一个表。

6、Map中元素,可以将key序列、value序列单独抽取出来。

使用keySet()抽取key序列,将map中的所有keys生成一个Set。

使用values()抽取value序列,将map中的所有values生成一个Collection。

为什么一个生成Set,一个生成Collection?那是因为,key总是独一无二的,value允许重复。

===List接口对Collection进行了简单的扩充,它的具体实现类常用的有ArrayList和LinkedList。你可以将任何东西放到一个List容器中,并在需要时从中取出。ArrayList从其命名中可以看出它是一种类似数组的形式进行存储,因此它的随机访问速度极快,而LinkedList的内部实现是链表,它适合于在链表中间需要频繁进行插入和删除操作。在具体应用时可以根据需要自由选择。前面说的Iterator只能对容器进行向前遍历,而ListIterator则继承了Iterator的思想,并提供了对List进行双向遍历的方法。

Set接口也是Collection的一种扩展,而与List不同的时,在Set中的对象元素不能重复,也就是说你不能把同样的东西两次放入同一个Set容器中。它的常用具体实现有HashSet和TreeSet类。HashSet能快速定位一个元素,但是你放到HashSet中的对象需要实现hashCode()方法,它使用了前面说过的哈希码的算法。而TreeSet则将放入其中的元素按序存放,这就要求你放入其中的对象是可排序的,这就用到了集合框架提供的另外两个实用类Comparable和Comparator。一个类是可排序的,它就应该实现Comparable接口。有时多个类具有相同的排序算法,那就不需要在每分别重复定义相同的排序算法,只要实现Comparator接口即可。集合框架中还有两个很实用的公用类:Collections和Arrays。Collections提供了对一个Collection容器进行诸如排序、复制、查找和填充

上一篇:重庆市房地产市场背景分析下一篇:来看看乡村作文