1.oracle如何实现读写分离
(1)基于RAC架构的,使用其中某个节点作为读库;
(2)基于Streams数据复制技术的,实时将数据复制到另外一个库供读取;
(3)使用第三方数据复制软件的,如Golden Gate(已经被Oracle收入囊中)、DSG的,也是实时复制数据到另外一个库中。
(4)使用Logical standby技术,实时复制数据到一个库,且该库是对应用而言是只读的。
2.说说你对排它锁,读写锁的理解
(1)排它锁,也称作独占锁,一个锁在某一时刻只能被一个线程占有,其它线程必须等待锁被释放之后才可能获取到锁。
(2)读写锁拆成读锁和写锁来理解。读锁可以共享,多个线程可以同时拥有读锁,但是写锁却只能只有一个线程拥有,而且获取写锁
3.线程池用过吗?newcachedThreadPool在使用过程中有什么需要注意的吗
创建一个可缓存的线程池。如果线程池的大小超过了处理任务所需要的线程,那么就会回收部分空闲(60秒不执行任务)的线程,当任务数增加时,此线程池又可以智能的添加新线程来处理任务。此线程池不会对线程池大小做限制,线程池大小完全依赖于操作系统(或者说JVM)能够创建的最大线程大小。
4.谈谈你对分布式的理解
分布式就是把一个需要非常巨大的计算能力才能解决的问题分成许多小的部分,然后把这些部分分配给许多计算机进行处理,最后把这些计算结果综合起来得到最终的结果。
5.js写的怎么样,js是怎样实现继承的
js常用的继承方法有:原型链、借用构造函数、组合继承、原型式继承、寄生式继承、寄生组合式继承。
6.struts Filter和拦截器有什么区别
拦截器是基于java的反射机制的,而过滤器是基于函数回调。
拦截器不依赖与servlet容器,过滤器依赖与servlet容器。
拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用。
拦截器可以访问action上下文、值栈里的对象,而过滤器不能访问。
在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次
7.抽象工厂方法和工厂方法区别是什么
工厂方法 :用来生产同一等级结构中的固定产品。(支持增加任意产品)
抽象工厂 :用来生产不同产品族的全部产品。(对于增加新的产品,无能为力;支持增加产品族)
8.说说你对ThreadLocal的理解
(1)每个线程都有自己的局部变量
每个线程都有一个独立于其他线程的上下文来保存这个变量,一个线程的本地变量对其他线程是不可见的(有前提,后面解释)
(2)独立于变量的初始化副本
ThreadLocal可以给一个初始值,而每个线程都会获得这个初始化值的一个副本,这样才能保证不同的线程都有一份拷贝。
(3)状态与某一个线程相关联
ThreadLocal 不是用于解决共享变量的问题的,不是为了协调线程同步而存在,而是为了方便每个线程处理自己的状态而引入的一个机制,理解这点对正确使用ThreadLocal至关重要。
9.http协议,put用过吗?讲讲,如何使用http协议传送多个文件
(1)在form中设置多个文件输入框,用数组命名他们的名字
(2)在form中设置多个文件输入框,但名字不同
10.可重入锁与syncronized区别() 完美世界
ReentrantLock除了synchronized的功能,多了三个高级功能.
等待可中断,公平锁,绑定多个Condition.
(1)等待可中断
在持有锁的线程长时间不释放锁的时候,等待的线程可以选择放弃等待. tryLock(long timeout, TimeUnit unit)
(2)公平锁
按照申请锁的顺序来一次获得锁称为公平锁.synchronized的是非公平锁,ReentrantLock可以通过构造函数实现公平锁. new RenentrantLock(boolean fair)
(3)绑定多个Condition
通过多次newCondition可以获得多个Condition对象,可以简单的实现比较复杂的线程同步的功能.通过await(),signal();