来自网络,供个人学习,侵删
先完成,再完美
1.简历上的设计模式如何体现
黑马点评中:
策略模式:用户登录,定义统一登录接口,实现"密码登录""验证码登录"两种策略;controller传来类型动态选择策略,避免大量if else判断
代理模式 (Proxy) / AOP :用于全局异常处理 和日志记录。
模板方法模式 (Template Method) :用于秒杀业务。定义了"资格校验 -> 扣减库存 -> 创建订单"的标准流程骨架,具体的库存扣减逻辑(如Lua脚本扣减Redis库存)作为子类实现,确保秒杀流程的规范性和复用性。
2.项目qps 十倍增长或 100被增长有哪些优化
真正能抗住高并发 的同城O2O系统,一定大量使用缓存和消息队列。
10倍的话:
- 多级缓存
- 同步秒杀改为异步队列
100倍的话(架构重构+分治)
- 分库分表
- 拆解微服务
3.HashMap底层原理
基于 数组链表红黑树 实现
4.ThreadLocal了解吗
ThreadLocal提供线程隔离的变量副本,每个线程只能访问自己的副本,互不干扰。
5.讲下GC算法
- 标记-清除
- 复制算法
- 标记-整理
- 分代收集
6.HashMap底层结构
7.为啥用红黑树,红黑树增删的时间复杂度
- 红黑树是一种自平衡二叉查找树,能将最坏情况下的查询效率稳定在 O(logn)O(logn)。
- 复杂度 :增加、删除、查找的时间复杂度均为 O(logn)O(logn)。
8.Mysql事务隔离级别
- 读未提交(Read Uncommitted)
- 读已提交(Read Commited,RC)
- 可重复读(Repeatable Read,RR)MySQL默认级别 。解决不可重复读,通过MVCC 和Next-Key Lock 很大程度上避免了幻读。
- 串行化
在黑马点评的优惠券超卖场景中,我们通常依赖RR级别配合乐观锁或分布式锁来保证数据一致性。
9.MVCC实现原理
MVCC(多版本并发控制)用于实现读已提交 和可重复读,让读写不冲突。
10DDD分层架构比传统的MVC有哪些好处
传统MVC(Controller-Service-Dao)容易导致贫血模型(Service层巨大,Entity只是getter/setter),业务逻辑分散,难以维护。
解耦清晰:严格划分用户接口层、应用层、领域层、基础设施层。基础设施(如MySQL、Redis)的实现细节被隔离,替换技术栈不影响核心业务。
402移除k位数字,使得最小(单调栈)
写了45min @-@
java
class Solution {
public String removeKdigits(String num, int k) {
if(k>= num.length()){
return "0";
}
Stack<Character> stack = new Stack<>();
for(char digit : num.toCharArray()){
while(!stack.isEmpty() && stack.peek()>digit && k>0){
stack.pop();
k--;//表示删除一个
}
stack.push(digit);
}
//处理特殊,递增情况
while(k>0){
stack.pop();
k--;
}
// 构建结果字符串
StringBuilder sb = new StringBuilder();
for (char c : stack) {
sb.append(c);
}
// 去除前导零 (例如 "00200" -> "200")
// 找到第一个非 '0' 的位置
int start = 0;
while (start < sb.length() && sb.charAt(start) == '0') {
start++;
}
// 如果全是零,或者字符串为空,返回 "0"
if (start == sb.length()) {
return "0";
}
return sb.substring(start);
}
}