面试题答案
一键面试跨域请求
- 关键因素:不同域之间的资源访问限制,浏览器的同源策略。需要确保前端能顺利访问后端API,同时防止恶意跨域访问。
- 架构设计与技术选型:
- CORS(跨域资源共享):在后端服务器配置允许的源(Origin),例如在Node.js的Express框架中,可以使用
cors
中间件。在Java Spring Boot中,可通过配置WebMvcConfigurer
来设置CORS规则。 - 反向代理:使用Nginx等反向代理服务器,在代理层配置跨域规则。例如通过
add_header
指令添加CORS相关头部。
- CORS(跨域资源共享):在后端服务器配置允许的源(Origin),例如在Node.js的Express框架中,可以使用
数据一致性
- 关键因素:分布式系统中多节点数据同步问题,网络延迟、节点故障可能导致数据不一致。
- 架构设计与技术选型:
- 分布式事务:
- XA协议:适用于传统关系型数据库,如在Java中可使用JTA(Java Transaction API)实现基于XA协议的分布式事务,但性能开销较大。
- TCC(Try - Confirm - Cancel)模式:适用于对性能要求高、业务逻辑可补偿的场景,如在微服务架构中可使用Seata框架实现TCC模式。
- 数据复制与同步:
- 主从复制:常用于数据库,如MySQL的主从复制,主库处理写操作并将日志同步到从库。
- 分布式一致性算法:如Paxos、Raft,用于在分布式节点间达成数据一致性,常用于分布式键值存储系统。
- 分布式事务:
安全性
- 关键因素:防止数据泄露、恶意攻击,确保用户身份合法性与数据完整性。
- 架构设计与技术选型:
- 身份认证与授权:
- OAuth 2.0:广泛用于第三方登录场景,可使用Spring Security OAuth2等框架实现。
- JWT(JSON Web Token):用于无状态身份验证,在后端验证JWT的签名和有效期,如在Node.js中使用
jsonwebtoken
库。
- 数据加密:
- 传输层加密:使用HTTPS,配置SSL/TLS证书,可通过Let's Encrypt获取免费证书。
- 数据存储加密:对敏感数据在存储时加密,如使用AES算法对数据库中的敏感字段加密。
- 防止常见攻击:
- SQL注入防范:使用参数化查询,在Java JDBC中使用
PreparedStatement
,在Node.js中使用ORM(如Sequelize)避免直接拼接SQL语句。 - XSS(跨站脚本攻击)防范:对用户输入进行过滤和转义,在前端使用DOMPurify库,后端在输出到前端时进行安全处理。
- SQL注入防范:使用参数化查询,在Java JDBC中使用
- 身份认证与授权:
系统稳定运行保障
- 负载均衡:使用Nginx、HAProxy等进行四层或七层负载均衡,将请求均匀分配到多个后端服务器,提高系统的并发处理能力和可用性。
- 容错与恢复:
- 断路器模式:如在微服务架构中使用Hystrix,当某个服务出现故障时,断路器跳闸,防止故障扩散。
- 自动重试机制:对于一些因网络瞬断等原因导致的失败请求,设置自动重试策略,如在Java中使用
Spring Retry
。
- 监控与日志:
- 监控工具:使用Prometheus + Grafana进行系统指标监控,如CPU、内存、请求响应时间等。
- 日志管理:使用ELK(Elasticsearch + Logstash + Kibana)或EFK(Elasticsearch + Fluentd + Kibana)进行日志收集、存储和分析,便于故障排查。