面试总结

操作系统

什么是操作系统?

简单理解:操作系统是用户与计算机硬件中的中介。

百度百科定义:英文名Operating System,简称OS,是计算机系统中必不可少的基础系统软件,它应该用程序运行以及用户操作必备的基础环境支撑,是计算机系统的核心。是处于用户与计算机系统硬件之间用于传递信息的系统程序软件。

操作系统提供了哪些功能

  1. 进程管理(处理器管理): 其主要任务是对处理器的时间进行合理分配、对处理器的运行实施有效的管理。

  2. 存储器管理:由于多道程序共享内存资源,所以存储器管理的主要任务是对存储器进行分配、保护和扩充。

  3. 设备管理:根据确定的设备分配原则对设备进行分配,是设备与主机能够并行工作,为用户提供良好的设备使用界面。

  4. 文件管理。有效地管理文件的存储空间,合理地组织和管理文件系统,为文件访问和文件保护提供有效的方法手段。

  5. 用户接口:用户操作计算机界面称为用户接口,通过用户接口,用户只需进行简单操作,就能实现复杂的应用处理

单核CPU对多线程有影响么

单核CPU上运行的多线程程序,同一时间只能一个线程在执行,系统互帮我们切换线程,系统给每个线程分配时间来执行,看起来像是同时在执行,但是实际上是每个线程执行一会儿就换到另一个线程,切换线程增加了开销效率降低了。

HTTP与TCP的区别

TCP协议

TCP协议属于传输层协议(UDP也属于传输层协议,但是UDP协议是无状态的,TCP协议和UDP协议都工作在传输层,在程序之间传输数据)。建立一个TCP连接需要三次握手,断开一个TCP连接需要四次挥手

三次握手:

ACK(确认字符):TCP协议规定,只有ACK=1时有效,也规定连接建立后所有发送的报文的ACK必须为1。

SYN(同步序列编号 SYNchronization):在连接建立时用来同步序号。当SYN=1而ACK=0时,表明这是一个连接请求报文。对方若同意建立连接,则应在响应报文中使SYN=1和ACK=1因此,SYN置为1就表示这是一个连接请求或连接接收报文。

过程:客户端向服务端发起连接,会先将连接请求数据(SYN包)发送到服务端,询问能否建立连接,若同意建立连接服务端会想客户端回复(SYN+ACK),客户端收到回复ACK包,建立连接。因为这整个过程一共发送了三次数据所以称为三次握手。

1.为什么是三次握手呢?为什么在收到服务端传送过来的SYN和ACK就建立连接呢?

防止已失效的请求报文突然又传到服务器引起错误,两次连接可能造成客户端和服务端状态不一致的问题。三次握手是为了解决网络信道不可靠的问题。

四次挥手:

第一次挥手:若客户端主动发起关闭连接请求,客户端向服务器发起一包FIN包,表示关闭连接,客户端进入终止等待1状态。

第二次挥手:服务端向客户端发送ACK包表示进入关闭等待状态,客户端进入终止等待2状态。(服务端还可以发送未发送的数据,客户端也可以接收数据)

第三次挥手:等服务器发送完数据之后会发送FIN包,进入最终确认状态。

第四次挥手:客户端收到FIN包之后护符ACK包,进入超时等待状态,经过超时时间后关闭连接,服务器立即关闭连接。

为什么客户端要等待超时时间呢?

若客户端发送完ACK包后就直接关闭连接,若在发送中ACK包 丢失服务器将一直停留在最后确认状态。

HTTP协议

什么是HTTP协议?

HTTP是一种超文本传输协议:超文本、传输、协议之间的关系:

按照范围大小协议>传输>超文本

超文本:是一种用户界面范式,用以显示文本及与文本之间相关的内容。

传输: 两台计算机之间进行通信,会将超文本解析为二进制数据包,有传输载体如光纤、电话线等将数据包传输到另一个终端的过程。

协议:计算机之间相互通信需要共同遵守的一些规则。

工作原理

HTTP协议定义Web客户端如何从Web服务器请求Web页面,以及服务器如何把Web页面传送给客户端。HTTP协议采用了请求/响应模型。客户端向服务器发送一个请求报文,请求报文包含请求的方法、URL、协议版本、请求头部和请求数据。服务器以一个状态行作为响应,响应的内容包括协议的版本、成功或者错误代码、服务器信息、响应头部和响应数据。

  1. 客户端连接到Web服务器

  2. 发送HTTP请求

  3. 服务器接受请求并返回HTTP响应

  4. 释放TCP连接

  5. 客户端浏览器解析HTML内容

    http协议是基于TCP/IP协议之上的应用层协议。

TCP与HTTP的区别

  1. TCP对应于传输层,HTTP对应于应用层,本质来说,二者没有什么可比性。
  2. HTTP协议是建立在TCP协议基础之上的,当浏览器需要从服务器获取网页数据的时候,会发出一次HTTP请求。HTTP会通过TCP建立起一个到服务器的连接通道,当本次请求需要的数据完毕后,HTTP会立即将TCP连接断开,这个过程是很短的。所以HTTP连接是一种短连接,是一种无状态的连接。
  3. HTTP连接:HTTP协议即超文本传送协议,是web联网的基础,也是手机联网常用的协议之一,HTTP协议是建立在TCP协议之上的一种应用。

Cookie与Session的联系

Cookies是属于Session对象的一种,但是略有不同,Cookie存储在客户端内存或者一个cookie的文本文件中,而Session会占用服务器资源。

Cookie和Session都可以用来保存用户信息,Session的使用必须要用户的浏览器支持Cookie,如果浏览器不支持Cookie,或者设置为禁用Cookie,那么将不能使用Session。用户在进行访问时,服务器会通过查找session,将用户的session ID传给浏览器,而浏览器则将这个ID以cookie的形式保存在浏览器内存中。也就是说cookie是session在浏览器中的标识。

HTTP请求头中包括了哪些常见内容

  1. Host: 请求的地址域名和端口,不包括协议

  2. Connection:浏览器与服务器之间连接的类型

  3. Upgrade-Insecure-Requests: http 自动升级到https,防止跨域问题但是域名端口都不同的不会提升

  4. User-Agent: 浏览器的用户代理信息

  5. Accept: 浏览器支持的请求类型

  6. Accept-Encoding: 浏览器能处理的压缩代码

  7. Accept-Language: 浏览器当前设置语言

  8. Referer:发出请求的页面的URL

Tomcat为什么能运行MVC项目

Sringmvc框架遵守了Servlet规范,其中一条规范规定,在代码的根目录中,必须有一个META-INF/services的目录且里面有一个全类路径的文件(就是一个自定义的启动类的全类名),这个类中必须有一个方法:onStartup,

tomcat启动,其实就是去寻找onStartup方法,然后代码就开始一层层的往下执行。

MVC执行的流程

1、向服务器发送 HTTP 请求,请求被前端控制器 DispatcherServlet 捕获。

2、 DispatcherServlet 根据 -servlet.xml 中的配置对请求的 URL 进行解 析,得到请求资源标识符(URI)。然后根据该 URI,调用 HandlerMapping 获得该 Handler 配置的所有相关的对象(包括 Handler 对象以及 Handler 对 象对应的拦截器),最后以 HandlerExecutionChain 对象的形式返回。

3、 DispatcherServlet 根据获得的 Handler,选择一个合适的 HandlerAdapter。(附注:如果成功获得 HandlerAdapter 后,此时将开始 执行拦截器的 preHandler(...)方法)。

4、提取 Request 中的模型数据,填充 Handler 入参,开始执行 Handler ( Controller)。在填充 Handler 的入参过程中,根据你的配置,Spring 将 帮你做一些额外的工作:

HttpMessageConveter:将请求消息(如 Json、xml 等数据)转换 成一个对象,将对象转换为指定的响应信息。

数据转换:对请求消息进行数据转换。如 String转换成 Integer、 Double等。  数据根式化:对请求消息进行数据格式化。如将字符串转换成格式化数字 或格式化日期等。

数据验证:验证数据的有效性(长度、格式等),验证结果存储到 BindingResult或 Error中。

5、Handler(Controller)执行完成后,向 DispatcherServlet 返回一个 ModelAndView 对象;

6、根据返回的 ModelAndView,选择一个适合的 ViewResolver(必须是已 经注册到 Spring 容器中的 ViewResolver)返回给 DispatcherServlet。

7、 ViewResolver 结合 Model 和 View,来渲染视图。

8、视图负责将渲染结果返回给客户端。

JVM能运行其他语言的代码么

JVM支持的语言:Kotlin、Groovy、Scala、Jython、JRuby、Fantom、Clojure、Rhino、Ceylon、Java

JVM本地语言:java字节码。可以将任何语言编译为JVM可以理解的字节码。

HashSet的底层实现

HashSet底层使用了哈希表来支持,其操作底层都是通过调用HashMap方法实现的

HashSet会将元素存储在HashMap的key集合中,然后为value赋一个static空对象PRESENT

往Haset添加元素的时候,HashSet会先调用元素的hashCode方法得到元素的哈希值 ,然后通过元素 的哈希值经过移位等运算,就可以算出该元素在哈希表中 的存储位置。

  1. 如果算出的元素存储的位置目前没有任何元素存储,那么该元素可以直接存储在该位置上
  2. 如果算出的元素的存储位置目前已经存在有其他的元素了,那么还会调用该元素的equals方法与该位置的元素再比较一次,如果equals方法返回的是true,那么该位置上的元素视为重复元素,不允许添加,如果返回的是false,则允许添加。
posted @ 2022-04-02 14:22  赫兹x  阅读(214)  评论(0编辑  收藏  举报