nginx和docker

一、面试题总结


1. 核心架构设计

**问题1:公网流量如何加密?**​

答:在Nginx前部署TLS 1.3,用OCSP Stapling加速握手,支持国密算法(比如SM2/SM4)。

**问题2:内网服务如何防攻击?**​

答:用Istio做细粒度流量控制(比如熔断、限流),结合SkyWalking监控调用链。

**问题3:gRPC和Dubbo选哪个?**​

答:gRPC适合高性能场景(二进制协议),Dubbo适合Spring生态(配置简单)。


2. 数据库与安全

**问题4:MySQL如何保证高可用?**​

答:用MHA+ProxySQL自动故障切换,或者Galera多主同步(金融级强一致)。

**问题5:怎么防止数据泄露?**​

答:敏感字段(如手机号)用AES-256加密,API网关脱敏(比如手机号显示为138****5678)。


3. Nginx调优

**问题6:如何限制恶意请求?**​

答:用limit_req模块限制每秒50请求,结合IP黑名单拦截高风险地区流量。

**问题7:Nginx缓存怎么配置?**​

答:静态资源缓存1小时,动态请求绕过缓存:

复制代码
location /static {
    proxy_cache my_cache;
    expires 1h;
}

4. 容器化部署

**问题8:Docker镜像怎么瘦身?**​

答:多阶段构建,编译环境和运行环境分离(比如从2GB减到200MB)。

**问题9:Kubernetes怎么扩缩容?**​

答:用Deployment的replicas参数,或HPA根据CPU/内存自动扩缩。

**问题10:有状态服务(如MySQL)怎么部署?**​

答:用StatefulSet管理,挂载PVC持久化存储,按顺序启动主从节点。


5. 网络与协议

**问题11:TCP和UDP用在哪?**​

答:TCP用于可靠传输(如订单系统),UDP用于实时性要求高的场景(如视频直播)。

**问题12:QUIC协议有什么优势?**​

答:基于UDP,减少握手延迟,适合高丢包网络(比如游戏数据推送)。


二、代码示例


1. Docker多阶段构建(精简镜像)
复制代码
# 编译阶段(基础镜像小)
FROM maven:3.8 AS build
COPY pom.xml .
RUN mvn dependency:go-offline  # 提前下载依赖
COPY src/ ./src/
RUN mvn package -DskipTests

# 运行阶段(只保留必要文件)
FROM openjdk:17-jdk-slim
COPY --from=build /target/*.jar app.jar
EXPOSE 8080
CMD ["java", "-jar", "app.jar"]

2. Kubernetes Deployment(自动扩缩容)
复制代码
apiVersion: apps/v1
kind: Deployment
metadata:
  name: user-service
spec:
  replicas: 3  # 初始3个实例
  selector:
    matchLabels:
      app: user-service
  template:
    metadata:
      labels:
        app: user-service
    spec:
      containers:
      - name: user-service
        image: user-service:1.0
        ports:
        - containerPort: 8080
        resources:
          requests:
            cpu: "250m"
            memory: "512Mi"
          limits:
            cpu: "500m"
            memory: "1Gi"
---
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: user-hpa
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: user-service
  minReplicas: 2
  maxReplicas: 10
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 70%  # CPU超过70%自动扩容

3. Nginx反向代理配置(负载均衡)
复制代码
http {
    upstream backend {
        # 权重负载均衡(90%流量到A,10%到B)
        server 192.168.1.10:8080 weight=90;
        server 192.168.1.20:8080 weight=10;
    }

    server {
        listen 80;
        location / {
            proxy_pass http://backend;
            # 限制每秒50请求
            limit_req zone=my_limit burst=100;
        }
    }
}

4. 服务发现(Consul + Spring Cloud)
复制代码
// 服务注册(Spring Boot启动时自动注册到Consul)
@EnableDiscoveryClient
@SpringBootApplication
public class UserServiceApplication {
    public static void main(String[] args) {
        SpringApplication.run(UserServiceApplication.class, args);
    }
}

// 服务调用(通过服务名调用)
@RestController
public class OrderController {
    @Autowired
    private RestTemplate restTemplate;

    @GetMapping("/orders/{userId}")
    public Order getOrder(@PathVariable String userId) {
        return restTemplate.getForObject(
            "http://user-service/users/" + userId,  // 通过服务名调用
            Order.class
        );
    }
}

5. 数据库主从同步(MySQL)
复制代码
-- 主库配置(my.cnf)
server-id = 1
log-bin = mysql-bin
binlog-do-db = mydb

-- 从库配置
server-id = 2
relay-log = mysql-relay-bin
read_only = 1

-- 手动同步数据
CHANGE MASTER TO
MASTER_HOST='主库IP',
MASTER_USER='replica_user',
MASTER_PASSWORD='password',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=154;
START SLAVE;
相关推荐
正经教主3 小时前
【docker基础】第五课:Docker网络详解
运维·docker·容器
鹤鸣的日常4 小时前
前端运行时动态环境变量方案
前端·react.js·docker·前端框架·vue·gitlab
我是谁??8 小时前
ubuntu22.04 通过docker部署vLLM(Qwen3-0.6B)大模型+New API+OpenWebUI
docker·容器·vllm
运维瓦工8 小时前
DevOps 生态介绍(十):Docker Compose 核心 YAML 配置详解与常用命令大全
spring cloud·docker·容器
云烟成雨TD8 小时前
Spring AI 1.x 系列【59】容器化开发支持:Docker Compose 与 Testcontainers
人工智能·spring·docker
Plastic garden9 小时前
K8s(10)NFS 的动态 PV 创建数据库给k8s的mysql和redis
docker·容器·kubernetes
与海boy9 小时前
docker compose minio
docker·容器·eureka
JimCarter10 小时前
使用Azure Devops Pipeline将Docker应用部署到你的Raspberry Pi上
docker·azure·树莓派·devops·orangepi·香橙派·raspberrypi
武子康10 小时前
调查研究-167 Docker Compose 详解:从单容器到多服务编排的工程化入口
运维·docker·云原生·容器·kubernetes·k8s·docker-compose