- 浏览: 42376 次
- 性别:
- 来自: 北京
文章列表
最近在研究blockqueue的源码,从今天开始,和大家分享一下我看源码的一些心得体会
(1)LinkedBlockingQueue源码解析
(2)ArrayBlockingQueue源码解析
LinkedBlockingQueue实现了BlockingQueue接口以及Serializable接口,是有序的FIFO队列,构造函数中,可传入一个最大容量值,如果没有传入,则默认是Integer.MAX_VALUE
一 首先看一下重要的几个类变量:
/** 保存当前队列中元素的个数 */
private ...
前面我们介绍的LinkedBlockingQueue的源码,这篇文章我们一起研究下ArrayBlockingQueue的源码
(1)LinkedBlockingQueue源码解析
(2)ArrayBlockingQueue源码解析
从语义上看,ArrayBlockingQueue底层是基于数组实现的,而LinkedBlockingQueue底层 ...
保存命令:
j={name:"wangjingjing",age:15}
db.user.save(j);
查询命令:
var cursor = db.user.find();
while(cursor.hasNext())printJson(cursor.next());
printJson(cursor[4]);
var arr = cursor.toArray();
db.user.find({name:"wangjingjing"});
//sel ...
假象我们在制作一个电子商务网站,如果我们使用关系型数据库,比如说mysql,那么一个product我们将会分别在几个表中保存,如果我们想要获得一个产品的全部信息,就不得不做很多的join,所以在设计数据库时候我们就需要考虑数据最好以什么样的结构来保存。
但是如果我们使用非关系型数据库,比如说mongo,我们完全可以将一个produce的数据存储在一个document中,一样也可以进行查询,而且mongo使用bson结构来存储,对于很多面向对象的语言来说,可以按照数据本身的结构进行保存,而不必分别存储在多个表当中。
mongo被设计成分布式的,而且使用于web application ...
1、单链表的整表删除
思路:
(1)声明一结点q、p
(2)将第一个结点赋给p
(3)循环
将下一结点赋给q
释放p
将q赋值给p
2、静态链表
3、循环链表:最后一个结点的指针指向头结点,形成闭合的单向环路
4、双向链表:既有前驱,也有后继
对于后面几种像静态链表,循环链表,双向链表,以前在大学也学过,这次又回忆了一下,感觉有了新的认识,链表暂且告一段落
第四章 栈与队列
栈是限定仅在表尾进行插入和删除操作的线性表
队列是只允许在一端进行插入操作,而在另一端进行删除操作的线性表
一、栈的定义
1、栈的定义
栈是限定仅在表尾进行插入和 ...
继续jvm的学习,昨天学习了根据十六进制的class文件分析还原类结构,今天学习类加载的过程
一、类加载的过程
1、加载(类加载过程中的其中一个过程)
(1)通过一个类的全限定名来获取定义此类的二进制字节流
(2)将这 ...
昨天在链表的顺序结构基础上对链表链式存储即单链表做了简单的介绍,今天继续。
1、单链表的读取
获得链表第i个元素的思路
(1)声明一个结点p指向链表的第一个结点,初始化j从1开始
(2)当j<1时,就遍历链表,让p的 ...
今天工作有点忙,没时间学习了,赶紧补上吧。
昨天开始学习class文件结构,今天继续。
一、class类文件结构
Class文件是一组以8位字节为基础单位的二进制流。
根据java虚拟机的规定,Class文件格式采用一种类似于C语言结构体的微结构来存储,这种伪结构只有两种数据类型:无符号数和表。
1、魔数与Class文件的版本,下面是从ue中拷贝出来的十六进制片段
package com.struts.action;
public class TestClass {
private int m;
public int inc(){
retu ...
继续昨天的知识,学习线性表的删除算法。
1、删除算法的思路:
(1)如果删除位置不合法,抛出异常
(2)取出删除元素
(3)从删除位置开始,元素逐一向前移动一个位置
(3)表长减1
我们可以得出线性表的顺序存储机构读数据的时间复杂度是O(1),而插入和删除的时间复杂度都是O(n)。
顺序存储结构的优缺点:
优点:
(1)无须为表中元素之间的逻辑关系而增加额外的存储空间
(2)可以快速的存取表中任意一个元素
缺点:
(1)插入和删除需要移动大量元素
(2)当线性表长度变化较大时,难以确定存储空间的容量
(3)造成存储空间的浪费(因为可能需要动态扩容)
...
今天是jvm学习的第二天,继续坚持吧,才刚刚开始。
一、垃圾收集算法,由于垃圾收集算法涉及大量的程序细节,而且每个平台的虚拟机操作内存的方法又各有不同,所以只介绍几种垃圾收集算法的思想。
(1)标记清除 ...
昨晚想看看高性能mysql,但是发现数据结构是绕不开的,所以是得好好学学数据结构了,选了一本入门教材《大话数据结构》,就当做读书笔记提炼精华了,今天是第一天,看看能坚持多久。
第一章 绪论
一、基本概念和术语
数据:描述客观事物的符号,是计算机中可以操作的对象,是能被计算机识别,并输入给计算机处理的符号集合。
数据元素:是组成数据的,有一定意义的基本单位,在计算机中通常作为整体处理,也称为记录。
数据项:一个数据元素可由若干数据项组成。数据项是数据不可分割的最小单位。
数据对象:性质相同的数据元素的集合。
数据结构:相互之间存在一种或多种特定关系的数据元素的集合。
...
与c和c++不同,java的虚拟机拥有自动垃圾回收的机制,使得程序员不必去关注垃圾回收的具体过程,然而或许也正因为如此,一旦出现了java内存泄露或者内存溢出时,排查工作讲变的麻烦,所以,理解jvm还是很有意义的。
一 ...
一、一直觉得用户请求和struts处理请求之间有一些空白的知识点,所以,今天准备看看tomcat。
其实像struts这类的控制层框架都是实现了servlet api,然后对一些业务进行进一步封装后的产物,但是它也只是负责处理业务的,那么用户的请求怎么就到达控制层呢?这就是servlet容器的作用了,tomcat作为开源的servlet容器,也实现了servlet api,在用户请求到来时,会为处理请求的servlet创建request和response,然后调用servlet的生命周期函数,当servelt处理完请求后,仍然由容器接受response,然后返回给客户端。
我们先看看tomc ...
一、昨天看的是文件上传,今天看了下文件下载
我们一般做文件下载时都是直接在a标签中写文件在服务器端的路径,这样做有两个问题:
(1)遇到中文的文件名时,可能会因为编码的问题而造成不能下载
(2)有些时候可 ...
struts2源码学习一验证框架
- 博客分类:
- struts2
struts的验证框架项目中用的可能比较少,我们用的比较多的方式是在页面前端使用js的验证框架来对表单进行初步的验证,然后可能利用异步技术对数据进行有效性验证。所以这部分只是我们只知道怎么用感觉就可以了,需要学习的就是验证拦截器的工作方式,以及国际化的处理。
验证可以采取两种方式,如果我们的Action继承了ActionSupport,那么就默认实现了Validateable接口。
(1)重写validate方法:
package com.struts.action;
import org.apache.commons.lang.StringUtils;
impor ...