近期面试被要求写的三道场景题
最近去面试了一家公司,初试聊的很愉快,两个小时之后就通知我初始通过,效率惊人。然后再要求我写三道开放的场景题,可以开卷,作答时间为一天。看的出来,这是一家很讲究效率和看人实际工作能力的公司,毕竟在AI时代,如果再考八股文,考你背的如何,毫无意义。所以我比较向往,也蛮珍惜,于是周末花了一天的时间进行答题。
这三道题分别是:
1、设计一个分布式ID生成服务,要求:
全局唯一
趋势递增
高可用(容忍节点故障)
高性能(10万QPS以上)请给出设计方案,包含核心算法和架构图。
2、有一个订单表(1000万数据),查询缓慢,请:
分析可能的原因和执行计划解读方法
给出索引优化方案
设计分库分表方案(包含路由策略)
如何处理跨分片查询和排序?
3、设计一个支持多租户、多子系统的统一权限管理系统,要求:
如何实现细粒度的数据权限控制(如部门数据隔离)
权限变更时的实时生效方案
权限系统的性能优化策略
画出核心表结构设计并说明关系
具体的解答就不再重复写一遍了,我这里贴个图:
.fkfuqwulrjab{}
一个基于SpringAI+Ollama+RAG的企业知识管理平台
项目背景企业知识管理一直是个痛点:文档分散、检索效率低、知识孤岛现象严重。传统的全文检索虽然能找到关键词,但缺乏语义理解能力。
这个项目基于 RAG(检索增强生成) 架构,结合大语言模型和向量数据库,实现了:
语义级别的知识检索
基于上下文的智能问答
多轮对话的上下文理解
核心目标是让知识真正”可对话”,而不只是”可检索”,我觉得这个项目是非常有业务价值的。
应用场景企业内部知识库
技术文档检索:API 文档、架构设计、最佳实践
流程规范查询:开发规范、code review checklist
历史经验沉淀:事故复盘、项目总结
客户支持系统
产品文档问答:用户手册、FAQ、troubleshooting
技术支持辅助:快速定位问题和解决方案
自助服务平台:减少人工客服压力
个人知识库
个人知识管理:笔记、文章、书籍摘录
论文库检索
核心功能1. 文档处理与向量化支持 PDF、Word、Excel、Markdown 等格式,处理流程:
使用 Apache Tika 提取文档内容
按语义边界分片(默认 500 tokens)
通过 Embedding 模型(nomic-emb ...
让你成为Java并发大师的一个练习项目
还在愁Java并发知识总是学了忘?项目中没有练手的地方? 或许只是你没有这方面的意识!来这就对了!从理论到实战,系统掌握Java并发编程核心技术,你也可以是一个并发大师!项目地址:https://github.com/penghs520/concurrency-exercises这个项目当然是Claude Code生成的啦,消耗了40$ tokens,质量很不错,欢迎你来提提PR,点点Star。另外我还制作了一个MySQL从基础到精通的教程,项目地址:https://github.com/penghs520/mysql-exercises,质量也是非常棒,五星推荐! 后面有时间我还会陆续推出更多的练习项目。
项目简介这个项目包含了8个知识点模块,覆盖Java并发核心理论和API,每个模块都提供了理论教程、Demo、2~3个练习题和答案,以及3个实战项目,提供真实业务场景的并发解决方案,并且每个场景都提供了多套解决方案。
通过理论 +练习 + 实战,效果非常好,希望你可以在一至两周内熟练掌握所有Java并发相关的知识,真正成为一个Java并发高手,而不只是学了就忘。
快速开始环境 ...
今天发现了一个看源码的神器:deepwiki
目录
Q1
Answer
三级缓存机制
循环依赖解决流程
配置选项
限制和注意事项
Notes
Citations
Q2
Answer
二级缓存的局限性
三级缓存的必要性
具体流程
为什么不能只用二级缓存
Notes
Citations
Q3
Answer
Spring循环依赖解决时序图
关键步骤说明
Notes
Citations
例如spring框架的源码,只要把前面的github改成deepwiki就可以。
deepwiki帮我们总结出了整个框架的架构概览、核心特性、核心组件,我们可以先学习核心的内容,先对整个框架有一个全局的认识,然后再逐步掌握每个核心组件,这样下来可能几天时间就可以快速掌握一个框架的核心知识。
美中不足的是,都是英文。。。 没关系,用沉浸式翻译就好。
然后就可以在这里直接对其进行代码提问了。
我们先来问一下:spring是如何解决循环依赖的?
除了解释具体的设计原理,源文件中的关键代码也给你贴出来了。  
然后你可以继续提问:为什么要使用三级缓存,二级缓存不可以吗?
继续提问:你是否可以生成一个数据流图或者时 ...
Nginx常用功能详解
目录
安装
服务器环境准备
安装nginx
vscode远程连接服务器
nginx.conf基本介绍
部署静态网页
HTTP反向代理
正向代理和反向代理
部署后端服务
配置反向代理
配置说明
proxy_pass配置说明:
设置代理请求headers
非HTTP代理
动静分离
动静分离的好处
构建前端制品
缓存区和缓存
缓冲区(buffer)
缓存
负载均衡
负载均衡配置
负载均衡策略
1.轮循机制(round-robin)
2.最小连接(least-connected )
3.ip-hash
4.hash
5.随机 (random)
7.健康检查
HTTPS配置
生成自签名证书
配置ssl
https优化
TCP协议反向代理
重写(重定向)
Return
场景1:强制所有请求都变成https
场景2:旧域名迁移,不让用户收藏的链接或者搜索引擎的链接失效
场景3:补充www
状态码说明
Rewrite
last和break
压缩
其他常用指令
sendfile
try_files
error_page
推荐写法和注意事项
推荐写法 ...
记一次Netty PooledByteBufAllocator引发的直接内存OOM事件
记一次Netty引发的直接内存OOM事件目录
问题描述
问题分析
初步分析
堆栈快照分析
怀疑Netty存在内存泄漏
Netty源码分析
回头再看
结论
问题描述近期在我们环境上遇到了一个关于直接内存OOM的问题,曾经是没有遇到过的:
根据使用人员的反馈,最近产品使用一段时间就会发生这个OOM,重启后又能好一阵子。
猜测大概的原因是近期我们的产品配置了一个多维列表视图,这个视图会发起大量的接口请求,其中一个接口返回了大量的数据以支持整个视图的渲染:
经过观察,每次访问这个视图时直接内存都会上涨,并且始终是100%,直到最大限制时出现OOM:
问题分析初步分析通过异常日志可以看到,这里正在申请4194304 bytes(也就是4MB)的直接内存,但目前已经申请了802890569 bytes(也就是765MB),而最大限制是805306368 bytes(768MB),因此发生OOM。
由于我这里启动应用程序时仅使用 -Xmx=768m指定了最大堆内存,而没有指定最大直接内存,HotSpot默认将最大堆内存作为最大直接内存限制,也就是768MB。
对 ...
分布式微服务下的数据一致性解决方案:从理论到实战
引言:为什么数据一致性这么难?在单体应用时代,保证数据一致性很简单:一个数据库,一个事务,搞定!
1234567// 单体应用的美好时光@Transactionalpublic void transferMoney(Long fromAccount, Long toAccount, BigDecimal amount) { accountDao.deduct(fromAccount, amount); // 扣款 accountDao.add(toAccount, amount); // 加款 // 要么全成功,要么全失败 - ACID保证!}
但当我们拆分成微服务后,一切都变了:
123456789101112131415// 微服务的噩梦开始了...public void createOrder(OrderRequest request) { // 调用订单服务 - 创建订单 Order order = orderService.create(request); // 调用库存服务 - 扣减库存 ...
Spring事务的钩子函数
概述Spring事务钩子是一套强大的机制,这些钩子提供了对事务管理的细粒度控制,允许开发者在事务生命周期的不同阶段执行自定义逻辑。
主要的事务钩子类型1. TransactionSynchronization(事务同步器)TransactionSynchronization是最核心的事务钩子接口,提供了以下回调方法:
核心方法123456789101112131415161718192021222324public interface TransactionSynchronization { // 事务状态常量 int STATUS_COMMITTED = 0; // 已提交 int STATUS_ROLLED_BACK = 1; // 已回滚 int STATUS_UNKNOWN = 2; // 状态未知 // 事务挂起时调用 void suspend(); // 事务恢复时调用 void resume(); // 事务刷新时调用(在提交前) void flush(); ...
SpringJPA注解介绍--并使用一个交易下单流程介绍Spring本地事务
Spring Data JPA 注解详解
📦 完整代码示例:https://github.com/penghs520/springboot-transaction
目录
@Modifying 注解
@Lock 注解
@Query 注解
@Transactional 注解
事务传播行为详解
@Transactional 在接口和实现类上的区别
@Entity 相关注解
@Repository 注解
实际应用示例
最佳实践
总结
@Modifying 注解作用@Modifying 注解用于标识执行修改操作(INSERT、UPDATE、DELETE)的查询方法,告诉Spring Data JPA这是一个修改操作而不是查询操作。
语法123456@Modifying( clearAutomatically = false, // 是否自动清除一级缓存 flushAutomatically = false // 是否自动刷新到数据库)@Query("UPDATE Entity e SET e.field = :value WHERE e.id = :id ...
常见加密算法详解:从对称加密到数字签名
什么是加密?加密(Encryption)是将明文(Plaintext)通过加密算法转换为密文(Ciphertext)的过程,目的是保护数据的机密性、完整性和真实性。
12明文 + 密钥 → [加密算法] → 密文密文 + 密钥 → [解密算法] → 明文
加密的核心目标
机密性(Confidentiality): 只有授权用户才能访问数据
完整性(Integrity): 数据在传输过程中未被篡改
真实性(Authenticity): 验证数据来源的真实性
不可否认性(Non-repudiation): 发送方不能否认发送过该数据
加密算法分类加密算法主要分为三大类:
12345678910111213141516171819202122加密算法├── 对称加密(Symmetric Encryption)│ ├── DES│ ├── 3DES│ ├── AES (推荐)│ ├── SM4 (国密)│ └── ChaCha20│├── 非对称加密(Asymmetric Encryption)│ ├── RSA│ ├── ECC (椭圆曲线加密)│ ├─ ...
