1. Sleep和wait的区别:
(1)sleep来自 thread类,wait来自 object类
(2)sleep不释放锁,还有线程控制权。wait释放锁,交出线程控制权,需要notify
(3)sleep必须捕捉异常,wait不必
2. 索引的存储结构是什么:
索引是通过平衡二叉树来存储的。这样可以实现高效的存储,查询。二叉树的每个叶子结点都用来存储键值和rowid.有点是对于每个节点平衡二叉树的查询速度都是log(n)
索引的属性
有两种类型的索引块:
* 用于搜索的分支块
* 用于存储索引数据的叶块
(1) 分支块
分支块中存储以下信息:
* 最小的键值前缀,用于在本块的两个键值之间做出分支选择
* 指向包含所查找键值的子块的指针
包含 n 个键值的分支块含有 n+1 个指针。键值及指针的数量同时还受索引块容量的限制。
(2) 叶块
所有叶块相对于其根分支块的深度是相同的。叶块用于存储以下信息:
* 数据行的键值
* 键值对应数据行的 ROWID
所有的键值-ROWID 对都与其左右的兄弟节点向链接,并按照(key,ROWID)的顺序排序。
3.当线程池满的时候可以设置任务拒绝策略:有四种任务拒绝策略,分别为直接丢弃策略,丢弃最老策略,抛出异常策略,调用者执行策略。如果设置为调用者执行策略,当前线程将会去执行run方法。如下为代码,可以调用方法setRejectedExecutionHandler()来设置。
3. 隔离级别(isolation level) http://epub.itpub.net/3/4.htm
4. Oracle的锁机制
http://blog.youkuaiyun.com/vogts/article/details/1618406
http://www.cnblogs.com/jianging/archive/2011/03/29/1999311.html
Oracle分为独占锁,共享锁,更新锁。
共享锁指的是其它事务可以读,但不能修改它
更新锁指的是当当前事务没有修改数据的时候,其它事物可以读取数据。但是当当前事务要跟新事物的时候,就会把锁变成独占锁
锁的级别可以锁在行上也可以锁在表上。
因此对于上面的隔离性就可以加不同的锁来实现了
读未提交:写的时候对行加共享锁
读已提交:写的时候对行加独占锁
可重复读:写的时候对行加排它锁,读的时候对行级别加共享锁
序列化:读写的时候都对表加排它锁
5.javascript 中两个方法名相同的方法。当jsp调用的时候,会有什么效果。
当方法名相同时,javascript会用后定义的方法覆盖前面定义的方法。当两个方法在不同的
include文件中的时候,也按照include的顺序,后面的覆盖前面的。
6. inverse=true的含义: 由双向关联另一方维护该关联,己方不维护该关联(只能进行查询操作),作用:当many to many的时候,一方设为inverse = true,避免重复更新。
http://blog.youkuaiyun.com/leader_lx/article/details/2774137
7.单例模式最好用什么方法来实例化
用内部类来做延迟加载 http://blog.sina.com.cn/s/blog_75247c770100yxpb.html
8.Nio 和io的区别 http://blog.youkuaiyun.com/kobejayandy/article/details/11545057
http://canann.iteye.com/blog/1853569
面向流与面向缓冲
Java NIO和IO之间第一个最大的区别是,IO是面向流的,NIO是面向缓冲区的。 Java IO面向流意味着每次从流中读一个或多个字节,直至读取所有字节,它们没有被缓存在任何地方。此外,它不能前后移动流中的数据。如果需要前后移动从流中读取的数据,需要先将它缓存到一个缓冲区。 Java NIO的缓冲导向方法略有不同。数据读取到一个它稍后处理的缓冲区,需要时可在缓冲区中前后移动。这就增加了处理过程中的灵活性。但是,还需要检查是否该缓冲区中包含所有您需要处理的数据。而且,需确保当更多的数据读入缓冲区时,不要覆盖缓冲区里尚未处理的数据。
阻塞与非阻塞IO
Java IO的各种流是阻塞的。这意味着,当一个线程调用read() 或 write()时,该线程被阻塞,直到有一些数据被读取,或数据完全写入。该线程在此期间不能再干任何事情了。 Java NIO的非阻塞模式,使一个线程从某通道发送请求读取数据,但是它仅能得到目前可用的数据,如果目前没有数据可用时,就什么都不会获取。而不是保持线程阻塞,所以直至数据变的可以读取之前,该线程可以继续做其他的事情。 非阻塞写也是如此。一个线程请求写入一些数据到某通道,但不需要等待它完全写入,这个线程同时可以去做别的事情。 线程通常将非阻塞IO的空闲时间用于在其它通道上执行IO操作,所以一个单独的线程现在可以管理多个输入和输出通道(channel)。
9.ReentrantLock和synchronized
http://wsmajunfeng.iteye.com/blog/1492316
(1)sleep来自 thread类,wait来自 object类
(2)sleep不释放锁,还有线程控制权。wait释放锁,交出线程控制权,需要notify
(3)sleep必须捕捉异常,wait不必
2. 索引的存储结构是什么:
索引是通过平衡二叉树来存储的。这样可以实现高效的存储,查询。二叉树的每个叶子结点都用来存储键值和rowid.有点是对于每个节点平衡二叉树的查询速度都是log(n)
索引的属性
有两种类型的索引块:
* 用于搜索的分支块
* 用于存储索引数据的叶块
(1) 分支块
分支块中存储以下信息:
* 最小的键值前缀,用于在本块的两个键值之间做出分支选择
* 指向包含所查找键值的子块的指针
包含 n 个键值的分支块含有 n+1 个指针。键值及指针的数量同时还受索引块容量的限制。
(2) 叶块
所有叶块相对于其根分支块的深度是相同的。叶块用于存储以下信息:
* 数据行的键值
* 键值对应数据行的 ROWID
所有的键值-ROWID 对都与其左右的兄弟节点向链接,并按照(key,ROWID)的顺序排序。
3.当线程池满的时候可以设置任务拒绝策略:有四种任务拒绝策略,分别为直接丢弃策略,丢弃最老策略,抛出异常策略,调用者执行策略。如果设置为调用者执行策略,当前线程将会去执行run方法。如下为代码,可以调用方法setRejectedExecutionHandler()来设置。
ThreadPoolExecutor pool = new ThreadPoolExecutor(1, 1, 0, TimeUnit.SECONDS, new ArrayBlockingQueue<Runnable>(1));
pool.setRejectedExecutionHandler(new ThreadPoolExecutor.AbortPolicy());
for (int i = 0; i < 10; i++)
{
final int index = i;
pool.submit(new Runnable()
{
public void run()
{
log("run task:" + index + " -> " + Thread.currentThread().getName());
try
{
Thread.sleep(1000L);
}
catch (Exception e)
{
e.printStackTrace();
}
log("run over:" + index + " -> " + Thread.currentThread().getName());
}
});
}
3. 隔离级别(isolation level) http://epub.itpub.net/3/4.htm
4. Oracle的锁机制
http://blog.youkuaiyun.com/vogts/article/details/1618406
http://www.cnblogs.com/jianging/archive/2011/03/29/1999311.html
Oracle分为独占锁,共享锁,更新锁。
共享锁指的是其它事务可以读,但不能修改它
更新锁指的是当当前事务没有修改数据的时候,其它事物可以读取数据。但是当当前事务要跟新事物的时候,就会把锁变成独占锁
锁的级别可以锁在行上也可以锁在表上。
因此对于上面的隔离性就可以加不同的锁来实现了
读未提交:写的时候对行加共享锁
读已提交:写的时候对行加独占锁
可重复读:写的时候对行加排它锁,读的时候对行级别加共享锁
序列化:读写的时候都对表加排它锁
5.javascript 中两个方法名相同的方法。当jsp调用的时候,会有什么效果。
当方法名相同时,javascript会用后定义的方法覆盖前面定义的方法。当两个方法在不同的
include文件中的时候,也按照include的顺序,后面的覆盖前面的。
6. inverse=true的含义: 由双向关联另一方维护该关联,己方不维护该关联(只能进行查询操作),作用:当many to many的时候,一方设为inverse = true,避免重复更新。
http://blog.youkuaiyun.com/leader_lx/article/details/2774137
7.单例模式最好用什么方法来实例化
用内部类来做延迟加载 http://blog.sina.com.cn/s/blog_75247c770100yxpb.html
8.Nio 和io的区别 http://blog.youkuaiyun.com/kobejayandy/article/details/11545057
http://canann.iteye.com/blog/1853569
面向流与面向缓冲
Java NIO和IO之间第一个最大的区别是,IO是面向流的,NIO是面向缓冲区的。 Java IO面向流意味着每次从流中读一个或多个字节,直至读取所有字节,它们没有被缓存在任何地方。此外,它不能前后移动流中的数据。如果需要前后移动从流中读取的数据,需要先将它缓存到一个缓冲区。 Java NIO的缓冲导向方法略有不同。数据读取到一个它稍后处理的缓冲区,需要时可在缓冲区中前后移动。这就增加了处理过程中的灵活性。但是,还需要检查是否该缓冲区中包含所有您需要处理的数据。而且,需确保当更多的数据读入缓冲区时,不要覆盖缓冲区里尚未处理的数据。
阻塞与非阻塞IO
Java IO的各种流是阻塞的。这意味着,当一个线程调用read() 或 write()时,该线程被阻塞,直到有一些数据被读取,或数据完全写入。该线程在此期间不能再干任何事情了。 Java NIO的非阻塞模式,使一个线程从某通道发送请求读取数据,但是它仅能得到目前可用的数据,如果目前没有数据可用时,就什么都不会获取。而不是保持线程阻塞,所以直至数据变的可以读取之前,该线程可以继续做其他的事情。 非阻塞写也是如此。一个线程请求写入一些数据到某通道,但不需要等待它完全写入,这个线程同时可以去做别的事情。 线程通常将非阻塞IO的空闲时间用于在其它通道上执行IO操作,所以一个单独的线程现在可以管理多个输入和输出通道(channel)。
9.ReentrantLock和synchronized
http://wsmajunfeng.iteye.com/blog/1492316