6.1 三面自我介绍
三面的人是谁?
- 到达了三面已经基本通过了基础关卡
- 部门负责人?
- 三面的人往往注重你的潜力以及未来的可能
如何自我介绍
- 技术栈,项目介绍一笔带过
- 着重说你的积累,例如:开源项目贡献,公众号github等, 主要凸显你的与众不同,并且让面试官有兴趣挖掘你的额外价值
6.2 保证系统安全的行为
背景
- 大厂都有安全部
- 上线前的折磨和上线后的痛苦
SQL注入的原理是什么,如何预防
例如:
SELECT* FROM user WHERE username= “;DROP DATABASE (DB Name)
预防:
1.做输入校验
2.使用预编译sq|语句执行
3. mybatis中#和$的区别:$不会采用预编译sql,而直接会拼接,使用#就会使用。
6.3 跨站点攻击
6.3.1 XSS跨站点脚本攻击
反射型
存储型,本质脚本
预防:
1.做输入校验,替换
2.设置cookie为http-only访问方式,没办法通过js获取cookie
6.3.2 CSRF跨站点请求攻击
触发跨站请求
预防:
1. cookie hash
2. web token

用post也无法解决
文件上传漏洞
绕过后缀检测策略上传 恶意文件并执行
预防:
1.严谨的判断文件类型
2.设置文件.上传路径不可执行
6.4 容器化部署
Docker的核心技术是什么
- NameSpace命名空间,隔离进程,用户、网络、IPC 以及UTS等的基础
- CGroups控制组限制硬件资源
- UnionFS做了镜像管理
容器docker与虚拟机的区别
- 进程与系统的区别
6.5 改造应用变成docker部署
1.先安装mysql(一般不会装在docker里面)
$ docker pull mysql:5.6
$ docker run -itd —name mysql5.6 -p 3309:3306 -e MYSQL _ROOT PASSWORD=root mysql:5.6
本地访问/usr/local/mysql/bin/mysql -uroot -h localhost:3309 -p
初始化mysql
2.安装zookeeper
docker pull zookeeper:3. 5
docker run -itd —name zk -p 2183:2181 zookeeper:3.5
3.安装网络工具
apt-get update
apt-get install net-tools
apt install iputils-ping
能用环境变量的都替换成环境变量了
- mianshi springboot应用部署
Dockerfile
打镜像.
docker build -t mianshi.
启动服务端
docker run -itd -p 8881:8080 -p 28881 :20880 —env ServerPort=8080 —env Mysql Host And Port=10.93 .45.85:3309 —env
Mysql User=root — env Mysql Password=root —env Zookeeper Host _And Port=10.93.45.85:2183 — env Dubbo Port=20880 mianshi
客户端
docker build -t mianshiclient .
启动客户端.
docker run -itd -p 8882:8080 —env ServerPort=8080 —env Mysql _Host And Port=10.93. 45.85:3309 —env Mysql User=root —env
Mysql Password=root —env Zookeeper Host And Port=10.93.45.85:2183 mianshiclient
6.6 什么是云原生
云原生是什么
云原生=微服务+DevOps+持续交付+容器化
云原生的优势
- 自动化
- 模糊开发,测试,运维的边界
- 成本,弹性
6.7 kubernetes

kubectl:接受用户从命令行所有的指令参数,并且将指令信息发送给APIServer执行。
ApiServer:执行kubectl发来的命令。
controller-manager:整个集群状态控制
schedulter:最后由它调度进行执行。
etcd:所有集群节点的控制信息,都在存储的,类似于之前讲的zookeeper,以及配置管理中心所使用。在k8s内部,做集群状态存储和维护,集群状态变更可以及时同步给apiServer、controller-manager、etcd。
上面几个组件都会通过api server下达指令,主要通过kubelet,每一个worker node都会安装一个kubelet,它是和ApiServer通信的唯一渠道。比如说api server接收到controller-manager下发的指令到api-server,会下发到对应的worker node上,kubelet就会对应处理请求,去拉起Pod。
Pod是一个非常重要的概念,pod和docker不是一对一的关系,一个pod可以对应多个container,是一个一对多的关系,实际使用场景,是一对一关系,一个pod启动一个container。
kubelet操作是基于Pod操作的。不同node和不同pod都能进行通信。
中间夹杂了一层pod,会有自己的ip,是一个内部IP,每次拉起pod,对应的ip可能会变化,node的网络ip不会变。
pod本身是逻辑概念,pod会有一个ip地址,内部容器是共享网络模式,会被所有容器共享,pod和container共享,container暴露的端口,就是pod暴露的端口。
将wokernode端口映射到pod上,就可以访问pod某一个container的endpoint。
service为我们提供一个固定的classip;
kube-proxy:去解析classip,去在背后做pod群负载均衡,屏蔽所有pod群做上下线操作。
本质上以pod做container做管理单元。
6.8 改造部署为k8s

k8s入门学习网站:orchome.com
自动扩缩容
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
name: java- apache
namespace: default
spec:
minReplicas: 1
maxReplicas: 10
scale TargetRef:
kind: Deployment
name: java- apache
targetCPUUtilizationPercentage: 90
