10 2016 档案
摘要:Iterable Iterable接口有一个方法声明,方法用于获取迭代器。实现该接口的类表明可以使用foreach来遍历。实现该接口的类中的iterator()方法必须返回一个迭代器。而迭代器类通常作为内部类来实现,此内部类必须实现Iterator接口。 Iterator 实现该接口的类可以作为迭代
阅读全文
摘要:Vector、ArrayList、LinkedList Vector和ArrayList在使用上非常相似,都可用来表示一组数量可变的对象应用的集合,并且可以随机地访问其中的元素。 Vector的方法都是同步的(Synchronized),是线程安全的(thread-safe),而ArrayList的
阅读全文
摘要:JavaWeb应用的生命周期由Servlet容器控制,而Servlet的容器也同样由Servlet容器控制。Servlet的生命周期分为三个阶段:初始化阶段、运行阶段和销毁阶段。javax.servlet.Servlet接口定义了三个方法:init()、service()和destroy()。它们会
阅读全文
摘要:JavaWeb应用的生命周期是由Servlet容器来控制。 启动阶段 (1)读取web.xml配置文件数据 (2)为JavaWeb应用创建一个ServletContext对象 (3)对所有的Filter进行初始化。 (4)对需要在Web应用启动时就被初始化的servlet进行初始化。 运行阶段 所有
阅读全文
摘要:CountDownLatch A synchronization aid that allows one or more threads to wait until a set of operations being performed in other threads completes. A C
阅读全文
摘要:Servlet最常用的对象: 请求对象:ServletRequest和HttpServletRequest,通过该对象获取来自客户端的请求信息 响应对象:ServletResponse和HttpServletResponse,通过该对象生成响应结果 Servlet配置对象:ServletConfig
阅读全文
摘要:在Tomcat/conf下有一个web.xml文件,当Tomcat中所有web应用实例化时都会读取该配置文件,然后读取每个web应用自己的配置文件(/WEB-INF/web.xml)。 conf/web.xml作出以下配置:
阅读全文
摘要:Tomcat的核心组件是servlet容器。 Tomcat各个组件之间的嵌套关系 server.xml配置如下: <Server> 代表整个servlet容器组件。里面可以有一个或多个Service 参数: className:必须实现org.apache.catalina.Server接口 add
阅读全文
摘要:前面提到,当我们用多线程同时运行多个任务时,可以通过锁(互斥)来同步两个任务的行为,从而使得一个任务不会干涉另一个任务的资源。 这一章要解决的问题不是彼此间的干涉,而是彼此间的协作。协作时,关键问题是握手。为了实现握手,我们同样使用互斥,因为互斥能够确保只有一个任务可以相应某个信号,这样就可以根除竞
阅读全文
摘要:sleep(),wait(),yield() 的区别 sleep方法和yield方法是Thread类的方法,wait方法是Object的方法。 sleep 方法使当前运行中的线程睡眼一段时间,进入不可运行状态,这段时间的长短是由程序设定的,不会释放锁标志。 wait方法调用后,线程会放弃对象锁,进入
阅读全文
摘要:花园入口计数 花园有多个入口,希望统计花园每天的总人数。 在阻塞时终结 上面的例子中,Entrance.run()循环中包含sleep()的调用。sleep()终将被唤醒,任务又返回循环开始的地方判断canceled标志,从而决定是否跳出循环。但是,sleep()下,它使任务变为阻塞,而我们有时候需
阅读全文
摘要:本章主要讲如何解决访问共享资源时的竞争问题。 其中关于synchronized关键子,显式lock锁等详细内容看我写的这篇文章。 下面主要讲原子类、临界区和线程本地存储: 原子类 J2SE 5.0提供了一组atomic class来帮助我们简化同步处理。基本工作原理是使用了同步synchronize
阅读全文
摘要:定义任务 描述一个任务,使用Runnable接口,实现其run方法即可。以下为一个倒计时的任务,打印倒计时以及任务的ID。 Thread.yield()的调用是对线程调度器的一种声明:当前线程已经完成生命周期中的最重要的部分,现在可以切换给其他任务执行一段时间了。 A hint to the sch
阅读全文
摘要:多线程 多线程与多进程的区别在于每个进程拥有自己的一整套变量,线程则共享数据。与进程相比,线程更加“轻量级”,创建和撤销一个线程比启动新进程开销要小得多。 实现多线程有两种方法: 以下采用两种方法分别实现多线程 实现Runnable接口 继承Thread类 实现Runnable接口比继承Thread
阅读全文
摘要:为什么使用泛型程序设计 泛型程序设计意味着编写的代码可以被很多不同类型的对象所重用。 定义简单的泛型类 一个泛型类就是具有 “一个或多个类型变量” 的类。 以下定义一个泛型类: 以下定义一个ArrayAlg类,其minmax方法用于字符串数组查找,并将返回的结果存于Pair的对象。 泛型方法 类型变
阅读全文
摘要:系统进程 查看进程 ps -ax指令查看当前进程和进程状态。 STAT表示进程的状态,意义如下: S:睡眠,等待某个事件发生。 R:运行,处于正在执行或即将运行状态。 D:不可中断的睡眠,如:等待输入或输出。 T:停止。 Z:僵尸进程 N:低优先级进程 s:进程是会话期首进程 +:进程属于前台进程组
阅读全文
摘要:内存管理 分配内存 释放内存 Linux支持虚拟内存,内核会将暂时不用的内存块的内容写到硬盘上,用作虚拟内存的硬盘部分被称为交换空间(Swap Space)。 Linux将所有的内存以页为单位进行划分。每当程序试图访问内存时,就会发生虚拟内存到物理内存的转换。 如果一个内存页面未被使用,则将其从物理
阅读全文
摘要:❤❥웃유♋☮✌☏☢☠✔☑♚▲♪✈✞÷↑↓◆◇⊙■□△▽¿─│♥❣♂♀☿Ⓐ✍✉☣☤✘☒♛▼♫⌘☪≈←→◈◎☉★☆⊿※¡━┃♡ღツ☼☁❅♒✎©®™Σ✪✯☭➳卐√↖↗●◐Θ◤◥︻〖〗┄┆℃℉°✿ϟ☃☂✄¢€£∞✫★½✡×↙↘○◑⊕◣◢︼【】┅┇☽☾✚〓▂▃▄▅▆▇█▉▊▋▌▍▎▏↔↕☽☾の•▸◂▴▾┈┊①
阅读全文
摘要:程序参数 int main(int argc , char *argv[]) argc是程序参数的个数,argv是代表参数的字符串数组。 以下对参数检查: 带参数执行 getopt 该函数将传递给程序的main函数的argc和argv作为参数,同时接收一个字符串optstring,该字符串告诉get
阅读全文
摘要:异常分类 Throwable ┃ ┏━━━━━━━━┓ Error Exception ┃ ┏━━━━━━━━┓ IOException RuntimeException 异常对象都派生于Throwable类的一个实例,即所有异常都是继承Throwable类。 异常分为两种: (1)Error类,描
阅读全文
摘要:代理模式的作用 为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个客户不想或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。 代理模式一般涉及到的角色 抽象角色:声明真实对象和代理对象的共同接口; 代理角色:代理对象角色内部含有对真实对象的引用,从而可以操
阅读全文
摘要:特点 内部类可以访问外部类的所有作用域。 内部类可以对同一个包的其他类隐藏起来。 链接到外部类 当外部类的对象创建一个内部类对象时,此内部类对象必定会捕捉一个指向外部类对象的引用。 内部类的对象只能在与外部类的对象相关联的情况下才能被创建(内部类是非static时),即必须存在外部类的对象。 在外部
阅读全文
摘要:底层文件访问 文件描述符: 0:标准输入 1:标准输出 2:标准错误 write系统调用 把缓冲区buf的前nbytes个字节写入与文件描述符fildes关联的文件中。返回实际写入的字节数。返回0表示未写入,返回-1表示错误。 输出: read系统调用 从与文件描述符fileds相关联的文件里读入n
阅读全文
摘要:Object类实现了clone()方法(protected)。用户自己编写的类若想调用该方法,必须实现Cloneable接口,以此表明Object.clone()是合法的。 如果对象中的域是引用数据类型,克隆的新对象的对应域和原来的域共同引用同一个对象。 注:Cloneable是一个标记接口,其没有
阅读全文
摘要:接口 主要用来描述类具有什么功能,而不给出具体实现。 一个类可以实现多个接口。实现接口的类必须实现接口的所有方法。 接口可以定义任意类型的常量,但不能定义变量(实例域)。实现接口的类中可以访问接口定义的常量,但不能更改这些常量(static)。 接口不能实现方法。 接口和抽象类的区别 1、相同点 A
阅读全文
摘要:能够分析类能力的程序称为反射。 Class类 程序运行中,系统为每个对象维护一个运行时的类标识,该信息可以追踪对象所属的类。可以通过专门的java类访问这些信息,保存这些信息的类称为Class类。 获取类型标识: Employee e; Class c1 = e.getClass(); 获取类名对应
阅读全文
摘要:判断两个对象是否为同一类型,时常用到getclass 和 instanceof ,而这两个函数又是时常让人混淆。下面从一个例子说明两者的区别: public class Test_drive { public static void main(String[] args){ A a = new A(
阅读全文
摘要:有时候需要将基本数据类型转换为对象,如int -> Integer。Integer这样的类称为对象包装器类,该类一旦构造对象,便是不可变的。 装箱 list.add(3) 自动变为 list.add(Integer.valueOf(3)) 拆箱 int n = list.get(i) 自动变为 in
阅读全文
摘要:泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。 这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。 泛型类 容器类应该算得上最具重用性的类库之一。先来看一个没有泛型的情况下的容器类如何定义: Container类保存了一对key-value键值对,但
阅读全文
摘要:java中所有的继承都是公有继承。 在子类中的构造其内可以初始化超类的公有域,但不能初始化超类的私有域。 因此需要在子类构造前的第一行使用super()语句初始化超类的私有域。 如果超类没有不带参数的构造器,而子类没有显式的调用超类的其他构造器,则会出现编译错误。因为编译器无法调用超类的默认构造器。
阅读全文
摘要:静态域 如果将类中的一个域定义为静态static,则所有对象共享这一个域。 每个对象对该域的改变,也会影响其他对象对这个域的读取。 若想对静态域进行初始化,可以使用静态代码快: 以上类在第一次加载时便会初始化classId的值。 静态方法 静态方法是一种不能向对象实施操作的方法。 该方法没有隐式参数
阅读全文
摘要:final修饰变量 final修饰符一般用于基本数据类型(int,float)或者不可变对象(String)。这时候可以看作常量变量。 但是当final作用于可变数据类型时(数组,一般对象),仅仅表示存储在该变量中的对象的引用不被改变,但该对象的属性依然可以改变。 下面是final作用于可变数据类型
阅读全文
摘要:java中函数的参数传递方式为值传递。 如果参数是基本数据类型,则方法无法改变参数的值。 如果参数是引用类型,则可以改变引用对象的状态。但不能引向一个新的对象。 举例: 由上面的例子可以看出,对于引用类型参数而言,方法中的参数依然是值传递,将原来引用类型参数的引用值拷贝到一个新的变量,并传入到方法中
阅读全文
摘要:不可变字符串 Java没有字符串类型,而是提供了一个预定义类String。 java中的字符串是不可变字符串,因此无法更改某一个字符串变量的内容。 优点:编译器可以让字符串共享。当复制一个字符串时,原始字符串和复制的字符串共享相同的字符。 缺点:修改字符串时,需要通过修改字符串变量,让该变量引用另外
阅读全文
摘要:变量:字符串、数字、环境和参数 获取变量内容可以在变量前使用$字符,使用echo指令可以将变量内容输出到终端。 注意:如果字符串中间有空格,则必须使用引号。此外等式两边不能有空格。 使用read命令可以将用户输入的值赋给变量 引号的使用 双引号中使用$var时,程序自动替换成变量的值。单引号中使用$
阅读全文
摘要:开发系统导引 应用程序 /usr/bin:系统为正常使用提供的程序 /usr/local/bin,/opt:系统管理员存放的应用程序 头文件 C语言的头文件几乎都放在/usr/include 依赖特定Linux版本的头文件放在/usr/include/sys和/usr/include/linux 库
阅读全文