大厂面试-基本功

大厂面试第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);
            }
        });
    }
相关推荐
AI淇橦学1 小时前
零基础学 Agent :拆解一个 Agent 的「零件清单」——8 个模块逐一讲透 第 2 期
面试
Lee川1 小时前
时空迷宫探险记:从O(1)到O(2^n)的算法进化论
算法·面试
青莲8431 小时前
查找算法详解
android·前端
前端Hardy1 小时前
别再手动调 Prompt 了!这款开源神器让 AI 输出质量提升 300%,支持 Claude、GPT、Gemini,还免费开源!
前端·javascript·面试
yuhaiqiang1 小时前
谈谈什么是多AI交叉论证思维
前端·后端·面试
青莲8431 小时前
排序算法详解
android·前端
加洛斯1 小时前
JAVA知识梳理:一文搞懂集合中的List与ArrayList的基础与进阶
java·后端·面试
zd2005722 小时前
用摩斯密码「听」时间:一款安卓报时应用的诞生
android
发现一只大呆瓜2 小时前
深度拆解 fetch-event-source库实现原理
前端·javascript·面试