转载

java开发面试问答----devops篇

awk '{a[$1]++;} END {for(i in a){print i a[i];}}' nginx.log

如何批量替换文本中的字符串

  • sed -i "s/x/y/g" *
  • 一个文件中可以使用vim
  • tr命令替换
  • aws gsub函数

常用的查看cpu,内存,网络,磁盘的命令有哪些

  • top
  • 查看cpu命令:mpstat
  • 查看内存:free
  • 查看网络:netstat lsof查看端口,统计句柄
  • 查看磁盘:df du fdisk

nginx

proxy_pass和rewrite的区别

  • proxy_pass请求在后台跳转,不影响浏览器url
  • rewrite会发起3xx请求,影响浏览器url

nginx和tomcat的区别

  • nginx是http server,常用做静态内容服务和代理服务器,直接外来请求转发给后面的应用服务器(tomcat,Django等)
  • tomcat是一个application server,更准确的说是一个servlet/jsp应用的容器,处理http请求并生成动态页面。

正向代理和反向代理

  • 正向代理代理的是客户端,服务端不知道真正的客户端是谁,场景如vpn
  • 反向代理代理的是服务端,客户端不知道真正的服务端是谁,场景如负载均衡

DNS

域名正向解析和反向解析

  • 正向解析是指根据域名找到ip地址
  • 反向解析是根据ip地址找到域名,通常用来屏蔽某个ip上的域名或者邮件

一个域名解析的过程

  • 客户向本地dns服务器发起请求,本地dns服务器一层一层向上递归查询是否有域名解析,直到根服务器
  • 根服务器返回顶级域的dns服务器地址给本地服务器,本地服务器迭代查询:根-顶级域-二级域-三级域,直到某个域服务器返回地址给本地服务器,本地服务器缓存该解析,然后返回给客户端

网络

tcp/ip协议,三次握手,四次挥手

三次握手

  • 客户端发起请求,发送syn报文,seq=x
  • 服务端收到syn请求后,返回ack,此时ack=x+1,然后也返回一个syn,seq=y
  • 客户端收到syn后,返回ack,此时ack=y+1,连接建立

四次挥手

  • 客户端发起请求,发送fin报文,seq=x
  • 服务端收到fin报文后,返回ack,此时ack=x+1,此步骤确认客户端已不会发送数据,但是服务端数据可能没有返回
  • 服务端确认数据全部返回后,发送fin报文,seq=y,告诉客户端已处理完,可以关闭
  • 客户端返回ack=y+1,关闭连接

snat 和 dnat

  • 内网机器要访问外网,需要snat,防火墙修改来源ip为公网出口ip发送请求包给外网,外网机器接收到的请求包的来源是公网出口ip而不是真正的内网ip
  • 外网访问内网机器,需要dnat,外网发送请求包目标地址是公网出口ip,防火墙根据路由修改请求包的目标为内网ip发送给内网机器,内网机器返回时防火墙修改源地址为公网出口ip返回给外网机器

docker

什么是docker容器,什么是docker镜像

  • Docker镜像用于创建容器。使用build命令创建镜像,并且在使用run启动时它们将生成容器。
  • Docker容器包括应用程序及其所有依赖项,但与其他容器共享内核,作为主机操作系统上用户空间中的独立进程运行。

docker run和docker start有什么区别

docker run = 创建容器docker create + 启动容器docker start

docker file COPY 和 ADD的区别

  • COPY指令能够将构建命令所在的主机本地的文件或目录,复制到镜像文件系统。
  • ADD指令不仅能够将构建命令所在的主机本地的文件或目录,而且能够将远程URL所对应的文件或目录,作为资源复制到镜像文件系统,还可以解压压缩文件并把它们添加到镜像中。

如何缩小docker镜像的体积

  • 尽量在同一层运行更多的命令
  • 由于copy,add,run都会生成新的层,尽量使用run命令执行copy和add,如wget
  • 移除编译打包依赖
  • 使用小体积的 Alpine 基础镜像

docker的网络模式

host模式

和宿主机共用网络namesapce,端口直接使用宿主机的端口

other container模式

和host模式很像,只是共用的是另一个容器的网络namespace

原文  https://juejin.im/post/5da14df85188250b840d4fde
正文到此结束
Loading...