关闭

锁的浅述

1.可重入锁  如果锁具备可重入性,则称作为可重入锁。像synchronized和ReentrantLock都是可重入锁,可重入性在我看来实际上表明了锁的分配机制:基于线程的分配,而不是基于方法调用的分配。举个简单的例子,当一个线程执行到某个synchronized方法时,比如说method1,而在method1中会调用另外一个synchronized方法method2,此时线程不必重新去申请锁,而...
阅读(31) 评论(0)

Lock和Synchronized的比较

之前看到在并发中的currentHashMap和HashTable,两者都是线性安全的,但其实现却不同;currentHashMap底层通过java.util.concurrent.locks包的lock实现同步,针对共享数据进行加锁;HashTable通过synchronized关键字对代码块进行实现同步;这里对lock和synchronized进行详细的比较。 比较之前,说一下他们的共同目的:...
阅读(52) 评论(0)

工厂模式浅述

使用设计模式的目的: 1、缩短开发周期 2、降低维护成本 3、应用程序和内部接口集成更轻松工厂模式包括: 简单工厂模式、工厂方法模式、抽象工厂模式1、简单工场模式 由抽象产品角色、具体产品角色、工厂角色、客户端角色组成; 由一个工厂对象决定创建出哪一种产品类的实例;public interface people{ //抽象产品 public v...
阅读(112) 评论(0)

加密解密算法介绍

加密技术是对信息进行编码和解码的技术,编码是把原来可读信息(又称明文)译成代码形式(又称密文),其逆过程就是解码(解密)。加密技术的要点是加密算法,加密算法可以分为对称加密、不对称加密和不可逆加密三类算法。 对称加密算法 对称加密算法是应用较早的加密算法,技术成熟。在对称加密算法中,数据发信方将明文(原始数据)和加密密钥一起经过特殊加密算法处理后,使其变成复杂的加密密文发送出去。收信方收到密文后,若...
阅读(43) 评论(0)

存储过程浅述

为什么要用存储过程 几个去 IBM 面试的兄弟回来抱怨:去了好几个不同的 IBM 项目组,几乎每个面试官问到数据库的时候都要问用没用过存储过程,烦人不?大家去面的程序员,又不是 DBA,以前的项目都没有用到存储,不照样运行的好好的? 存储过程真的那么重要吗,它到底有什么好处呢? 笔者认为,存储过程说白了就是一堆 SQL 的合并。中间加了点逻辑控制。 但是存储过程处理比较复杂的业务时比较实用。比如说,...
阅读(392) 评论(0)

数据库表间的联系

第一部分、查询理论 连接查询方式有: 内连接、外连接(左连接、右连接、全连接)、交叉连接 左连接和右连接的区别:左连接以左表为基准进行查询,左表数据会全部显示出来,右表如果和左表匹配的数据则显示相应字段的数据,如果不匹配,则显示为NULL;右连接刚好相反。 全连接就是先以左表进行左外连接,然后以右表进行右外连接。 说明:所谓的基准,就是以某张表的限制条件查询条件为准! 具体如下: 一、内连接 内连接...
阅读(29) 评论(0)

Hibernate缓存机制浅述

**Hibernate**作为**JPA**规范的其中一种**ROM框架**实现,在轻量级企业应用开发中有一定的应用份额。下面介绍下关于其缓存机制: 缓存目的: 在数据量很大时,请求数据库物理数据过多,会产生响应延迟等问题,影响系统整体性能。通过缓存减少访问次数,提高性能。 Hibernate缓存分为: 一级缓存、二级缓存 区别: 一级缓存中,存储修改、访问相对频繁,且多线程公用,且无并发的数据资源...
阅读(92) 评论(0)

内部类总结

首先,在java中不支持多继承,但可以通过接口实现,当类继承基类中和实现接口中的函数重名时,如何区分,就要用到内部类。    内部类: 指的是在一个类的内部所定义的类,类名不需要和源文件名相同。内部类是一个编译时的概念,一旦编译成功,内部类和外部类就会成为两个完全不同的类。例如,对于一个名为 Outer 的外部类和在其内部定义的名为 Inner 的内部类,在编译完成后,会出现 Outer.class...
阅读(30) 评论(0)

String 中equals()源码

面试官问道相关equal()复写的问题,这里小叙一下String的equals();在String源码中,String结构是:{ private **final** char value[]; //用于存放string字符的数组 private int hash; //表示string字符的哈希值,默认为0 }并且其类继承了public final class String implemen...
阅读(21) 评论(0)

编译原理过程简述及中间代码优化

一、编译过程图示如下:词法分析作用:找出单词 。如int a=b+c; 结果为: int,a,=,b,+,c和; 语法分析作用:找出表达式,程序段,语句等。如int a=b=c;的语法分析结果为int a=b+c这条语句。 语义分析作用:查看类型是否匹配等。二、中间代码优化所谓代码优化是指对程序代码进行等价(指不改变程序的运行结果)变换。程序代码可以是中间代码(如四元式代码),也可以是目标代码。...
阅读(26) 评论(0)

栈和队列的相互转换替代

面试的常见问题: 1. 两个栈实现队列 //前提已知: struct Stack { int top;   //栈顶指针 int stacksize;//栈的大小 int *s;   //栈底指针 }; void InitStack(Stack *s); void Push(Stack *s, int k); int Pop(*s); int IsStackEmpt...
阅读(43) 评论(0)

并发中的i++安全问题浅述

*多线程操作同一变量*此处不可能是局部变量,肯定是成员变量或静态变量 PS:为什么不可能是局部变量? 需要多线程访问局部变量,那么多个线程就必须在方法中进行定义,如使用匿名内部类方式定义多个线程。 在使用匿名内部类引用局部变量时,局部变量必须通过final来修饰。这样做的原因是变量的生命周期问题。 final修饰的变量,不管是int还是Integer,都不能进行自加操作。在A线程执行i++结...
阅读(27) 评论(0)

JVM中线程状态转换及线程操作函数的理解

关于线程转换的问题,简单来说就是5/3个状态相互转换,那么具体在什么情况下才转换呢,在这里借鉴几位大神加上自己的理解,总结如下: 5状态下是比3状态下多出了初始和结束两个状态,初始状态一般指的是thread.start(),结束状态是main()函数结束; 状态转换中只有就绪和运行状态是双向的。 下面说一下具体转换条件,上图如下: 其中, Join方法实现是通过wait(...
阅读(17) 评论(0)

栈为什么效率比堆高

栈为什么效率比堆高总结如下:1、有寄存器直接对栈进行访问(esp,ebp),而对堆访问,只能是间接寻址。 也就是说,可以直接从地址取数据放至目标地址;使用堆时,第一步将分配的地址放到寄存器,然后取出这个地址的值,然后放到目标地址。 2、栈中数据cpu命中率更高,满足局部性原理。 3、栈是编译时系统自动分配空间,而堆是动态分配(运行时分配空间),所以栈的速度快。 4、栈是先进后出的队列结构,比...
阅读(36) 评论(0)

数据库索引的运行原理及基本结构

索引:是一种独立、物理的存储数据表一列或多列数值的一个有序的数据结构。(聚簇索引,是物理顺序和键值顺序一致,所以是一张表只能建立一个聚簇索引;非聚簇索引则反之。)同时包涵索引数据,还有指向列数据的数据表的指针表单 索引建立目的主要是提高数据的检索速度,当检索时,通过索引找到相应的键值,然后根据键值的指针找到对应的行,完成检索。 简单的说,索引就像是书的目录,通过查找页码,找到想要阅读的信息。主要...
阅读(37) 评论(0)
57条 共4页1 2 3 4 下一页 尾页
    个人资料
    • 访问:3694次
    • 积分:414
    • 等级:
    • 排名:千里之外
    • 原创:30篇
    • 转载:16篇
    • 译文:0篇
    • 评论:0条