java面试
1.HashMap是无序的,treemap和LinkedHashMap是有序的;treemap实现sortedmap接口,根据元素key值进行排序;LinkedHashMap是在map内部又放了一个链表,存放元素顺序,LinkedHashMap 是根据元素增加或者访问的先后顺序进行排序。Hashtable不予许key或value为空。
2.所有的线程一起等待某个事件的发生,当某个事件发生时,所有线程一起开始往下执行(栅栏):
在CyclicBarrier的内部定义了一个Lock对象,每当一个线程调用CyclicBarrier的await方法时,将剩余拦截的线程数减1,然后判断剩余拦截数是否为0,如果不是,进入Lock对象的条件队列等待。如果是,执行barrierAction对象的Runnable方法,然后将锁的条件队列中的所有线程放入锁等待队列中,这些线程会依次的获取锁、释放锁,接着先从await方法返回,再从CyclicBarrier的await方法中返回。
3. NIO的核心是IO线程池:
ava NIO(New IO)是一个可以替代标准Java IO API的IO API(从Java 1.4开始),Java NIO提供了与标准IO不同的IO工作方式。
Java NIO: Channels and Buffers(通道和缓冲区)
标准的IO基于字节流和字符流进行操作的,而NIO是基于通道(Channel)和缓冲区(Buffer)进行操作,数据总是从通道读取到缓冲区中,或者从缓冲区写入到通道中。
Java NIO: Non-blocking IO(非阻塞IO)
Java NIO可以让你非阻塞的使用IO,例如:当线程从通道读取数据到缓冲区时,线程还是可以进行其他事情。当数据被写入到缓冲区时,线程可以继续处理它。从缓冲区写入通道也类似。
Java NIO: Selectors(选择器)
Java NIO引入了选择器的概念,选择器用于监听多个通道的事件(比如:连接打开,数据到达)。因此,单个的线程可以监听多个数据通道。
4. 通过对java的io系列类分析得知,java的io流使用了设计模式中的装饰模式,以动态的给一个对象增加职责,能够更加灵活的增加功能。通过看io的源代码得知FilterOutputStream类继承了OutputStream类并拥有父类的一个对象,它和父类具有组合聚合的关系。因此要实现我们自己的加密类只需扩展FilterOutputStream类重写它的wite方法即可
5. Java的虚拟机的内容。这部分主要包括三部分,GC、类加载机制,以及内存
6. 在使用控制反转的情况下,业务逻辑的流程是由对象关系图来决定的,该对象关系图由装配器负责实例化,这种实现方式还可以将对象之间的关联关系的定义抽象化。而绑定的过程是通过“依赖注入”实现的。所以依赖注入是控制反转的基础:
- 构造器注入
- Setter方法注入
- 接口注入
7.ioc的基础是beans包和context包;beanfactory是ioc的核心接口;beanfactory提供了一个配置机制,是任何对象的配置都成为可能,applicationcontext是对其的一个扩展,比如与aop更容易集成,也提供了message resource(国际化),事务传播以及应用层的配置;beanfactory是bean工厂,在接收到客户端请求时将其实例化,包括生命周期(初始化方法和销毁方法)applicationcontext提供了国际化文本,统一资源文件读取,在监听器中注册bean事件,实现方式:ClassPathXmlApplicationContext、FileSystemXmlApplicationContext,XmlWebApplicationContext。
8、spring的配置:基于xml,基于注解,基于java
9. Spring有以下主要的命名空间:context、beans、jdbc、tx、aop、mvc和aso
@required@autowired@qualifier@resource@postconstruct@predistory
10.beanfactory负责bean的生命周期:初始化之后和销毁之前都调用回调方法
11.bean的作用域:默认singleton单例,不管多少请求保证只有一个bean实例;prototype(原型),一个请求一个bean; request每一个客户端;Session;global-session
12.注入集合<list><set><map><props>(key,value都是字符串)
13.spring的单例使用threadlocal保证数据隔离,线程安全,他的key是线程的id,相当于一个map
14.用户发送请求到DispatcherServlet,servlet交于handlemapping处理,根据配置和注解找到调用HandlerAdapter处理,调用具体的处理器handle(control)执行返回modelandview, HandlerAdapter将modelandview交给servlet,servlet传给ViewReslover,解析后返回具体的view,servlet对view进行渲染,响应用户。
15.多线程:一个进程不止一个线程;并行:多个处理器,真正的同时;并发:cpu 的切换
16.线程池: newCachedThreadPool(长度超出需要可灵活回收,无回收则新建); newFixedThreadPool(固定长度,超出在队列中等待); newScheduledThreadPool(定期周期性任务的执行);newSingleThreadExecutor(一个单线程化的线程池,它只会用唯一的工作线程来执行任务,如时间的timer定时执行)
17.为什么要使用包装类型?
基本类型并不具有对象的性质,使得它具有了对象的性质,并且为其添加了属性和方法,丰富了基本类型的操作。基本类型的初始值如int为0,boolean为false,而包装类型的初始值为null;基本类型直接赋值直接使用就好,而包装类型在集合如Collection、Map时会使用到。基本类型是直接将变量值存储在栈中,而包装类型是将对象放在堆中,然后通过引用来使用;基本类型不使用new关键字,而包装类型需要使用new关键字来在堆中分配存储空间;

浙公网安备 33010602011771号