Nginx+Linux+Docker
Nginx面试题
一、 高并发 高可用 高性能
- 高并发:通常是指通过设计保证系统能够同时并行处理很多请求。
- 高可用:通常来描述一个系统经过专门的设计,从而减少停工时间,而保持其服务的高度可用性。
- 高性能:是指服务响应时间快,(CPU/处理器/内存)特别是在高并发下响应时间不会急剧增加。
二、 什么是Nginx,Nginx有哪些应用场景
Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强
应用场景:
静态资源处理、动静分离 、反向代理、负载均衡。Tomcat集群。
三、正向代理和反向代理区别
1.正向代理是在客户端的。比如需要访问某些国外网站,我们可能需要购买vpn。并且vpn是在我们的用户浏览器端设置的(并不是在远端的服务器设置)。浏览器先访问vpn地址,vpn地址转发请求,并最后将请求结果原路返回来。
2.反向代理是作用在服务器端的,是一个虚拟Ip。对于用户的一个请求,会转发到多个后端处理器中的一台来处理该具体请求
四、 长连接和短连接区别
- 短连接:连接->传输数据->关闭连接,浏览器和服务器每进行一次HTTP操作,就建立一次连接,但任务结束就中断连接。
- 长链接:连接->传输数据->保持连接 -> 传输数据-> …->直到一方关闭连接,多是客户端关闭连接。长连接指建立SOCKET连接后 不管是否使用都保持连接,但安全性较差。
五、 HTTP和HTTPS区别
- https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。
- http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。
- http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
- http的连接是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全
六、什么是 集群 和 负载均衡
- 同一个业务,部署在多个服务器上,对外提供相同的功能。
- 将服务器接收到的请求按照规则分发的过程,称为负载均衡
七、Nginx负载均衡有哪些规则(算法)?
1. 轮询(默认)
2. 指定轮询几率
3. ip_hash
4. url_hash(第三方)
5. fair(第三方)
八、描述tcp三次握手和四次挥手的全过程
1. 第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SENT状态,等待服
务器确认;SYN:同步序列编号(Synchronize Sequence Numbers)
2. 第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包
(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
3. 客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和
服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握
1. 在客户端,服务端之间的连接建立好之后。客户端会主动向服务端发送一段带有结束码(Fin)的询
问信息(大致就像问服务端,你数据发送完了吗,我要关闭连接了)给服务端这是第一次挥手;
2. 服务端就会回应客户端一个信息(我还没有传完了,不能关闭连接),带有确认码(ack)这是第二
次挥手;
3. 当服务器传完数据之后,就会向客户端发送一个带有结束码(Fin)的消息(我数据传输完了,可以
关闭连接),这是第三次挥手;
4. 客户端收到服务端的消息之后,会返回服务一个带有确认码(ack)的消息(好的,我知道了,那就
关闭连接),这是第四次挥手。这之后,整个连接就关闭了。
九、描述TCP和UDP区别
TCP | UDP | |
---|---|---|
是否连接 | 面向连接 | 面向非连接 |
传输可靠性 | 可靠 | 不可靠 |
应用场景 | 少量数据 | 传输大量数据 |
速度 | 慢 | 快 |
- TCP应用场景:效率要求相对低,但对准确性要求相对高的场景。因为传输中需要对数据确认、重发、排序等操作,相比之下效率没有UDP高。例如:文件传输(准确高要求高、但是速度可以相对慢)、接受邮件、远程登录
- UDP应用场景:效率要求相对高,对准确性要求相对低的场景。例如:QQ聊天、在线视频、网络语音电话(即时通讯,速度要求高,但是出现偶尔断续不是太大问题,并且此处完全不可以使用重发机制)、广播通信(广播、多播)。
Linux相关命令
1.描述常见的Linux命令(说10个)并描述其作用
命令 | 功能 | 命令 | 功能 |
---|---|---|---|
pwd | 显示当前目录 | chmod | 控制用户对文件的权限 |
cd | 切换目录 | find | 在当前目录下查找子目录与文件 |
grep | 按字符查找 | mkdir | 创建文件夹 |
touch | 创建文件 | rmdir | 删除空文件夹 |
cat、more | 查看文件 | tar [-zxvf] [-zcvf] | 解压文件、压缩文件 |
kill [][-1][-1] [-9] | 重新加载、杀死进程 | ifconfig | 显示网络设备及网络信息 |
2.在Linux中,如何查看日志?有哪些方式和命令
find -name ‘日志文件名’
cat 显示指定文件的所有内容(用于文件内容少的情况)
more/less (用于文件内容多的情况)
grep -i ERROR 日志名称 一般用来查看日志的错误部分
tail[必要参数][选择参数][文件] -f 循环读取 -q 不显示处理信息 -v 显示详细的处理信息 -c<数目> 显示的字节数 -n<行数> 显示行数
head:跟tail是相反的head是看前多少行日志,head其他参数参考tail
3.Linux中浏览文本的命令有哪些?分别是什么和区别
cat 文件名:一次性执行,全部显示,只能查看少量信息的数据;
tac 文件名:倒序显示文件内容,从最后一行开始;
more 文件名:查看文件可以分页显示,一般用来浏览文本较大的文件;
less -mN : 分页显示带行号和百分比
head -n 行数:显示头部的行数信息(默认是10行)
tail -n 行数:显示尾部的行数信息(默认是10行)
4.Linux中,查看进程的命令?查看CPU的命令?
-
查看进程
ps -ef 展示当前进程的信息,以列表呈现 -
查看CPU使用情况
top命令,top是一个动态显示过程,提供了实时的对系统处理器的状态监视。
Docker 相关面试题
1.描述什么Docker,为什么要使用Docker
Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的、可移植的、自给自足的容器。开发者在笔记本上编译测试通过的容器可以批量地在生产环境中部署,包括VMs(虚拟机)、 bare metal、OpenStack 集群和其他的基础应用平台。
为什么使用Docker:
1.环境隔离
2. 更快速的交付部署
3. 更高效的资源利用
4. 更易迁移扩展
5. 更简单的更新管理
2.描述什么是Docker镜像、什么是容器,之间的关系是什么
docker的镜像概念类似虚拟机的镜像。是一个只读的模板,一个独立的文件系统,包括运行容器所需的数据,可以用来创建新的容器。
docker容器是由Docker镜像创建的运行实例。可以支持的操作包括启动,停止,删除等。每个容器间是相互隔离的,容器中会运行特定的应用,包含特定应用的代码及所需的依赖文件。
关系:
docker利用容器来运行应用:docker容器是由docker镜像创建的运行实例。
- 镜像你可以把它看成Java中的类,而容器可以看做是类的实例化对象。
- 一个类可以有多个对象,同理,一个镜像可以有多个容器。容器是由镜像实例化而来。
3.Docker常用命令(镜像、容器)
镜像:
docker push 将镜像推送到远程仓库
docker rm 删除容器
docker rmi 删除镜像
docker images 列出所有镜像
docker ps 列出所有容器
容器:
- docker ps -a 显示所有容器运行的进程
- docker run --rm -p 8080:8080 -d 启动容器
- docker start 容器ID
- docker stop 容器ID 或 docker stop $(docker ps -a -q)
- docker rm 容器ID 或 docker rm $(docker ps -a -q)
- docker cp
- docker exec -it 容器ID bash
4.描述Docker数据卷(应用场景)
数据卷 :是一个可供一个或多个容器使用的特殊目录,设计目的就是数据的持久化,完全独立于容器的生存周期,不会在容器被删除时丢失数据卷中的数据
特点:
数据卷可在容器之间共享或重用数据
卷中的数据更改可以直接生效
数据卷中的更改不会包含在镜像的更新中
数据卷的生命周期一直持续到没有容器使用它为止
应用场景:
1、备份、恢复、迁移容器数据时
2、固定一些特殊的文件路径时
3、多个容器之间共享数据时
4、容器的数据存放在宿主机之外的地方时
5.容器与宿主机之间的数据拷贝的方式有哪些?
1.从容器拷贝文件到宿主机
拷贝方式为:
docker cp 容器名:容器中要拷贝的文件名及其路径 要拷贝到宿主机里面对应的路径
2.从宿主机拷贝文件到容器
拷贝方式为:
docker cp 宿主机中要拷贝的文件名及其路径 容器名:要拷贝到容器里面对应的路径
3.ADD类似COPY命令
ADD 将文件从路径 复制添加到容器内部路径 。
6.描述Dockerfile中常见的指令和作用(至少5个)
FROM: 指定基础镜像
LABEL: 镜像标签,主要是标注信息
RUN: 运行指定命令
CMD: 容器启动时要运行的命令
EXPOSE 作用:暴露端口给外部,容器内有独立端口需要映射到服务器的端口才能被服务器外部访问。
ADD 作用:复制镜像外部资源到镜像内
COPY 作用:镜像内部资源复制
WORKDIR 作用:切换构建镜像时的当前目录
7.你是如何利用Docker进行微服务的部署(详细)
Linux部署
1、将微服务文件上传至Linux中合适路径
2、编写Dockerfile文件
3、构建镜像
4、创建容器并运行
5、查看运行日志,确认是否部署成功
Idea整合Docker
1、Docker开启远程访问
2、IDEA安装Docker插件
3、IDEA配置docker
4、添加docker-maven-plugin插件,进行相关配置
5、执行命令 mvn clean package docker:build
6、IDEA进行操作
7、扩展配置,可在package指令后自动执行docker:build
8、进行CA认证,保证安全性