基础知识点四

4、反射php

57.什么是反射?java

反射机制指的是程序运行状态中,对于任意一个类,都可以知道这个类的属性和方法web

58.什么是 java 序列化?什么状况下须要序列化?正则表达式

序列化是把java对象字节序列,能够对对象进行读写操做;序列化做用:对象能够做为文件永久保存硬盘上;对象能够在网络上传输算法

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

动态代理是给实现了某个接口的类的方法,加一些额外的处理;spring的AOP,加事务,加权限,加日志。sql

60.怎么实现动态代理?数据库

一、原生JDK,必须借助接口才能产生代理对象;二、CGLIB动态代理,不须要接口apache

5、对象拷贝json

61.为何要使用克隆?

想对一个对象进行处理,又想保留原有的数据进行接下来的操做

62.如何实现对象克隆?

两种方式:一、实现Cloneable接口并重写object类中的clone()方法;二、实现Serializable接口,经过对象的序列化和反序列化实现克隆,能够实现真正的深度克隆。

63.深拷贝和浅拷贝区别是什么?

浅拷贝只是复制了对象的引用地址,两个对象指向同一内存地址,因此其中一个改变值,另外一个也相应改变;

深拷贝是将对象及值复制过来,修改其中一个,另外一个值不会变。

6、Java Web

64.jsp 和 servlet 有什么区别?

一、jsp编译后变成servlet;二、jsp更擅长于页面显示,servlet更擅长于逻辑控制;三、servlet没有内置对象,jsp内置对象都是经过HttpServletRequest和HttpServletResponse以及HttpServlet对象

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

request:表示HttpServletRequest对象,能够获取浏览器请求的数据

response:表示HttpServletResponse对象,能够设置浏览器响应数据

out:对象是javax.jsp.JspWriter的一个实例,用于向浏览器回送输出数据

pageContext:表示一个javax.servlet.jsp.PageContext对象。该对象提供了对JSP页面内全部的对象及名字空间(就是四大做用域空间,如page空间、request空间、session空间、application空间)的访问,也就是说他能够访问到当前请求对应session中保存的信息,也能够取当前应用所在的application的某一属性值,它至关于页面中全部功能的集大成者,包装了通用的servlet相关功能的方法。

session:表示一个请求的javax.servlet.http.HttpSession对象。Session能够存贮用户的状态信息

applicaton:表示一个javax.servle.ServletContext对象。相似于系统的全局变量,用于实现Web应用中的资源共享。

config:表示一个javax.servlet.ServletConfig对象。用于存放JSP编译后的初始数据。

page:表示从该页面产生的一个servlet实例,JSP网页自己

exception:针对错误网页,未捕捉的例外。表示JSP页面运行时产生的异常和错误信息,该对象只有在错误页面(page指令中设定isErrorPage为true的页面)中才可以使用。

66.说一下 jsp 的 4 种做用域?

page:仅可被当前响应jsp页面访问、request:同一个请求全部的servlet和jsp页面访问、session:同一个会话全部的servlet和jsp页面访问、application:同一个web应用全部的servlet和jsp页面访问;

67.session 和 cookie 有什么区别?

session机制是一种服务器端的机制,使用相似于散列表的结构保存信息;

cookie数据存放在客户的浏览器上,不安全,别人能够分析存放在本地的cookie并进行cookie欺骗,单个cookie数据不能超过4K

68.说一下 session 的工做原理?

session内容是保存在服务器端,一般是保存在内存中,也能够保存在文件或数据库,客户端跟服务端经过sessionId关联,sessionId一般以Cookie的形式存储在客户端。每次HTTP请求,sessionId会随着Cookie传递到服务器端,服务器就能够经过sessionId取得对应信息

69.若是客户端禁止 cookie 能实现 session 还能用吗?

还能用,一般sessionId均由Cookie负责保存,HTTP交互除了cookie能够携带信息,URL也能够,或者表单隐藏字段

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

一、拦截机制不一样。

    struts2是类级别的拦截,每次请求就会建立一个Action,和spring整合时struts2的ActionBean注入做用域是原型模式prototype,经过setter,getter把request数据注入到属性。springMVC是方法级别的拦截,一个方法对应一个request上下文,因此方法基本上独立、独享request和response,默认是单例模型,因此线程安全

二、底层框架不同

  struts2采用Filter(StrutsPrepareAndExecuteFilter)实现,SpringMVC采用servlet(DispatcherServlet)实现。Filter在容器启动以后即初始化;服务中止之后销毁,晚于Servlet。Servlet在是在调用时初始化,先于Filter调用,服务中止后销毁。

三、性能方面

  struts2是类级别拦截,每次请求对应生成一个新的实例action,须要全部属性值注入。而SpringMVC实现了零配置,SpringMVC是基于方法的拦截,有加载一次单例模式bean注入,因此SpringMVC比struct2性能更佳

四、配置方面

  SpringMVC与spring是无缝的,项目的管理和安全性上也比struct2高

71.如何避免 sql 注入?

一、使用prepareStatement代替statement,二、使用正则表达式过滤传入的参数

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

XSS夸站脚本攻击,其恶意脚本都是来自于用户的输入,因此能够对用户的输入进行过滤。

一、获取用户文本,使用innerText不使用innerHTML。二、对特殊符号& < > " ' / 等符号进行转义成 &amp &lt &gt &quot &#x27 &#x2F;

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

CsRF夸站请求伪造,攻击者经过伪造用户浏览器的请求,向访问一个用户曾经认证访问过的网站发送伪造请求,是目标网站误认为是用户的真实操做而执行命令。

如何防范:

一、验证HTTP Referer字段,HTTP头中的Referer字段记录了该 HTTP 请求的来源地址。二、请求地址中添加token并验证。三、HTTP头自定义属性并验证

7、异常

74.throw 和 throws 的区别?

throw是抛出一个具体的异常类型;throws是声明方法可能抛出全部异常信息,是将异常往上传

75.final、finally、finalize 有什么区别?

final用来修饰类、方法或变量;finally做为异常处理的一部分,只能用在try/catch语句中;finalize是Object类的一个方法,也就是每一个类都有这个方法,对象被回收时调用该方法

76.try-catch-finally 中哪一个部分能够省略?

finally部分能够省略

77.try-catch-finally 中,若是 catch 中 return 了,finally 还会执行吗?

必定执行

78.常见的异常类有哪些?

NullPointerException、IOException、ClassNotFoundeException、ArrayIndexOutOfBoundsException、FileNotFoundeException、NoSuchMethodException

8、网络

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

301表明永久性转移;302表明暂时性转移;区别:

一、301表示旧地址A的资源已经被永久地移除了(这个资源不可访问了),搜索引擎在抓取新内容的同时也将旧的网址交换为重定向以后的网址;

二、302表示旧地址A的资源还在(仍然能够访问),这个重定向只是临时地从旧地址A跳转到地址B,搜索引擎会抓取新的内容而保存旧的网址。

80.forward 和 redirect 的区别?

forward直接转发方式(服务器内部重定向):客户端和浏览器只发一次请求;redirect间接转发,服务器收到请求后发送一个状态头给浏览器,浏览器将再次请求一次

81.简述 tcp 和 udp的区别?

一、TCP面向链接;UDP是无链接;二、TCP提供可靠服务,无差错,不丢失,不重复,且按序到达(TCP经过校验和、重传控制、序号标识、滑动窗口、确认应答实现可靠传输);UDP尽最大努力交付,即不保证可靠交付;三、UDP具备较好的实时性,工做效率比TCP高,适用于对高速传输和实时性有较高的通信或广播通信;四、每一条TCP链接只能是点到点的,UDP支持一对一,一对多,多对一和多对多的交互通信;五、TCP对系统资源要求较多,UDP对系统资源要求较少。

82.tcp 为何要三次握手,两次不行吗?为何?

为了防止已失效的链接请求报文段忽然又传送到服务端,于是产生错误。

发生错误状况:client发出的第一个链接请求报文段并无丢失,而是在某个网络结点长时间的滞留了,以至延误到链接释放之后的某个时间才到达server。原本这是一个早已失效的报文段。但server收到此失效的链接请求报文段后,就误认为是client再次发出的一个新的链接请求。因而就向client发出确认报文段,赞成创建链接。假设不采用“三次握手”,那么只要server发出确认,新的链接就创建了。因为如今client并无发出创建链接的请求,所以不会理睬server的确认,也不会向server发送ack包。但server却觉得新的运输链接已经创建,并一直等待client发来数据。这样,server的不少资源就白白浪费掉了。采用“三次握手”的办法能够防止上述现象发生。例如刚才那种状况,client不会向server的确认发出确认。server因为收不到确认,就知道client并无要求创建链接。

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

tcp粘包是指若干包数据粘成一包;一、发送发缘由,TCP默认使用Nagle算法,Nagle算法主要作两件事:1)只有上一个分组获得确认,才会发送下一个分组;2)收集多个小分组,在一个确认到来时一块儿发送。因此Nagle算法有可能形成粘包现象。二、接收方缘由,TCP接收到分组时,并不会马上送至应用层处理,或者说,应用层并不必定会当即处理;实际上,TCP将收到的分组保存至接收缓存里,而后应用程序主动从缓存里读收到的分组。这样一来,若是TCP接收分组的速度大于应用程序读分组的速度,多个包就会被存至缓存,应用程序读时,就会读到多个首尾相接粘到一块儿的包。

如何解决粘包现象?一、解决发送方粘包,1)发送产生是由于Nagle算法合并小数据包,咱们能够经过关闭Nagle算法来解决,使用TCP_NODELAY选项来关闭Nagle算法。2)TCP提供了强制数据当即传送的操做指令push,当填入数据后调用操做指令就能够当即将数据发送,而没必要等待发送缓冲区填充自动发送;3)数据包中加头,头部信息为整个数据的长度(最普遍最经常使用);二、解决接收方粘包。1)解析数据包头部信息,根据长度来接收;2)自定义数据格式:在数据中放入开始、结束标识;解析时根据格式抓取数据,缺点是数据内不能含有开始或结束标识;3)短链接传输,创建一次链接只传输一次数据就关闭;(不推荐)

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

应用层(HTTP、FTP)、表示层(数据的表示、安全、压缩)、会话层(本地主机与远程主机进行的会话)、传输层(TCP、UDP)、网络层(逻辑地址寻址,ICMP IP)、数据链路层(硬件地址寻址,MAC地址访问介质)、物理层(创建、维护、断开物理链接)

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

一、get请求的参数是放在URL里,post请求参数是放在请求body里;二、get请求URL传参有长度限制,而post请求没有长度限制;三、get请求的参数只能是ASCII码,因此中文须要URL编码,而post请求没有这个限制

86.如何实现跨域?

跨域,指的是浏览器不能执行其余网站的脚本。它是由浏览器的同源策略形成的,是浏览器施加的安全限制。

一、JSONP:利用<script>标签没有跨域限制的“漏洞”,达到与第三方通信目的。当须要通信时,本地脚本动态建立一个<script>元素,地址指向第三方API网址,形如: 

<script src="http://www.example.net/api?param1=1&param2=2"></script>
并提供一个回调函数来接收数据(函数名可约定,或经过地址参数传递)。
第三方产生的响应为json数据的包装(故称之为jsonp,即json padding),形如:
callback({"name":"hax","gender":"Male"})
这样浏览器会调用callback函数,并传递解析后json对象做为参数。本站脚本可在callback函数里处理所传入的数据。

全部,经过Chrome查看全部JSONP发送的Get请求都是js类型,而非XHR。

要注意JSONP只支持GET请求,不支持POST请求。

二、apache设置反向代理(设置url映射解决跨域):

三、PHP端修改header(XHR2方式)

在php接口脚本中加入如下两句便可:

header('Access-Control-Allow-Origin:*');//容许全部来源访问

header('Access-Control-Allow-Method:POST,GET');//容许访问的方式

4.cors

​ Cross-Origin Resource Sharing(CORS)跨域资源共享是一份浏览器技术的规范,提供了 Web 服务从不一样域传来沙盒脚本的方法,以避开浏览器的同源策略,确保安全的跨域数据传输。现代浏览器使用CORS在API容器如XMLHttpRequest来减小HTTP请求的风险来源。与 JSONP 不一样,CORS 除了 GET 要求方法之外也支持其余的 HTTP 要求。服务器通常须要增长以下响应头的一种或几种:

Access-Control-Allow-Origin: * Access-Control-Allow-Methods: POST, GET, OPTIONS Access-Control-Allow-Headers: X-PINGOTHER, Content-Type Access-Control-Max-Age: 86400

 

跨域请求默认不会携带Cookie信息,若是须要携带,请配置下述参数:

"Access-Control-Allow-Credentials": true // Ajax设置 "withCredentials": true

87.说一下 JSONP 实现原理?

 jsonp主要是为了解决跨域访问问题,其返回的数据格式通常就是一个js脚本,脚本特色以下:

一、返回js脚本一般是服务端动态生成。二、整个脚本一般有且仅有一条语句,且是一个函数调用。三、脚本中调用到的函数,是页面上存在的一个函数,其函数名经过get参数传递给服务端,服务端再将其回写到js脚本中。四、函数的参数,是服务端处理后的结果数据,以json格式直接写在脚本中。这也是jsonp得名的由来。

9、设计模式

88.说一下你熟悉的设计模式?

简单工厂模式、工厂方法模式、抽象工厂模式、单例模式、原型模式、适配器模式、代理模式、迭代模式

89.简单工厂和抽象工厂有什么区别?

简单工厂,类的建立依赖工厂类,添加新的功能时须要修改工厂类;

抽象工厂是提供建立一系列服务的对象的接口,

相关文章
相关标签/搜索