额,第一次面试,自己知识库还没有补充足,果然面完整个人都感觉不好了,这里会议起面试的问题,并贴出总结的答案,如果有哪里理解的不对,欢迎指正。
1.线程安全的队列
java提供线程安全的队列,主要分两种:阻塞队列(接口 BlockingQueue)和非阻塞队列(类ConcurrentLinkedQueue)
阻塞队列就是提供阻塞操作,当操作失败时阻塞线程(ReentrantLock),直到满足操作条件时操作。BlockingQueue 的实现类:ArrayBlockingQueue、DelayQueue、LinkedBlockingQueue、PriorityBlockingQueue、SynchronousQueue。
非阻塞队列就是提供非阻塞的操作,通过volatile实现原子性操作,实现类ConcurrentLinkedQueue,继承BlockingQueue
2.Java List Map你知道哪些
Collection(Collection是最基本的集合接口)
├List(List是一种有序集合,跟Set集合不同的是,List允许有重复元素。)
│├LinkedList(链表实现List,不同步)
│├ArrayList(数组实习List,不同步)
│└Vector(类似ArrayList,同步)
│ └Stack(栈)
└Set(不能有重复元素)
Map
├Hashtable(不允许为null,同步)
├HashMap(允许为null,不同步)
└WeakHashMap
3.数据库连接池
对于一个复杂的数据库应用,情况就完全不同了。频繁的建立、关闭连接,会极大的减低系统的性能,因为对于连接的使用成了系统性能的瓶颈。
外部使用者可通过getConnection 方法获取连接,使用完毕后再通过releaseConnection方法将连接返回,注意此时连接并没有关闭,而是由连接池管理器回收,并为下一次使用做好准备。
资源重用、更快的系统响应速度、新的资源分配手段、统一的连接管理,避免数据库连接泄漏
4.线程同步实现
同步方法 :synchronized修饰
同步代码块 :synchronized修饰
volatile实现
重入锁:ReentrantLock,有lock()、unlock()方法实现同步
线程阻塞:BlockingQueue接口
5.spring mvc与struts2
Struts2是一个请求一个Action,SpringMVC是单例模式的
Struts2是基于类的横切,SpringMVC基于方法(可以和上条结合起来思考)粒度更细
一个入口是Filter,一个入口是Servlet。则两者个方面机制不同,比如拦截器实现机制
SpringMVC开发速度和性能较优于Struts2,流程更容易理解
Spring体系更加强大和活跃