当前位置: 首页 > news >正文

nginx和docker面试题

一、Nginx面试题

1. Nginx 是什么?有什么特点?

答案:

Nginx 是一款高性能、轻量级的 HTTP Web 服务器和反向代理服务器,也可作为邮件代理、负载均衡器。

特点:

  • 占用内存小,并发能力强

  • 异步非阻塞、事件驱动模型

  • 支持高并发连接(万级并发)

  • 可做反向代理、负载均衡、动静分离

  • 稳定性高、扩展性强


2. Nginx 为什么高并发、高性能?

答案:

  • 采用多进程 + 异步非阻塞事件驱动模型(epoll/kqueue)

  • 一个 master 进程管理多个 worker 进程

  • 每个 worker 单线程处理大量请求,不阻塞

  • 内存占用极低,连接复用好

  • 处理请求不创建新进程 / 线程,开销极小

3. 什么是反向代理?Nginx 如何实现?

答案:

正向代理:代理客户端,替客户端访问外网。例如vpn,这里可以多讲解一下vpn的原理。

反向代理:服务器根据客户端的请求,从其关系的一组或多组后端服务器(如Web服务器)上获取资源,然后再将这些资源返回给客户端,客户端只会得知代理服务器的IP地址,而不知道在代理服务器后面的服务器集群的存在。

反向代理整个流程:由客户端发起对代理服务器的请求,代理服务器在中间将请求转发给某一个服务器,服务器将结果返回给代理服务器,代理服务器再将结果返回给客户端。


4. Nginx 负载均衡有哪些策略?

答案:

  • 轮询:多个服务器,按照顺序去访问,这样的话,每个服务器都能获得相同的请求次数。

  • 随机:根据随机算法获取目标服务器地址,进行请求。

  • 一致性hash:有相同hash码的请求,发送到 相同服务器上。

  • 最小连接数:将请求转发给连接数最少的目标服务器。

1、轮询(默认):如果目标服务器性能相同,一般使用轮询。 默认不修改即可

2、权重:如果目标服务器性能不同,一般使用权重。

upstream tomcat-nginx{ # 负载均衡服务器设置:主要用于负载均衡和设置一系列的后端服务器 server 127.0.0.1:8080 weight=1; server 127.0.0.1:8081 weight=2; server 127.0.0.1:8082 weight=3; }

3、ip哈希 同一个客户端访问同一个目标服务器。 根据客户端的ip进行哈希算法,得到指定的服务器。 作用:会话保持。

upstream tomcat-nginx{ # 负载均衡服务器设置:主要用于负载均衡和设置一系列的后端服务器 ip_hash; server 127.0.0.1:8080 weight=1; server 127.0.0.1:8081 weight=2; server 127.0.0.1:8082 weight=3; }

不推荐使用ip哈希,因为性能较低。使用token进行会话跟踪。

4、最少连接数:将请求转发给连接数最少的目标服务器。

upstream tomcat-nginx{ # 负载均衡服务器设置:主要用于负载均衡和设置一系列的后端服务器 least_conn; server 127.0.0.1:8080 weight=1; server 127.0.0.1:8081 weight=2; server 127.0.0.1:8082 weight=3; }

4、响应时间最少(第三方):统计目标服务器的处理请求的平均时长,谁的时间短给谁。

upstream tomcat-nginx{ # 负载均衡服务器设置:主要用于负载均衡和设置一系列的后端服务器 fair; server 127.0.0.1:8080 weight=1; server 127.0.0.1:8081 weight=2; server 127.0.0.1:8082 weight=3;}

5. Nginx 常用优化配置

答案:

  • 调整 worker_processes:设为 CPU 核心数

  • worker_connections:增大最大连接数

  • 开启 keepalive 长连接

  • 开启 gzip 压缩

  • 设置 expires 缓存静态资源

  • 隐藏 Nginx 版本号

  • 限制请求速率、并发连接防攻击


6. Nginx 常用命令

答案:

  • 启动:nginx

  • 停止:nginx -s stop

  • 优雅停止:nginx -s quit

  • 重新加载配置:nginx -s reload

  • 测试配置:nginx -t

  • 查看版本:nginx -v


7. Nginx 和 Apache 区别

答案:

  • Nginx:异步非阻塞,高并发强,轻量,适合静态、反向代理

  • Apache:同步多进程,稳定,模块丰富,适合动态请求

  • 高并发场景:Nginx 远优于 Apache

8. Nginx 集群问题是什么?如何解决?

答案:

惊群:多个 worker 同时争抢同一个连接,造成资源浪费。

Nginx 解决方案:

  • 采用互斥锁(accept_mutex)

  • 同一时间只有一个 worker 去 accept 连接


二、Docker面试题

1. Docker 是什么?

答案:

Docker 是一个开源的应用容器引擎,基于 Go 语言开发,遵循 Apache2.0 协议。

可以让开发者打包应用及依赖到一个轻量级、可移植的容器中,然后发布到任何主流 Linux 机器上,实现一次封装,到处运行


2. 容器 vs 虚拟机(必问)

答案:

  • 传统虚拟机,虚拟出一条硬件,运行一个完整的操作系统,然后在这个系统上安装和运行软件

  • 容器内的应用直接运行在宿主机的内容,容器是没有自己的内核的,也没有虚拟我们的硬件,所以就轻便了

  • 每个容器间是互相隔离,每个容器内都有一个属于自己的文件系统,互不影响


3. Docker 三大核心概念

答案:

  1. 镜像(Image):只读模板,用来创建容器。

  2. 容器(Container):镜像的运行实例。

  3. 仓库(Repository):存放镜像的地方(Docker Hub、私有仓库)。


4. Docker 为什么快?

答案:

  • 容器共享宿主机内核,不需要启动完整 OS

  • 容器是进程级启动,秒级启动

  • 联合文件系统(UnionFS),分层存储,复用层


5. Docker 常用命令(必背)

答案:

plaintext

# 搜索/拉取/查看/删除镜像 docker search docker pull docker images docker rmi ​ # 容器操作 docker run # 创建并启动 docker ps # 查看运行中容器 docker ps -a # 所有容器 docker start/stop/restart 容器ID docker rm # 删除容器 docker exec -it 容器ID /bin/bash # 进入容器 docker logs 容器ID # 查看日志

6.docker run常用参数

答案:

  • -d:后台运行

  • -p:端口映射 宿主机:容器

  • -P:随机端口

  • --name:指定容器名

  • -v:挂载目录

  • --restart=always:开机自启

  • -e:设置环境变量


7. Docker 数据卷(Volume)是什么?

答案:

数据卷是宿主机目录 / 文件,直接挂载到容器内部。

作用:

  • 持久化数据,容器删除数据不丢

  • 容器与宿主机共享数据

  • 多个容器共享数据


8. Docker 网络模式

答案:

四种常用网络模式:

  1. bridge:默认,独立网络,端口映射

  2. host:与宿主机共享网络

  3. none:无网络

  4. container:与另一个容器共享网络

    https://developer.aliyun.com/article/1688008 这个很重要


9. Dockerfile 是什么?

答案:

Dockerfile 是构建镜像的脚本文件,包含一条条指令。

通过docker build自动构建镜像。


10. Dockerfile 常用指令

答案:

plaintext

FROM # 基础镜像 MAINTAINER # 作者 RUN # 构建时执行命令 CMD # 容器启动默认命令 ENTRYPOINT # 固定启动命令 EXPOSE # 暴露端口 ENV # 环境变量 ADD/COPY # 拷贝文件 VOLUME # 数据卷 WORKDIR # 工作目录

11. CMD vs ENTRYPOINT

答案:

  • CMD:可被命令行参数覆盖

  • ENTRYPOINT

    :不会被覆盖,一定会执行

    常配合使用:

    ENTRYPOINT + CMD

12.如何优化 Docker 镜像体积?

  1. 选择体积小的基础镜像;

  2. 合并 RUN 命令;

  3. 删除无用缓存;

  4. 使用.dockerignore

  5. 使用多阶段构建。

13.镜像和容器的区别

镜像是静态的模板,用于创建容器。 容器是镜像的运行实例,带有可写层。 多个容器可以共享同一个镜像。

http://www.jsqmd.com/news/449392/

相关文章:

  • 2026必学!AI大模型架构全解析:基础模型、微调与插件谁更重要?(收藏必备)
  • 01-02-03 C++编程知识 C++语言的IO(基础) cin和cout
  • 机房U位混乱难解?这个系统用数据说话,精准优化每一分资源!
  • 自定义类型 Traits
  • 实时网络同步技术
  • nodejs基于vue的天天足浴客人KTV包厢预约管理系统vue
  • 【必藏】大模型开发必看:Agent、传统编程与Workflow的本质区别及协同之道
  • 计算机毕业设计java基于Java语言的健身房信息管理系统基于B/S架构的健身房会员管理与课程预约系统设计与实现面向健身场馆的会员充值、器材使用与教练管理一体化平台开发
  • Python在金融科技(FinTech)中的应用
  • 基于SpringBoot+Vue的二手交易平台的系统设计与实现
  • 看完就会:专科生专属的AI论文网站 —— 千笔·专业论文写作工具
  • 写论文省心了 9个一键生成论文工具:MBA毕业论文+开题报告+学术写作深度测评
  • 3月7日(130-132题)
  • 鸿蒙应用开发UI基础第二十节:ArkTS 状态管理 V1 进阶 - 深层监听、跨级共享与渲染优化 - 鸿蒙
  • 【必收藏】大模型产业落地全流程指南:从技术选型到企业价值转化
  • C++中的享元模式
  • 英卡工业设备(上海)有限公司电话查询:业务咨询与使用建议参考 - 十大品牌推荐
  • 自主智能体记忆架构实战教程(非常详细),从OpenClaw到企业级落地,收藏这一篇就够了!
  • C++中的迭代器模式
  • 北京美林泉保洁服务有限公司电话查询:服务预约与沟通注意事项 - 十大品牌推荐
  • STL容器内部实现剖析
  • 【AI开发】—— 山东省智能政策助手部署实战:从 0 到 1 上线与更新避坑指南
  • C++中的构建器模式
  • 英卡工业设备(上海)有限公司电话查询:联系前需了解的事项 - 十大品牌推荐
  • 苍穹外卖:菜品新增功能全流程解析
  • 模板代码跨平台适配
  • 嵌入式C++调试技术
  • 代码覆盖率工具实战
  • 实时数据压缩库
  • 分布式文件系统设计