大厂面试-基本功

大厂面试第4季

服务可用性多少个9是什么意思

遍历集合add或remove操作bug

并发修改异常

hashcode冲突案例

属于Object类方法

一般10万次左右,才会出现hash冲突

Bigdecimal

https://my.oschina.net/u/3644969/blog/4927776

List去重复

  1. HashSet
  2. LinkedHashSet(去重复同时可以保证原有顺序)
  3. 双指针去重

IDEA Debugger

显示当前执行断点

Step Over 一步步过

Step Into 步入

Force Step Into 强制步入

运行到光标代码行

  1. 流式计算调试
  1. 调试方法入栈(生产 慎重)
  2. return 断点调试
  3. BreakPoint

测试框架

测试:

  1. 多些全功能覆盖各种情况的Case
  2. 边界条件
  3. 极值判断
  4. 入参相同、不同
  5. 抛出异常
  6. 全部分支条件
  7. 压测


    BeforeEach:每个测试方法前执行
    AfterEach:每个测试方法后执行

AfterAll:修饰静态方法,前执行一次

BeforeAll:修饰静态方法,后执行一次

@MockBean 模拟数据

java 复制代码
@SpringBootTest
public class TestA {
    @MockBean
    TestController testController;


    @Test
    void saveTrain() {
        when(testController.test()).thenReturn("AAAOK");
        String test = testController.test();
        System.out.println(test);
    }
}

@SpyBean 如果有when则使用规则,无when则调用真实数据接口

java 复制代码
@SpringBootTest
public class TestA {
    @SpyBean
    TestController testController;

    @Test
    void saveTrain() {
//        when(testController.test()).thenReturn("AAAOK");
        String test = testController.test();
        System.out.println(test);
    }
}

ThreaLocal

线程局部变量

父子线程数据同步 InheritableThreadLocal

可以在子线程获取父线程InheritableThreadLocal 的数据

如果新键线程,可以直接获取;对于线程池中的复用线程,可能获取父线程的旧数据

完美解决线程数据同步方案 TransmittableThreadLocal

xml 复制代码
<dependency>
      <groupId>com.alibaba</groupId>
         <artifactId>transmittable-thread-local</artifactId>
         <version>2.14.3</version>
     </dependency>
java 复制代码
@Test
    void main() {
        TransmittableThreadLocal<String> transmittableThreadLocal = new TransmittableThreadLocal<>();

        ExecutorService threadPool = Executors.newSingleThreadExecutor();
        threadPool = TtlExecutors.getTtlExecutorService(threadPool);
        transmittableThreadLocal.set("hello main");

        threadPool.submit(new Runnable() {
            @Override
            public void run() {
                String s = transmittableThreadLocal.get();
                Console.log("{} {}", Thread.currentThread().getName(), s);
            }
        });
        transmittableThreadLocal.set("hello haha");
        
        threadPool.submit(new Runnable() {
            @Override
            public void run() {
                String s = transmittableThreadLocal.get();
                Console.log("{} {}", Thread.currentThread().getName(), s);
            }
        });
    }
相关推荐
better_liang7 小时前
每日Java面试场景题知识点之-消息队列MQ核心场景与实战
java·面试·kafka·消息队列·rabbitmq·rocketmq·mq
小江的记录本7 小时前
【JVM虚拟机】垃圾回收GC:四种引用类型:强引用、软引用、弱引用、虚引用(附《思维导图》+《面试高频考点清单》)
java·jvm·spring boot·后端·python·spring·面试
巴博尔8 小时前
UNIAPP中NVUE页面 动画
android·前端·javascript·ios·uni-app
better_liang8 小时前
每日Java面试场景题知识点之-SpringBoot启动流程
java·面试·springboot·源码解析·启动流程
Raink老师8 小时前
【AI面试临阵磨枪-69】如何设计一个支持百万级工具的 Agent 系统?如何快速路由与选择工具?
人工智能·面试·职场和发展
Raink老师9 小时前
【AI面试临阵磨枪-77】音视频 + AI:实时字幕、翻译、降噪、虚拟人、多模态对话
人工智能·面试·音视频
洛水水12 小时前
【力扣100题】53.最长回文子串
算法·leetcode·职场和发展
Raink老师12 小时前
【AI面试临阵磨枪-76】社交 AI:内容生成、审核、智能回复、多模态理解、安全治理
人工智能·安全·面试
abc_ABC123A12 小时前
flutter开发安卓APP所需搭建的环境
android
仙俊红12 小时前
Integer\int对比,equals()\hashcode面试
java·面试·职场和发展