实习面经摘录回答(二)

来自网络,供个人学习,侵删

先完成,再完美

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(log⁡n)O(logn)
  • 复杂度 :增加、删除、查找的时间复杂度均为 O(log⁡n)O(logn)

8.Mysql事务隔离级别

  • 读未提交(Read Uncommitted)
  • 读已提交(Read Commited,RC)
  • 可重复读(Repeatable Read,RR)MySQL默认级别 。解决不可重复读,通过MVCCNext-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);
    }
}
相关推荐
杨了个杨898237 分钟前
Keepalived + Nginx + HAProxy 高可用架构部署实战案例
java·nginx·架构
kaikaile199542 分钟前
数字全息图处理系统(C# 实现)
开发语言·c#
秋92 小时前
Go语言(Golang)开发工程师全景解析:岗位职责·语言优势与使用场景·各城市薪资·发展前景·高考志愿填报(2026版)
开发语言·golang·高考
huangdong_3 小时前
1688商品图片采集技术解析:登录态处理与SKU图自动分类
开发语言
马士兵教育3 小时前
Java还有前景吗?Java+AI大模型学习路线及项目?
java·人工智能·python·学习·机器学习
chase_my_dream3 小时前
C++ + SLAM 高频面试问题整理
开发语言·c++·面试
snow@li3 小时前
Java:理解 Gradle / 后端项目的管家 / 打包SpringBoot 应用 / 完成编译、下载依赖、运行测试、打包 JAR/WAR / 速查表
java
Cloud_Shy6183 小时前
解读《Effective Python 3rd Edition》:从练气到老魔(第五章 Item 30 - 32)
开发语言·人工智能·笔记·python·学习方法
云烟成雨TD3 小时前
Spring AI 1.x 系列【57】动态工具发现:Tool Search Tool
java·人工智能·spring
zfoo-framework4 小时前
[修改代码使用]codex官方app中使用中转(不需要cc-switch) 1.config.toml 2.sk方式登录
java