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

image.png

6.3.2 CSRF跨站点请求攻击

触发跨站请求
预防:
1. cookie hash
2. web token

image.png
用post也无法解决
image.png

文件上传漏洞
绕过后缀检测策略上传 恶意文件并执行
预防:
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

能用环境变量的都替换成环境变量了
image.png

  1. mianshi springboot应用部署
    Dockerfile
    image.png
    打镜像.
    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

image.png

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

image.png
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