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;
相关推荐
三朝看客1 小时前
docker版nacos连接mysql8异常处理 No DataSource set!
运维·docker·容器
sleP4o1 小时前
Windows 11 24H2 配置WSL2 + Docker
windows·docker·容器
张较瘦_2 小时前
Windows Docker使用实战教程
windows·docker·容器
知己808011 小时前
docker搭建图数据库neo4j
数据库·docker·neo4j
qq_21539789711 小时前
docker 安装 redis
redis·docker·容器
ink@re11 小时前
Docker环境搭建与容器管理实战:从部署到编排的完整指南
运维·docker·容器
huisheng_qaq13 小时前
【RocketMq源码篇-02】rocketmq集群搭建详细过程(docker版-2主2从)
docker·rocketmq·rocketmq集群·rocketmq源码·2主2从
qq_21539789714 小时前
docker 管理工具 Portainer安装
运维·服务器·docker
凤凰战士芭比Q14 小时前
Docker安装与常用命令
linux·运维·docker·容器