一直处于重启界面上面显示正在优化该怎么处理?

onStart()是activity界面被显示出来的时候执行的,但不能与它交互;
onResume()是当该activity与用户能进行交互时被执行,用户能够得到activity的焦点,可以与用户交互。html

Android平台上虚拟机运行的是Dex字节码,一种对class文件优化的产物,传统Class文件是一个Java源码文件会生成一个.class文件,而Android是把全部Class文件进行合并,优化,而后生成一个最终的class.dex,目的是把不一样class文件重复的东西只需保留一份,若是咱们的Android应用不进行分dex处理,最后一个应用的apk只会有一个dex文件。

  • 主线程建立好以后,会执行Looper.loop()方法,该方法中获取与线程绑定的Looper对象,继而获取该Looper对象的成员变量MessageQueue对象,并开启一个会阻塞(不占用资源)的死循环,只要MessageQueue中有msg,就会获取该msg,并执行msg.target.dispatchMessage(msg)方法(msg.target即上一步引用的handler对象),此方法中调用了咱们第二步建立handler子类对象时覆写的handleMessage()方法,以后将该msg对象存入回收池;面试

IdleHandler是一个回调接口,能够经过MessageQueue的addIdleHandler添加实现类。当MessageQueue中的任务暂时处理完了(没有新任务或者下一个任务延时在以后),这个时候会回调这个接口,返回false,那么就会移除它,返回true就会在下次message处理完了的时候继续回调。sql

同步屏障能够经过MessageQueue.postSyncBarrier函数来设置。该方法发送了一个没有target的Message到Queue中,在next方法中获取消息时,若是发现没有target的Message,则在必定的时间内跳过同步消息,优先执行异步消息。再换句话说,同步屏障为Handler消息机制增长了一种简单的优先级机制,异步消息的优先级要高于同步消息。在建立Handler时有一个async参数,传true表示此handler发送的时异步消息。ViewRootImpl.scheduleTraversals方法就使用了同步屏障,保证UI绘制优先执行。数据库

九、View的绘制原理

  • UNSPECIFIED 表示父容器不对View有任何限制,通常用于系统内部,表示一种测量状态;

  • EXACTLY 父容器已经检测出view所需的精确大小,这时候view的最终大小SpecSize所指定的值,至关于match_parent或指定具体数值。

  • AT_MOST 父容器指定一个可用大小即SpecSize,view的大小不能大于这个值,具体多大要看view的具体实现,至关于wrap_content。

调用了invalidate方法后,会为该View添加一个标记位,同时不断向父容器请求刷新,父容器经过计算得出自身须要重绘的区域,直到传递到ViewRootImpl中,最终触发performTraversals方法,进行开始View树重绘流程(只绘制须要重绘的视图)。

1三、Binder机制,共享内存实现原理

系统调用:用户态与内核态

跨进程通讯是须要内核空间作支持的。传统的 IPC 机制如管道、Socket 都是内核的一部分,所以经过内核支持来实现进程间通讯天然是没问题的。可是 Binder 并非 Linux 系统内核的一部分,那怎么办呢?这就得益于 Linux 的动态内核可加载模块(Loadable Kernel Module,LKM)的机制;模块是具备独立功能的程序,它能够被单独编译,可是不能独立运行。它在运行时被连接到内核做为内核的一部分运行。这样,Android 系统就能够经过动态添加一个内核模块运行在内核空间,用户进程之间经过这个内核模块做为桥梁来实现通讯。

在 Android 系统中,这个运行在内核空间,负责各个用户进程经过 Binder 实现通讯的内核模块就叫 Binder 驱动(Binder Dirver)。

那么在 Android 系统中用户进程之间是如何经过这个内核模块(Binder 驱动)来实现通讯的呢?难道是和前面说的传统 IPC 机制同样,先将数据从发送方进程拷贝到内核缓存区,而后再将数据从内核缓存区拷贝到接收方进程,经过两次拷贝来实现吗?显然不是,不然也不会有开篇所说的 Binder 在性能方面的优点了。

这就不得不通道 Linux 下的另外一个概念:内存映射

Binder IPC 机制中涉及到的内存映射经过 mmap() 来实现,mmap() 是操做系统中一种内存映射的方法。内存映射简单的讲就是将用户空间的一块内存区域映射到内核空间。映射关系创建后,用户对这块内存区域的修改能够直接反应到内核空间;反以内核空间对这段区域的修改也能直接反应到用户空间。
一次完整的 Binder IPC 通讯过程一般是这样:

  • 首先 Binder 驱动在内核空间建立一个数据接收缓存区;

  • 接着在内核空间开辟一块内核缓存区,创建内核缓存区和内核中数据接收缓存区之间的映射关系,以及内核中数据接收缓存区和接收进程用户空间地址的映射关系;

  • 发送方进程经过系统调用 copyfromuser() 将数据 copy 到内核中的内核缓存区,因为内核缓存区和接收进程的用户空间存在内存映射,所以也就至关于把数据发送到了接收进程的用户空间,这样便完成了一次进程间的通讯。

  • Binder驱动:相似网络通讯中的路由器,负责将Client的请求转发到具体的Server中执行,并将Server返回的数据传回给Client。

  • 向具体的Server发送请求。Client拿到这个Binder代理对象后,就能够经过Binder驱动和Server进行通讯了。

  • Server返回结果。Server响应请求后,须要再次经过Binder驱动将结果返回给Client。

Serializable是Java提供的一个序列化接口,是一个空接口,用于标示对象是否能够支持序列化,经过ObjectOutputStrean及ObjectInputStream实现序列化和反序列化的过程。注意能够为须要序列化的对象设置一个serialVersionUID,在反序列化的时候系统会检测文件中的serialVersionUID是否与当前类的值一致,若是不一致则说明类发生了修改,反序列化失败。所以对于可能会修改的类最好指定serialVersionUID的值。
Parcelable是Android特有的一个实现序列化的接口,在Parcel内部包装了可序列化的数据,能够在Binder中自由传输。序列化的功能由writeToParcel方法来完成,最终经过Parcel的一系列write方法完成。反序列化功能由CREAOR来完成,其内部标明了如何建立序列化对象和数组,并经过Parcel的一系列read方法来完成反序列化的过程。

Fragment可见状态改变时会被调用setUserVisibleHint()方法,能够经过复写该方法实现Fragment的懒加载,但须要注意该方法可能在onVIewCreated以前调用,须要确保界面已经初始化完成的状况下再去加载数据,避免空指针。

  • ListView有两级缓存,在屏幕与非屏幕内。

1七、Android两种虚拟机区别与联系

Android中的Dalvik虚拟机相较于Java虚拟机针对手机的特色作了不少优化。
Dalvik基于寄存器,而JVM基于栈。在基于寄存器的虚拟机里,能够更为有效的减小冗余指令的分发和减小内存的读写访问。
Dalvik通过优化,容许在有限的内存中同时运行多个虚拟机的实例,而且每个 Dalvik应用做为一个独立的Linux进程执行。
java虚拟机运行的是java字节码。(java类会被编译成一个或多个字节码.class文件,打包到.jar文件中,java虚拟机从相应的.class文件和.jar文件中获取相应的字节码)
Dalvik运行的是自定义的.dex字节码格式。(java类被编译成.class文件后,会经过一个dx工具将全部的.class文件转换成一个.dex文件,而后dalvik虚拟机会从其中读取指令和数据)

1八、adb经常使用命令行

  • aapt工具打包资源文件,生成R.java文件

  • aidl工具处理AIDL文件,生成对应的.java文件

  • zipalign工具对签名后的.apk文件进行对齐处理

  • 复制APK到/data/app目录下,解压并扫描安装包。

  • 资源管理器解析APK里的资源文件。

  • 而后对dex文件进行优化,并保存在dalvik-cache目录下。

  • 安装完成后,发送广播。

APK主要由如下几部分组成:

  • assets/ : 存放资源文件,这些资源不会被编译成二进制。

  • lib/ :包含了一些引用的第三方库。

其中占据较大内存的是res资源、lib、class.dex,所以咱们能够从下面的几个方面下手:

  • 代码方面能够经过代码混淆,这个通常都会去作。平时也能够删除一些没有使用类。

  • 去除无用资源。使用工具来检测没有使用到的资源,或者在gradle中配置shrinkResources来删除包括库中全部的无用的资源,须要配合proguard压缩代码使用。这里须要注意项目中是否存在使用getIdentifier方式获取资源,这种方式相似反射lint及shrinkResources没法检测状况。若是存在这种方式,则须要配置一个keep.xml来记录使用反射获取的资源。(压缩代码和资源]

  • 去除无用国际化支持。对于一些第三库来讲(如support),由于国际化的问题,它们可能会支持了几十种语言,但咱们的应用可能只须要支持几种语言,能够经过配置resConfigs提出不要的语言支持。

  • 不一样尺寸的图片支持。一般状况下只须要一套xxhpi的图片就能够支持大部分分辨率的要求了,所以,咱们只须要保留一套图片。

  • 图片压缩。 png压缩或者使用webP图片,完美支持须要Android版本4.2.1+

  • 使用矢量图形。简单的图标能够使用矢量图片。

Date:服务器告诉客户端,该资源的发送时间;
Expires:表示过时时间(该字段是1.0的东西,当cache-control和该字段同时存在的条件下,cache-control的优先级更高);
Last-Modified:服务器告诉客户端,资源的最后修改时间;
还有一个字段,这个图没给出,就是E-Tag:当前资源在服务器的惟一标识,可用于判断资源的内容是否被修改了。
服务器收到请求时,会在200 OK中回送该资源的Last-Modified和ETag头(服务器支持缓存的状况下才会有这两个头哦),客户端将该资源保存在cache中,并记录这两个属性。当客户端须要发送相同的请求时,根据Date + Cache-control来判断是否缓存过时,若是过时了,会在请求中携带If-Modified-Since和If-None-Match两个头。两个头的值分别是响应中Last-Modified和ETag头的值。服务器经过这两个头判断本地资源未发生变化,客户端不须要从新下载,返回304响应。

  • 在gradle.properties声明一个变量用于控制是不是调试模式,并在dependencies中根据是不是调试模式依赖必要组件。

  • 组件间经过ARouter完成界面跳转和功能调用。

在Activity中,定义一个Observable(Subject),在不一样的生命周期发射不一样的事件;
经过compose操做符(内部实际上仍是依赖takeUntil操做符),定义了上游数据,当其接收到Subject的特定事件时,取消订阅;

程序在启动的时候,并不会一次性加载程序所要用的全部class文件,而是根据程序的须要,经过Java的类加载机制(ClassLoader)来动态加载某个class文件到内存当中的,从而只有class文件被载入到了内存以后,才能被其它class所引用。因此ClassLoader就是用来动态加载class文件到内存当中用的。

  • 加载:查找和导入Class文件;

  • 连接:把类的二进制数据合并到JRE中;
    (a) 验证:检查载入Class文件数据的正确性;

(b) 准备:给类的静态变量分配存储空间;
(c) 解析:将符号引用转成直接引用;

  • 初始化:对类的静态变量,静态代码块执行初始化操做

2九、何时发生类初始化

  • 遇到new、getstatic、putstatic或invokestatic这4条字节码指令时,若是类没有进行过初始化,则须要先触发其初始化。生成这4条指令的最多见的Java代码场景是:使用new关键字实例化对象的时候,读取或设置一个类的静态字段(被final修饰、已在编译期把结果放入常量池的静态字段除外)的时候,以及调用一个类的静态方法的时候。

  • 使用java.lang.reflect包的方法对类进行反射调用的时候,若是类没有进行过初始化,则须要先触发其初始化。

  • 当初始化一个类的时候,若是发现其父类尚未进行过初始化,则须要先触发其父类的初始化。

  • 当虚拟机启动时,用户须要指定一个要执行的主类(包含main()方法的那个类),虚拟机会先初始化这个主类。

Java中存在3种类加载器:
(1) Bootstrap ClassLoader : 将存放于<JAVA_HOME>lib目录中的,或者被-Xbootclasspath参数所指定的路径中的,而且是虚拟机识别的(仅按照文件名识别,如 rt.jar 名字不符合的类库即便放在lib目录中也不会被加载)类库加载到虚拟机内存中。启动类加载器没法被Java程序直接引用 。
每一个ClassLoader实例都有一个父类加载器的引用(不是继承关系,是一个包含的关系),虚拟机内置的类加载器(Bootstrap ClassLoader)自己没有父类加载器,可是能够用作其余ClassLoader实例的父类加载器。
当一个ClassLoader 实例须要加载某个类时,它会试图在亲自搜索这个类以前先把这个任务委托给它的父类加载器,这个过程是由上而下依次检查的,首先由顶层的类加载器Bootstrap ClassLoader进行加载,若是没有加载到,则把任务转交给Extension ClassLoader加载,若是也没有找到,则转交给AppClassLoader进行加载,仍是没有的话,则交给委托的发起者,由它到指定的文件系统或者网络等URL中进行加载类。尚未找到的话,则会抛出CLassNotFoundException异常。不然将这个类生成一个类的定义,并将它加载到内存中,最后返回这个类在内存中的Class实例对象。

3一、为何使用双亲委托模型

JVM在判断两个class是否相同时,不只要判断两个类名是否相同,还要判断是不是同一个类加载器加载的。

  • 避免重复加载,父类已经加载了,则子CLassLoader没有必要再次加载。

  • 考虑安全因素,假设自定义一个String类,除非改变JDK中CLassLoader的搜索类的默认算法,不然用户自定义的CLassLoader如法加载一个本身写的String类,由于String类在启动时就被引导类加载器Bootstrap CLassLoader加载了。

在JDK1.6,JDK1.7中,HashMap采用数组+链表实现,即便用链表处理冲突,同一hash值的链表都存储在一个链表里。可是当位于一个链表中的元素较多,即hash值相等的元素较多时,经过key值依次查找的效率较低。而JDK1.8中,HashMap采用位数组+链表+红黑树实现,当链表长度超过阈值(8)时,将链表转换为红黑树,这样大大减小了查找时间。
当链表数组的容量超过初始容量*加载因子(默认0.75)时,再散列将链表数组扩大2倍,把原链表数组的搬移到新的数组中。为何须要使用加载因子?为何须要扩容呢?由于若是填充比很大,说明利用的空间不少,若是一直不进行扩容的话,链表就会愈来愈长,这样查找的效率很低,扩容以后,将原来链表数组的每个链表分红奇偶两个子链表分别挂在新链表数组的散列位置,这样就减小了每一个链表的长度,增长查找效率。
HashTable里使用的是synchronized关键字,这实际上是对对象加锁,锁住的都是对象总体,当Hashtable的大小增长到必定的时候,性能会急剧降低,由于迭代时须要被锁定很长的时间。
ConcurrentHashMap引入了分割(Segment),能够理解为把一个大的Map拆分红N个小的HashTable,在put方法中,会根据hash(paramK.hashCode())来决定具体存放进哪一个Segment,若是查看Segment的put操做,咱们会发现内部使用的同步机制是基于lock操做的,这样就能够对Map的一部分(Segment)进行上锁,这样影响的只是将要放入同一个Segment的元素的put操做,保证同步的时候,锁住的不是整个Map(HashTable就是这么作的),相对于HashTable提升了多线程环境下的性能,所以HashTable已经被淘汰了。

Java程序中wait 和 sleep都会形成某种形式的暂停,它们能够知足不一样的须要。wait()方法用于线程间通讯,若是等待条件为真且其它线程被唤醒时它会释放锁,而 sleep()方法仅仅释放CPU资源或者让当前线程中止执行一段时间,但不会释放锁。

Java代码在编译后会变成Java字节码,字节码被类加载器加载到JVM里,JVM执行字节码,最终须要转化为汇编指令在CPU上执行。
volatile是轻量级的synchronized(volatile不会引发线程上下文的切换和调度),它在多处理器开发中保证了共享变量的“可见性”。可见性的意思是当一个线程修改一个共享变量时,另一个线程能读到这个修改的值。
因为内存访问速度远不及CPU处理速度,为了提升处理速度,处理器不直接和内存进行通讯,而是先将系统内存的数据读到内部缓存后在进行操做,但操做完不知道什么时候会写到内存。普通共享变量被修改以后,何时被写入主存是不肯定的,当其余线程去读取时,此时内存中可能仍是原来的旧值,所以没法保证可见性。若是对声明了volatile的变量进行写操做,JVM就会想处理器发送一条Lock前缀的指令,表示将当前处理器缓存行的数据写回到系统内存。

3七、一个int变量,用volatile修饰,多线程去操做++,线程安全吗?

不安全。volatile只能保证可见性,并不能保证原子性。i++实际上会被分红多步完成:1)获取i的值;2)执行i+1;3)将结果赋值给i。volatile只能保证这3步不被重排序,多线程状况下,可能两个线程同时获取i,执行i+1,而后都赋值结果2,实际上应该进行两次+1操做。

3八、那如何才能保证i++线程安全?

其实现原理是采用CAS自旋操做更新值。CAS即compare and swap的缩写,中文翻译成比较并交换。CAS有3个操做数,内存值V,旧的预期值A,要修改的新值B。当且仅当预期值A和内存值V相同时,将内存值V修改成B,不然什么都不作。自旋就是不断尝试CAS操做直到成功为止。

3九、CAS实现原子操做会出现什么问题?

  • ABA问题。由于CAS须要在操做之的时候,检查值有没有发生变化,若是没有发生变化则更新,可是若是一个值原来是A,变成,有变成A,那么使用CAS进行检查时会发现它的值没有发生变化,但实际上发生了变化。ABA问题能够经过添加版本号来解决。Java 1.5开始,JDK的Atomic包里提供了一个类AtomicStampedReference来解决ABA问题。

  • 循环时间长开销大。pause指令优化。

  • 只能保证一个共享变量的原子操做。能够合并成一个对象进行CAS操做。

Java中每一个对象均可以做为锁:

  • 对于普通同步方法,锁是当前实例对象;

  • 对于静态同步方法,锁是当前类的Class对象;

  • 对于同步方法块,锁是括号中配置的对象;

当一个线程试图访问同步代码块时,它首先必须获得锁,退出或抛出异常时必须释放锁。synchronized用的锁是存在Java对象头里的MarkWord,一般是32bit或者64bit,其中最后2bit表示锁标志位


Java SE1.6为了减小得到锁和释放锁带来的性能消耗,引入了偏向锁和轻量级锁,在1.6中锁一共有4种状态,级别从低到高依次是:无锁状态、偏向锁状态、轻量级锁状态和重量级锁状态,这几种状态会随着竞争状况逐渐升级。锁能够升级但不能降级。

  • 访问Mark Word中偏向锁的标识是否设置成1,锁标志位是否为01,确认为可偏向状态。

  • 若是为可偏向状态,则测试线程ID是否指向当前线程,若是是,进入步骤5,不然进入步骤3。

  • 若是线程ID并未指向当前线程,则经过CAS操做竞争锁。若是竞争成功,则将Mark Word中线程ID设置为当前线程ID,而后执行5;若是竞争失败,执行4。

  • 若是CAS获取偏向锁失败,则表示有竞争。当到达全局安全点(safepoint)时得到偏向锁的线程被挂起,偏向锁升级为轻量级锁,而后被阻塞在安全点的线程继续往下执行同步代码。(撤销偏向锁的时候会致使stop the word)

  • 在代码进入同步块的时候,若是同步对象锁状态为无锁状态(锁标志位为“01”状态,是否为偏向锁为“0”),虚拟机首先将在当前线程的栈帧中创建一个名为锁记录(Lock Record)的空间,用于存储锁对象目前的Mark Word的拷贝,官方称之为 Displaced Mark Word。

  • 拷贝对象头中的Mark Word复制到锁记录中;

  • 拷贝成功后,虚拟机将使用CAS操做尝试将对象的Mark Word更新为指向Lock Record的指针,并将Lock record里的owner指针指向object mark word。若是更新成功,则执行步骤4,不然执行步骤5。

  • 若是这个更新动做成功了,那么这个线程就拥有了该对象的锁,而且对象Mark Word的锁标志位设置为“00”,即表示此对象处于轻量级锁定状态。

  • 若是这个更新操做失败了,虚拟机首先会检查对象的Mark Word是否指向当前线程的栈帧,若是是就说明当前线程已经拥有了这个对象的锁,那就能够直接进入同步块继续执行。不然说明多个线程竞争锁,轻量级锁就要膨胀为重量级锁,锁标志的状态值变为“10”,Mark Word中存储的就是指向重量级锁(互斥量)的指针,后面等待锁的线程也要进入阻塞状态。 而当前线程便尝试使用自旋来获取锁,自旋就是为了避免让线程阻塞,而采用循环去获取锁的过程。

若是持有锁的线程能在很短期内释放锁资源,那么那些等待竞争锁的线程就不须要作内核态和用户态之间的切换进入阻塞挂起状态,它们只须要等一等(自旋),等持有锁的线程释放锁后便可当即获取锁,这样就避免用户线程和内核的切换的消耗。
可是线程自旋是须要消耗cup的,说白了就是让cup在作无用功,若是一直获取不到锁,那线程也不能一直占用cup自旋作无用功,因此须要设定一个自旋等待的最大时间。
若是持有锁的线程执行的时间超过自旋等待的最大时间扔没有释放锁,就会致使其它争用锁的线程在最大等待时间内仍是获取不到锁,这时争用线程会中止自旋进入阻塞状态。

好处:1)下降资源消耗;2)提升相应速度;3)提升线程的可管理性。

  • 当提交一个新任务到线程池时,判断核心线程池里的线程是否都在执行。若是不是,则建立一个新的线程执行任务。若是核心线程池的线程都在执行任务,则进入下个流程。

  • 判断工做队列是否已满。若是未满,则将新提交的任务存储在这个工做队列里。若是工做队列满了,则进入下个流程。

  • 判断线程池是否都处于工做状态。若是没有,则建立一个新的工做线程来执行任务。若是满了,则交给饱和策略来处理这个任务。

4四、假若有n个网络线程,你须要当n个网络线程完成以后,再去作数据处理,你会怎么解决?

这题考的实际上是多线程同步的问题。这种状况能够能够使用thread.join();join方法会阻塞直到thread线程终止才返回。更复杂一点的状况也能够使用CountDownLatch,CountDownLatch的构造接收一个int参数做为计数器,每次调用countDown方法计数器减一。作数据处理的线程调用await方法阻塞直到计数器为0时。

interrupted[静态方法]()Thread.interrupted()来 检查中断状态时,中断状态会被清零。而非静态方法isInterrupted()用来查询其它线程的中断状态且不会改变中断状态标识。简单的说就是任何抛 出InterruptedException异常的方法都会将中断状态清零。不管如何,一个线程的中断状态有有可能被其它线程调用中断来改变。

4六、懒汉式单例的同步问题

同步的懒加载虽然是线程安全的,可是致使性能开销。所以产生了双重检查锁定。但双重检查锁定存在隐藏的问题。instance = new Instance()实际上会分为三步操做:1)分配对象的内存空间;2)初始化对象;3)设置instance指向刚分配的内存地址;因为指令重排序,2和3的顺序并不肯定。在多线程的状况下,第一个线程执行了1,3,此时第二个线程判断instance不为null,但实际上操做2尚未执行,第二个线程就会得到一个还未初始化的对象,直接使用就会形成空指针。
另外一种方式则是使用静态内部类:

其原理是利用类初始化时会加上初始化锁确保类对象的惟一性。

ThreadLocal即线程变量,它为每一个使用该变量的线程提供独立的变量副本,因此每个线程均可以独立地改变本身的副本,而不会影响其它线程所对应的副本。从线程的角度看,目标变量就象是线程的本地变量,这也是类名中“Local”所要表达的意思。ThreadLocal的实现是以ThreadLocal对象为键。任意对象为值得存储结构。这个结构被附带在线程上,也就是说一个线程能够根据一个ThreadLocal对象查询到绑定在这个线程上的一个值。

数据竞争的定义:在一个线程写一个变量,在另外一个线程读同一个变量,并且写和读没有经过同步来排序。

JM屏蔽各类硬件和操做系统的内存访问差别,以实现让Java程序在各类平台下都能达到一致的内存访问效果。
线程之间的共享变量存储在主内存中,每一个线程都有一个私有的本地内存,本地内存中存储了该线程以读/写共享变量的副本。本地内存是一个抽象概念,它涵盖了缓存、写缓存区、寄存器以及其余的硬件和编译器优化。
在执行程序时,为了提升性能,编译器和处理器经常会对指令作重排序。在多线程中重排序会对程序的执行结果有影响。

  • 程序顺序规则:一个线程中的每一个操做,happens-before于该线程中的任意后续操做。

  • 监视器锁规则:对一个锁的解锁,happens-before与锁随后对这个锁的加锁。

  • 程序计数器:当前线程锁执行的字节码的行号指示器,用于线程切换恢复,是线程私有的;

  • Java虚拟机栈(栈):虚拟机栈也是线程私有的。每一个方法在执行的同时都会建立一个栈帧用于存储局部变量表、操做数栈、动态连接、方法出口等信息。每个方法从调用直至执行完成的过程,就对应着一个栈帧在虚拟机栈中入栈到出栈的过程。

  • 本地方法栈:与虚拟机栈相似,服务于Native方法。

  • Java堆:堆是被全部线程共享的一块内存,用于存放对象实例。是垃圾收集器管理的主要区域,也被称做GC堆。

  • 方法区:与Java堆同样,是线程共享的内存区域,用于存储已被虚拟机加载的类信息、常量、静态常量、即时编译器编译后的代码等数据。

  • 运行时常量池:是方法区的一部分,用于存放编译器生成的各类字面量和符号引用。

5一、判断对象是否须要回收的方法

  • 引用计数算法。实现简单,断定效率高,但不能解决循环引用问题,同时计数器的增长和减小带来额外开销,JDK1.1之后废弃了。

  • 可达性分析算法/根搜索算法 。根搜索算法是经过一些“GC Roots”对象做为起点,从这些节点开始往下搜索,搜索经过的路径成为引用链(Reference Chain),当一个对象没有被GC Roots 的引用链链接的时候,说明这个对象是不可用的。 Java中可做为“GC Root”的对象包括:虚拟机栈(本地变量表)中引用的对象;方法区中类静态属性和常量引用的对象。本地方法栈中引用的对象。

  • 强引用:默认的引用方式,不会被垃圾回收,JVM宁愿抛出OutOfMemory错误也不会回收这种对象。

  • 软引用(SoftReference):若是一个对象只被软引用指向,只有内存空间不足够时,垃圾回收器才会回收它;

  • 弱引用(WeakReference):若是一个对象只被弱引用指向,当JVM进行垃圾回收时,不管内存是否充足,都会回收该对象。

  • 虚引用(PhantomReference):虚引用和前面的软引用、弱引用不一样,它并不影响对象的生命周期。若是一个对象与虚引用关联,则跟没有引用与之关联同样,在任什么时候候均可能被垃圾回收器回收。虚引用一般和ReferenceQueue配合使用。

做为一个Java对象,Reference对象除了具备保存引用的特殊性以外,也具备Java对象的通常性。因此,当对象被回收以后,虽然这个Reference对象的get()方法返回null,但这个SoftReference对象已经再也不具备存在的价值,须要一个适当的清除机制,避免大量Reference对象带来的内存泄漏。
在java.lang.ref包里还提供了ReferenceQueue。咱们建立Reference对象时使用两个参数的构造传入ReferenceQueue,当Reference所引用的对象被垃圾收集器回收的同时,Reference对象被列入ReferenceQueue。也就是说,ReferenceQueue中保存的对象是Reference对象,并且是已经失去了它所软引用的对象的Reference对象。另外从ReferenceQueue这个名字也能够看出,它是一个队列,当咱们调用它的poll()方法的时候,若是这个队列中不是空队列,那么将返回队列前面的那个Reference对象。因而咱们能够在适当的时候把这些失去所软引用的对象的SoftReference对象清除掉。

  • 在标记阶段,肯定全部要回收的对象,并作标记。清除阶段紧随标记阶段,将标记阶段肯定不可用的对象清除。标记—清除算法是基础的收集算法,有两个不足:1)标记和清除阶段的效率不高;2)清除后回产生大量的不连续空间,这样当程序须要分配大内存对象时,可能没法找到足够的连续空间。

  • 复制算法是把内存分红大小相等的两块,每次使用其中一块,当垃圾回收的时候,把存活的对象复制到另外一块上,而后把这块内存整个清理掉。复制算法实现简单,运行效率高,可是因为每次只能使用其中的一半,形成内存的利用率不高。如今的JVM 用复制方法收集新生代,因为新生代中大部分对象(98%)都是朝生夕死的,因此会分红1块大内存Eden和两块小内存Survivor(大概是8:1:1),每次使用1块大内存和1块小内存,当回收时将2块内存中存活的对象赋值到另外一块小内存中,而后清理剩下的。

  • 标记—整理算法和复制算法同样,可是标记—整理算法不是把存活对象复制到另外一块内存,而是把存活对象往内存的一端移动,而后直接回收边界之外的内存。标记—整理算法提升了内存的利用率,而且它适合在收集对象存活时间较长的老年代。

  • 分代收集是根据对象的存活时间把内存分为新生代和老年代,根据各代对象的存活特色,每一个代采用不一样的垃圾回收算法。新生代采用复制算法,老年代采用标记—整理算法。

  • 对象优先在Eden分配。

  • 大对象直接进入老年代。 大对象是指须要大量连续内存空间的Java对象,最典型的就是那种很长的字符串以及数组。

  • 长期存活的对象进入老年代。存活过一次新生代的GC,Age+1,当达到必定程度(默认15)进入老年代。

  • 动态对象年龄断定。若是在Survivor空间中相同Age全部对象大小的总和大于Survivor空间一半。那么Age大于等于该Age的对象就能够直接进入老年代。

  • 空间分配担保。 在发生新生代GC以前,会检查老年代的剩余空间是否大于新生代全部对象的总和。若是大于则是安全的,若是不大于有风险。

一、说下你所知道的设计模式与使用场景

将一个复杂对象的构建与它的表示分离,使得一样的构建过程能够建立不一样的表示。

使用场景好比最多见的AlertDialog,拿咱们开发过程当中举例,好比Camera开发过程当中,可能须要设置一个初始化的相机配置,设置摄像头方向,闪光灯开闭,成像质量等等,这种场景下就能够使用建造者模式

装饰者模式:动态的给一个对象添加一些额外的职责,就增长功能来讲,装饰模式比生成子类更为灵活。装饰者模式能够在不改变原有类结构的状况下曾强类的功能,好比Java中的BufferedInputStream 包装FileInputStream,举个开发中的例子,好比在咱们现有网络框架上须要增长新的功能,那么再包装一层便可,装饰者模式解决了继承存在的一些问题,好比多层继承代码的臃肿,使代码逻辑更清晰

二、java语言的特色与OOP思想

这个经过对比来描述,好比面向对象和面向过程的对比,针对这两种思想的对比,还能够举个开发中的例子,好比播放器的实现,面向过程的实现方式就是将播放视频的这个功能分解成多个过程,好比,加载视频地址,获取视频信息,初始化解码器,选择合适的解码器进行解码,读取解码后的帧进行视频格式转换和音频重采样,而后读取帧进行播放,这是一个完整的过程,这个过程当中不涉及类的概念,而面向对象最大的特色就是类,封装继承和多态是核心,一样的以播放器为例,一面向对象的方式来实现,将会针对每个功能封装出一个对象,吧如说Muxer,获取视频信息,Decoder,解码,格式转换器,视频播放器,音频播放器等,每个功能对应一个对象,由这个对象来完成对应的功能,而且遵循单一职责原则,一个对象只作它相关的事情

三、说下java中的线程建立方式,线程池的工做原理。

java中有三种建立线程的方式,或者说四种

线程池的工做原理:线程池能够减小建立和销毁线程的次数,从而减小系统资源的消耗,当一个任务提交到线程池时

  1. 首先判断核心线程池中的线程是否已经满了,若是没满,则建立一个核心线程执行任务,不然进入下一步

  2. 判断工做队列是否已满,没有满则加入工做队列,不然执行下一步

  3. 判断线程数是否达到了最大值,若是不是,则建立非核心线程执行
    任务,不然执行饱和策略,默认抛出异常

从两种状况来讲,第一在UI线程建立Handler,此时咱们不须要手动开启looper,由于在应用启动时,在ActivityThread的main方法中就建立了一个当前主线程的looper,并开启了消息队列,消息队列是一个无限循环,为何无限循环不会ANR?由于能够说,应用的整个生命周期就是运行在这个消息循环中的,安卓是由事件驱动的,Looper.loop不断的接收处理事件,每个点击触摸或者Activity每个生命周期都是在Looper.loop的控制之下的,looper.loop一旦结束,应用程序的生命周期也就结束了。咱们能够想一想什么状况下会发生ANR,第一,事件没有获得处理,第二,事件正在处理,可是没有及时完成,而对事件进行处理的就是looper,因此只能说事件的处理若是阻塞会致使ANR,而不能说looper的无限循环会ANR

另外一种状况就是在子线程建立Handler,此时因为这个线程中没有默认开启的消息队列,因此咱们须要手动调用looper.prepare(),并经过looper.loop开启消息

主线程Looper从消息队列读取消息,当读完全部消息时,主线程阻塞。子线程往消息队列发送消息,而且往管道文件写数据,主线程即被唤醒,从管道文件读取数据,主线程被唤醒只是为了读取消息,当消息读取完毕,再次睡眠。所以loop的循环并不会对CPU性能有过多的消耗。

五、内存泄漏的场景和解决办法

1.非静态内部类的静态实例

非静态内部类会持有外部类的引用,若是非静态内部类的实例是静态的,就会长期的维持着外部类的引用,组织被系统回收,解决办法是使用静态内部类

2.多线程相关的匿名内部类和非静态内部类

匿名内部类一样会持有外部类的引用,若是在线程中执行耗时操做就有可能发生内存泄漏,致使外部类没法被回收,直到耗时任务结束,解决办法是在页面退出时结束线程中的任务

Handler致使的内存泄漏也能够被概括为非静态内部类致使的,Handler内部message是被存储在MessageQueue中的,有些message不能立刻被处理,存在的时间会很长,致使handler没法被回收,若是handler是非静态的,就会致使它的外部类没法被回收,解决办法是1.使用静态handler,外部类引用使用弱引用处理2.在退出页面时移除消息队列中的消息

使用静态View能够避免每次启动Activity都去读取并渲染View,可是静态View会持有Activity的引用,致使没法回收,解决办法是在Activity销毁的时候将静态View设置为null(View一旦被加载到界面中将会持有一个Context对象的引用,在这个例子中,这个context对象是咱们的Activity,声明一个静态变量引用这个View,也就引用了activity)

WebView只要使用一次,内存就不会被释放,因此WebView都存在内存泄漏的问题,一般的解决办法是为WebView单开一个进程,使用AIDL进行通讯,根据业务需求在合适的时机释放掉

7.资源对象未关闭致使

如Cursor,File等,内部每每都使用了缓冲,会形成内存泄漏,必定要确保关闭它并将引用置为null

8.集合中的对象未清理

集合用于保存对象,若是集合愈来愈大,不进行合理的清理,尤为是入股集合是静态的

bitmap是比较占内存的,因此必定要在不使用的时候及时进行清理,避免静态变量持有大的bitmap对象

1.使用更加轻量的数据结构:如使用ArrayMap/SparseArray替代HashMap,HashMap更耗内存,由于它须要额外的实例对象来记录Mapping操做,SparseArray更加高效,由于它避免了Key Value的自动装箱,和装箱后的解箱操做

2.便面枚举的使用,能够用静态常量或者注解@IntDef替代

data内存区域,而不是去问内存从新申请一块区域来存放Bitmap。利用这种特性,即便是上千张的图片,也只会仅仅只须要占用屏幕所可以显示的图片数量的内存大小,但复用存在一些限制,具体体如今:在Android 4.4以前只能重用相同大小的Bitmap的内存,而Android 4.4及之后版本则只要后来的Bitmap比以前的小便可。使用inBitmap参数前,每建立一个Bitmap对象都会分配一块内存供其使用,而使用了inBitmap参数后,多个Bitmap能够复用一块内存,这样能够提升性能

4.StringBuilder替代String: 在有些时候,代码中会须要使用到大量的字符串拼接的操做,这种时候有必要考虑使用StringBuilder来替代频繁的“+”

5.避免在相似onDraw这样的方法中建立对象,由于它会迅速占用大量内存,引发频繁的GC甚至内存抖动

6.减小内存泄漏也是一种避免OOM的方法

SingleTop模式:当一个singleTop模式的Activity已经位于任务栈的栈顶,再去启动它时,不会再建立新的实例,若是不位于栈顶,就会建立新的实例

时,系统会建立一个新的任务栈,而且这个任务栈只有他一个Activity

说下 Activity 的横竖屏的切换的生命周期,用那个方法来保存数据,二者的区别。触发在何时在那个方法里能够获取数据等。

是否了解SurfaceView,它是什么?他的继承方式是什么?他与View的区别(从源码角度,如加载,绘制等)。

SurfaceView中采用了双缓冲机制,保证了UI界面的流畅性,同时 SurfaceView 不在主线程中绘制,而是另开辟一个线程去绘制,因此它不妨碍UI线程;

(2)view主要适用于主动更新,而SurfaceView适用与被动的更新,如频繁的刷新

(3)view会在主线程中去更新UI,而SurfaceView则在子线程中刷新;

SurfaceView的内容不在应用窗口上,因此不能使用变换(平移、缩放、旋转等)。也难以放在ListView或者ScrollView中,不能使用UI控件的一些特性好比View.setAlpha()

View:显示视图,内置画布,提供图形绘制函数、触屏事件、按键事件函数等;必须在UI主线程内更新画面,速度较慢。

SurfaceView:基于view视图进行拓展的视图类,更适合2D游戏的开发;是view的子类,相似使用双缓机制,在新的线程中更新画面因此刷新界面速度比view快,Camera预览界面使用SurfaceView。

b: 经过 startForeground将进程设置为前台进程, 作前台服务,优先级和前台应用一个级别,除非在系统内存很是缺,不然此进程不会被 kill

c: 双进程Service: 让2个进程互相保护对方,其中一个Service被清理后,另外没被清理的进程能够当即重启进程

d: 用C编写守护进程(即子进程) : Android系统中当前进程(Process)fork出来的子进程,被系统认为是两个不一样的进程。当父进程被杀死的时候,子进程仍然能够存活,并不受影响(Android5.0以上的版本不可行)联系厂商,加入白名单

e.锁屏状态下,开启一个一像素Activity
说下冷启动与热启动是什么,区别,如何优化,使用场景等。
app冷启动: 当应用启动时,后台没有该应用的进程,这时系统会从新建立一个新的进程分配给该应用, 这个启动方式就叫作冷启动(后台不存在该应用进程)。冷启动由于系统会从新建立一个新的进程分配给它,因此会先建立和初始化Application类,再建立和初始化MainActivity类(包括一系列的测量、布局、绘制),最后显示在界面上。

app热启动: 当应用已经被打开, 可是被按下返回键、Home键等按键时回到桌面或者是其余程序的时候,再从新打开该app时, 这个方式叫作热启动(后台已经存在该应用进程)。热启动由于会从已有的进程中来启动,因此热启动就不会走Application这步了,而是直接走MainActivity(包括一系列的测量、布局、绘制),因此热启动的过程只须要建立和初始化一个MainActivity就好了,而没必要建立和初始化Application

冷启动的生命周期简要流程:

冷启动的优化主要是视觉上的优化,解决白屏问题,提升用户体验,因此经过上面冷启动的过程。能作的优化以下:

  • 不要以静态变量的方式在 Application 保存数据

  • 减小布局的复杂度和层级

为何冷启动会有白屏黑屏问题?缘由在于加载主题样式Theme中的windowBackground等属性设置给MainActivity发生在inflate布局当onCreate/onStart/onResume方法以前,而windowBackground背景被设置成了白色或者黑色,因此咱们进入app的第一个界面的时候会形成先白屏或黑屏一下再进入界面。解决思路以下

1.给他设置 windowBackground 背景跟启动页的背景相同,若是你的启动页是张图片那么能够直接给 windowBackground 这个属性设置该图片那么就不会有一闪的效果了

2.采用世面的处理方法,设置背景是透明的,给人一种延迟启动的感受。,将背景颜色设置为透明色,这样当用户点击桌面APP图片的时候,并不会"当即"进入APP,并且在桌面上停留一会,其实这时候APP已是启动的了,只是咱们心机的把Theme里的windowBackground 的颜色设置成透明的,强行把锅甩给了手机应用厂商(手机反应太慢了啦)

3.以上两种方法是在视觉上显得更快,但其实只是一种表象,让应用启动的更快,有一种思路,将 Application 中的没必要要的初始化动做实现懒加载,好比,在SpashActivity 显示后再发送消息到 Application,去初始化,这样能够将初始化的动做放在后边,缩短应用启动到用户看到界面的时间

十一、Android 中的线程有那些,原理与各自特色

AsyncTask原理:内部是Handler和两个线程池实现的,Handler用于将线程切换到主线程,两个线程池一个用于任务的排队,一个用于执行任务,当AsyncTask执行execute方法时会封装出一个FutureTask对象,将这个对象加入队列中,若是此时没有正在执行的任务,就执行它,执行完成以后继续执行队列中下一个任务,执行完成经过Handler将事件发送到主线程。AsyncTask必须在主线程初始化,由于内部的Handler是一个静态对象,在AsyncTask类加载的时候他就已经被初始化了。在Android3.0开始,execute方法串行执行任务的,一个一个来,3.0以前是并行执行的。若是要在3.0上执行并行任务,能够调用executeOnExecutor方法

IntentService原理:继承自Service,它的内部封装了 HandlerThread 和Handler,能够执行耗时任务,同时由于它是一个服务,优先级比普通线程高不少,因此更适合执行一些高优先级的后台任务

HandlerThread底层经过Looper消息队列实现的,因此它是顺序的执行每个任务。能够经过Intent的方式开启IntentService,IntentService经过handler将每个intent加入HandlerThread子线程中的消息队列,经过looper按顺序一个个的取出并执行,执行完成后自动结束本身,不须要开发者手动关闭

9.其余线程持有锁,致使主线程等待超时
10.其它线程终止或崩溃致使主线程一直等待

当 Android 端须要得到数据时好比获取网络中的图片,首先从内存中查找(按键查找),内存中没有的再从磁盘文件或sqlite中去查找,若磁盘中也没有才经过网络获取

LruCache中将LinkedHashMap的顺序设置为LRU顺序来实现LRU缓存,每次调用get(也就是从内存缓存中取图片),则将该对象移到链表的尾端。
调用put插入新的对象也是存储在链表尾端,这样当内存缓存达到设定的最大值时,将链表头部的对象(近期最少用到的)移除。

Collection是集合框架的顶层接口,是存储对象的容器,Colloction定义了接口的公用方法如add remove clear等等,它的子接口有两个,List和Set,List的特色有元素有序,元素能够重复,元素都有索引(角标),典型的有

Vector:内部是数组数据结构,是同步的(线程安全的)。增删查询都很慢。

ArrayList:内部是数组数据结构,是不一样步的(线程不安全的)。替代了Vector。查询速度快,增删比较慢。

LinkedList:内部是链表数据结构,是不一样步的(线程不安全的)。增删元素速度快。

而Set的是特色元素无序,元素不能够重复

HashSet:内部数据结构是哈希表,是不一样步的。

Set集合中元素都必须是惟一的,HashSet做为其子类也需保证元素的惟一性。

判断元素惟一性的方式:

经过存储对象(元素)的hashCode和equals方法来完成对象惟一性的。

若是对象的hashCode值不一样,那么不用调用equals方法就会将对象直接存储到集合中;

若是对象的hashCode值相同,那么需调用equals方法判断返回值是否为true,
若为false, 则视为不一样元素,就会直接存储;
若为true, 则视为相同元素,不会存储。

若是要使用HashSet集合存储元素,该元素的类必须覆盖hashCode方法和equals方法。通常状况下,若是定义的类会产生不少对象,一般都须要覆盖equals,hashCode方法。创建对象判断是否相同的依据。
TreeSet:保证元素惟一性的同时能够对内部元素进行排序,是不一样步的。

判断元素惟一性的方式:

根据比较方法的返回结果是否为0,若是为0视为相同元素,不存;若是非0视为不一样元素,则存。

TreeSet对元素的排序有两种方式:

方式一:使元素(对象)对应的类实现Comparable接口,覆盖compareTo方法。这样元素自身具备比较功能。

方式二:使TreeSet集合自身具备比较功能,定义一个比较器Comparator,将该类对象做为参数传递给TreeSet集合的构造函数

公司专注于国外FBA头程运输服务定制化服务。公司航线遍及亚马逊所有仓库,无需海外注册,您只需一个电话或一封邮件,我们都可为您把货物安全运到亚马逊仓库,为您省去一切烦恼....

破浪推舟-大森林出类拔萃-助您扬帆护航

大森林只专注亚马逊FBA头程服务

多年来我们只专注于亚马逊头程货运代理,并帮助卖家处理 亚马逊仓库拒收件和退回的异常货物,避免产生高额的直接退回中国的物流费用。我们注重把服务做得更专业更完美....

多年海外货运经验,无论个人还是公司,均可提供进出口业务

公司拥有多年的海外运货经验,聘请具有丰富国际货代理以及报关报检经验的专业人员,无需公司办理进出口业务,即可提供进出口货运代理服务,真正为客户解决各种进出口货运的难题

海外清关能力超强,业务覆盖美加英法德日澳等亚马逊所有仓库

公司业务领域全面覆盖亚马逊所有仓库,公司清关能力超强,规避大量风险,截止目前已成功帮助上千家公司 处理清关及税金问题,减少因清关问题而引起的退件达上万件

快速-高效-整合-节约

公司整合多个快速海陆空物流公司,快速高效的运货效率,保障货物及时安全送达,大大降低FBA头程成本

大森林独特优势,铸造亚马逊FBA行业封神榜FBA卖家贴心的物流伙伴,在国内知名企业占有率明显胜于其它货运代理公司

电脑系统维护修复和硬盘常见问题

  别让你的电脑成为你的健康杀手!

  其实大家应该都听说过这样一个新闻,就是关于电脑键盘和鼠标的细菌总数的调查,其结果非常的惊人,如果不定期的为键盘和鼠标清理消毒,尤其是网吧和办公室的电脑,其细菌总数甚至比马桶上的还要多出几倍甚至是几百倍!而经常上网的人群以及那些网络工作者就成了这“指尖上的垃圾场”的受害人,经常性的腹泻感冒以及体质虚弱都与此不无关系,所以要定期,最好是频繁的对键盘和鼠标进行消毒作业!那在清洁和使用的过程中我们应当注意点什么呢?

  首先应选用专用的电脑清洁剂,并用消毒棉球或者棉质的布品来反复擦拭,注意尽量不要使用酒精,因为酒精属于强氧化剂,会对键盘和鼠标造成一定的腐蚀,尽管不会造成太大的损害,但是也在无意中降低了尤其是光电鼠标的使用寿命,因为酒精可能会渗入到其内部腐蚀其精密部件,不过与此同时也别忘了鼠标垫儿,以及键盘附近手掌能触及的位置,因为手掌的汗液其实就是滋生细菌的“营养液”!

  还有最为重要的一点就是定期清理掉落在键盘缝隙间的杂物!

  其实大家只要是看一下键盘的缝隙处,大多充满了各种令人反胃的杂物,食物残渣,头发,烟灰以及那些叫不上名子的零碎儿,这些都是细菌微生物赖以生长的温床,简单的清洁方式就是将键盘反扣将杂物倒出,要么就是用风枪将杂物吹出,再就是市面上有销售的键盘清洁泥,可以将杂物尽数粘出来,不过最好的办法莫过于覆盖一层橡胶模,尽管如此还是要以保持清洁为主,电脑桌前尽量少放食物,吃完用完的东西赶快收走,不然长年累月的在这样一个“小垃圾场”里工作,我们的健康也会被一点点的吞噬殆尽的!

  电脑操作系统维护宝典(一)

  对于使用Windows XP操作系统的朋友来说,当操作系统出现崩溃或者使用时出现一些莫名其妙的错误时,一般都是采用重装系统或者使用Ghost进行系统恢复等方法。但是使用这些方法各有缺陷,比如重新安装系统,则原来的系统设置和软件都必须重新安装,非常麻烦。其实每一项系统错误都有方法能进行修复,并且Windows XP操作系统自带的系统修复功能也非常强大,通过它我们可以修复系统中的错误以及更新系统文件。原来的系统设置和所安装的程序也不会改变。本文中我们就从Windows操作系统相关故障来讲解修复技巧。

  一、系统修复具体技巧

  Windows XP中的搜索助理是一个新功能,但是由于文件版本上的原因,好多朋友安装后却发现这个功能不好用。

  查看C:WINDOWSSYSTEM32下的、 c:”命令,如果提示是否覆盖文件,则键入“y”确认,并按回车键。

  在遇到NTLDR文件丢失的故障时,boot.ini文件多半也会出现丢失或损坏的情况。这样在进行了上面修复NTLDR的操作后,还要在故障恢复控制台中执行“bootcfg /redirect”命令来重建Boot.ini文件。最后执行“fixboot c:”命令,在提示是否进行操作时输入“y”确认并回车,这样Windows XP的系统分区便可写入到启动扇区中。当执行完全部命令后,键入“exit”命令退出故障恢复控制台,重新启动后系统即可恢复如初。

  1、让SFC命令全面修复受损文件

  如果系统因丢失了太多的系统重要文件而变得非常不稳定,那么按照前面介绍的方法一一修复,相必会让人发疯的。这时就需要使用SFC文件检测器命令,来全面的检测并修复受损的系统文件了。

  在“运行”窗口中执行“sfc /scannow”命令,这时sfc文件检测器将立即扫描所有受保护的系统文件(如图5),其间会提示用户插入Windows安装光盘。这样,在大约10分钟左右的时间里,SFC就将会检测并修复好受保护的系统文件。

  让SFC命令全面修复受损文件

  小提示:如果身边没有Windows XP安装盘,但之前在硬盘上备份了安装盘文件时,也可以按照如下设置,使SFC通过硬盘上的安装文件来恢复系统文件。

XP的安装源文件存放在G盘WinXP文件夹中,那么修改以上三个键的键值为“G:WinXP”。这样再使用SFC命令时,则可以直接使用硬盘上的安装文件来恢复系统,不需要再插入安装光盘了。

  2、如何制作Win XP自动恢复系统修复盘

  Windows XP操作系统中的ASR(自动恢复系统)功能可以很方便地将系统备份,不过在还原ASR镜像文件时,必需提供之前制作的恢复软盘才可以完成全部操作。也就是说,如果电脑中没有安装软驱,就不能使用这项服务了。不过我们可以先将“ASR修复盘”制作好,待安装软驱后就可以用此修复盘恢复镜像文件。但是没有软盘驱动器怎样制作“ASR修复盘”呢?按照下面的操作就可以实现了:

  在Windows XP中单击“开始→所有程序→附件→系统工具→备份”,在“欢迎”选项卡中单击“自动系统恢复向导”按钮,启动“自动系统故障恢复准备向导”(如图6)。根据提示,在“备份媒体或文件名”下面的文本框中键入镜像文件的名称和保存路径把镜像文件制作好。

  如何制作Win XP自动恢复系统修复盘

  打开资源管理器,展开“%windir%epair”文件夹(例如:C:Windowsepair),将asr.sif和asrpnp.sif这两个文件复制到安装了软驱的电脑中,如果是局域网用户,只需将这两个文件复制到Windows XP的“共享文件夹”中,然后到安装了软驱的电脑中将这两个文件复制到软盘即可。

  在Windows XP中用户可以通过对自己的帐户设置密码来保护自己的隐私,但是如果您自己忘记了这个密码那该怎么办呢?如果在Windows 2000中只有格式化硬盘了,而在Windows XP中我们可以创建一个修复密码启动盘,这样在忘记密码的时候便可以通过这张软盘来启动电脑。

  在“控制面板”中点击“用户帐户”项,在弹出的窗口中选择自己的帐户便会进入自己帐户的控制界面,点击左上方的“阻止一个已忘记的密码”项打开“忘记密码向导”(如图7)。

  现在将一张格式化过的空白磁盘插入到软驱中,然后跟随“忘记密码向导”点击“下一步”按钮,途中会让您输入这个账户现在的密码,输入后稍稍等待几秒钟便可以创建完成密码启动盘。不过这个启动盘一定要放好哦,别人用这张软盘便可以轻而易举的用您的账户登录。

  如果在启动的时候您发现忘了密码,那么只要点击账户旁边向右的箭头,然后在弹出的提示栏中点击“使用密码重设磁盘”,再将软盘插入软驱,按照提示便可以更改密码并启动计算机。

  Windows操作系统是一款比较脆弱的操作系统,使用久了,难免出现各种故障,但这些故障并非无规律可循,随着使用经验的不断丰富,大家对系统故障的修复能力也会越来越高。

  附:系统修复基础知识讲解

  1、什么是系统恢复?

XP的系统恢复功能,用户(系统管理员和所有者)在遇到问题时可将机器还原到以前的状态。系统恢复功能自动监控系统文件的更改和某些应用程序文件的更改,记录或存储更改之前的状态。具有系统恢复功能后,用户不必再考虑为系统保存snapshots,因为它可以自动创建易于标识的还原点,允许用户将系统还原到以前的状态。还原点在发生重大系统事件(例如,安装应用程序或驱动程序)时创建,同时也会定期(每天)创建。此外,用户还可以随时创建和命名自己的还原点。

  2.Windows的哪些版本具有系统恢复功能?

  3.系统恢复和文件备份有什么差别?

  系统恢复只监控一组核心系统文件和某些类型的应用程序文件(如后缀为exe或dll的文件),记录更改之前这些文件的状态;而备份工具则用于备份用户的个人数据文件,确保在本地磁盘或其它介质上存储一个安全副本。系统恢复不监控或恢复对个人数据文件(例如,文档、图形、电子邮件等等)所做的更改。系统恢复的还原点中包含的系统数据只能在一段时间内进行还原,而备份工具进行的备份可以在任何时候进行还原。

  4.系统恢复需要用户开启吗?

  不需要。Windows XP系统恢复是自动开启的,但至少需要有200M的可用硬盘空间。如果硬盘没有200M可用空间,系统恢复将自动禁用,等到一旦有了足够的空间,又会自动开启。在缺省情况下,系统恢复最多占用12%的硬盘空间,它的“自动还原点空间管理”将清除最老的还原点,释放空间并维持系统恢复的滚动安全。

  5.系统恢复会降低系统性能吗?

  不会。系统恢复在监控系统运行状态时,不会对系统性能造成明显影响。创建还原点是个非常快速的过程,通常只需几秒钟。定期的系统状态检查(缺省为每24小时一次)也只在系统空闲时间进行,而不会干扰任何用户程序的运行。

  6.谁有权使用系统恢复?

  只有具有管理员权限的用户才可以使用系统恢复来恢复过去的系统状态,或调整系统恢复参数设置。但是,还原点的创建过程与管理员是否登录无关。例如,在非管理员的其它用户使用机器时,系统恢复仍将创建系统检查点和事件驱动检查点,但该用户不能使用恢复功能,只有具有管理员权限的用户才有权恢复机器状态。

  7.系统恢复保护诸如Word文档和电子邮件等用户个人数据文件吗?

  不。系统恢复不监控文档、图形、电子邮件等用户个人数据文件的改变,因此也不能恢复这些文件。

  8.系统恢复监控哪些文件?

  系统恢复只监控一组核心系统文件和某些特定类型的应用文件(如文件后缀为exe和dll等),记录系统改变前这些文件的状态。查看所有受保护文件类型,可参阅平台SDK系统恢复部分的“受监控文件后缀”。

  9.系统恢复如何处理密码问题?

  1)Windows XP密码和密码问题提示不恢复。这是为了防止还原点包括一个用户已经记不清的旧密码,从而引起混乱给用户带来不便。

  2)IE和Content Advisor密码和密码问题提示不恢复。理由同上。

  1)恢复诸如Windows Messenger、AOL Messenger、QQ等基于Web服务器的应用程序密码。恢复这些旧密码不会给用户带来困扰,因为机器中储存的仅是密码备份,实际密码存放在Web服务器中。系统恢复只是恢复了应用程序存储在本地的旧密码,而不会真正改变程序密码。用户仍旧需要使用当前密码登录服务器。

  2)域和主机密码与上述情况类似。一旦主机与域重新连接,cache中旧密码又会升级到当前密码。

  10.系统恢复需要多少硬盘空间?

  1)大于4G的硬盘,缺省情况下,系统恢复占用12%的硬盘空间

  2)小于4G的硬盘,缺省情况下,系统恢复仅占用400M空间

  3)任意时候用户可以自行调整用于系统恢复的空间

  电脑噪音大怎么办?(一)

  当电脑用了一段时间后,程序的运行速度越来越慢,不时还出现蓝屏、死机等现象,电脑运行时的噪音也越来越大……心爱的电脑再也没有当初的颜色了,这到底是怎么回事?这主要是你没有对自己的电脑进行维护。电脑也需要定期的进行维护,这样才能保证它正常运行。如果你不知道如何来维护电脑,就跟着笔者一起来做吧。

  电脑使用时间长后,灰尘、碎屑等污物会在机身内、外部的积淀,这些因素都危害到电脑的健康。所以,在平时或者一段时间都要对电脑进行清洁是非常有必要的。

  电脑维护不需要很复杂的工具,一般的除尘维护只需要准备十字螺丝刀、平口螺丝刀、油漆刷(或者油画笔,普通毛笔容易脱毛不宜使用)就可以了。如果要清洗软驱、光驱内部,还需要准备镜头拭纸、电吹风、无水酒精、脱脂棉球、钟表起子、镊子、皮老虎、回形针、钟表油(或缝纫机油)、黄油。

  1.打开机箱之前先要确认电脑的各个配件的质保期。

  注意:在质保期内的品牌机那建议不要自己打开机箱进行清洁,因为这样就意味着失去了保修的权利。在质保期内的品牌机可以拿到维修点请专业人员进行内部除尘。

  2.注意动手时一定要轻拿轻放,因为电脑各部件都属于精密仪器,特别是硬盘,如果失手掉到地上那就一命呜呼了。

  3.拆卸时注意各插接线的方位,如硬盘线、软驱线、电源线等,以便正确还原。提示:可以先将这些接线的方向记录下来,以免还原时出错,导致电脑不能正常启动。

  4.用螺丝固定各部件时,应首先对准部件的位置,然后再上紧螺丝。尤其是主板,略有位置偏差就可能导致插卡接触不良;主板安装不平将可能会导致内存条、适配卡接触不良甚至造成短路,天长日久甚至可能会发生形变导致故障发生。

  5.由于计算机板卡上的集成电路器件多采用MOS技术制造,这种半导体器件对静电高压相当敏感。当带静电的人或物触及这些器件后,就会产生静电释放,而释放的静电高压将损坏这些器件。维护电脑时要特别注意静电防护。

  提示:在进行操作前可以先洗手,接触接地的金属物体释放身体上的静电。如果能找到防静电手套(如图1)最好。

  准备好工具,了解了操作时的注意事项后就可以开始给电脑做清洁了。

  1.显示器的清洁。显示器的清洁分为外壳和显示屏两个部分。

  步骤1外壳变黑变黄的主要原因是灰尘和室内烟尘的污染。可以利用专门的清洁剂(如图2)来恢复外壳的本来面目。

  步骤2用软毛刷来清理散热孔缝隙处的灰尘(如图3)。顺着缝隙的方向轻轻扫动,并辅助使用吹气皮囊吹掉这些灰尘。

  步骤3而对于显示屏的清洁就略微麻烦,由于显示屏现在都带有保护涂层,所以在清洁时不能使用任何溶剂型清洁剂,可以采用眼镜布或镜头纸擦拭。擦拭方向应顺着一个方向进行,并多次更换擦拭布面,防止已经占有污垢的布面再次划伤涂层。

  提示:如果显示屏上有油污,可以采用少量的开水湿润镜头纸来清洁。如果是液晶显示器,在清洁时可以先用毛刷先轻轻的刷掉屏幕表层的灰尘,然后再用清洁相机镜头的专用镜头纸来擦拭。

  2.键盘及鼠标的清洁。

  步骤1将键盘倒置,拍击键盘,将引起键盘卡键的碎屑拍出键盘。

  提示:为了避免碎屑进入键盘,对键盘的日常清洁非常重要,大家可以用柔软干净的湿布擦拭键盘及小毛刷扫除掉进键盘缝隙中的碎屑(如图4)。

  步骤2使用中性清洁剂或计算机专用清洁剂清除键盘上难以清除的污渍,用湿布擦洗并晾干键盘。

  步骤3用棉签清洁键盘缝隙内污垢。

  提示:所有的清洁工作都不要用医用酒精,以免对塑料部件产生腐蚀。清洁过程一定要在关机状态下进行。使用的湿布不要过湿,以免水进入键盘内部。

  的时间长后,也会出现不听指挥的情况。这时就需要对其进行除尘处理。一般来说,机械鼠标只需要清理“身体”里的滚动球和滚动轴(如图5)即可。

  步骤1将鼠标底的螺丝拧下来,打开鼠标。

  步骤2利用清洁剂清除鼠标滚动球和滚动轴上的污垢,然后将鼠标装好即可。

  提示:如果鼠标还处于质保期,请不要拆卸鼠标,这样会失去质保的。

  由于光电鼠标多采用的密封设计,所以灰尘和污垢不会进入内部。平时在使用鼠标时,最好使用鼠标垫,这样会防止灰尘和污垢进入鼠标。

  3.机箱外壳的清洁。由于机箱通常都是放在电脑桌下面,平时不是太注意清洁卫生,机箱外壳上很容易附着灰尘和污垢。大家可以先用干布将浮尘清除掉,然后用沾了清洗剂的布蘸水将一些顽渍擦掉,然后用毛刷轻轻刷掉机箱后部各种接口表层的灰尘即可。

  完成外部设备的清洁后,最重要的主机内部清洁就开始了。由于机箱并不是密封的,所以一段时间后机箱内部就会积聚很多灰尘,这样对电脑硬件的运行非常不利,过多的灰尘非常容易引起电脑故障,甚至造成烧毁硬件的严重后果,所以对主机内部的除尘非常重要,而且需要定期执行,一般三个月除尘一次为宜。以上的工作需要定期完成,平常打扫卫生的时候顺便简单的清洁一下电脑的外壳。

  注意:拆卸前,一定要关机,然后放掉身上的静电或者戴上防静电手套后才能进行如下操作。

  步骤1首先拔下机箱后侧的所有外设连线,用螺丝刀拧下机箱后侧的几颗螺丝,取下机箱盖。

  步骤2然后将主机卧放,使主板向下,用螺丝刀拧下条形窗口上沿固定插卡的螺丝,然后用双手捏紧接口卡的上边缘,竖直向上拔下接口卡(如图6)。

  步骤3接着将硬盘、光驱和软驱的电源插头沿水平方向向外拔出,数据线的拔出方式与拔电源线相同,然后用十字螺丝刀拧下驱动器支架两侧固定驱动器的螺丝,取下驱动器。

  步骤4拧下机箱后与电源的四个螺丝,取下电源(如图7)。

  提示:在拧最后一颗螺丝时,一定要用另一只手托着电源。否则,电源会掉下来砸到主板。

  步骤5拔下插在主板上的各种接线插头。在拆卸电源的双排20针插头时,要注意插头上有一个小塑料卡,捏住它然后向上直拉即可拔下电源插头。

  提示:由于主板上这些插头比较复杂,建议大家在拔下这些插头前作好记录,如插接线的颜色、插座的位置、插座插针的排列等以方便除尘完毕后还原。

  步骤6稍微用点力,将内存插槽两头的塑胶夹脚向外扳动,使内存条能够跳出,取下内存条。

  步骤7在拆卸CPU散热器时,需先按下远端的弹片,并让弹片脱离CPU插座的卡槽取出CPU散热器(如图8)。

  步骤8拧下主板与机箱固定的螺丝,将主板从机箱中取出。

  2.开始清理。完成拆卸后,接下来就是对它们进行除尘处理,还它们原来的面貌。

  步骤1清洁主板。用毛刷先将主板的表面的灰尘清理干净。然后用油画笔清洁各种插槽、驱动器接口插头(如图9)。再用皮老虎或者电吹风吹尽灰尘。

  提示:如果插槽内金属接脚有油污,可用脱脂棉球沾电脑专用清洁剂或无水乙醇去除。

  步骤2清洁内存条和适配卡。可先用刷子轻轻清扫各种适配卡和内存条表面的积尘,然后用皮老虎吹干净。用橡皮擦擦拭各种插卡的金手指正面与反面,清除掉上面的灰尘、油污或氧化层(如图10)。

  步骤3清洁CPU散热风扇。用小十字螺丝刀拧开风扇上面的固定螺丝,拿下散热风扇。用较小的毛刷轻拭风扇的叶片及边缘,然后用吹气球将灰尘吹干净。然后用刷子或湿布擦拭散热片上的积尘。

  提示:有些散热风扇是和CPU连为一体的,没办法分离风扇与散热片,只能用刷子刷去风扇叶片和轴承中的积尘,再用皮老虎将余下的灰尘吹干净。

  电源。用螺丝刀将电源上的螺丝拧开,取下电源外壳,将电源部分的电路板拆下,使电路板和电源外壳分离,然后使用皮老虎和毛刷进行清洁即可(如图11)。最后将电源背后的四个螺丝拧下,把风扇从电源外壳上拆卸下来,用毛刷将其刷洗干净。

  提示:如果电源还在保质期内,建议用小笔刷将电源外表与风扇的叶片上的灰尘清除干净即可。因为没有过质保期的电源,随意拆卸会失去质保。

  步骤5清洁光驱。将回形针展开插入光驱前面板上的应急弹出孔,稍稍用力将光驱托盘打开,用镜头试纸将所及之处轻轻擦拭干净。如果光驱的读盘能力下降,可以将光驱拆开,用脱脂棉或镜头纸轻轻擦拭除去透镜表面的灰尘,最后装好光驱即可。

  注意:由于透镜表面有一层膜,所以在清洁时一定要用柔软的干布擦拭。

  完成所有的清洁工作后,接下来的就是将这些部件还原即可。不过想要电脑运行如初,除了对电脑硬件进行清洁外,系统的清理维护也是必须的。

  平时大家在进行软件的安装、卸载或者上网浏览网页时都会在系统中留下大量无用的文件。一旦这些垃圾文件积聚过多后,不但会占用大量的硬盘空间,还会使系统性能下降,甚至导致系统中有用程序间的冲突,所以对系统的清理非常重要。

  步骤1清空回收站垃圾。有些人认为把文件删了以后就没事了,其实这些所谓被你删掉的文件系统都先将它们保存到了回收站中,它同样还是占用了大量的硬盘空间。右键点击回收站图标,按“清空回收站”即可。

  步骤2删除临时文件。右键点击IE快捷方式,选择“属性”,在“常规”选项卡中分别点击“删除Cookies”、“删除文件”和“删除历史记录”三个按钮来清除上网留下的临时文件。

  提示:在点击“删除文件”按钮后,在弹出的对话框中一定要钩选“删除所有脱机内容”(如图12),这样才能保证能完全清除上网记录。

  步骤3清除“文档”菜单中的文件名。点击“开始”→“设置”→“任务栏和开始菜单”,打开“任务栏属性”对话框(如图13)。在该对话框中选择“开始菜单程序”标签,然后点击“清除”按钮即可。

/RunMRU”。在该注册表的右侧显示出“运行”下拉列表中的信息(如图14)。要删除某个项目,用鼠标右击名称,选择“删除”即可,注意不要删除“默认”和“MRUList”所在的行。

  步骤5清除系统多余字体及临时文件。利用控制面板上的字体图标程序即可删除掉不需要的字体。删除Windows目录下的Temporary Internet Files文件夹中的所有文件即可清除临时文件。还可以利用右键单击“开始”按钮,然后选择“搜索”,在“名称”对话框中输入“*.tmp”,将“搜索” 栏下拉列表设置成整个硬盘,接着点击“开始查找”,最后将所有找到的tmp文件删除掉即可。

  步骤6删除不使用的程序。利用控制面板上的“添加/删除程序”来清理硬盘中没有使用的应用程序(如图15)。

  注意:千万不可以直接删除程序的文件目录,因为很多程序在安装时会向Windows的系统文件和注册表中写入信息,直接删除程序文件不仅不能很好地起到提高性能作用,反而会使硬盘数据进一步凌乱。

  提示:现在有一些专门的系统维护软件,如《Windows优化大师》,这类软件都可以通过简单的操作就能删除系统里的垃圾文件及一些记录,非常适合刚接触电脑的朋友使用。

  完成系统垃圾的清理后,对系统

  进行一个全面的优化在一定程度上还能提高系统的性能。

  1.使用系统功能进行优化。

  这里我们以现在最常用的WinXP为例,告诉大家如何利用系统的一些简单设置来优化系统。

  步骤1右键点击“我的电脑”→“属性”。

  步骤2在弹出窗口中选择“硬件”→“设备管理器”,打开设备管理器窗口。展开“IDE ATA/ATAPI控制器”,双击“主要IDE通道”,选择“高级设置”,将传送模式都选为“DMA(若可用),点击“确定”(如图16)。

  步骤3点击“高级”,在“性能”中点击“设置”→“高级”→“更改”,选择“自定义大小”,将“初始大小”和“最大值”均设为物理内存的2.5倍,然后点击“设置”、“确定”。

  步骤4在“我的电脑”→“属性”→“高级”,点击“性能”中的“设置”,选择“调整为最佳性能”,点击“确定”即可。

  提示:通过这样的设置后,WinXP的操作界面会变成类似Win2000的操作界面,不过在速度上会比以前提高,该方法适合电脑配置不高的用户。

  步骤5在“我的电脑”→“属性”→“系统还原”中钩选“在所有驱动器上关闭系统还原”可节省一定的硬盘空间难解答”当中将最下面的“禁止系统还原”选上即可(如图17)。

  2.用注册表进行全面优化

  点击“开始”“运行”,输入“regedti”即可打开注册表编辑器。

  步骤1减少关机步骤。进入注册表编辑器,打开“HKEY_CLASSES_ ROOTDirectoryshell”,新建名为“Close”的主键,双击“Close”子键窗口右面的“默认”,并在“键值”栏内输入“关闭计算机”。在“Close”下建立一级子键“Command”,双击该子键窗口右面的“默认”,并在“键值”栏内输入“Rundll32.exe User.exe,exitwindows”。输入完后,右击“开始”选“关闭计算机”即可关机。

  步骤2加速菜单显示。打开“HKEY_CURRENT_ USERControlPanelDesktop”子项,双击右边窗口中的“MenuShowDelay”,在对数据框中输入0~100000(单位为毫秒)之间数值,一般将数值设成20到400之间,数字越小,菜单显示的速度就越快,建议用户不要设置过低的值,在设置此值为“40”时就会感觉不舒服。

  步骤4加快关机速度,只适用于Win98。打开“HKEY_LOCAL_ MAC-HINESYSTEMCurrentControlSetControlShutdown”子项,在右边窗口中新建一个“字符串值”,命名为 “FastReboot”,同时将“数值数据”设为1,修改之后可以感受到关机速度有了明显加快。

  步骤1右键点击桌面,选择“属性”→“屏幕保护”,将屏幕保护的时间设置为15分钟。

  步骤2右键点击桌面,选择“属性”→“屏幕保护”“电源”,在“电源使用方案”中将“关闭监视器”设置为30分钟,“关闭硬盘”选择“从不”,因为对硬盘进行关闭的话,再重新启动对磁头有很大的伤害。然后在“休眠”中去掉“启用休眠”前的钩,这样可以节省100MB的硬盘空间,另外还可以释放一部分内存。

  步骤3右键点击桌面,选择“属性”→“外

  观”,将“窗口和按钮”设置为“Windows经典样式”,加快菜单运行速度。

  步骤4右键点击桌面,选择“属性”→“设置”→“高级”→“监视器”,将刷新率设置为75Hz以上(如图19),这样不会感觉到显示器有闪烁感。

  提示:建议不要使用额外的刷新率,因为这相当于是对显示器进行超频,而且和对CPU的超频相比伤害更大。只要显示器刷新率达到85Hz就足够了,而不必刻意追求更高的刷新率,反而会大大减少了显示器的寿命。

  步骤1磁盘整理。在整理磁盘碎片前,一定要关闭其它所有的应用程序,将虚拟内存的大小设置为固定值。

  步骤2磁盘清理。整理完硬盘碎片之后,可以通过“磁盘清理”程序来对硬盘当中的一些多余的文件进行清理,节省一部分硬盘空间。

  当然,如果你对电脑并不是很了解,可以利用《Windwos优化大师》、《超级兔子魔法设置》等系统优化软件对系统进行优化。你只需要运行优化软件,然后进行选择即可。

  对电脑进行清洁后,有时电脑并不能想大家想像中那样听话,有时也会出现一些小问题。下面就列举了一些常见的电脑故障,帮助大家在遇到问题后能及时排除这些问题。

  解决方法:首先确定你的电源已经打开,所有的连线全部连接到位。多数情况是由于忘记将电源插头插到主板上造成的,只要将电源的主板供电插头接到主板上即可解决问题。

  2.开机后长时间停留在Windows画面,无法进入系统。

  解决方法:此类情况多由硬盘引起。检查硬盘的数据线和电源线是否连接好了,接触不良就会出现这种情况。重新插一次硬盘的数据线和电源线,并保证接触良好即可排除问题。

  3.系统启动后,桌面可显示,但是图标、菜单、工具条等显示不清,或者不能调节显示器的分辨率,图像粗糙。

  解决方法:可能是由于显卡驱动程序丢失造成的,可以重新安装一次显卡的驱动程序来解决问题。

  4.电脑开机显示器点不亮,其余的一切正常。

  解决方法:轻轻摇晃显卡与显示器之间的信号线,如果问题解决,则需要重新连接显示器和显卡,一定要将信号线上的螺丝拧紧。

  5.网络连接后无法使用Ping命令找到对方计算机。

  解决方法:通常说来不是网线不通就是网卡工作不正常。一般的网卡会有两个指示灯,一盏为电源灯,另一盏为数据信号指示灯。如果电源灯不亮,说明网卡本身或者主板卡槽有问题,更换后可解决;信号传输灯不亮,则与接口或者网线有关,逐个检查后即可解决。

  解决方法:当ADSL Modem接上电源后,电源LED指示灯会亮起。如果LED指示灯熄灭的话,请检查电源接线是否正确。

  7.使用电视卡播放电视节目时没有声音。

  解决办法:有两种情况,一种可能是由于声卡和电视卡有冲突,更换电视卡的PCI插槽知道解决冲突即可解决问题;另一种可能是由于声卡和电视卡间的音频输入没有连接,找到电视卡的安装说明书,然后用电视卡附带的音频输入线将电视卡的音频输出接口与声卡的音频输入接口相连即可。

  终于做完了,是不是觉得电脑的维护非常麻烦呢?其实只要按照上面所讲的步骤操作,让自己的爱机恢复当初的面貌完全没有问题。相信大家一定不愿意面对运行速度很慢,到处都是污垢,而且还发出巨大噪音的电脑吧。想要电脑更好地为自己工作,定期做一次这样的全面维护是必要的。根据笔者自己的经验,一般三个月就应该做一次这样的维护。(笔者:算算,好像自己家里的电脑也该作维护了,下班回去就动手!)

  夏天电脑温度过高应该怎么解决

  CPU温度过高会造成电脑死机、自动重启 、自动关机、蓝屏等现象,而且对主板和CPU的使用寿命会有一定的影响。cpu温度过高的原因有哪些?如何查看CPU温度?如何给CPU降温?怎样应对CPU温度过高呢?在这里给一一给大家解答。

  1.Bios里查看CPU温度。每块主板都有温度传感器,它时刻记录着CPU和主板的温度,在电脑开机自检时,CPU的温度和风扇的转速就会显示出来,我们可以按DEL键进入Bios查看PC Health信息,CPU温度一目了然。

  2.软件查看CPU温度。用户可以通过使用鲁大师常看CPU温度。

  CPU温度过高原因

  1.CPU风扇散热不行。CPU风扇与CPU接触不完全,CPU风扇转速过低,风扇质量不过关,这都是造成CPU温度过高的原因。

  2.系统使用CPU占用率100%。系统垃圾过多,开启进程或程序过多,中毒,这些情况都能导致CPU占用100%,从而使得CPU满载运作,温度过高。

  3.CPU超频。CPU频率高了,自然发热量就大了,而普通的CPU风扇应付不来,导致CPU高温不下。

  CPU温度过高解决办法:

  1.检查CPU风扇是否正确安装,在Bios里将风扇转速设为100%。具体操作因主板不同而不同,请参见主板说明书。

  2.优化系统,查杀病毒,关闭不必要的启动项,升级内存。

  3.超频的话应该换一个质量好点的风扇,有能力的可以购置水冷系统,如果对电脑性能要求不是太高的话,推荐恢复CPU默认频率。

  在夏天有时候电脑故障很多原因都是CPU和整体机箱散热不良造成的可能性很大,所以我们应加已注意,和搞好机箱里的风道,有利散热。

  若机房的温度过高,元器件产生的热量就会散发不出去,会使电路的性能变差,造成机器运行不稳定,严重时可导致硬件的损坏;温度过高还会引起加速电脑部件的老化,以前我就遇到过CPU因为风扇坏了,没有及时散热而烧毁的情况。若机房内温度过低,过低的室温会引起凝聚和结露现象,从而引起器件生锈,温度过低还会使绝缘材料变硬、变脆。 机房的温度应保持在15-35摄氏度,安装空调来调节温度是解决此问题最好的办法。对于没有条件安装空调的个人用户来说,假如你机器已超频的话,在炎热的季节就应该把频率降下来了。其次要注意机房的通风,各设备之间不应该靠得太挤,保持一定的距离以正常散热;再是尽量为CPU选用合格的功能强的风扇。

  提供稳定的电压和频率,是保证电脑及各种外设稳定运行的基本要求。瞬间电压过高对集成电路芯片是非常危险的,有可能击穿芯片。电网频率不稳定将会影响到电脑磁盘驱动器的正常工作。电脑突然掉电会导致内存中程序和数据丢失,磁头的损坏和磁盘盘面的划伤。 电脑电源应该使用专用的线路,不要与其它大功率电器一起使用。配备不间断供电电源UPS,UPS具有稳频稳压的功能,而且具有搞干扰能力,能够在突然断电时保持短时间的供电,让用户有时间来保存文件,然后正常关机,这对电脑和各种设备起到了很好的保护作用。

  震动对硬盘的危害就不用说了,当硬盘在高速旋转时,产生突然的震动,硬盘的磁头和盘面都极易被损坏或划伤,使数据不能正常读写而导致丢失,严重的还会引起硬盘的损坏。震动会使主板焊接不牢固的元器件脱焊,也会使主板与各插卡松动,接触不好,引发各种故障。 防止震动的.办法是:购买牢固的电脑桌;在对电脑拆卸组装时一定要放到平稳的地方再进行。在单位,对于以后要改造网线布置和扩容的机房,建议使用可拆卸地板,从而能方便的布线,减少搬动电脑而发生的故障。

  显示器在强光的直接照射下,会加速显像管荧光粉和灯丝的老化,降低发光亮度;在强光照射下还会使显示器看起来变暗,妨碍用户操作电脑。 防止的办法是不要把显示摆放在受阳光直接照射的地方,在使用的过程中,在用户允许的范围内尽可能的降低显示器的亮度。设置屏幕保护程序以防止荧光粉长期发光而提前老化。建议在室内安装窗帘等遮光物体。

  电脑硬盘日常保养与维护(一)

  硬盘是PC中很特殊的一个配件,其本身的价值并不算大(目前160G容量的硬盘不足600元),但是硬盘上承载的数据的价值却是无法用准确的数字来衡量的。特别是按照目前的硬盘容量来看,大部分的电脑用户都是使用100G以上的产品,大容量硬盘储存海量数据的同时,也有着一个很明显的道理:如果你的硬盘出现问题,那么所有的数据就会有丢失的危险,硬盘承载的数据量越大,就意味着损失越大,特别是磁盘阵列,数据恢复的费用是远远超过硬盘本身的价值的。

  当然了,对于普通用户来说,数据似乎没有什么商业价值。但是这并不等于说普通用户的数据就可以随便丢失,比方说,某用户多年来珍藏的照片、电影片段和一些个人资料如日记等一旦丢失,虽然看似没有什么直接的经济损失,但是这些资料对于该用户来说可能是非常珍贵的;另外,硬盘出现问题的话也会在一定的时间内让系统瘫痪,造成的麻烦也不可忽视。根据调查显示,PC系统故障超过20%的机率是由硬盘引起的,所以日常的保养与维护工作的意义就比较大了,正确的使用与维护不但可以让硬盘延年益寿,更能免除因数据丢失而带来的烦恼甚至经济损失。

  尽管在外部结构方面,各种硬盘之间有着一定的区别,但是其内部结构是基本相同的,毕竟硬盘的本质工作方式不会改变。硬盘内部的核心部分包括盘体、主轴电机、读写磁头、寻道电机等。不过需要提醒大家的是,千万不要在普通环境下随意打开硬盘的外壳,因为硬盘的内部盘面不能沾染上灰尘,否则立即报废。

  其实要对PC配件进行正常的保养与维护的话,就一定要了解配件本身的特性,特别是对其有伤害的操作一定要了解,这样就可以避而行之。我们可以根据硬盘的特点来分别进行维护。

  1、致命的弱点--震动

  硬盘是属于机械产品,震动可以说是硬盘的一大死敌,硬盘内部构造是相当精密的,磁头离每分钟数千转的盘片表面只有几微米的高度,一旦震动较强烈的话就会出现读写异常甚至造成盘片或者磁头物理性的损伤,后果相当严重。

  硬盘读写时严禁挪动:其实硬盘在不工作的情况下,能够经受得起一定的碰撞的,否则硬盘就没法被搬运到全世界各地了。但是硬盘在工作的时候,能承受的震动是相当小的,小小的震动就可能会引来灭顶之灾。特别是对于DIY用户,喜欢把PC折腾,经常图方便不关电脑来操作,让硬盘在工作的时候挪动,这样的操作无疑是相当危险的,轻则丢失数据,重则让硬盘直接报废。所以一定要切记,硬盘在工作的时候,不能进行挪动操作。

  机箱与硬盘不能有共震现象:硬盘在工作时是处于稳定的旋转状态,例如目前主流的PC硬盘就是7200转的。在有规律的转动时硬盘有可能与PC机箱处于同一个共震点,这样一来,硬盘就会处于晃动的状态,尽管振幅很小,但是长年累月处于这样的状态的话,对硬盘的伤害是很大的,量变会演变到质变,最后导致硬盘出现问题。我们可通过增加橡胶垫等方法避免硬盘与机箱共振的情况,同时也能减少硬盘与机箱共震而带来的噪音。

  降低硬盘共振噪音的方法

  先准备四块1毫米左右厚,指甲壳大小的橡胶垫,然后用剪刀在橡胶垫中间开口,只要硬盘固定螺丝可穿过即可。接下来将硬盘装入机箱的硬盘架上,注意同时要将橡胶垫卡在硬盘架与硬盘之间,并且要将开的口与硬盘的固定螺丝口对齐。最后将硬盘固定螺丝穿过橡胶垫旋紧即可。另外,也可以使用弹性橡皮条制作一个悬挂系统,也就是使用橡皮条将硬盘悬挂在硬盘托架下方,这样避免了硬盘和托架的刚性连接,也就避免了共振噪音。

  电脑桌一定要平稳:大部分的PC用户都是使用电脑桌(或者办公桌)来放置电脑的。但是对电脑桌的重视程度却是不够,设计或者质量不好的电脑桌在使用久了之后就会有晃动的现象,特别是在用户打字时晃动较大,对于游戏用户来说,在激烈的战斗的时候,电脑桌会被晃动得更历害;而有些用户在使用电脑时喜欢用脚不停地遥动着电脑桌,这些都是对硬盘十分不利的操作。所以我们建议用户在购买电脑桌办公桌时要选用材质过硬的产品,同时也要养成使用电脑时切勿晃动桌子的习惯。

  其它一些操作:在临时接上硬盘时,尽量要平放妥当,最好是固定在硬盘支架上,不要随便吊在机箱上。不少用户觉得只是临时交换一下数据,就把硬盘随便放置。这样的话,硬盘一边读写数据,一边在摇晃,对硬盘的损害就不言而喻了。另外就是硬盘最好不要临时放在处于工作状态的光驱上,光驱读盘时震动是较大的,甚至可以把放在光驱上的硬盘震动移位,这样的话对硬盘的损伤也是相当明显的。

  2、硬盘的死敌--高温

  硬盘容量不断地增大,其中盘片密度、盘片张数与转速都是在向前发展的。然而硬盘的温度问题一直都是厂商们头痛不已的难题之一。也正因为如此,7200转至今还是市场上的消费级主流转速,持续了几年都没法顺利过渡到10000转的低成本大容量硬盘上去,当中发热就是一个问题。当然了,硬盘本身的发热问题只能由厂商去解决,用户能做到的只能是改善硬盘的使用环境,具体的注意事项如下:

  硬盘上下空间要足够:硬盘在工作时会持续地发热,这时用户能做的只能是让其热量散去。硬盘大部分的热量是通过其上下两面来散失的,所以硬盘的上下空间一定要留足够,尽量不要堵住硬盘上下空间。不少用户在安装双硬盘的时候就没有考虑这一点,或者是机箱没有足够的空间去安装,就把两个硬盘安装到非常接近的位置,这样对硬盘的散热是相当不利的。

  硬盘的上下空间不应该被堵住

  机箱的散热风道要讲究:很多情况下,机箱里面的热量如果得不到有效的排除的话,那么所有PC配件的温度都会随之而升,自然也包括硬盘了。所以机箱的风道设计不能忽视,良好的风道设计会有效地降低机箱内部的温度,从而也让硬盘的热量得到有效的散失。

  机箱的散热风道要讲究

  关于改善风道设计的事项在这里就不多叙述了,要提醒大家的一点是,不要简单地认为采用了机箱风扇就一定能有效地散热。要慎用机箱风扇,风扇要放在恰当的位置才能发挥应有的作用,否则还有可能出现反效果的情况。对于大部分机箱来说,安装更多的风扇不但无益于散热,而且容易干扰风路,造成散热不畅。因此要保证机箱的散热通畅,除了机箱前部进风扇、后部或顶部的排风扇有必要之外,其实只要我们合理建设好机箱内部风道,其他位置的风扇都可以不用。

  不要在夏天非空调环境下长时间连续使用PC:硬盘从开始使用的那一天起,就已经开始了其慢长的老化过程。长时间地使用硬盘的话,硬盘积聚的热量会越来越高,由于并不是所有的用户都采用了良好的风道设计,所以硬盘发出的热量与散发的热量可能不相等,这样一来长时间运行后硬盘的温度会越来越高,从而引发故障。一般来说,我们最好不要连续使用PC超过24小时,特别是在夏天非空调环境中,如果确是要连续使用的话,建议拆开机箱,用大风扇对机箱整体进行散热降温操作。

  3、其它恶劣环境下尽量少使用PC

  其实不止是温度、震动对硬盘有很大影响,其它一些恶劣环境对硬盘的损伤也是不能忽视的。例如较低的湿度、较强的磁场、灰尘较大和电压不稳定的场所等。下面分别来看一看它们的危害。

  湿度的危害:湿度分为绝对湿度和相对湿度,绝对湿度是指每立方米的空气中含有水蒸气的质量;相对湿度是指水蒸气在空气中达到饱和的程度,饱和时为100%RH。当绝对湿度不变时温度越高相对湿度越小。其实一般人认为湿度过高时对硬盘会比较有害,其实不然。因为硬盘盘体是密封性很好的精密部件,并不会因为湿度而受到什么伤害,而且在出厂时已经对湿度有适应性的测试;而硬盘上的电路板均为贴片元件,贴片元件的一个好处就是对湿度的敏感性较低,并不会因为湿度大而影响工作;另外硬盘接口处都是已经做了防氧化的措施的,也不会因为湿度过大被氧化从而引起接触不良等情况。

  实际上硬盘害怕的反而是湿度过低,其实就是干燥的环境。在冬天干燥的时候,人体会经常带着静电,如果是在铺地毯的环境中更是如此。当人体接触到硬盘或者机箱时,静电会威胁到硬盘的安全,硬盘芯片能承受的电压并不大,所以在湿度较低的环境中使用PC时,人体要注意一定要触摸接地物体后才与PC接触,以防止静电损坏PC配件。

  电磁干扰的危害:其实大部分的磁性材质配件都是会受到强磁场的干扰的。举个简单的例子,我们以前使用的磁带,磁头就是用强磁性来进行洗录操作的。硬盘也同样有着类似的道理,所以硬盘最好不要在强磁场的环境中使用。例如音箱中的大功率的低音炮就会产生较强的磁场,尽管厂商一再宣称是防磁设计,但是只要你拿检测仪器去检测一下就会知道,这个防磁的水份还是不小的,而且音箱在使用过程泄磁的机会还是有的。其它电器例如一些高功率的电机类的产品也会产生强磁场,应当保持与这些产品1米或者更远的距离。

  灰尘的危害:灰尘一向都是PC配件的慢性杀手,多少配件出现的奇怪问题就是灰尘引起的。对硬盘而言同样如此,虽然硬盘盘体是密封状态,但是硬盘电路板的表面和主轴电机附近处如果吸附的灰尘过多的话,同样会损害到硬盘的,所以PC如果处于较大灰尘环境下工作时,用户就要注意做好定期除尘工作了。

  电压波动的危害:电压不稳也是硬盘的一大杀手,数据奇怪丢失,系统找不到硬盘等奇怪现象的一个原因就是电压波动所致。这里电压波动分两个情况,一种是市电的电压本身不稳定,这里多为四六级城市和一些山区地方。如果市电不稳定的话,那么最好是自行配备一个大功率电源稳压器,对电脑来说可以配备一个UPS电源,不但可以起到稳压作用,还可以保证断电时持续为PC供电,不让硬盘在工作时突然掉电。另一种情况就是PC电源供电电压不稳定,一些劣质电源或者缩水电源(电源的实际功率过小)就会发生这种现象,用户只要更换质量较好的电源即可。另外,用户如果挂接的设备太多的话,也会引起PC电源供电不足从而引起电压不稳定的情况,此时就需要更换功率较高的电源了。

  4、建议保证系统拥有512MB内存

  虚拟内存机制是Windows操作系统的一个很重要的举措。现在程序运行时需要的内存越来越大,就是一个QQ聊天软件,占用的内存也不可小视,更不用说那些大型的图像处理软件了。如果PC物理内存少的话,操作系统就会让硬盘作为虚拟内存,来补充内存的不足以保证程序的正常运行。此举无疑对硬盘是有害无益的,同时对系统速度来说也让用户烦恼得很,因为硬盘的速度与内存的速度相比的话相差得实在是太远了。

  目前主流的操作系统是Windows XP,要想让它运行得流畅的话,256MB内存是至低的要求,但是当运行程序多了的话,256MB内存是不够的,建议用户升级至512MB内存以保证系统运行的速度,同时对硬盘来说也是一个相当有利的保护方案,再说现在的内存已经很便宜,这个投资不应该省。

  5、硬盘操作习惯方面注意事项

  硬盘从开始工作的那一天起,就是不断地开始了其漫长的老化过程。读写数据操作就是其老化过程的量变因素,所以读写操作频率的话,会使硬盘老化过程加化甚至出现一些不可预知的问题,其中要注意的几点如下:

  不要24小时BT下载:这里并不是说BT下载程序本身对硬盘有什么恶性伤害,而是指BT下载的速度和下载的内容对硬盘来说是一个较大的负担,例如下载一部电视连续剧,可能要10G以上,下载的种子数并不稳定,这样下载的速度就受到影响,往往需要用户24小时内不断地下载,甚至用几K/秒的速度去下载数十G的数据资料,这样频率地读写硬盘,还要连续不间断地工作的话,硬盘的老化速度及出现问题的机率就肯定是加大了。

  不要过渡频繁整理硬盘碎片:系统在使用了一段时间后,硬盘就会产生较多的文件碎片,较大地影响数据存取速度从而加速硬盘老化进程。不少用户就使用系统自带的磁盘碎片整理程序来进行大规模的整理。这个措施是好的,但是一定要注意不能过度频繁,否则会适得其反。因为磁盘碎片整理程序本身就是对硬盘频繁读写的操作,如果频繁采用这个操作的话,会加速硬盘的老化进程甚至损害硬盘。建议每一两个月进行一次磁盘整理,半年重装一次系统,这是最有效的提高系统速度的方法。

  尽量少用PC硬盘作为服务器:既然称得上是服务器,自然最好是使用服务器配件,普通的PC硬盘并非是为服务器而设计的,而且用在普通的PC里面,硬盘的所有服务器保护措施都没有。作为24小时工作的服务器,普通的PC硬盘是承受不住高强度的上传和下载服务的,所以普通用户最好还是少在自家架设24小时服务器,除非你是准备一年更换一个硬盘。

  硬盘读写数据时切勿断电

  硬盘在读写操作时不但不能挪动,而且也不能断电。虽然硬盘厂商已经做了各种各样的安全措施,但是突然断电操作对硬盘来说还是一个历史性的问题,经验表明,突然断电是很容易造成硬盘物理性损伤的,这不只是丢失数据的问题,一些物理性的损伤有可能无法恢复,所以用户一定要注意,尽量避免硬盘在读写数据时断电。

  而且,不要频繁地开关电源,有些DIY用户在进行一些测试性损伤,要经常开关机。例如PC出现问题后要经常采用换硬件的方法来检测PC,这时应该把硬盘电源拔开,否则硬盘的磁头就要频繁地经历“起飞”“着陆”过程,这肯定是增加了硬盘的损坏的机率的,所以一定要注意。

  不要对硬盘进行超频使用

  一些DIY用户非常喜欢超频,其热度高到不但为CPU、显卡超频,连硬盘也进行超频。其实这是相当不好的一个操作。硬盘在超频后的性能提升十分有限,而由此而带来的危害却是相当大的。硬盘和CPU、内存不一样,它是属于机械机构的配件,超频后硬盘一旦出现不稳定的现象时,其危害直接表现为数据丢失,这些都是CPU、内存所不能比的损失。数据无价,用户最好不要采用这种得不偿失的超频方法。

  硬盘坏道是一个历史性问题,出现这种情况后低格已经不再是普遍使用的方法,因为现在数百G的硬盘经受这样的操作的话实在是比较残忍。其实我们可以采用屏蔽硬盘坏道以阻止其扩散的办法来减低损失。而且在划分坏道区的时候要狠点心,划分多一点空间,不要因小而失大。同时笔者建议出现坏道的硬盘里面的数据要经常进行备份,毕竟它是一个病号,备份是解决数据丢失的最保险的办法了。

【电脑系统维护修复和硬盘常见问题】相关文章:

我要回帖

更多关于 正在配置更新一直重启 的文章

 

随机推荐