闫学会

2010年05月20日

详细解析Java中抽象类和接口的区别

类归于: 未分类 — admin @ 3:09 下午

Java语言中, abstract class 和interface 是支持抽象类定义的两种机制。正是由于这两种机制的存在,才赋予了Java强大的 面向对象能力。abstract class和interface之间在对于抽象类定义的支持方面具有很大的相似性,甚至可以相互替换,因此很多开发者在进 行抽象类定义时对于abstract class和interface的选择显得比较随意。其实,两者之间还是有很大的区别的,对于它们的选择甚至反映出对 于问题领域本质的理解、对于设计意图的理解是否正确、合理。本文将对它们之间的区别进行一番剖析,试图给开发者提供一个在二者之间进行选择的依据。

  理解抽象类

  abstract class和interface在Java语言中都是用来进行抽象类(本文 中的抽象类并非从abstract class翻译而来,它表示的是一个抽象体,而abstract class为Java语言中用于定义抽象类的一种方法, 请读者注意区分)定义的,那么什么是抽象类,使用抽象类能为我们带来什么好处呢?

  在 面向对象的概念中,我们知道所有的对象都是通过类来描绘的,但是反过来却不是这样。并不是 所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。抽象类往往用来表征我们在对问题领域进行分析、 设计中得出的抽象概念,是对一系列看上去不同,但是本质上相同的具体概念的抽象。比如:如果我们进行一个图形编辑软件的开发,就会发现问题领域存在着圆、 三角形这样一些具体概念,它们是不同的,但是它们又都属于形状这样一个概念,形状这个概念在问题领域是不存在的,它就是一个抽象概念。正是因为抽象的概念 在问题领域没有对应的具体概念,所以用以表征抽象概念的抽象类是不能够实例化的。

  在面向对象领域,抽象类主要用来进行类型隐藏。 我们可以构造出一个固定的一组行为的抽象描 述,但是这组行为却能够有任意个可能的具体实现方式。这个抽象描述就是抽象类,而这一组任意个可能的具体实现则表现为所有可能的派生类。模块可以操作一个 抽象体。由于模块依赖于一个固定的抽象体,因此它可以是不允许修改的;同时,通过从这个抽象体派生,也可扩展此模块的行为功能。熟悉OCP的读者一定知 道,为了能够实现面向对象设计的一个最核心的原则OCP(Open-Closed Principle),抽象类是其中的关键所在。

  从语法定义层面看abstract class 和 interface

  在语法层面,Java语言对于abstract class和interface给出了不同的定义方式,下面以定义一个名为Demo的抽象类为例来说明这种不同。

  使用abstract class的方式定义Demo抽象类的方式如下:

abstract class Demo{
abstract void method1();
abstract void method2();

  使用interface的方式定义Demo抽象类的方式如下:

interface Demo{
void method1();
void method2();

}

  在abstract class方式中,Demo可以有自己的数据成员,也可以有非 abstract的成员方法,而在interface方式的实现中,Demo只能够有静态的不能被修改的数据成员(也就是必须是static final 的,不过在interface中一般不定义数据成员),所有的成员方法都是abstract的。从某种意义上说,interface是一种特殊形式的 abstract class。

  从编程的角度来看,abstract class和interface都可以用来实现 “design by contract” 的思想。但是在具体的使用上面还是有一些区别的。

  首先,abstract class 在 Java 语言中表示的是一种继承关系,一个类只能使用一次继承关系(因为Java不支持多继承 — 转注)。但是,一个类却可以实现多个interface。也许,这是Java语言的设计者在考虑Java对于多重继承的支持方面的一种折中考虑吧。

  其次,在abstract class的定义中,我们可以赋予方法的默认行为。但是在interface的定义中,方法却不能拥有默认行为,为了绕过这个限制,必须使用委托,但是这会增加一些复杂性,有时会造成很大的麻烦。

  在 抽象类中不能定义默认行为还存在另一个比较严重的问题,那就是可能会造成维护上的麻烦。因 为如果后来想修改类的界面(一般通过 abstract class 或者interface来表示)以适应新的情况(比如,添加新的方法或者给已用的方法中添 加新的参数)时,就会非常的麻烦,可能要花费很多的时间(对于派生类很多的情况,尤为如此)。但是如果界面是通过abstract class来实现的,那 么可能就只需要修改定义在abstract class中的默认行为就可以了。

  同样,如果不能在抽象类中定义默认行为,就会导致同样的方法实现出现在该抽象类的每一个派生类中,违反了 “one rule,one place” 原则,造成代码重复,同样不利于以后的维护。因此,在abstract class和interface间进行选择时要非常的小心。

  从设计理念层面看 abstract class 和 interface

  上面主要从语法定义和编程的角度论述了abstract class和interface的区 别,这些层面的区别是比较低层次的、非本质的。本小节将从另一个层面:abstract class和interface所反映出的设计理念,来分析一下二者的区别。作者认为,从这个层面进行分析才能理解二者概念的本质所在。

  前面已经提到过,abstract class在Java语言中体现了一种继承关系,要想使得 继承关系合理,父类和派生类之间必须存在”is-a”关系,即父类和派生类在概念本质上应该是相同的。对于interface来说则不然,并不要求interface的实现者和interface定义在概念本质上是一致的, 仅仅是实现了interface定义的契约而已。为了使论述便于理解,下面将通过一个简单的实例进行说明。

  考虑这样一个例子,假设在我们的问题领域中有一个关于Door的抽象概念,该Door具有执行两个动作open和close,此时我们可以通过abstract class或者interface来定义一个表示该抽象概念的类型,定义方式分别如下所示:

  使用abstract class方式定义Door:

abstract class Door{
abstract void open();
abstract void close();
}

  使用interface方式定义Door:

interface Door{
void open();
void close();
}

  其他具体的Door类型可以extends使用abstract class方式定义的Door或者implements使用interface方式定义的Door。看起来好像使用abstract class和interface没有大的区别。

  如果现在要求Door还要具有报警的功能。我们该如何设计针对该例子的类结构呢(在本例中, 主要是为了展示 abstract class 和interface 反映在设计理念上的区别,其他方面无关的问题都做了简化或者忽略)?下面将罗列出可能的解 决方案,并从设计理念层面对这些不同的方案进行分析。

  解决方案一:

  简单的在Door的定义中增加一个alarm方法,如下:

abstract class Door{
abstract void open();
abstract void close();
abstract void alarm();
}

  或者

interface Door{
void open();
void close();
void alarm();
}

  那么具有报警功能的AlarmDoor的定义方式如下:

class AlarmDoor extends Door{
void open(){…}
void close(){…}
void alarm(){…}
}

  或者

class AlarmDoor implements Door{
void open(){…}
void close(){…}
void alarm(){…}

  这种方法违反了面向对象设计中的一个核心原则 ISP (Interface Segregation Principle),在Door的定义中把Door概念本身固有的行为方法和另外一个概念”报警器”的行为方 法混在了一起。这样引起的一个问题是那些仅仅依赖于Door这个概念的模块会因为”报警器”这个概念的改变(比如:修改alarm方法的参数)而改变,反 之依然。

  解决方案二:

  既然open、close和alarm属于两个不同的概念,根据ISP原则应该把它们分别定 义在代表这两个概念的抽象类中。定义方式有:这两个概念都使用 abstract class 方式定义;两个概念都使用interface方式定义;一个概念 使用 abstract class 方式定义,另一个概念使用interface方式定义。

  显然,由于Java语言不支持多重继承,所以两个概念都使用abstract class方式定义是不可行的。后面两种方式都是可行的,但是对于它们的选择却反映出对于问题领域中的概念本质的理解、对于设计意图的反映是否正确、合理。我们一一来分析、说明。

  如果两个概念都使用interface方式来定义,那么就反映出两个问题:1、我们可能没有 理解清楚问题领域,AlarmDoor在概念本质上到底是Door还是报警器?2、如果我们对于问题领域的理解没有问题,比如:我们通过对于问题领域的分 析发现AlarmDoor在概念本质上和Door是一致的,那么我们在实现时就没有能够正确的揭示我们的设计意图,因为在这两个概念的定义上(均使用 interface方式定义)反映不出上述含义。

  如果我们对于问题领域的理解是:AlarmDoor在概念本质上是Door,同时它有具有报 警的功能。我们该如何来设计、实现来明确的反映出我们的意思呢?前面已经说过,abstract class在Java语言中表示一种继承关系,而继承关系 在本质上是”is-a”关系。所以对于Door这个概念,我们应该使用abstarct class方式来定义。另外,AlarmDoor又具有报警功能,说 明它又能够完成报警概念中定义的行为,所以报警概念可以通过interface方式定义。如下所示:

abstract class Door{
abstract void open();
abstract void close();
}
interface Alarm{
void alarm();
}
class Alarm Door extends Door implements Alarm{
void open(){…}
void close(){…}
void alarm(){…}
}

  这种实现方式基本上能够明确的反映出我们对于问题领域的理解,正确的揭示我们的设计意图。其 实abstract class表示的是”is-a”关系,interface表示的是”like-a”关系,大家在选择时可以作为一个依据,当然这是建立在对问题领域的理解上的,比如:如果我们认为AlarmDoor在概念本质上是报警器,同时又具有Door的功能,那么上述的定义方式就要反过来了。

  小结

  1.abstract class 在 Java 语言中表示的是一种继承关系,一个类只能使用一次继承关系。但是,一个类却可以实现多个interface。

  2.在abstract class 中可以有自己的数据成员,也可以有非abstarct的成员方法,而在interface中,只能够有静态的不能被修改的数据成员(也就是必须是static final的,不过在 interface中一般不定义数据成员),所有的成员方法都是abstract的。

  3.abstract class和interface所反映出的设计理念不同。其实abstract class表示的是”is-a”关系,interface表示的是”like-a”关系。

  4.实现抽象类和接口的类必须实现其中的所有方法。抽象类中可以有非抽象方法。接口中则不能有实现方法。

  5.接口中定义的变量默认是public static final 型,且必须给其初值,所以实现类中不能重新定义,也不能改变其值。

  6.抽象类中的变量默认是 friendly 型,其值可以在子类中重新定义,也可以重新赋值。

  7.接口中的方法默认都是 public,abstract 类型的。

  结论

  abstract class 和 interface 是 Java语言中的两种定义抽象类的方式,它们之间有很大的相似性。但是对于它们的选择却又往往反映出对于问题领域中的概 念本质的理解、对于设计意图的反映是否正确、合理,因为它们表现了概念间的不同的关系(虽然都能够实现需求的功能)。这其实也是语言的一种的惯用法,希望读者朋友能够细细体会。

2010年05月3日

排序算法总结

类归于: 未分类 — admin @ 9:53 下午

排序算法总结

-

一、插入排序(Insertion Sort)
1. 基本思想:
每次将一个待排序的数据元素,插入到前面已经排好序的数列中的适当位置,使数列依然有序;直到待排序数据元素全部插入完为止。
2. 排序过程: 
【示例】:
[初始关键字] [49] 38 65 97 76 13 27 49
    J=2(38) [38 49] 65 97 76 13 27 49
    J=3(65) [38 49 65] 97 76 13 27 49
    J=4(97) [38 49 65 97] 76 13 27 49
    J=5(76) [38 49 65 76 97] 13 27 49
    J=6(13) [13 38 49 65 76 97] 27 49
    J=7(27) [13 27 38 49 65 76 97] 49
    J=8(49) [13 27 38 49 49 65 76 97]

代码:

Procedure InsertSort(Var R : FileType);
//对R[1..N]按递增序进行插入排序, R[0]是监视哨//
  Begin
    for I := 2 To N Do //依次插入R[2],…,R[n]//
    begin
      R[0] := R; J := I – 1;
      While R[0] < R[J] Do //查找R的插入位置//
       begin
        R[J+1] := R[J]; //将大于R的元素后移//
        J := J – 1
       end
      R[J + 1] := R[0] ; //插入R //
    end
  End; //InsertSort //

二、选择排序
1. 基本思想:
  每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。
2. 排序过程:
【示例】:
初始关键字 [49 38 65 97 76 13 27 49]
第一趟排序后 13 [38 65 97 76 49 27 49]
第二趟排序后 13 27 [65 97 76 49 38 49]
第三趟排序后 13 27 38 [97 76 49 65 49]
第四趟排序后 13 27 38 49 [49 97 65 76]
第五趟排序后 13 27 38 49 49 [97 97 76]
第六趟排序后 13 27 38 49 49 76 [76 97]
第七趟排序后 13 27 38 49 49 76 76 [ 97]
最后排序结果 13 27 38 49 49 76 76 97

代码:

Procedure SelectSort(Var R : FileType); //对R[1..N]进行直接选择排序 //
  Begin
    for I := 1 To N – 1 Do //做N – 1趟选择排序//
     begin
      K := I;
      For J := I + 1 To N Do //在当前无序区R[I..N]中选最小的元素R[K]//
       begin
        If R[J] < R[K] Then K := J
       end;
      If K <> I Then //交换R和R[K] //
        begin Temp := R; R := R[K]; R[K] := Temp; end;
     end
  End; //SelectSort //

三、冒泡排序(BubbleSort)
1. 基本思想:
  两两比较待排序数据元素的大小,发现两个数据元素的次序相反时即进行交换,直到没有反序的数据元素为止。
2. 排序过程:
  设想被排序的数组R[1..N]垂直竖立,将每个数据元素看作有重量的气泡,根据轻气泡不能在重气泡之下的原则,从下往上扫描数组R,凡扫描到违反本原则的轻气泡,就使其向上”漂浮”,如此反复进行,直至最后任何两个气泡都是轻者在上,重者在下为止。
【示例】:
49 13 13 13 13 13 13 13
38 49 27 27 27 27 27 27
65 38 49 38 38 38 38 38
97 65 38 49 49 49 49 49
76 97 65 49 49 49 49 49
13 76 97 65 65 65 65 65
27 27 76 97 76 76 76 76
49 49 49 76 97 97 97 97

代码:

Procedure BubbleSort(Var R : FileType) //从下往上扫描的起泡排序//
Begin
  For I := 1 To N-1 Do //做N-1趟排序//
   begin
     NoSwap := True; //置未排序的标志//
     For J := N – 1 DownTo 1 Do //从底部往上扫描//
      begin
       If R[J+1]< R[J] Then //交换元素//
        begin
         Temp := R[J+1]; R[J+1 := R[J]; R[J] := Temp;
         NoSwap := False
        end;
      end;
     If NoSwap Then Return//本趟排序中未发生交换,则终止算法//
    end
End; //BubbleSort//

四、快速排序(Quick Sort)
1. 基本思想:
  在当前无序区R[1..H]中任取一个数据元素作为比较的”基准”(不妨记为X),用此基准将当前无序区划分为左右两个较小的无序区:R[1..I-1]和R[I+1..H],且左边的无序子区中数据元素均小于等于基准元素,右边的无序子区中数据元素均大于等于基准元素,而基准X则位于最终排序的位置上,即R[1..I-1]≤X.Key≤R[I+1..H](1≤I≤H),当R[1..I-1]和R[I+1..H]均非空时,分别对它们进行上述的划分过程,直至所有无序子区中的数据元素均已排序为止。
2. 排序过程:
【示例】:
初始关键字 [49 38 65 97 76 13 27 49]
第一次交换后
[27 38 65 97 76 13 49 49]
第二次交换后
[27 38 49 97 76 13 65 49]
J向左扫描,位置不变,第三次交换后
[27 38 13 97 76 49 65 49]
I向右扫描,位置不变,第四次交换后
[27 38 13 49 76 97 65 49]
J向左扫描
[27 38 13 49 76 97 65 49]
(一次划分过程)

初始关键字
[49 38 65 97 76 13 27 49]
一趟排序之后
[27 38 13] 49 [76 97 65 49]
二趟排序之后
[13] 27 [38] 49 [49 65]76 [97]
三趟排序之后 13 27 38 49 49 [65]76 97
最后的排序结果 13 27 38 49 49 65 76 97
各趟排序之后的状态

代码:

Procedure Parttion(Var R : FileType; L, H : Integer; Var I : Integer);
//对无序区R[1,H]做划分,I给以出本次划分后已被定位的基准元素的位置 //
Begin
  I := 1; J := H; X := R ;//初始化,X为基准//
  Repeat
    While (R[J] >= X) And (I < J) Do
      begin
       J := J – 1 //从右向左扫描,查找第1个小于 X的元素//
       If I < J Then //已找到R[J] 〈X//
         begin
          R := R[J]; //相当于交换R和R[J]//
          I := I + 1
         end;
       While (R <= X) And (I < J) Do
          I := I + 1 //从左向右扫描,查找第1个大于 X的元素///
      end;
     If I < J Then //已找到R > X //
       begin         R[J] := R; //相当于交换R和R[J]//
        J := J – 1
       end
  Until I = J;
  R := X //基准X已被最终定位//
End; //Parttion //

代码:

Procedure QuickSort(Var R :FileType; S,T: Integer); //对R[S..T]快速排序//
Begin
  If S < T Then //当R[S..T]为空或只有一个元素是无需排序//
    begin
      Partion(R, S, T, I); //对R[S..T]做划分//
      QuickSort(R, S, I-1);//递归处理左区间R[S,I-1]//
      QuickSort(R, I+1,T);//递归处理右区间R[I+1..T] //
    end;
End; //QuickSort//

五、堆排序(Heap Sort)
1. 基本思想:
堆排序是一树形选择排序,在排序过程中,将R[1..N]看成是一颗完全二叉树的顺序存储结构,利用完全二叉树中双亲结点和孩子结点之间的内在关系来选择最小的元素。
2. 堆的定义: N个元素的序列K1,K2,K3,…,Kn.称为堆,当且仅当该序列满足特性:
       Ki≤K2i Ki ≤K2i+1(1≤ I≤ [N/2])

堆实质上是满足如下性质的完全二叉树:树中任一非叶子结点的关键字均大于等于其孩子结点的关键字。例如序列10,15,56,25,30,70就是一个堆,它对应的完全二叉树如上图所示。这种堆中根结点(称为堆顶)的关键字最小,我们把它称为小根堆。反之,若完全二叉树中任一非叶子结点的关键字均大于等于其孩子的关键字,则称之为大根堆。
3. 排序过程:
堆排序正是利用小根堆(或大根堆)来选取当前无序区中关键字小(或最大)的记录实现排序的。我们不妨利用大根堆来排序。每一趟排序的基本操作是:将当前无序区调整为一个大根堆,选取关键字最大的堆顶记录,将它和无序区中的最后一个记录交换。这样,正好和直接选择排序相反,有序区是在原记录区的尾部形成并逐步向前扩大到整个记录区。
【示例】:对关键字序列42,13,91,23,24,16,05,88建堆

代码:

Procedure Sift(Var R :FileType; I, M : Integer);
//在数组R[I..M]中调用R,使得以它为完全二叉树构成堆。事先已知其左、右子树(2I+1 <=M时)均是堆//
Begin
  X := R; J := 2*I; //若J <=M, R[J]是R的左孩子//
  While J <= M Do //若当前被调整结点R有左孩子R[J]//
   begin
    If (J < M) And R[J].Key < R[J+1].Key Then
      J := J + 1 //令J指向关键字较大的右孩子//
        //J指向R的左、右孩子中关键字较大者//
    If X.Key < R[J].Key Then //孩子结点关键字较大//
      begin
        R := R[J]; //将R[J]换到双亲位置上//
        I := J ; J := 2*I //继续以R[J]为当前被调整结点往下层调整//
      end;
     Else
      Exit//调整完毕,退出循环//
   end
  R := X;//将最初被调整的结点放入正确位置//
End;//Sift//

代码:

Procedure HeapSort(Var R : FileType); //对R[1..N]进行堆排序//
 Begin
  For I := N Div Downto 1 Do //建立初始堆//
   Sift(R, I , N)
  For I := N Downto 2 do //进行N-1趟排序//
   begin
    T := R[1]; R[1] := R; R := T;//将当前堆顶记录和堆中最后一个记录交换//
    Sift(R, 1, I-1) //将R[1..I-1]重成堆//
   end
End; //HeapSort//

六、几种排序算法的比较和选择
1. 选取排序方法需要考虑的因素:
(1) 待排序的元素数目n;
(2) 元素本身信息量的大小;
(3) 关键字的结构及其分布情况;
(4) 语言工具的条件,辅助空间的大小等。
2. 小结:
(1) 若n较小(n <= 50),则可以采用直接插入排序或直接选择排序。由于直接插入排序所需的记录移动操作较直接选择排序多,因而当记录本身信息量较大时,用直接选择排序较好。
(2) 若文件的初始状态已按关键字基本有序,则选用直接插入或冒泡排序为宜。
(3) 若n较大,则应采用时间复杂度为O(nlog2n)的排序方法:快速排序、堆排序或归并排序。
快速排序是目前基于比较的内部排序法中被认为是最好的方法。
(4) 在基于比较排序方法中,每次比较两个关键字的大小之后,仅仅出现两种可能的转移,因此可以用一棵二叉树来描述比较判定过程,由此可以证明:当文件的n个关键字随机分布时,任何借助于”比较”的排序算法,至少需要O(nlog2n)的时间。

这句话很重要 它告诉我们自己写的算法 是有改进到最优 当然没有必要一直追求最优
(5) 当记录本身信息量较大时,为避免耗费大量时间移动记录,可以用链表作为存储结构。

2010年04月27日

四级阅读解析

类归于: 未分类 — admin @ 11:21 下午

四级阅读在试卷中分成两个部分:Part II快速阅读和Part IV仔细阅读,其中仔细阅读又分为Section A选词填空(或短文问答,不过四级从2006年12月份改革到现在没考过,六级一直在考)和Section B多项选择。这几种题型有相互交叉的地方,也有自己独特之处。接下来跟大家分享一下个人的经验。 一、快速阅读 这种题型考察的是:在有限时间内(15分钟)找到指定信息(10道题目)的能力。文章会根据一句话或者是几句话来出后面的一道题目。所以我们需要做的就是根据题目去找其对应原文的信息,再把该题目和原文信息相比就可以得出答案。 由于在考场上,这部分时间很短,所以我们要充分利用时间,把该拿的分拿到手,具体安排做题的步骤,建议如下: Step 1:看标题标题的作用就在于高速你这篇文章所讲述的核心内容是什么,大标题是一定有的,小标题是偶尔出现一次,比如2007年6月。如果出现小标题,则它的作用就是帮助题目定位于原文的。 Step 2:读题目不建议看完每一道题就去找它对应的位置,因为浪费时间;也不建议把十道题一起看完再去找对应,因为会读到后面忘记前面。建议1-3题为第一组,4-7题为第二组,8-10题为第三组,看完一个小组,画出小组中最明显的词(时间,数字,专有名词,核心的名词、动词、形容词、副词等),以小组为单位,去找它们对应的位置,这样的好处就是可以快速定位几道题目。设想,如果第一题找到了原文的位置,第三题也找到了,不过第二题却找不到,但是,根据原文的顺序与出题的顺序大致一致,那么第二题的位置就很清楚了,在第一题和第三题对应文章信息中间。 Step 3:找信息结合第2步 Step 4:选答案 1-7题的选择题正确答案一般为原文重复,即“所见即所得”(不过有一道题一般是要分析的),因为整体时间短,一般只要找到的词就是答案;8-10题答案一般为原文原词或词组,只是偶尔有些单词形式的变化而已。 根据分析,从1-7题考选择题开始,在这7道题里,ABCD四个选项必须得出现,所以当发现自己有的选项没选时,可能就有问题。 二、选词填空 这种题型是大家在考场上比较头疼的一种题型,因为每做一个空格都要从15个选项里选出一个,看似是“15选1”的工作,实际不然。每个空格前后都有单词的语法搭配,比如如果空格前出现一个“a”,那么空格就一定要填可数名词单数的形式。所以这种题型的选项的词性就显得尤为重要。如果判断出每个空格所填单词的词性,就去相关词性的选项去找就可以了。有时可以达到“3选1”,“2选1”,甚至偶尔可能“1选1”(这样题目必对无疑)归纳做题步骤如下: Step 1:看选项在看选项时,要注意标注选项的词性和词义。很多同学不认识单词的意思,但是要尽量把词性标出来。因为有的时候只靠词性及其形式就可以做题了,甚至是“蒙”题。同时要注意特殊的选项,如多性词(有很多词性的词)、多义词、形式特殊的词(名词复数、形容词加-er、动词-ing、-ed等),因为几乎每次这些“特殊”的选项最后几乎都被选到。 Step 2:读文章跟完形填空类似,建议以段为单位读文章,然后再选择。 Step 3:选答案要判断空格处所填单词的词性及形式,去答案中找对应。同时要注意空格也会跟文章中已知的信息对应,所以要注意已知信息。

2010年04月17日

硬盘双击打不开,提示选择应用程序打开?

类归于: 未分类 — 标签: — admin @ 1:12 上午

解决方法:
1.在桌面新建一个压缩文件
2.打开此压缩文件.按F4出现CDEFG等你所分的盘符,点击每个盘符,估计可以找到以下三个文件:
(1)sxs.exe(可执行文件)
(2)autorun.inf (系统配置文件)
(3)setup.exe (可执行文件)
在每个盘符下删掉以上三个文件~(记得没删完之前别双击其它盘符,防止之前的操作失败).
如果是硬盘中毒则需要修改注册表
运行regedit,打开注册表,编辑,查找sxs.exe,然后将查找到的shell及其子键全部删除,按F3键继续查找直到搜索完毕

2010年04月16日

为何右击我的电脑第一项是资源管理器,双击文件夹时跳出的是搜索.怎样把打开调到第一项?是笔记本,没毒

类归于: 未分类 — 标签: — admin @ 11:44 下午

双击我的电脑能打开,不过左边是资源管理器的树型图.
单击“开始”菜单->“运行…”->键入regedit->确定在弹出的“注册表编辑器”中进行以下操作:找到HKEY_CLASSES_ROOT\ directory ,删掉shell项即可; 有需要的话再找到HKEY_CLASSES_ROOT\drive,同样删掉shell项即可. 注:保险起见,请先备份注册表或导出注册表中这两项

我的电脑里的硬盘大不开,双击后出现选择打开方式,应该怎么办啊

类归于: 未分类 — 标签: — admin @ 11:36 下午

双击本地磁盘出现选择打开方式,选择用internet可以用,但是不方便啊,该怎么办啊???
这就是杀毒后留下的后遗症!
建议手动更正!
展开注册表到以下项:HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\MountPoints2\
找到CPC\Volume项,其下就是就有你的硬盘对应的项,比如{6570f7b0-7038-11d4-b079-000000000000}类似的项,

再到mousepoint2下找到相应的项,并删除该项下的的shell项,其实在mousepoint2项下类似{6570f7b0-7038-11d4-b079-000000000000}的项前边理论上都因该是没“+”的,所以你可以放心的删除有“+”的项下边的所有子项,然后硬盘的双击和右键就能解决了

该位置是病毒的兵家必争之地,但一些杀毒软件并未将其列入查杀的范围!
所以杀毒软件还有待完善啊!
自己按上述说明操作就行了!相信如果你学会了修改这些项,你也可以帮别人修复硬盘的打开问题,万事灵活点,简略的就这些了,相信聪明的你一定能领会的!

2009年12月2日

蒋介石日记与蒋介石其人(转载)

类归于: 未分类 — admin @ 10:38 下午

类归于: 未分类 — 标签: — admin @ 10:36 下午

作者:杨天石

杨天石,1960年毕业于北京大学中文系。现为中国社会科学院荣誉学部委员、研究生院教授、中央文史研究馆馆员、中国现代文化学会常务副会长。长期研究中国文化史与中国近代史,尤长于中华民国史、中国国民党史和蒋介石的研究。著有《找寻真实的蒋介石——蒋介石日记解读》、《蒋氏秘档与蒋介石真相》等二十余种。其中《找寻真实的蒋介石》一书被全国31家媒体共同推选为2008年十大好书,并获香港书奖。

正文:

2005年是抗战胜利60周年,也是世界反法西斯战争的60周年,中共中央总书记胡锦涛同志在人民大会堂作了一个报告,其中有一段话说:“中国国民党和中国共产党领导的抗日军队,分别担负着正面战场和敌后作战的任务,形成了共同抗击日本侵略者的战略态势。”以前中共领导人的讲话从来不曾有过这样的提法。表面上看是一个小小的语言秩序的变化,实际上我觉得充分体现了中国共产党领导人对于抗战这段历史的一个尊重、一个重新评价,是客观地、正确地反映了抗日战争的实际。

胡锦涛同志这一段话在海内外激起了很好的反响,也是在2005那一年,我到台湾去参加台湾方面召开的纪念抗日战争胜利暨台湾光复60周年学术讨论会。在会议进行的中间,马英九到会场来看望参加会议的学者,作了一个即席讲话,他的第一句话就是,我告诉大家一个好消息,北京的胡锦涛也肯定了我们国民党在抗战里的功绩了。马英九因为胡锦涛的讲话而高兴,作为一个好消息来告诉台湾的学者,显然这对于两岸和平关系的建立、对于争取台湾的民心,是起了积极的好的作用。

我们只要是尊重历史,对于海峡两岸的和解就有好处,如果我们不尊重历史,我们的宣传、我们的历史书有片面性,那么对于两岸化解矛盾、化解隔阂就有不好的作用。正确地评价蒋介石,给我们的民族、给我们的子孙后代提供一部科学的、准确的、真实的中国近代史,可以促进两岸和平关系的建立和发展、促进全世界华人的团结、促进祖国统一大业的发展。

蒋介石日记的现状和开放情况

蒋介石从1915年开始记日记,一直记到1972年,记了57年的日记。蒋介石日记内容比较丰富,写他的工作、写他的生活、写他的读书,写他的所思、所想、所行,所以说蒋的日记有比较高的历史价值。那么他的日记可靠吗?我研究了他的日记之后,觉得蒋介石的日记有比较高的真实性。

第一,他记了他对他的同事、他的部下、他的朋友、他的亲戚的感想。蒋介石是一个爱骂人的人,谁都骂,比如说孔祥熙,这是蒋介石的亲家,蒋介石在日记里骂他“无耻之至”,宋子文也是他的亲戚,蒋介石骂他嚣张跋扈,绝对不能够再使用他。孙科是总理的公子,蒋介石骂他说是阿斗,说孙科这个人,不仅卖党而且卖国,是总理的不孝子孙。国民党的一个空军司令周至柔,蒋介石骂他说枪毙十次都不够。这么一本谁都骂的日记,蒋介石生前可以公布吗?不能公布,所以说蒋介石的日记主要是写给自己看的,不是为了做秀。

第二,蒋介石在日记里写了许多他的私生活,比如蒋介石早年很好色,蒋介石表示他要跟自己的好色进行斗争。比如说蒋介石逛大街,他对面走来一个女孩子,蒋介石一看这个女孩子长得很漂亮,他心里就想这个女孩子很漂亮,当天晚上蒋介石进行思想斗争,他的日记里会出现这么一行字,前面四个字是“见色心动”,就是见到一个漂亮女孩子心里动了,下面五个字,“记大过一次”。

从这两点来看,他将骂人的话都记在日记里,将隐私写在日记里,所以我觉得他的日记有相当的可靠性。历史家研究人物,人物的公开行为我们都可以看得到,但是人物的内心世界我们是看不到的,蒋介石日记的价值就在于揭示了蒋这一辈子内心活动发展的过程,也包含了许多重要的中国政坛的内幕,包括了世界历史的一些重要的内幕,这个是最吸引历史家的地方。

我想谁都没有想到,蒋介石在日记里有记载,蒋介石派军统特务到瑞士去运动希特勒的部队倒戈,而且蒋介石表示这件事他要向罗斯福总统通报。后来德国军队内部确实发生过安装定时炸弹准备将希特勒炸死的事实,只是没有将希特勒炸死。像这样的一些政坛的内幕,我们只能在蒋介石日记里看到。

现在保存下来的蒋介石日记有53年,1915、1916、1917、1924年的丢失了,保存下来的已经在美国斯坦福大学的胡佛档案馆全部开放,每一个人都可以凭有效证件自由阅览,不需要问你什么样的身份、为什么去研究。

我对于蒋介石的几点基本看法

第一,我认为蒋是民族主义者,反对帝国主义侵略中国,希望中华民族振兴,中国统一。

蒋介石在很长时间内反苏,他反苏的原因很复杂,很难用几句话来概括,但是其中一个原因,是对于苏联的民族扩张主义和民族利己主义的不满。1923年蒋介石被孙中山派到苏联去,头衔是孙逸仙博士代表团团长,此行目的主要是想争取苏联同意在蒙古的库仑(现乌兰巴托),允许国民党办一所军官学堂,训练国民党的军队,然后从蒙古进攻北京。当时北京是直系军阀曹锟的首都,是北洋军阀的根据地。但苏联领导人拒绝了孙中山和蒋介石的要求,当时苏联的军事委员会的主席托洛斯基告诉蒋介石,说你们国民党人绝对不允许将脚步伸进蒙古的土地,你们要北伐,要进攻北京,只能从蒙古的边境上起兵,蒋介石很生气,当天在日记里写了一段话,说求人不如求己,一些人他宣称是你的盟友,但是他考虑问题都是从自己的利益出发。

然后谈英国。1925年的6月23日,广州人民为了支援香港大罢工,在广州租界对面的沙基举行游行,英国在租界开枪,打死中国游行群众50多人,打伤更多,从沙基惨案这一天,蒋介石就在日记里每天写一条反对英国的口号,例如“英夷不灭焉能称男儿”、“英夷不灭革命何能成功”、“英夷不灭何能解放全人类”。蒋介石一辈子讨厌、仇恨英国帝国主义,蒋介石在日记里多次表示,说英国是老牌帝国主义,只懂得剥削和压迫。

美国是二次世界大战时中国的同盟国,但是蒋介石和美国有矛盾、有冲突,而且矛盾、冲突很厉害。大家别看当时的报纸里,中国和美国之间好像友谊很深厚,实际上蒋在日记里大骂美帝国主义。1945年罗斯福跟斯大林、丘吉尔在雅尔塔会议上出卖了中国主权,蒋介石在日记里说,这是罗斯福侮辱中国、出卖中国的典型表现。

第二,蒋介石是一个改良主义者。

蒋介石早年想改造中国,特别是他20年代下功夫读过马克思的书籍,也读过列宁的书籍。孙中山去世之后,蒋介石的改良主义思想发展了、形成了。耕者有其田,这本来是孙中山的主张,但是怎么样让农民得到土地,孙中山主张和平土改、双赢土改,就是让农民得到土地,让地主也不吃亏。蒋介石继承了孙中山的这一思想。不过,这一点,蒋介石在大陆没有能够做到,因为哪怕是用和平的办法、用双赢的办法来搞土改,都会触动地主阶级的利益,国民党的许多高级官员、三亲六故、七姑八姨都是地主,怎么可能动自己亲戚的土地呢?国民党的土改到了台湾才搞成功。就是双赢的办法,国家用国营公司的股票向地主收购土地,然后交给农民去耕种。为什么国民党的土改在大陆搞不了,在台湾可以呢?很简单,国民党到了台湾,是外省人,跟台湾的地主没有很大的关系,所以下得了手。

在资本问题上,蒋介石日记里曾经写过,他要沿着社会主义的路线,搞社会资本主义。第一条,他认为解决民生问题,要生产为主、平均分配。第二是控制大资本,第三是实行劳资合作。基本上是改良主义的路线。蒋介石曾经总结了他跟中共当年的分歧是三个方面。第一,蒋介石说,共产党是主张废除私有制,蒋介石说他主张要保护合理的私有制。第二,蒋介石说共产党主张阶级斗争,他主张阶级合作,劳资要合作。第三,蒋介石认为中共主张暴力,用暴力进行社会改造,蒋介石表示他主张用非暴力。从以上三个方面来看,我们说蒋介石是一个改良主义者,他不是一个革命者。

第三,我认为蒋介石是一个个人中心主义者。

蒋介石有许多毛病,我刚才讲了他好色,还有暴躁、孤僻、多疑等,但有一个毛病,延续他整个一生,就是个人中心主义。蒋介石认为,老天爷生他蒋介石就是为了救中国。1927年反共时,他有一个三段论。第一句话,我蒋介石是革命的,第二句话,你反对我,第三句话,那你就是反革命了。蒋介石自我迷信到了极点,他看别人都不行,只有他行,他什么都管。举一个例子,当年重庆是陪都,重庆市的垃圾堆在什么地方,蒋介石都要下命令指挥的。甚至于国民党的中央宣传部部长叶楚伧怎么吃饭,他也要管,蒋介石在日记里写,说叶部长的吃相太难看,应提醒之。

第四,我认为蒋介石有功有过,既有大功,又有大过。

蒋介石有两大功,第一大功是领导北伐,打败了吴佩孚、孙传芳、张作霖三大军阀集团,结束了北洋军阀统治中国17年的混乱局面。第二大功,蒋介石领导国民党和国民政府坚持抗战,直到最后胜利,挽救了近代中国最严重的一次亡国危机。

蒋介石的两大过。第一大过,1927年到1937年的清党剿共。第二大过,1946年到1949年的三年内战。

蒋介石与国共关系

第一次国共合作是从1922年到1927年,时间是五年左右。第一次国共合作是孙中山提倡的,是孙中山决定的,它的形式是党内合作,就是共产党员以个人身份加入国民党,同时保持自己的共产党员的身份。许多中共党员,比如李大钊、陈独秀、瞿秋白、张太雷、毛泽东,都是跨党党员。

第一次国共合作,蒋介石最初持怀疑态度。1923年在莫斯科的时候,中共党员动员蒋介石参加中国共产党,蒋介石拒绝了,理由是参加中共这是一件大事情,他要请示孙先生。蒋介石的这个回答让当时莫斯科的中共党员非常不满意,觉得蒋介石愚忠,你参加中共你自己可以决定,为什么要请示孙中山呢?

蒋介石从苏联回来以后,给孙中山写了一个报告,对苏联有所批评。但是从1924年开始,蒋介石成了坚决主张联共的最著名左派,蒋介石当时讲过两句非常著名的话:没有共产主义的三民主义是假三民主义,没有共产党人参加的国民党是假的国民党。在孙中山的语言里只有“容共”这两个字,国民党高层里第一个提出“联共”的是蒋介石,所以蒋介石是第一个国共合作的积极支持者。

后来怎么出了问题呢?1926年蒋介石和苏联顾问谈了一次话,蒋介石说我到过你们苏俄,我也研究过苏俄十月革命的经验,这个经验是革命只能有一个司令部。蒋介石说现在中国革命有两个党,一个是中国国民党,一个是中国共产党,革命只能有一个司令部,因此,所有参加国民党的共产党员都应该退出共产党,做一个单纯的国民党员。结果苏联顾问拒绝这一要求,中国共产党也拒绝了。

这之后蒋介石就召开了国民党二届二中全会,提出整理党务案,第一,所有参加国民党的共产党员,将名单交给国民党,我好知道你谁是共产党啊。第二,凡是共产党员在国民党中央里担任部长以上职务的,一律不能再当了。蒋介石一步步走上了清党、反共的道路,有一个发展的过程。

为了抗日的目标,1937年开始,国共第二次合作。抗战初期,两党合作不错,是蜜月期。有一天蒋介石将周恩来找去,说我现在有一个主意,为了两党合作更加紧密,干脆我的国民党取消,你的共产党也取消,咱们两党合并组成一个大党,叫“国民革命同盟会”。延安经过研究,决定同意。注意,我还有话,中共同意成立国民革命同盟会,但是认为中共决不能取消。中共建议将国民革命同盟会作为一个统一战线组织,别的党派也可以参加,作为统一战线组织,拥护蒋介石为领袖。蒋介石的要求遭到拒绝之后,从1939年1月开始,国民党就通过了一个办法,叫“限制异党活动办法”。本来共产党是朋友、是战友,现在不是朋友、不是战友了,是“异党”了,所以以后的摩擦、斗争就由此产生了。

这是两次国共合作的基本情况。

第一次国共合作,两党是在打倒列强、打倒军阀的目的下合作了。第二次合作目的是反对日本的侵略。为什么两次合作后又出现分歧呢,最后打起来了呢?我想原因主要是两点。

第一,两党在思想、理论和策略上的分歧。中共是革命党,国民党是改良派。比如说土改,国民党主张和平土改、双赢土改,中共的土改是斗争土改。1927到1937年,中共在农村搞土地革命,就是“打土豪、分田地”。分田地确实是国共两党的共同主张,但是中共实行分田地的前提是落实在“打”上。

第二个分歧是领导权的分歧,就是中国革命到底要由谁来领导。在蒋介石看来,当然是应该由国民党来领导,在共产国际、中共看来,中国革命应该由中国共产党领导。蒋介石要求中国革命由国民党领导,共产国际指示中国共产党,中国革命一定要由共产党来领导。领导权只有一个,双方都要,只有一个办法,枪杆子里见。所以国共的分裂,有它的必然性。

蒋介石为什么丢掉了大陆

第一个原因,丢掉了农民。中国人口里农民是大多数,农民处在最困难、最穷困的地步,农民两个要求,一个是温饱、一个是土地,国民党执政22年,没有满足农民温饱的要求,也没有满足农民取得土地的要求,所以国民党将农民丢掉了。中共之所以胜利,主要是农民的支持、农民积极地参军,农民要改变贫困的面貌。

第二个原因,国民党丢掉了民族资产阶级。创办了中国旅行社和中国商业储蓄银行的民族资本家陈光甫,他在1949年写过一篇日记,说国民党执政22年,没有给农民任何好处,也没有给民族工业、民族资本家带来任何的好处。

第三个原因,国民党的经济政策失误,通货膨胀。

第四个原因,国民党严重的贪污腐化。抗战胜利之后,沦陷区的老百姓,特别是长江中下游的老百姓,欢迎国民党返回。但是国民党返回后,贪污腐化越来越严重,当时有“五子登科”的说法(房子、车子、条子、票子、婊子)。当时百姓有一句民谣,“盼中央、想中央,中央来了更遭殃”。国民党在抗战之后,将民心完全丢掉了。

第五个原因,一党专政、个人独裁。抗战胜利之后,美国人希望按照美国的模式,在中国成立联合政府,民主党派希望在中国成立联合政府,中共当时也同意成立联合政府。当时中共曾经有一个想法,要将中共中央所在地从延安搬到江苏的淮安,就是因为淮安离南京更近,中共的领导人可以方便地去参加南京国民政府的工作。但是蒋介石仍然坚持一党专政、个人独裁,发动了内战,因此三年时间就被赶出了大陆。

蒋介石丢掉大陆的原因,当然还可以找到更多,蒋介石在1950年的日记里写过一个反省,是13条,其中最后一条是讲他在大陆没有很好地来宣传三民主义,特别是民生主义。我说不是没有宣传的问题,而是没有实行的问题,就是蒋介石、国民党在大陆执政22年,没有解决中国的民生问题,这是他在大陆失败的最根本的一个原因。

2009年09月29日

电脑无法启动

类归于: 未分类 — 标签: — admin @ 11:24 下午

了解电脑启动的过程
在诸多电脑故障中,无法正常启动是最令用户头痛的事了。笔者长期从事维护电脑的工作,在这个方面积累了一些经验,现在就将这些经验整理归纳出来与朋友们分享。本文将以家用电脑和windows98操作系统为基础,介绍电脑无法正常启动故障的诊治。

要想准确地诊断电脑不启动故障,首先要了解的起动过程,当我们按下电源开关时,电源就开始向主板和其它设备供电,此时电压还没有完全稳定,主板控制 芯片组会根据CMOS中的CPU主频设置向CPU发出一个Reset(重置)信号,让CPU初始化,电压完全稳定后,芯片组会撤去Reset信号,CPU 马上从地址FFFF0H处执行一条跳转指令,跳到系统BIOS中真正的启动代码处。系统BIOS首先要做的事情就是进行POST(Power On Self Test,加电自检)。POST的主要任务是检测系统中的一些关键设备(电源、CPU芯片、BIOS芯片、定时器芯片、数据收发逻辑电路、DMA控制器、 中断控制器以及基本的64K内存和内存刷新电路等)是否存在和能否正常工作,如内存和显卡等。

自检通过后,系统BIOS将查找显示卡的BIOS,由显卡BIOS来完成显示卡的初始化,显示器开始有显示,自此,系统就具备了最基本的运行条件, 可以对主板上的其它部分进行诊断和测试,再发现故障时,屏幕上会有提示,但一般不死机,接着系统BIOS将检测CPU的类型和工作频率,然后开始测试主机 所有的内存容量,内存测试通过之后,系统BIOS将开始检测系统中安装的一些标准硬件设备,这些设备包括:硬盘、CD-ROM、软驱、串行接口和并行接口 等连接的设备,大多数新版本的系统BIOS在这一过程中还要自动检测和设置内存的相关参数、硬盘参数和访问模式等。

标准设备检测完毕后,系统BIOS内部的支持即插即用的代码将开始检测和配置系统中已安装的即插即用设备。每找到一个设备之后,系统BIOS都会在 屏幕上显示出设备的名称和型号等信息,同时为该设备分配中断、DMA通道和I/O端口等资源。最后系统BIOS将更新ESCD(Extended System Configuration Data,扩展系统配置数据)。ESCD数据更新完毕后,系统BIOS的启动代码将进行它的最后一项工作,即根据用户指定的启动顺序从软盘、硬盘或光驱启 动。

以从C盘启动为例,系统BIOS将读取并执行硬盘上的主引导记录,主引导记录接着从分区表中找到第一个活动分区,然后读取并执行这个活动分区的分区 引导记录,而分区引导记录将负责读取并执行IO.SYS,这是Windows最基本的系统文件。IO.SYS首先要初始化一些重要的系统数据,然后就显示 出我们熟悉的蓝天白云,在这幅画面之下,Windows将继续进行DOS部分和GUI(图形用户界面)部分的引导和初始化工作,一切顺利结束,电脑正常启 动。

根据故障现象诊治
了解电脑启动的过程,故障就好判断了,下面我们就根据故障现象开始诊治了:

现象一:系统完全不能启动,见不到电源指示灯亮,也听不到冷却风扇的声音。这时,基本可以认定是电源部分故障,检查:电源线和插座是否有电、主板电 源插头是否连好,UPS是否正常供电,再确认电源是否有故障,最简单的就是替换法,但一般用户家中不可能备有电源等备件,这时可以尝试使用下面的方法(注 意:要慎重):

先把硬盘,CPU风扇,或者CDROM连好,然后把ATX主板电源插头用一根导线连接两个插脚(把插头的一侧突起对着自己,上层插脚从左数第4个和 下层插脚从右数第3个,方向一定要正确),然后把ATX电源的开关打开,如果电源风扇转动,说明电源正常,否则电源损坏。如果电源没问题直接短接主板上电 源开关的跳线,如果正常,说明机箱面板的电源开关损坏。

现象二:电源批示灯亮,风扇转,但没有明显的系统动作。这种情况如果出现在新组装电脑上应该首先检查CPU是否插牢或更换CPU,而正在使用的电脑 的CPU损坏的情况比较少见(人为损坏除外),损坏时一般多带有焦糊味,如果刚刚升级了BIOS或者遭遇了CIH病毒攻击,这要考虑BIOS损坏问题 (BIOS莫名其妙的损坏也是有的),修复BIOS的方法很多杂志都介绍过就不重复了;确认CPU和BIOS没问题后,就要考虑CMOS设置问题,如果 CPU主频设置不正确也会出现这种故障,解决方法就是将CMOS信息清除,既要将CMOS放电,一般主板上都有一个CMOS放电的跳线,如果找不到这个跳 线可以将CMOS电池取下来,放电时间不要低于5分钟,然后将跳线恢复原状或重新安装好电池即可;如果CPU、BIOS和CMOS都没问题还要考虑电源问 题:PC机电源有一个特殊的输出信号,称为POWER GOOD(PG)信号,如果PG信号的低电平持续时间不够或没有低电平时间,PC机将无法启动。如果PG信号一直为低电平,则PC机系统始终处于复位状 态。这时PC机也出现黑屏、无声响等死机现象。但这需要专业的维修工具外加一些维修经验,因此,建议采用替换法;电源没有问题就要检查是否有短路,确保主 板表面不和金属(特别是机箱的安装固定点)接触。把主板和电源拿出机箱,放在绝缘体表面,如果能启动,说明主板有短路现象;如果还是不能启动则要考虑主板 问题,主板故障较为复杂,可以使用替换法确认,然后更换主板。

现象三:电源指示灯亮,系统能启动,但系统在初始化时停住了,而且可以听到嗽叭的鸣叫声(没有视频):根据峰鸣代码可以判断出故障的部位。

ccid_page/

Award BIOS
1短声:说明系统正常启动。表明机器没有问题。

2短声:说明CMOS设置错误,重新设置不正确选项。

1长1短:说明内存或主板出错,换一个内存条试试。

1长2短:说明显示器或显示卡存在错误。检查显卡和显示器插头等部位是否接触良好或用替换法确定显卡和显示器是否损坏。

1长3短:说明键盘控制器错误,应检查主板。

1长9短:说明主板Flash RAM、EPROM错误或BIOS损坏,更换Flash RAM。

重复短响:说明主板电源有问题。

不间断的长声:说明系统检测到内存条有问题,重新安装内存条或更换新内存条重试。

AMI BIOS
1短:说明内存刷新失败。更换内存条。

2短:说明内存ECC较验错误。在CMOS 中将内存ECC校验的选项设为Disabled或更换内存。

3短:说明系统基本内存检查失败。换内存。

4短:说明系统时钟出错。更换芯片或CMOS电池。

5短:说明CPU出现错误。检查CPU是否插好。

6短:说明键盘控制器错误。 应检查主板。

7短:说明系统实模式错误,不能切换到保护模式。

8短:说明显示内存错误。显示内存有问题,更换显卡试试。

9短:说明BIOS芯片检验和错误。

1长3短:说明内存错误。内存损坏,更换。

1长8短:说明显示测试错误。显示器数据线没插好或显示卡没插牢。

现象四:系统能启动,有视频,出现故障提示,这时可以根据提示来判断故障部位。下面就是一些常见的故障提示的判断:

一、提示“CMOS Battery State Low”
原因:CMOS参数丢失,有时可以启动,使用一段时间后死机,这种现象大多是CMOS供电不足引起的。

对于不同的CMOS供电方式,采取不同的措施:
1.焊接式电池:用电烙铁重新焊上一颗新电池即可;

2.钮扣式电池:直接更换;

3.芯片式:更换此芯片,最好采用相同型号芯片替换。

如果更换电池后时间不长又出现同样现象的话,很可能是主板漏电,可检查主板上的二极管或电容是否损坏,也可以跳线使用外接电池,不过这些都需要有一定的硬件维修基础才能完成。

二、提示“CMOS Checksum Failure”
CMOS中的BIOS检验和读出错;提示“CMOS System Option Not Set”, CMOS系统未设置;提示“CMOS Display Type Mismatch ”,CMOS中显示类型的设置与实测不一致;提示“CMOS Memory Size Mismatch”,主板上的主存储器与CMOS中设置的不一样;提示“CMOS Time & Date Not Set ”,CMOS中的时间和日期没有设置。这些都需要对CMOS重新设置。

三、提示“Keyboard Interface Error”后死机
原因:主板上键盘接口不能使用,拔下键盘,重新插入后又能正常启动系统,使用一段时间后键盘无反应,这种现象主要是多次拔插键盘引起主板键盘接口松动,拆 下主板用电烙铁重新焊接好即可;也可能是带电拔插键盘,引起主板上一个保险电阻断了(在主板上标记为Fn的东西),换上一个1欧姆/0.5瓦的电阻即可。

四、自检过程中断在xxxK Cache处
这表示主板上Cache损坏,可以在CMOS设置中将“External Cache”项设为“Disable”故障即可排除。同理,在自检主板部件时出现中断,则可以认为该部件损坏,解决方法一般可以在CMOS中将其屏蔽,如果不能屏蔽该部件最好更换主板。

五、提示“FDD Controller Failure”
BIOS不能与软盘驱动器交换信息;提示“HDD Controller Failure”, BIOS不能与硬盘驱动器交换信息。应检查FDD(HDD)控制卡及电缆。

六、提示“8042 Gate A20 Error ”
8042芯片坏;提示“DMA Error”, DMA 控制器坏。这种故障需要更换。

七、提示“Display Switch Not Proper”
主板上的显示模式跳线设置错误,重新跳线。

八、提示“Keyboard is Lock…Unlock it”
键盘被锁住,打开锁后重新引导系统。

九、IDE接口设备检测信息为:“Detecting Primary (或Secondary)Master(或Slave)… None”
表示该IDE接口都没有找到硬盘,如果该IDE口确实接有硬盘的话,则说明硬盘没接上或硬盘有故障,可以从以下几方面检查:

1、硬盘电源线和数据线是否接触不良,或换一根线试试;

2、CMOS设置有无错误,进入CMOS将“Primary Master”、“Primary Slave”、“Secondary Master”三项的的“TYPE”都设置成“Auto”;

3、替换法确认硬盘本身有故障。

十、IDE接口设备检测信息下面显示“Floppy disk(s) fail(40)”出错信息
表示CMOS所指定的软盘驱动器有问题。判断和解决的方法与硬盘相似。

现象五:系统不能引导。这种故障一般都不是严重问题,只是系统在找到的用于引导的驱动器中找不到引导文件,比如:BIOS的引导驱动器设置中将软驱 排在了硬盘驱动的前面,而软驱中又放有没有引导系统的软盘或者BIOS的引导驱动器设置中将光驱排在了硬盘驱动的前面,而光驱中又放有没有引导系统的光 盘,这个都很简单,将光盘或软盘取出就可以了,实际应用中遇到“Disk Boot Failure,Insert System Disk And Press Enter”的提示,多数都是这个原因。如果是硬盘不能引导的话一般有两种情况:一种是硬盘数据线没有插好,另一种就是硬盘数据损坏。前者一般多会出现硬 盘容量检测不正确和引导时出现死机的现象;后者则是干脆找不到引导文件或提示文件损坏。前者只需重新连接好数据线即可;后者则需要用win98的启动软盘 或启动光盘启动,根据实际情况来定:

一、提示“Invalid partition table”或“Not Found any [active partition] in HDD Disk Boot Failure,Insert System Disk And Press Enter” ,这说明找不到硬盘活动分区,需要对硬盘重新分区。

二、提示“Miss operation syste”,说明硬盘活动分区需要重新格式化(format c:/s)。

三、提示“Invalid system disk Replace the disk, and then press any key”或显示“Starting Windows 98 …”时出现死机,说明硬盘上的系统文件丢失了或损坏,使用“sys c:”,命令传递系统文件给c盘,再将Command.com拷贝给c盘。

现象六:硬盘可以引导,但Windows不能正常启动,也不能进入安全模式。这种情况表明Windows 98出现了严重的错误,首先,用杀毒软件查杀病毒,看是不是病毒造成的,如果没有发现病毒可以用以下方法试一试。

一、直接将接口卡与各个外设都拨去,再插回去,并调整接口卡上的设置(如果可以的话)来检查是否是硬件冲突造成,开机看看是否 可正常进入Windows。

二、检查CMOS中的设置是否 有不正确的地方,若不清楚,可选择Load Bios Default项目,然后重开机,开机看是否可正常进入Windows。

三、在启动时按下F8键,一般会出现6个选项(如果安装了DOS6.22则出现7个选项)选择第4项“step-by-step confirmation”进入单步运行方式,按照出现死机的命令选择处理方法:

1、执行“Process the system registry”计算机就死机,说明是注册表故障,那么可以重新启动按F8键,选第4项后,只在Device=c:\windows\ himem.sys 这一项上按“Y”,其余的按“N”后,在DOS提示符下输入Scanreg /fix 修复注册表或者是 scanreg /restore恢复到以前系统自动备份的注册表后,再重新启动即可。

2、在出现“Create a startup log file (BOOTTLOG.TXT) [Enter=Y,Esc=N]”时,选择Y建立Bootlog.txt这个文件,可以检查启动过程中各个系统文件装载的情况。如果在装载某一个.vxd 文件时死机,可以到其它计算机上复制该.vxd文件拷贝过来。

3、如果是一启动就出现“现在可以安全地关闭计算机了”,一般是因为Windows的System目录的vmm32.vxd被损坏,可以到其它计算机上重新复制一个过来。

4、一启动就出现蓝屏并显示“VFAT Devcie Initialization Faild”,表示调用Windows目录下的dblbuff.sys和ifshlp.sys文件出了问题,可以在config.sys文件中手工加入如:

“device=c:\windows\dblbuff.sys”和“devicehigh=c:\windows\ifshlp.sys”,如果还是不行,则表明这两个文件己损坏,可以到其他计算机上新复制过来一份。

四、使用文本编辑程序将Msdos.sys文件中的LOGO参数设置为“0”,关闭后再开机时,看看是否 可进入Windows,若还是不行,则只能重新安装Windows系统了。在重装Windows时,建议先采用覆盖原来的Windows的方法,这样做的 好处是:如果故障能够排除,原来的许多应用程序就不用再安装了;如果覆盖式安装不能解决问题,再采用硬盘格式化之后安装Windows的方法。

现象七:Windows无法启动,但能进入安全模式。这种故障一般问题不大,修复的几率较高。具体可以参照下面的几种方法去做:

一、在安装新设备后不能正常启动,进入安全模式后,在“控制面板”--“系统”中选择“设备管理器”选项卡,在列出的所有设备中查找前有一个感叹号 冲突的设备,如果有的话,打开这个设备的“属性”,查看“资源”选项卡,看看这个设备与其它设备的中断冲突,然后取消“自动设置”复选框,单击“更改设 置”按钮,选择一个没有使用的中断号即可。如果还不行,则可以在设备属性中选择“常规”选项卡,选中“在此硬件配置文件中禁用”复选框,如果能正常启动成 功,证明这个硬件的驱动程序可能有问题,可以在设备管理器中将它删除后重装驱动程序。

二、安装了启动时自动运行软的后不能正常启动,可以将其卸载,待系统可以正常启动后,尝试重新安装。顺便说一句,安装系统启动时自动运行的软件不要与其它软件在同一次启动中安装可以减少此类故障。

三、电脑启动时自动运行的文件出现故障造成Windows不能正常启动,或者前一种情况软件无法卸载(包括不能完全卸载)的,可以到下面的地方找到并将其删除:

1、“开始”菜单内的“程序”文件夹中的“启动”文件夹内。

2、Config.sys与Autoexec.bat中,若有则在该行前面加上“rem”不让它运行。通常防病毒程序都会在这两个文件中加入要执行的程序。

3、Window目录下的Win.ini中[Windows]段中的Run或Load参数后,这里也可以在该行前加上“Rem”,不让它执行。

4、注册表(Registry)中,运行注册表编辑器(Regedit),进入编辑器后利用“编辑”中的“查找”功能查找产生故障的自动可执行文件,将不要执行项目的主键删除或将文件更名。注意:修改注册表时,要事先用“导出注册表文件”的方法做好备份。

四、如果在系统启动时提示丢失了某些在system.ini文件中的.vxd、.386等文件,你可以到其他计算机上拷贝相应的文件到对应的位置, 如果还不行,你还可以备份你的Windows 98安装目录下system.ini文件,然后用文本编辑器打开system.ini文件找到相应的.vxd或.386的那一行,将该行删除即可,如果修 改有误,再用备份还原即可。

五、如果 Windows不能正常启动是由系统文件损坏造成的,可以运行在Windows\system目录下的Sfc.exe文件来检查并恢复遗失或损毁的系统文件,如果产生问题的那个文件是Windows系统需要用到的,则会被修复回来。

六、如果Windows不能正常启动是由文件版本冲突造成的,可以运行Windows目录下的Vemui.exe文件,找出产生问题的文件后,选择 “恢复所选文件(R)”按扭,则Windows98会自动用不同号的版本取代目前使用文件,而版本冲突管理器也会给这个被取代的文件制作备份,可以再换回 来。

好了,电脑不能正常启动故障的诊治就讲这么多,文章中没有提到的故障可以参考本文作以下处理:硬件类,采用替换或更换插槽的方法判断和排除故障;软件类就更简单了,大不了格式化硬盘、重装系统!不过笔者还是建议:在系统稳定时做一个克隆,这样需要时回“克”一下就行了

2009年08月21日

删除U盘是无法停止通用卷设备

类归于: 未分类 — 标签: — admin @ 4:45 下午

删除U盘时提示无法停止‘通用卷’设备的解决方法:
安全删除U盘时,大家常常会遇到提示“无法停止‘通用卷’设备,请稍候再停止该设备。”

这种情况下可以强行拔下U盘吗?当然不可以!这时候如果强行拔除的话,很容易损坏计算机U口或者你的U盘。如果你的U盘上有重要的资料,很有可能就此毁坏了。那么应该怎么办呢?
在这里我写几种常用的解决方法,希望对大家有所帮助。

第一种方法(这也是我建议大家最常用的方法):

往往我们在把U盘的文件或者数据取出来的时候,都是用的“复制”“粘贴”方式,而如果复制的是U盘上的文件,这个文件就会一直放在系统的剪切板里,处于待用状态。而如果这种情况下我们要删除U盘的话,就会出现上面的无法停止U盘的提示。

相应的解决办法就是:清空你的剪切板,或者在你的硬盘上随便进行一下复制某文件再粘贴的操作作,这时候你再去删除U盘提示符,看看是不是顺利删除了?

第二种方法:

如果觉得上面那种方法还无效的话,可以使用下面这个方法:

同时按下键盘的”Ctrl”+”Alt”+”Del”组合键,这时会出现”任务管理器”的窗口,单击”进程”标签,在”映像名称”中寻找”rundll32.exe”进程,选择”rundll32.exe”进程,然后点击”结束进程”,这时会弹出任务管理器警告,问你确定是否关闭此进程,点击”是”,即关闭了”rundll32.exe”进程。再删除U盘就可以正常删除了。

使用这种方法时请注意:如果有多个”rundll32.exe”进程,需要将多个”rundll32.exe”进程全部关闭。

第三种方法:

这种方法同样是借助了任务管理器,同时按下键盘的”Ctrl”+”Alt”+”Del”组合键,出现”任务管理器”的窗口,单击”进程”,寻找”EXPLORER.EXE”进程并结束它。这时候你会发现你的桌面不见了,请不要惊慌,继续进行下面的操作作,在任务管理器中点击“文件”——“新建任务”——输入EXPLORER.EXE——确定。再删除U盘,你会发现可以安全删除了。

第四种方法:

这种方法最简单,但最耗时,那就是,重启你的电脑。

第五种方法:

安装unlocker软件

如果觉得出现问题的时候才解决有些麻烦,可以采用下面这个提前的预防措施:

关闭系统的预览功能。

方法:双击我的电脑——工具——文件夹选项——常规——任务——使用windows传统风格的文件夹,然后点击确定就行了。这样一劳永逸了。

小窍门:目前有些U盘的技术很到位了,有的U盘直接插拔也可以的。但无论是多好的U盘,有一种时候是绝对不能直接插拔的,那就是仔细看你U盘的那个小红灯,小灯在不停闪的时候表示正在不停地读写数据,这时候千万不能拔,否则轻则损坏数据,重则U盘

早前文章 »

WordPress 所驱动