大厂面试-基本功

大厂面试第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);
            }
        });
    }
相关推荐
leoufung10 分钟前
LeetCode 149: Max Points on a Line - 解题思路详解
算法·leetcode·职场和发展
liang_jy14 分钟前
Activity 启动流程扩展篇(一)—— startActivityInner 任务决策全解析
android·源码
NPE~1 小时前
[App逆向]脱壳实战
android·教程·逆向·android逆向·逆向分析
木易 士心2 小时前
别再只会用 drawCircle 了!一文搞懂 Android Canvas 底层机制
android
童园管理札记2 小时前
【续】数字时代:学前教育的新改革
经验分享·深度学习·职场和发展·微信公众平台
AtOR CUES3 小时前
MySQL——表操作及查询
android·mysql·adb
怣疯knight4 小时前
安卓App无法增加自定义图片作为图标功能
android
AI人工智能+电脑小能手4 小时前
【大白话说Java面试题】【Java基础篇】第24题:Java面向对象有哪些特征
java·开发语言·后端·面试
迦南的迦 亚索的索4 小时前
AI_11_Coze_AI面试助手
人工智能·面试·职场和发展
童园管理札记5 小时前
数字时代:学前教育的新改革
经验分享·职场和发展·学习方法·微信公众平台