分享

花了20天的时间给粉丝整理的一套"最全"的Java求职笔记(二)

 LRyab博客网 2021-08-17
    大家好,我是小编LRyab,公众号LRyab博客网,LRyab博客网是分享一些个人成长、思考方向、个人感悟、职业规划,博客涵盖java技术 vue. html. css.前端技术spring全家桶. linux运维技术在365天把你打造出来一个全栈工程师!

         点击下方卡片关注公众号,每天分享一篇技术干货!

前言:前几天有粉丝问我,网上java面试题总是参差不齐,希望我为他整理一套全面的java面试题,并且这套java面试题有个要求,必须能够让他20天就能看完这些面试题,他说现在很多面试题我看都得看3个月才能看完,然后我才能去找工作,但是自己得时间有限所以想让我帮他总结一套万能面试java求职笔记。接下来我将会至少分为12个章节进行阐述这套Java求职笔记,感兴趣的可以坚持看完!觉得不错的可以点个赞。

1为什么写这套Java求职笔记

    很早的时候我就想写一些Java求职方向的一些文章,由于很长时间耽搁了加上,有粉丝后台问我,可不可以帮他总结一些java求职笔记,他看了很多Java技术有很多技术,很迷茫不知道学哪些,我笑着说,不要着急,无论你到什么时候你都会迷茫,因为技术一直在更新,谢谢你信任我,解救你的迷茫唯一办法就是多看LRyab博客,就是这样我带着粉丝的问题,开始编写了这套Java求职笔记,看完这套求职笔记,我相信很多人都会找到属于自己的心仪工作。

2一套知识大纲技术图

 思来想去,本来不想放这套思维大纲技术图,但是很多大佬都喜欢放思维导图,那么我也放一张思维大脑图,方便大家以后学习,在java求职的时候可以带上这张脑图。

 

3Java Web入门Servlet+Http协议详解

3.1Java Web必备服务器端程序之Servlet入门

  • 什么是Servlet?

  Servlet,全称Java Servlet.是用Java编写的服务器端程序,其主要功能在于交互式地浏览和修改数据,生成动态Web内容。Servlet运行于支持Java的应用服务器中。从实现上讲,Servlet可以响应任何类型的请求,但绝大多数情况下Servlet只用来扩展基于HTTP协议的Web服务器。

  一切框架实际就是运行在tomcat服务器内的一段程序,而tomcat是与浏览器进行http协议交互的一个容器,其他的java Web层框架从Servlet到spring mvc都是基于java web服务器封装的一套java程序。

  • Servlet工作原理流程?

客户端通过浏览器发送一个Http请求至服务器。服务器启动之后去调用servlet这段小程序,这段servlet程序会根据客户端的请求生成响应内容将其发送给服务器。java应用服务器将响应返回客户端

  • 聊聊Servlet内部是如何工作的?

      用户请求被tomcat载入Servlet容器,调用Servlet的Service()方法,并传入一个ServletRequest对象和一个ServletResponse对象。ServletRequest对象和ServletResponse对象都是由Servlet容器封装好的,并不需要程序员去实现,程序员可以直接使用这两个对象。

 ServletRequest中封装了当前的Http请求,因此,开发人员不必解析和操作原始的Http数据。ServletResponse表示当前用户的Http响应,程序员只需直接操作ServletResponse对象,将响应返回给用户客户端。

  • Servlet接口中常用的方法或者API

 init() getServletConfig()  service()  destroy()

  • 简单描述一下servlet的生命周期

 init(),service(),destroy()是servlet的生命周期方法,代表servlet从初始化,到工作状态,最终到销毁状态的过程。

  当servlet第一次被请求时,servlet容器就会开始初始化一个servlet对象出来,这个方法只会被调用一次,我们可以使用init()方法做一些初始化的工作

  service()方法,每当请求servlet时,servlet都会调用这个方法,就像电脑一样需要不停的根据计算机的指令去工作。第一次请求时servlet容器会先调用init()方法初始化一个servlet对象出来,然后再调用service()方法进行工作,但是在后续请求中servlet容器只会调用service方法。

   destroy()方法,当要销毁servlet时,servlet容器就会调用这个方法,卸载或者停止tomcat应用服务器都会调用这个销毁的方法,这个方法写一些清除操作。

  • 聊聊servletContext上下文对象

 一般在所有的封装的框架中,都会又一个上下文的概念,servlet框架也不例外,servletContext对象表示servlet应用程序上下文对象。

  将一个应用程序部署到多个分布式机器上去,每台java虚拟机都会有一个ServletContext对象,为什么要存在一个ServletContext对象呢?因为有了这个ServletContext对象,就可以共享从应用程序中所有地方访问到信息,并且可以动态注册web对象。可以将对象保存在servletContext中的一个内部Map中,设置程序的对象信息属性。

3.2HTTPServlet技术

  •  什么是HttpServlet?

  HttpServlet继承了GenericServlet抽象类,GenericServlet抽象类实现了Servlet、ServletConfig接口。

  •  HttpServlet中之HttpServletRequest内部封装请求

       HTTPServletRequest封装了分别获得HTTP请求的请求行,请求头和请求体的API方法。

       

     

  • HttpServlet中之HttpServletResponse内部封装请求

  HttpServletResponse专门用来封装HTTP响应消息。由于HTTP请求消息分为状态行,响应消息头,响应消息体三部分,因此,在HttpServletResponse接口中定义了向客户端发送响应状态码,响应消息头,响应消息体的方法。

 

  • Response浏览器响应流程

Tomcat首先会封装浏览器请求过来的数据为request和response对象,web应用处理完数据会将数据设置到Response缓冲区中,tomcat会从Response缓冲区中获取到数据,组装成浏览器能够识别的Http响应。

  • 浏览器-tomcat-HttpServlet工作流程

 实际就是一个客户端与服务器的Http交互请求与响应

  • Request请求乱码问题解决办法

  service中使用的编码是:ISO8859-1编码,但是不支持中文,因此会出现乱码,需要手动修改编码为UTF-8,才能解决中文乱码

  • Response服务器端响应乱码问题

 如果编码和解码使用码表不一致,就会导致乱码。reponse缓冲区默认编码为Iso8859-1此时码表中没有中文,所以需要更改为Response的编码方式为UTF-8.

如果服务器端改变了编码为UTF-8,但是接收端浏览器仍然使用的是GB2312,还是无法显示中文,因此需要提前告知浏览器使用UTF-8编码去解码。设置response.setCharacterEncoding("utf-8"),和response.setHeader("content-type","Text/html;charest=utf-8").在java servlet提供了一个合二为一的方法:response.setContentType("text/html;charset=UTF-8")这个方法包含了上面的两个方法的调用,因此在实际的开发中,只需要调用一个response.setContentType("text/html;charset=UTF-8")方法即可。

  • ServletContext是一个域对象

 Servlet就是一个域对象,存放域值,在整个应用中有且仅有一份,我们可以在Servlet域对象中存东西,然后再别的地方取出来。

  • Servlet的监听器

      主要监听一些上下文对象ServletContext页面初始化,例如session的创建,监听在线网站人数统计

  • Filter过滤器

  filter可以再一个请求到达servlet之前预先处理用户的一些请求,也可以在离开servlet时处理Http响应。

  • 拦截器

  与过滤器类似,通过层层拦截,处理用户请求和响应

3.3计算机网络OSI七层模型

3.4TCP与IP协议

TCP协议:传输控制协议,就是对数据的传输进行一定的控制

  • TCP三次握手

TCP三次握手:即为TCP连接的建立

第一次握手:建立连接时,客户端发送SYN包(seq=x)到服务器,并进入SYN_SENT状态,等待服务器确认;      第二次握手:服务器收到SYN包,为了确认客户的SYN包,所以发送一个确认包ACK(ack=x+1),同时自己也发送一个SYN包(seq=y),即SYN+ACK包,此时服务器进入SYN_RECV状态。

第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=y+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手。

  • TCP四次挥手

TCP四次握手:即为TCP连接的释放。

第一次挥手:客户端发送一个FIN(seq=u)包,代表连接释放,并停止发送数据,客户端进入FIN-WAIT-1(终止等待1)状态。第二次挥手:服务器收到客户端发送的释放连接报文,发出确认报文ACK包(ack=u+1),并且带上序列号seq=v,服务端进入CLOSE-WAIT(关闭等待)状态。客户端收到确认请求后,进入FIN-WAIT-2(终止等待2)状态。

第三次挥手:服务器将最后的数据发送完后,向客户端发送释放连接报文FIN包(seq=w)。且由于服务器处于半关闭状态,服务器会像第二次挥手过程中一样,发送ACK包(ack=u+1)。服务器就进入了LAST-ACK(最后确认)状态,等待客户端的确认。

第四次挥手:客户端收到服务器的连接释放报文后,发出确认报文ACK包(ack=w+1),且带上序列号seq=u+1,发送完后,客户端进入TIME-WAIT(时间等待)状态。而服务器收到客户端发出的确认,立即进入CLOSED状态。

3.5Http协议详解

  • 什么是Http协议?

  HTTP协议:超文本传输协议,是基于TCP的协议,默认为80端口。它的作用是用来规定客户端和服务器的数据传输格式。是一种用于请求与响应模式的、无状态、无连接 的应用层协议。由于HTTP协议是一种请求-响应模式,所以一般需要关注HTTP请求和HTTP响应。

  • HTTP协议 无状态、无连接特点及解决方案

无状态:

含义:(1)对事务处理没有记忆能力,服务器不知道客户端是什么状态,给服务器发送HTTP请求之后,服务器回应之后,不会有任何记录;(2)每个请求都是独立的;

优点:释放服务器压力。

缺点:服务器处理后续请求,需要重传。例如登录系统后,如果不记录登录的相关信息,后续进行添加购物车操作的时候,需要登录的相关信息。

解决方案:(1)Cookie:将前面的请求信息保存在一个临时位置。cookies值存在浏览器里,关闭浏览器后被删除,也可以手动去删除。(2)Session:可以理解为永久的cookie值,保存在服务器上,并传递给客户端,并保存在内存中。问题:资源占用,session超时时间,清除session ID。

无连接:

含义:(1)限制每次连接只处理一个请求;(2)服务器处理客户端的请求、并接受客户端的应答后,即断开连接;

初衷:用户量(十万、上百万)页面请求、单个用户间歇性大(很长时间上没有交互),有突发性、瞬时性。数据没有关联,导致资源浪费,从而服务器压力很大。

设计:从而设计为处理完请求后,释放连接。

问题:网页越来越复杂了,页面中有很多图片,如果每次都要建立一次TCP连接,效率就会很低。

解决方案:connection响应头字段值 Keep-Alive 表示保持tcp连接不关闭,不会永久保持连接,服务器可设置

  • 谈谈你对Https协议的理解

HTTPS协议:超文本传输安全协议,是以网络安全为目标的HTTP通道,简单来讲就是HTTP的安全版。它加密数据并确保其机密性,可保护用户在网站交互时免于窃取个人信息及计费数据。

可以理解为:(1)HTTPS=HTTP+SSL(2)HTTPS=HTTP+加密+身份认证+完整性。其中加密:密钥;身份认证:证书(申请)双向认证;完整性保护:哈希算法 计算一个hash值,验证消息的完整性 摘要=摘要 保证数据没有被篡改 。

  • 浏览器输入一个http的url按回车背后经历了哪些流程?

1、首先,在浏览器地址栏中输入url,先解析url,检测url地址是否合法

2、浏览器先查看浏览器缓存-系统缓存-路由器缓存,如果缓存中有,会直接在屏幕中显示页面内容。若没有,则  跳到第三步操作。

浏览器缓存:浏览器会记录DNS一段时间,因此,只是第一个地方解析DNS请求;

操作系统缓存:如果在浏览器缓存中不包含这个记录,则会使系统调用操作系统,获取操作系统的记录(保存最近的DNS查询缓存);

路由器缓存:如果上述两个步骤均不能成功获取DNS记录,继续搜索路由器缓存;

ISP缓存:若上述均失败,继续向ISP搜索。

3、在发送http请求前,需要域名解析(DNS解析),解析获取相应的IP地址。

4、浏览器向服务器发起tcp连接,与浏览器建立tcp三次握手。

5、握手成功后,浏览器向服务器发送http请求,请求数据包。

6、服务器处理收到的请求,将数据返回至浏览器

7、浏览器收到HTTP响应

8、浏览器解码响应,如果响应可以缓存,则存入缓存。

9、 浏览器发送请求获取嵌入在HTML中的资源(html,css,javascript,图片,音乐······),对于未知类型,会弹出对话框。

10、 浏览器发送异步请求。

11、页面全部渲染结束。

  • 基于TCP的通信协议scoket

      Socket 又称”套接字”,是系统提供的用于网络通信的方法.TCP编程的客户端一般步骤是:

  1、创建一个socket,用函数socket();

  2、设置socket属性,用函数setsockopt();* 可选

  3、绑定IP地址、端口等信息到socket上,用函数bind();* 可选

  4、设置要连接的对方的IP地址和端口等属性;

  5、连接服务器,用函数connect();

  6、收发数据,用函数send()和recv(),或者read()和write();

      7、关闭网络连接;

  • Http协议中有那些请求方式?

GET:用于请求访问已经被URI(统一资源标识符)识别的资源,可以通过URL传参给服务器

POST:用于传输信息给服务器,主要功能与GET方法类似,但一般推荐使用POST方式。

PUT:传输文件,报文主体中包含文件内容,保存到对应URI位置。

HEAD:获得报文首部,与GET方法类似,只是不返回报文主体,一般用于验证URI是否有效。

DELETE:删除文件,与PUT方法相反,删除对应URI位置的文件。

OPTIONS:查询相应URI支持的HTTP方法。

  • get与post请求区别?

区别一:

get重点在从服务器上获取资源。

post重点在向服务器发送数据。

区别二:

get传输数据是通过URL请求,以field(字段)= value的形式,置于URL后,并用"?“连接,多个请求数据间用”&"连接,如http://www./Test/login?username=admin&password=admin123,这个过程用户是可见的。

post传输数据通过Http的post机制,将字段与对应值封存在请求实体中发送给服务器,这个过程对用户是不可见的。

区别三:

Get传输的数据量小,因为受URL长度限制,但效率较高。

Post可以传输大量数据,所以上传文件时只能用Post方式。

区别四:

get是不安全的,因为URL是可见的,可能会泄露私密信息,如密码等。

post较get安全性较高。

区别五:

get方式只能支持ASCII字符,向服务器传的中文字符可能会乱码。

post支持标准字符集,可以正确传递中文字符。

  • Http协议有那些特征?

支持客户/服务器模式、简单快速、灵活、无连接、无状态

  • Http协议实现的原理机制

     1域名解析过程

     2三次握手过程

     3发起Http请求

     4响应Http请求并得到HTML代码

     5浏览器解析HTML代码

     6浏览器对页面进行渲染呈现给用户

  • 常见的Http协议状态

200:请求被正常处理204:请求被受理但没有资源可以返回

206:客户端只是请求资源的一部分,服务器只对请求的部分资源执行GET方法,相应报文中通过Content-Range指定范围的资源。

301:永久性重定向

302:临时重定向

303:与302状态码有相似功能,只是它希望客户端在请求一个URI的时候,能通过GET方法重定向到另一个URI上

304:发送附带条件的请求时,条件不满足时返回,与重定向无关

307:临时重定向,与302类似,只是强制要求使用POST方法

400:请求报文语法有误,服务器无法识别

401:请求需要认证

403:请求的对应资源禁止被访问

404:服务器无法找到对应资源

500:服务器内部错误

503:服务器正忙

  • 说一下Http优化方案

 利用负载均衡优化和加速HTTP应用

 利用HTTP Cache来优化网站

4结束语

  我时常问自己,自己是不是比别人聪明,答案是否定的,工作这么多年我明白了一个道理,自己没有比别人聪明,但是我比别人有核心优势,我的核心优势在哪里呢?苦干,积累,深耕。谁又说的明白呢?交给时间吧。

5个人说明

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多