12/31/2005

Java多线程程序设计详细解析

一、理解多线程

  多线程是这样一种机制,它允许在程序中并发执行多个指令流,每个指令流都称为一个线程,彼此间互相独立。

  线程又称为轻量级进程,它和进程一样拥有独立的执行控制,由操作系统负责调度,区别在于线程没有独立的存储空间,而是和所属进程中的其它线程共享一个存储空间,这使得线程间的通信远较进程简单。

  多个线程的执行是并发的,也就是在逻辑上“同时”,而不管是否是物理上的“同时”。如果系统只有一个CPU,那么真正的“同时”是不可能的,但是由于CPU的速度非常快,用户感觉不到其中的区别,因此我们也不用关心它,只需要设想各个线程是同时执行即可。

  多线程和传统的单线程在程序设计上最大的区别在于,由于各个线程的控制流彼此独立,使得各个线程之间的代码是乱序执行的,由此带来的线程调度,同步等问题,将在以后探讨。

  二、在Java中实现多线程

  我们不妨设想,为了创建一个新的线程,我们需要做些什么?很显然,我们必须指明这个线程所要执行的代码,而这就是在Java中实现多线程我们所需要做的一切!

  真是神奇!Java是如何做到这一点的?通过类!作为一个完全面向对象的语言,Java提供了类java.lang.Thread来方便多线程编程,这个类提供了大量的方法来方便我们控制自己的各个线程,我们以后的讨论都将围绕这个类进行。

  那么如何提供给 Java 我们要线程执行的代码呢?让我们来看一看 Thread 类。Thread 类最重要的方法是run(),它为Thread类的方法start()所调用,提供我们的线程所要执行的代码。为了指定我们自己的代码,只需要覆盖它!

  方法一:继承 Thread 类,覆盖方法 run(),我们在创建的 Thread 类的子类中重写 run() ,加入线程所要执行的代码即可。下面是一个例子:

  public class MyThread extends Thread
  {
  int count= 1, number;
  public MyThread(int num)
  {
  number = num;
  System.out.println
  ("创建线程 " + number);
  }
  public void run() {
  while(true) {
  System.out.println
  ("线程 " + number + ":计数 " + count);
  if(++count== 6) return;
  }
  }
  public static void main(String args[])
  {
  for(int i = 0;
  i 〈 5; i++) new MyThread(i+1).start();
  }
  }
  
  这种方法简单明了,符合大家的习惯,但是,它也有一个很大的缺点,那就是如果我们的类已经从一个类继承(如小程序必须继承自 Applet 类),则无法再继承 Thread 类,这时如果我们又不想建立一个新的类,应该怎么办呢?

  我们不妨来探索一种新的方法:我们不创建Thread类的子类,而是直接使用它,那么我们只能将我们的方法作为参数传递给 Thread 类的实例,有点类似回调函数。但是 Java 没有指针,我们只能传递一个包含这个方法的类的实例。

  那么如何限制这个类必须包含这一方法呢?当然是使用接口!(虽然抽象类也可满足,但是需要继承,而我们之所以要采用这种新方法,不就是为了避免继承带来的限制吗?)

  Java 提供了接口 java.lang.Runnable 来支持这种方法。

  方法二:实现 Runnable 接口

  Runnable接口只有一个方法run(),我们声明自己的类实现Runnable接口并提供这一方法,将我们的线程代码写入其中,就完成了这一部分的任务。但是Runnable接口并没有任何对线程的支持,我们还必须创建Thread类的实例,这一点通过Thread类的构造函数public Thread(Runnable target);来实现。下面是一个例子:

  public class MyThread implements Runnable
  {
  int count= 1, number;
  public MyThread(int num)
  {
  number = num;
  System.out.println("创建线程 " + number);
  }
  public void run()
  {
  while(true)
  {
  System.out.println
  ("线程 " + number + ":计数 " + count);
  if(++count== 6) return;
  }
  }
  public static void main(String args[])
  {
  for(int i = 0; i 〈 5;
  i++) new Thread(new MyThread(i+1)).start();
  }
  }
  
  严格地说,创建Thread子类的实例也是可行的,但是必须注意的是,该子类必须没有覆盖 Thread 类的 run 方法,否则该线程执行的将是子类的 run 方法,而不是我们用以实现Runnable 接口的类的 run 方法,对此大家不妨试验一下。

  使用 Runnable 接口来实现多线程使得我们能够在一个类中包容所有的代码,有利于封装,它的缺点在于,我们只能使用一套代码,若想创建多个线程并使各个线程执行不同的代码,则仍必须额外创建类,如果这样的话,在大多数情况下也许还不如直接用多个类分别继承 Thread 来得紧凑。

  综上所述,两种方法各有千秋,大家可以灵活运用。

  下面让我们一起来研究一下多线程使用中的一些问题。

  三、线程的四种状态

  1. 新状态:线程已被创建但尚未执行(start() 尚未被调用)。

  2. 可执行状态:线程可以执行,虽然不一定正在执行。CPU 时间随时可能被分配给该线程,从而使得它执行。

  3. 死亡状态:正常情况下 run() 返回使得线程死亡。调用 stop()或 destroy() 亦有同样效果,但是不被推荐,前者会产生异常,后者是强制终止,不会释放锁。

  4. 阻塞状态:线程不会被分配 CPU 时间,无法执行。

  四、线程的优先级

  线程的优先级代表该线程的重要程度,当有多个线程同时处于可执行状态并等待获得 CPU 时间时,线程调度系统根据各个线程的优先级来决定给谁分配 CPU 时间,优先级高的线程有更大的机会获得 CPU 时间,优先级低的线程也不是没有机会,只是机会要小一些罢了。

  你可以调用 Thread 类的方法 getPriority() 和 setPriority()来存取线程的优先级,线程的优先级界于1(MIN_PRIORITY)和10(MAX_PRIORITY)之间,缺省是5(NORM_PRIORITY)。

  五、线程的同步

  由于同一进程的多个线程共享同一片存储空间,在带来方便的同时,也带来了访问冲突这个严重的问题。Java语言提供了专门机制以解决这种冲突,有效避免了同一个数据对象被多个线程同时访问。

  由于我们可以通过 private 关键字来保证数据对象只能被方法访问,所以我们只需针对方法提出一套机制,这套机制就是 synchronized 关键字,它包括两种用法:synchronized 方法和 synchronized 块。

  1. synchronized 方法:通过在方法声明中加入 synchronized关键字来声明 synchronized 方法。如:

  public synchronized void accessVal(int newVal);
  
  synchronized 方法控制对类成员变量的访问:每个类实例对应一把锁,每个 synchronized 方法都必须获得调用该方法的类实例的锁方能执行,否则所属线程阻塞,方法一旦执行,就独占该锁,直到从该方法返回时才将锁释放,此后被阻塞的线程方能获得该锁,重新进入可执行状态。

  这种机制确保了同一时刻对于每一个类实例,其所有声明为 synchronized 的成员函数中至多只有一个处于可执行状态(因为至多只有一个能够获得该类实例对应的锁),从而有效避免了类成员变量的访问冲突(只要所有可能访问类成员变量的方法均被声明为 synchronized)。

  在 Java 中,不光是类实例,每一个类也对应一把锁,这样我们也可将类的静态成员函数声明为 synchronized ,以控制其对类的静态成员变量的访问。

  synchronized 方法的缺陷:若将一个大的方法声明为synchronized 将会大大影响效率,典型地,若将线程类的方法 run() 声明为 synchronized ,由于在线程的整个生命期内它一直在运行,因此将导致它对本类任何 synchronized 方法的调用都永远不会成功。当然我们可以通过将访问类成员变量的代码放到专门的方法中,将其声明为 synchronized ,并在主方法中调用来解决这一问题,但是 Java 为我们提供了更好的解决办法,那就是 synchronized 块。

  2. synchronized 块:通过 synchronized关键字来声明synchronized 块。语法如下:

  synchronized(syncObject)
  {
  //允许访问控制的代码
  }
  
  synchronized 块是这样一个代码块,其中的代码必须获得对象 syncObject (如前所述,可以是类实例或类)的锁方能执行,具体机制同前所述。由于可以针对任意代码块,且可任意指定上锁的对象,故灵活性较高。

  六、线程的阻塞

  为了解决对共享存储区的访问冲突,Java 引入了同步机制,现在让我们来考察多个线程对共享资源的访问,显然同步机制已经不够了,因为在任意时刻所要求的资源不一定已经准备好了被访问,反过来,同一时刻准备好了的资源也可能不止一个。为了解决这种情况下的访问控制问题,Java 引入了对阻塞机制的支持。

  阻塞指的是暂停一个线程的执行以等待某个条件发生(如某资源就绪),学过操作系统的同学对它一定已经很熟悉了。Java 提供了大量方法来支持阻塞,下面让我们逐一分析。

  1. sleep() 方法:sleep() 允许 指定以毫秒为单位的一段时间作为参数,它使得线程在指定的时间内进入阻塞状态,不能得到CPU 时间,指定的时间一过,线程重新进入可执行状态。典型地,sleep() 被用在等待某个资源就绪的情形:测试发现条件不满足后,让线程阻塞一段时间后重新测试,直到条件满足为止。

  2. suspend() 和 resume() 方法:两个方法配套使用,suspend()使得线程进入阻塞状态,并且不会自动恢复,必须其对应的resume() 被调用,才能使得线程重新进入可执行状态。典型地,suspend() 和 resume() 被用在等待另一个线程产生的结果的情形:测试发现结果还没有产生后,让线程阻塞,另一个线程产生了结果后,调用 resume() 使其恢复。

  3. yield() 方法:yield() 使得线程放弃当前分得的 CPU 时间,但是不使线程阻塞,即线程仍处于可执行状态,随时可能再次分得 CPU 时间。调用 yield() 的效果等价于调度程序认为该线程已执行了足够的时间从而转到另一个线程。

  4. wait() 和 notify() 方法:两个方法配套使用,wait() 使得线程进入阻塞状态,它有两种形式,一种允许 指定以毫秒为单位的一段时间作为参数,另一种没有参数,前者当对应的 notify() 被调用或者超出指定时间时线程重新进入可执行状态,后者则必须对应的 notify() 被调用。

  初看起来它们与 suspend() 和 resume() 方法对没有什么分别,但是事实上它们是截然不同的。区别的核心在于,前面叙述的所有方法,阻塞时都不会释放占用的锁(如果占用了的话),而这一对方法则相反。

  上述的核心区别导致了一系列的细节上的区别。

  首先,前面叙述的所有方法都隶属于 Thread 类,但是这一对却直接隶属于 Object 类,也就是说,所有对象都拥有这一对方法。初看起来这十分不可思议,但是实际上却是很自然的,因为这一对方法阻塞时要释放占用的锁,而锁是任何对象都具有的,调用任意对象的 wait() 方法导致线程阻塞,并且该对象上的锁被释放。

  而调用 任意对象的notify()方法则导致因调用该对象的 wait() 方法而阻塞的线程中随机选择的一个解除阻塞(但要等到获得锁后才真正可执行)。

  其次,前面叙述的所有方法都可在任何位置调用,但是这一对方法却必须在 synchronized 方法或块中调用,理由也很简单,只有在synchronized 方法或块中当前线程才占有锁,才有锁可以释放。

  同样的道理,调用这一对方法的对象上的锁必须为当前线程所拥有,这样才有锁可以释放。因此,这一对方法调用必须放置在这样的 synchronized 方法或块中,该方法或块的上锁对象就是调用这一对方法的对象。若不满足这一条件,则程序虽然仍能编译,但在运行时会出现IllegalMonitorStateException 异常。

  wait() 和 notify() 方法的上述特性决定了它们经常和synchronized 方法或块一起使用,将它们和操作系统的进程间通信机制作一个比较就会发现它们的相似性:synchronized方法或块提供了类似于操作系统原语的功能,它们的执行不会受到多线程机制的干扰,而这一对方法则相当于 block 和wakeup 原语(这一对方法均声明为 synchronized)。

  它们的结合使得我们可以实现操作系统上一系列精妙的进程间通信的算法(如信号量算法),并用于解决各种复杂的线程间通信问题。关于 wait() 和 notify() 方法最后再说明两点:

  第一:调用 notify() 方法导致解除阻塞的线程是从因调用该对象的 wait() 方法而阻塞的线程中随机选取的,我们无法预料哪一个线程将会被选择,所以编程时要特别小心,避免因这种不确定性而产生问题。

  第二:除了 notify(),还有一个方法 notifyAll() 也可起到类似作用,唯一的区别在于,调用 notifyAll() 方法将把因调用该对象的 wait() 方法而阻塞的所有线程一次性全部解除阻塞。当然,只有获得锁的那一个线程才能进入可执行状态。

  谈到阻塞,就不能不谈一谈死锁,略一分析就能发现,suspend() 方法和不指定超时期限的 wait() 方法的调用都可能产生死锁。遗憾的是,Java 并不在语言级别上支持死锁的避免,我们在编程中必须小心地避免死锁。

  以上我们对 Java 中实现线程阻塞的各种方法作了一番分析,我们重点分析了 wait() 和 notify()方法,因为它们的功能最强大,使用也最灵活,但是这也导致了它们的效率较低,较容易出错。实际使用中我们应该灵活使用各种方法,以便更好地达到我们的目的。

  七、守护线程

  守护线程是一类特殊的线程,它和普通线程的区别在于它并不是应用程序的核心部分,当一个应用程序的所有非守护线程终止运行时,即使仍然有守护线程在运行,应用程序也将终止,反之,只要有一个非守护线程在运行,应用程序就不会终止。守护线程一般被用于在后台为其它线程提供服务。

  可以通过调用方法 isDaemon() 来判断一个线程是否是守护线程,也可以调用方法 setDaemon() 来将一个线程设为守护线程。

  八、线程组

  线程组是一个 Java 特有的概念,在 Java 中,线程组是类ThreadGroup 的对象,每个线程都隶属于唯一一个线程组,这个线程组在线程创建时指定并在线程的整个生命期内都不能更改。

  你可以通过调用包含 ThreadGroup 类型参数的 Thread 类构造函数来指定线程属的线程组,若没有指定,则线程缺省地隶属于名为 system 的系统线程组。

  在 Java 中,除了预建的系统线程组外,所有线程组都必须显式创建。在 Java 中,除系统线程组外的每个线程组又隶属于另一个线程组,你可以在创建线程组时指定其所隶属的线程组,若没有指定,则缺省地隶属于系统线程组。这样,所有线程组组成了一棵以系统线程组为根的树。

  Java 允许我们对一个线程组中的所有线程同时进行操作,比如我们可以通过调用线程组的相应方法来设置其中所有线程的优先级,也可以启动或阻塞其中的所有线程。

  Java 的线程组机制的另一个重要作用是线程安全。线程组机制允许我们通过分组来区分有不同安全特性的线程,对不同组的线程进行不同的处理,还可以通过线程组的分层结构来支持不对等安全措施的采用。

  Java 的 ThreadGroup 类提供了大量的方法来方便我们对线程组树中的每一个线程组以及线程组中的每一个线程进行操作。

  九、总结

  在本文中,我们讲述了 Java 多线程编程的方方面面,包括创建线程,以及对多个线程进行调度、管理。我们深刻认识到了多线程编程的复杂性,以及线程切换开销带来的多线程程序的低效性,这也促使我们认真地思考一个问题:我们是否需要多线程?何时需要多线程?

  多线程的核心在于多个代码块并发执行,本质特点在于各代码块之间的代码是乱序执行的。我们的程序是否需要多线程,就是要看这是否也是它的内在特点。

  假如我们的程序根本不要求多个代码块并发执行,那自然不需要使用多线程;假如我们的程序虽然要求多个代码块并发执行,但是却不要求乱序,则我们完全可以用一个循环来简单高效地实现,也不需要使用多线程;只有当它完全符合多线程的特点时,多线程机制对线程间通信和线程管理的强大支持才能有用武之地,这时使用多线程才是值得的。

全面认识JAVA

以下是Java标准技术的一些要点:
一、Java的跨平台性,即一次编译到处运行
简单地说Java的跨平台性就是指,编译后的Java程序可直接在不同的平台上运行而不用重新编译,这一特性使得Java随着Web应用的普及而迅速普及起来。而Java的跨平台性是如何实现的呢?这就要理解Java虚拟机和字节码的概念。   实际上,编译后的Java代码并不是传统的二进制代码(如Windows下的.exe文件),而是Java字节码,这种字节码文件是不能直接在操作系统上执行的。要想在一个操作系统上运行一个Java程序必须有一个中间环节来负责将Java字节码解释成二进制码,这个中间环节就是Java虚拟机(简称JVM)。由于目前大多数操作系统已经实现了JVM,所以Java轻松实现跨平台性。

  二、面象对象技术
  Java全面支持面象对象技术,这体现在Class(类)是Java程序构成的基本单元,一个Java程序通常由许多Class组成,而且这些Class还会有一定的继承关系,Java支持Class的单继承,从而使类之间的继承关系更明确。继承的结果产生类的多态性,类的多态本质上讲就是可以用父类的引用访问继承类的实现(子类对象),类的这种多态性最终形成了组件对象模型的基础,即通过接口(父类)访问实现(子类)。

  三、Java中的I/O操作
  Java中以字节流(InputStream和OutputStream)、节符流(Reader和Writer)来分别读写二进制数据和字符数据,使用非常简单有效。Java类库中的File类不仅提供文件操作而且还包含文件夹操作,如下面这几行代码可以列出C盘根目录下的所有文件:

File f=new File("c://");
String [] m_dir= f.list();
for(int i=0;i");
out.println("");
out.println("Hello world");
out.println("");
out.println("");
}catch(IOException e){}
}
}

将这个Class文件编译后放至Tomcat\webapps\examples\WEB-INF\classes下,然后在浏览器地址栏里输入http://127.0.0.1:8080/examples/servlet/Myservlet即可看到 Hello world出现在浏览器中。

(四)Java Server Page (JSP)

同Servlet相似的是,JSP运行于Web服务器端,并且也需要Tomcat之类的容器。不同的是,由于JSP是将Java代码嵌在html标记里(同ASP一样用),JSP的界面设计同后台开发人员的工作可以有效分离。可以想像让开发人员用Servlet写一个花捎的Web页面有多困难,所以JSP+Servlet混合Web应用是比较理想的选择。 看起来JSP同ASP的实现机制大同小异,其实也存在着本质的区别。所有的ASP页面都是解释运行的,而JSP页在第一次被请求时会被编译,再以后的客户请求都是直接运行服务器上的.class文件(在Tomcat的Work文件夹下),所以JSP要比ASP速度上快许多。

(五)Java Beans Java Bean

是可复用的组件,对Java Bean并没有严格的规范,理论上讲,任何一个Java类都可以是一个Bean。但通常情况下,由于Java Bean是被容器所创建(如Tomcat)的,所以Java Bean应具有一个无参的构造器,另外,通常Java Bean还要实现Serializable接口用于实现Bean的持久性。

(六)Enterprise Java Beans (EJB)

Java Bean实际上相当于微软COM模型中的本地进程内COM组件,它是不能被跨进程访问的。Enterprise Java Bean 相当于DCOM,即分布式组件。它是基于Java的远程方法调用(RMI)技术的,所以EJB可以被远程访问(跨进程、跨计算机)。但EJB必须被布署在诸如Webspere、WebLogic这样的容器中,EJB客户从不直接访问真正的EJB组件,而是通过其容器访问。EJB容器是EJB组件的代理,EJB组件由容器所创建和管理。客户通过容器来访问真正的EJB组件。

这种模型很像COM+管理器,其实EJB容器正是起到COM+管理器的作用,只是EJB组件相对COM组件来说更易用、更安全。

总的说来,Java作为面象对象技术的一个代表,在当今商业应用中更容易开发出高效的、多层的分布式应用程序,而且,由于Java技术有很强的健壮性和易用性,加上同UML应用的结合,开发一个商业应用软件的周期会大大缩短,所以Java会有不错的前景。

12/30/2005

人生体会

人生的五个球


可口可乐总裁曾说:我们每个人都像小丑,玩着五个球,五个球是你的: 工作健康家庭朋友灵魂
这五个球只有一个是用橡胶做的,掉下去会弹起来,那就是工作。另外四个球都是用玻璃做的,掉了,就碎了。
拥有并平衡处理好了这五个球,人生才幸福!




幸福在哪里?

草原上有对狮子母子。
小狮子问母狮子:「妈,幸福在哪里?」
母狮子说:「幸福就在你的尾巴上ㄚ…」
于是,小狮子不断追着尾巴跑…但始终咬不到。
母狮子笑道:「傻瓜!幸福不是这样得到的。

只要你昂首向前走,幸福就会一直跟随着你!



人生幸福三诀
不要拿自己的错误来惩罚自己
不要拿自己的错误来惩罚别人
不要拿别人的错误来惩罚自己

有了这三条,人生就不会太累了……



赞扬、专心、感恩、知足

记得称赞一起工作的人。
指正别人时,要先维护他的自尊。
用心于所做的事,尽力把它做到最好。
想一想今天的表现是否与薪水相当。
欢喜领受这一天,由衷感恩和知足。
依自己意愿安排生活,但不与人比较。



当机立断


印度有一位知名的哲学家,天生一股特殊的文人气质,不知迷死了多少女人。
某天,一个女子来敲他的门,她说:让我作你的妻子吧!错过我,你将再也找不到我更爱你的女人了!哲学家虽然也很中意她,但仍回答说:让我考虑考虑!
事后,哲学家用他一贯研究学问的精神,将结婚和不结婚的好、坏所在,分别条列下来,才发现,好坏均等,真不知该如何抉择?于是,他陷入长期的苦恼之中,无论他又找出了什么新的理由,都只是徒增选择的困难。
最后,他得出一个结论──人若在面临抉择而无法取舍的时候,应该选择自己尚未经验过的那一个。不结婚的处境我是清楚的,但结婚会是个怎样的情况,我还不知道?对!我该答应那个女人的央求。
哲学家来到女人的家中,问女人的父亲说:「你的女儿呢?请你告诉她,我考虑清楚了,我决定娶她为妻!」
女人的父亲冷漠回答:你来晚了十年,我女儿现在已经是三个孩子的妈了!
哲学家听了,整个人几乎崩溃,他万万没有想到,向来自以为傲的哲学头脑,最后换来的竟然是一场悔恨。尔后二年,哲学家抑郁成疾,临死前,将自己所有的著作丢入火堆,只留下一段对人生的批注──如果将人生一分为二
前半段人生哲学是「不犹豫」,
后半段人生哲学是「不后悔」。


面对人生,既要有当机立断决心,
更要有永不后悔的气魄!




敢于竞争


女儿第一次将男朋友带回家里,父亲在客厅里陪着女儿和男朋友天南地北的聊着。
父亲问女儿的男友:「你喜欢打球吗?」男朋友回答:「不,我不是很喜欢打球,我大部分的时间都用来看书,听音乐.」
父亲继续问:「那喜欢赌马吗?」男朋友:「不,我不赌博的。」
父亲又问:「你喜欢看电视上的田径或是球类竞赛吗?」男朋友:「不,对于这些有关竞赛性的活动我没什么兴趣。」

男朋友离开后女儿问父亲:「爸,你觉得这个人怎样?」
父亲回答:「你和他做朋友我不反对,但如果你想嫁给他,我则是坚决不赞成」
女儿讶异的问:「为什么呢?」
父亲:「一般人养黄鹂鸟,绝不会将黄鹂鸟关在自家的鸟笼里,主人会带到茶馆,那儿有许多的黄鹂鸟。这只新的鸟儿,在茶馆听到同类此起彼落的鸟鸣声,便会不甘示弱,也引吭高歌。这是养鸟人训练黄鹂鸟的诀窍。」
女儿问:「这和我的男友有什么关系呢?」
父亲:「养鸟人刺激黄鹂鸟竞争的天性,来训练黄鹂鸟的展露优美的歌声,若是没有竞争,这只黄鹂鸟可能就终生暗哑了,不能发出任何叫声,主要是因为,没有其它的鸟儿来与他比较。」
父亲继续道:「你的这一位男朋友,经过我刚刚与他的一番谈话,发现他既不运动,也不喜欢运动,也不喜欢赌博、球赛,排斥一切所有竞赛性的活动,我认为,像这样子的男人,将来恐怕难以有所成就,所以反对你嫁给他。」

太多人因为恐惧失败,而不愿意参与竞赛,透过黄鹂鸟的启示,我们终于了解,原来竞赛的重点,不在于胜负,而在于每一次投入,都能让自己更加成长。




学会思考、学会休息

有一个探险家,到南美的丛林中,找寻古印加帝国文明的遗迹 ..
他雇用了当地的作为向导及挑夫,一行人浩浩荡荡地朝着丛林的深处去。
那群土著的脚力过人,尽管他们背负笨重行李, 仍是健步如飞。在整个队伍的行进过程中, 总是探险家先喊着需要休息,让所有土著停下来等候他。
探险家虽然体力跟不上,但希望能够早一点到达目的地,一偿平生的宿愿,好好地来研究古印加帝国文明的奥秘。
到了第四天,探险家一早醒来,便立即催促著打点行李,准备上路。不料领导土著的翻译人员却拒绝行动,令探险家为之恼怒不已。经过详细的沟通,探险家终于了解,这群土著自古以来便流传着一项神秘的习俗,在赶路时, 皆会竭尽所能地拼命向前冲,但每走上三天,便需要休息一天。
探险家对于这项习俗好奇不已,询问翻译的向导,为什么在他们的部族中,会留下这么耐人寻味的休息方式 。向导很庄严地回答探险家的问题,道:「那是为了能够让我们的灵魂,能够追得上我们赶了三天路的疲惫身体--]
探险家听了向导的解释,心中若有所悟,沉思了许久,终于展颜微笑,心中深深认为,这是他这一趟探险当中,最好的一项收获。

凡事全力以赴,让自己动作起来时,浑身充满无比的冲劲,使得我们的灵魂几乎也跟不上这样的动作,这是真正用心做事时,最美好的境界。 应该休息时,则能够完全地放松自我,让疲惫的身心, 获得完整的复原机会,好让灵魂得以追得上充满干劲时的步调。
掌握工作及休息之间的脉动,是让我们持续拥有无穷动力的宝贵智慧。



停的时候,是为了欣赏人生


欧洲阿尔卑斯山中,有一条风景很美的大道上,挂着一句标语,写着:「慢慢走请注意欣赏!」
现代人看起来太忙了,许多人在这忙碌的世界上过活,手脚不停。就好像在阿尔卑斯山上旅行,乘车匆匆忙忙的过去。没有什么时间回一回头,或着停一停步子,欣赏一下风景。结果,使这原本丰富美丽的世界,在我们眼中空无所有,只剩下了匆忙和紧张,劳碌和忧愁。
体味人生每一天



别和自己生气


在古老有一个叫爱地巴的人,每次和人起争执、生气的时候,就以很快的速度跑回家去,绕着自己的房子和土地跑三圈,然后坐在田地边喘气。
爱地巴工作非常勤劳,他的房子越来越大,土地也越来越广......但不管房地有多大,只要与人争论生气,他还是会绕着房子和土地绕三圈。
「爱地巴为何每次生气都绕着房子和土地绕三圈?」所有认识他的人心里都起了疑惑,但是不管怎么问他,爱地巴都不愿意说。
直到有一天,爱地巴很老了,他的房地又已经太广大了。他生了气,柱着拐杖艰难的绕着土地跟房子,等他好不容易走三圈......太阳都下山了。爱地巴独自坐在田边喘气,他的孙子在身边恳求他:「阿公!您已经年纪大了,这附近地区的人也没有人的土地比您更大了,您不能再像从前一样,一生气就绕着土地跑阿!您可不可以告诉我这个秘密,为什么您一生气就要绕着土地跑上三圈?」
爱地巴禁不起孙子恳求,终于说出隐藏在心中多年的秘密。他说:「年轻时,我一和人吵架、争论、生气,就绕着房地跑3圈,边跑边想......我的房子这么小,土地这么小,我那有时间、哪有资格去跟人家生气?一想到这里,气就消了,于是就把所有时间用来努力工作。」
孙子问到:「阿公!你年纪老了,又变成最富有的人,为什么还要绕着房地跑?」
爱地巴笑着说:「我现在还是会生气,生气时绕着房地走三圈,边走边想......我的房子这么大,土地这么多,我又何必跟人计较?一想到这,气就消了。」
能在不同的时期,能从不同的角度,
为何不能用不同的心态去看待呢?



感激、善待生命中的每一个人


遇到你真的爱的人时
要努力争取和他相伴一生的机会 因为当他离去时.一切都?不及了...

遇到可相信的朋友时
要好好和他相处下去 因为在人的一生中.可遇到知己真不易

遇到人生中的贵人时
要记得好好感激 因为他是你人生的转折点

遇到曾经爱过的人时
记得微笑向他感激
因为他是让你更懂爱的人

遇到曾经恨过的人时
要微笑向他打招呼 因为他让你更加坚强

遇到曾经背叛你的人时
要跟他好好聊一聊
因为若不是他今天你不会懂这世界


遇到曾经偷偷喜欢的人时
要祝他幸福唷!
因为你喜欢他?.不就是希望他幸福快乐

遇到匆匆离开你人生的人时
要谢谢他走过你的人生
因为他是你精采回忆的一部分

遇到曾经和你有误会的人时
要趁现在解清误会
因为你可能只有这一次机会解释清楚

遇到现在和相伴一生的人
要百分百感谢他爱你




因为缺失,所以美丽


每一株玫瑰都有刺,正如每一个人的性格中,都有你不能容忍的部份。
爱护一朵玫瑰,并不是得努力把它的刺根除,而是学习如何不被它的刺刺伤。还有,如何不让自己的刺刺伤心爱的人。


爱 一 个 人


要 了 解 , 也 要 开 怀 ;
要 道 歉 , 也 要 道 谢 ;
要 认 错 , 也 要 改 错 ;
要 体 贴 , 也 要 体 谅 ;
是 接 受 , 而 不 是 忍 受 ;
是 宽 容 , 而 不 是 纵 容
是 支 持 , 而 不 是 支 配 ;
是 慰 问 , 而 不 是 质 问
是 倾 诉 , 而 不 是 控 诉 ;
是 难 忘 , 而 不 是 遗 忘
是 彼 此 交 流 , 而 不 是 凡 事 交 代 ;
是 为 对 方 默 默 祈 求 , 而 不 是 向 对 方 诸 多 要 求 ;
可 以 浪 漫 , 但 不 要 浪 费 ;
可 以 随 时 牵 手 ,但 不 要 随 便 分 手 ;
以 上 的 都 做 到 了 , 即 使 不 再 爱 一 个 人 ,
也 只 有 怀 念 , 而 不 会 怀 恨 。



婚礼上的一百元钞票



参加了一个婚礼,神父在弥撒当中手持一张崭新的百元钞票问大家:「在场有人想要它吗?」没有人出声....
神父:「不用害羞唷! 想要就举手啦 」 全场大约三分一人举手...
神父接着将那新钞揉成一团后 ,再问:「现在是否有人想拥有它 ? 」 仍然有人举手 , 但少了差不多一倍...
神父又将那钞票放在地下,踩了几下,拾起来,再问大家 :「还有人想拥 有它吗!?」 全场只有三, 四人举手...
神父请了一位男士上台,把一百元给了这位男士,说这位男士是三次也有举手的 ...
当全场大笑时, 神父示意大家安静,向新郎说:「今天这心爱的女士,就如一张崭新的百元钞票,岁月加上辛劳,就如残破的一百元纸钞一样,令起初宠爱的人,变了心。而事实上, 钞票仍然是钞票,它的价值是完全没有改变的 ,希望你可以像这位男士一样, 懂得真正的价值和意义,别被外表带领你行走人生道路呀!」

ASP的函数详解

ASP的函数详解
  join(expression,"连接符")
  split :接收相关的参数,使之成为数组。

  Array()
  FUNCTION: 返回一个数组
  SYNTAX: Array(list)
  ARGUMENTS: 字符,数字均可
  EXAMPLE:
  RESULT: 建立了一个包含7个元素的数组myArray
  myArray("Sunday","Monday", ... ... "Saturday")

  CInt()
  FUNCTION: 将一个表达式转化为数字类型 四舍五入的整数,相关函数:
  Csng Cdbl 转为实数!
  
  SYNTAX: CInt(expression)
  ARGUMENTS: 任何有效的字符均可
  EXAMPLE:
  RESULT: 236
  转化字符"234"为数字"234",如果字符串为空,则返回0值

  CreateObject()
  FUNCTION: 建立和返回一个已注册的ACTIVEX组件的实例。
  SYNTAX: CreateObject(objName)
  ARGUMENTS: objName 是任何一个有效、已注册的ACTIVEX组件的名字.
  EXAMPLE:
  RESULT:

  CStr()
  FUNCTION: 转化一个表达式为字符串.
  SYNTAX: CStr(expression)
  ARGUMENTS: expression 是任何有效的表达式。
  EXAMPLE:
  RESULT: 转化数字“5”为字符“5”。

  Date()
  FUNCTION: 返回当前系统日期.
  SYNTAX: Date()
  ARGUMENTS: None.
  EXAMPLE:
  RESULT: 8/4/99

  DateAdd()
  FUNCTION: 返回一个被改变了的日期。
  SYNTAX: DateAdd(timeinterval,number,date)
  ARGUMENTS: timeinterval is the time interval to add; number is amount of time intervals to add; and date is the starting date.
  EXAMPLE:

  
  RESULT: 11/4/99
  3:34:45 PM

  "m" = "month";
  "d" = "day";

  If currentDate is in time format then,
  "h" = "hour";
  "s" = "second";

  DateDiff()
  FUNCTION: 返回两个日期之间的差值 。
  SYNTAX: DateDiff(timeinterval,date1,date2 [, firstdayofweek [, firstweekofyear]])
  ARGUMENTS: timeinterval 表示相隔时间的类型,如“M“表示“月”。
  EXAMPLE:
  RESULT: 从8/4/99 到2000年还有 150 天.

  Day()
  FUNCTION: 返回一个月的第几日 .
  SYNTAX: Day(date)
  ARGUMENTS: date 是任何有效的日期。
  EXAMPLE:
  RESULT: 4

  FormatCurrency()
  FUNCTION: 返回表达式,此表达式已被格式化为货币值
  SYNTAX: FormatCurrency(Expression [, Digit [, LeadingDigit [, Paren [, GroupDigit]]]])
  ARGUMENTS: Digit 指示小数点右侧显示位数的数值。默认值为 -1,指示使用的是计算机的区域设置;   LeadingDigit 三态常数,指示是否显示小数值小数点前面的零。
  EXAMPLE:
  RESULT: $34.35

  FormatDateTime()
  FUNCTION: 返回表达式,此表达式已被格式化为日期或时间
  SYNTAX: FormatDateTime(Date, [, NamedFormat])
  ARGUMENTS: NamedFormat 指示所使用的日期/时间格式的数值,如果省略,则使用 vbGeneralDate.
  EXAMPLE:
  RESULT: Wednesday, August 04, 1999

 FormatNumber()
  FUNCTION: 返回表达式,此表达式已被格式化为数值.
  SYNTAX: FormatNumber(Expression [, Digit [, LeadingDigit [, Paren [, GroupDigit]]]])
  ARGUMENTS: Digit 指示小数点右侧显示位数的数值。默认值为 -1,指示使用的是计算机的区域设置。; LeadingDigit i指示小数点右侧显示位数的数值。默认值为 -1,指示使用的是计算机的区域设置。; Paren 指示小数点右侧显示位数的数值。默认值为 -1,指示使用的是计算机的区域设置。; GroupDigit i指示小数点右侧显示位数的数值。默认值为 -1,指示使用的是计算机的区域设置。.
  EXAMPLE:
  RESULT: 45.325

  FormatPercent()
  FUNCTION: 返回表达式,此表达式已被格式化为尾随有 % 符号的百分比(乘以 100 )。 (%)
  SYNTAX: FormatPercent(Expression [, Digit [, LeadingDigit [, Paren [, GroupDigit]]]])
  ARGUMENTS: 同上.
  EXAMPLE:
  RESULT: 45.267%

  Hour()
  FUNCTION: 以24时返回小时数.
  SYNTAX: Hour(time)
  ARGUMENTS:
  EXAMPLE:
  RESULT: 16
  (Hour has been converted to 24-hour system)

  Instr()
  FUNCTION: 返回字符或字符串在另一个字符串中第一次出现的位置.
  SYNTAX: Instr([start, ] strToBeSearched, strSearchFor [, compare])
  ARGUMENTS: Start为搜索的起始值,strToBeSearched接受搜索的字符串 strSearchFor要搜索的字符compare 比较方式(详细见ASP常数)
  EXAMPLE:
  RESULT: 9

  InstrRev()
  FUNCTION: 同上,只是从字符串的最后一个搜索起
  SYNTAX: InstrRev([start, ] strToBeSearched, strSearchFor [, compare])
  ARGUMENTS: 同上.
  EXAMPLE:
  RESULT: 13


  Int()
  FUNCTION: 返回数值类型,不四舍五入。
  SYNTAX: Int(number)
  ARGUMENTS:
  EXAMPLE:
  RESULT: 32

  IsArray()
  FUNCTION: 判断一对象是否为数组,返回布尔值 .
  SYNTAX: IsArray(name)
  ARGUMENTS:
  EXAMPLE:
  RESULT: False

  IsDate()
  FUNCTION: 判断一对象是否为日期,返回布尔值
  SYNTAX: IsDate(expression)
  ARGUMENTS: expression is any valid expression.
  EXAMPLE:
  RESULT: True

  IsEmpty()
  FUNCTION: 判断一对象是否初始化,返回布尔值.
  SYNTAX: IsEmpty(expression)
  ARGUMENTS:
  EXAMPLE:
  RESULT: True

  IsNull()
  FUNCTION: 判断一对象是否为空,返回布尔值.
  SYNTAX: IsNull(expression)
  ARGUMENTS:
  EXAMPLE:
  RESULT: False

  IsNumeric()
  FUNCTION: 判断一对象是否为数字,返回布尔值.
  SYNTAX: IsNumeric(expression)
  ARGUMENTS:
  EXAMPLE:
  RESULT: True
  就算数字加了引号,ASP还是认为它是数字。

  IsObject()
  FUNCTION: 判断一对象是否为对象,返回布尔值.
  SYNTAX: IsObject(expression)
  ARGUMENTS:
  EXAMPLE:
  RESULT: True

《Java无难事 孙鑫的Java视频教程》[ISO]【emule下载】


下面是eMule专用的下载链接,您必须安装eMule才能点击下载
SUNXIN_Java无难事_CD[01].ISO
508.7MB
SUNXIN_Java无难事_CD[02].ISO
523.8MB
SUNXIN_Java无难事_CD[03].ISO
524.3MB
SUNXIN_Java无难事_CD[04].ISO
492.6MB
SUNXIN_Java无难事_CD[05].ISO
340.0MB
SUNXIN_Java无难事_CD[06].ISO
389.1MB
SUNXIN_Java无难事_CD[07].ISO
398.2MB
SUNXIN_Java无难事_CD[08].ISO
476.0MB
SUNXIN_Java无难事_CD[09].ISO
607.1MB
SUNXIN_Java无难事_CD[10].ISO
500.2MB
SUNXIN_Java无难事_CD[11].ISO
454.4MB
SUNXIN_Java无难事_CD[12].ISO
389.0MB
eMule主页 下载eMule 使用指南 如何发布


中文名称:Java无难事 孙鑫的Java视频教程
资源类型:ISO
发行时间:2004年04月
地区:大陆
语言:普通话
简介:
地址已经更新
今天本来要上传到ftp服务器上的,结果被管理员发现封了上传的权限,真是郁闷。只好委屈大家慢慢的用骡子拖了,本人的上传速度实在是有限(adsl),希望大家谅解,但是我会一直做源的,这几天我都是24小时不关机的。有些网友说我撤源了真是冤枉。为了能24小时供源,我可是被老娘骂了好几回了!:(

看到大家的鼓励,我一定尽量作到24小时供源。另外,光盘里的是视频教学文件,avi格式,每张ISO打开的视频文件大概有2G左右,建议在1024*768的分辨率下看有最好的效果。

更正:iso文件里的avi文件是用光盘加密大师加密的,实际大小只有500兆左右,大家下载后可以用光盘加密大师还原avi文件,就可以正常的复制和刻录了
学员对孙老师Java教学视频的评价:

留言1:我作为一个在德国留学的学生,一定要向孙老师说一声:谢谢!!德国教授上java课实在对我这个初学者来说很难理解,而且包括了语言方面的。多亏了孙老师的java视频使我有所顿悟,希望java视频继续更新。
留言2:听了孙老师的vc和java视频教学的前三课后,有一种顿悟和彻悟的感觉,真的谢谢你们能免费发布这么好的东西!
课程讲解之深刻足以令许多大学课堂中所谓的教授相形见绌。
留言3:我刚听完java前三堂的视频课程,孙老师的讲课技巧与分析问题方法比我们大学时期教授级别的老师都要高出一大截。太棒了!很高兴有这么一个机会。
留言4:看了贵校的教学录象,让我收益非浅,真的很希望孙老师也能到成都来开设,java培训班,成都这边的教学质量很差,连那个银河计算机网校,培训java也只拿个官方写的教材,很令我们这些才学java的学员失望。
留言5:以前只是听说,这次真的见到了孙老师的教程了,简直讲的太精彩了,激情飞扬,把死板的程序讲的活生生的,真的希望孙老师赶快出J2EE和VC++的全部教程,谢谢你们,希望正版视频教程比片段更精彩!!!!!!!!!!!!!!!!!!!!!谢谢。


Java教学光盘特色

  本套光盘由孙鑫老师亲自授课录制。内容涵盖面广,从入门到精通,授课通俗易懂,分析问题独到精辟,学员通过本套光盘的学习,能够快速掌握Java编程语言,成为Java高手。
1、循序渐进
 从自学者很难弄明白的Java环境配置开始讲解,一步步引领你成为Java高手。
2、通俗易懂
 编程语言枯燥难懂,然而通过孙鑫老师形象化的讲解,Java中的难点、重点,让你轻松掌握。
3、实战性强
 编程中要注意什么?如何阅读出错提示?出现问题如何解决?通过孙鑫老师的一步步操作讲解,带你迅速掌握编程的全过程。
4、内容全面
 Java语言知识,Java面向对象的编程思想,Java语言本身的优点和特性,在以后开发中可能出现的问题,由孙鑫老师一一帮你剖析。
5、讲解深刻
 在一些重难点知识以及属于Java语言本身优点、特点方面的知识,孙鑫老师都将给你剖析其本质,讲解其后台运行的原理,让你从根本上理解、掌握并灵活运用这些知识。
6、问答形式
 在讲解一些重要知识点的时候,孙鑫老师会提出一些问题,引领大家思考,而这些问题正好是你在理解这些知识点时将要产生的疑问(有这么神?看过光盘就知道了),在你还没有提出疑问时,孙鑫老师就会告诉你如何理解和解决这些问题了。


光盘内容介绍:

CD1:Java的一些基本概念,Java的起源、为什么我们要学习Java语言,Java跨平台原理剖析;Java环境变量的配置,初学者常犯的问题,Java语言的基本数据类型和Java的语句。

CD2:Java面向对象编程,面向对象编程和面向过程编程的区别,我们如何才能掌握面向对象的编程,类和对象的关系;讲解了Java中的构造、重载、this和super变量、静态变量、Java中的常量、继承、多态。

CD3:Java中包的概念,类的说明符、方法的说明符、对象的销毁(JVM垃圾回收器的演示),Java中接口理解与掌握。

CD4:Java中内部类的理解、运用与掌握,Java中的异常处理。

CD5:Java的常用包,"=="和"equals"的用法,基本数据类型与引用类型,对象的克隆。

CD6:数组的复制与排序,Runtime类与Process类,Class类与反射API,Runtime类与单例设计模式。

CD7:Java的多线程,程序、进程和线程的概念,实现多线程的两种方式,线程同步的原理,线程的死锁,运用wait和notify来实现producer - consumer关系,线程终止的两种情况。

CD8:Java中的集合类的讲解,栈、队列、链表等数据结构的讲解。

CD9:Java I/O操作,字节流InputStream和OutputStream,字符流Reader和Writer,Java I/O库的设计原则,字符集的编码,RandomAccessFile类,管道流,对象的序列化。

CD10:Java图形界面编程,AWT、布局管理器、事件模型,JFC、Swing编程。应用JBuilder快速开发图形界面程序。

CD11:Applet编程,详细讲解Applet的生命周期,子体的设置,applet从网页中获取信息,applet和浏览器的通信,更新显示的原理,用Applet来制作动画程序,以及动画程序的优化。

CD12:Java网络编程,基于TCP的套接字编程,基于UDP的套接字编程,URL和URI,一个实用的下载程序。

《海伦凯勒》有感

如果现在我站在生命的终点,生命的火花即将灭亡,我会是怎么想?怎么做呢?是否也会感叹生命的短暂与脆弱,而后悔没有好好珍惜呢?我思索着,思索着读《假如给我三天光明》后,海伦?凯勒留给我的思考。 “善用你的眼睛吧,犹如明天你将遭到失明的灾难。聆听乐曲的妙音,鸟儿的歌唱,管弦乐队的雄浑而铿锵有力的曲调吧,犹如明天你将遭到耳聋的厄运。抚摸每一件你想要抚摸的物品吧,犹如明天你的触觉将会衰退。嗅闻所有鲜花的芳香,品尝每一口佳肴吧,犹如明天你再不能嗅闻品尝。”多么感人肺腑的言语。或许只有海伦,这些失去身体某部分的人才有如此深的体会吧!正因为他们失去了,所以才会加倍觉得它的可贵。人啊!为什么总要等到失去才后悔莫及呢!为什么总要如此贪心,极少珍惜我们所拥有的东西,却渴望那些我们所没有的东西!也许,你总认为,上帝赋予我们这些美好的东西,甚至生命,都是理所当然的。可你有没有想过,当某一天,你拥有的东西,甚至生命,都将失去,你会是怎样,后悔懊恼,还是自暴自弃?如果是这样,那就太可悲了。是的,我不能重踏他人的覆辙,我宁可现在就珍惜它们也不要等到失去时才后悔。 “我相信自己有能力掌握自己的命运,在心灵上像别人一样自由!”海伦?凯勒是一个伟大的女性。正是这样一个又聋、又盲、又哑的弱女子,却自强不息,毕业于哈佛大学的德克利夫学院,为残疾人造福,建起许多家慈善机构。她以行动证明人是可以战胜生命的挑战。她的一生充满传奇色彩,虽然出身不幸,但以一颗不屈不挠的心,接受生命的挑战,以惊人的毅力面对困境,终于实现自身的价值,创造伟大的奇迹。我想:海伦有如此成功的人生,得益于她有一颗健康向上、自由乐观的心。心灵是灵魂的主动脉。一旦封锁心灵,你的躯体就是一个失去思想的空壳。在此我想对众多身体有残疾或人生郁郁不得志的人也包括我自己说,切勿让灰尘落在你的心灵上,因为心是用来观察触摸这个世界的!打开心灵的枷锁,追求心性的独立、自由吧! “忘我就是快乐。因而我要把别人眼睛所看见的光明当作我的太阳,别人耳朵所听见的音乐当作我的乐曲,别人嘴角的微笑当作我的快乐。”多么豁达的人生态度!尽管她的命运比别人曲折,但她没有向命运低头。她战胜了困难,战胜了自我。快乐是一个人的本钱,只有当你沉醉在快乐的笑声中,你的心灵才会变得无限的轻松。快乐使人忘却烦恼,所以,当你只身险入困难中时,请记住 “忘我就是快乐!”乐观地面对一切,勇敢战胜困难,人生才会像海伦一样成功。 当你读完这些时,是否已经对开头的问题有了答案。我想,我已经大概读懂了出版此书的目的。海伦以真实、自然的笔触再现了自己丰富生动、真实而伟大的一生,告诫我们珍惜现在所拥有的;乐观、坚强地面对和战胜一切困难等深刻的道理。虽然这部伟大的作品,距现在已有百多年,但重读这部著作,我们依然能领略到其闪耀的光芒??人类的精神远远超越了时空的限制。书中人物所展现出采的品质,意志、耐力等强烈的震撼着我们,给蒙尘的心灵以洗涤。 读完此书后,我的确受益不少。海伦的坚强勇敢,友谊的真挚,莎莉文老师的无私……许许多多都激起我心灵的共鸣与碰击,每当我遇到烦恼时,特别是学习上,我就会想起海伦?凯勒,它是个盲聋哑人,但她同样坚持学习,获得学位。而我是个四肢健全的人,条件比她好几百倍,但却总轻言说放弃。以之相比,我是何等的渺小啊!《假如给我三天光明》给我的启示远远不止这些,她的精神激励着我面对一次次困难,并勇敢地战胜它。我也相信,“征服一个困难,随后而来的事情将会变得容易很多!”

12/29/2005

人成长中必须知道的10个故事

1、断箭   
不相信自己的意志,永远也做不成将军。

春秋战国时代,一位父亲和他的儿子出征打战。父亲已做了将军,儿子还只是马前卒。又一阵号角吹响,战鼓雷鸣了,父亲庄严地托起一个箭囊,其中插着一只箭 。父亲郑重对儿子说:“这是家袭宝箭,配带身边,力量无穷,但千万不可抽出来 。”

那是一个极其精美的箭囊,厚牛皮打制,镶着幽幽泛光的铜边儿,再看露出的箭尾。一眼便能认定用上等的孔雀羽毛制作。儿子喜上眉梢,贪婪地推想箭杆、箭头的模样,耳旁仿佛嗖嗖地箭声掠过,敌方的主帅应声折马而毙。果然,配带宝箭的儿子英勇非凡,所向披靡。当鸣金收兵的号角吹响时,儿子再也禁不住得胜的豪气,完全背弃了父亲的叮嘱,强烈的欲望驱赶着他呼一声就拔出宝箭,试图看个究竟。骤然间他惊呆了。  一只断箭,箭囊里装着一只折断的箭。

我一直刳着只断箭打仗呢!儿子吓出了一身冷汗,仿佛顷刻间失去支柱的房子 ,轰然意志坍塌了。

结果不言自明,儿子惨死于乱军之中。

拂开蒙蒙的硝烟,父亲拣起那柄断箭,沉重地啐一口道:“不相信自己的意志 ,永远也做不成将军。” 把胜败寄托在一只宝箭上,多么愚蠢,而当一个人把生命的核心与把柄交给别 人,又多么危险!比如把希望寄托在儿女身上;把幸福寄托在丈夫身上;把生活保障寄托在单位身上…… 温馨提示:自己才是一只箭,若要它坚韧,若要它锋利,若要它百步穿杨,百发百中,磨砺它,拯救它的都只能是自己。

2、生命的价值

不要让昨日的沮丧令明天的梦想黯然失色!

在一次讨论会上,一位著名的演说家没讲一句开场白,手里却高举着一张20美元的钞票。面对会议室里的200个人,他问:“谁要这20美元?”一只只手举了起来。他接着说:“我打算把这20美元送给你们中的一位,但在这之前,请准许我做一件事。” 他说着将钞票揉成一团,然后问:“谁还要?”仍有人举起手来。他又说:“那么,假如我这样做又会怎么样呢?”他把钞票扔到地上,又踏上一只脚,并且用脚碾它。尔后他拾起钞票,钞票已变得又脏又皱。“现在谁还要?”还是有人举起手来。

“朋友们,你们已经上了一堂很有意义的课。无论我如何对待那张钞票,你们还是想要它,因为它并没贬值,它依旧值20美元。人生路上,我们会无数次被自己的决定或碰到的逆境击倒、欺凌甚至碾得粉身碎骨。我们觉得自己似乎一文不值。但无论发生什么,或将要发生什么,在上帝的眼中,你们永远不会丧失价值。在他看来,肮脏或洁净,衣着齐整或不齐整,你们依然是无价之宝。” 温馨提示:生命的价值不依赖我们的所作所为,也不仰仗我们结交的人物,而是取决于我们本身!我们是独特的??永远不要忘记这一点!

3、昂起头来真美

别看它是一条黑母牛,牛奶一样是白的。珍妮是个总爱低着头的小女孩,她一直觉得自己长得不够漂亮。有一天,她到饰物店去买了只绿色蝴蝶结,店主不断赞美她戴上蝴蝶结挺漂亮,珍妮虽不信,但是挺高兴,不由昂起了头,急于让大家看看,出门与人撞了一下都没在意。 珍妮走进教室,迎面碰上了她的老师,“珍妮,你昂起头来真美!”老师爱抚地拍拍她的肩说。 那一天,她得到了许多人的赞美。她想一定是蝴蝶结的功劳,可往镜前一照, 头上根本就没有蝴蝶结,一定是出饰物店时与人一碰弄丢了。自信原本就是一种美丽,而很多人却因为太在意外表而失去很多快乐。温馨提示:无论是贫穷还是富有,无论是貌若天仙,还是相貌平平,只要你昂起头来,快乐会使你变得可爱??人人都喜欢的那种可爱。

4、为生命画一片树叶 只要心存相信,总有奇迹发生,希望虽然渺茫,但它永存人世。美国作家欧;亨利在他的小说《最后一片叶子》里讲了个故事:病房里,一个生命垂危的病人从房间里看见窗外的一棵树,在秋风中一片片地掉落下来。病人望着眼前的萧萧落叶,身体也随之每况愈下,一天不如一天。她说:“当树叶全部掉光时,我也就要死了。”一位老画家得知后,用彩笔画了一片叶脉青翠的树叶挂在树枝上。最后一片叶子始终没掉下来。只因为生命中的这片绿,病人竟奇迹般地活了下来。温馨提示:人生可以没有很多东西,却唯独不能没有希望。希望是人类生活的一项重要的价值。有希望之处,生命就生生不息!

5、飞翔的蜘蛛

信念是一种无坚不催的力量,当你坚信自己能成功时,你必能成功。 一天,我发现,一只黑蜘蛛在后院的两檐之间结了一张很大的网。难道蜘蛛会飞?要不,从这个檐头到那个檐头,中间有一丈余宽,第一根线是怎么拉过去的?后来,我发现蜘蛛走了许多弯路从一个檐头起,打结,顺墙而下,一步一步向前爬, 小心翼翼,翘起尾部,不让丝沾到地面的沙石或别的物体上,走过空地,再爬上对面的檐头,高度差不多了,再把丝收紧,以后也是如此。温馨提示:蜘蛛不会飞翔,但它能够把网凌结在半空中。它是勤奋、敏感、沉默而坚韧的昆虫,它的网制得精巧而规矩,八卦形地张开,仿佛得到神助。这样的成绩,使人不由想起那些沉默寡言的人和一些深藏不露的智者。于是,我记住了蜘蛛不会飞翔,但它照样把网结在空中。奇迹是执着者造成的。

6、阴影是条纸龙

人生中,经常有无数来自外部的打击,但这些打击究竟会对你产生怎样的影响,最终决定权在你手中。祖父用纸给我做过一条长龙。长龙腹腔的空隙仅仅只能容纳几只蝗虫,投放进去,它们都在里面死了,无一幸免!祖父说:“蝗虫性子太躁,除了挣扎,它们没想过用嘴巴去咬破长龙,也不知道一直向前可以从另一端爬出来。因而,尽管它有铁钳般的嘴壳和锯齿一般的大腿,也无济于事。 ”当祖父把几只同样大小的青虫从龙头放进去,然后关上龙头,奇迹出现了:仅仅几分钟,小青虫们就一一地从龙尾爬了出来。温馨提示:命运一直藏匿在我们的思想里。许多人走不出人生各个不同阶段或大或小的阴影,并非因为他们天生的个人条件比别人要差多远,而是因为他们没有思想要将阴影纸龙咬破,也没有耐心慢慢地找准一个方向,一步步地向前,直到眼前出现新的洞天。

7、成功并不像你想像的那么难

并不是因为事情难我们不敢做,而是因为我们不敢做事情才难的。 1965年,一位韩国学生到剑桥大学主修心理学。在喝下午茶的时候,他常到学校的咖啡厅或茶座听一些成功人士聊天。这些成功人士包括诺贝尔奖获得者,某一些领域的学术权威和一些创造了经济神话的人,这些人幽默风趣,举重若轻,把自己的成功都看得非常自然和顺理成章。时间长了,他发现,在国内时,他被一些成功人士欺骗了。那些人为了让正在创业的人知难而退,普遍把自己的创业艰辛夸大了,也就是说,他们在用自己的成功经历吓唬那些还没有取得成功的人。

作为心理系的学生,他认为很有必要对韩国成功人士的心态加以研究。 1970年 ,他把《成功并不像你想像的那么难》作为毕业论文,提交给现代经济心理学的创始人威尔;布雷登教授。布雷登教授读后,大为惊喜,他认为这是个新发现,这种现象虽然在东方甚至在世界各地普遍存在,但此前还没有一个人大胆地提出来并加以研究。惊喜之余,他写信给他的剑桥校友 当时正坐在韩国政坛第一把交椅上的 人朴正熙。他在信中说,“我不敢说这部著作对你有多大的帮助,但我敢肯定它 比你的任何一个政令都能产生震动。

”后来这本书果然伴随着韩国的经济起飞了。这本书鼓舞了许多人,因为他们从一个新的角度告诉人们,成功与“劳其筋骨,饿其体肤”、“三更灯火五更鸡”、 “头悬梁,锥刺股”没有必然的联系。只要你对某一事业感兴趣,长久地坚持下去就会成功,因为上帝赋予你的时间和智慧够你圆满做完一件事情。后来,这位青年也获得了成功,他成了韩国泛业汽车公司的总裁。 温馨提示:人世中的许多事,只要想做,都能做到,该克服的困难,也都能克服,用不着什么钢铁般的意志,更用不着什么技巧或谋略。只要一个人还在朴实而饶有兴趣地生活着,他终究会发现,造物主对世事的安排,都是水到渠成的。

8、永远的坐票

生活真是有趣:如果你只接受最好的,你经常会得到最好的。 有一个人经常出差,经常买不到对号入坐的车票。可是无论长途短途,无论车上多挤,他总能找到座位。

他的办法其实很简单,就是耐心地一节车厢一节车厢找过去。这个办法听上去似乎并不高明,但却很管用。每次,他都做好了从第一节车厢走到最后一节车厢的准备,可是每次他都用不着走到最后就会发现空位。他说,这是因为像他这样锲而不舍找座位的乘客实在不多。经常是在他落座的车厢里尚余若干座位,而在其他车厢的过道和车厢接头处,居然人满为患。他说,大多数乘客轻易就被一两节车厢拥挤的表面现象迷惑了,不大细想在数十次停靠之中,从火车十几个车门上上下下的流动中蕴藏着不少提供座位的机遇;即使想到了,他们也没有那一份寻找的耐心。眼前一方小小立足之地很容易让大多数人满足,为了一两个座位背负着行囊挤来挤去有些人也觉得不值。他们还担心万一找不到座位,回头连个好好站着的地方也没有了。与生活中一些安于现状不思进取害怕失败的人,永远只能滞留在没有成功的起点上一样,这些不愿主动找座位的乘客大多只能在上车时最初的落脚之处一直站到下车。 温馨提示:自信、执着、富有远见、勤于实践,会让你握有一张人生之旅永远的坐票。

9、心中的顽石

阻碍我们去发现、去创造的,仅仅是我们心理上的障碍和思想中的顽石。

从前有一户人家的菜园摆着一颗大石头,宽度大约有四十公分,高度有十公分。到菜园的人,不小心就会踢到那一颗大石头,不是跌倒就是擦伤。 儿子问:“爸爸,那颗讨厌的石头,为什么不把它挖走?”

爸爸这么回答:“你说那颗石头喔?从你爷爷时代,就一直放到现在了,它的体积那么大,不知道要挖到到什么时候,没事无聊挖石头,不如走路小心一点,还可以训练你的反应能力。”

过了几年,这颗大石头留到下一代,当时的儿子娶了媳妇,当了爸爸。

有一天媳妇气愤地说:“爸爸,菜园那颗大石头,我越看越不顺眼,改天请人搬走好了。”

爸爸回答说:“算了吧!那颗大石头很重的,可以搬走的话在我小时候就搬走了,哪会让它留到现在啊?”
媳妇心底非常不是滋味,那颗大石头不知道让她跌倒多少次了。

有一天早上,媳妇带着锄头和一桶水,将整桶水倒在大石头的四周。 十几分钟以后,媳妇用锄头把大石头四周的泥土搅松。
媳妇早有心理准备,可能要挖一天吧,谁都没想到几分钟就把石头挖起来,看看大小,这颗石头没有想像的那么大,都是被那个巨大的外表蒙骗了。

温馨提示:你抱着下坡的想法爬山,便无从爬上山去。如果你的世界沉闷而无望, 那是因为你自己沉闷无望。改变你的世界,必先改变你自己的心态。

10、追求忘我
不要把自己当做鼠,否则肯定被猫吃。
1858年,瑞典的一个富豪人家生下了一个女儿。然而不久,孩子染患了一种无法解释的瘫痪症,丧失了走路的能力。
一次,女孩和家人一起乘船旅行。船长的太太给孩子讲船长有一只天堂鸟,她被这只鸟的描述迷住了,极想亲自看一看。于是保姆把孩子留在甲板上,自己去找船长。孩子耐不住性子等待,她要求船上的服务生立即带她去看天堂鸟。那服务生并不知道她的腿不能走路,而只顾带着她一道去看那只美丽的小鸟。

奇迹发生了,孩子因为过度地渴望,竟忘我地拉住服务生的手,慢慢地走了起来。从此,孩子的病便痊愈了。女孩子长大后,又忘我地投入到文学创作中,最后成为第一位荣获诺贝尔文学奖的女性,也就是茜尔玛.拉格萝芙。

温馨提示:忘我是走向成功的一条捷径,只有在这种环境中,人才会超越自身的束缚,释放出最大的能量。

12/28/2005

Java书籍推荐

书籍推荐:
对于初学者:我认为《Core Java》即《Java核心技术I:原理》非常合适,典型的教科书标准,我就是看这本书入门的,感觉很适合初学者,看完这本书过后我认为《Thinking in Java》也是不可不看的,我就是当时有一些很模糊的概念就在上面得到很好的解释的,这本书我是买的英文版,当然也借同学的把中文版看了,候捷先生也翻译的很不错!不过,初学Java看这本书我认为不太适合初学者。还有一本书《Java语言入门》(O'Reilly)也不错,但是我没有看过,不敢忘加评论,因为是Jonathan Knudsen 写的,而蔡学镛先生在《偶像崇拜》中有他的名字,认为他的书写的很好,其实他还写过《Java密码学》和《Java 2D图形技术》,可惜中文版就只有《Java语言入门》了。这个O'Reilly将送我一本这书,到时候我就知道这本书怎么样了。然后我认为《Java核心技术II:高级特性》(Advanced Feature)不是太有买的必要,虽然我买了的,但是一半都没看了,看到RMI就没看了,真准备这几天把高级Swing和高级AWT看了我觉得除了前面两章 线程和集合类,其他的领域要看就要看专述的书了:比如:Java的网络编程方面我推荐《Java网络编程》(O'Reilly) 书 号:7-5083-0712-7页数:744定 价:79.00元大名鼎鼎的Ellitotte Rusty Harold写的,这本书我看了两遍,我非常喜欢他写书的风格,《Java I/O》也是他写的,但是没有引进,所以没看过很是不爽啊,这本书就连Bruce Eckel(Thinking in Java 的作者)都说:”直到找到这本书过后,我才真正开始理解Java网络编程“这本书有个缺点,就是没有涉及1.4以后的,所以那天我编一个组播套接字的时候用书上的MulticastSocket的send(DatagramPacket p, byte ttl)发现已经deprecated的了,真FT当入门过后要继续深入则我推荐2本书:1.《Java实例技术手册》David Flanagan 著书 号:7-5083-0655-4页数:636定 价:69.00元本书收入了164个完整的、来自实战的Java编程实例,每个例子都有详尽的注释。全新的第二版涵盖了Java 1.3,实现了20个不同的Java API,其中包括servlet、JSP、XML、Swing和Java 2D。本书作者在畅销的《Java in a Nutshell》(《Java技术手册》)基础上,又推出了这本实例篇。你可以从中学习编程技巧,也可以直接修改书中实例为你所用。这是我引用的原话介绍,这本书我有,但是没读多少,深为自责啊,其实很多实际的应用都可以在上面找到。David Flanagan也是及其有名的,他写的每本书都是经典,包括:《Java技术手册》(Java in a NutShell)这本书我有,相信是每个Java开发者必备的书籍,本书深入浅出的,我读过这本书前面的部分,简单的介绍也写的很好《JFC技术手册》没看过,而且这本书很贵,我一般也不太进行GUI编程,所以不太了解《JAVA ENTERPRISE技术手册》这本书是针对企业级应用的,也是一本好书,我现在还没学到那儿去!2.《Java经典实例》繁体的这本书翻译成《Java精囊妙计》,我认为这个翻译更好一点,更恰当原书的名字叫做《Java Cookbook》是O'Reilly的食谱系列书 号: 7-5083-0945-6页数:840定 价:89.00元稍微有点贵,但是我觉得很值,这本书收集了Java程序员经常遇到的成百个问题的解决方案,涵盖了Java应用的方方面面,堪称讲述Java应用的百科全书。这本书我已经看了10章,是一个问题一个解决方案这样来写的,真的可以说是encyclopedia对于J2EE方面我还只是很浮浅的学习,Servlet,JSP,RMI,JDBC都不是非常熟悉,EJB都不会,准备下个月学习。关于Servlet和JSP我是看的这两本书1.《JSP设计》Hans Bergsten 著 何健辉 许俊娟 译(2002年2月出版)书 号: 7-5083-0850-6页数:576定 价:59.00元2.《Java Servlet编程(第二版)》Jason Hunter & William Crawford 著 孙鑫 谢茂强 译(2002年6月出版)书 号: 7-5083-0844-1页数:736定 价:85.00元但这两本书缺点就是太旧了,新技术跟不上,但是原理还是讲的很清楚的!不错,还是值得一看,要跟上JSP和Servlet的新技术,就只有上sun的官方网站看了!这些就是我正在看和看过的书,由于自己看过才好给大家推荐!关于更高一层的我就无法跟大家推荐了,因为我知道自己水平也没上那个层次,还停留在语言层次,下学期再开始提高自己:)我给大家推荐的书基本上都是O'Reilly的,因为我也是看见蔡学镛先生推荐的,我买好的计算机书没花什么冤枉钱,就上次买那本飞思的不行,虽然O'Reilly的书还是比较贵,但我觉得还是值得,书贵才能找好的译者,我们才能看好的书啊,而且我还没有看见O'Reilly有关Java的影印版。3。网站推荐:就是第6期程序员上推荐的那些网站:
Chinese:
1.This/*以下两个Java网站都不错*/
2.http://www.chinajavaworld.com
3.http://www.java-cn.com
4.http://www.china-pub.com//买书之前最好先去去这里5.http://www.codestudy.com
English:
1.http://www.900.ibm.com/developerWorks/
cn/index.shtml
2.http://gceclub.sun.com.cn
3.http://www.fawcette.com/javapro
4.http://javaranch.com

做一个成功的人

1、记住该记住的,忘记该忘记的。改变能改变的,接受不能改变的2、能冲刷一切的除了眼泪,就是时间,以来推移感情,时间越长,冲突越淡,仿佛不断稀释的茶。
3、怨言是上天得至人类最大的供物,也是人类祷告中最真诚的部分 ;
4、智慧的代价是矛盾。这是人生对人生观开的玩笑;
5、世上的姑娘总以为自己是骄傲的公主   (除了少数极丑和少数极聪明的姑娘例外)
6、 如果敌人让你生气,那说明你还没有胜他的把握 ;
7、如果朋友让你生气,那说明你仍然在意他的友情 ;
8、 令狐冲说? “有些事情本身我们无法控制,只好控制自己。”
9、我不知道我现在做的哪些是对的,那些是错的,而当我终于老死的时候我才知道这些。所以我现在所能做的就是尽力做好每一件事,然后等待着老死 ;
10、也许有些人很可恶,有些人很卑鄙。而当我设身为他想象的时候,我才知道:他比我还可怜。所以请原谅所有你见过的人,好人或者坏人 ;
11.鱼说你看不到我的眼泪,因为我在水里.水说我能感觉到你的眼泪,因为你在我心里。
12、快乐要有悲伤作陪,雨过应该就有天晴。如果雨后还是雨,如果忧伤之后还是忧伤。 请让我们从容面对这离别之后的离别. 微笑地去寻找一个不可能出现的你!
13、死亡教会人一切,如同考试之后公布的结果??虽然恍然大悟,但为时晚矣~!
14、你出生的时候,你哭着,周围的人笑着;你逝去的时候,你笑着,而周围的人在哭!   一切都是轮回!!!! 我们都在轮回中!!!!
15、男人在结婚前觉得适合自己的女人很少,结婚后觉得适合自己的女人很多 ;
16、于千万人之中,遇见你所遇见的人;于千万年之中,时间的无涯荒野里,没有早一步,也没有晚一步,刚巧赶上了;
17、每个人都有潜在的能量,只是很容易:被习惯所掩盖,被时间所迷离,被惰性所消磨 ;
18、人生短短几十年,不要给自己留下了什么遗憾,想笑就笑,想哭就哭,该爱的时候就去爱,无谓压抑自己 ;
20、真正的爱情是不讲究热闹不讲究排场不讲究繁华更不讲究噱头的 ;
21、生命中,不断地有人离开或进入。于是,看见的,看不见的;记住的,遗忘了。 生命中,不断地有得到和失落。于是,看不见的,看见了;遗忘的,记住了。 然而,看不见的,是不是就等于不存在?记住的,是不是永远不会消失 ;
22、我们确实活得艰难,一要承受种种外部的压力,更要面对自己内心的困惑。在苦苦挣扎中,如果有人向你投以理解的目光,你会感到一种生命的暖意,或许仅有短暂的一瞥,就足以使我感奋不已 ;
23、我不去想是否能够成功,既然选择了远方,便只顾风雨兼程; 我不去想,身后会不会袭来寒风冷雨,既然目标是地平线,留给世界的只能是背影 。

12/27/2005

《寂寞的网络》

人类因为寂寞发明了网络,人类因为网络而变得更加寂寞。 人类的倾向是扩张性,我们需要交流,所以我们发明了语言。当我们局促于一村一落时,我们并 不感到自己有多么孤单。抬脚就可以迈入隔壁二大娘家,我们所知的最远的世界不过是邻村的一道 山路。然后我们知晓了书信这一形式,我们可以通过文字与远方的人交流情感。 接着是电话,第一次打电话都会有一种神秘之感。接着,就是可怕的互联网络,你可以用它跟世界任何角落的人聊天。 我们的感觉无限延伸,但我们再也不感到寂寞了吗?你所接触的范围越大,你的寂寞感就越深,因为内涵与外延是成反比的。土耳其某个人的鸟语就绝对不如二大娘的土话来得亲切。二大娘知道你小时候画地图不止,那土耳其鸟人知道些什么呢?最多不过你的一个代号,连性别都不得而知。你了解了有一个广大的世界,但你可能感觉在这个广阔的世界面前,你是多么的渺小。我们在山谷里,抬头望去,发觉天空不过一席见方,我们感觉天空是为自己而存在,我们爬到山顶上,就会感到你不过是无限蓝天下可以忽略的一点而已。 都市人一方面注重远方的交流,另一方面却忽略近在咫尺的人际交往。也许你的ICQ LIST 上有上百个人名,但你却不知道对面的邻居性甚名谁。我们越来越需要情感的倾诉,却越来越注重保护自己的隐私。ICQ上的一个nickname也许不可能知道你的性别,但你的邻居却有可能将你的私生活宣扬到尽人皆知。所以,你会将深藏的感情向一个土耳其人诉说,但对你的邻居却视如路人。常常反问自己,这种网络的交往方式是否是一百年以后唯一的选择。 网络是一锅正在煮的水 网络是锅正在煮的水,大家从四面八方来,有的加水,有的砍柴,有的生火,忙个不停。但是,我锅水却永远也不会沸腾。我们陷入了一个二律背反的怪圈里,如果它是一锅网络之水,那么它就永远都不应该沸腾;如果它沸腾,那么它一定在某个地方偏离了网络之路。 这锅水的奇 妙之处在于,每个人最重视的不是最后的喝水,而是烧水的过程,烧水本身从手段变成了目的。我们虽然非常口渴,烧水的目的也在于解渴,但我们都怀疑别人会给水带来某些杂质,于是,在最后关头,我们踢翻了这锅水,再重新来一次。 古代,有望梅止渴的典故:现在,我们在网络演绎烧水止渴的故事。 网络是一次盛大的假面舞会 网络是一次盛大的假面舞会,大家都戴着不同的面具,相互亲切的打着招呼。有前辈讲过,在网络上,没有人知道你是一条狗。这句话应该理解为,在网络上,没有人在乎你是否戴着一个狗面具。一个新的化名给你一个新的感觉,一个重新做人的感觉。你从一条四处乱咬的狗变成一个道貌岸然的君子,这个进化过程需要的时间仅以秒为计算单位。你可以同时成为一个狗和一个人,当你发现狗咬人不算新闻,你就反过来自己咬了自己一口,制作了一个人咬狗的新闻。在巨大的轰动效应面前,你满足了,你陶醉了,但你只是看到人们的惊讶,却不知道他们需要的只是新闻,却不会在乎新闻的真假,你是否会有一种失落的感觉,在网络上是人不如狗吗? 在网络上,你会交到很多朋友,难以避免的是,你也会碰到一些敌人。你无端地遭到了小人的攻击,让你怒火万丈。你有骑士风度,你有豪侠精神,你拔剑四顾,却是一片茫然。你根本不知道敌人来自何方,他不过是一个一击即退的懦夫而已。而正是这个懦夫,对你的网络信念造成了最大的打击。 这就是网络吗?我怎么看到的都是漆黑一片,没有一丝正义存在。如果我们没有办法识别敌人,我们又有什么根据去辨认一个朋友呢?你凶狠地笑着,因为你发现,在网络做一个坏蛋远比做一个好人有趣得多。因为你知道,坏蛋的最坏结果不过是碰到另一个更坏的家伙。你明白了吗?在网络上,也没有任何公平可言,弱肉强食的法则在这里依旧通用。 人类的亲情在网络上是否存在?如果存在,我们能有什么方法验证?答案只能是脱离网络,只有面对面的交流,才有可能给出上述问题的答案。 网络只能拓宽人们的视野,地无法进一步开拓人类的心灵 过年了,望着窗外铺红挂绿的街道,望着孩子们兴高彩烈的面孔,不禁感染了莫名的欢快。在几秒钟的时间,向上百的网友发出了新春的祝福。但我最盼望的是,在母亲面前,无拘地喊一声“妈妈”。 情人节要到了,想给网络上的“她”送上一朵花。我可以让她看到一抹嫣红,几线翠绿,甚至可以让她听到风儿对花的细语。但我无法让她看到我为这朵花滴下的眼泪,也无法看到她为花儿而绽放的笑脸。