1.线程池  1.1什么情况下使用线程池 单个任务处理的时间比较短. 将需处理的任务的数量大. 1.2使用线程池的好处 减少在创建和销毁线程上所花的时间以及系统资源的开销. 如果不使用线程池,有可能造成系统创建大量线程而导致消耗系统内存以及”过度切换”; 2.ExecutorService和Executors 2.1简介 ExecutorService是一个接口,继承了Executor, public interface ExecutorService extend Executor{ } Executor也是一个接口,该接口只包含一个方法: public interface Executor { void execute(Runnable command); } java里面的线程池的顶级接口是Excutor,但是严格意义上来说>>Exector并不是一个线程池,而只是一个执行线程的工具,真正的线程>池接口是ExecutorService. 3.Executo 继续阅读 >>


杨龙飞 16/07/11 19:18:01
1.synchronized—对象加锁 synchronized方法包括两种,一是标注了synchronized关键字的方法,一种是synchronized代码块.而不论是同步代码块还是同步方法都具有了原子性和可见性. 1.1 原子性 原子性指的是一个时刻,只能有一个线程执行一段同步代码或一个同步方法,这个同步代码段或这个同步方法会通过一个monitor object保护. 作用:防止多个线程在更新共享时相互冲突. 原理:对象监视器(锁),只有获取到监视器的线程才能继续执行,否则线程会等待获取监视器,java中每个对象或者类都有一把锁与之对应,对于对象来说,监视的是这个对象的实例变量,对于类来说,监视的是类变量(一个类本身是类Class的对象,所以与类关联的锁也是对象锁),当线程执行到同步代码块或同步方法时,JVM会锁住这个引用对象,当离开时才会释放这个引用对象上的锁.对象锁是JVM内部机制,锁的获取黑盒释放是JVM完成的. 1.2 可见性  可见性会消除内存缓存和编译器优化的各种反常行为,也就是说它必须保证释放锁之前对共享数据做出的更改 继续阅读 >>


杨龙飞 16/07/11 15:29:47
java中String、StringBuffer、StringBulider是经常要用到的字符串类,那么它们之间到底有什么不同?以及它们的应用场景? String字符串常量 String 简介 String 类是不可变类,所以String本身的值是不能改变的,任何对String的操作都会引起新的String对象的产生.去看看String类的具体实现你就会发现,用来保存字符串的数组用final修饰: 下面的代码段是String类的部分实现. private final char value[]; //保存字符串的数组. 如何证明String对象本身的值不可变? String s="abcd"; s=s+1; System.out.println(s); //result:abcd1; 这段代码大家一定已经用烂了,从结果来看,我们明明改变了String类型的变量s,为什么说String对象是不可变的呢,其实这是一种欺骗,JVM是这样解析这段代码的:首先创建对象s,赋予abcd,然后再创建一个新的对象s来执行第二行的代码 继续阅读 >>


杨龙飞 16/07/10 14:33:58
动态存储方式 所谓动态存储方式是指在程序运行期间根据需要进行动态的分配存储空间的方式。动态存储变量是在程序执行过程中,使用它时才分配存储单元, 使用完毕立即释放。 典型的例子是函数的形式参数,在函数定义时并不给形参分配存储单元,只是在函数被调用时,才予以分配, 调用函数完毕立即释放。如果一个函数被多次调用,则反复地分配、 释放形参变量的存储单元。 静态存储方式 所谓静态存储方式是指在程序编译期间分配固定的存储空间的方式。该存储方式通常是在变量定义时就分定存储单元并一直保持不变, 直至整个程序结束。全局变量,静态变量等就属于此类存储方式。 总结 从以上分析可知, 静态存储变量是一直存在的, 而动态存储变量则时而存在时而消失。我们又把这种由于变量存储方式不同而产生的特性称变量的生存期。 生存期表示了变量存在的时间。 生存期和作用域是从时间和空间这两个不同的角度来描述变量的特性,这两者既有联系,又有区别。 一个变量究竟属于哪一种存储方式, 并不能仅从其作 继续阅读 >>


杜肖孟 16/07/09 19:30:43
用途: (1)限制变量的作用域     (2)设置变量的存储域 一个进程在内存中的布局如图所示: .text段保存进程所执行的程序二进制文件,.data段保存进程所有的已初始化的全局变量,.bss段保存进程未初始化的全局变量(其他段中还有很多乱七八糟的段,暂且不表)。在进程的整个生命周期中,.data段和.bss段内的数据时跟整个进程同生共死的,也就是在进程结束之后这些数据才会寿终就寝。 static 全局变量与普通的全局变量有什么区别? 两者都是静态存储方式,区别在于非静态全局变量的作用域是整个源程序。当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的,而静态全局变量的作用距局限于一个源文件内,只能为源文件内的函数使用。把普通全局变量改为静态全局变量时改变了它的作用域,限制了它的使用范围。 static 局部变量与普通的局部变量有什么区别? 1)位置:静态局部变量被编译器放在全局存储区.data(注意:不在.bss段内,原因见3)),所以它虽然是局部的,但是在程序的整个生命周期中存在。 2)访问权限:静态局部变量只 继续阅读 >>


杜肖孟 16/07/09 19:02:46
软件工程复习重点 一、 软件工程概述1. 软件的概念及特点 定义:软件是程序、数据及开发、使用和维护程序所需要的所有文档 特点:软件是一个逻辑的而不是物理的产品2. 软件危机的表现形式 1) 软件的开发成本和开发进度的估计常常很不准确 2) 用户对“已完成”软件系统不满意的现象常常发生 3) 软件产品的质量往往靠不住 4) 软件通常没有适当的文档资料 5) 软件常常是不可维护的 6) 其他3. 软件工程的概念及研究内容 定义:采用工程的概念、原理、技术和方法来开发和维护软件,把经过时间考验而证明正确的管理技术和当前能够用得到的技术方法结合起来,来指导软件的开发与维护。 4. 软件工程的基本原理 1) 用分阶段的生命周期计划严格管理 2) 坚持进行阶段评审 3) 实行严格的产品控制 4) 采用现代的程序设计技术 5) 结果能够清楚的审查 6) 开发小组的人员应该少而精 7) 承认不断改进软件工程实践必要性5. 软件生存期模型 常见的软件生存周期模型有瀑布模型、演化模型、螺旋模型、喷泉模型等6. 主流开发方法 继续阅读 >>


周攀 16/07/06 21:19:52
1.为什么要学习数据库”范式”? 当我们独立去完成一个自己的小项目的时候,肯定要去设计”合适”的数据模型即逻辑架构,那么,我们怎么知道自己设计的数据模型是最”合适”的呢?肯定得有一个标准去衡量自己设计的数据模型,看到这里,大家知道为什么要学习范式了. 2.”范式”能解决什么问题? 刚才说过,学习范式是为了去设计一个”合适的”数据模型,那么,一个”合适”的数据模型,它能解决什么问题呢? 1.消除数据冗余. 2.消除更新异常. 3.消除插入异常 4.消除删除异常. 3.范式的概念 范式是符合某一种级别的关系模式的集合,它是关系数据库理论的基础,也是我们在设计数据库结构中所要尊循的规则和指导方法. 数据库有5个基本的范式:即第一范式(1NF),第二范式(2NF),第三范式(3NF),BCNF(BC范式),第四范式(4NF)。甚至还有5NF,6NF,DK范式,本文只讨论前面五种范式,这五种范式,就是为了解决第二个点中所说的问题.从1NF到4NF逐级提高标准,大家可以把它理解为猿到人的进化过程 继续阅读 >>


杨龙飞 16/07/05 16:55:55
我越来越相信王阳明了,或许有些偏激。 一支笔,一台电脑,一堆书。 继续阅读 >>


张明瑞 16/06/30 06:42:08
原文链接  在一般的Java应用开发过程中,开发人员使用Java的方式比较简单。打开惯用的IDE,编写Javaz代码,再利用IDE提供的功能直接运行Java 程序就可以了。这种开发模式背后的过程是:开发人员编写的是Java源代码文件(.java),IDE会负责调用Java的编译器把Java源代码编译成平台无关的字节代码(byte code),以类文件的形式保存在磁盘上(.clas 作者:wwh578867817 发表于 2016/06/27 16:15:13 原文链接 https://blog.csdn.net/wwh578867817/article/details/51769025 阅读:570 继续阅读 >>


王伟豪 16/06/27 16:15:13
具体数学 操作系统真象还原 X86汇编语言实模式保护模式 CSAPP MININX3设计与实现 FREEBSD […] 继续阅读 >>


张明瑞 16/06/27 16:00:33