写点什么

2021Java 面试笔试总结

发布于: 2021 年 08 月 04 日

1、什么是 Nginx,谈谈个人都理解,项目中是否用到,为什么要用,有什么优点?

Nginx ,是一个 Web 服务器和反向代理服务器用于 HTTP、HTTPS、SMTP、POP3 和 IMAP 协议。


主要功能如下:


1、正向、反向代理 2、负载均衡、分流 3、虚拟主机(绑定 host)


优点:


跨平台、配置简单,非阻塞、高并发连接、内存消耗小、成本低廉。

2、正向代理和反向代理的区别是什么?


正向代理是一个位于客户端和原始服务器之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定原始服务器,然后代理向原始服务器转交请求并将获得的内容返回给客户端。代理服务器和客户端处于同一个局域网内。


比如说 fanqiang。我知道我要访问谷歌,于是我就告诉代理服务器让它帮我转发。


反向代理实际运行方式是代理服务器接受网络上的连接请求。它将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给网络上请求连接的客户端 。代理服务器和原始服务器处于同一个局域网内。


比如说我要访问 taobao,对我来说不知道图片、json、css 是不是同一个服务器返回回来的,但是我不关心,是反向代理 处理的,我不知道原始服务器。

3、Nginx 如何处理 HTTP 请求的?

它结合多进程机制(单线程)和异步非阻塞方式。


1、多进程机制(单线程)


服务器每当收到一个客户端时,就有 服务器主进程 ( master process )生成一个 子进程( worker process )出来和客户端建立连接进行交互,直到连接断开,该子进程就结束了。


2、异步非阻塞机制


每个工作进程 使用 异步非阻塞方式 ,可以处理 多个客户端请求 。运用了 epoll 模型,提供了一个队列,排队解决。


当某个 工作进程 接收到客户端的请求以后,调用 IO 进行处理,如果不能立即得到结果,就去 处理其他请求 (即为 非阻塞 );而 客户端 在此期间也 无需等待响应 ,可以去处理其他事情(即为 异步 )。


当 IO 返回时,就会通知此 工作进程 ;该进程得到通知,暂时 挂起 当前处理的事务去 响应客户端请求 。

4、Nginx 的 master 和 worker 是如何工作的?

这跟 Nginx 的多进程、单线程有关。(一个进程只有一个主线程)。


为什么要用单线程?


采用单线程来异步非阻塞处理请求(管理员可以配置 Nginx 主进程的工作进程的数量),不会为每个请求分配 cpu 和内存资源,节省了大量资源,同时也减少了大量的 CPU 的上下文切换,所以才使得 Nginx 支持更高的并发。


简单过程:


主程序 Master process 启动后,通过一个 for 循环来 接收 和 处理外部信号 ;


主进程通过 fork() 函数产生 worker 子进程 ,每个子进程执行一个 for 循环来实现 Nginx 服务器对事件的接收和处理 。


详细过程:


1、Nginx 在启动后,会有一个 master 进程和多个相互独立的 worker 进程。2、master 接收来自外界的信号,先建立好需要 listen 的 socket(listenfd) 之后,然后再 fork 出多个 worker 进程,然后向各 worker 进程发送信号,每个进程都有可能来处理这个连接。3、所有 worker 进程的 listenfd 会在新连接到来时变得可读 ,为保证只有一个进程处理该连接,所有 worker 进程在注册 listenfd 读事件前抢占 accept_mutex ,抢到互斥锁的那个进程注册 listenfd 读事件 ,在读事件里调用 accept 接受该连接。4、当一个 worker 进程在 accept 这个连接之后,就开始读取请求、解析请求、处理请求,产生数据后,再返回给客户端 ,最后才断开连接。

5、Nginx 常用命令有哪些?

  • 启动 nginx 。

  • 停止 nginx -s stop 或 nginx -s quit 。

  • 重启 nginx -s reload 或 service nginx reload 。

  • 重载指定配置文件 .nginx -c /usr/local/nginx/conf/nginx.conf 。

  • 查看 nginx 版本 nginx -v 。

6、nginx 中 500、502、503、504 有什么区别?

500


Internal Server Error 内部服务错误,比如脚本错误,编程语言语法错误。


502


Bad Gateway 错误,网关错误。比如服务器当前连接太多,响应太慢,页面素材太多、带宽慢。


503


Service Temporarily Unavailable,服务不可用,web 服务器不能处理 HTTP 请求,可能是临时超载或者是服务器进行停机维护。


504


Gateway timeout 网关超时,程序执行时间过长导致响应超时,例如程序需要执行 20 秒,而 nginx 最大响应等待时间为 10 秒,这样就会出现超时。

最后

我还为大家准备了一套体系化的架构师学习资料包以及 BAT 面试资料,供大家参考及学习,戳这里免费领取


已经将知识体系整理好(源码,笔记,PPT,学习视频)免费领取。





用户头像

VX:Lzzzzzz63 领取资料 2021.07.07 加入

还未添加个人简介

评论

发布
暂无评论
2021Java面试笔试总结