java程序员的学习路线

2024-08-13

java程序员的学习路线(精选6篇)

篇1:java程序员的学习路线

第一阶段:Java核心部分

JavaSE

Java核心语法、Java核心API、面向对象程序设计、Java容器类(集合)、GUI 用户界面编程、I/O体系结构、多线程并发模型、网络编程、数据结构.掌握Java核心语法与面向对象思想,能熟练运用常用设计模式与编程技巧完成桌面应用或网络通信类程序的开发.140

Java5.0新特性

Autoboxing/unboxing(自动装包/拆包)、Enums(枚举)、Varargs(可变参数)、Static Implements(静态导入)、for each(增强)循环、Generic(泛型)程序设计、Annotation(注释)无侵入式程序设计等

掌握全新java设计思想, 把握未来java技术发展趋势.16

Java高级技术

Java反射(Reflect)与动态代理(Dynamic Proxy)

深入研究Java语言高级技术,设计更加灵活、扩展性更强的动态程序.Java开发IDE

各种Java常用开发工具(如:Eclipse、NetBean等)的使用

掌握Java开发IDE的使用与代码调试技巧

软件测试

黑盒、白盒测试.Java测试框架Junit.理解测试的重要性.学习使用Juni进行单元测试、参数化测试、测试套件的开发和测试运行器的使用...............第二阶段: 数据库编程

Oracle/SQL语言

以Oracle为平台,介绍Oracle数据库的安装、Oracle体系结构、物理组件、权限分配、数据管理、分析各种关系数据库设计的常见问题,深入讲解数据库设计范式.全面讲解各类SQL语句的使用和优化策略.深入学习Oracle数据库对象:index(索引)、view(视图)、sequence(序列)、tirgger(触发器)、comment(注释).理解Oracle数据库体系结构,掌握Oracle数据库基本操作,数据库设计,开发和管理知识,熟练掌握SQL和Oracle对象使用.PL/SQL

PL/SQL语法,作用.使用游标、存储过程、函数、触发器解决数据库性能问题.掌握PL/SQL的使用,能够使用存储过程开发高效的数据处理系统,解决数据库性能瓶颈并

实现数据优化.MySql

以MySql为平台,介绍MySql数据库的安装、权限分配、数据管理.数据库使用.掌握MySql数据库的使用.JDBC

使用Java操作数据库,包括:数据库连接、结果集处理、存储过程调用、元数据、大数据类型处理、事务管理,批更新,可滚动、可更新的结果集,SQL3.0新特性,连接池技术,数据库应用架构.熟练掌握Java数据库编程技巧,能使用高级API、DAO编程模式编写高性能的数据持久层应用....................第三阶段: Web应用

XML

XML的概念与作用、基本语法、验证、XML模式定义(DTD、Schema)、XML解析(SAX、DOM)、Jdom和Dom4j、xpath、XSL.掌握XML使用及XML文档的处理技术.使用XML进行信息配置、数据存储以及数据交换.Html

介绍Web原理.Web页面开发的基本过程,超文本标记语言(HTML)基本标签的使用,CSS 层叠式样式表

掌握HTML基本标签的使用,能利用CSS优化页面设计的方法

JavaScript

JavaScript 脚本语言基本语法,常用函数,JavaScript高级DOM编程及页面组件控制掌握基于对象的JavaScript程序设计,能通过W3C DOM模型完成动态页面脚本开发

Web容器之Tomcat

Tomcat的下载、安装、启动分析、体系结构、基本配置、应用程序部署、管理和性能调优.掌握使用Tomcat的使用.Java Web编程Servlets

HTTP协议详解,Servlet核心对象操作,Servlet生命周期,Session与Cookie的应用场景,过滤器与监听器.分层结构.全面掌握Servlet 2.5 API的使用,能够独立分析设计基于N层体系结构的Web 应用,熟练使用各种Java EE应用服务器

Java Web编程JSP

JSP介绍、创建、部署JSP程序,JSP的三个指令、六个动作和九个内置对象.JSP中异常处理,自定义标签,EL和JSTL

掌握JSP2.0规范技术,掌握JSP进行动态页面开发的专业技术,能结合Servlet完成B/S应用的设计与开发工作

...............第四阶段: 流行框架技术

J2EE容器之JBoss

JBoss的下载、安装、启动分析、体系结构、基本配置、应用程序部署、管理和性能调优.掌握使用JBoss的使用.Struts

MVC设计思想,Strust1的体系架构、控制器组件、视图组件、框架的扩展、国际化、验证框架、常用标签库等.理解MVC模式,掌握基于struts1的java EE解决方案

学习Struts1和WebWork结合而成的Struts2.包括:Struts2的无侵入设计,控制器组件、视图组件、动态方法调用、包、拦截器、annotaction的支持、国际化、验证框架、常用标签等.深入学习Struts2,完成从Struts1到Struts2的Java Web应用的升级.Hibernate

学习领域建模思想与O/R Mapping,各种对象关系映射、实体状态、继承关系、组件映射、查询缓存与二级缓存配置、事务锁机制与性能调优.能以领域建模思想完成持久化层的设计,使用Hibernate完成持久化层的开发工作.40

AJAX

全面讲解AJAX应用的设计与开发方式,内容包括: XMLHttpRequest对象操作、W3C DOM模型操作、jQuery与DWR快速开发Ajax.能通过AJAX开源框架实现Web 2.0应用中的异步通讯.掌握DWR的开发原理,并熟练使用DWR简化Ajax的开发

SVN/CVS及编程规范

掌握SVN/CVS的配置和使用;软件编程规范

SVN/CVS的配置和使用;软件编程规范

Spring

学习最新Spring2.0技术.包括:IOC、AOP,使用Spring的ORM支持完成DAO层的开发,事务层管理,Springde MVC框架,使用Spring与EJB3、Struts1(Struts2)、Hibernate等流行框架进行整合.通过Spring完成多层架构应用的设计与开发工作,掌握面向接口编程的重要性.通过Spring去简化企业开发.第五阶段: JavaEE企业应用

Linux

学习Linux的安装和基本操作,通过SSH2访问Linux,在Linux安装JDK,安装Web服务器、安装数据库服务器,安装和部署Java应用程序。

掌握Linux的基本操作,掌握在Linux发表基于Java的Web应用程序。

OOAD

学习面向对象的分析和设计

掌握面向对象的分析和设计。

Java设计模式

学习Java经典设计模式。包括单例模式、命令模式、工厂模式、拦截器模式等。学习经典的软件设计思想,能够写出易于维护和更容易扩展性的代码。

8J2EE容器之WebLogic

Weblogic的下载、安装、启动分析、体系结构(Domain、Cluster、Machine、Server、Administrative Server、Managed Server、Node Manager)、基本配置、应用程序部署、管理和性能调优.集群的概念和配置.掌握使用WebLogic的使用.JAVA EE/EJB

高级编程

创建基于JAVA EE5.0规范的EJB中间件学习将EJB融入分布式企业级应用程序的编程技术,学习Session Beans,Entity Beans,Message-Driven Beans,JTA/JTS,JAAS,JNDI,RMI等技术同时讲解最新EJB3.0技术规范。

掌握基于EJB3.0规范的企业应用架构编程接口及访问EJB技术实现,掌握开发和运行基于 JAVA EE 应用程序所遇到的常见问题,包括安全性,伸缩性和负载平衡管理等。

Web Services

了解Web Services技术,使用JAX-RPC和JAXWS开发Web Services项目,SOA系统的设计与开发,流行的XFire实现Web Services.能使用Web Service技术完成SOA系统的设计与开发和使用XFire完成企业应用.

篇2:java程序员的学习路线

编程语言Java,已经21岁了。从1995年诞生以来,就一直活跃于企业中,名企应用天猫,百度,知乎......都是Java语言编写,就连现在使用广泛的XMind也是Java编写的。Java应用的广泛已经到了“无处不用”的盛世,而且一直在语言排行榜榜首,从未被超越。废话不多说,今天主要是给大家讲讲怎样学习Java,给大家建议一条轻松精通Java的学习路线。有了相对标准的流程,那么你的学习效率一定会倍增。

下面以黑马程序员Java学院的学习路线为例,进行一次史无前例的剖析,细致的讲解零基础的人怎么学习Java。先看下Java在基础阶段的知识点路线图。

内容多吗?不要被吓到了,知识点剖析的比较细,所以看着比较多。不要害怕学不会,经过下面的详解,你就会明白这些知识点都是干嘛的了。

Java基础

入门阶段,主要是培养Java语言的编程思想。了解Java语言的语法,书写规范等,掌握Eclipse、MyEclipse等开发工具,编写Java代码的能力。学完这个阶段你应该可进行小型应用程序开发并且可以对数据库进行基本的增删改查管理。注意:此阶段知识点的学习,会有真实的项目进行驱动学习,让你轻松理解各知识点。

1.计算机基础知识

针对零基础学习的人,从对计算机操作等知识的了解,延伸到Java语言的发展与开发工具的使用上。主要是让你知道怎样执行计算机命令,认识Java这门语言,感受编程语言Java怎么开发程序。

1)计算机基础

让零基础学习的人先了解计算机相关知识,进而再去了解Java语言。

2)DOS常用命令

了解什么是DOS,并掌握DOS控制台的打开方式,同时熟悉常用的DOS命令,例如:盘符切换、进入指定目录、删除文件等,完成使用DOS命令对计算机进行操作和控制。

3)Java概述

了解Java语言的发展史、Java语言平台版本、Java语言的特点,以及JRE与JDK。JRE是Java的运行环境,JDK是Java开发工具包,它包含了Java的开发工具以及JRE。所以安装了JDK就不用再单独安装JRE了。

4)JDK环境安装配置

了解了什么是JDK,以及JDK的重要性,下一步我们就来学习如何安装和配置JDK环境。在安装JDK之前,我们首先需要下载JDK,针对不同的系统,我们需要下载不用版本的JDK。

5)环境变量配置

了解path、classpath环境变量,理解path变量和classpath变量的作用,并掌握path变量和classpath变量的配置方式。6)Java程序入门

当JDK、环境变量配置完毕,我们就可以开始 编写Java程序。编写Java程序可以使用如下几种工具:notepad(微软操作系统自带)、Editplus、Notepad++、Eclipse、MyEclipse。

2.编程基础

此模块学习是让你了解编程的具体流程,学习Java基础语法的格式等。具体要掌握不同数据类型的变量定义与使用,掌握不同运算符的运算规则,掌握流程控制语句的执行流程,编写方法的声明与调用,创建数组并访问数组元素等知识。

1)注释

在程序开发工程中,用于解释和说明程序的文字我们称之为注释,Java中的注释分为以下几种:单行注释、多行注释、文档注释。

2)关键字

了解Java关键字的含义及特点,掌握关键字使用的注意事项。

3)标识符

了解什么是标识符,标识符的组成规则,以及标识符使用时的注意事项。

4)常量与变量

理解常量与变量的含义,并掌握常量与变量的区别、变量的定义格式以及变量的赋值。5)数据类型

掌握Java语言的数据类型,如基本数据类型:byte、short、int、long、float、double、char、boolean,以及引用类型:类、接口、数组。

6)运算符

熟练掌握Java中的运算符:算术运算符、赋值运算符、比较运算符、逻辑运算符、位运算符、三目运算符。

7)流程控制语句

了解什么是流程控制语句,掌握以下流程控制语句:顺序结构、选择结构、循环结构,并能够通过流程控制语句实现特定的功能。

8)方法

掌握方法的定义及格式,并能正确的调用方法,理解方法的调用过程,同时清楚方法的注意事项;掌握方法重载及其特点。

9)数组

了解数组的概念,掌握数组的定义格式、静态初始化、动态初始化,并能够理解Java中数组的内存图解。熟练掌握数组的遍历、获取最值、数组元素逆序、数组元素查找、数组排序和二分查找,以及二维数组的定义格式及初始化。

3.面向对象 现实世界中,随处可见的一种事物就是对象,对象是事物存在的实体,如人类、书桌、计算机、高楼大厦等。人类解决问题的方式总是将复杂的事物简单化,于是就会思考这些对象都是由哪些部分组成的。通常都会将对象划分为两个部分,即动态部分与静态部分。静态部分,顾名思义就是不能动的部分,这个部分被称为“属性”,任何对象都会具备其自身属性,如一个人,它包括高矮、胖瘦、性别、年龄等属性。然而具有这些属性的人会执行哪些动作也是一个值得探讨的部分,这个人可以哭泣、微笑、说话、行走,这些是这个人具备的行为(动态部分),人类通过探讨对象的属性和观察对象的行为了解对象。

1)面向对象思想

了解面向过程编程思想,能够通过案例理解Java的面向对象编程思想,了解面向对象开发、设计、特征。

2)类与对象

了解什么是类,什么是对象,并理解类与对象之间的关系;熟练掌握类的定义、对象内存图等。

3)成员变量和局部变量

了解什么是成员变量,什么是局部变量,以及从他们在类中的位置、内存中的位置、生命周期、初始化值等方面掌握他们的区别。

4)匿名对象

了解什么是匿名对象,掌握匿名对象的两种使用情况。5)封装

清楚的了解什么是封装,并能够理解封装的优点与缺点,同时掌握封装的原则。

6)this关键字

掌握this关键字的含义与使用。

7)构造方法

了解什么是构造方法,构造方法的作用,以及与构造方法相关的注意事项。

8)继承

理解什么是继承,继承的好处以及java中继承的特点和注意事项,继承中成员变量的关系、构造方法的关系、成员方法的关系,方法重写与方法重载的区别。

9)多态

理解什么是多态,掌握多态案例及成员访问的特点,多态的优点和缺点,多态中的转型问题。

10)抽象类

了解什么是抽象类,抽象类的特点,抽象类成员的特点。

11)接口

了解什么是接口,接口的特点,接口成员的特点,类与类、类与接口的关系,以及抽象类与接口的区别。12)内部类

什么是内部类,内部类的访问特点,内部类的位置,什么是成员内部类、局部内部类、匿名内部类,以及匿名内部类在开发中的使用。

4.常用类

类库就是Java API(Application Programming Interface,应用程序接口),是系统提供的已实现的标准类的集合。在程序设计中,合理和充分利用类库提供的类和接口,不仅可以完成字符串处理、绘图、网络应用、数学计算等多方面的工作,而且可以大大提高编程效率,使程序简练、易懂。

学习内容:掌握Object类、Scanner类、String类、StringBuffer类、StringBuilder类、Arrays类、基本包装类、正则表达式、Math类、Random类、System类、Date类、DateFormate类、Calendar类,及其常用方法。

5.集合

集合类存放的都是对象的引用,而非对象本身,出于表达上的便利,我们称集合中的对象就是指集合中对象的引用。简单一点就是说,集合是存放数据的容器。

学习内容:什么是集合?数组与集合有什么区别,集合类的特点,掌握Collection接口、Iterator接口、List接口、ListIterator接口、ArrayList类、Vector类、LinkedList类、泛型、Set接口、HashSet类、Map接口、HashMap类、LinkedHashMap类等。

6.IO IO(Input/Output)是计算机输出/输出的接口。Java的核心库java.io提供了全面的IO接口,包括:文件读写,标准设备输出等等。Java中IO是以流为基础进行输入输出的,所有数据被串行化写入输出流,或者从输入流读入。

1)异常

了解什么是异常,异常的由来,常见的异常,异常的分类,掌握jvm对异常的默认处理方案,异常的处理方案:try…catch…finally、throws,什么是编译时异常,什么是运行时异常,掌握它们两的区别,throws关键字、throw关键字,以及这两个关键字的区别,熟练掌握自定义异常,异常注意事项。

2)File类

了解什么是File类,File类的用途,掌握File类的方法:createNewFile()、mkdir()、mkdirs()、delete()、renameTo(File dest)、isDirectory()、isFile()、exists()、等方法,以及File类的基本获取功能方法和高级获取功能方法。

3)IO流

了解什么是IO流,IO流的用途;熟练掌握输入流、输出流、字符流、字节流、IO流的常用基类;如何使用字节流读写数据、复制数据;什么是字节缓冲流,如何使用字节缓冲流读写数据;什么是转换流,如何使用转换流更加高效的读写数据,内存操作流、打印流、标准输入输出流、序列化流、Properties集合。

4)IO流练习

(1)复制文本文件;(2)复制图片;(3)把ArrayList集合中的字符串数据存储到文本文件;

(4)从文本文件中读取数据(每一行为一个字符串数据)到集合中,并遍历集合;(5)复制单极文件夹;

(6)复制单极文件夹中指定文件并修改文件名称;(7)复制多极文件夹;

(8)已知s.txt文件中有这样的一个字符串:“hcexfgijkamdnoqrzstuvwybpl”;(9)请编写程序读取数据内容,把数据排序后写入ss.txt中;(10)获取每次读取数据的行号;(11)登录注册IO版。

7.多线程

是指从软件或者硬件上实现多个线程并发执行的技术。具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程,进而提升整体处理性能。具有这种能力的系统包括对称多处理机、多核心处理器以及芯片级多处理(Chip-level multithreading)或同时多线程(Simultaneous multithreading)处理器。在一个程序中,这些独立运行的程序片段叫作“线程”(Thread),利用它编程的概念就叫作“多线程处理(Multithreading)”。具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程(台湾译作“执行绪”),进而提升整体处理性能。

1)多线程

了解什么是线程,什么是多线程,理解java程序的运行原理,掌握多线程的实现方案,如何获取和设置线程名称、线程的生命周期、如何解决线程安全问题、线程同步、Lock锁、死锁问题、线程间通信、线程的状态及状态转换、线程池。

2)多线程面试题

(1)多线程有几种实现方案,分别是哪几种?(2)同步有几种方式,分别是什么?(3)启动一个线程是run()还是start()?它们的区别?(4)sleep()和wait()方法的区别;

(5)为什么wait(),notify(),notifyAll()等方法都定义在Object类中;(6)线程的生命周期图。

3)设计模式

了解什么是设计模式,设计模式的分类,熟练掌握单例设计模式(懒汉式、饿汉式)。

8.网络编程

网络编程最主要的工作就是在发送端把信息通过规定好的协议进行组装包,在接收端按照规定好的协议把包进行解析,从而提取出对应的信息,达到通信的目的。

9.反射

JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。

10.Mysql及JDBC开发 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品。MySQL 最流行的关系型数据库管理系统,在 WEB 应用方面MySQL是最好的 RDBMS(Relational Database Management System,关系数据库管理系统)应用软件之一。

JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC执行SQL语句操作数据库。

1)Mysql数据库

数据库使用、mysql的安装与卸载、mysql账号管理,SQL语句介绍、数据库增删改操作DDL语句使用、表增删改操作DML语句使用、表查询操作DQL语句使用、以及查询语句条件、排序、聚合、分组操作。

2)JDBC开发

JDBC介绍、驱动的原理及使用、JDBC核心使用、DriverManager、Connection、Statement、ResultSet详细使用,JDBC的CURD操作、防止SQL注入及PrepareStatement使用、大数据处理、批处理。

3)DBUtils开发

连接池介绍、DBCP连接池使用。DBUtils介绍、DbUtils类的使用、QueryRunner类的使用、ResultSetHandler详解。

成为一名Java开发工程师,上面的内容是首要必学的知识点。认真的讲,基础知识学好了,后面的知识点学习会非常容易,都是在基础上或添加或者变化的。想要更全面的了解Java,欢迎你咨询黑马程序员官网,黑马程序员十年Java教学,坚守“为莘莘学子改变命运而讲课”这份情怀,不忘初心。最后一张图看看黑马程序员Java学员各阶段市场价值!

篇3:java程序员的学习路线

1 学习共同体的内涵

1995 年在《基础学校: 学习的共同体》报告中,美国著名学者博耶首次使用学习共同体概念。他认为有效的学习共同体必须是有共同的愿景,能够彼此交流,人人平等,有规则和纪律约束,相互关心照顾,气氛是快乐的[1]。课堂学习共同体就是以构建学习共同体的形式来完成课堂教学。它是一种特殊的、精心构建的学习环境,是由助学者( 教师) 和学习者( 教师和学生) 基于共同的目标组织而成。学习共同体强调的是共同的愿景、互助协作、规范性和共同成长。

1. 1 共同愿景

共同愿景描述了组织未来的可能性,组织成员相信它是可实现的,并愿为之付出努力[2]。学习共同体的一个最主要、最基本的功能就是设定一个共同学习目标,也就是共同愿景,将存在差异的个体团结起来共同学习、成长。将离散的学习状态聚集在一起,碰撞出无限的创造力和学习动力。这个共同的愿景要清晰、明了,在学习者通过努力能实现的范畴。围绕这个共同的目标,学习者依托所在学习小组,自主组织学习行为,总结学习成果。

1. 2 互动、协作

在学习共同体中,教学过程涉及的元素包括助学者、学习者和教学内容。各个要素之间的互动包括助学者与学习者互动、学习者之间的互动以及助学者、学习者与教学内容的互动。在学习共同体中实现的是平等、合作、交流。学习者在分工、协作、分享和交流中,有对知识分散的、零碎的理解整理成为整体的、完整的、深层次的掌握和吸收。每个人分享自己学习所得,同时又在吸收其他成员提供的知识,从而丰富所学,在交流、探讨中得以提高; 在互动、协作中学会学习,培养自主学习、终身学习的习惯。

1. 3 规范和评价标准

“如果没有一个拉力把人们拉向真正想要实现的目标,维持现状的力量将牢不可破! ”怎样才能使学习者从懒散的学习状态转换为为了共同目标积极进取,需要相应的规章制度来保障和引导。科学合理的评价标准能够引导学习者树立积极、正向的学习态度,选取合适的、被大家认同的学习方法和表述方式来更好地投入到学习中。

1. 4 共同成长

在学习共同体中,实现的是助学者和学习者的共同成长和进步。学习者在共同愿景下,与其他成员自主组织学习活动,分工协作,并且定期进行角色互换。在不同的身份构建中获得不同的学习体验。交往的开放性使得每个成员最大限度地参与到学习活动中来,使自己的零散知识在与其他成员的交汇和碰撞中形成体系。助学者由单纯的知识传播者转变为学习共同体中平等的参与者,更多的不再讲解,而是倾听、探讨和总结。在与学生的互动中,会出现很多意想不到的问题,与各种不同的视角揉合,不断完善和丰满课程建设。

2 Java程序设计在教学中存在的问题

传统的计算机语言教学将课程分为两部分内容:课堂讲解和上机实验。课堂讲解以教师讲解为主,在实验课上,学生按照教师布置的任务,敲代码、编译运行程序。在这种教学模式中,主要存在以下几方面问题。

2. 1 课堂中的“单边”行动

在传统的课堂教学中,教师讲,学生听,偶尔会有提问,就算是实现师生互动了。在整个授课过程中,教师倾其所有,讲得“口若悬河”,自认为学生也具有同样的饱满情绪来接受传递出来的信息。实际上学生懵懵懂懂,即使是有所理解,也很难与应用结合。课堂上师生互动越来越少,计算机程序解决问题的过程被幻灯片一带而过,学生体会不到,自然也就无法消化吸收。问题积累到无从下手。当事情变得“高不可攀”时,有谁还会努力呢?

2. 2 枯燥地学习,毫无兴趣

学生为了学习而学习,为了学分而学习,为了期末考试而学习。在脱离了生活的应试教材、教育中,学生在学习中感受不到生活,感受不到应用,感受不到快乐。学习与生活相脱离,失去了现实价值,成为了无源之水,无本之木。因此,不接地气的计算机语言学习,在学生眼中没有乐趣,自然也就失去了兴趣,也就是失去了学习的原动力,那么学习效果就可想而知了。

2. 3 缺少协作和交流

大学生独立性增强,学习时间安排和个人学习的侧重点具有明显的差异性。因此,学生间的学习交流很少,基本上都是孤军奋战,缺少协作。这就极大地增加了对课程的感知难度,知难而退成了很多学生的选择。因此,课程学习效果不理想。

2. 4 考核方式单一,轻过程,重结果

教师为了加强学生平时学习成绩的考核,通常将课程的最终成绩分为两部分,即平时成绩和期末考试成绩,并且平时成绩的比重也在不断攀升。过程化管理在这种考核方式中有所体现,但是还存在很多不足。它注重考核学生掌握单个知识点的水平,而不是分析问题、解决问题的能力考核,“重应试,轻能力”。学生往往像应付其他非实践类课程一样,平时抄作业,期末冲刺,期末过关就是终极目标。很显然,这种学习方式并没有真正从根本上实现教学目的。学地肤浅,考试完迅速忘记,学习没有延续性等,这种弊端会延续到后面的相关课程,使学生在整个专业课的学习过程中都处于疲于应试的状态。

3 Java程序设计课程学习共同体的构建

Java程序设计是实践类课程。“我听到的会忘掉,我看到的能记住,我做过的才真正明白[3]。”在计算机语言类课程中只有学生亲身体验才能从真正意义上掌握编写代码、调试程序、编译运行,学生在不断地修正错误中得到真正成长。我国《国家中长期教育改革和发展规划纲要( 2010—2020 年) 》中指出: 要以学生为主体,以教师为主导,充分发挥学生的主动性,把促进学生健康成长作为学校一切工作的出发点和落脚点。构建学习共同体的教学理念恰恰迎合了我国教育发展的这些要求。在Java程序设计课程中构建学习共同体可以分为相互承接的五个阶段。

第一阶段,自主学习环境的搭建。助学者凭借已有的知识结构和对课程的把握,通过划分学习小组、教学目标分解、学业评价体系构建和微视频建设、课程网站建设等阶段来构造自主学习环境。在基于学习共同体的教学模式中,实现的是探索、自主和协作的学习。学生必须事先通过组建学习小组,自主学习教学内容,然后通过一定的形式在课堂中进行汇报和讨论,从而保证有效的课堂教学。这要求助学者依据教学目标,合理划分教学内容,明确每一部分的学习任务,为学习共同体构建共同的愿景和学习目标。学习目标是一定的,但是最后的表现形式却可以是多样的,可以是PPT讲解,也可以是详尽的总结报告,还可以是一段精彩有趣的案例演示。助学者制订一套完整的、有针对性的评价标准用于学生的学业评价。对于课程的难点和重点,通过设计有趣、有针对性的案例,录制微视频来展示知识点的运用。这样学生随时随地有选择地观看教学微视频,突破了空间和时间的限制。例如Java环境的安装与配置,对于教师来说,这个知识点可能讲起来比较容易; 但是对于学生来说,很多概念和操作都是全新的,课堂上教师的演示与讲解,很难全部接收和消化。这样在微视频中进行详尽的操作演示和原理讲解,学生可随时自主学习。

第二阶段,教师引导,布置任务。该阶段教师的主要任务是按照事先设定好的任务目标,进行一定的引导之后,设定为学习共同体的共同愿景布置给学习者。共同愿景是学习者共同努力的目标,这个目标既要具体、难易适度,又要注重激发和保持学生的学习兴趣。以第一章为例,因为缺乏实际的软件开发经验和不同方法程序设计的体验,面向过程和面向对象地区别这个知识点,学生单凭教师讲解是无法理解的。在教学目标中可以设定这样一个共同愿景: 理解并结合实例说明面向过程程序设计和面向对象程序设计的区别。助学者给定一个教学案例: 汽车的设计,包括汽车的静态属性( 品牌、型号、颜色等等) 和动态的事件( 发动、加速、减速) 。学生在完成这样一个具体的、很强操作性的、聚焦很好的任务的同时,就将基本概念和基本方法掌握了。当然在设定和分解教学任务时,最好将相应的、贴近生活的案例设计好一并给学生。这样可以减少学生盲目探索的时间,而将主要精力用到问题的解决上。

第三阶段,小组协作,自主完成。学习小组的划分以学生自主结合为主,3 ~ 5 人为一个单位。这个阶段需要师生、生生之间的合作,以学生为主,教师为辅,教学不再局限于课堂[4]。大家通过查找案例、课本、网络资源,在小组成员间进行分工,形成设计方案和实施方案; 小组成员间进行角色分配并定期轮换;最后对知识进行归纳和总结。

第四阶段,学生课堂演示、讲解。教师按照事先设定好的顺序或者随机点名的方法,指定学习小组在课堂展示学习成果。一般是通过PPT讲解或者程序演示的方法来完成。一个学习小组讲解完成之后,其他小组可以对该小组的讲解进行纠正、完善或者提出新的方法、方案。在这个过程中,助学者也只是一名普通的倾听者、参与人。在整个课堂教学活动中,以学生为主体,以学生的活动为驱动,发挥学生的主观能动性来解决问题、完善方案。

第五阶段,多元评价。学习共同体学习效果的考核主要分为组间评价和小组内部评价两部分。组间评价的评价准则和方法由助学者,也就是教师来制订,经过全体学习者讨论通过。小组间成绩的分配方案则由各个小组成员讨论制订。每次学习共同体学习效果的评价由三部分组成: 助学者对小组的评价、小组内部的评价和其他小组对该组的评价。这三部分按照一定的比例进行计算,最后得到一个综合成绩。这样的考核方式既包含了对学生知识能力的评价,也包含了对学生间协作、对团队贡献的评价,有利于提高学生的合作精神和对团队的责任感、荣誉感。就助学者而言,通过观察学生在学习共同个体中的展示和表现,对学生有了更加透彻的了解; 在教学互动、探讨过程中,与学生进行平等、自由的交流和探讨,加深了师生关系。而良好的师生关系是激发学生主动学习的重要因素,在这样一个良性循环中,实现了师生共同成长。

摘要:笔者在分析学习共同体课堂教学模式内涵的基础上,详细地揭示在传统教学模式Java程序设计课程中存在的“单边学习”、学生学习兴趣不高、学生间缺少协作和交流以及考核过程单一等问题,提出了在Java课程设计中构建学习共同体的步骤和方法,即搭建租住学习环境,教师引导和布置任务,小组协作和自主完成,学生课堂演示和讲解,多元评价五个阶段。

关键词:学习共同体,Java程序设计,课程,共同成长,协作,应用

参考文献

[1]BOYER E L.The basic school:a community for leaming[M].New Jersey:The camegie foundation for the advancement of teaching,1995.

[2]牛继舜.论共同愿景的构成要素与作用[J].现代管理科学,2005(6):55-56.

[3]张媛媛.基于学习共同体的“数据库与程序设计”课程教学改革[J].教育与职业,2014(05):144-145.

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

软件的生命性

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

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

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

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

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

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

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

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

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

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

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

Hibernate等ORM问题

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

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

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

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

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

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

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

Spring分层矛盾问题

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

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

领域驱动设计DDD

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

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

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

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

篇5:JAVA学习路线

但有一些一般的步骤:

1.熟悉一种文本编辑器,比如vim, eclipse, notepad++, textmate等。知道哪些是开源的,哪些是闭源的,哪些要收费。养成不用盗版软件的习惯。

2.安装JDK(建议用你的Linux发行版自带的软件包管理器安装openjdk,过程中可能需要读发行版特定的文档)

3.写一个Java的Hello world程序,并用命令行工具javac编译,再用java命令运行这个程序。过程中熟悉源代码、字节码、虚拟机这些东西,以及Java的包(package)对.class文件所在的路径的影响。

3.5.如果这两个命令行工具使用熟练了,可以开始选一个喜欢的集成开发环境,比如Eclipse。当然,养成不用盗版软件的习惯。熟悉一下如何建立“工程”,以及快捷键的使用。

4.学习Java的面向过程编程,包括基本数据结构、表达式、语句、控制流、函数调用。

5.学习Java的面向对象编程,包括类、引用类型和值类型的区别、成员、方法、访问控制、继承、多态、接口、接口实现。顺便学习一下面向对象的基本思想,即对象、消息、封装、继承、多态等,这些通用的内容不是Java特有的。

5.5 这时候应该已经涉及了Java的垃圾回收。要留意即使有垃圾回收的情况下也会发生的内存泄露(如自己设计数组容器,元素是引用,逻辑上删除了元素,但并没有清成null)。

6.学习Java的异常处理,但更重要的是学习什么时候用特殊返回值而不使用异常,什么时候应该抛出异常而不处理异常,知道什么是pokemon catch及其危害,了解为什么Java的checked exception是一个糟糕的特性。如果愿意,同时学习一下Java1.7的try-with-resource语句和AutoCloseable接口。

7.熟悉Java常用的数据结构,如基本的数组类型,以及泛型容器(java.util.*),尤其是java.util.List接口和java.util.ArrayList实现;以及java.util.Map接口和java.util.HashMap实现。(java1.5以前的没有泛型参数的就不用碰了)同时留意一下基本类型int, double等和装箱类型Integer和Double的区别,以及它们是如何自动转换的。

8.熟悉Java标准库里的各种工具,包括日期时间、字符串格式化、IO等。知道文件要自己在finally子句中close(),或者用Java1.7的try-with-resource,不要妄想垃圾回收器会帮你关掉文件。

9.学习一下Java的命名习惯,以及JavaBeans的常规,知道为什么getter/setter比直接操作成员变量好。按这种方式给Java的变量、方法命名。同时看看你的IDE能不能自动帮你生成getter和setter。

10.使用一个第三方的库(比如Apache Commons Lang通用工具库),让你的程序依赖于它的二进制jar包(而不是直接拷贝源代码),用命令行编译、运行(注意classpath等);也熟悉一下如何用你的集成开发环境添加第三方依赖。感受一下手动管理依赖关系的麻烦。

11.学习Maven的使用,试着让Maven帮你解决依赖关系,再试着让Maven帮你创建一个Eclipse工程。再试试用Maven打包发布。

12.学习软件测试,以及JUnit的使用,以及怎么在IDE中使用JUnit。有空看一下coverage工具。

13.读读四人帮写的《设计模式》(这本书是用C++和Smalltalk语言为例子的,但仍然适合Java)。具体的是这本书,http:///Design-Patterns-Elements-Reusable-Object-Oriented/dp/0201633612 图书馆应该能还借到英文原版,因为我借到过。

接下来就看具体要做哪方面的应用了,看需求。比如(下面的没有顺序)

【....】如果学Java学得不舒服了,学Python。

* 如果对面向对象编程的概念有点不习惯,学Smalltalk。(Ruby也行,但不如Smalltalk经典。Ruby的文档是一大硬伤。)

* 如果嫌Java太啰嗦,学Python

* 如果嫌Java太啰嗦,又想用JVM,自己又有精力,学Scala

* 如果对对象之间的关系有点晕,学一学UML,以及它的一些图,可以对程序和运行进行直观的建模。你的IDE也许有插件可以生成UML图。但是不要太沉迷于这些方法论。

【调试和辅助工具】学习一下你的集成开发环境提供的调试工具,加一些断点试试

* 试试用jconsole或者VisualVM监控另一个jvm的状态。

* 用profiling工具寻找程序中慢的地方。Eclipse有profiling工具。VisualVM也有这样的功能。(如果不介意使用闭源软件的话,也试试JProfiler和YourKit)

* 有的JVM允许在运行时更新代码。Eclipse可以和某些JVM集成。这样你可以频繁修改代码而不用频繁重启JVM。对于某些“重型”工程很有用。(如果不介意使用闭源软件的话,也试试jRebel)

【多线程】学习Java的多线程编程以及lock、condition的用法(包括传统Java的synchronized语句以及新加的java.util.concurrent.*),学习一下如何让线程停下来,以及为什么要频繁确认isInterrupted()而不要用Thread.stop()。了解一下多核处理器、缓存、内存的关系,以及为什么多线程编程这么难。

* 如果还舒服,学习一下Runnable的用法,以及自带的Executer等基本多线程工具。* 应该已经留意到java.util里面的很多容器不是线程安全的,但是java.util.Collections可以帮你创建一些安全的版本。另外关注一下java.util.concurrent里面有ConcurrentMap等容器可供使用。

* 如果有空的话,看看memory model(内存一致性模型)和无锁同步(见java memory model和java.util.concurrent.atomic)。

* 如果还有空,再了解一下除了“共享内存多线程编程”以外有没有别的模型(多进程multi-processing、消息传递message passing等)。

【反射、元编程】学习Java的反射机制,以及Annotation的用法。

* 如果还舒服,试试java.lang.reflect.Proxy的用法。

* 如果仍然还舒服,玩一玩CGLib(一个第三方的库)。

【网络编程】学习一下IP, TCP协议(计算机专业的应该学过,复习一下),学习Socket编程(注意垃圾回收器不会帮你关掉Socket)。

1.如果不是很关心HTTP,看看java.nio,学习单线程轮询式IO复用(Selector)。

* 如果有点不明白nio的意图的话,了解一下c10k问题。

* 如果身体没有异样的话,大概了解一下操作系统(包括C语言)提供的select, poll, epoll, kqueue等接口。

* 如果身体仍然没有异样的话,试着用java.nio写一个文件服务器。

* 如果还有精力的话,上网扒一扒有没有其他的通信库,如netty等。

2.如果关心Web还有HTTP,就学习一下HTTP协议,以及用Java进行HTTP的客户端编程。

* 如果还舒服,学学HTML,写写HTML的静态网页(不需要Java)

* 如果还舒服,用Java写一个基于DOM、XPath或者CSS Selector的网页解析器(爬网页)。

* 如果还舒服,学学Java的Servlet接口(先别学jsp)进行Web服务器端编程。学学标准的Servlet容器怎么用,包括web.xml的用法以及listener、filter等概念。以及某个Servlet容器(如Jetty或者Tomcat)的具体用法。

* 如果仍然还舒服,试着学一种模板语言(如haml, velocity, freemarker,【还有其他更好的框架吗?我不知道】, String.format,如果真的想学JSP的话JSP倒是也行,但不推荐)。* 如果仍然觉得舒服,学学Spring框架中的Web框架,或者Struts,看你的口味。* 如果还舒服,看看Spring Bean Container以及里面各种乱七八糟的工具。

* 如果还舒服,或者有需求,了解一下什么是RESTful Web Service,复习一下HTTP,找找适合的Java工具。

* 你可能会觉得Jackson是一个解析JSON用的好用的东西。

【数据库】学习一下关系数据库(计算机专业的应该学过,复习一下),包括SQL。选一个数据库管理系统熟悉一下(比如MariaDB,或者(如果你不讨厌Oracle的话)用被Oracle收购了的MySQL。先脱离Java单独学学)。然后看它们的官方文档教你怎么用Java连接这种数据库。这中间会涉及到JDBC接口。同时一定要知道SQL注入安全漏洞,以及掌握如何用PreparedStatement防止注入!。建议看 http://bobby-tables.com/

* 可能中间会涉及“事务”问题,让你不知不觉地开始去了解java transaction api(JTA)。* 如果还舒服,学一学对象关系转换(如Hibernate)。

* 也可以学学非关系数据库,以及如何用Java访问它们。

【日志记录】学习一下slf4j和logback的用法。

* 如果有精力的话,以及大概知道世界上有多少种Java日志框架,以及slf4j是怎么桥接这些框架的。

【构建(build)系统】学习一下Ant的用法。

* 如果还舒服的话,学习一下用Ivy从Maven的仓库里下载软件包,解决依赖关系。

【版本控制】学习一种分布式版本控制器(如Git、Mercurial、Bzr、Darcs等,推荐Git)的基本用法,以及如何用它管理Java工程。希望你已经开始使用Maven了。然后了解一下如何在IDE中使用(Eclipse自带Git插件)。

* 如果感觉很舒服的话,为你们实验室搭建一个Linux+SSH+Git服务器,装个GitLab(一种Web界面)。并说服同事们不要再用SVN、CVS或者SourceSafe等老旧的“集中式版本控制器”了。

* 开设一个GitHub账户。如果你不喜欢Git,就用BitBucket等。

【持续集成】自己(或者为你们实验室)搭建一个持续集成(Continuous Integration)服务器,定期编译你的程序。

【零碎工具】淘一淘java.nio.files里面有什么好用的东东,然后再淘一淘Apache Commons Lang和Commons IO里有什么好用的工具。Commons Logging就不要再用了,用SLF4j和Logback。

【XML】学学XML、DOM、XPath。XML这东西到处都可能用到。也可以用它写自己的配置文件。

* 如果觉得不舒服了,就学学JSON和YAML。

* 如果还是不舒服,就学学文本文件解析。

【语法分析和编译器】学学Antlr或者别的Parser Generator的用法

* 如果觉得舒服,自己写一个计算器。

* 如果还觉得舒服,自己写一种Domain-Specific Language(DSL)。

【高效容器】学学FastUtil或者Trove,如果你需要进行大量数值运算的话。

【分布式计算】学学MapReduce的思想以及它的实现。

* 如果还舒服,学学Scala语言以及号称比MapReduce快得多的Apache Spark。

【进程间通信】看看ActiveMQ、MINA和RMI。

【其他语言(JVM)】学习另一门跑在JVM上的语言或者实现(如Groovy、Scala、Clojure、JRuby、Jython、JavaScript……)

* 如果还舒服,学一学Java Scripting API(注意不是JavaScript。给个链接: http://docs.oracle.com/javase/6/docs/technotes/guides/scripting/programmer_guide/),然后试着在自己的Java程序里嵌入脚本。

【其他语言(非JVM)】学习另一门通用脚本语言(如Python、Ruby,其实perl也行,但不推荐),知道什么时候Java不是最好的选择。

【Java语言和Java虚拟机】通读一遍(一目十行地读,不用细读)Java Language Specification,以及Java Virtual Machine Specification。

* 了解以下解释器(interpreter)、编译器(compiler)、即时编译器(just-in-time compiler)和优化器(optimiser)的概念。

* 如果对编译器的话题不感到畏惧,了解一下method JIT和tracing JIT的概念和区别。

【内存管理】学学垃圾回收的几种基本算法,包括mark-sweep、mark-compact、semi-space、generational、mark-region等,各自的性能,以及为什么朴素的reference counting是不完整的。知道为什么finalizer性能很糟糕,而且标准并不要求finalizer在程序退出前一定会执行。* 如果还舒服,了解一下如何设置Java虚拟机的堆大小限制(如HotSpot虚拟机的-Xmx选项等)。

* 了解一下Java里的WeakReference以及SoftReference和PhantomReference,以及它们什么时候有用,以及为什么它们实现起来有些困难。

* 如果有精力,了解一下Hotspot虚拟机的内存管理算法是什么样的。

【动态装载】学学Java的动态装载(class loading)

* 如果还舒服的话,学学OSGI以及它的一种实现(如Felix或者Equinox)

* 如果仍然很舒服的话,学学写基于Eclipse平台的程序。不是Eclipse集成开发环境,只是利用他们的图形框架,写自己的应用程序。

* 如果还觉得舒服的话,写Eclipse集成开发环境的插件。

【本地/外语接口】学习一下Java Native Interface(JNI),试着写一个Java和C语言混合编程的程序。

* 如果觉得不舒服了或者觉得欲仙欲死,就学一学Java Native Access(JNA),试一试不用任何胶水代码而从Java直接装载C库,直接调用C函数。

* 如果连JNA也懒得学,就学一学SWIG,自动生成绑定。

* 如果觉得舒服,就学一学Java Virtual Machine Tooling Interface(JVMTI),用C程序来监视JVM的状态。

【密码学】学一学密码学,包括编码、密码分析、攻击、对称密钥、公钥系统、数字签名、哈希算法等,看看Java有没有实现。

* 如果觉得有点不舒服(你应该不会觉得舒服吧,除非你是学密码学的,要不然总会觉得自己写的程序有安全漏洞),就写一个“人品计算器”来放松一下,要求每次输入同一个姓名,得到的人品值是固定的,但又要让人无法用别人的人品值猜自己的人品值。

【移动终端】学一学Android开发。

* 如果有精力的话,看看Dalvik虚拟机是怎么回事。

* 建议买一个iPhone或者iPad,或许你再也不想用Android手机或者平板了。

【历史】如果觉得有些无聊,就去挖一挖历史上比较火的可能和Java相关技术,比如:* Applet,想想它比起html5+css3+javascript的缺点在哪里。

* AWT、Swing,想想为什么很少有人用Java写图形界面程序。你觉得Swing的程序看上去舒服吗?中国人和残疾人喜欢用Swing程序吗?

* JNDI,想想它比起Spring Bean Container的缺点在哪里。

* JSP,想想它比起MVC结构的缺点在哪里。

* WSDL/SOAP,把它们和XML-RPC、RESTful Web Service比较一下。

* XSLT,以及为什么它是图灵完备的。可是它真的比Java本身更好用吗?

* Log4j、java.util.logging、Apache Commons Logging,各自有什么问题,以及Log4j的作者本人为什么又开发了SLF4j和Logback?

* Java最早是为什么设计的?

篇6:成为java程序员的学习过程

成为java程序员的学习过程

学习任何一种知识都是一个从无到有,从略知到精通的过程。这个过程是一个循序渐进的过程,没有什么捷径,但是在这个过程中好的学习方法,可以使我们少走一些弯路。

很多java初学者面对java庞大的知识体系,不知如何下手。java私塾根据多年的教学经验总结出以下几点可以帮助同学学习java,同学们可以参考一下,制定自己的学习路径。

1:Java编程的知识和技能、JEE体系的知识

2:数据库的基本知识,包括Oracle和SqlServer和MySql

3:Web开发的知识和技能

4:EJB组件开发的知识和技能

5:流行的Struts、Spring、Hibernate、Webwork、Ibatis开发框架

6:实用的Ant、Xdoclet、Log4j、Junit、Vss、Cvs等开发工具

7:工作流技术和实用的Shark、JBPM等工作流框架

8:搜索引擎技术和实用的Lucene等搜索引擎框架

9:WebService技术和SOA架构

10:AJAX技术和Dwr框架

11:UML软件工程的知识

12:Java的设计模式,JEE的设计模式和JEE应用程序框架设计

13:好的编程思想和素质,IT学习的方法和技能

14:众多开发工具的使用,开发平台和环境的配置

15:完整的JEE项目开发经验和技能

上一篇:农业安全生产管理制度下一篇:2015学校财务工作计划