JAVA面试中常见的面试题(四)——servlet、网络和spring

JavaWeb

1、jsp和servlet有什么区别?

1)servlet是一种独立于平台和协议的服务器端的Java技术,可以跨平台,被用于控制逻辑,Servlet更多的是类似于一个Controller,用来做逻辑控制。

2)jsp的本质就是Servlet,JVM只能识别java的类,不能识别JSP的代码,Web容器将JSP的代码编译成JVM能够识别的java类,jsp是JAVA和HTML代码的组合,主要是用作视图的展示。jsp的性能要低于servlet。

2、jsp有哪些内置对象?

jsp又就打内置对象如下:

Page,PageContext,request,response,session,application,out,config,exception

Page:表示从该页面产生的一个servlet实例。

PageContext:表示一个javax.servlet.jsp.PageContext对象。它是用于方便存取各种范围的名字空间、servlet相关的对象的API,并且包装了通用的servlet相关功能的方法。

reuqest:代表的是请求对象,它包含了有个浏览器请求对象信息,并且提供了保存数据的cookie,session,header的方法。

response:是响应对象,代表的是从服务器向浏览器响应数据。

session:是HttpSession的一个对象,用户保存用户状态的所有信息。

application:表示一个ServletContext对象,有助于查找有关servlet引擎和servlet环境的信息。

out:是JspWriter的一个对象,并提供了几个方法使你能用于向浏览器回送输出结果。

config:是ServletConfig一个对象,该对象用于存取servlet实例的初始化参数。

exception:是Throwable的引用.用来捕获页面未处理的例外错误信息。

3、讲一下Jsp的四个作用域?

jsp存在四个作用域page、request、session和application。

page:指当前页面。在一个jsp页面里有效。

request:从http请求到服务器处理结束,返回响应的整个过程。在这个过程中使用forward方式跳转多个jsp。在这些jsp页面里有效。

session:从浏览器打开到浏览器关闭这个过程,在整个会话中有效。

application:在整个应用范围有效。

总结:作用域规定的是变量的有效期限,page里的变量没法从index.jsp传递到test.jsp。只要页面跳转了,它们就不见了。 
request里的变量可以跨越forward前后的两页。但是只要刷新页面,它们就重新计算了。 session和application里的变量一直在累加,开始还看不出区别,只要关闭浏览器,再次重启浏览器访问这页,session里的变量就重新计算了。 application里的变量一直在累加,除非你重启tomcat,否则它会一直变大。

4、session和cookie区别?

1) session保存在服务器,cookie保存在客户端。

2)session中保存的是对象,cookie中保存的是字符串。

3)session保存的数据没有限制但多了会影响服务器性能,cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。

4)session比叫耗费性能,session比cookie安全。

5、session工作原理?

session被称为会话控制,其实是一个存在服务器上的类似于一个散列表格的文件,类似于map,里面的键存储的是用户的sessionid,值就是存储的数据,比如登陆后的用户名密码等信息,等用户下次请求时会根据携带的sessionid查到存储的登录信息,代表已经登陆,为了保证服务端的性能,服务端会清理超过会话过期时间的数据清除默认是30分钟。

6、如果客户端禁用cookie那session还能用吗?

如果禁用cookie的话session依然能用,我们可以手动通过URL传值、隐藏表单传递sessionid到服务端。

7、如何避免sql注入?

SQL注入是比较常见的网络攻击方式之一,它不是利用操作系统的BUG来实现攻击,而是针对程序员编程时的疏忽,通过SQL语句的漏洞非法进入系统甚至修改系统数据。

避免sql注入方式

1)使用PreparedStatement采用预编译语句集,它内置了处理SQL注入的能力。

2)使用正则表达式过滤传入的参数。

3)对传入参数做字符串过滤。

8、什么是XSS攻击,如何避免?

Cross-Site Scripting(跨站脚本攻击)简称 XSS,是一种代码注入攻击。攻击者通过在目标网站上注入恶意脚本,使之在用户的浏览器上运行。利用这些恶意脚本,攻击者可获取用户的敏感信息如 Cookie、SessionID 等,进而危害数据安全。为了和 CSS 区分,这里把攻击的第一个字母改成了 X,于是叫做 XSS。

如何避免?

1)对输入过滤,前端过滤提交参数和防止HTML中出现恶意JS代码,后端防止恶意JS入库。

2)改成纯前端渲染,把代码和数据分隔开,对 HTML 做充分转义。

3)拼接 HTML 是必要的,就需要采用合适的转义库,对 HTML 模板各处插入点进行充分的转义。

4)对于不受信任的输入,都应该限定一个合理的长度。

5)使用通用 XSS 攻击字符串手动检测 XSS 漏洞,使用扫描工具自动检测 XSS 漏洞。

9、什么是CSRF攻击,如何避免?

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

1)尽量使用POST,限制GET。

2)加验证码。

3)Referer Check用于检查请求是否来自合法的“源”。

4)注意Token的保密性和随机性。

网络

1、http的响应码有哪些?301和302区别?

1** (信息类): 表示接收到请求并且继续处理。

2** (响应成功):表示动作被成功接收、理解和接受。

3** (重定向类):为了完成指定的动作,必须接受进一步处理。

4** (客户端错误类):请求包含错误语法或不能正确执行。

5** (服务端错误类):服务器不能正确执行一个正确的请求。

301:(永久移动)  请求的网页已永久移动到新位置。服务器返回此响应(对 GET 或 HEAD 请求的响应)时,会自动将请求者转到新位置。

302:(临时移动)  服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。

2、forward和redirect区别?

Forward和Redirect代表了两种请求转发方式:直接转发和间接转发。

直接转发:对于直接方式,客户端浏览器只发出一次请求,Servlet把请求转发给Servlet、HTML、JSP或其它信息资源,由第2个信息资源响应该请求,两个信息资源共享同一个request对象。     

间接转发:对于间接方式,服务器端在响应第一次请求的时候,让浏览器再向另外一个URL发出请求,从而达到转发的目的。它本质上是两次HTTP请求,对应两个request对象。

3、简述tcp和udp的区别?

1)TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接

2)TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付

3)TCP面向字节流,实际上是TCP把数据看成一连串无结构的字节流;UDP是面向报文的 UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电话,实时视频会议等)

4)每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信

5)TCP首部开销20字节;UDP的首部开销小,只有8个字节

6)TCP的逻辑通信信道是全双工的可靠信道,UDP则是不可靠信道

4、简述tcp三次握手?

第一次握手:客户端发送syn包(seq=x)到服务器,并进入SYN_SEND状态,等待服务器确认;第二次握手:服务器收到syn包,必须确认客户的SYN(ack=x+1),同时自己也发送一个SYN包(seq=y),即SYN+ACK包,此时服务器进入SYN_RECV状态;第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=y+1),此包发送完毕,客户端和服务器进ESTABLISHED状态,完成三次握手。

握手过程中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据。理想状态下,TCP连接一旦建立,在通信双方中的任何一方主动关闭连接之前,TCP 连接都将被一直保持下去。

5、tcp粘包怎么产生的?如何解决?

1)发送方引起的粘包是由TCP协议本身造成的,TCP为提高传输效率,发送方往往要收集到足够多的数据后才发送一包数据。若连续几次发送的数据都很少,通常TCP会根据优化算法把这些数据合成一包后一次发送出去,这样接收方就收到了粘包数据。

2)接收方引起的粘包是由于接收方用户进程不及时接收数据,从而导致粘包现象。这是因为接收方先把收到的数据放在系统接收缓冲区,用户进程从该缓冲区取数据,若下一包数据到达时前一包数据尚未被用户进程取走,则下一包数据放到系统接收缓冲区时就接到前一包数据之后,而用户进程根据预先设定的缓冲区大小从系统接收缓冲区取数据,这样就一次取到了多包数据。

解决方案:

1)对于发送方引起的粘包现象,用户可通过编程设置来避免,TCP提供了强制数据立即传送的操作指令push,TCP软件收到该操作指令后,就立即将本段数据发送出去,而不必等待发送缓冲区满。

2)对于接收方引起的粘包,则可通过优化程序设计、精简接收进程工作量、提高接收进程优先级等措施,使其及时接收数据,从而尽量避免出现粘包现象。

3)由接收方控制,在应用层处理,格式化数据(每条数据都有固定的格式,如开始字符和结束字符)或者送每条数据的时候,将数据的长度一并发送。

6、简述osi的七层网络模型?

ISO七层模型,从底向上依次是 物理层(数据单元为比特bit)、数据链路层(数据单元为帧)、网络层(数据单元为报文)、传输层、会话层、表示层以及应用层。

物理层:主要是为上一层提供一个物理连接。

数据链路层:主要是负责在相邻两个节点线路上,无差错的传送以帧为单位的数据。

网络层:指在计算机网络中进行通信的两个计算机可能通过很多数据链路,也可能通过很多通信子网。网络层的任务是选择合适的网间路由以及交换节点,确保数据及时发送。网络层将数据链路层提供的帧组成数据包,包中封装有网络层头,其中含有逻辑地址信息---源站点和目的站点地址的网络地址。

传输层:为两个端系统的会话层之间,提供建立、维护和取消连接的功能,负责可靠的数据连接。这一层也是以报文为单位进行传输。

会话层:提供两个进程之间建立、维护和结束会话连接的功能,提供会话流量控制和交叉会话功能。会话层以及以上传输单位都是报文。

表示层:提供不同信息格式和编码之间的转换,提供数据表示、数据压缩和数据加密功能。

应用层:提供网络服务,例如事务处理程序、文件传输程序、网络管理程序等。连接设备为网关。协议代表有 http、telnet等。

7、http的请求方法有哪些?get和post的区别?

1)GET向特定的资源发出请求

2)POST向指定资源提交数据进行处理请求

3)PUT向指定资源位置上传其最新内容

4)DELETE请求服务器删除Request-URL所标识的资源

5)HEAD与get请求类似,返回的响应中没有具体内容,用于获取报头

6)TRACE回显服务器收到的请求,用于测试和诊断

7)CONNECTHTTP/1.1协议中能够将连接改为管道方式的代理服务器

GET和POST区别

1)get获取服务器资源,post是提交资源到服务器,并且消息放在消息体中传输。

2) GET方式提交的数据最多只能有1024字节,而POST则没有此限制。

3)安全性问题,get传递参数会爆漏在地址栏。

8、如何实现跨域?

实现跨域的方式:

1、jsonp原理就是利用了 script 标签不受同源策略的限制。

2、cors(跨域资源共享)浏览器得到响应会进行判断 Access-Control-Allow-Origin 的值是否和当前的地址相同,只有匹配成功后才进行响应处理,修改 Access-Control-Allow-Origin的值。

3、服务器跨域就是用转转服务器代理目标服务器,通过访问代理服务器中转访问目标服务器。

4、postmessage跨域,HTML5 中新增了 postMessage 方法,postMessage 可以实现跨文档消息传输。

9、简述JSONP解决跨域的原理?

最常见的一种跨域方式,其背后原理就是利用了 script 标签不受同源策略的限制,在页面中动态插入了 script,script 标签的 src 属性就是后端 api 接口的地址,并且以 get 的方式将前端回调处理函数名称告诉后端,后端在响应请求时会将回调返还,并且将数据以参数的形式传递回去。

Spring&SpringMVC

1、springMVC与struts2的区别?

 

2、简述spring的IOC和AOP的实现原理?

 

3、spring包含哪些主要模块?

 

4、spring常用的注入方式有哪些?

 

5、spring支持几种作用域?

 

6、spring中bean是线程安全?

 

7、spring自动装配bean有哪些方式?

 

8、spring的事务实现方式有哪些?

 

9、介绍一下事务的特性和隔离机制?

 

10、说一下springMVC有哪些组件和运行流程?

 

11、@Autowired和@RequestMapping的作用是什么?

 

12、什么是springboot?为什么要用springboot?

 

13、springboot的核心配置文件?

 

14、springboot的配置文件有哪几种类型?有什么区别?

 

15、springboot有哪些方式可以实现热部署?

 

16、什么是spring cloud?

 

17、spring cloud断路器的作用是什么?

 

18、spring cloud的核心组件有哪些?

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值