Java整理(四)

1.什么是反射

 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法,对于任意一个对象,都能够调用它的任意一个方法和属性,这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。

2.什么是 java 序列化?什么情况下需要序列化?

  • 序列化:将 Java 对象转换成字节流的过程。
  • 反序列化:将字节流转换成 Java 对象的过程。
  • 当 Java 对象需要在网络上传输 或者 持久化存储到文件中时,就需要对 Java 对象进行序列化处理。

3.动态代理是什么?有哪些应用?

  • 动态代理:在运行时,创建目标类,可以调用和扩展目标类的方法。
  • Spring的AOP,加事务,加权限,加日志。

4.怎么实现动态代理?

  • JDK 动态代理
  • CGLib 动态代理
  • 使用 Spring aop 模块完成动态代理功能

参考:动态代理的两种实现方式

5.为什么要使用克隆?如何实现对象克隆?深拷贝和浅拷贝区别是什么?

想对一个对象进行处理,又想保留原有的数据,就需要克隆了。java中的克隆,针对的是类的实例。

参考:对象克隆

6.jsp 和 servlet 有什么区别?

  • Servlet 适合动态输出 Web 数据和业务逻辑处理,对于 html 页面内容的修改非常不方便;Jsp 是在 Html 代码中嵌入 Java 代码,适合页面的显示
  • 内置对象不同,获取内置对象的方式不同

7.jsp 有哪些内置对象?作用分别是什么?

  • Page指的是JSP被翻译成Servlet的对象的引用.
  • pageContext对象可以用来获得其他8个内置对象,还可以作为JSP的域范围对象使用.pageContext中存的值是当前的页面的作用范围》
  • request代表的是请求对象,可以用于获得客户机的信息,也可以作为域对象来使用,使用request保存的数据在一次请求范围内有效。
  • Session代表的是一次会话,可以用于保存用户的私有的信息,也可以作为域对象使用,使用session保存的数据在一次会话范围有效
  • Application:代表整个应用范围,使用这个对象保存的数据在整个web应用中都有效。
  • Response是响应对象,代表的是从服务器向浏览器响应数据.
  • Out:JSPWriter是用于向页面输出内容的对象
  • Config:指的是ServletConfig用于JSP翻译成Servlet后 获得Servlet的配置的对象.
  • Exception:在页面中设置isErrorPage=”true”,即可使用,是Throwable的引用.用来获得页面的错误信息。

8.说一下 jsp 的 4 种作用域?

  • page 当前页面作用域
  • request 请求作用域    
  • session 会话作用域
  • application全局作用域  

参考:jsp 的 4 种作用域?

9.session 和 cookie 有什么区别?

  • session是存储在服务器端的,cookie是存储在客户端的,所以session的安全性要高于cookie。
  • 再者,我们获取的session里的信息是通过存放在会话cookie里的sessionId获取的
  • 因为session是存放在服务器里的,所以session里的东西不断增加会增加服务器的负担,我们会把一些重要的东西放在session里,不太重要的放在客户端cookie里
  • cookie分为两大类,一个是会话cookie和持久化cookie,他们的生命周期和浏览器是一致的,浏览器关了会话cooki也就消失了,而持久化会存储在客户端硬盘中。
  • 当浏览器关闭的时候回话cookie也就消失所以我们的session也就消失了,session在什么情况下丢失,就是在服务器关闭的时候,或者是session过期(30分钟默认)。

10.说一下 session 的工作原理?

参考:session的工作原理

11.如果客户端禁止 cookie 能实现 session 还能用吗?

  • 通过url重写,把 sessionid 作为参数追加的原 url 中,后续的浏览器与服务器交互中携带 sessionid 参数。
  • 服务器的返回数据中包含 sessionid,浏览器发送请求时,携带 sessionid 参数。
  • 通过 Http 协议其他 header 字段,服务器每次返回时设置该 header 字段信息,浏览器中 js 读取该 header 字段,请求服务器时,js设置携带该 header 字段。

12.spring mvc 和 struts 的区别是什么?

  • spring mvc 和 struts2的加载机制不同:spring mvc的入口是servlet,而struts2是filter
  • Struts2框架是类级别的拦截,每次请求就会创建一个Action,Action对应一个request,response上下文,在接收参数时,可以通过属性接收,这说明属性参数是让多个方法共享的。
  • SpringMVC是方法级别的拦截,一个方法对应一个Request上下文,所以方法直接基本上是独立的,独享request,response数据。而每个方法同时又何一个url对应,参数的传递是直接注入到方法中的,是方法所独有的。处理结果通过ModeMap返回给框架。
  • Struts2有自己的拦截Interceptor机制,SpringMVC这是用的是独立的Aop方式,这样导致Struts2的配置文件量还是比SpringMVC大。

参考:SpringMVC与Struts2区别与比较总结

13.如何避免 sql 注入?

  • PreparedStatement 采用预编译语句集,它内置了处理SQL注入的能力,只要使用它的setXXX方法传值即可。
  • 使用正则表达式过滤传入的参数
  • 不要使用动态SQL

14.什么是 XSS 攻击,如何避免?

XSS 攻击,即跨站脚本攻击(Cross Site Scripting),它是 web 程序中常见的漏洞。 

  • web 页面中可由用户输入的地方,如果对输入的数据转义、过滤处理
  • 后台输出页面的时候,也需要对输出内容进行转义、过滤处理(因为攻击者可能通过其他方式把恶意脚本写入数据库)
  • 前端对 html 标签属性、css 属性赋值的地方进行校验

15.什么是 CSRF 攻击,如何避免?

CSRF:Cross Site Request Forgery(跨站点请求伪造)。CSRF 攻击者在用户已经登录目标网站之后,诱使用户访问一个攻击页面,利用目标网站对用户的信任,以用户身份在攻击页面对目标网站发起伪造用户操作的请求,达到攻击目的。

  • CSRF 漏洞进行检测的工具,如 CSRFTester、CSRF Request Builder...
  • 验证 HTTP Referer 字段
  • 添加并验证 token
  • 添加自定义 http 请求头
  • 敏感操作添加验证码
  • 使用 post 请求

16.http 响应码 301 和 302 代表的是什么?有什么区别?

  • 301 表示被请求 url 永久转移到新的 url;302 表示被请求 url 临时转移到新的 url。
  • 301 搜索引擎会索引新 url 和新 url 页面的内容;302 搜索引擎可能会索引旧 url 和 新 url 的页面内容。

17.forward 和 redirect 的区别?

参考forward和redirect的区别是什么?

18.简述 tcp 和 udp的区别?

  • TCP是面向连接的通讯协议,通过三次握手建立连接,通讯完成时四次挥手
  • 优点:TCP在数据传输过程中,有保证数据可靠传输的机制,较为可靠。
  • 缺点:TCP相对于UDP传输速度慢,要求系统资源较多。
  • UDP是面向无连接的通讯协议,UDP数据包括目的端口号和源端口号信息。
  • 优点:UDP速度快、操作简单、要求系统资源较少,由于通讯不需要连接,可以实现广播发送。
  • 缺点:UDP传输数据前不与对方建立连接,对接收到的数据也不发送确认信号,发送端不知道数据是否会正确接收,没有保证数据可靠传输的机制。

19.tcp 为什么要三次握手,两次不行吗?为什么?

  •  两次握手只能保证单向连接是畅通的。
  • 只有经过第三次握手,才能确保双向都可以接收到对方的发送的 数据。

19.说一下 tcp 粘包是怎么产生的?

  • 发送方发送的多个数据包,到接收方缓冲区首尾相连,粘成一包,被接收。
  • TCP 协议默认使用 Nagle 算法可能会把多个数据包一次发送到接收方。
  • 应用程读取缓存中的数据包的速度小于接收数据包的速度,缓存中的多个数据包会被应用程序当成一个包一次读取。

参考:tcp 粘包是怎么产生的?

20.OSI 的七层模型都有哪些?

OSI模型分为七层,自下而上为 物理层(Physical Layer)、数据链路层(Data Link Layer)、网络层(Network Layer)、传输层(Transport Layer)、会话层(Session Layer)、表达层(Presentation Layer)、应用层(Application Layer)。

21.get 和 post 请求有哪些区别?

1、 get是从服务器上获取数据,post是向服务器传送数据。
2、 get请求时通过URL直接请求数据,数据信息可以在URL中直接看到,比如浏览器访问;而post请求是放在请求头中的,用户无法直接看到。
3、 get传送的数据量较小,有限制,不能大于2KB;这主要是因为它受约于URL长度的限制。post传送的数据量较大,一般被默认为不受限制,但理论上,IIS4中最大量为80KB,IIS5中为100KB。
4、get请求因为数据参数是暴露在URL中的,所以安全性比较低,如密码不能暴露的就不能用get请求;post请求中,请求信息是放在请求头的,安全性较高,可以使用。
5、Get限制From表单的数据集的值必须为ASCLL字符,而Post支持整个ISO10646字符集。

22.如何实现跨域?

1、jsonp
利用了 script 不受同源策略的限制
缺点:只能 get 方式,易受到 XSS攻击
2、CORS(Cross-Origin Resource Sharing),跨域资源共享
当使用XMLHttpRequest发送请求时,如果浏览器发现违反了同源策略就会自动加上一个请求头 origin;
后端在接受到请求后确定响应后会在后端在接受到请求后确定响应后会在 Response Headers 中加入一个属性 Access-Control-Allow-Origin;
浏览器判断响应中的 Access-Control-Allow-Origin 值是否和当前的地址相同,匹配成功后才继续响应处理,否则报错
缺点:忽略 cookie,浏览器版本有一定要求
3、代理跨域请求
前端向发送请求,经过代理,请求需要的服务器资源
缺点:需要额外的代理服务器
4、Html5 postMessage 方法
允许来自不同源的脚本采用异步方式进行有限的通信,可以实现跨文本、多窗口、跨域消息传递
缺点:浏览器版本要求,部分浏览器要配置放开跨域限制
5、修改 document.domain 跨子域
相同主域名下的不同子域名资源,设置 document.domain 为 相同的一级域名
缺点:同一一级域名;相同协议;相同端口
6、基于 Html5 websocket 协议
websocket 是 Html5 一种新的协议,基于该协议可以做到浏览器与服务器全双工通信,允许跨域请求
缺点:浏览器一定版本要求,服务器需要支持 websocket 协议
7、document.xxx + iframe
通过 iframe 是浏览器非同源标签,加载内容中转,传到当前页面的属性中
缺点:页面的属性值有大小限制
23.说一下 JSONP 实现原理?

创建一个回调函数,然后在远程服务上调用这个函数并且将JSON 数据形式作为参数传递,完成回调。

参考:彻底弄懂jsonp原理及实现方法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值