Java面试题p4
克隆
克隆的对象可能包含一些已经修改过的属性,而new出来的对象的属性都还是初始化时的值,所以需要一个新的对象来保存当前对象的“状态”就靠克隆了
实现对象克隆
实现Cloneable接口并重写Object类中的clone()方法
实现Serializable接口,通过对象的序列化和反序列化实现克隆,是真正的深度克隆
深拷贝和浅拷贝
- 浅克隆:当对象被复制时,只复制它本身和其中包含的值的类型的成员变量,而引用类型的成员对象并没有复制
- 深克隆:除了对象本身被复制外,对象所包含的所有成员变量也将复制
JSP和Servlet区别
JSP是servlet技术的扩展,本质是servlet的简易方式
servlet和JSP不同点:
- servlet的应用逻辑在Java文件中,并且完全从表示层中的html里分离开来;JSP是Java和html可以组合成一个扩展名为JSP的文件。
- JSP侧重于视图,servlet侧重逻辑控制
session和cookie的区别
| session | cookie | |
|---|---|---|
| 存储位置 | 服务器端 | 浏览器端 |
| 安全性 | 一般,在浏览器端,可以被伪造和篡改 | |
| 容量和个数限制 | 有容量限制,每个站点下有个数限制 | |
| 存储多样性 | Redis、数据库、应用程序中 | 只在浏览器 |
存储位置不同:session存储在服务器端;cookie存储在浏览器端
安全性不同:cookie安全性一般,在浏览器存储,可以被伪造和修改
容量和个数限制:cookie有容量限制,每个站点下的cookie也有个数限制
存储的多样性:session可以存储在Redis、数据库、应用程序中;cookie只能存储在浏览器中
session的工作原理
session的工作原理是客户端登录完成之后,服务器会创建对应的session,session创建完后,会把session的id发给客户端,客户端再存储到浏览器中,这样客户端每次访问服务器时,都会带着sessionid。服务器拿到sessionid后,在内存中找到与之对应的session,这样就可以正常工作了
客户端禁止cookie,session还可用吗
可以用,session只是依赖cookie存储sessionid,若cookie被禁用了,可以使用url中添加sessionid的方式保证session正常使用
spring mvc和strus区别
拦截级别:struts2是类级别的拦截;spring mvc是方法级别的拦截
数据独立性:spring mvc 的方法之间基本上是独立的,独享request和response数据,请求数据通过参数获取,处理结果通过ModelMap交回给框架,方法之间不共享变量;
struts2虽然方法之间也是独立的,但其所有action变量是共享的,这不会影响程序运行。会给编程和读程序带来麻烦
拦截机制:struts2有自己inceptor机制,spring mvc 用的是独立的aop方式。stuts2的配置文件的量比spring mvc大
对 ajax的支持:spring mvc 集成了ajax,使用方便,@ResponseBody实现;struts2一般安装插件或者自己写代码实现
避免SQL注入
- 使用预处理PreparedStatement
- 使用正则表达式过滤字符中的特殊字符
xss攻击,如何避免
XSS攻击:即->跨站脚本攻击,它是Web中常见的漏洞。原理是攻击者往Web页面插入恶意的脚本代码(css代码、Javascript代码等),当用户浏览该页面时,嵌入其中的脚本代码就会执行,从而达到恶意攻击用户的目的。如:盗取用户cookie、破坏页面结构、重定向到其他网站等
CSRF攻击,如何避免
CSRF:跨站请求伪造:攻击者盗用了你的身份,以你的名义发送恶意请求。如:以你的名义发送邮件、发送消息、购买商品、虚拟货币等
防御手段:
- 验证请求来源地址
- 关键操作添加验证码
- 在请求地址添加token验证
throw和throws区别
throw:真实抛出一个异常
throws:声明可能会抛出一个异常
final、finally、finalize区别
final:是修饰符,如果修饰类,此类不能被继承;修饰方法和变量,则表示此方法和变量不能再被改变,只能使用
finally:是try{} catch{} finally{} 最后的一部分,表示无论发生什么情况都会执行,finally部分可以省略,但如果finally部分存在,则一定会执行finally里面的代码
finalize:是Object类的一个方法,用于在对象被垃圾回收器回收之前执行一些清理工作
try{} catch{} finally{},catch中return了,finally是否执行
finally一定会执行,即使catch中return了,catch中的return会等finally中的代码执行完后才执行
常见的异常类
NullPointerException 空指针异常
ClassNotFoundException 指定类不存在
NumberFormartException 字符串转换为数字异常
IndexOutBoundsException 数组下标越界异常
ClassCastException 数据类型转换异常
FileNotFoundException 文件未找到异常
NoSucnMethodException 方法不存在异常
IOException IO异常
SocketException Socket异常
http301、302响应码
301:永久重定向
302:暂时重定向
forward和redirect区别
| forward | redirect | |
|---|---|---|
| 地址栏URL显示 | 不会改变 | 会改变 |
| 数据共享 | 共享request中的数据 | 不共享 |
| 效率 | 高 | 低 |
地址栏url显示:forward url不会发生改变,redirect url会发生改变
数据共享:forward可以共享request里的数据,redirect不能
效率:forward比redirect高
- 本文标签: Java
- 本文链接: http://119.91.109.247:8443//article/52
- 版权声明: 本文由张亚东原创发布,转载请遵循《署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)》许可协议授权