Java程序员的堕落(11篇)
1.Java程序员的堕落 篇一
Java程序员需要了解的8个Java开发工具
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工具能帮助你减少调试时间。
总结
对于想学习Java的朋友来说,比较快的方式当然是结合自身实际情况找一家专业的培训机构来进行系统有效的学习,对此,小编推荐您可以访问厚学网()来了解各大知名培训机构的详细情况,为自己的选择保驾护航;目前厚学网共计入驻了多家IT领域的知名培训机构,如:被北大青鸟、达内、上海蓝鸥、阁瑞钛伦特软件培训等,在让客户了解全面的课程信息及真实用户评价的同时,也让客户能够更放心,省心的选择到想学的课程,希望小编的倾力推荐能够对您的选择有所帮助,期待您早日学有所成,加油!
2.Java程序员的堕落 篇二
网上各个网站提供的聊天室基本都是B/S结构的, 现在用Java实现一个C/S结构的聊天室程序。C/S结构包括两个方面:一个运行在服务器;一个运行在客户端。
2 工作原理
服务器程序运行后就等待客户端程序连入, 客户端根据服务器的IP地址和端口号连入, 这样服务器和客户端就建立了一个连接, 而且可以有多个客户端同时连入一个服务器。连接建立好之后, 每个客户端的发言都发送给服务器, 服务器接收后再转发给所有连入的客户端, 这样每个客户端就都能收到其他客户发出的信息了。这就是C/S结构聊天室的工作原理, 其实现主要使用如下两种技术:
(1) Socket:网络套接字, 让两个应用程序通过一个双向的网络通信链接实现数据交换。即服务器和客户端的应用程序各有一个Socket, 这两个Socket把服务器和客户端的程序连接起来并交换数据。
(2) 多线程:因为一个服务器要连入多个客户端, 要让服务器程序同时为多个客户服务, 就需要为每个客户端开辟一个线程, 专门负责处理该客户的信息。此外, 客户端程序不仅要发送信息给服务器, 还要不断接收服务器转发过来的信息, 因此也需要开辟一个线程专门负责接收服务器的信息。
3 程序实现
3.1 服务器端
建一个类, 名称为ChartServer, 代表服务器程序。在该类中, 首先定义一个ServerSocket, 并指明端口号, 这样服务器端的Socket就建立好了。然后去接收客户端的请求, 并且把客户端传来的Socket放入一个HashSet中保存 (HashSet集合中保存所有客户的Socket, 以便服务器) , 最后启动一个线程负责该客户, 在线程中不断接收该客户发送的信息并转发给HashSet中所有的客户。代码如下:
3.2 客户端
建一个ChartClient类作为客户端程序。运行后如图1所示。首先构建好界面, 然后定义Socket, 指明服务器的IP地址和端口号, 这样就建立起了客户端到服务器的连接。连接建立之后服务器和客户端就可以互相发送数据信息了。接下来启动一个线程专门负责接收服务器发送来的信息并显示到聊天室里。最后, 还要写一个事件, 负责把客户的发言发送给服务器, 让发送按钮注册该事件, 这样单击按钮就可以发送信息了。在这个过程里, 信息的发送和接收都是通过I/O实现的。代码如下:
4 结语
3.Java程序混淆技术综述 篇三
关键词: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期
4.Java程序员的堕落 篇四
大家好,最近总结了一下作为Java语言初学者,需要掌握的一些基本知识,和一个Java程序员所具备的基本素质,与大家共同分享,不足之处望大家多提宝贵意见。
1、Java概述
1995年5月23日开始,原名为Oak,最先开始用于一个绿色项目开发(一次编译随处使用),后来更名为Java。
09年SUN公司被Oracle收购,先后经历1.0、1.1、1.2、1.3、1.4、5、6、7、8等版本。 Java SE 标准开发
Java EE 企业级开发
Java ME 移动开发
2、JDK和JRE JDK:Java Development Kit(Java开发工具集)
Java语言与JDK的关系:足球比赛与足球场
JRE:Java Runtime Environment 如果客户要使用Java语言平台开发的软件,就必须安装JRE。
它包含:开发技术、用户界面工具箱、整合类库、基础类库和Java虚拟机 区别:JDK可以给开发者提供开发环境,也可以运行程序;JRE不能开发Java程序,只能运行Java程序,客户通常只安装JRE不安装JDK。 Java平台分为四个部分: 操作系统:Linux、Macintosh、Solaris、Windows,.etc 2 JVM(Java虚拟机)
虚拟的操作系统,不同的操作系统虚拟机也不同,它只能识别class文件.3 JDK(包含JRE、工具程序与API)4 Java语言
几个专有名词解释:
JDBC:Java DataBase Connection(Java数据库连接):将数据库的数据展示到前台页面
JNDI:Java Naming Directory Interface(Java命名目录接口)RMI:Remot Method Invoke(远程方法调用):跨IP、跨进程的调用。
开发者向客户提供自己的ip、端口、方法名称,客户拿到了这些则可以远程访问开发者的服务,最终能够获取到想要的东西。rmi://10.7.210.616712/basketballInfo
3、JVM(了解)
概述:Java Virtual Machine(Java虚拟机):可以通过Java虚拟机来实
磨砺营IT教育版权所有
http://
现跨平台。
我们可以把JVM看做操作系统,他只能运行.class文件
不跨平台:在Windows系统开发的程序无法再其他操作系统上运行,不能实现跨平台。
HelloWorld 0101110 Windows操作系统
0101011 Solaris操作系统
跨平台:一次编译,到处运行。好比一份用当地语言编写的文档(俄文),先翻译成英文,在由英文翻译成客户所在国家的语言
JVM作用过程:源程序—(编译)—> 字节码(.class)—(JVM把字节码进行解释)—> 操作系统能理解的机器语言 了解两点: 他是一个操作系统,专门执行class文件 有了它才能够实现跨平台;不同的操作系统,它的虚拟机不一样。
4、写出第一个Java程序(重点)
步骤:安装jdk配置环境变量(连接用户和操作系统)检查是否配置完成(win+R,输入cmd,输入java –version,能够显示Java版本信息说明安装成功)
编程工具:记事本、写字板、EditPlus、Eclipse等。
输入javac命令:编译程序,使之创建一个.class文件(字节码)输入java命令:解释执行程序(执行jdk文件夹bin目录下的java.exe文件,即请求Java虚拟机来执行某字节码)
5、Java标识符命名规范(掌握)
定义:可以自定义的字符序列叫标识符
类名称也叫作标识符,类名称必须和Java源文件名称前缀保持一致。命名规范: 类名称首字母必须大写,如果有多个单词,每个单词首字母大写; HelloWorld 2 标识符可以使用大小写字母(一般全部用大写字母)开始,也可以使用$(美元符号)或_(下划线)开始; 命名遵循“见名知意”的规则; 命名遵循“驼峰命名法”的规则(即有多个单词时,每个单词首字母大写)。
磨砺营IT教育版权所有
http://
6、注释
单行注释://+内容(放在代码的上面一行)
//定义一个整数类型的变量,其名称为height int height; //给变量赋值:
//使用 =(赋值运算符)给变量赋值
//赋值运算符:将(赋值运算符)右边的数值赋给左边的变量 height = 173;
多行注释/块注释:
注意:行注释只能写在方法里面,用来注释变量、分支、循环
多行注释用来注释类、方法、属性
7、变量(重点)
定义:驻留在内存中的一个存储单元(临时)如何使用变量来完成计算: 1 声明一个变量
语法: 数据类型 变量名;int height;2 给变量赋值
语法:
变量名 = 值;height = 173;3 声明变量和赋值可以放在一行,即:数据类型 变量名 = 值;int weight = 86;注意:变量使用之前,一定要为其赋初始值(初始化)。4 如何向控制台输出变量 System.out.println(height);System.out.println(height);
磨砺营IT教育版权所有
http:// 如何使用变量改变数值 weight = weight + 1;变量有哪些数据类型:
数据类型分为两大类:基本数据类型和引用数据类型。基本数据类型: 1 整数类型:
int(整形): 32bit或者4byte,最大值为2的31次方-1,最小值为负2的31次方
short(短整形): 16bit或者2byte,最大值为2的15次方-1,最小值为负2的15次方
long(长整形): 64bit或者8byte,最大值为2的63次方-1,最小值为负2的63次方
注意:所有整数的默认字面量(在编译器能够知道的数值)都为int类型,所以long类型的变量值需要在后面一定要加上一个“L”(可以用小写,但是规范一般用大写。)
byte(字节类型): 8bit或者1byte,最大值为2的7次方-1,最小值为负2的7次方
注意:定义整数尽量使用int类型,如果空间不够再使用long类型,不要使用short、byte来定义整数。小数类型:
float(单精度浮点型): 32bit或者4byte,科学计数法 float pi = 3.14F;注意:所有小数的默认字面量(在编译器能够知道的数值)都为double类型,所以float类型的变量值需要在后面一定要加上一个“F”(可以用小写,但是规范一般用大写。)
double(双精度浮点型):64bit或者8byte,科学计数法 注意:定义小数优先使用double类型,避免不必要的错误。3字符类型:
char(字符类型): bit16或者2byte,只能存储单个字符(2byte,也可以存储汉字或字母)
char sex = ‘男’;注意:只能存储单个字符,必须以单引号开始,单引号结束。
磨砺营IT教育版权所有
http:// 布尔类型:
boolean(布尔类型):只能存储两个值——true/false boolean bool = true;经常使用的数据类型有:int、long、double、bollean 几乎不用的数据类型有:short、float、char 很少用到的数据类型有:byte(第五周讲)变量的命名规范 变量名只能以大小写字母、下划线、美元符号开头,但是可以有大小写、下划线、美元符号、数字组成; 一般使用小写字母开头来定义变量; 如果有多个单词采用驼峰命名法,从第二个单词开始首字母大写; int tomAge = 18 4 变量名区别大小写; 变量名长度不受限制,但是一般变量名称长度不要超过15个字符。6 如果超过15个字符,去掉元音字母保留辅音字母
7、运算符
1、算数运算符
+-* / % 其中,%叫做取模运算符(取余数运算符)。21 / 5 = 4 21 % 5 = 1 在Java世界中,两个整数相除,结果必然是一个整数
2、赋值运算符
= :将运算符右边的数值赋给左边的变量 注意:右边的数值也可以是变量
3、 比较运算符 > < >= <= == 比较两个数值(是否相等)
磨砺营IT教育版权所有
http://
!= 不等于
比较运算符计算的结果一定是一个boolean数据类型 boolean calcResult = 3 > 5;System.out.println(calcResult);则输出false
4、++--放前面叫前向自增/自减:先计算再赋值 放后面叫后向自增/自减:先赋值再计算
int a = 3;int b = 2;int result =(a++)*(--b)+(--a)/(b ++);输出为3*1+3/1=6
5、逻辑运算符(重点)自增和自减(面试会考察)
逻辑运算符必须要配合boolean数据类型一起使用 && 与:
使用场景:
条件1 && 条件2 多个条件都为真则为真。1 int score1 = 80;int score2 = 90;boolean gift = score1 >80 && score2 >80;System.out.println(gift);2 int score1 = 80;int score2 = 90;boolean result1 = score1 >80;boolean result2 = score2 >80;boolean gift = result1 && restult2;
磨砺营IT教育版权所有
http://
System.out.println(gift);两个例子输入结果均为false。 || 或
使用场景:
条件1 || 条件2 多个条件有一个为真,则为真。!非
使用场景:!条件 非真为假,非假为真。
6、位运算符(重点)
特征:将两个整数转成二进制再针对每个bit位逐个进行上下比较的位运算 & 位与:上下结果都为1则结果是1,否则结果是0 10010 8 01010 10 00010 2 | 位或:上下只要有1个1结果就是1,否则是0 10010 8 01010 10 11010 26 ^ 位异或:上下相同为0,否则为1 10010 8 01010 10
磨砺营IT教育版权所有
http://
11000 24 拓展1: int有32位
00000000 00000000 00000000 00000010 最高位 次高位 次低位 最低位
第32位也叫作符号位,1代表负数,0代表正数。拓展2:
~ 取反 先+1再取反
int value = ~10 则得到-11 00001010 1110101
7、 位移运算符
<< 左位移:左位移多少位,就在最右边补多少个0 将10进制数2,左位移3位 2 << 3 00010则去掉前3位,在后面加3个0,变成了10000 >> 右位移:右位移多少位,就在最右边去掉多少个位
将10进制数17,左位移3位 17 >> 3 10001则去掉后3位,在前面加3个0,变成了00010
5.java程序员的就业前景 篇五
职业生涯规划法则:
别因为落入了一把牛毛就把一锅油泼掉,别因为犯了一点错误就把一生的事业扔掉。蒙古谚语
从Java的应用领域来分,Java语言的应用方向主要表现在以下三个方面:首先是大中型的商业应用,包括我们常说的企业级应用(主要指复杂的大企业的软件系统)、各种类型的网站,Java的安全机制以及它的跨平台的优势,使它在分布式系统领域开发中有广泛应用;其次是桌面应用,就是常说的C/S应用,主要用来开发运行于不同的操作系统上的桌面应用程序;再次是移动领域应用,主要表现在消费和嵌入式领域,是指在各种小型设备上的应用,包括手机、PDA、机顶盒、汽车通信设备等。
全球有25亿Java器件运行着Java,450多万Java开发者活跃在地球的每个角落,数以千万计的Web用户每次上网都亲历Java的威力。今天,Java运行在7.08亿手机、10亿智能卡和7亿PC机上,并为28款可兼容的应用服务器提供了功能强大的平台。越来越多的企业,因为使用了Java而提高了生产效率。
近年来我国信息化发展越来越快,使得全国各地的信息化建设如火如荼,出现了大量的信息化人才尤其是Java软件人才的缺口,而我国信息化人才培养还处于发展阶段,导致社会实际需求人才基数远远大于信息化人才的培养基数,使得数以万计的中小企业急需全面系统掌握Java软件开发基础技能与知识的软件工程师。根据4月TIOBE开发语言排行榜宣布的流行开发语言的排名结果,Java仍然高居榜首,在国内的软件开发企业中,Java语言的使用比例也排名第一。
我国目前对软件人才的需求已达20万,并且以每年20%左右的速度增长。在未来5年内,合格软件人才的需求将远大于供给。20,我国软件人才的缺口已达42.5万,其中尤以Java人才最为缺乏。根据IDC的统计数字,在所有软件开发类人才的需求中,对Java工程师的需求达到全部需求量的60%~70%。应该说Java软件工程师的就业机会和前景是非常大的。再加上Java软件工程师不仅IT专业企业需要,广大的非IT企业也需要。前景是非常乐观的。
同时,Java工程师的薪水相对较高。通常来说,具有3~5年开发经验的工程师,拥有年薪10万元是很正常的一个薪酬水平。但是,对Java人才需求旺盛的IT企业却很难招聘到合格的Java人员。其中,最根本的原因就是许多计算机专业的毕业生在读期间没有掌握实用的技能与经验,距离企业的实际用人需求有较大的差距。因此,计算机专业的大学生欲成为Java工程师,最便捷的一条路就是参加以实战项目为主要教学方法的Java职业技能培训,从而有效地缩短同企业具体用人需求之间的差距。
要使用Java语言胜任企业工作并不容易。比如要成为一名Java架构师,必须精通设计、需求分析、各种开源工具、JavaEE的底层技术;熟悉工作流程、权限框架、门户框架等。而要成为一名Java普通程序员,必须具备基本的J2EE技术(JSP、Servlet、Java语言),SSH(Struts、Spring、Hibernate)框架开发,一定的数据库设计能力和数据库使用经验,熟悉Web开发技术(比如html+css+Javascript,会ajax更好)。
当前世界各地持有JavaProgrammer证书的人员供需差距极大,迫使企业不得不用高薪聘请Java程序员。因此,JavaProgrammer的含金量比一般的技术人员要高出很大一块。在美国、加拿大、澳大利亚、新加坡等发达国家和中等发达国家,持有JavaProgrammer认证证书的人年薪均在4-10万美金,而在国内持有JavaProgrammer认证的程序员也有极好的工作机会和很高的薪水。
6.Java程序员的堕落 篇六
如何成为一名优秀的Java程序员
为什么越来越多的90后偏爱互联网行业呢?他们的择业观与80后有哪些区别呢?
在公司内部,90后更偏爱自由开放的企业文化。从调查结果来看,有73%的受访者赞同“开放自由、相对宽松”是最理想的企业文化,仅有13%的受访者可以接受“严格守序、集体高于个人的传统企业文化”。在追求自由的风格影响下,大部分90后都明确表示反感办公室八卦和职场潜规则。
每一代人都有自己的择业观——70后追求稳定“铁饭碗”;80后奉行实用主义,看重职业发展;而90后爱高薪更爱自由。波士顿咨询公司的最新分析报告显示,2014年互联网行业在中国直接创造了170万个就业机会。随着行业的进一步发展,预计2020年有望直接为约350万人带来就业机会。短短几年间,蓬勃发展的互联网公司已经成为深受90后青睐的就业选择。很多90后之所以热衷在互联网企业就业,与行业广阔的发展空间、人性化的管理风格以及诱人的薪酬福利有着密切关系。
四川是旅游的天堂,无法拒绝她火辣辣的美食,无法拒绝她惊艳的自然风光,更无法拒绝她的古蜀文化。中国作为全球首屈一指的大国,IT培训缺口日益增大。从国家到地方,政府纷纷鼓励年轻人学习一技之长改变命运,成为很多人的首选。那么,2017IT培训前景如何?是不是真如传言中所说的高薪职业永不失业呢?
不要被小编的慷慨陈词所打动了,和你们说好做彼此的天使,所以今天不选择套路你们。好了,言归正传,来看看小编送上的IT培训福利是否能打动你吧~今天小编想给大家扒一扒大家感兴趣的IT培训!
我们认为想要成为一个合格的Java程序员,必须需要牢固的基础,这样在未来接触新的知识的时候,才能快速吸收,基础不牢固的程序员,随时都会被新的知识和技术所淘汰,下盘不稳风一吹就倒,那么作为一个合格的Java软件工程师需要怎样的素质?
一,良好的编程能力。编程能力直接决定了项目开发的效率。这要求软件工程师至少精通一门编程语言,熟悉它的基本语法、技术特点和API(应用程序接口)。
二,自觉的规范意识和团队精神。随着软件项目规模越来越大,仅仅依靠个人力量已经无法完成工作,因此,现代软件企业越来越重视团队精神。一般来讲,软件企业中的程序员可以分为两种,一种是“游击队员”,他们可能对编程工具很熟,能力很强,编写的程序简洁高效,却缺乏规范和合作的观念;另一种程序员个人能力不一定很强,但程序较为规范,合作意识良好。第二种人更适合现代软件企业发展的潮流。对于基础软件工程师来说,他们在企业中的角色决定了他们必须具有良好的规范意识和团队精神。
三,认识和运用数据库的能力。信息以数据为中心,因此与数据库的交互是必不可少的,了解数据库的操作和编程是软件工程师需要具备的基本素质之一。四,较强的英语阅读和写作能力。程序世界的主导语言是英文,编写程序开发文档和开发工具帮助文件离不开英文,了解业界的新动向、阅读技术文章离不开英文,与编程高手交流、发布帮助请求同样也离不开英文。作为基础软件工程师,具有一定的英语基础对于提升自身的学习和工作能力极有帮助。
五,具有软件工程的概念。基础软件工程师从事的工作相对于系统分析师和高级程序员要单纯一些,但是他们仍然是整个软件工程中重要的一环,他们同样需要具有软件工程的概念:从项目需求分析开始到安装调试完毕,基础软件工程师都必须能清楚地理解和把握这些过程,并能胜任各种环节的具体工作。与信息技术领域先进的基础理论教育相比,我国高校软件人才培养模式在实践技能的培养、IT编程前沿技术的获取与沟通、具有国际水平和标准的软件项目开发等方面的培养存在极大不足。为解决这一问题,有必要在高校推出“软件教育产品”的人才培养模式。“软件教育产品”是一种培养中、高级软件人才的教育产品化解决方案,其根本目的可以归结为--培养掌握IT技术发展方向、熟悉国际开发准则和标准,并且具有丰富项目管理经验的高级软件项目管理人员。“软件教育产品”包含了教学方案的设计、课程选取与设置、教材的引进与二次开发、教学管理流程的监控、教学实践环节的落实等等。
7.Java程序员的堕落 篇七
关键词:java语言,程序漏洞,检测技术,诊断技术
Java语言是近几年计算机编程语言当中应用最为广泛的,根据国际计算机开发语言TIOBE排行榜的统计显示,自2002 年以后,Java语言的使用频率始终稳占计算机编程语言使用频率榜单的前两位,并且随着近几年安卓智能手机系统应用范围的扩大,其也将Java语言作为软件开发语言,因此进一步扩大了Java语言的应用范围。但在实际应用过程中该语言仍存在一定的程序漏洞,这些漏洞会为软件开发公司和使用者带来较大的损害,因此有效避免Java语言漏洞就成为了其发展的重要方向。
1 Java语言的概述
1.1 Java语言的概念
Java语言是一种能够编写跨平台程序的设计语言,该编程语言的通用性和平台移植性较强,目前被广泛地应用在计算机程序、移动端程序、游戏控制、互联网程序等领域。最早的Java编程语言也被称为“Oak”,主要是为一种消费类电子产品而设计的,直到1995 年才正式被更名为Java,同时将该编程语言重新设计,主要应用在Internet程序的编写方面,因此也推动了Web的快速发展。Java语言一经出现就对传统的C语言形成了巨大的冲击,并且随着现代互联网技术的不断发展和深化,使得Java语言的应用前景更加广阔。通常根据其所应用的范围将Java语言分为三大类,分别是标准版(SE)、企业版(EE)和微型版(ME),目前已知应用Java语言的程序员已经超过了C语言使用者。同时Java语言具有允许编程者一次性完成的代码编写的优势,并且可以在多种运行环境下测试,编程人员还不需要根据操作系统的配置对代码进行更换,真正实现了跨平台应用。加之现代安卓系统对Java语言的广泛应用,使得该编程语言的应用率呈几何倍数增长,仅截止到2011 年就有超过30 亿台依靠Java语言编程软件运行的智能手机投放市场,而如今则更多。
1.2 Java语言的程序漏洞检测和诊断的意义
Java编程语言本身具有极其优秀的兼容特性,因此在PC机、服务器以及智能手机等领域的应用非常广泛。但同时也由于现代人对于计算机、手机以及互联网的广泛应用,使得用户对于Java程序的安全性和稳定性有了更高的要求,而编程者本身难以对Java语言自身存在的漏洞进行弥补,因此必须利用有效的漏洞检测和诊断技术进行纠错。同时需要注意的是,在使用计算机和手机时用户对于Java程序安全性的要求并不一致。首先,在使用移动端智能手机时,用户大多将个人信息存储在手机当中,因此用户虽然可以接受手机应用软件上的一些功能缺陷,但是却不能忽视手机程序本身存在的安全漏洞,所以近几年电子技术开发企业均在不断加强手机漏洞检测工作的力度,但目前仍有大量的恶意软件可以绕过检测工具对用户的移动终端造成损伤。有效提升Java语言程序漏洞检测和诊断技术已经成为了各大电子技术企业的发展趋势,也成为了现代电子产品用户的重要需求。
2 确定性重现技术对Java程序漏洞的检测和诊断
使软件程序的性能能够实现最大化的利用一直是软件开发者所追求的目标,而随着现代计算机和移动端多核技术广泛地应用,使得并发程序的需求量大大增加,使原本仅供大型并行计算机和大规模集群计算机所使用的多核并发程序得到了更加广阔的市场。但是高性能的并发程序编写却成为了现代编程人员最难的“考题”之一,其主要是因为并发程序在运行过程中会出现明显的不确定性,造成这种情况的原因在于程序运行过程中线程交替顺序具有波动性,无法满足编程人员的原有要求,使得运行结果无法实现,也就被称为“并发错误”。这种问题一般很难检测和诊断,其与不同的线性程序漏洞不同,不仅具有线性程序漏洞的特点,而且还会因线程交替顺序的变化而产生不同的运行结果。虽然实际操作过程中这一漏洞发生的概率较低,一旦出现就会导致严重的后果。
2.1 并发程序的检测和诊断
目前,一般采用的应用程序检测和诊断流程包括三个部分,其一是测试用例的设计和测试;其二是跟踪程序定位漏洞;其三是对漏洞的修补。其中跟踪程序并定位的测试过程是最消耗时间的,但是并发程序在运行过程中难以对错误进行重现,因此无法有效对漏洞进行跟踪和定位,而漏洞的修补工作主要取决于编程人员对于漏洞触发因素的判断,如果无法对漏洞进行定位,那么也就无法了解其触发因素,使得编程者不能对漏洞进行有效的修补。
而为了弥补这一问题,编程人员就需要利用一种能够重新并发程序漏洞的技术。在程序测试阶段,编程人员一般会在调试过程中添加日志信息,而当这些日志信息能够被用来重现错误程序时,就会被用作与漏洞的诊断工作中,编程人员可以反复对错误的程序进行运行,并根据采集信息的细化研究,最终确定出错的程序代码位置,并对其进行相应的修复工作。
2.2 确定性重现技术
确定性重现技术最初也是被应用在重现程序错误段的工作中,其主要方式在于将所有可能引发程序运行问题的不确定因素添加到日志信息中,并将其重现。而这种技术之所以能够帮助检测和诊断Java程序的漏洞,主要就是在于其能够将所有不确定因素进行列举,进而获得确定性的漏洞定位。通常情况下这种不确定的因素分为两大类,其一是程序输入的过程,例如文件读取、文件录入等,此时就可以通过日志信息对这些操作进行重现;其二是在系统被调用时产生的返回值,例如程序运行时系统对运行时间的获取和随机值的生成等,而此时所产生的返回值也被看做是程序输入当中重现的数据。但是在重现过程中部分由于硬件状态所导致的不确定因素很难被重现,例如指令时间之间的差异会导致程序运行的差异,因此在记录这种不确定因素时一般是对其逻辑时间进行记录,而不是物理时间,其可以有效地对这种非线性因素进行重现和执行,进而获得错误程序的定位。
2.3 基于依赖的重现
当两条程序指令同时对一个物理页面、缓存或内存地址进行访问的过程中,其即被视为对数据产生了依赖,这种依赖情况又被称为冲突和限制。该情况发生需要满足三大条件,其一是当两个指令的访问对象均在同一内存位置上时;其二是两个指令当中至少有一条指令为操作;其三是其中一个指令必然先于另外一条指令发生,而为了达到程序运行的效果,应该保证在第二条指令发生前,第一条指令就已经完全完成。确定性重现技术当中对于依赖数量的确定主要取决该程序所选择的粒度,例如在某一个确定性技术依据真实的地址对数据进行定位的依赖,那么该依赖则不被记录,虽然在记录依赖的过程中粒度并不会对重现技术的策略造成较大的影响,但是当粒度过小或过大情况下还是会导致程序运行性能的大幅度下降。
3 符号执行对Java程序漏洞检测和诊断
在对现代软件进行漏洞检测和诊断过程中,利用符号化执行技术的搜索优势能够有效提升工作效率。目前这一技术主要应用在软件测试用例生成过程、模糊测试过程、安全漏洞检测过程等各个方面,已知的符号化检测技术能够对跨站的脚本攻击、数值溢出、参数值窜改等进行检测。
3.1 符号化执行技术
符号化执行技术最早是在20 世纪70 年代所提出的,其主要是被应用在程序检测过程中,目前所应用的符号化执行技术本身主要是对不确定输入数据所引发的各种可能程序路径进行分析,这样能够有效缩小测试的搜索范围。符号化技术具体的操作方法就是将(Symbolic Input Value)输入到程序当中对具体的问题程序进行代替,同时将与输入有关的程序段表示为一个依赖符号输入的线性函数,这样就可以在各个程序运行遇到分支时产生相应的制约条件,对这些制约条件的运行途径进行搜索,就能够满足对程序状态的整体搜索和检测。
3.2 导向性符号化执行技术
为了有效解决现代安卓程序运行过程中存在的各种问题,应该将导向性符号化的执行利用静态研究方法进行提取,并将其应用在符号化执行的导向信息当中,而这类信息就能够对符号化执行技术起到指导作用,完成问题程序段的搜索工作。这一技术有效地将符号化的执行范围缩小,从而使漏洞检测和诊断的搜索时间大幅度缩减,还不会降低代码的覆盖率。在实际操作的过程中,导向性的符号化执行技术主要是依据于上下文的信息序列作为导向信息,从而指导符号化转型技术对输入的各数据进行搜索,其是利用大范围搜索函数调用图获得能够运行目标程序的必要触发事件,在这一步骤操作时一般所获得的触发事件仅为名称,但如果实际触发事件本身为图形界面属性,则不能单一由名称来进行指定,此时还应该在此基础上对相应的视图信息进行确定。需要注意的是,导向性符号执行技术当中所需要的时间序列本身必须满足Java程序的生命周期,但是利用函数调用图所获得的事件信息以离散型为主,无法确定其一定能够满足生命周期,因此可以对这一事件进行映射处理,尽量缩小符号化技术执行的搜索范围。另外还应该将相同的事件数据进行有效合并,避免在检测和诊断过程中重复触发同样的事件。
4 导向符号化执行信息泄露的检测和诊断
4.1 静态信息泄露的检测
信息泄露指的就是用户的个人私隐数据被发送到陌生用户端口,一般情况下该陌生用户端口均为系统不守信的接受者,并且具有信息截获和发送的操作过程。典型的信息泄露过程为:首先,程序从系统当中读取了用户的个人地理数据,并将该列表数据存储在内存当中。其次,内存中的地理数据信息借助Send To Network函数经由互联网发送到接受者用户端。总结起来就是先获取用户的个人信息,然后将信息在用户端内存当中进行传播,最终将信息送出。
因此,在对静态信息泄露问题进行检测时也可以分为三类,其中对于信息源和信息发送位置的检测可以利用标注系统的调用来进行确定,而对于信息传播路径的检测则应该从应用程序的逻辑性入手,检查在信息源和发送位置之间各种可能的发送途径,其主要利用的是程序依赖性的分析方法,即调查一个指令的发出是否依赖于其它指令的执行情况。
4.2 Leak Miner泄露检测技术
Leak Miner泄露检测技术主要是应用在移动终端(安卓系统)下的程序漏洞检测和诊断工作中,其能够检测所有可能的信息泄露途径。在函数调用图的基础上,该技术还可以采用程序切片模式对敏感信息在程序内的传播进行有效的跟踪,这种检测模式主要是为了提高敏感信息传播的分辨率,引入额外的伪传播源进行检测,这样能够保证整体敏感信息的切片在一个迭代当中完成。
结语
Java语言是现代软件程序编程过程中最常用的语言类型,使用该编程语言的编程人员数量已经超越了C语言使用者,但是该语言编程后具有的漏洞也是客观存在的,必须不断加强程序漏洞的检测和诊断技术,分别从确定性重建技术、符号执行、导向性符号化执行信息泄露的角度进行深入研究,保障用户的个人数据安全。
参考文献
[1]杨克峤.java程序优化与数据竞争检测的研究[D].复旦大学,2010.
[2]叶楚天.基于正则表达式的java Web程序漏洞检测技术研究[D].华中科技大学,2013.
8.Java程序员的堕落 篇八
关键词: Java; 面向对象; 程序设计课程; 教学方法
中图分类号:G642 文献标志码:A 文章编号:1006-8228(2013)01-37-03
Pondering over teaching of “java programming designing”
Lan Wenfei, Li Zimao
(School of Computer Science, South-central University of Nationalities, Wuhan, Hubei 430074, China)
Abstract: Java is becoming one of the most popular object-oriented programming languages in developing areas based on Internet and one of the core programming curriculums for universities. In this paper, some Java teaching problems are discussed, such as the choice of teaching materials, the choice of developing environment, filtering of teaching content, using of teaching method, design of the teaching cases. The feasible ideas for above are given.
Key words: Java; object-oriented; programming curriculum; teaching method
0 引言
在Java面世短短的十来年间,Java以其简单易学、安全可靠、面向对象、多线程及平台独立性等许多特点[1-3],被越来越多地推广和使用,它已成为Internet上最受欢迎的开发语言之一。
目前,许多高校已将“Java程序设计”列为程序设计的核心课程之一,肯定了它在培养计算机开发类人才中的地位和作用。
本人已连续多年担任高校计算机专业Java程序设计课程的主讲教师,针对Java教学中存在的问题,积累了一些教学经验,希望能与同仁共同探讨。
本文就Java语言的教学,包括教学时数的安排、教材的选择、开发环境的选取、教学内容的筛选、教学方法的运用、教学实例的选用等方面[4,5],给出了一些自己的做法,实践证明,这些方法是可行的。
1 教学准备环节
首先讨论Java程序设计课程教学的准备工作。
1.1 合理安排教学时数
我们授课的对象是软件工程实验班本科学生,该课程安排在大一第二学期,鉴于学生在大一第一学期已具备基本的计算机原理及专业基础知识,这样来安排教学计划是比较合理的。考虑到学生在大一已具备C/C++高级语言程序设计的基础,而多数学生在国内修完本科课程后会选择到国外继续深造学习,所以Java语言程序设计课程的教学设计必须考虑全方位,此外Java语言衍生自C++,它的基本语法同C语言,而其面向对象的基本特征同C++。鉴于此,我们将Java程序设计课程的上课时数设置为48个授课学时,18个实践学时,这样设置是比较合适的。
1.2 精选教材
选择合适的教材,是保证有效教学的重要手段之一[6]。合适的Java教材, 应具有较好的知识覆盖面,难度适中,适合学生的具体情况[4]。由于我们讲授的对象是实验班学生,需要使用全英文教学,此外,他们已具备一定的面向对象程序设计基础,所以诸如《Thinking in Java》、《Objects First with Java》、 《The Java Programming Language》等经典书籍都适合作为该课程的教材。
选择国外经典教材,能保证我们的教学内容与国外接轨[7]。学生在阅读英文原版教材的同时,可同时参考对应的中文翻译本,能使学生加强对所学知识的理解。
1.3 选择合适的实验环境
由于JDK(Java Development Kit)是命令行的编程环境,需要用编辑器建立Java源程序。如果选用Windows自带的记事本notepad来编辑程序,首先程序中若出现语法错误是很不容易被发现的;其次每次必须打开cmd窗口并输入一大堆命令,如编译命令、运行命令等;再就是对于applet小程序还要自编html文件,非常麻烦。但是,如果选用超智能、傻瓜型的集成开发环境,如JBuilder、NetBeans,因其耗内存,所以速度慢,慢到不能忍受;更重要的是不利于入门级的学生掌握Java的基本语法。因为Java上机实践的一个重要训练内容就是熟练使用Java编译器(java.exe)去检查语法错误,并能修改错误,这样做的目的是使学生能较快地掌握Java语法。
本文简要介绍一种既简单又方便入门者使用的Java编辑器TextPad。TextPad作为Java编辑器需要做简单配置,首先把TextPad装上(先装JDK),安装完毕就可按下面的方法配置:在菜单的Configure中选择Preference,选择Tools,点add下拉菜单,选择Java SDK commands。之后Tools中多了3项:Compile Java、Run Java Application、Run Java Applet。从这一点来看它确实比其他的Java编辑器更容易配置,如EditPlus。
按上述方法配置TextPad Java编辑器后,还可适当优化TextPad Java IDE环境,使它更适合编写、执行Java程序。优化环境方法在此省略,有兴趣的作者可参见文献[2]。
2 教学内容
根据多年的Java程序设计课程教学经验,我们认为讲授该课程的内容主要包括三个方面:一是Java语言基础;二是Java语言的新特性;三是在讲授上述内容时穿插介绍JDK类库的常用类。
Java语言基础包括:数据类型、表达式、基本语句、类和对象、继承和多态、异常处理机制、小程序、图形用户界面设计、输入/输出、多线程、网络编程和数据库编程。考虑到我们面授的学生已经掌握了C++面向对象程序设计基础内容,而且Java教学内容偏多、教学时数较少[8],因此对于衍生自C++的Java语言,它和C++类似的部分,包括数据类型和表达式、基本语句、类和对象、继承和多态及异常处理机制等,应讲授较少的学时数;而对于Java语言特有的部分,如小程序、图形用户界面设计、输入/输出、多线程、网络编程和数据库编程,则应讲授较多的学时数。由于篇幅有限,在此省去对每个章节学时数的具体编排。
1996年Sun公司发布了JDK1.0,在短短的十年时间里,JDK从1.0版本升级到6.0版本。特别值得一提的是2004年发布的JDK5.0版本,它在旧版本的基础上增加了一些非常有意义的新特性,比如,泛型编程、增强的for循环、自动装包/拆包、类型安全的枚举、可变参数和静态导入等,使用这些特性有助于我们编写更加清晰、精悍、安全的Java代码。为了与时俱进,让学生掌握较新的Java特性,我们认为很有必要在课堂上向学生传授新技术,以拓宽学生的知识面。
一方面为了节约有限的学时数,另一方面为了鼓励学生在课余积极使用、查阅JDK帮助文档,我们不安排专门的章节介绍JDK类库的使用,而是在讲授Java程序例子时,将重点介绍一些重要类的使用,比如,在讲授图形用户界面这一章时,则会讲授一些重要包的使用,包括java.awt、java.awt.event、java.applet、javax.swing等,概述这些包的类层次结构。这样做既节约了时间,也使学生通过对例子的学习较好地掌握了一些常用类的使用。特别需要说明的是,容器类很重要,这些类在程序设计中会普遍使用到。
总之,在教学内容的选择上,我们推崇简化的原则,忽略一些不常用的知识点,如带标号的跳转语句、复杂的表达式运算规则、嵌套类等,这样做既节约了课时,也能充分引导学生编写简单、可读性好的程序代码[4]。
3 教学方法
充分利用多媒体教学设施,为上课讲述的例子做编译、运行演示。对于学生编程时常常出现的错误,在编辑程序时可设置类似的错误障碍,让学生修改错误,以杜决今后再出现此类错误,此外还能现场教会学生如何使用JDK TextPad开发环境。到了学期的中后期,鉴于学生们已基本掌握Java的语法,上课可适当减少演示例子的次数。
对于Java基本类库的授课,根据多年的Java开发经历和教学实践,我们认为学生应该对基本类库有个整体了解,要重点掌握 Java类库中的Java.lang和Java.util两个包,特别是容器类的应用是难点,需要结合实际例子阐述。这两个包提供的是Java编程要用到的基本类,学生需要清楚这些类或接口的继承关系、主要功能[5]。我们在授课时适当介绍JDK API文档的使用和阅读,提倡使用最新版本的英文API文档;在教学中注意总结相关类的联系和区别,如String和StringBuffer在使用上的区别,以及FileInputStream和RandomAccessFile在用于读文件时的区别。
在实施Java教学时,应注意Java和C++的区别。Java和C++都是面向对象的语言,而且Java衍生自C++,在基本语法及面向对象特征方面均有很多相同之处。比如,我们在讲授Java的数据类型、常量、变量、表达式、语句、类和对象、继承和多态等内容时,应着重指出它和C++的区别,简略细节知识。这样既能节约课时,也能使学生快速掌握Java的基本语法和面向对象特征。
在学生掌握了Java的基本语法及面向对象特征的基础上,我们会考虑将重点放在图形用户界面、多线程、网络编程和数据库编程上,以使学生能进行一般的Java应用编程。
如果课堂教学时数比较宽裕,则可介绍Java和UML、Java和设计模式相关的知识,强调软件开发新技术,特别是对于软件工程专业的学生,更应该这么做。
4 教学实例
可将程序例子分为非算法型和算法型两种类型。在介绍Java基本语法时,我们提倡用非算法型的例程,利于学生对例子程序的阅读和理解。而在讲授计算机典型问题,如排序、查找、递归时,则使用算法型的例程,以加强学生对一些典型问题的掌握。
在选择例程时,以例程中是否含有JDK类作为筛选原则,目的在于能让学生掌握更多的JDK类。
此外,在期中阶段,可选择一两个游戏项目作为综合的例程,如用于Java学习的Robocode游戏实验项目。Robocode是IBM的一位工程师MatNelson用Java语言所创造的机器战斗仿真引擎,是一款专门为程序员设计的游戏半成品。利用该引擎,只要编写几行简单的代码,就可以创造出一个在屏幕上四处疾驰的机器人坦克,参加游戏对战[4]。这样能增强例子的实用性和趣味性,调动学生学习Java的积极性。在此基础上,再布置一个游戏项目,作为学生在课余时间的练兵题。
5 结束语
衍生于C++的Java语言,作为一种面世较晚的语言,它集中体现和充分利用了若干当代软件技术新成果,如面向对象、多线程、平台无关等[9],使其拥有众多优秀的特性,从而成为面向对象软件开发的首选语言。
出于“Java程序设计”这门课的重要性和教学中存在的问题,本文提出了“Java程序设计”教学实施的诸多方面,并在作者施教的班级进行了多次实践,实践表明,上述教学思路是可行的,能在一定程度上提高教学效果。
下一步我们将在“Java程序设计”实践教学和后续课程改革方面进行实践探讨。
作者多年从事Java教学和Java软件开发工作,积累了一些教学经验,本文将它提练总结,希望能给Java同仁一些启示。
参考文献:
[1] 秦学礼,汪迎,郑淑红.Java程序设计实用教程[M].清华大学出版社,2012.
[2] 刘正林等.Java技术基础(第2版)[M].华中科技大学出版社,2004:30-40
[3] 印旻.Java语言与面向对象程序设计(第二版)[M].清华大学出版社,2007.
[4] 叶恒舟.Java程序设计教学探讨[J].科技信息,2007.1:23-25
[5] 李纯玉,胡丽娜.Java语言程序设计教学中的几点思考[J].科技信息,2007.2:10-13
[6] 张延军,乔德军,温炎耿等.构建Java教学体系[J].邯郸学院学报,2007.17(9):41-44
[7] 蓝雯飞,郑波尽.高级语言程序设计课程建设思路[J].计算机教育,2012.6:30-32
[8] 陆萍.浅议Java程序设计教学改革[J].电脑知识与技术,2007.27:32-35
9.Java程序员的堕落 篇九
Java冠军程序员告诉你如何提升技术
忽略那些你并不是非常感兴趣的技术,因为不久之后它们就会 被取代。我举一个 Subversion 的例子。我过去使用它,因为我必须使用它,但我没有特别对待它,我并没有成为一个 Subversion 的专家。几年之后,git 出现了,只能对 Subversion 挥手拜拜。可悲的是,今年我有一个客户居然从 CVS 迁移到 Subversion!这可是 2015 年!
好了,让我们重返的主题——怎样成为冠军程序员?我认为以下几点是非常有帮助的:
1.强大的记忆力。当 我上八年级的时候,全因那位死气沉沉的历史老师,让我自己都相信我的记忆力太差了。然而,令我惊讶的是,历经多年程序员的工作,我惊奇地发现自己对之前看 过的 Java 源代码可以立即重现。在我阅读 JDK 里的一个方法(method)的时侯,我常常能说出该方法(method)相较先前版本有无改动。也许我并不能记清楚某个人的长相和名字,但是对于 Java 代码可以做到过目不忘——要是人的名字也是 for 循环就好了。所幸,缺乏好的记忆力也丝毫不影响我们成为冠军程序员,但拥有强大的记忆力依然是一个明显的优势。
2.数学能力。不是成为一个数学高手才能成为一个好的 Java 程序员,但数学能力显然会帮助你拥有成为优秀程序员的资质。今年一月份我有点空余时间,于是决定去试试欧拉谜题(Project Euler)。其中有一个谜题需要运行九个半小时去寻找解决方案。在它运行的过程中,我看了一下这个问题,然后发现其中数字间的一点关系,这可以用以优化解决方案。我再次运行,这次只花了 6 分钟。与此同时,我第一个算法仍然持续运行,尝试找到答案。我再次回到数字中去,发现了另外一种没有见过的模式,现在它只需要 6 秒钟就完成了。我也尝试过用聪明的编程技巧和并行去暴力优化代码,这可能让速度加快了一点点,但是依然没有办法使之少于6秒钟。
大约十年前,Sun 发布了 Java 冠军程序员(Java Champion)计划。这个点子是用来发现世界上最顶尖的 1000 个 Java 专家,他们在也积极的做事情来帮助 Java 提升。我们现在大概排名在第 160 名。Oracle 公司持续进行着这个计划,而且在过去的几年里,我们看到了这个认可制度的更多好处。这是一个自选的团体。新的冠军是被现存冠军推介并进行票选的。通常情况 下,在选定冠军之前,需要有十多个赞成,而一个反对就会否决提议。自荐的情况是会被考虑的,但是一般不会得到足够多的支持。
程序员朋友们经常问我是怎么成为 Java 冠军程序员的,“很简单”我说,“只要和我一样,发表 200 篇 Java 相关的文章;要么写个 Hibernate、Spring、Jacoco什么的;或者在 StackOverFlow 上回答数千个问题并出版一打好文章;或者组织欧洲最大的 Java 开发者大会。”
你需要做一些卓越的事情,这将花费时间和精力。没有人因为他们的个人魅力和颜值而成为 Java 冠军程序员,全靠辛苦工作才可以,这也许是为什么我们的名字后面没有脸部照片的原因;-)。甚至,不要为成为冠军程序员而成为冠军程序员。摒弃私心、等待其他人的赞扬,这将让你感觉更好。并不是每个冠军程序员都会被官方冠以“Oracle Java Champion(甲骨文Java冠军程序员)”的称号。
无论你选择了哪种方式,成为冠军程序员就意味着奉献。和朝九晚五式的上班是完全不一样,你不可能在上班时学到所有你需要的知识。而要成为冠军程序员,需要利用晚上和周末的时间学习,以保持与时俱进。最夸张的笑话是,程序员一到40岁就会进入淘汰期。也许他们在 Java 编程上做的还不错——除非他们通过阅读书籍、文章,或是参加开发者大会和具有挑战性的课程来刷新他们的知识——否则仅仅依靠
http://www.lampbrother.net 一纸文凭,终将变得毫无价值,这个行业将会把他们像用过的餐巾纸一样抛弃掉。千万不要变成这样的人!学习,学习,再学习!而最好的学习方式无疑是和你的同僚分享知识。
怎么样分享你的知识呢?如今,我们有很多方式可以选择:可以在 StackOverflow 或者其他类似的网站上回答问题;可以在午餐时间通过叫外卖来讨论技术问题——许多年前在我所在的一家公司里,我们就通过这样的方式过了一遍”Design Patterns”。这需要一点牺牲,你可能必须放弃午餐,花费某些晚上去准备你的会谈。然而,比起单纯地做一个信息的消费者,这能学到的东西要多得多。
“The Java™ Specialists’s Newsletter” 现在为130多个国家的 70000 多程序员所阅读,但开始起步的时候非常微小,我把它发给我的八十个朋友和家人(包括我哥哥,和我父母),我恳求他们转发给他们的朋友和同事。随着时间地推移,它慢慢地发展。我相信,如果你观察周围,你可以找到 80 个电子邮件地址,这就是它怎么起步的。万事开头小。它发展缓慢,但是成长很稳定。我知道当你看到 70000 这个数字,可能会被震慑,但是这仅仅是 Java 程序员很小的比例。
10.Java程序员的堕落 篇十
Java程序员的平均薪资水平是多少?
当你个人所学的专业并不能保证你能找到一份好工作,你就应该考虑自己的能力是否还需进一步提升。不管你学的是什么,在哪里学的,只要你的能力到了,你自然会有好工作。在高度信息化的今天,人才已经很难被埋没了,只要是金子在这个时代就会发光。
学厨师?学挖掘机?学制衣?这些都不能让我太满意。我希望当我说出我的职业的时候,别人是瞠目结舌并且还要投来佩服的目光。没错,我希望我是一名程序员,更要是一名Java程序员。
北大青鸟的教学确保学员能够真正掌握实用的IT专业技能,同时具备良好的职业素养和丰富的项目经验,充分满足企业的用人需求,最终通过学校优质的就业服务成功进入IT职场,实现高薪梦想!而学员们的优质就业,也将在成就个人梦想的同时,为社会主义互联网+相关行业的发展贡献一份力量。
对于北大青鸟教材更新的内容,全部都是目前企业和市场中所流行的新技术,并且在编写过程中会通过市场和企业的反馈而对热门技术进行重点编写。在编写更新升级后,依然进行严格的把控和测试,以保证教材的权威性和实用性。要想找工作不难,那么就要提升自己的硬实力,而北大青鸟就可以帮助你实现。详情请咨询
11.浅议Java程序设计教学改革 篇十一
关键词:过渡;项目;SIGTS
中图分类号:G434文献标识码:A 文章编号:1009-3044(2007)15-30868-01
The Tray Discussion on Java Programming Education Reform
LU Ping
(Suzhou Institute of Trade&CommerceInformation Department,Suzhou 215009,China)
Abstract: At present, many high schools' programming courses have made arrangement for Java teaching, but some questions may occur in the instruction process: the content is too much, the class is insufficient and the student's programming ability is weak and so on. Based on many years' Java teaching experience, the author advances a Java education reform scheme: using project to urge learning, giving first place to practices, making instruction subsidiary. The reform emphasis on Java instruction attention transited from the former courses, and proposes project instruction based on SIGTS. The practices prove that students' initiative and programming ability are both improved after the reform, which make it more adaptive to the corporation's needs.
Key words:transit;project; SIGTS
1 引言
在信息技术高速发展的21世纪,对于计算机专业程序设计课程的设置,各个高校都有所不同,但大多学校都选择了先开结构化程序设计语言课程,如C、Pascal语言;在这基础上再开设面向对象的程序设计语言,如C++、Java语言。进入网络时代后,Java语言跟网络紧密结合的特性使之大放异彩。因此,许多高校在程序设计课程上都把Java程序设计作为核心课程。在教学的过程中,很多带Java课的教师都会碰到一个问题:Java知识点太多、涉及面太广但课时量却相对较少。
如何较合理地进行Java教学,使得学生掌握更多知识、更全面地提高Java语言的程序设计能力,是每个Java课教师应该思考的问题。笔者所在的高校是高职高专性质的学校,对于高职高专学生而言,教学的重点是培养他们的实践动手能力,提高他们的职业技能,以使他们在工作岗位上能更快的适应。经过多年的Java教学,笔者大胆地提出一种“项目促学、实践为主、讲授为辅”的教学改革方案。
2 从C语言到Java语言的过渡
以往几届学习过Java程序设计的学生都反映在学校里掌握的Java编程能力,在实现一个完整的系统或到公司面试时都太显微薄,有心无力。这反映了Java课程教师并没有很好地将系统、项目的概念融入其中。
而对于强调技能的高职院校,需要学生比本科院校的学生更牢固地掌握实践、动手技能,而不是一个一个独立的知识点。这一现象提醒笔者,Java语言的教学不同于C语言教学,绝不仅仅是简单的按教科书顺序一个个知识点、一章章地讲授,应该以实践为主,切实提高学生的编程技能。
由于笔者所在院校的计算机专业都把C语言作为Java语言的前期课程,而C语言和Java语言是同一语系,很多语法、定义等都很类似。因此,在教学过程中,提倡学生自学Java语言基础、流程控制语句、数组等知识点。在此基础上,Java课程教师只需要设计一些程序实例,分别用Java语言和C语言实现,再对照两段程序,把其中的不同点一一说明,提醒学生应该注意的地方。这样的教学方式就能使学生更快、更好地掌握Java的基础部分知识。
Java的教学可以从面向对象的概念真正开始,采用类比法介绍面向对象编程中的专业词汇:对象、类、事件、封装、继承、多态等。这一章节的知识点应以教师讲授为主,辅以恰当的程序实例使学生掌握面向对象程序设计的编程模式。
3 基于SIGTS的项目教学
在Java课程设计书籍普天盖地的同时,如何选择其中合适的项目,让同学们参与其中,是基于SIGTS项目教学首先要考虑的问题。Java知识点侧重面各不相同,因此项目也可粗略地分为以下几类:
(1)基于图形、图像与多媒体的系统开发;
(2)基于JSP的网络应用;
(3)现在很流行的游戏开发等等。
同学们对不同类型系统开发的兴趣不同,教师应根据同学们的兴趣来选择适当类型的项目。另一方面,每个学生的学习水平、精神和意志也不同。教师在选择项目时,应选择一些难度适中,即可以让同学们不至于“望项目而却步”,又能在做完后,编程技能有很大提高的项目。
在调查学生兴趣、学习基础和编程能力的基础上,删选出若干个合适的项目,并向学生介绍每个项目的功能、技术要点、总体设计思想、系统模块结构图等。
介绍完项目之后,同学们根据自己的兴趣,选择某一项目,根据项目进行分组。在分组这一过程中,若出现项目人数相差太多,教师可以给予适当的调整,以确保每个项目的参与人数大体相当。在每个项目组中,教师还需根据学生学习能力、编程基础和协调能力的不同,指定一个学生为项目组长。项目组长再对本项目组的内部人员进行任务的分配、进度的制定,并需要负责主要技术问题的解决。项目组内人员需要相互协作,共同完成一个完整的系统。
在学生进行项目开发的过程中,必然会碰到许多问题。对于共性的问题,指导老师应该以讲授的方式给每个项目组成员解答。对于每个项目组内部的具体问题,鼓励学生利用网络资源,自己想办法解决。而对于其中确实有难度、学生不容易理解的问题,指导老师应该详细告知,给出一个较通俗易懂的解决方案。
系统功能基本实现后,指导老师根据项目组成员平时表现、系统实现的具体功能、代码复杂度、界面美观性等给每个学生打分。同时,指导老师可以进一步要求每个学生就自己所完成的设计和编写的代码撰写实验总结报告。
至此为止,学生在基于SIGTS,即Select(选择)、Introduction(介绍)、Group&Coorperation(分组协作)、Tutor(辅导)、Sum-up(总结)的五步项目教学法中逐步掌握了过硬的项目开发技能。
4 改革前后学生素质技能比较
笔者对最近二届学生进行了“项目促学、实践为主、讲授为辅”的教学改革实验。与前几届采用传统教学法授课的学生的所掌握的编程技能、知识点、学习积极性等方面都有很大的提高。具体的比较数据如下表所示:
表1 两种教学方法下数据比较表
从表1中可以看出,实现项目教学以来,由于项目涉及的是一个个具体的实际应用而不同于在传统教学中经常涉及的是用程序解一个数学问题,同学们的学习主动性明显提高;具体的应用问题,解决方法也不同,而不像在传统教学方中,通常由书本上或任课老师告诉学生应该怎样做,学生的创造性也不断提高。在项目驱动的教学中,每个实际生活中的对象都会映射到Java语言中具体的类,因此,同学们面向对象的概念也在项目实践中明显增强;在传统的教学中,由于教学很大部分时间都会介绍算法、从表中也可以看出虽然同学们在学习算法过程中,会涉及到较多的程序,但这些程序算法都是前续课程,如C语言中讲授过的知识。更重要的是企业看重的是学生掌握的具体的实践项目经验。
基于项目教学以来,虽然因减少授课时间,授课教师布置的小题目、小程序变少了很多,但是同学们能真正涉及到具体的项目,参与整个项目开发过程。自然而然地,这批同学在参加企业面试时,由于有具体的实践经验,参与甚至负责过若干个实际项目,技能都受到肯定,面试通过率也大大提高。这正是与高职学校的培养目标完全一致的。
5 总结
在Java 程序设计教学中,应注意和前续课程的联系,减少不必要的教学课时,在前续课程的基础上进行教学。基于SIGTS的项目教学,改进了传统教学中就题讲题、“只见树木,不见森林”的教学方式,大大提高了学生的积极性和主动性,锻炼了学生的实际项目开发经验,并且增强了学生的自学能力。
学生在项目开发的过程中,预先体验到了从事软件开发过程中的团队协作、独立解决问题等职业要求。本文提出的教学方法在Java程序设计教学中,已经取得了一定的成效。但是,在项目过程中也出现了项目成员任务分配不当等情况,还有待进一步改善。
参考文献:
[1]章国蓉.Java语言程序设计基础实训项目之我见[J].深圳信息职业技术学院学报,2005,3(4): 61-64.
[2]任侠.Java语言程序设计教学改革探讨[J].电脑知识与技术,2007,(1):1430-1431.
[3]孙伟.Java程序设计课程的教学改革与实践[J].计算机时代,2005,(11):84-86.
[4]葛彦强,汪向征.基于项目的Java程序设计教学改革初探讨[J].中国科技信息,2006,(24).
【Java程序员的堕落】推荐阅读:
Java程序员的平均薪资水平是多少?09-11
java程序员招聘12-06
JAVA程序员笔试例题08-13
JAVA程序员笔试题目08-14
java程序员求职简历09-03
JAVA程序员面试经验11-05
java程序员职业规划06-22
《JAVA程序员面试32问》12-08
java初始程序员笔试题12-20
java程序员求职个人简历01-04