java
问题一:
“工厂方法模式去掉简单工厂模式中工厂方法的静态属性,使得它可以被子类继承。”
如果类中含有静态方法,那么它就不能被子类继承吗?
答:可以被子类继承。静态属性的东西,只是意味着在内存中的某个特殊的地方仅存有一份它。
笔记:
【1】 某些编程语言被设计成为可以将并发任务彼此隔离,这些语言被称为函数型语言,其中每个函数调用都不会产生任何副作用(并因此而不能干涉其他函数),并因此可以当做独立 的任务来驱动。比如Erlang语言。
如果发现程序的某个部分必须大量使用并发,可以考虑Erlang这类专门的并发语言来创建这个部分。
【2】java的线程机制是抢占式的,表示调度机会周期性的中断线程,讲上下文切换到另一个线程,从而为每个线程都提供时间片。
在协作式系统中,每个任务都会自动的放弃控制,这要求程序员有意识的在每个任务中插入某种类型的让步语句。
协作式系统的优势是双重的:上下文切换的开销通常比抢占式系统要低廉的多,并且可以对可以同时执行的线程数量在理论上没有任何限制。
【3】使用线程机制是一种建立透明的、可扩展的程序的方法,如果线程运行的太慢,为机器添加一个cpu就能很容易的加快程序的运行速度。多任务和多线程往往是使用多处理器系统的最合理方式。
【4】如果你的机器上有多个处理器,线程调度器将会在这些处理器之间默默的分发线程。
【5】线程是如何创建的?new Thread()与run方法之间的关系如何?
【6】共享资源:一般是以对象形式存在的内存片段,但也可以是文件、输入输出端口、打印机等。
【7】应该在什么时候同步呢?
如果你正在写一个变量,它可能接下来将被另一个线程读取,或者正在读取一个上一次已经被另一个线程写过的变量,那么你必须使用同步,并且,读写线程都必须使用相同的监视器锁同步。
【8】尽管try-finally所需的代码比synchronized关键字要多,但是这也代表了显式的Lock对象的优点之一。如果在使用synchronized关键字时,某些事物失败了,那么就会抛出一个异常。但是,你没有任何机会去做任何清理工作,以维护系统使其处于良好的状态。有了显式的Lock对象,你就可以使用finally子句将系统维护在正确的状态了。
【9】Goetz测试:如果你可以编写用于现代微处理器的高性能JVM,那么就有资格去考虑是否可以避免同步。推论:“如果某人表示线程机制很容易并且很简单,那么请确保这个人没有对你的项目作出重要的决策。如果这个人已经这么做了,那么你就已经陷入麻烦之中了。”
【10】同步控制块:多个进程同时访问方法内部的部分代码而不是整个方法,此部分代码被称为临界区,通过关键字synchronized建立,也叫同步控制块。
通过使用同步控制块,而不是对整个方法进行同步控制,可以使多个任务访问对象的时间性能得到显著提高。
【11】在真正的线程问题中,失败的可能性从统计学角度看可能非常小,因此你很容易就掉进了轻信所有事物都将正确工作的陷阱里,在复审并发代码时要格外仔细。
【12】在this或者其他对象上加锁是什么意思?里面究竟是如何工作的?
------------------------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------------------------
Java I/O系统
【1】我们很少使用单一的类来创建流对象,而是通过叠合多个对象来提供所期望的功能(这是装饰器模式)。实际上,Java中“流”类库让人迷惑的主要原因就在于:创建单一的结果流,却需要创建多个对象。
【2】InputStream和OutputStream作用于面向字节形式的IO;Reader和Writer作用兼容Unicode与面向字符的IO。
【3】available()的工作方式会随着所读取的媒介类型的不同而不同,字面意思就是“在没有阻塞的情况下所能读取的字节数目”。对于文件,这意味着整个文件,但是对于不同类型的流,可能不是这样的,因此要慎用。
“工厂方法模式去掉简单工厂模式中工厂方法的静态属性,使得它可以被子类继承。”
如果类中含有静态方法,那么它就不能被子类继承吗?
答:可以被子类继承。静态属性的东西,只是意味着在内存中的某个特殊的地方仅存有一份它。
笔记:
【1】 某些编程语言被设计成为可以将并发任务彼此隔离,这些语言被称为函数型语言,其中每个函数调用都不会产生任何副作用(并因此而不能干涉其他函数),并因此可以当做独立 的任务来驱动。比如Erlang语言。
如果发现程序的某个部分必须大量使用并发,可以考虑Erlang这类专门的并发语言来创建这个部分。
【2】java的线程机制是抢占式的,表示调度机会周期性的中断线程,讲上下文切换到另一个线程,从而为每个线程都提供时间片。
在协作式系统中,每个任务都会自动的放弃控制,这要求程序员有意识的在每个任务中插入某种类型的让步语句。
协作式系统的优势是双重的:上下文切换的开销通常比抢占式系统要低廉的多,并且可以对可以同时执行的线程数量在理论上没有任何限制。
【3】使用线程机制是一种建立透明的、可扩展的程序的方法,如果线程运行的太慢,为机器添加一个cpu就能很容易的加快程序的运行速度。多任务和多线程往往是使用多处理器系统的最合理方式。
【4】如果你的机器上有多个处理器,线程调度器将会在这些处理器之间默默的分发线程。
【5】线程是如何创建的?new Thread()与run方法之间的关系如何?
【6】共享资源:一般是以对象形式存在的内存片段,但也可以是文件、输入输出端口、打印机等。
【7】应该在什么时候同步呢?
如果你正在写一个变量,它可能接下来将被另一个线程读取,或者正在读取一个上一次已经被另一个线程写过的变量,那么你必须使用同步,并且,读写线程都必须使用相同的监视器锁同步。
【8】尽管try-finally所需的代码比synchronized关键字要多,但是这也代表了显式的Lock对象的优点之一。如果在使用synchronized关键字时,某些事物失败了,那么就会抛出一个异常。但是,你没有任何机会去做任何清理工作,以维护系统使其处于良好的状态。有了显式的Lock对象,你就可以使用finally子句将系统维护在正确的状态了。
【9】Goetz测试:如果你可以编写用于现代微处理器的高性能JVM,那么就有资格去考虑是否可以避免同步。推论:“如果某人表示线程机制很容易并且很简单,那么请确保这个人没有对你的项目作出重要的决策。如果这个人已经这么做了,那么你就已经陷入麻烦之中了。”
【10】同步控制块:多个进程同时访问方法内部的部分代码而不是整个方法,此部分代码被称为临界区,通过关键字synchronized建立,也叫同步控制块。
通过使用同步控制块,而不是对整个方法进行同步控制,可以使多个任务访问对象的时间性能得到显著提高。
【11】在真正的线程问题中,失败的可能性从统计学角度看可能非常小,因此你很容易就掉进了轻信所有事物都将正确工作的陷阱里,在复审并发代码时要格外仔细。
【12】在this或者其他对象上加锁是什么意思?里面究竟是如何工作的?
------------------------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------------------------
Java I/O系统
【1】我们很少使用单一的类来创建流对象,而是通过叠合多个对象来提供所期望的功能(这是装饰器模式)。实际上,Java中“流”类库让人迷惑的主要原因就在于:创建单一的结果流,却需要创建多个对象。
【2】InputStream和OutputStream作用于面向字节形式的IO;Reader和Writer作用兼容Unicode与面向字符的IO。
【3】available()的工作方式会随着所读取的媒介类型的不同而不同,字面意思就是“在没有阻塞的情况下所能读取的字节数目”。对于文件,这意味着整个文件,但是对于不同类型的流,可能不是这样的,因此要慎用。