十二月 22, 2006

如果这都不算爱
是否爱就是忍耐不问该不该
都怪我没能耐转身走开
难道牺牲才精彩伤痛才实在
要为你流下泪来才证明是爱

如果这都不算爱
我有什么好悲哀
谢谢你的慷慨
是我自己活该

如果这都不算爱
我有什么好悲哀
你只要被期待
不要真正去爱 oh no
还要怎么的表白才不算独白
都怪我没能耐转身走开
难道牺牲才精彩伤痛才实在
要为你流下泪来才证明是爱
你的感情太易割爱
把未来转眼就删改
我的心却为你空白了一块

如果这都不算爱
我有什么好悲哀
谢谢你的慷慨
是我自己活该

如果这都不算爱
我有什么好悲哀
你要的是崇拜
并不是谁的爱 oh no

十二月 20, 2006

.access 访问、存取、通路、进入

adjacency list method 邻接表表示法

adjacency matrix method 邻接矩阵表示法

algorithm 算法

array 数组

ATM(asynchronous transfer mode) 异步传输模式

b.. real programs kernels 实程序 核心程序

b.. toy benchmark synthetic benchmark 简单基准程序 复合基准程序

bandwidth 带宽

benchmark 基准测试程序

best - fit algorithm 最佳适应算法

BFS(breadth first search) 广度优先搜索法

binary 二进制

binary relation 二元关系

binary tree 二叉树

bit series 比特序列

black - box white - box 黑盒 白盒

block miss 块失效

blocked 阻塞(等待状态也称阻塞或封锁状态)

boundary 界线 分界

bridge 网桥

bubble sort 冒泡排序

candidate key 候选键(辅键)

capacity 容量

cartesian product 笛卡尔积

CASE(com.. aided sof.. engineering) 计算机辅助软件工程

CCP(communication control processor) 通信控制处理机

cell 信元

characteristic 特征 特性

circuit switching 线路交换

circular wait 循环等待

CISC(complex instruction set computer) 复杂指令集计算机

class 类

Client/Server 客户机/服务器

clock cycle/clock rate 时钟周期/时钟频率

coaxial cable 同轴电缆

cohesion/coupling 内聚/耦合

coincidental logical procedural functional 偶然内聚 逻辑内聚 过程内聚 功能内聚

communication 通信

complement number 补码

constrain 约束

contain 包含

correspond(corresponding) 相符合(相应的一致的)

CPETT 计算机性能评价工具与技术

CPI 每条指令需要的周期数

CSMA/CD 带冲突检测的载波监听多路访问

cursor 游标

cyclic redundancy check 循环冗余检验

database: integrity consistency re story 完整性 一致性 可恢复性

database: security efficiency 数据库设计的目标:安全性 效率

deadlock: mutual exclusion 死锁条件:互斥

deadlock: circular wait no preemption 死锁条件:循环等待 无优先权

decimal 十进位的

decision 决定 判断

decomposition 双重的 混合的

definition 定义

definition phase 定义阶段

design phase 设计阶段

DFS(depth first search) 深度优先搜索法

diagram 图表

Difference Manchester 差分曼彻斯特

directed graph/undirected graph 有向图/无向图

distributed system 分布式系统

divide union intersection difference 除 并 交 差

document 文件 文档

DQDB(distributed queue dual bus) 分布队列双总线

dual 二元的 双的

dynamic design process 动态定义过程

element 元素 要素

elevator(scan) algorithm 电梯算法(扫描算法)

encapsulation inheritance 封装(压缩)继承(遗传)

entity 实体

entity integrity rule 实体完整性规则

equation 方程式 等式

Ethernet 以太网

exchange sort 交换排序

exclusive locks 排它锁(X锁)

external(internal) fragmentation 外(内)碎片

fault page fault 中断 过错 页中断

FDDI(fiber distributed data interface) 光纤分布式数据接口

FDM(frequency division multiplexing) 频分多路复用

fiber optic cable 光缆

FIFO replacement policy 先进先出替换算法

figure 数字 图形

first normal form 第一范式

floppy 活动盘片(软盘)

foreign key domain tuple 外来键 值域 元组

formula 公式 表达式

frame page frame 帧 结构 页结构

frequency 频率

FTP 文件传送服务

function 函数

functionally dependant 函数依赖

gateway 网间连接器

general - purpose registers 通用寄存器

generate 产生

grade 等级 标准

graph(graphic) 图

Groper 将用户的请求自动转换成FTP

hash table/hash function/ collision 哈希表/哈希函数(散列函数)/碰撞

HDLC 面向比特型数据链路层协议

hit rate 命中率

host 主计算机

host language statement 主语言语句

hypertext 超级文本

index 索引

insertion sort 插入排序

instruction format 指令格式

instruction set 指令集

interface 接口 分界面 连接体

interrupt 中断

IPC 工业过程控制

ISAM VSAM 索引顺序存取方法 虚拟存储存取方法

join/natural join/semi join 连接/自然连接/半连接

kernel executive supervisor user 核心 执行 管理 用户

kernels 核心程序

key comparison 键(码)值比较

LAN(local area network) 局域网

load 负载 载入

logical functional 逻辑内聚 功能内聚

longitudinal 水平的

maintenance phase 维护(保养)阶段

MAN(metropolitan area network) 城域网

Manchester 曼彻斯特

map 地图 映射图

matrix 矩阵 点阵

memory reference 存储器参量

message switching 报文交换

MFLOP(million floating point operate per second) 每秒百万次浮点运算

MIPS(millions of instruction per second) 每秒百万条指令

module 单位 基准

monitor(model benchmark physical) mothod 监视 (模型 基准 物理)法

multilevel data flow chart 多层数据流图

multiple - term formula 多项式

multiplexing 多路复用技术

multiplication 乘法

mutual exclusion 互相 排斥

non - key attributes 非码属性

Nyquist 奈奎斯特

object oriented 对象 趋向的 使适应的

object oriented analysis 面向对象的分析

object oriented databases 面向对象数据库

object oriented design 面向对象的设计

object oriented implementation 面向对象的实现

occurrence 事件

one - dimensional array 一维数组

OODB(object oriented data base) 面向对象数据库

OOM(object oriented method) 面向对象的方法

oom: information object message class 信息 对象 消息 类

oom: instance method message passing 实例 方法消息传递

open system 开放系统

operand 操作数

overflow 溢出

overlapping register windows 重叠寄存器窗口

packet switching 报文分组交换

page fault 页面失效

page replacement algorithm 页替换算法

paged segments 段页式管理

PCB(process control block) 进程控制块

peer entities 对等实体

period 时期 周期

phase 阶段 局面 状态

physical data link network layer 物理层 数据链路层 网络层

pipeline 管道

platter/track/cluster 面/磁道/簇

predicate 谓语

preemption 有优先权的

prefix(Polish form) 前缀(波兰表达式)

preorder/inorder/postorder 前序/中序/后序

presentation application layer 表示层 应用层

primary key attributes 主码属性

principle 原则 方法

procedural coincidental 过程内聚 偶然内聚

process 过程 加工 处理

program debugging 程序排错

projection selection join 投影 选择 连接

protocol 协议

prototype 原型 样板

prototyping method(model) 原型化周期(模型)

pseudo - code 伪码(程序设计语言PDL)

punctuation 标点

queue 队列

ready/blocked/running 就绪/阻塞(等待)/运行

real page number 实页数

real programs 实程序

redirected 重定向

redundancy 冗余

reference integrity rule 引用完整性规则

register(registry) 寄存器 登记 注册 挂号

relation 关系

relay 中继

repeater 中继器

replacement 替换

request indication response confirm 请求 指示 响应 确认

resource 资源

response 回答 响应

RISC(reduced instruction set computer) 精简指令集计算机

robustness 健壮性

router 路由器

scheme 计划 图表

sector head cylinder 扇区 磁头 柱面

selection sort 选择排序

semaphores 信号

sequence 序列 顺序

Shanon 香农

share locks 共享锁(S锁)

short path critical path 最短路径 关键路径

signal 信号

signal - to - noise ratio 信噪比 B/N

similar 相似的

SISD SIMD MISD MIMD *指令流 *数据流

SMDS 交换多兆位数据服务

software development phase 软件开发阶段

software engineering 软件工程

software portability 软件可移植性

software requirements specification 软件需求说明书

sort 种类 方式 分类 排序

spanning tree 跨越树(生成树)

speedup 加速比

SSTF(shortest - seek - time - first) 最短寻道时间优先(磁盘调度算法)

stack strategy non - stack strategy 堆栈型 非堆栈型

starvation 饥饿 匮乏

store procedures 存储过程

subset 子集 子设备

superclass subclass abstract class 超类 子类 抽象类

synthetic benchmark 复合基准程序

system testing 系统测试

Systolic 脉动阵列

table 表 表格 桌子

TDM(time division multiplexing) 时分多路复用

terminal 终端

testing phase 测试阶段

theta select/project/theta join θ选择/投影/θ连接

time complexity 时间复杂度

timestamping 时标技术

Token Bus 令牌总线

Token Ring 令牌环

toy benchmark 简单基准程序

transaction 事务 记录

transmit 传送

transport layer session layer 传输层 会话层

traversal method 遍历方法

triggers/store procedures 触发器/存储过程(ORACLE系统)

unit system acceptance testing 单元测试 系统测试 确认测试

update 更新

value (数)值

variable 变量

vertice edge 顶点(节点)边

virtual memory system 虚拟存储系统

WAN(wide area network) 广域网

waterfall model 瀑布模型

white noises 白噪声

write - back(copy - back) 写回法

write - through(store - through) 写直达法

access arm 磁头臂,存取臂

access time 存取时间

adder 加法器

address 地址

alphanumeric 字母数字的

analog computer 模拟计算机

analyst 分析员

area 区域

array 数组,阵列

assembler 汇编程序

automation 自动化

band 区

batch processing 成批处理

binary code 二进制码

binary digit 二进制位,二进制数字

bit 比特,二进制的一位

branch 分支,支线

brush 电刷

buffer storage 缓冲存储器

calculator 计算器

call instruction 呼叫指令

card punch 卡片穿孔机

card reader 卡片阅读机,读卡机

cell 单元

channel 通道,信道

character 字符

check digit 校验数位

circuit 电路,线路

to clear 清除,清零

clock 时钟

code 代码

to code 编码

coder 编码员,编码器

command 指令,命令

compiler 编译程序

computer language 计算机语言

console 控制台

control unit 控制部件,控制器

core storage, core store 磁心存储器

counter 计数器

cybe rnetics 控制论

cycle 循环

drum 磁鼓

to edit 编辑

electronics 电子学

emitter 发射器

to encode 编码

to erase 擦除,清洗,抹除

feed 馈送,供给

to feed 馈送,供给

feedback 反馈

field 字段,信息组,域

file 文件

floppy disk 软磁盘

floppy disk drive 软磁盘机

flow chart 流程图

frame 帧

hardware 硬件

identifier 标识符

index 索引

information 信息

inline processing 内处理

input 输入

inquiry 询问

instruction 指令

integrated circuit 集成电路

to interpret 解释

item 项目,项

jump 转移

key 键,关键码

keyboard 键盘

latency time 等待时间

library 库,程序库

linkage 连接

to load 装入,寄存,写入,加载

location 存储单元

logger 登记器,记录器

loop 循环

machine language 机器语言

magnetic storage 磁存储器

magnetic tape 磁带

matrix 矩阵

memory 存储器

message 信息,报文

microcomputer 微型计算机

module 组件,模块

monitor 监视器,监督程序,管程

nanosecond 毫微秒

network 网络,网

numeric, numerical 数字的,数值的

octet 八位位组,八位字节

operator 操作员

optical character reader 光符阅读机

optical scanner 光扫描器

output 输出

overflow 溢出,上溢

panel 平板

parameter 参数,参量

perforator 穿孔机

peripheral equipment 外围设备,外部设备

personal computer 个人计算机

printed circuit 印制电路

printer 打印机

printout 打印输出

to process 处理

processing unit 处理部件

program 程序

to program 程序编制

programmer 程序设计员

programming 程序设计,程序编制

pulse 脉冲

punch 穿孔

to punch 穿孔

punched card, punch card 穿孔卡片

punched tape, punch tape 穿孔纸带

punch hole 孔,穿孔

random access 随机存取

to read 读

reader 阅读程序

reading 阅读

real time 实时

record, register 记录

redundancy 冗余

routine 例行程序

selector 选择器,选择符

sentinel 标记

sequence 序列,顺序

sequential 顺序的

serial 串行的.连续的

shift 移位,移数

signal 信号

simulation 模拟

simulator 模拟器,模拟程序

software 软件,软设备

sort 分类,排序

sorter 分类人员,分类机,分类程序,排序程序 cybernetics 控制论

decision 制定

digit 数字,数位,位

digital computer 数字计算机

disc, disk 磁盘

display unit 显示装置

drum 磁鼓

to edit 编辑

electronics 电子学

emitter 发射器

to encode 编码

to erase 擦除,清洗,抹除

feed 馈送,供给

to feed 馈送,供给

feedback 反馈

field 字段,信息组,域

file 文件

floppy disk 软磁盘

floppy disk drive 软磁盘机

flow chart 流程图

frame 帧

hardware 硬件

identifier 标识符

index 索引

information 信息

inline processing 内处理

input 输入

inquiry 询问

instruction 指令

integrated circuit 集成电路

to interpret 解释

item 项目,项

jump 转移

key 键,关键码

keyboard 键盘

latency time 等待时间

library 库,程序库

linkage 连接

to load 装入,寄存,写入,加载

location 存储单元

logger 登记器,记录器

loop 循环

machine language 机器语言

magnetic storage 磁存储器

magnetic tape 磁带

matrix 矩阵

memory 存储器

message 信息,报文

microcomputer 微型计算机

module 组件,模块

monitor 监视器,监督程序,管程

numeric, numerical 数字的,数值的

octet 八位位组,八位字节

operator 操作员

optical character reader 光符阅读机

optical scanner 光扫描器

output 输出

overflow 溢出,上溢

perforator 穿孔机

peripheral equipment 外围设备,外部设备

personal computer 个人计算机

printed circuit 印制电路

printer 打印机

printout 打印输出

to process 处理

processing unit 处理部件

program 程序

to program 程序编制

programmer 程序设计员

programming 程序设计,程序编制

punch 穿孔

to punch 穿孔

punched card, punch card 穿孔卡片

punched tape, punch tape 穿孔纸带

punch hole 孔,穿孔

random access 随机存取

to read 读

reader 阅读程序

reading 阅读

real time 实时

record, register 记录

selector 选择器,选择符

sentinel 标记

sequence 序列,顺序

sequential 顺序的

serial 串行的.连续的

shift 移位,移数

signal 信号

software 软件,软设备

sort 分类,排序

sorter 分类人员,分类机,分类程序,排序程序

>storage 存储器

to store 存储

subroutine, subprogram 子程序

switch 开关

symbol 符号

symbolic language 符号语言

system 系统

tabulator 制表机

teleprinter 电传打字机

terminal 终端

terminal unit 终端设备

timer 时钟,精密计时器

time sharing 分时

timing 定时

track 磁道

transducer 传感器,翻译机

translator 翻译程序,翻译器

to update 更新

Winchester disk drive 温彻斯特磁盘机,硬盘机

working storage 工作存储器

转自:http://www.chinajavaworld.com/thread.jspa?threadID=717421&tstart=0

十二月 19, 2006

一个十岁的小学生发现五年级的数学实在是他这一生中最难的功课。举凡家教、同
学、CD教学片、教科书,但都没用。最后父母决定把孩子转进私立小学, 不是普通的
私立小学,而是一所天主教学校。

开学的第一天来临了,小傢伙开始向著伟大的陌生世界冒险。那天放学回来后,他走
过父母亲面前,径直回房把门关起来。辛苦工作了两个小时,出来吃个饭就又直接回到
楼上,认真的做功课直到就寢。这样的模式一天继续一天,直到第一次发成绩单。

那天,这孩子走进家门,把信封丟在餐桌上,就径直回房做功课。他父母亲打开成绩
单,让他们惊奇的是数学成绩居然是A。他们欣喜万分地冲上儿子的房间,为他的进步
激动不已。

「是那些修女吗?」爸爸问。
「不是。」儿子回答。
「是课前的祷告吗?」妈妈问。
「不是。」
「是教科书、老师、还是课程安排?」爸爸问。
「不,不是。」
「喔!那么,是什么原因呢?」妈妈问。
「是这样的,进学校的第一天,我看见一个人被钉在加号上面,我知道…他们是玩真
的。」

————————–

感想颇多…

十二月 18, 2006

词:刘卓辉
曲:黄家驹
主唱:黄家驹

遥远的东方
辽阔的边疆
还有远古的破墙
前世的沧桑
后世的风光
万里千山牢牢接壤
围着老去的国度
围着事实的真相
围着浩瀚的岁月
围着欲望与理想
迷信的村庄
神秘的中央
还有昨天的战场
皇帝的新衣
热血的樱枪
谁都甘心流连塞上
叫嚷
朦着耳朵
那里那天不再听到在呼号的人
woo–ah woo–ah ah ah
朦着眼睛
再见往昔景仰的那样一道疤痕
woo–ah woo–ah ah ah
留在地壳头上
无冕的身躯
忘我的思想
还有显赫的破墙
谁也冲不开
谁也抛不低
谁要一生流离浪荡
朦着耳朵
那里那天不在听到像呼号的神
woo–ah woo–ah ah ah
朦着眼睛
再见往昔景仰的那样一道疤痕
woo–ah woo–ah ah ah
留在地壳头上

十二月 16, 2006

Java Learning Path (一)工具篇

一、 JDK (Java Development Kit)

JDK是整个Java的核心,包括了Java运行环境(Java Runtime Envirnment),一堆Java工具和Java基础的类库(rt.jar)。不论什么Java应用服务器实质都是内置了某个版本的JDK。因此掌握 JDK是学好Java的第一步。最主流的JDK是Sun公司发布的JDK,除了Sun之外,还有很多公司和组织都开发了自己的JDK,例如IBM公司开发 的JDK,BEA公司的Jrocket,还有GNU组织开发的JDK等等。其中IBM的JDK包含的JVM(Java Virtual Machine)运行效率要比Sun JDK包含的JVM高出许多。而专门运行在x86平台的Jrocket在服务端运行效率也要比Sun JDK好很多。但不管怎么说,我们还是需要先把Sun JDK掌握好。

1、 JDK的下载和安装
JDK又叫做J2SE(Java2 SDK Standard Edition),可以从Sun的Java网站上下载到,http://java.sun.com/j2se/downloads.html ,下载页面在这里:http://java.sun.com/j2se/1.4.2/download.html

下载好的JDK是一个可执行安装程序,默认安装完毕后会在C:\Program Files\Java\目录下安装一套JRE(供浏览器来使用),在C:\j2sdk1.4.2下安装一套JDK(也包括一套JRE)。然后我们需要在环 境变量PATH的最前面增加java的路径C:\j2sdk1.4.2\bin。这样JDK就安装好了。

2、 JDK的命令工具
JDK的最重要命令行工具:
java: 启动JVM执行class
javac: Java编译器
jar: Java打包工具
javadoc: Java文档生成器
这些命令行必须要非常非常熟悉,对于每个参数都要很精通才行。对于这些命令的学习,JDK Documentation上有详细的文档。

二、 JDK Documentation

Documentation在JDK的下载页面也有下载连接,建议同时下载Documentation。Documentation是最最重要的编程手 册,涵盖了整个Java所有方面的内容的描述。可以这样说,学习Java编程,大部分时间都是花在看这个Documentation上面的。我是随身携带 的,写Java代码的时候,随时查看,须臾不离手。

三、 应用服务器(App Server)

App Server是运行Java企业组件的平台,构成了应用软件的主要运行环境。当前主流的App Server是BEA公司的Weblogic Server和IBM公司的Websphere以及免费的Jboss,选择其中一个进行学习就可以了,个人推荐Weblogic,因为它的体系结构更加干 净,开发和部署更加方便,是Java企业软件开发人员首选的开发平台。下面简要介绍几种常用的App Server:

1、 Tomcat
Tomcat严格意义上并不是一个真正的App Server,它只是一个可以支持运行Serlvet/JSP的Web容器,不过Tomcat也扩展了一些App Server的功能,如JNDI,数据库连接池,用户事务处理等等。Tomcat被非常广泛的应用在中小规模的Java Web应用中,因此本文做一点下载、安装和配置Tomcat的介绍:

Tomcat是Apache组织下Jakarta项目下的一个子项目,它的主网站是:

http://jakarta.apache.org/tomcat/

Tomcat软件下载的连接是:http://www.apache.org/dist/jakarta/tomcat-4/binaries/

下载Tomcat既可以直接下载zip包,也可以下载exe安装包(个人建议zip更干净些),不管哪种情况,下载完毕安装好以后(zip直接解压缩就可以了)。需要设置两个环境变量:

JAVA_HOME=C:\j2sdk1.4.2
CATALINA_HOME=D:\tomcat4 (你的Tomcat安装目录)

这样就安装好了,启动Tomcat运行CATALINA_HOME\bin\startup.bat,关闭Tomcat运行shutdown.bat脚本。Tomcat启动以后,默认使用8080端口,因此可以用浏览器访问http://localhost:8080来测试Tomcat是否正常启动。

Tomcat提供了两个Web界面的管理工具,URL分别是:
http://localhost:8080/admin/index.jsp
http://localhost:8080/manager/html
在启用这两个管理工具之前,先需要手工配置一下管理员用户和口令。用一个文本工具打开CATALINA_HOME\conf\tomcat-users.xml这个文件,加入如下几行:

这样用户“robbin”就具备了超级管理员权限。重新启动Tomcat以后,你就可以使用该用户来登陆如上的两个管理工具,通过Web方式进行Tomcat的配置和管理了。

2、 BEA Weblogic
Weblogic可以到BEA的网站上免费注册之后下载到最新的Weblogic8.1企业版,License可以免费使用1年时间,其实这已经完全足够了。Weblogic的下载连接:http://commerce.bea.com/index.jsp…/edocs.bea.com/

3、 IBM Webshpere
Websphere同样可以下载到免费的试用版本,到IBM的developerWorks网站可以看到Websphere试用产品的下载和相关的Websphere的资料,developerWorks中文网站的连接是:http://www-900.ibm.com/developerWorks/cn/wsdd/ ,Websphere的下载连接:http://www7b.software.ibm.com/wsdd/…WASsupport.html

4、 Jboss
Jboss是免费开源的App Server,可以免费的从Jboss网站下载:http://www.jboss.org/index.html,然…n.com/idea.html

四、 Java应用的运行环境

Java的应用可以简单分为以下几个方面:

1、 Java的桌面应用
桌面应用一般仅仅需要JRE的支持就足够了。

2、 Java Web应用
Java的Web应用至少需要安装JDK和一个web容器(例如Tomcat),以及一个多用户数据库,Web应用至少分为三层:
Browser层:浏览器显示用户页面
Web层:运行Servlet/JSP
DB层:后端数据库,向Java程序提供数据访问服务

3、 Java企业级应用
企业级应用比较复杂,可以扩展到n层,最简单情况会分为4层:
Browser层:浏览器显示用户页面
Client层:Java客户端图形程序(或者嵌入式设备的程序)直接和Web层或者EJB层交互
Web层:运行Servlet/JSP
EJB层:运行EJB,完成业务逻辑运算
DB层:后端数据库,向Java程序提供数据访问服务

4、 Java嵌入式应用
Java嵌入式应用是一个方兴未艾的领域,从事嵌入式开发,需要从Sun下载J2ME开发包,J2ME包含了嵌入式设备专用虚拟机KVM,和普通的JDK中包含的JVM有所不同。另外还需要到特定的嵌入式厂商那里下载模拟器。

Java Learning Path(二)书籍篇

学习一门新的知识,不可能指望只看一本,或者两本书就能够完全掌握。需要有一个循序渐进的阅读过程。我推荐Oreilly出版的Java系列书籍。

在这里我只想补充一点看法,很多人学习Java是从《Thinking in Java》这本书入手的,但是我认为这本书是不适合初学者的。我认为正确的使用这本书的方法应该是作为辅助的读物。《Thinking in Java》并不是在完整的介绍Java的整个体系,而是一种跳跃式的写作方法,是一种类似tips的方法来对Java很多知识点进行了深入的分析和解释。

对于初学者来说,最好是找一本Java入门的书籍,但是比较完整的循序的介绍Java的语法,面向对象的特性,核心类库等等,在看这本书的同时,可以同 步来看《Thinking in Java》,来加深对Java的理解和原理的运用,同时又可以完整的了解Java的整个体系。

对于 Java的入门书籍,蔡学镛推荐的是Oreilly的《Exploring Java, 2nd Edition》 或者《Java in a Nutshell,2nd Edition(针对C++背景)》,我并没有看过这两本书。其实我觉得电子工业出版社的《Java 2编程详解》或者《Java 2从入门到精通》就很不错。

在所有的Java书籍当中,其实最最有用的,并不是O’reilly的 Java Serials,真正最最有用处是JDK的Documentation!几乎你想获得的所有的知识在Documentation里面全部都有,其中最主要 的部分当然是Java基础类库的API文档,是按照package来组织的,对于每一个class都有详细的解释,它的继承关系,是否实现了某个接口,通 常用在哪些场合,还可以查到它所有的public的属性和方法,每个属性的解释,意义,每个方法的用途,调用的参数,参数的意义,返回值的类型,以及方法 可能抛出的异常等等。可以这样来说,所有关于Java编程方面的书籍其实都不过是在用比较通俗易懂的语言,和良好的组织方式来介绍 Documentation里面的某个package里面包含的一些类的用法而已。所以万变不离其宗,如果你有足够的能力来直接通过 Documentation来学习Java的类库,那么基本上就不需要看其他的书籍了。除此之外,Documentation也是编程必备的手册,我的桌 面上有三个Documentation的快捷方式,分别是J2SDK1.4.1的Documentation,Servlet2.3的 Documentation和J2SDKEE1.3.1的Documentation。有了Documentation,什么其他的书籍都不需要了。

对于Java Web 编程来说,最核心的是要熟悉和掌握HTTP协议,这个就和Java无关了,在熟悉HTTP协议之后,就需要熟悉Java的实现HTTP协议的类库,也就是 Servlet API,所以最重要的东西就是Servlet API。当然对于初学者而言,直接通过Servlet API来学习Web编程有很大的难度,我推荐O’reilly的《Java Server Pages 》这本书来学习Web 编程。

EJB的书籍当中,《Enterprise JavaBeans, 2nd Edition》是一本很不错的书, EJB的学习门槛是比较高,入门很难,但是这本书完全降低了学习的难度,特别重要的一点是,EJB的学习需要结合一种App Server的具体实现,所以在学习EJB的同时,必须同步的学习某种App Server,而这本书相关的出了三本书,分别是Weblogic6.1,Websphere4.0和JBoss3.0上面部署书中例子的实做。真是既有 理论,又有实践。在学习EJB的同时,可以边看边做,EJB的学习会变得很轻松。

但是这本书也有一个问题,就是版本比较旧,主要讲 EJB1.1规范和部分EJB2.0的规范。而Ed Roman写的《Mastering EJB 2.0》这本书完全是根据EJB2.0规范写的,深入浅出,覆盖了EJB编程的各个方面,并且还有很多编程经验tips,也是学习EJB非常推荐的书籍之 一。

如果是结合Weblogic来学习J2EE的话,《J2EE应用与BEA Weblogic Server》绝对是首选读物,虽然是讲述的Weblogic6.0,仍然值得购买,这本书是BEA官方推荐的教材,作者也是BEA公司的工程师。现在中 文版已经随处可见了。这本书结合Weblogic介绍了J2EE各个方面的技术在Weblogic平台上的开发和部署,实践指导意义非常强。

在掌握了Java平台基础知识和J2EE方面的知识以后,更进一步的是学习如何运用OO的方法进行软件的设计,那么就一定要学习“设计模式”。Sun公 司出版了一本《J2EE核心模式》,是每个开发Java企业平台软件的架构师必备的书籍。这本书全面的介绍了J2EE体系架构的各种设计模式,是设计师的 必读书籍。

Java Learning Path(三)过程篇

每个人的学习方法是不同的,一个人的方法不见得适合另一个人,我只能是谈自己的学习方法。因为我学习Java是完全自学的,从来没有问过别人,所以学习的过程基本上完全是自己摸索出来的。我也不知道这种方法是否是比较好的方法,只能给大家提供一点参考了。

学习Java的第一步是 安装好JDK,写一个Hello World, 其实JDK的学习没有那么简单,关于JDK有两个问题是很容易一直困扰Java程序员的地方:一个是CLASSPATH的问题,其实从原理上来说,是要搞 清楚JRE的ClassLoader是如何加载Class的;另一个问题是package和import问题,如何来寻找类的路径问题。把这两个问题摸索 清楚了,就扫除了学习Java和使用JDK的最大障碍。推荐看一下王森的《Java深度历险》,对这两个问题进行了深入的探讨。

第二步是 学习Java的语法。Java的语法是类C++的,基本上主流的编程语言不是类C,就是类C++的,没有什么新东西,所以语法的学习,大概就是半天的时间 足够了。唯一需要注意的是有几个不容易搞清楚的关键字的用法,public,protected,private,static,什么时候用,为什么要 用,怎么用,这可能需要有人来指点一下,我当初是完全自己琢磨出来的,花了很久的时间。不过后来我看到《Thinking in Java》这本书上面是讲了这些概念的。

第三步是学习Java的面向对象的编程语言的特性的地方。比如继承,构造器, 抽象类,接口,方法的多态,重载,覆盖,Java的异常处理机制。对于一个没有面向对象语言背景的人来说,我觉得这个过程需要花很长很长时间,因为学习 Java之前没有C++的经验,只有C的经验,我是大概花了一个月左右吧,才彻底把这些概念都搞清楚,把书上面的例子反复的揣摩,修改,尝试,把那几章内 容反复的看过来,看过去,看了不下5遍,才彻底领悟了。不过我想如果有C++经验的话,应该一两天时间足够了。那么在这个过程中,可以多看看 《Thinking in Java》这本书,对面向对象的讲解非常透彻。可惜的是我学习的时候,并没有看到这本书,所以自己花了大量的时间,通过自己的尝试和揣摩来学会的。

第四步就是开始熟悉Java的类库。Java的基础类库其实就是JDK安装目录下面jre\lib\rt.jar这个包。学习基础类库就是学习rt.jar。基础类库里面的类非常非常多。据说有3000多个,我没有统计过。但是真正对于我们来说最核心的只有4个,分别是
java.lang.*;
java.io.*;
java.util.*;
java.sql.*;

这四个包的学习,每个包的学习都可以写成一本厚厚的教材,而O’reilly也确实是这样做的。我觉得如果时间比较紧,是不可能通过读四本书来学习。我觉得比较好的学习方法是这样的:
首先要通读整个package的框架,了解整个package的class,interface,exception的构成,最好是能够找到介绍整个包框架的文章。这些专门介绍包的书籍的前几章应该就是这些总体的框架内容介绍。

对包整体框架的把握并不是要熟悉每个类的用法,记住它有哪些属性,方法。想记也记不住的。而是要知道包有哪些方面的类构成的,这些类的用途是什么,最核 心的几个类分别是完成什么功能的。我在给人培训的时候一般是一次课讲一个包,所以不可能详细的介绍每个类的用法,但是我反复强调,我给你们讲这些包的不是 要告诉你们类的方法是怎么调用的,也不要求你们记住类的方法调用,而是要你们了解,Java给我们提供了哪些类,每个类是用在什么场合,当我遇到问题的时 候,我知道哪个类,或者哪几个类的组合可以解决我的问题,That’all!,当我们具体写程序的时候,只要你知道该用哪个类来完成你的工作就足够了。编 码的时候,具体的方法调用,是边写代码,边查Documentation,所有的东西都在Documentation里面,不要求你一定记住,实际你也记 不住3000多个类的总共将近10万个方法调用。所以对每个包的总体框架的把握就变得极为重要。

第五步,通过上面的学 习,如果学的比较扎实的话,就打好了Java的基础了,剩下要做的工作是扫清Documentation里面除了上面4个包之外的其他一些比较有用处的 类。相信进展到这一步,Java的自学能力已经被培养出来了,可以到了直接学习Documentation的水平了。除了要做GUI编程之外,JDK里面 其他会有用处的包是这些:
java.text.*;
java.net.*;
javax.naming.*;
这些包里面真正用的比较多的类其实很少,只有几个,所以不需要花很多时间。

第六步,Java Web 编程
Web编程的核心是HTTP协议,HTTP协议和Java无关,如果不熟悉HTTP协议的话,虽然也可以学好Servlet/JSP编程,但是达不到举 一反三,一通百通的境界。所以HTTP协议的学习是必备的。如果熟悉了HTTP协议的话,又有了Java编程的良好的基础,学习Servlet/JSP简 直易如反掌,我学习Servlet/JSP就用了不到一周的时间,然后就开始用JSP来做项目了。

在Servlet/JSP的学习 中,重头仍然是Servlet Documentation。Servlet API最常用的类很少,花比较少的时间就可以掌握了。把这些类都看一遍,多写几个例子试试。Servlet/JSP编程本质就是在反复调用这些类来通过 HTTP协议在Web Server和Brower之间交谈。另外对JSP,还需要熟悉几个常用JSP的标记,具体的写法记不住的话,临时查就是了。
此外Java Web编程学习的重点要放在Web Application的设计模式上,如何进行业务逻辑的分析,并且进行合理的设计,按照MVC设计模式的要求,运用Servlet和JSP分别完成不同 的逻辑层,掌握如何在Servlet和JSP之间进行流程的控制和数据的共享,以及Web Application应该如何配置和部署。

第七步,J2EE编程
以上的学习过程如果是比较顺利的话,进行到这一步,难度又陡然提高。因为上面的知识内容都是只涉及一个方面,而像EJB,JMS,JTA等核心的J2EE规范往往是几种Java技术的综合运用的结晶,所以掌握起来难度比较大。

首先一定要学习好JNDI,JNDI是App Server定位服务器资源(EJB组件,Datasouce,JMS)查找方法,如果对JNDI不熟悉的话,EJB,JMS这些东西几乎学不下去。 JNDI其实就是javax.naming.*这个包,运用起来很简单。难点在于服务器资源文件的配置。对于服务器资源文件的配置,就需要看看专门的文档 规范了,比如web.xml的写法,ejb-jar.xml的写法等等。针对每种不同的App Server,还有自己的服务资源配置文件,也是需要熟悉的。

然后可以学习JTA,主要是要理解JTA对于事务的控制的方法,以及该 在什么场合使用JTA。这里可以简单的举个例子,我们知道一般情况可以对于一个数据库连接进行事务控制(conn.setAutoCommit (false),….,conn.commit()),做为一个原子操作,但是假设我的业务需求是要把对两个不同数据库的操作做为一个原子操作,你能 做的到吗?这时候只能用JTA了。假设操作过程是先往A数据库插一条记录,然后删除B数据库另一个记录,我们自己写代码是控制不了把整个操作做为一个原子 操作的。用JTA的话,由App Server来完成控制。

在学习EJB之前要学习对象序列化和RMI,RMI是EJB的基础。接着学习JMS和EJB,对于EJB来说,最关键是要理解EJB是如何通过RMI来实现对远端对象的调用的,以及在什么情况下要用到EJB。

在学习完EJB,JMS这些东西之后,你可能会意识到要急不可待学习两个领域的知识,一个是UML,另一个是Design Pattern。Java企业软件的设计非常重视框架(Framework)的设计,一个好的软件框架是软件开发成功的必要条件。在这个时候,应该开始把 学习的重点放在设计模式和框架的学习上,通过学习和实际的编程经验来掌握EJB的设计模式和J2EE的核心模式。

J2EE规范里面,除了EJB,JMS,JTA,Servlet/JSP,JDBC之外还有很多很多的企业技术,这里不一一进行介绍了。

另外还有一个最新领域Web Services。Web Services也完全没有任何新东西,它像是一种黏合剂,可以把不同的服务统一起来提供一个统一的调用接口,作为使用者来说,我只要获得服务提供者给我 的WSDL(对服务的描述),就够了,我完全不知道服务器提供者提供的服务究竟是EJB组件,还是.Net组件,还是什么CORBA组件,还是其他的什么 实现,我也不需要知道。Web Services最伟大的地方就在于通过统一的服务提供方式和调用方式,实现了整个Internet服务的共享,是一个非常令人激动的技术领域。Web Services好像目前还没有什么很好的书籍,但是可以通过在网络上面查资料的方式来学习。

Java Learning Path(四) 方法篇

Java作为一门编程语言,最好的学习方法就是写代码。当你学习一个类以后,你就可以自己写个简单的例子程序来运行一下,看看有什么结果,然后再多调用 几个类的方法,看看运行结果,这样非常直观的把类给学会了,而且记忆非常深刻。然后不应该满足把代码调通,你应该想想看如果我不这样写,换个方式,再试试 行不行。记得哪个高人说过学习编程就是个破坏的过程,把书上的例子,自己学习Documentation编写的例子在运行通过以后,不断的尝试着用不同的 方法实现,不断的尝试破坏代码的结构,看看它会有什么结果。通过这样的方式,你会很彻底的很精通的掌握Java。

举个例子,我们都编过Hello World

public class HelloWorld {
public static void main(String[] args) {
System.out.println(”Hello World”);
}
}

很多初学者不是很理解为什么main方法一定要这样来定义public static void main(String[] args),能不能不这样写?包括我刚学习Java的时候也有这样的疑问。想知道答案吗?很简单,你把main改个名字运行一下,看看报什么错误,然后根 据出错信息进行分析;把main的public取掉,在试试看,报什么错误;static去掉还能不能运行;不知道main方法是否一定要传一个 String[]数组的,把String[]改掉,改成int[],或者String试试看;不知道是否必须写args参数名称的,也可以把args改成 别的名字,看看运行结果如何。

我当初学习Java的时候就是这样做的,把Hello World程序反复改了七八次,不断运行,分析运行结果,最后就彻底明白为什么了main方法是这样定义的了。

此外,我对于staic,public,private,Exception,try{ }catch {}finally{}等等等等一开始都不是很懂,都是把参考书上面的例子运行成功,然后就开始破坏它,不断的根据自己心里面的疑问来重新改写程序,看看 能不能运行,运行出来是个什么样子,是否可以得到预期的结果。这样虽然比较费时间,不过一个例子程序这样反复破坏几次之后。我就对这个相关的知识彻底学通 了。有时候甚至故意写一些错误的代码来运行,看看能否得到预期的运行错误。这样对于编程的掌握是及其深刻的。

其中特别值得一提的是JDK有一个非常棒的调试功能,-verbose,javac –verbose 以及其它很多JDK工具都有这个选项,-verbose 可以显示在命令执行的过程中,JVM都依次加载哪里Class,通过这些宝贵的调试信息,可以帮助我们分析出JVM在执行的过程中都干了些什么。

另外,自己在学习过程中,写的很多的这种破坏例程,应该有意识的分门别类的保存下来,在工作中积累的典型例程也应该定期整理,日积月累,自己就有了一个 代码库了。遇到类似的问题,到代码库里面 Copy & Paste ,Search & Replace,就好了,极大提高了开发速度。最理想的情况是把一些通用的例程自己再抽象一层,形成一个通用的类库,封装好。那么可复用性就更强了。

所以我觉得其实不是特别需要例程的,自己写的破坏例程就是最好的例子,如果你实在对自己写的代码不放心的话,我强烈推荐你看看JDK基础类库的Java 源代码。在JDK安装目录下面会有一个src.zip,解开来就可以完整的看到整个JDK基础类库,也就是rt.jar的Java源代码,你可以参考一下 Sun是怎么写Java程序的,规范是什么样子的。我自己在学习Java的类库的时候,当有些地方理解的不是很清楚的时候,或者想更加清晰的理解运作的细 节的时候,往往会打开相应的类的源代码,通过看源代码,所有的问题都会一扫而空。

Java Learning Path(五)资源篇

http://java.sun.com/ (英文)
Sun的Java网站,是一个应该经常去看的地方。不用多说。

http://www-900.ibm.com/developerWorks/cn/
IBM的developerWorks网站,英语好的直接去英文主站点看。这里不但是一个极好的面向对象的分析设计网站,也是Web Services,Java,Linux极好的网站。强烈推荐!!!

http://www.javaworld.com/ (英文)
关于Java很多新技术的讨论和新闻。想多了解Java的方方面面的应用,这里比较好。

http://dev2dev.bea.com.cn/index.jsp
BEA的开发者园地,BEA作为最重要的App Server厂商,有很多独到的技术,在Weblogic上做开发的朋友不容错过。

http://www.theserverside.com/home/ (英文)
TheServerSide是一个著名的专门面向Java Server端应用的网站。

http://www.cnjsp.org/
JSP技术网站,有相当多的Java方面的文章和资源。

http://sourceforge.net/
SourgeForge是一个开放源代码软件的大本营,其中也有非常非常丰富的Java的开放源代码的著名的软件。

附:java入门与加深FAQ

一、准备篇

1 什么是Java、Java2、JDK?JDK后面的1.3、1.4.2版本号又是怎么回事?
答:Java是一种通用的,并发的,强类型的,面向对象的编程语言(摘自Java规范第二版) JDK是Sun公司分发的免费Java开发工具,正式名称为J2SDK(Java2 Software Develop Kit)。

2 什么是JRE/J2RE?
答:J2RE是Java2 Runtime Environment,即Java运行环境,有时简称JRE。如果你只需要运行Java程序或Applet,下载并安装它即可。如果你要自行开发Java软件,请下载JDK。在JDK中附带有J2RE。
注意:由于Microsoft对Java的支持不完全,请不要使用IE自带的虚拟机来运行Applet,务必安装一个J2RE或JDK。

3 学习Java用什么工具比较好?
答:作者建议首先使用JDK+文本编辑器,这有助你理解下列几个基础概念:path,classpath,package并熟悉基本命令:javac和java。并且下载和你的JDK版本一致的API帮助。

如果你不确定类或函数的用法,请先查阅API而不是发贴求助。当你熟悉Java之后,你可以考虑换一个IDE。很多人推荐JCreator,实际上JCreator的功能还 是很弱的。作者推荐eclipse,下载网http://www.eclipse.org因eclispe是免费的.

4 学习Java有哪些好的参考书?
答:作者首先推荐Thinking in Java,中文名《Java编程思想》,有中文版。该书第一章介绍了很多面向对象的编程思想,作为新手应当认真阅读。除此以外,O´relly出版社和 Wrox出版社的书也不错。作者本人不喜欢大陆作者的书。也许你觉得英文太难,但是网上大多数资料都是英文的。另外,你需要经常查阅API,而那也是英文 的。

5 Java和C++哪个更好?
答:这个问题是一个很不恰当的问题。你应该问:Java和C++哪个更适用于我的项目?如果你不需要跨平台,不需要分布式,要强调程序的运行速度,C++更为适用。反之?你应当考虑Java。

6 什么是J2SE/J2EE/J2ME?
答:J2SE就是一般的Java。
J2ME是针对嵌入式设备的,比如Java手机,它有自己的SDK。而J2EE使用J2SE的SDK。
J2EE规范更多的是对J2EE服务器的要求和开发人员的约束。详情见后继”J2EE FAQ”。

二、命令篇

7 我写了第一个Java程序,应该如何编译/运行?
答:首先请将程序保存为xxx.java文件,然后在dos窗口下使用javac xxx.java命令,你会发现该目录下多了一个xxx.class文件,再使用java xxx命令,你的java程序就开始运行了。

8 我照你说的做了,但是出现什么”´javac´ 不是内部或外部命令,也不是可运行的程序或批处理文件。”。
答:你遇到了path问题。操作系统在一定的范围(path)内搜索javac.exe,但是没能找到。请编辑你的操作系统环境变量,新增一个 JAVA_HOME变量,设为你JDK的安装目录,再编辑Path变量,加上一项 %JAVA_HOME%\bin。然后关掉并新开一个dos窗口,你就可以使用javac和java命令了。

9 环境变量怎么设置?
答:请向身边会设的人咨询。

10 javac xxx.java顺利通过了,但是java xxx的时候显示什么“NoClassDefFoundError”。
答:你遇到了classpath问题。java命令在一定的范围(classpath)内搜索你要用的class文件,但是未能找到。首先请确认你没有错 敲成java xxx.class,其实你并不需要设置该变量,但如果你设置了该变量又没有包含.(代表当前目录)的项,你就会遇到这个问题。请在你的 CLASSPATH环境变量中加入一项. 或干脆删掉这个变量。如果你使用了并非JDK自带的标准包,比如javax.servlet.*包,也会遇到这个问题,请将相应的jar文件加入 classpath。如果你在java源文件中定义了package,请参见15。

11 我在java xxx的时候显示”Exception in thread “main” java.lang.NoSuchMethodError: main”。
答:首先,在你的程序中每个java文件有且只能有一个public类,这个类的类名必须和文件名的大小写完全一样。其次,在你要运行的类中有且只能有一个public static void main(String[] args)方法,这个方法就是你的主程序。

12 package是什么意思?怎么用?
答:为了唯一标识每个类并分组,java使用了package的概念。每个类都有一个全名,例如String的全名是java.lang.String, 其中java.lang是包名,String是短名。这样,如果你也定义了String,你可以把它放在mypackage中,通过使用全名 mypackage.String和java.lang.String来区分这两个类。同时,将逻辑上相关的类放在同一个包中,可以使程序结构更为清楚。

你要做的就是在java文件开头加一行”package mypackage;”。注意包没有嵌套或包含关系,A包和A.B包对java命令来说是并列的两个包。

13 我没有声明任何package会怎么样?
答:你的类被认为放在默认包中。这时全名和短名是一致的。

14 在一个类中怎么使用其他类?
答:如果你使用java.lang包中的类,不用做任何事。如果你使用其他包中的类,使用import package1.class1; 或 import package2.*;这里.*表示引入这个包中的所有类。然后在程序中你可以使用其他类的短名。如果短名有冲突,使用全名来区分。

15 我用了package的时候显示”NoClassDefFoundError”,但是我把所有package去掉的时候能正常运行。
答:将你的java文件按包名存放。
比如你的工作目录是/work,你的类是package1.class1,那么将它存放为/work/package1/class1.java。如果没 有声明包,那么直接放在/work下。在/work下执行javac package1/class1.java,再执行java package1.class1,你会发现一切正常。另外,你可以考虑开始使用IDE。

16 我想把java编译成exe文件,该怎么做?
答:JDK只能将java源文件编译为class文件。class文件是一种跨平台的字节码,必须依赖平台相关的JRE来运行。Java以此来实现跨平 台,有些开发工具可以将java文件编译为exe文件。作者反对这种做法,因为这样就取消了跨平台性。如果你确信你的软件只在Windows平台上运行, 你可以考虑使用C++/C#来编程。

17 我在编译的时候遇到什么”deprecated API”,是什么意思?
答:所谓deprecated是指已经?时,但是为了向前兼容起见仍然保留的方法,这些方法可能会在以后取消支持。你应当改用较新的方法。一般在API里面会说明你应当用什么方法来代替之。

三、I/O篇

18 我怎么给java程序加启动参数,就像dir /p/w那样?
答:还记得public static void main(String[] args)吗?这里的args就是你的启动参数。
在运行时你输入java package1.class1 -arg1 -arg2,args中就会有两个String,一个是arg1,另一个是arg2。

19 我怎么从键盘输入一个int/double/字符串?
答:java的I/O操作比C++要复杂一点。如果要从键盘输入,样例代码如下:

BufferedReader cin = new BufferedReader( new InputStreamReader( System.in ) )
;
String s = cin.readLine();
这样你就获得了一个字符串,如果你需要数字的话再加上:

int n = Integer.parseInt( s );

或者

double d = Double.parseDouble( s );

20 我怎么输出一个int/double/字符串?
答:在程序开始写:

PrintWriter cout = new PrintWriter( System.out );

需要时写:

cout.print(n);

或者

cout.println(”hello”)

等等。

21 我发现有些书上直接用System.in和System.out输入输出,比你要简单得多。
答:java使用unicode,是双字节。而System.in和System.out是单字节的stream。如果你要输入输出双字节文字比如中文,请使用作者的做法。

22 我怎么从文件输入一个int/double/字符串?
答:类似于从键盘输入,只不过换成

BufferedReader fin = new BufferedReader( new FileReader(” myFileName ” ) );
PrintWriter fout = new PrintWriter( new FileWriter(” myFileName ” ) );
另外如果你还没下载API,请开始下载并阅读java.io包中的内容。

23 我想读写文件的指定位置,该怎么办?
答:你肯定没有认真看API。java.io.RandomAccessFile可以满足你的需要。

24 怎么判断要读的文件已经到了尽头?
答:你肯定没有认真看API。在Reaer的read方法中明确说明返回-1表示流的结尾。

四、 关键字篇

25 java里面怎么定义宏?
答:java不支持宏,因为宏代换不能保证类型安全。如果你需要定义常量,可以将它定义为某个类的static final成员。参见26和30。

26 java里面没法用const。
答:你可以用final关键字。例如 final int m = 9。被声明为final的变量不能被再次赋值。也可以用于声明方法或类,被声明为final的方法或类不能被继承。注意const是java的保留字以备扩充。

27 java里面也不能用goto。
答:甚至在面向过程的语言中你也可以完全不用goto。请检查你的程序流程是否合理。如果你需要从多层循环中迅速跳出,java增强了(和C++相比)break和continue的功能。
例如:

outer :
while( … )
{
inner :
for( … )
{
… break inner; …
… continue outer; …
}
}
和const一样,goto也是java的保留字以备扩充。

28 java里面能不能重载操作符?
答:不能。String的+号是唯一一个内置的重载操作符。你可以通过定义接口和方法来实现类似功能。

29 我new了一个对象,但是没法delete掉它。
答:java有自动内存回收机制,即所谓Garbarge Collector。你再也不用担心指针错误。

30 我想知道为什么main方法必须被声明为public static?
答:声明为public是为了这个方法可以被外部调用,详情见面向对象篇37。
static 是为了将某个成员变量/方法关联到类(class)而非实例(instance)。你不需要创建一个对象就可以直接使用这个类的static成员,在A类 中调用B类的static成员可以使用B.staticMember的写法。注意一个类的static成员变量是唯一的,被所有该类对象所共享的。

31 throw和throws有什么不同?
答:throws用于声明一个方法会抛出哪些异常。而throw是在方法体中实际执行抛出异常的动作。如果你在方法中throw一个异常,却没有在方法声明中声明之,编译器会报错。注意Error和RuntimeException的子类是例外,无需特别声明。

32 什么是异常?
答:异常最早在Ada语言中引入,用于在程序中动态处理错误并恢复。你可以在方法中拦截底层异常并处理之,也可以抛给更高层的模块去处理。你也可以抛出自己的异常指示发生了某些不正常情况。常见的拦截处理代码如下:

try
{
…… //以下是可能发生异常的代码
…… //异常被抛出,执行流程中断并转向拦截代码。
……
}

catch(Exception1 e) //如果Exception1是Exception2的子类并要做特别处理,应排在前面
{
//发生Exception1时被该段拦截
}
catch(Exception2 e)
{
//发生Exception2时被该段拦截
}
finally //这是可选的
{
//无论异常是否发生,均执行此段代码
}

33 final和finally有什么不同?
答:final请见26。finally用于异常机制,参见32。

五、 面向对象篇

34 extends和implements有什么不同?
答:extends用于(单)继承一个类(class),而implements用于实现一个接口(interface)。interface的引入是为了部分地提供多继承的功能。
在interface中只需声明方法头,而将方法体留给实现的class来做。这些实现的class的实例完全可以当作interface的实例来对待。有趣的是在interface之间也可以声明为extends(单继承)的关系。

35 java怎么实现多继承?
答:java不支持显式的多继承。因为在显式多继承的语言例如c++中,会出现子类被迫声明祖先虚基类构造函数的问题,而这是违反面向对象的封装性原则的。java提供了interface和implements关键字来部分地实现多继承。参见34。

36 abstract是什么?
答:被声明为abstract的方法无需给出方法体,留给子类来实现。而如果一个类中有abstract方法,那么这个类也必须声明为abstract。被声明为abstract的类无法实例化,尽管它可以定义构造方法供子类使用。

37 public,protected,private有什么不同?
答:这些关键字用于声明类和成员的可见性。
public成员可以被任何类访问,
protected成员限于自己和子类访问,
private成员限于自己访问。
Java还提供了第四种的默认可见性,一般称为package private,当没有任何public,protected,private修饰符时,成员是同一包内可见。类可以用public或默认来修饰。

38 Override和Overload有什么不同?
答:Override是指父类和子类之间方法的继承关系,这些方法有着相同的名称和参数类型。Overload是指同一个类中不同方法(可以在子类也可以在父类中定义)间的关系,这些方法有着相同的名称和不同的参数类型。

39 我继承了一个方法,但现在我想调用在父类中定义的方法。
答:用super.xxx()可以在子类中调用父类方法。

40 我想在子类的构造方法中调用父类的构造方法,该怎么办?
答:在子类构造方法的第一行调用super(…)即可。

41 我在同一个类中定义了好几个构造方法并且想在一个构造方法中调用另一个。
答:在构造方法第一行调用this(…)。

42 我没有定义构造方法会怎么样?
答:自动获得一个无参数的构造方法。

43 我调用无参数的构造方法失败了。
答:如果你至少定义了一个构造方法,就不再有自动提供的无参数的构造方法了。你需要显式定义一个无参数的构造方法。

44 我该怎么定义类似于C++中的析构方法(destructor)?
答:提供一个void finalize()方法。在Garbarge Collector回收该对象时会调用该方法。注意实际上你很难判断一个对象会在什么时候被回收。作者从未感到需要提供该方法。

45 我想将一个父类对象转换成一个子类对象该怎么做?
答:强制类型转换。如

public void meth(A a)
{
B b = (B)a;
}
如果a实际上并不是B的实例,会抛出ClassCastException。所以请确保a确实是B的实例。

46 其实我不确定a是不是B的实例,能不能分情况处理?
答:可以使用instanceof操作符。例如

if( a instanceof B )
{
B b = (B)a;
}
else
{

}

47 我在方法里修改了一个对象的值,但是退出方法后我发现这个对象的值没变!
答:很可能你把传入参数重赋了一个新对象,例如下列代码就会造成这种错误:

public void fun1(A a) //a是局部参数,指向了一个外在对象。
{
a = new A(); //a指向了一个新对象,和外在对象脱钩了。如果你要让a作为传出变量,不要写这一句。
a.setAttr(attr);//修改了新对象的值,外在对象没有被修改。
}
基本类型也会出现这种情况。例如:

public void fun2(int a)
{
a = 10;//只作用于本方法,外面的变量不会变化。
}

六、java.util篇

48 java能动态分配数组吗?
答:可以。例如int n = 3; Language[] myLanguages = new Language[n];

49 我怎么知道数组的长度?
答:用length属性。如上例中的 myLanguages.length 就为 3。

50 我还想让数组的长度能自动改变,能够增加/删除元素。
答:用顺序表–java.util.List接口。你可以选择用ArrayList或是LinkedList,前者是数组实现,后者是链表实现。例如:

List list = new ArrayList();

或是

List list = new LinkedList();

51 什么是链表?为什么要有两种实现?
答:请补习数据结构。

52 我想用队列/栈。
答:用java.util.LinkedList。

53 我希望不要有重复的元素。
答:用集合–java.util.Set接口。例如:Set set = new HashSet()。

54 我想遍历集合/Map。
答:用java.util.Iterator。参见API。

55 我还要能够排序。
答:用java.util.TreeSet。例如:Set set = new TreeSet()。放进去的元素会自动排序。你需要为元素实现Comparable接口,还可能需要提供equals()方法,compareTo()方法,hashCode()方法。

56 但是我想给数组排序。
答:java.util.Arrays类包含了sort等实用方法。

57 我想按不同方法排序。
答:为每种方法定义一个实现了接口Comparator的类并和Arrays综合运用。

58 Map有什么用?
答:存储key-value的关键字-值对,你可以通过关键字来快速存取相应的值。

59 set方法没问题,但是get方法返回的是Object。
答:强制类型转换成你需要的类型。参见45。

60 我要获得一个随机数。
答:使用java.util.Random类。

61 我比较两个String总是false,但是它们明明都是”abc” !
答:比较String一定要使用equals或equalsIgnoreCase方法,不要使用 == !
==比较的是两个引用(变量)是否指向了同一个对象,而不是比较其内容。

62 我想修改一个String但是在String类中没找到编辑方法。
答:使用StringBuffer类。

String str = “…….”; //待处理的字符串
StringBuffer buffer = new StringBuffer(str); //使用该字符串初始化一个
StringBuf
fer
buffer.append(”…”); //调用StringBuffer的相关API来编辑字符串
String str2 = buffer.toString(); //获得编辑后的字符串
另外,如果你需要将多个字符串连接起来,请尽量避免使用+号直接连接,而是使用StringBuffer.append()方法。

63 我想处理日期/时间。
答:使用java.util.Date类。你可以使用java.text.SimpleDateFormat类来在String和Date间互相转换。

SimpleDateFormat formatter = new SimpleDateFormat(”yyyy-MM-dd HH:mm:ss”); //规定日期格式
Date date = formatter.parse(”2003-07-26 18:30:35″); //将符合格式的String转换为Date
String s = formatter.format(date); //将Date转换为符合格式的String
关于定义日期格式的详细信息请参见API。

转自:http://www.pconline.com.cn/pcedu/empolder/gj/java/0507/658828_1.html

十二月 15, 2006

近日发现很多人为mysql中文乱码问题所困扰。于是就这个问题做一下浅析。不正确的地方希望大家指正

/*
作者:我不是鱼
网址:http://www.phpfans.net
博客:http://www.phpfans.net/space/index.php/2
email:deng5765@163.com
*/

乱码产生原因

mysql字符编码是版本4.1引入的,支持多国语言,而且一些特性已经超过了其他的数据库系统。

我们可以在MySQL Command Line Client 下输入如下命令查看mysql的字符集

mysql> SHOW CHARACTER SET;
+———-+—————————–+———————+——–+
| Charset | Description | Default collation | Maxlen |
+———-+—————————–+———————+——–+
| big5 | Big5 Traditional Chinese | big5_chinese_ci | 2 |
| dec8 | DEC West European | dec8_swedish_ci | 1 |
| cp850 | DOS West European | cp850_general_ci | 1 |
| hp8 | HP West European | hp8_english_ci | 1 |
| koi8r | KOI8-R Relcom Russian | koi8r_general_ci | 1 |
| latin1 | cp1252 West European | latin1_swedish_ci | 1 |
| latin2 | ISO 8859-2 Central European | latin2_general_ci | 1 |
| swe7 | 7bit Swedish | swe7_swedish_ci | 1 |
| ascii | US ASCII | ascii_general_ci | 1 |
| ujis | EUC-JP Japanese | ujis_japanese_ci | 3 |
| sjis | Shift-JIS Japanese | sjis_japanese_ci | 2 |
| hebrew | ISO 8859-8 Hebrew | hebrew_general_ci | 1 |
| tis620 | TIS620 Thai | tis620_thai_ci | 1 |
| euckr | EUC-KR Korean | euckr_korean_ci | 2 |
| koi8u | KOI8-U Ukrainian | koi8u_general_ci | 1 |
| gb2312 | GB2312 Simplified Chinese | gb2312_chinese_ci | 2 |
| greek | ISO 8859-7 Greek | greek_general_ci | 1 |
| cp1250 | Windows Central European | cp1250_general_ci | 1 |
| gbk | GBK Simplified Chinese | gbk_chinese_ci | 2 |
| latin5 | ISO 8859-9 Turkish | latin5_turkish_ci | 1 |
| armscii8 | ARMSCII-8 Armenian | armscii8_general_ci | 1 |
| utf8 | UTF-8 Unicode | utf8_general_ci | 3 |
| ucs2 | UCS-2 Unicode | ucs2_general_ci | 2 |
| cp866 | DOS Russian | cp866_general_ci | 1 |
| keybcs2 | DOS Kamenicky Czech-Slovak | keybcs2_general_ci | 1 |
| macce | Mac Central European | macce_general_ci | 1 |
| macroman | Mac West European | macroman_general_ci | 1 |
| cp852 | DOS Central European | cp852_general_ci | 1 |
| latin7 | ISO 8859-13 Baltic | latin7_general_ci | 1 |
| cp1251 | Windows Cyrillic | cp1251_general_ci | 1 |
| cp1256 | Windows Arabic | cp1256_general_ci | 1 |
| cp1257 | Windows Baltic | cp1257_general_ci | 1 |
| binary | Binary pseudo charset | binary | 1 |
| geostd8 | GEOSTD8 Georgian | geostd8_general_ci | 1 |
| cp932 | SJIS for Windows Japanese | cp932_japanese_ci | 2 |
| eucjpms | UJIS for Windows Japanese | eucjpms_japanese_ci | 3 |
+———-+—————————–+———————+——–+
36 rows in set (0.02 sec)

更多mysql的字符集知识可以参考http://www.phpfans.net论坛的
http://www.phpfans.net/bbs/viewt … &extra=page%3D1
或者mysql官方的
http://dev.mysql.com/doc/refman/5.1/zh/charset.html

MySQL 4.1的字符集支持(Character Set Support)有两个方面:字符集(Character set)和排序方式(Collation)。对于字符集的支持细化到四个层次: 服务器(server),数据库(database),数据表(table)和连接(connection)。
查看系统的字符集和排序方式的设定可以通过下面的两条命令:

mysql> SHOW VARIABLES LIKE ‘character_set_%’;
+————————–+——————————————-+
| Variable_name | Value |
+————————–+——————————————-+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | latin1 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | D:\MySQL\MySQL Server 5.0\share\charsets\ |
+————————–+——————————————-+
8 rows in set (0.06 sec)

mysql> SHOW VARIABLES LIKE ‘collation_%’;
+———————-+——————-+
| Variable_name | Value |
+———————-+——————-+
| collation_connection | latin1_swedish_ci |
| collation_database | latin1_swedish_ci |
| collation_server | latin1_swedish_ci |
+———————-+——————-+
3 rows in set (0.02 sec)

上面列出的值就是系统的默认值。latin1默认校对规则是latin1_swedish_ci,默认是latin1的瑞典语排序方式.
为什么呢默认会是latin1_swedish_ci呢,追溯一下mysql历史很容易发现

1979年,一家瑞典公司Tcx欲开发一个快速的多线程、多用户数据库系统。Tcx 公司起初想利用mSQL和他们自己的快速低级例程 (Indexed Sequential Access Method,ISAM)去连接数据库表,然而,在一些测试以后得出结论:mSQL对其需求来说不够快速和灵活。这就产生了一个连接器数据库的新SQL接 口,它使用几乎和mSQL一样的API接口。这个API被设计成可以使那些由mSQL而写的第三方代码更容易地移植到MySQL。

相信如果mysql是中国开发的,那么汉语也是默认编码了

当然我们也可以自己需要修改mysql的默认字符集
在mysql配置文档my.ini,找到如下两句:

[mysql]

default-character-set=latin1

# created and no character set is defined
default-character-set=latin1

修改后面的值就可以。

这里不建议改,仍保留默认值
也就是说启动 mysql时,如果没指定指定一个默认的的字符集,这个值继承自配置文件中的;
此时 character_set_server 被设定为这个默认的字符集; 当创建一个新的数据库时,
除非明确指定,这个数据库的字符集被缺省设定为 character_set_server; 当选定了一个数据库时,
character_set_database 被设定为这个数据库默认的字符集; 在这个数据库里创建一张表时,
表默认的字符集被设定为 character_set_database,也就是这个数据库默认的字符集;
当在表内设置一栏时,除非明确指定,否则此栏缺省的字符集就是表默认的字符集。

这样问题就随之而来了,假如一数据库是gbk编码。如果访问数据库时没指定其的字符集是gbk。
那么这个值将继承系统的latin1,这样就做成mysql中文乱码。

乱码解决方法

要解决乱码问题,首先必须弄清楚自己数据库用什么编码。如果没有指明,将是默认的latin1。
我们用得最多的应该是这3种字符集 gb2312,gbk,utf8。

那么我们如何去指定数据库的字符集呢?下面也gbk为例

【在MySQL Command Line Client创建数据库 】

mysql> CREATE TABLE `mysqlcode` (
-> `id` TINYINT( 255 ) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ,
-> `content` VARCHAR( 255 ) NOT NULL
-> ) TYPE = MYISAM CHARACTER SET gbk COLLATE gbk_chinese_ci;
Query OK, 0 rows affected, 1 warning (0.03 sec)

mysql> desc mysqlcode;
+———+———————–+——+—–+———+—————-+
| Field | Type | Null | Key | Default | Extra |
+———+———————–+——+—–+———+—————-+
| id | tinyint(255) unsigned | NO | PRI | | auto_increment |
| content | varchar(255) | NO | | | |
+———+———————–+——+—–+———+—————-+
2 rows in set (0.02 sec)

其中后面的TYPE = MYISAM CHARACTER SET gbk COLLATE gbk_chinese_ci;
就是指定数据库的字符集,COLLATE (校勘),让mysql同时支持多种编码的数据库。

当然我们也可以通过如下指令修改数据库的字符集
alter database da_name default character set ‘charset’.

客户端以 gbk格式发送 ,可以采用下述配置:

SET character_set_client=’gbk’
SET character_set_connection=’gbk’
SET character_set_results=’gbk’

这个配置就等价于 SET NAMES ‘gbk’。
更多数据库知识请参考 http://www.phpfans.net/view.php?id=4

现在对刚才创建的数据库操作

mysql> use test;
Database changed

mysql> insert into mysqlcode values(null,’php爱好者’);
ERROR 1406 (22001): Data too long for column ‘content’ at row 1

没有指定字符集为gbk,插入时出错

mysql> set names ‘gbk’;
Query OK, 0 rows affected (0.02 sec)

指定字符集为 gbk

mysql> insert into mysqlcode values(null,’php爱好者’);
Query OK, 1 row affected (0.00 sec)

插入成功

mysql> select * from mysqlcode;
+—-+———–+
| id | content |
+—-+———–+
| 1 | php爱好着 |
+—-+———–+
1 row in set (0.00 sec)

在没有指定字符集gbk时读取也会出现乱码,如下

mysql> select * from mysqlcode;
+—-+———+
| id | content |
+—-+———+
| 1 | php??? |
+—-+———+
1 row in set (0.00 sec)

【在phpmyadmin创建数据库,并指定字符集】

p11.jpg

表类型根据自己需要选,这里选MyISAM(支持全文检索);
整理选择 gbk_chinese_ci 也就是gbk字符集
gbk_bin 简体中文, 二进制。gbk_chinese_ci 简体中文, 不区分大小写。

在刚才创建的数据库插入数据库

p2.jpg

再浏览时发现是乱码

p3.jpg

为什么呢?是因为数据库为gbk字符集,而我们操作时没有指定为gbk
回到数据库首页

p4.jpg

可以看到 mysql 连接校对默认的latin1_bin。我们将其改为gbk_chinese_ci

p5.jpg

再插入一条数据。看,这条已经正常了

p6.jpg

更多phpmyadmin乱码问题请参考本论坛的
http://www.phpfans.net/bbs/viewt … &extra=page%3D1

【解决php读取数据库乱码】

仍以数据库mysqlcode为例

CODE:
[复制到剪切板]
php
$conn
= mysql_connect(“localhost”,“root”,“”);
mysql_query(“set names ‘gbk’”);//这就是指定数据库字符集,一般放在连接数据库后面就系了
mysql_select_db(“test”);
$sql = “select * from mysqlcode”;
$result = mysql_query($sql,$conn);

?>
head>
meta http-equiv=“Content-Type” content=“text/html; charset=gb2312″ />
title>mysql 字符编码title>
head>

body>
table width=“300″ height=“32″ border=“1″ align=“center” cellpadding=“0″ cellspacing=“0″>
tr>
td width=“71″ align=“center”>idtd>
td width=“229″ align=“center”>内容td>
tr>
php while($row = mysql_fetch_assoc($result)){
echo

.$row[‘content’].;
}?>
table>
body>
html>
php mysql_free_result($result);?>

(非常全面的一个php技术网站,php爱好者站 http://www.phpfans.net 有相当丰富的文章和源代码.)
如果我们将mysql_query(”set names ‘gbk’”);注释掉,肯定时乱码
screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.style.cursor=’hand’; this.alt=’Click here to open new window\nCTRL+Mouse wheel to zoom in/out’;}” xsrc=”http://www.phpfans.net/images/l1.jpg” mce_src=”http://www.phpfans.net/images/l1.jpg” />

加上那句又正常了
screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.style.cursor=’hand’; this.alt=’Click here to open new window\nCTRL+Mouse wheel to zoom in/out’;}” xsrc=”http://www.phpfans.net/images/l2.jpg” mce_src=”http://www.phpfans.net/images/l2.jpg” />

一句话
你数据库用什么编码,在对数据库操作之前就set names ‘你的编码’;

终于完了,如果对大家有用就顶下啦。不正确的地方也请指正
php爱好者站 http://www.phpfans.net/view.php?id=4

ps:页面申明编码:在HTML代码HEAD里面,可以用来告诉浏览器网页采用了什么编码,目前中文网站开发中主要用的是GB2312和UTF-8两种编码。

转自:http://www.phpfans.net/article/fans_article_36.html

网上的英语学习资源集锦

网上的英语学习资源集锦

毫无疑问计算机网络——因特网是外语学习的有用工具,通过环球网和电子邮件我们能获得大量英语学习和教学的新信息和许多网上交流机会

,为了帮助英语爱好者通过因特网学习英语,笔者在网上收集了其中的一部分英语学习和教学资源,希望它们对英语学习有所帮助。

I.ESLbay资源 http://www.eslbay.com
ESLbay网有大量的英语学习方面的资源,包括英语学习,参考资料,ESL资源,语法,听力,翻译,词汇等等。是个最全面的学习英语资源网

1.国外英语学习教学网页
如果你想访问更多的网页,可通过搜索引擎来进行查寻,如:雅虎(Yahoo),你可以键入象:”TESL”, “ESL”, “TEFL”, “EFL”, “English

learning”,“English Study”, “Distance learning”等单词和短语进行搜索,你会找到你想要的英语学习和教学信息和资料。

1) 流行的英语学习网站
(1) http://www.eslcafe.com/ ; Dave ESL咖啡屋,英语学习好网址
2)http://www.eslbay.com/ ESL港湾,英语学习资源网。
3)http://www.tesol.net/tesl.html Kristna Pfaff 语言和言语学习和教学
4)http://www.aitech.ac.jp/~iteslj/ESL.html ; 英语网站链接
5)http://www.u-net.com/eflweb/ ; EFLWEB 主页
6)http://www.nceltr.mq.edu.au/ ; 因特网上ESL
7)http://eleaston.com 丰富实用的英语学习和教学的网页.
8)http://www.study.com/resources.html 英语学习资源
9 http://www.teachingenglish.org.uk 英语教学
10)http://www.unex.ucla.edu/online/ ; 英语在线课程
11)http://www.cme.cn/ CME免费英语资源
12)http://www.stuff.co.uk/wicked.htm Wicked Stuff英语语言学习
13)http://www.planetenglish.com ; 世界英语语言资源中心
14)http://www.study.com ; Comenius 免费网上学校
15)http://edvista.com/claire/internet-esl.html ; Claire Bradin 个人网页
16)http://www.schackne.com ; Steve Schackne 英语教师资源网页
17)http://www.lapasserelle.com/lm/ Michael A. Riccioli交互性和非交互性英语练习网页
18)http://www.esl-lab.com/party/partscr1.htm ; Randall学生英语测试网页
19) http://www.eslpartyland.com PartyLand ESL
20)http://teflchina.com/ ; 在中国的老外讨论英语教学
21)http://www.online-english.britishcouncil.org/ 在线课程
22)http://www.internetesl.com/ 儿童英语
23)http://marksesl.com Mark EST 世界
24)http://www.nelliemuller.com ELT Projects

2 .英语?
1)http://www.aitech.ac.jp/~iteslj/links/search.cgi?query=Listening
2)http://www.esl-lab.com/ Randall ESL 听力室
3)ftp://149.2.140.10/realaudio/voa/english/ VOA FTP
3 .英语考试
3.1 TOEFL 托福
1)http://www.stuff.co.uk/toefl.htm TOEFL 练习
2)http://osu.orst.edu/~larsonan ;
3)http://www.testwise.com/review.html
4)http://www.eslbay.com/
3.2 GRE
1)http://www.gre.org ; GRE 考试
3.3 IELTS 雅思
1http://www.britishcouncil.org.cn/english/education/exams/new.htm 中国雅思考试
2)http://www.ielts.org/ 雅思
3)http://www.cme.cn/ CME免费英语资源
4 .英语在线字典
1)http://dictionary.cambridge.org/ 剑桥在线字典
2http://www.m-w.com Mreeiam-Webster 在线字典
3)http://www.linguistics.ruhr-uni-bochum.de/ccsd/ ; Collins-Cobuild 学生字典
5 .英语语法
1)http://www.edunet.com/english/grammar/ 英语语法在线
2)http://www.aitech.ac.jp/~iteslj/quizzes/grammar.html 英语语法测试
6. 语言与背景知识
1) http://www.refdesk.com/ 虚拟参考资料信息台
2)http://www.nhmccd.edu/contracts/lrc/kc/decade90.html 美国历史文化背景
3http://www.night.net/kthanks.html ; 关于感恩节
4)http://www.educationuk.org.cn/ ; 英国教育文化
5)http://carla.acad.umn.edu/intercultural.html ; 文化与语言学习
7. 英语图书馆
1)http://www.ipl.org/ 网上公共图书馆
2)http://the-tech.mit.edu/Shakespeare/ Shakespeare 作品
3)http://www.encarta.msn.com/encartahome.asp Encarta 百科全书
4)http://www.adventure.com/encyclopedia 知识探索百科
5)http://classics.mit.edu/ 经典名著文库
8. 英语学习游戏
1)http://www.aitech.ac.jp/~iteslj/links/ESL/Games/ ; 英语学习游戏
2)http://www.wuziegames.com/index.html
9. 故事
1)http://www.CandlelightStories.com/ ; 故事之旅
10. 期刊和杂志
1)http://www.well.com/www/sokolik/ ; TESL 电子杂志
2)http://www.ling.lancs.ac.uk/staff/visitors/kenji/referenc.htm ELT和语言学
3)http://www.its-online.com/ 英语学习者的报纸
4)http://learning.turner.com/newsroom ; CNN 新闻
5)http://www.guardian.co.uk 卫报英语教师资料
11. 电影和电视剧
1http://www.script-o-rama.com/ 剧本网站
2)http://us.imdb.com 电影数据库
3http://www.hollywood.com/ Hollywood
12. 英语歌词
1)http://www.lyrics.ch/ ;
13. 交英语笔友
1)http://www.epals.com/ ; 课堂笔友交换
2)http://keypals.com/ ; 笔友
3) http://www.wfi.fr/volterre/keypals.html 笔友连接
14. 英语学习软件
1)http://www.shareware.com/ 软件库
2)http:www.eslbay.com/ ESL 资源
15. 出国学习
1http://studyusa.com/ ; 到美国学习。
2http://www.collegenet.com/ ; 美国大学网。
3http://www.arels.org.uk/ ; 英国文化委员会承认的200所院校和所设课程。
4http://sabmac.studyabroad.com/simplehtml/languages/english_canada.html ; 到加拿大学习。
16.写作
1)www.powa.org
2) http://www.esc.edu/write
3)www.artsedge.kennedy-center.org
17. 成语俚语 http://home.t-online.de/home/toni.goeller/idiom_wm/index.html

ii. 国内英语学习网页
你想获得更多的国内英语学习网页,用中文yahoo和sohu 进行搜索,键入这些关键词“英语学习”“学习英语”“英语教学”“英语口语”“

英语考试”“英语阅读”“英语听说” “英语翻译”“英语资源”“英语资料”等
1. 英文锁定 http://www.Icansay.com/
2. 旺旺英语 englishww.com
3.英语百思特http://www.yybest.com
4. CME免费英语资源 http://www.cme.cn/
5. 英语之声 http://www.english.ac.cn
6. 中英合作英语通 in2english.com.cn
7. 英语中国 http://www.englishchina.com/
8. 英语在线 http://www.englishabc.com/
9. 时尚英语 http://www.oh100.com/huayuan/english/
10. 网络英语 http://www.englishlover.net/
11. 英语麦当劳 english23.6to23.com/
12. 搜狐在线学习 learning.sohu.com/lan/
13. 新东方教育在线 http://www.neworiental.org/
14. 中华网英语在线 edu.china.com/zh_cn/elearn/index.html
15. 庄子英语频道 http://www.zhuangzi.com/en/index.asp
16. English Town http://www.englishtown.com/master/home/
17. 洪恩在线 http://www.hongen.com/eng/index.htm
18. 空中英语教室 http://www.studioclassroom.com
19. 英语直通车 http://www.englishfree.com.cn/
20. 英语辅导报http://www.ecp.com.cn/ecp/index.htm
21. 数码英语http://www.englishabc.com/index.htm
22. 世博英语http://www.360abc.com/
23. 英语园 ymw.myrice.com
24. Tomhttp://language.tom.com/
25. 百灵网校http://edu.beelink.com.cn/73187891991281664/index.shtml
26. 听力快车http://www.listeningexpress.net/
27. 法律英语http://www.lawspirit.com/
28. 锐角英语http://www.aasky.com/english/index.asp
29. 英语听力http://www.putclub.org/
30. 52abchttp://www.52abc.com/
31. English 4uhttp://www.english4us.com/
32. 英语时空http://www.yysk.net/
33. 英语杂货铺http://vip.6to23.com/sentry/
34. 英语即时通http://www.dreye.com.cn/english/index.html
35. 征服英语http://www.sen21.com/
36. 儿童英语乐园http://www.etyyy.com/
37. 万千英语族http://www.iselong.com/
38 沪江英语
39 点点英语

iii. 国内外国报刊杂志推荐
1.中国国际广播电台http://www.cri.com.cn
2.中国日报http://www.chinadaily.com.cn
3.人民日报英文版http://english.peopledaily.com.cn/home.html
4. 21世纪报http://www.21stcentury.com.cn/index.php
5. 时代文摘http://www.timedigest.com/
6.南华早报 香港最大的英文日报http://www.scmp.com/
7.今日美国 彩色版全国性日报http://www.usatoday.com
8.《时代》周刊 美国最大的新闻周刊http://www.time.com
9.《新闻周刊》美国第二大新闻周刊http://www.msnbc.com
10.《读者文摘》美国发行量最大的普及综合性文摘月刊http://www.readersdigest.com/
11.美联社http://www.ap.org
12.ABC新闻http://www.abcnews.com
13.财富http://www.fortune.com/
14.金融时报 英国著名财经日报http://www.ft.com
15.国际先驱论坛报 http://www.iht.com
16.纽约时报 美国一大报纸http://www.nytimes.com
17.华盛顿邮报 美国第二大报http://www.washingtonpost.com
18.洛杉矾时报 美国西部最大的日报,美国的第三大报http://www.latimes.com
19.华尔街日报 美国金融界权威的专业报纸http://www.wsj.com
20.《基督教科学箴言报》美国很有影响的周报http://www.csmonitor.com
21.泰晤士报 英国著名报纸 http://www.the-times.co.uk/
22.卫报 英国著名日报 http://www.guardian.co.uk/

转自:http://bbs.blueidea.com/thread-2261301-1-1.html