1、简述String和StringBuffer的区别
答案:String是字符串常,StringBuffer是字符创变量
- 简述”==”和 equals 的区别
答案:基本数据类型进行比较时使用”==”,对象进行比较时使用equals
- 简述HashMap 和 Hashtable 的区别
答案:
Hashtable的方法是同步的,而HashMap的方法不是
ashMap允许将null作为一个entry的key或者value,而Hashtable不允许
- 简述List、Map、Set的区别与联系
答案:
List特点:元素有放入顺序,元素可重复
Map特点:元素按键值对存储,无放入顺序
Set特点:元素无放入顺序,元素不可重复
list是用来处理序列的;而set是用来处理集的;Map存储的是键值对
- 简述final, finally, finalize的区别
答案:
final—修饰符(关键字)
如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承
Finally-异常处理时使用
finalize—方法名
Java 技术允许使用 finalize() 方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作
- 简述Collection 和 Collections的区别
答案:
Collections是个java.util下的类,它包含有各种有关集合操作的静态方法。
Collection是个java.util下的接口,它是各种集合结构的父接口。
- 简述静态变量与实例变量的区别
答案:
静态变量前要加 static 关键字,而实例变量前则不加。
实例变量必须创建对象后才可以通过这个对象 来使用,静态变量则可以直接使用类名来引用。
- 简述重写与重载的区别
答案:重载作用在类内部,重写存在于继承关系中
- 简述抽象类与接口的区别
答案:
含有 abstract 修饰符的 class 即为抽象类,abstract 类不能创建的实例对象
接口(interface)可以说成是抽象类的一种特例,接口中的所有方法都必须是抽象的
- 抽象类可以有构造方法,接口中不能有构造方法。
- 抽象类中可以有普通成员变量,接口中没有普通成员变量
- 抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的,不能有非抽象的普通方法。 抽象类中的抽象方法的访问类型可以是 public和protected但接口中的抽象方法只能是 public 类型的,并且默认即为 public abstract 类型。
- 抽象类中可以包含静态方法,接口中不能包含静态方法
- 抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以任意,但接口中定义的变量只能是 public static final 类型,并且默认即为 public static final 类 型。
- 一个类可以实现多个接口,但只能继承一个抽象类。
- 简述多线程的实现方式
答案:继承Thread类、实现Runnable接口
- 简述同步与异步的区别
答案:同步是阻塞模式,异步是非阻塞模式
- 简述运行时异常与一般异常的区别
答案:
异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误。java 编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常
- 简述序列化与反序列化
答案:
把对象转换为字节序列的过程称为对象的序列化。
把字节序列恢复为对象的过程称为对象的反序列化。
对对象进行序列化后,便于在网络上进行传输,便于在磁盘上进行存取。
- 简述java反射机制
答案:JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性。
- 简述java的I/O流程
答案:
根据处理数据类型的不同分为:字符流和字节流
根据数据流向不同分为:输入流和输出流
Jdk提供的流继承了四大类:InputStream(字节输入流),OutputStream(字节输出流),Reader(字符输入流),Writer(字符输出流)。
- GC 是什么?为什么要有 GC?
答案:
GC 即垃圾回收
Java有了GC,就不需要程序员去人工释放内存空间。当Java虚拟机发觉内存资源紧张的时候,就会自动地去清理无用变量所占用的内存空间。当然,如果需要,程序员可以在Java程序中显式地使用System.gc()来强制进行一次立即的内存清理。
- 列举线程池类型,简述线程池使用的场景
答案:
newFixedThreadPool创建一个指定工作线程数量的线程池
newCachedThreadPool创建一个可缓存的线程池newSingleThreadExecutor创建一个单线程化的Executor,即只创建唯一的工作者线程来执行任务,如果这个线程异常结束,会有另一个取代它,保证顺序执行
newScheduleThreadPool创建一个定长的线程池,而且支持定时的以及周期性的任务执行,类似于Timer
需要频繁创建现时使用线程池,避免由于频繁的创建、销毁现成造成的性能影响。
- 简述对mvc框架的理解
答案:
MVC是 Model-View-Controller的简写。
Model 代表的是应用的业务逻辑
View 是应用的表示面
Controller是提供应用的处理过程控制
通过这种设计模型把应用逻辑,处理过程和显示逻辑分成不同的组件实现,这些组件可以进行交互和重用。
- 简述spring框架的特点
答案:
依赖注入、面向切面变成、事物控制等
- Spring 中bean的作用域有哪些
答案:singleton(单例)、Prototype、request、session
- 简述依赖注入,列举spring依赖注入的实现方式
答案:
IOC,婚姻介绍所,解耦合
构造器注入、set注入、注解
- 简述对srping事物的理解
答案:
事物的特点:原子性、一致性、隔离性、持久性
事物参数:传播行为、隔离级别、只读、事物超时、回滚规则
23、简述对spring mvc框架的理解
答案:
1、客户端发出一个http请求给web服务器,web服务器对http请求进行解析,如果匹配DispatcherServlet的请求映射路径(在web.xml中指定),web容器将请求转交给DispatcherServlet.
2、DipatcherServlet接收到这个请求之后将根据请求的信息(包括URL、Http方法、请求报文头和请求参数Cookie等)以及HandlerMapping的配置找到处理请求的处理器(Handler)。
3、DispatcherServlet根据HandlerMapping找到对应的Handler,将处理权交给Handler(Handler将具体的处理进行封装),再由具体的HandlerAdapter对Handler进行具体的调用。
4、Handler对数据处理完成以后将返回一个ModelAndView()对象给DispatcherServlet。
5、Handler返回的ModelAndView()只是一个逻辑视图并不是一个正式的视图,DispatcherSevlet通过ViewResolver将逻辑视图转化为真正的视图View。
6、Dispatcher通过model解析出ModelAndView()中的参数进行解析最终展现出完整的view并返回给客户端。
说出DispatcherServlet、HandlerMapping、Handler、视图解析器即可
24、简述对ORM的理解,列举其对应的框架有哪些
答案:
ORM即对象关系映射
对应的框架包括:ibatis、mybatis、hibernate等
25、简述对数据库连接池的理解
答案:
数据库连接池初始化时,将创建一定数量的数据库连接放到连接池中,用户需要访问数据库时,并非建立一个新的连接,而是从连接池中取出一个已建立的空闲连接对象。使用完毕后,用户也并非将连接关闭,而是将连接放回连接池中,以供下一个请求访问使用。当数据库连接池中的可用连接数为0时,连接池每次新增一定数量的连接放入连接池。
26、简述数据库中索引的作用,列举索引的使用原则
答案:
索引的作用是提升对表中某个字段的查询速度,索引不是越多越好
索引的使用规则
- where子句中如果使用in、or、like、!= <>,均会导致索引不能正常使用,将”<>”换成”>and<“;将”is not null “换成”>=chr(0)”
- 使用函数时,该列就不能使用索引
3.比较不匹配数据类型时,该索引将会被忽略
27、列举sql性能优化方法
答案:
SELECT子句中避免使用’*’
用Where子句替换HAVING子句
使用表的别名(Alias)
用EXISTS替代IN
用EXISTS替代IN
用表连接替换EXISTS
用EXISTS替换DISTINCT
用索引提高效率
避免在索引列上使用计算
- 简述对集群、负载均衡、分布式的理解
答案:
集群(Cluster):是一组独立的计算机系统构成一个松耦合的多处理器系统,它们之间通过网络实现进程间的通信。
负载均衡(Load Balance):是集群的一种实现方式。
分布式是指将不同的业务分布在不同的地方。
集群指的是将几台服务器集中在一起,实现同一业务。
分布式中的每一个节点,都可以做集群。
而集群并不一定就是分布式的。