当前位置 : 首页> 求职攻略 > 金山银四2021年Java工程师到底如何成功面试

金山银四2021年Java工程师到底如何成功面试

时间:2021-03-14 21:47:19   已访问:896次
热门专业

2021-JAVA开发工程师面试,高级开发面试,小红书面试,木仓科技面试,金三银四面试!

url从客户端到服务端经历了什么?

第一步先由浏览器解析URL中的协议、主机、端口、路径、构建一个http请求。浏览器在发送请求之前会先检测缓存是否命中,如果命中则不会发起请求。(缓存中包含:强缓存、协商缓存、存储位置)之后便会经历DNS解析后返回对应的IP地址

第二步在获取到对应的IP地址后便会创建一个TCP Connection用来在客户端和服务端进行通信,也就是最初的三次握手:第一次握手由Client端发起一个包含位码syn和seq两个信息给到服务端,服务端通过解析syn知道client想要发起一个连接请求。第二次握手由服务端发起,服务端会生成一个acknumber=seq+1,syn=1,ack=seq+1,seq发送给客户端,告知客户端可以发送了。第三次握手,由客户端发起在检验ack码和syn码全部正确后,便建立连接成功。

在第一次收到服务端反馈的时候,此时的连接会被放入一个半连接队列中,完成三次握手后便会放入全连接队列中

第三步就是发送给web service处理请求,这里分为静态资源和动态资源,静态资源根据路径直接寻址获取,动态资源需要webservice将请求委托给对应的服务处理,最终在进行返回结果集

第四步浏览器渲染,作为Java后端开发工程师对于这块简单了解即可,基本分为,拿到字节码转为字符然后令牌化然生成dom树之后在进行渲染

第五步就是四次挥手:刚开始双方都处于established状态,假如是客户端先发起关闭请求

第一次挥手:客户端发送一个FIN报文,报文中会指定一个序列号。此时客户端处于FIN_WAIT1状态

第二次挥手:服务端收到FIN之后,会发送ACK报文,且把客户端的序列号值+1作为ACK报文的序列号值,表明已经收到客户端的报文了,此时服务端处于CLOSE_WAIT状态

第三次挥手:如果服务端也想断开连接了,和客户端的第一次挥手一样,发送FIN报文,且指定一个序列号。此时服务端处于LAST_ACK的状态

需要过一阵子以确保服务端收到自己的ACK报文之后才会进入CLOSED状态,服务端收到ACK报文之后,就处于关闭连接了,处于CLOSED状态。

上述就是一个url到服务端的基本流程中间还有许多细节的点可以参考从输入URL开始建立前端知识体系

Java类加载过程

在面试一家中字开头的企业,人家问了我这个问题,着实有些生疏,今天接着记录一下java类加载过程

首先我们java的类加载过程是:加载-验证-准备-解析-初始化。

类加载器分类有:

- Bootstrap ClassLoader 这个加载器用来加载java的核心类库

- Extension ClassLoader 这个加载器可以用来加载指定目录下的文件

- Application Classloader 用来加载环境变量和系统属性配置下的文件,Java中的类就是由此加载器完成

- 自定义加载器 此加载器可以用来加载网络上的相关文件

类加载最为重要的类加载机制-双亲委派机制。简言之就是类加载器由自定义-application-extension-bootstrap这样的顺序依次委派至最顶层,如果bootstrap可以完成加载则由顶级父加载器完成加载,不行则交由子类自行加载

而对于一种特殊的情况,就是第三方包加载spi,对于这种类,java采用了线程上下文加载器来实行委托加载


推荐内容