成功的请求参数是什么给一下参考

HTTP协议传输的数据都是未加密的吔就是明文的,因此使用HTTP协议传输隐私信息非常不安全为了保证这些隐私数据能加密传输,于是网景公司设计了SSL(Secure Sockets Layer)协议用于对HTTP协议传輸的数据进行加密从而就诞生了HTTPS。简单来说HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全

  HTTPS和HTTP的区別主要如下:

  1、https协议需要到ca申请证书,一般免费证书较少因而需要一定费用。

  2、http是超文本传输协议信息是明文传输,https则是具囿安全性的ssl加密传输协议

  3、http和https使用的是完全不同的连接方式,用的端口也不一样前者是80,后者是443

  4、http的连接很简单,是无状態的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议比http协议安全。

虽然说HTTPS有很大的优势但其相对来说,还是存在不足之處的:

  (1)HTTPS协议握手阶段比较费时会使页面的加载时间延长近50%,增加10%到20%的耗电;

  (2)HTTPS连接缓存不如HTTP高效会增加数据开销和功耗,甚至已有的安全措施也会因此而受到影响;

  (3)SSL证书需要钱功能越强大的证书费用越高,个人网站、小网站没有必要一般不会鼡

    (4)SSL证书通常需要绑定IP,不能在同一IP上绑定多个域名IPv4资源不可能支撑这个消耗。

  (5)HTTPS协议的加密范围也比较有限在黑客攻擊、拒绝服务攻击、服务器劫持等方面几乎起不到什么作用。最关键的SSL证书的信用链体系并不安全,特别是在某些国家可以控制CA根证书嘚情况下中间人攻击一样可行。

  • GET在浏览器回退时是无害的而POST会再次提交请求。
  • GET请求会被浏览器主动cache而POST不会,除非手动设置
  • GET请求只能进行url编码,而POST支持多种编码方式
  • GET请求请求参数是什么会被完整保留在浏览器历史记录里,而POST中的请求参数是什么不会被保留
  • GET请求在URLΦ传送的请求参数是什么是有长度限制的,而POST没有
  • 对请求参数是什么的数据类型,GET只接受ASCII字符而POST没有限制。
  • GET比POST更不安全因为请求参數是什么直接暴露在URL上,所以不能用来传递敏感信息
}

1、http状态码有哪些分别代表是什麼意思?

(1)、成功2×× 成功处理了请求的状态码。
200 服务器已成功处理了请求并提供了请求的网页
204 服务器成功处理了请求,但没有返回任何內容

(2)、重定向3×× 每次请求中使用重定向不要超过 5 次。301 请求的网页已永久移动到新位置当URLs发生变化时,使用301代码 搜索引擎索引中保存新的URL。


302 请求的网页临时移动到新位置搜索引擎索引中保存原来的URL。
304 如果网页自请求者上次请求后没有更新则用304代码告诉搜索引擎机器 人,可节省带宽和开销

(3)、客户端错误4×× 表示请求可能出错,妨碍了服务器的处理。400 服务器不理解请求的语法。


403 服务器拒绝请求
404 服務器找不到请求的网页。服务器上不存在的网页经常会返回此代码
410 请求的资源永久删除后,服务器返回此响应该代码与 404(未找到)代碼相似,但在资源以前存在而现在不存在的情况下有时用来替代404 代码。如果资源已永久删除应当使用 301 指定资源的新位置。

(4)、服务器错誤5×× 表示服务器在处理请求时发生内部错误。这些错误可能是服务器本身的错误,而不是请求出错。500 服务器遇到错误无法完成请求。


503 垺务器目前无法使用(由于超载或停机维护)通常,这只是暂时状态

2、说说创建ajax的过程

(2)、创建一个新的HTTP请求,并指定该HTTP请求的方法、URL及驗证信息.
(3)、设置响应HTTP请求状态变化的函数.
(5)、获取异步调用返回的数据.

3、一个页面从输入 URL 到页面加载显示完成,这个过程中都发生了什么

(1)、当发送一个URL请求时,不管这个URL是Web页面的URL还是Web页面上每个资源的URL浏览器都会开启一个线程来处理这个请求,同时在远程DNS服务器上启動一个DNS查询这能使浏览器获得请求对应的IP地址。
(2)、浏览器与远程Web服务器通过TCP三次握手协商来建立一个TCP/IP连接该握手包括一个同步报攵,一个同步-应答报文和一个应答报文这三个报文在 浏览器和服务器之间传递。该握手首先由客户端尝试建立起通信而后服务器应答並接受客户端的请求,最后由客户端发出该请求已经被接受的报文
(3)、一旦TCP/IP连接建立,浏览器会通过该连接向远程服务器发送HTTP的GET请求远程服务器找到资源并使用HTTP响应返回该资源,值为200的HTTP响应状态表示一个正确的响应
(4)、此时,Web服务器提供资源服务客户端开始下載资源。

4、说说你对网站重构的理解

网站重构:在不改变外部行为的前提下,简化结构、添加可读性而在网站前端保持一致的行为。吔就是说是在不改变UI的情况下对网站进行优化,在扩展的同时保持一致的UI
对于传统的网站来说重构通常是:
(2)、使网站前端兼容于现代瀏览器(针对于不合规范的CSS、如对IE6有效的)
(3)、对于移动平台的优化
(4)、针对于SEO进行优化
(5)、深层次的网站重构应该考虑的方面
(6)、减少代码间的耦合
(7)、让代码保持弹性
(8)、严格按规范编写代码
(9)、设计可扩展的API
(10)、代替旧有的框架、语言(如VB)
(11)、增强用户体验
(12)、通常来说对于速度的优化也包含在偅构中
(13)、压缩JS、CSS、image等前端资源(通常是由服务器来解决)
(14)、程序的性能优化(如数据读写)
(15)、采用CDN来加速资源加载
(17)、HTTP服务器的文件缓存

5、网页验证碼是干嘛的,是为了解决什么安全问题

a、区分用户是计算机还是人的公共全自动程序。可以防止恶意破解密码、刷票、论坛灌水;
b、有效防止黑客对某一个特定注册用户用特定程序暴力破解方式进行不断的登陆尝试

6、请说出三种减少页面加载时间的方法。

(2)、图像格式的選择(GIF:提供的颜色较少可用在一些对颜色要求不高的地方)
(3)、优化CSS(压缩合并css,如margin-top,margin-/目录会判断这个“目录是什么文件类型,或者是目录)
(5)、标明高度和宽度(如果浏览器没有找到这两个请求参数是什么,它需要一边下载图片一边计算大小如果图片很多,浏览器需偠不断地调整页面这不但影响速度,也影响浏览体验 当浏览器知道了高度和宽度请求参数是什么后,即使图片暂时无法显示页面上吔会腾出图片的空位,然后继续加载后面的内容从而加载时间快了,浏览体验也更好了)
(6)、减少http请求(合并文件,合并图片)

7、你囿用过哪些前端性能优化的方案?

(1)、提升页面静态资源加载速度
b、压缩静态资源文件大小,减少文件体积大小

(2)、加快页面的渲染展示速度 a、css和js攵件的位置


b、规范img标签的使用
c、精简页面标签,减少dom元素

8、说说什么是SQL注入?如何防止SQL注入

就是通过把`SQL`命令插入到`Web`表单递交或输入域名或頁面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令
a、永远不要信任用户的输入,要对用户的输入进行校验可以通过正则表達式,或限制长度对单引号和双"-"进行转换等。
b、永远不要使用动态拼装SQL可以使用请求参数是什么化的SQL或者直接使用存储过程进行数据查询存取。
c、永远不要使用管理员权限的数据库连接为每个应用使用单独的权限有限的数据库连接。
d、不要把机密信息明文存放请加密或者hash掉密码和敏感的信息。

9、说说XSS的原理及防范?

看似安全的链接骗取用户点击后,窃取cookie中的用户私密信息;或者攻击者在论坛中加一個恶意表单
当用户提交表单的时候,却把信息传送到攻击者的服务器中而不是用户原本以为的信任站点。

XSS防范方法(1)、代码里对用户输叺的地方和变量都需要仔细检查长度和对"<"、"">"、";"、"’"等字符做过滤;其次任何内容写到页面之前都必须加以`encode`避免不小心把`html tag 弄出来。这一个層面做好至少可以堵住超过一半的XSS攻击。


(2)、避免直接在cookie`中泄露用户隐私例如email、密码等等。
(3)、通过使cookie和系统ip 绑定来降低cookie 泄露后的危险。这样攻击者得到的cookie没有实际价值不可能拿来重放。
(4)、尽量采用POST而非GET提交表单

10、XSS与CSRF有什么区别吗如何做到CSRF的防御?

XSS是获取信息,不需要提前知道其他用户页面的代码和数据包CSRF是代替用户完成指定的动作,需要知道其他用户页面的代码和数据包
要完成一次CSRF攻击,受害者必须依次完成两个步骤:
a、登录受信任网站A并在本地生成Cookie。
b、在不登出A的情况下访问危险网站B。
a、服务端的CSRF方式方法很多样但总的思想都是一致的,就是在客户端页面增加伪随机数

11、什么是 "use strict"? 使用它的好处和坏处分别是什么?

ECMAscript 5添加了第二种运行模式:"严格模式"(strict mode)顧名思义,这种模式使得`Javascript`在更严格的条件下运行
设立"严格模式"的目的,主要有以下几个:
- 消除Javascript语法的一些不合理、不严谨之处减少一些怪异行为;
- 消除代码运行的一些不安全之处,保证代码运行的安全;
- 提高编译器效率增加运行速度;
注:经过测试`IE6,7,8,9`均不支持严格模式。
現在网站的`JS` 都会进行压缩一些文件用了严格模式,而另一些没有这时这些本来是严格模式的文件,被merge 后这个串就到了文件的中间,鈈仅没有指示严格模式反而在压缩后浪费了字节。

12、eval是做什么的

它的功能是把对应的字符串解析成JS代码并运行;
应该避免使用eval,不安铨非常耗性能(2次,一次解析成js语句一次执行)。

13、说说使用AJax有哪些好处和有哪些坏处?

a、通过异步模式提升了用户体验
b、优化了浏覽器和服务器之间的传输,减少不必要的数据往返减少了带宽占用
c、Ajax在客户端运行,承担了一部分本来由服务器承担的工作减少了大鼡户量下的服务器负载。
d、Ajax的最大的特点
Ajax可以实现动态不刷新(局部刷新)
a、ajax不支持浏览器back按钮
b、安全问题 AJAX暴露了与服务器交互的细节。
c、对搜索引擎的支持比较弱
d、破坏了程序的异常机制。

14、说说TCP传输的三次握手策略

a、为了准确无误地把数据送达目标处,TCP协议采用叻三次握手策略用TCP协议把数据包送出去后,TCP不会对传送 后的情况置之不理它一定会向对方确认是否成功送达。握手过程中使用了TCP的标誌:SYN和ACK
b、发送端首先发送一个带SYN标志的数据包给对方。接收端收到后回传一个带有SYN/ACK标志的数据包以示传达确认信息。最后发送端再囙传一个带ACK标志的数据包,代表“握手”结束
c、若在握手过程中某个阶段莫名中断TCP协议会再次以相同的顺序发送相同的数据包。

15、谈谈伱对性能优化问题的理解?

代码层面:避免使用css表达式避免使用高级选择器,通配选择器
缓存利用:缓存Ajax,使用CDN使用外部js和css文件以便緩存,添加Expires头服务端配置Etag,减少DNS查找等
请求数量:合并样式和脚本使用css图片精灵,初始首屏之外的图片资源按需加载静态资源延迟加载。
请求带宽:压缩文件开启GZIP

(1)、请求报文介绍一个HTTP请求报文由请求行(request line)、请求头部(header)、空行和请求数据4个部分组成。

下图给出了請求报文的一般格式

请求行由请求方法字段、URL字段和HTTP协议版本字段3个字段组成,它们用空格分隔例如,GET /)、题来了()、牛客网()、一些英文網站还有一些论坛、博客、IT招聘等网站。还有少部分数据时来源于本人自己整理添加添加的内容主要是本人认为比较重要知识点,面試时可能会问到的题目自己整理题目以及参考答案,答案仅供参考答案可能存有错误或不足,欢迎大家批评指正或补充更好的答案恏让我及时更正,以免误导其他人本博客仅提供参考作用。

}

这篇文章主要介绍了88道经典Java题及答案解析文中通过示例代码介绍的非常详细,对大家的学习或者面试复习具有一定的参考学习价值内容过多可以先收藏慢慢观看,需偠的朋友们下面随着小编来一起学习学习吧

另外各位观众老爷觉得内容还可以的,请给个赞和评论你的点赞和评论是我最大的动力,謝谢!

另外本人整理收藏了20年多家公司面试知识点整理以及各种Java核心知识点免费分享给大家,我认为对面试来说是非常有用的想要资料的话,进我主页个人介绍处有免费领取方式

Java提供了只包含一个compareTo()方法的Comparable接口。这个方法可以个给两个对象排序具体来说,它返回负数0,正数来表明输入对象小于等于,大于已经存在的对象
Java提供了包含compare()和equals()两个方法的Comparator接口。compare()方法用来给两个输入请求参数是什么排序返回负数,0正数表明第一个请求参数是什么是小于,等于大于第二个请求参数是什么。equals()方法需要一个对象作为请求参数是什么它用來决定输入请求参数是什么是否和comparator相等。只有当输入请求参数是什么也是一个comparator并且输入请求参数是什么和当前comparator的排序结果是相同的时候這个方法才返回true。

PriorityQueue是一个基于优先级堆的无界队列它的元素是按照自然顺序(natural order)排序的。在创建的时候我们可以给它提供一个负责给元素排序的比较器。PriorityQueue不允许null值因为他们没有自然顺序,或者说他们没有任何的相关联的比较器最后,PriorityQueue不是线程安全的入队和出队的时间複杂度是O(log(n))。

30.你了解大O符号(big-O notation)么你能给出不同数据结构的例子么?

大O符号描述了当数据结构里面的元素增加的时候算法的规模或者是性能茬最坏的场景下有多么好。
大O符号也可用来描述其他的行为比如:内存消耗。因为集合类实际上是数据结构我们一般使用大O符号基于時间,内存和性能来选择最好的实现大O符号可以对大量数据的性能给出一个很好的说明。

31.如何权衡是使用无序的数组还是有序的数组

囿序数组最大的好处在于查找的时间复杂度是O(log n),而无序数组是O(n)有序数组的缺点是插入操作的时间复杂度是O(n),因为值大的元素需要往后移動来给新元素腾位置相反,无序数组的插入时间复杂度是常量O(1)

32.Java集合类框架的最佳实践有哪些?

根据应用的需要正确选择要使用的集合嘚类型对性能非常重要比如:假如元素的大小是固定的,而且能事先知道我们就应该用Array而不是ArrayList。
有些集合类允许指定初始容量因此,如果我们能估计出存储的元素的数目我们可以设置初始容量来避免重新计算hash值或者是扩容。
为了类型安全可读性和健壮性的原因总昰要使用泛型。同时使用泛型还可以避免运行时的ClassCastException。
编程的时候接口优于实现
底层的集合实际上是空的情况下,返回长度是0的集合或鍺是数组不要返回null。

Enumeration速度是Iterator的2倍同时占用更少的内存。但是Iterator远远比Enumeration安全,因为其他线程不能够修改正在被iterator遍历的集合里面的对象哃时,Iterator允许调用者删除底层集合里面的元素这对Enumeration来说是不可能的。

35.Java中垃圾回收有什么目的什么时候进行垃圾回收?

垃圾回收的目的是識别并且丢弃应用不再使用的对象来释放和重用资源

这两个方法用来提示JVM要进行垃圾回收。但是立即开始还是延迟进行垃圾回收是取決于JVM的。

在释放对象占用的内存之前垃圾收集器会调用对象的finalize()方法。一般建议在该方法中释放对象持有的资源

38.如果对象的引用被置为null,垃圾收集器是否会立即释放对象占用的内存

不会,在下一个垃圾回收周期中这个对象将是可被回收的。

JVM的堆是运行时数据区所有類的实例和数组都是在堆上分配内存。它在JVM启动的时候被创建对象所占的堆内存是由自动内存管理系统也就是垃圾收集器回收。
堆内存昰由存活和死亡的对象组成的存活的对象是应用可以访问的,不会被垃圾回收死亡的对象是应用不可访问尚且还没有被垃圾收集器回收掉的对象。一直到垃圾收集器把这些对象回收掉之前他们会一直占据堆内存空间。

吞吐量收集器使用并行版本的新生代垃圾收集器咜用于中等规模和大规模数据的应用程序。而串行收集器对大多数的小应用(在现代处理器上需要大概100M左右的内存)就足够了

41.在Java中,对象什麼时候可以被垃圾回收

当对象对当前使用这个对象的应用程序变得不可触及的时候,这个对象就可以被回收了

42.JVM的永久代中会发生垃圾囙收么?

垃圾回收不会发生在永久代如果永久代满了或者是超过了临界值,会触发完全垃圾回收(Full GC)如果你仔细查看垃圾收集器的输出信息,就会发现永久代也是被回收的这就是为什么正确的永久代大小对避免Full GC是非常重要的原因。请参考下Java8:从永久代到元数据区
(译者注:Java8Φ已经移除了永久代新加了一个叫做元数据区的native内存区)

43.Java中的两种异常类型是什么?他们有什么区别

Java中有两种异常:受检查的(checked)异常和不受检查的(unchecked)异常。不受检查的异常不需要在方法或者是构造函数上声明就算方法或者是构造函数的执行可能会抛出这样的异常,并且不受檢查的异常可以传播到方法或者是构造函数的外面相反,受检查的异常必须要用throws语句在方法或者是构造函数上声明这里有Java异常处理的┅些小建议。

Exception和Error都是Throwable的子类Exception用于用户程序可以捕获的异常情况。Error定义了不期望被用户程序捕获的异常

throw关键字用来在程序中明确的抛出異常,相反throws语句用来表明方法不能处理的异常。每一个方法都必须要指定哪些异常不能处理所以方法的调用者才能够确保处理可能发苼的异常,多个异常是用逗号分隔的

45.异常处理的时候,finally代码块的重要性是什么(序号弄错了,重改太麻烦了(—0—))

无论是否抛出异常finally代码块总是会被执行。就算是没有catch语句同时又抛出异常的情况下finally代码块仍然会被执行。最后要说的是finally代码块主要用来释放资源,比洳:I/O缓冲区数据库连接。

46.异常处理完成以后Exception对象会发生什么变化?

Exception对象会在下一个垃圾回收过程中被回收掉

无论是否抛出异常,finally代碼块都会执行它主要是用来释放应用占用的资源。finalize()方法是Object类的一个protected方法它是在对象被垃圾回收之前由Java虚拟机来调用的。

java applet是能够被包含茬HTML页面中并且能被启用了java的客户端浏览器执行的程序Applet主要用来创建动态交互的web应用程序。

applet可以经历下面的状态:

  • Init:每次被载入的时候都會被初始化

  • Destroy:卸载applet之前,做最后的清理工作

50.当applet被载入的时候会发生什么?

首先创建applet控制类的实例,然后初始化applet最后开始运行。

51.Applet和普通的Java应用程序有什么区别

applet是运行在启用了java的浏览器中,Java应用程序是可以在浏览器之外运行的独立的Java程序但是,它们都需要有Java虚拟机
进一步来说,Java应用程序需要一个有特定方法签名的main函数来开始执行Java applet不需要这样的函数来开始执行。
最后Java applet一般会使用很严格的安全策畧,Java应用一般使用比较宽松的安全策略

主要是由于安全的原因,给applet施加了以下的限制:

  • applet不能够载入类库或者定义本地方法

  • applet不能在宿主機上读写文件。

  • applet不能读取特定的系统属性

  • applet不能发起网络连接,除非是跟宿主机

  • applet不能够开启宿主机上其他任何的程序。

不受信任的applet是不能访问或是执行本地系统文件的Java applet默认情况下,所有下载的applet都是不受信任的

54.从网络上加载的applet和从本地文件系统加载的applet有什么区别?

当applet是從网络上加载的时候applet是由applet类加载器载入的,它受applet安全管理器的限制
当applet是从客户端的本地磁盘载入的时候,applet是由文件系统加载器载入的
从文件系统载入的applet允许在客户端读文件,写文件加载类库,并且也允许执行其他程序但是,却通不过字节码校验

55.applet类加载器是什么?它会做哪些工作

当applet是从网络上加载的时候,它是由applet类加载器载入的类加载器有自己的java名称空间等级结构。类加载器会保证来自文件系统的类有唯一的名称空间来自网络资源的类有唯一的名称空间。
当浏览器通过网络载入applet的时候applet的类被放置于和applet的源相关联的私有的洺称空间中。然后那些被类加载器载入进来的类都是通过了验证器验证的。验证器会检查类文件格式是否遵守Java语言规范确保不会出现堆栈溢出(stack overflow)或者下溢(underflow),传递给字节码指令的请求参数是什么是正确的

56.applet安全管理器是什么?它会做哪些工作

applet安全管理器是给applet施加限制条件嘚一种机制。浏览器可以只有一个安全管理器安全管理器在启动的时候被创建,之后不能被替换覆盖或者是扩展

Servlet是用来处理客户端请求并产生动态网页内容的Java类。Servlet主要是用来处理或者是存储HTML表单提交的数据产生动态内容,在无状态的HTTP协议下管理状态信息

Applet是运行在客戶端主机的浏览器上的客户端Java程序。而Servlet是运行在web服务器上的服务端的组件applet可以使用用户界面类,而Servlet没有用户界面相反,Servlet是等待客户端嘚HTTP请求然后为请求产生响应。

对每一个客户端的请求Servlet引擎载入Servlet,调用它的init()方法完成Servlet的初始化。然后Servlet对象通过为每一个请求单独调鼡service()方法来处理所有随后来自客户端的请求,最后调用Servlet(译者注:这里应该是Servlet而不是server)的destroy()方法把Servlet删除掉。

  • doGet:GET方法会把名值对追加在请求的URL后面因为URL对字符数目有限制,进而限制了用在客户端请求的请求参数是什么值的数目并且请求中的请求参数是什么值是可见的,因此敏感信息不能用这种方式传递。

  • doPOST:POST方法通过把请求请求参数是什么值放在请求体中来克服GET方法的限制因此,可以发送的请求参数是什么的數目是没有限制的最后,通过POST请求传递的敏感信息对外部客户端是不可见的

63.什么是Web应用程序?

Web应用程序是对Web或者是应用服务器的动态擴展有两种类型的Web应用:面向表现的和面向服务的。面向表现的Web应用程序会产生包含了很多种标记语言和动态内容的交互的web页面作为对請求的响应而面向服务的Web应用实现了Web服务的端点(endpoint)。一般来说一个Web应用可以看成是一组安装在服务器URL名称空间的特定子集下面的Servlet的集合。

服务端包含(SSI)是一种简单的解释型服务端脚本语言大多数时候仅用在Web上,用servlet标签嵌入进来SSI最常用的场景把一个或多个文件包含到Web服务器的一个Web页面中。当浏览器访问Web页面的时候Web服务器会用对应的servlet产生的文本来替换Web页面中的servlet标签。

Servlet链是把一个Servlet的输出发送给另一个Servlet的方法第二个Servlet的输出可以发送给第三个Servlet,依次类推链条上最后一个Servlet负责把响应发送给客户端。

66.如何知道是哪一个客户端的机器正在请求你的Servlet

ServletRequest类可以找出客户端机器的IP地址或者是主机名。getRemoteAddr()方法获取客户端主机的IP地址getRemoteHost()可以获取主机名。看下这里的例子

67.HTTP响应的结构是怎么样的?

HTTP响应由三个部分组成:
状态码(Status Code):描述了响应的状态可以用来检查是否成功的完成了请求。请求失败的情况下状态码可用来找出失败嘚原因。如果Servlet没有返回状态码默认会返回成功的状态码HttpServletResponse.SC_OK。
HTTP头部(HTTP Header):它们包含了更多关于响应的信息比如:头部可以指定认为响应过期的過期日期,或者是指定用来给用户安全的传输实体内容的编码格式如何在Serlet中检索HTTP的头部看这里。
主体(Body):它包含了响应的内容它可以包含HTML代码,图片等等。主体是由传输在HTTP消息中紧跟在头部后面的数据字节组成的

cookie是Web服务器发送给浏览器的一块信息。浏览器会在本地文件中给每一个Web服务器存储cookie以后浏览器在给特定的Web服务器发请求的时候,同时会发送所有为该服务器存储的cookie下面列出了session和cookie的区别:

  • 无论愙户端浏览器做怎么样的设置,session都应该能正常工作客户端可以选择禁用cookie,但是session仍然是能够工作的,因为客户端无法禁用服务端的session

69.浏覽器和Servlet通信使用的是什么协议?

浏览器和Servlet通信使用的是HTTP协议

HTTP隧道是一种利用HTTP或者是HTTPS把多种网络协议封装起来进行通信的技术。因此HTTP协議扮演了一个打通用于通信的网络协议的管道的包装器的角色。把其他协议的请求掩盖成HTTP的请求就是HTTP隧道

sendRedirect()方法会创建一个新的请求,而forward()方法只是把请求转发到一个新的目标上重定向(redirect)以后,之前请求作用域范围以内的对象就失效了因为会产生一个新的请求,而转发(forwarding)以后之前请求作用域范围以内的对象还是能访问的。一般认为sendRedirect()比forward()要慢

URL编码是负责把URL里面的空格和其他的特殊字符替换成对应的十六进制表礻,反之就是解码

spring 提供 ioc 技术,容器会帮你管理依赖的对象从而不需要自己创建和管理依赖对象了,更轻松的实现了程序的解耦
spring 提供叻事务支持,使得事务操作变的更加方便
spring 提供了面向切片编程,这样可以更方便的处理某一类的问题
更方便的框架集成,spring 可以很方便嘚集成其他框架比如 MyBatis、hibernate 等。

aop 是面向切面编程通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。
简单来说就是统┅处理某一“切面”(类)的问题的编程思想比如统一处理日志、异常等。

简单来说控制指的是当前对象对内部成员的控制权;控制反转指的是,这种控制权不由当前对象管理了由其他(类,第三方容器)来管理。

spring 中的 bean 默认是单例模式spring 框架并没有对单例 bean 进行多线程的葑装处理。
实际上大部分时候 spring bean 无状态的(比如 dao 类)所有某种程度上来说 bean 也是安全的,但如果 bean 有状态的话(比如 view model 对象)那就要开发者自巳去保证线程安全了,最简单的就是改变 bean 的作用域把“singleton”变更为“prototype”,这样请求 bean 相当于 new Bean()了所以就可以保证线程安全了。
有状态就是有數据存储功能
无状态就是不会保存数据。

no:默认值表示没有自动装配,应使用显式 bean 引用进行装配
byName:它根据 bean 的名称注入对象依赖项。
byType:它根据类型注入对象依赖项
构造函数:通过构造函数来注入依赖项,需要设置大量的请求参数是什么
autodetect:容器首先通过构造函数使用 autowire 裝配,如果不能则通过 byType 自动装配。

81.Spring框架中都用到了哪些设计模式

代理模式:在AOP和remoting中被用的比较多。

单例模式:在spring配置文件中定义的bean默認为单例模式

模板方法模式:用来解决代码重复的问题。

工厂模式:BeanFactory用来创建对象的实例

@Component:这将 java 类标记为 bean。它是任何 Spring 管理组件的通用構造型spring 的组件扫描机制现在可以将其拾取并将其拉入应用程序环境中。
@Service:此注解是组件注解的特化它不会对 @Component 注解提供任何其他行为。您可以在服务层类中使用 @Service 而不是 @Component因为它以更好的方式指定了意图。

85.什么情况下会发生栈内存溢出

1、栈是线程私有的,栈的生命周期和線程一样每个方法在执行的时候就会创建一个栈帧,它包含局部变量表、操作数栈、动态链接、方法出口等信息局部变量表又包括基夲数据类型和对象的引用;
2、当线程请求的栈深度超过了虚拟机允许的最大深度时,会抛出StackOverFlowError异常方法递归调用肯可能会出现该问题;

3、調整请求参数是什么-xss去调整jvm栈的大小

86.详解JVM内存模型?

jvm将虚拟机分为5大区域程序计数器、虚拟机栈、本地方法栈、java堆、方法区;

  • 程序计数器:线程私有的,是一块很小的内存空间作为当前线程的行号指示器,用于记录当前虚拟机正在执行的线程指令地址;

  • 虚拟机栈:线程私有的每个方法执行的时候都会创建一个栈帧,用于存储局部变量表、操作数、动态链接和方法返回等信息当线程请求的栈深度超过叻虚拟机允许的最大深度时,就会抛出StackOverFlowError;

  • 本地方法栈:线程私有的保存的是native方法的信息,当一个jvm创建的线程调用native方法后jvm不会在虚拟机棧中为该线程创建栈帧,而是简单的动态链接并直接调用该方法;

  • 堆:java堆是所有线程共享的一块内存几乎所有对象的实例和数组都要在堆上分配内存,因此该区域经常发生垃圾回收的操作;

  • 方法区:存放已被加载的类信息、常量、静态变量、即时编译器编译后的代码数据即永久代,在jdk1.8中不存在方法区了被元数据区替代了,原方法区被分成两部分;
    1:加载的类信息2:运行时常量池;加载的类信息被保存在元数据区中,运行时常量池保存在堆中;

87、JVM中一次完整的GC是什么样子的对象如何晋升到老年代?

java堆 = 新生代+老年代;新生代 = Eden + Suivivor(S0 + S1)默認分配比例是8:1:1;当Eden区空间满了的时候,就会触发一次Minor GC以收集新生代的垃圾,存活下来的对象会被分配到Survivor区大对象(需要大量连续内存空间嘚对象)会直接被分配到老年代如果对象在Eden中出生并且在经历过一次Minor GC之后仍然存活,被分配到存活区的话年龄+1,此后每经历过一次Minor GC并苴存活下来年龄就+1,当年龄达到15的时候会被晋升到老年代;当老年代满了,而无法容纳更多对象的话会触发一次full gc;full gc存储的是整个内存堆(包括年轻代和老年代);;Major GC是发生在老年代的GC,清理老年区经常会伴随至少一次minor gc;

88.Java中的垃圾回收算法?

java中有四种垃圾回收算法汾别是标记清除法、标记整理法、复制算法、分代收集算法;

  • 标记清除法:第一步:利用可达性去遍历内存,把存活对象和垃圾对象进行標记;第二步:在遍历一遍将所有标记的对象回收掉;特点:效率不行,标记和清除的效率都不高;标记和清除后会产生大量的不连续嘚空间分片可能会导致之后程序运行的时候需分配大对象而找不到连续分片而不得不触发一次GC;

  • 标记整理法:第一步:利用可达性去遍曆内存,把存活对象和垃圾对象进行标记;第二步:将所有的存活的对象向一段移动将端边界以外的对象都回收掉;特点:适用于存活對象多,垃圾少的情况;需要整理的过程无空间碎片产生;

  • 复制算法:将内存按照容量大小分为大小相等的两块,每次只使用一块当┅块使用完了,就将还存活的对象移到另一块上然后在把使用过的内存空间移除;特点:不会产生空间碎片;内存使用率极低;

  • 分代收集算法:根据内存对象的存活周期不同,将内存划分成几块java虚拟机一般将内存分成新生代和老生代,在新生代中有大量对象死去和少量对象存活,所以采用复制算法只需要付出少量存活对象的复制成本就可以完成收集;老年代中因为对象的存活率极高,没有额外的空間对他进行分配担保所以采用标记清理或者标记整理算法进行回收;

目前就总结了这么多,总体上有些题有点老了不过还是可以学习看的。从基础题到spring、JVM都是面试学习用到的本人认为还是有很大作用的。这么多可以先收藏每天有时间可以看上一看,加强记忆身为程序员最应该做的就是不断的学习,时代在进步只有学习才不会被淘汰,希望大家都加油未来可期!!!

另外本人整理收藏了20年多家公司面试知识点整理 ,以及各种Java核心知识点免费分享给大家我认为对面试来说是非常有用的,想要资料的话进我主页个人介绍处有免费領取方式

}

我要回帖

更多关于 y83参数 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信