尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Java高级面试与工程实践问题集(四)

Java高级面试与工程实践问题集(四) 80. 如何实现 Java 应用的安全加固安全层面代码安全静态代码扫描SonarQube依赖安全漏洞扫描OWASP Dependency-Check运行时安全RASP运行时应用自我保护数据安全加密存储、脱敏展示具体措施防止 SQL 注入预编译语句、ORM 框架防止 XSS输出编码、CSP内容安全策略防止 CSRFToken 验证、SameSite Cookie防止越权权限校验、数据隔离 81. 如何设计一个支持动态表单的业务系统动态表单需求表单字段可配置类型、验证规则、显示顺序表单流程可配置审批流、状态机表单数据可扩展自定义字段存储设计元数据存储表单定义、字段定义、验证规则数据存储JSON 字段 vs 动态表结构版本管理表单定义版本化渲染引擎前端基于 JSON Schema 动态渲染后端基于反射动态验证和存储 82. 如何实现数据库的连接池监控和优化监控指标活跃连接数 vs 空闲连接数等待获取连接时间连接创建/销毁频率连接泄漏检测优化策略连接池大小maxPoolSize Tn * (Cm - 1) 1Tn最大线程数Cm每个线程同时需要的连接数连接验证testOnBorrow/testWhileIdle连接超时connectionTimeout、idleTimeout泄漏检测leakDetectionThreshold 83. 如何设计一个支持实时协作的在线文档系统技术挑战实时同步Operational Transformation/CRDT冲突解决多人同时编辑版本历史撤销/重做、版本对比权限控制查看/编辑/评论权限架构设计前端ProseMirror/Slate 编辑器框架实时通信WebSocket 双向通信后端OT/CRDT 算法服务器存储文档分块存储、操作日志扩展功能评论、提及、模板、导出 84. 如何实现 Spring 应用的性能 profilingProfiling 工具JProfiler商业工具功能全面YourKit商业工具低开销VisualVMJDK 自带基础功能AsyncProfiler开源低开销火焰图Profiling 层次CPU Profiling热点方法识别Memory Profiling内存分配分析Thread Profiling线程状态分析I/O Profiling网络/磁盘 I/O 分析生产环境采样 Profiling、安全点偏差问题 85. 如何设计一个支持多语言的后台管理系统国际化需求界面文本多语言数据内容多语言产品名称、描述日期/数字/货币格式本地化技术实现资源文件messages_zh_CN.properties数据库存储翻译表key, locale, value动态翻译Google Translate API缓存优化翻译结果缓存Redis热键翻译高频翻译预加载懒加载按需加载语言包 86. 如何实现数据库的在线备份和恢复备份策略全量备份mysqldump、物理备份XtraBackup增量备份binlog 备份逻辑备份 vs 物理备份恢复流程恢复最近的全量备份应用增量备份binlog数据一致性校验自动化工具Percona XtraBackup物理热备份mydumper/myloader并行备份恢复自研脚本定时任务 监控告警 87. 如何设计一个支持弹性伸缩的消息队列伸缩维度分区数伸缩Kafka 分区重平衡消费者组伸缩自动负载均衡代理节点伸缩集群扩缩容技术选型Kafka分区模型水平扩展性好RabbitMQ队列模型功能丰富RocketMQ阿里开源事务消息Pulsar云原生存储计算分离监控指标堆积量、消费延迟、分区均衡度 88. 如何实现 Spring 应用的依赖注入优化依赖注入模式构造器注入推荐不可变易于测试Setter 注入可选依赖可重新配置字段注入不推荐隐藏依赖难以测试优化策略减少 Autowired 使用改用构造器使用 RequiredArgsConstructorLombok避免循环依赖设计层面解耦懒加载非必要依赖Lazy性能影响注入层次深度、代理对象创建 89. 如何设计一个支持实时数据可视化的监控大屏数据源实时指标QPS、响应时间、错误率业务指标订单量、支付金额、用户活跃系统指标CPU、内存、磁盘、网络技术栈数据采集Micrometer、Prometheus数据存储时序数据库InfluxDB、Prometheus数据展示Grafana、自研大屏实时更新WebSocket 推送视觉设计关键指标突出、趋势图表、告警提示 90. 如何实现 Java 应用的动态配置管理配置来源配置文件application.yml、bootstrap.yml环境变量docker run -e KEYVALUE启动参数java -Dkeyvalue配置中心Apollo、Nacos、Consul优先级启动参数 环境变量 配置文件动态更新RefreshScope Bean 重新创建配置变更监听器EnvironmentChangeEvent热更新兼容性线程安全、状态一致性 91. 如何设计一个支持多协议的数据采集系统采集协议HTTP/HTTPSRESTful API、WebHookTCP/UDP自定义二进制协议MQTT物联网设备通信WebSocket实时数据流架构设计协议适配层不同协议转换为内部格式数据解析层解析原始数据为结构化数据数据路由层根据规则路由到不同处理管道数据存储层时序数据库、消息队列、对象存储扩展性插件化协议支持、动态加载解析器 92. 如何实现数据库的查询性能优化优化层次SQL 优化避免 SELECT *、使用覆盖索引索引优化复合索引、索引下推、索引合并架构优化读写分离、分库分表、缓存层硬件优化SSD、更多内存、CPU 核心分析工具EXPLAIN执行计划分析PERFORMANCE_SCHEMA性能模式Slow Query Log慢查询日志pt-query-digest查询分析工具 93. 如何设计一个支持分布式事务的消息队列事务消息模式两阶段提交2PCXA 事务性能较差本地消息表最终一致需要补偿事务消息RocketMQ半消息机制最大努力通知异步重试人工干预RocketMQ 事务消息流程发送半消息对消费者不可见执行本地事务根据事务结果提交或回滚消息事务状态回查避免状态未知 94. 如何实现 Spring 应用的安全认证和授权认证方式表单登录用户名密码OAuth2第三方登录JWT无状态 tokenLDAP企业目录服务授权模型RBAC基于角色的访问控制ABAC基于属性的访问控制PBAC基于策略的访问控制Spring Security 配置WebSecurityConfigurerAdapter已废弃SecurityFilterChain Bean 配置方法级安全PreAuthorize 95. 如何设计一个支持实时推荐的消息推送系统推荐算法协同过滤用户相似度、物品相似度内容推荐基于标签、分类热门推荐实时热度计算深度学习神经网络模型实时性实现用户行为实时收集Kafka特征实时更新Redis模型在线预测TensorFlow Serving结果实时推送WebSocket/Push个性化程度全局推荐 → 群体推荐 → 个人推荐 96. 如何实现 Java 应用的线程池优化线程池参数corePoolSize核心线程数maximumPoolSize最大线程数keepAliveTime空闲线程存活时间workQueue工作队列有界/无界RejectedExecutionHandler拒绝策略配置公式CPU 密集型corePoolSize CPU 核心数 1I/O 密集型corePoolSize CPU 核心数 × 2监控指标活跃线程数队列大小拒绝任务数任务执行时间分布 97. 如何设计一个支持多租户的 API 网关租户隔离策略域名隔离tenant1.api.com、tenant2.api.com路径隔离/api/tenant1/、/api/tenant2/请求头隔离X-Tenant-Id 请求头网关功能认证鉴权验证租户身份和权限限流熔断租户级配额管理路由转发根据租户路由到不同后端日志审计租户操作日志记录扩展性动态租户注册、配置热更新 98. 如何实现数据库的数据迁移和版本管理迁移工具FlywaySQL 脚本版本管理LiquibaseXML/YAML/JSON 格式自研脚本Shell SQL迁移策略向前兼容新版本兼容旧数据回滚方案每个迁移可回滚数据验证迁移后数据一致性校验灰度迁移分批迁移验证无误后全量生产实践备份优先、监控告警、人工确认 99. 如何设计一个支持实时数据聚合的流处理系统流处理框架Apache Flink状态管理完善Exactly-Once 语义Apache Spark Streaming微批处理生态丰富Kafka Streams轻量级与 Kafka 集成紧密自研基于 Disruptor 环形缓冲区聚合场景窗口聚合滚动窗口、滑动窗口、会话窗口状态聚合用户会话状态、计数器关联聚合流表关联、双流关联性能优化状态后端选择RocksDB、检查点优化
返回列表