常见面试题总结
Java基础部分
1、StringBuffer和StringBuilder的区别?
StringBuffer属于线程安全,相对为重量级
StringBuilder属于非线程安全,相对为轻量级
2、HashMap与HashTable的区别
a、HashMap线程不安全,HashTable线程安全。
b、HashTable不允许null值(key和value都不可以) ,HashMap允许null值(key和value都可以)。
3、反射的优缺点?
反射:就是正在运行动态读取这个类的完整信息。
优点:java的反射机制就是增加程序的灵活性、
缺点:缺点:(1)性能问题:使用反射基本上是一种解释操作,
用于字段和方法接入时要远慢于直接代码。因此反射机制主要应用在对灵活性和扩展性要求很高的系统框架上,普通程序不建议使用。
(2)使用反射会模糊程序内内部逻辑:程序员希望在源代码中看到程序的逻辑,反射等绕过了源代码的技术,因而会带来维护问题。反射代码比相应的直接代码更复杂。
4、那些地方用到了反射?
jdbc连接、常用框架、spring ioc、jsp:useBean等。
5、什么是sql注入,如何防止?
sql注入:就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。
简单说就是sql拼接。
如何防御:a:删除用户输入内容中的所有连字符
b:对于用来执行查询的数据库帐户,限制其权限。用不同的用户帐户执行查询、插入、更新、删除操作。由于隔离了不同帐户可执行的操作
c: 用存储过程来执行所有的查询。SQL参数的传递方式将防止攻击者利用单引号和连字符实施攻击
d:查用户输入的合法性,确信输入的内容只包含合法的数据
6、sql如何优化?
a:要显示什么字段, 就查询什么字段
b: 建立索引
c:减少对表的查询
d:分表分库
7、多线程了解吗? 什么是多线程、 什么是线程安全? 如何解决?
多线程: 在一个应用程序中,同时,有多个不同的执行路径。
线程安全:就是在多个线程共享同一个数据会受到其他线程的干扰。
如何解决: 使用线程同步技术, 用上锁。 让一个线程执行完了,在让另一个线程执行。
8、list、set、map?
list、set都是Collection, map 是map接口下。
list是一个有序的集合允许、set是一个无序不允许重复、map是一个有序,键值对集合。
9、string与stringBuffer区别?
如果做字符扩展,就用stringBuffer。
10、栈和堆的区别?
如果是new对象都分配在堆里面,栈存放基本类型的数据。
11、如何创建一个线程?有几种方法?
继承thread类, 重写run方法、实现Runnalbe接口,重新run方法 , 启动一个线程用start();
12、说一下你了解的设计模式?
了解设计模式、 工厂 、单例、 代理、观察者等。
13、什么是单例? 单例有几种写法?
单例: 就是保证一个类只能有一个实例。 有两种写法 , 一种是懒汉是、 一种是俄汗式。
14、重载与重写区别?
重载是同一个类中,方法名称相同, 但是参数或个数不同。与返回值没有关系。
重写是在多个类中, 产生继承关系。父类与子类的方法方法必须相同。
15、接口与抽象类的区别?
区别:定义接口的关键字是:interface 而定义抽象类的关键字是:abstract。
接口中不能有私有, 抽象类可以。
接口中定义的成员, 是finl public static 类型, 抽象类没有。
接口中的不能有普通方法, 抽象类中可以。
相同:
两个都不new
xml与json的区别?
(1).XML的优缺点
<1>.XML的优点
A.格式统一,符合标准;
B.容易与其他系统进行远程交互,数据共享比较方便。
<2>.XML的缺点
A.XML文件庞大,文件格式复杂,传输占带宽;
B.服务器端和客户端都需要花费大量代码来解析XML,导致服务器端和客户端代码变得异常复杂且不易维护;
C.客户端不同浏览器之间解析XML的方式不一致,需要重复编写很多代码;
D.服务器端和客户端解析XML花费较多的资源和时间。
(2).JSON的优缺点
<1>.JSON的优点:
A.数据格式比较简单,易于读写,格式都是压缩的,占用带宽小;
B.易于解析,客户端JavaScript可以简单的通过eval()进行JSON数据的读取;
C.支持多种语言,包括ActionScript, C, C#, ColdFusion, Java, JavaScript, Perl, PHP, Python, Ruby等服务器端语言,便于服务器端的解析;
D.在PHP世界,已经有PHP-JSON和JSON-PHP出现了,偏于PHP序列化后的程序直接调用,PHP服务器端的对象、数组等能直接生成JSON格式,便于客户端的访问提取;
E.因为JSON格式能直接为服务器端代码使用,大大简化了服务器端和客户端的代码开发量,且完成任务不变,并且易于维护。
<2>.JSON的缺点
A.没有XML格式这么推广的深入人心和喜用广泛,没有XML那么通用性;
B.JSON格式目前在Web Service中推广还属于初级阶段。
16、servlet线程安全吗?为什么?
不是线程安全的,因为它采用多线程方式运行其service方法.也就是说,当多个用户并发访问的时候,可能存在线程交互的问题.
17、你对http无状态协议怎么理解?
无状态是指,当浏览器发送请求给服务器的时候,服务器响应,但是同一个浏览器再发送请求给服务器的时候,他会响应,但是他不知道你就是刚才那个浏览器,简单地说,就是服务器不会去记得你,所以是无状态协议。
18、类的生命周期?
1、因为new用到了preson.class ,所以会找到preson.class文件
2、执行该类中的static代码快,如果有的话给person.class进行初始化。
3、在堆内存中开辟空间,分配内存地址。
4、在堆内存中建立对象的特有属性,并进行默认默认初始化
5、对属性进行显示初始化
6、对对象进行构造代码块初始化
7、对对象进行对应的构造函数初始化
8、将内存地址赋给栈内存中的p变量
二、框架部分
说一下orm与jdbc的区别?
hibernate的懒加载? 有几种禁用方法
说说hibernate?
hibernate load与get区别?
get不支持延迟加载,load支持延迟加载
hibernate的三种状态?
Hibernate三种状态之一:临时状态(Transient):用new创建的对象,它没有持久化,没有处于Session中,处于此状态的对象叫临时对象;
Hibernate三种状态之二:持久化状态(Persistent):已经持久化,加入到了Session缓存中。如通过hibernate语句保存的对象。处于此状态的对象叫持久对象;
Hibernate三种状态之三:游离状态(Detached):持久化对象脱离了Session的对象。如Session缓存被清空的对象。特点:已经持久化,但不在Session缓存中。处于此状态的对象叫游离对象;
hibernate有几种查询方式?
支持条件查询,连接查询,分页查询,分组查询,内置函数和自定义函数查询(SUN(),MIN(),MAX()),子查询
简述一下 hibernate的优缺点?
如何优化hibernate?
1.使用双向一对多关联,不使用单向一对多
2.灵活使用单向一对多关联
3.不用一对一,用多对一取代
4.配置对象缓存,不使用集合缓存
5.一对多集合使用Bag,多对多集合使用Set
6.继承类使用显式多态
7.表字段要少,表关联不要怕多,有二级缓存撑腰
mybatis与hibernate区别?
mybatis如何动态sql?
MyBatis的动态SQL是基于OGNL表达式的,它可以帮助我们方便的在SQL语句中实现某些逻辑。
MyBatis中用于实现动态SQL的元素主要有:
说一下spring?
简述spring的优缺点?
说springioc、spring aop?
spring有几种注入方式?
什么是java的序列化?
简单说就是为了保存在内存中的各种对象的状态(也就是实例变量,不是方法),并且可以把保存的对象状态再读出来。虽然你可以用你自己的各种各样的方法来保 存object states,但是Java给你提供一种应该比你自己好的保存对象状态的机制,那就是序列化。
简单来说 序列化就是把Java对象储存在某一地方(硬盘、网络),以便于传输
前端面试题
html与html5的区别?
什么是jquery? jquery的选择器有几种?
springmvc、struts2、servet
拦截器与过滤器的区别?
1、拦截器是基于java的反射机制的,而过滤器是基于函数回调
2、过滤器依赖与servlet容器,而拦截器不依赖与servlet容器
3、拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用
4、拦截器可以访问action上下文、值栈里的对象,而过滤器不能
5、在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次
拦截器与AOP的区别?
aop是一种思想(面向切面编程,在特定的切面做出处理)而不是具体实现,拦截器采用了这种思想--,在执行某个action之前进行增强处理,即检查一下是否合法,在拦截器里控制action的执行等
JVM溢出?
类加载顺序和销毁顺序?
引导类加载器,扩展类加载器,系统类加载器,从左至右尝试加载类,从右至左检查类是否被加载
springmvc的执行流程?
spring的生命周期?
默认情况下为singleton,bean的scope属性可做设置,singleton或prototype为两个可选值,一般来说,只要容器启动后,你的jvm不down,所有的singleton对象实例均存在在其对应的容器中,prototype类型的与你在程序里进行的new操作一致,也就是说,你getBean一次,相当于new一个新对象
spring哪种动态代理
svn遇到代码冲突怎么解决?
为什么会出现代码冲突问题呢,因为不同的人,同时修改了同一个文件的同一个地方,这个时候,他提交了,你没有提交,你就提交不了,这个时候,你要先 更新,更新就会出现代码冲突问题 用svn客户端将冲突的文件全部删除掉,再重新上传