大厂面试-基本功

大厂面试第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);
            }
        });
    }
相关推荐
朱涛的自习室16 分钟前
Munk AI 桌面端「预告」
android·前端·人工智能
程序员正茂26 分钟前
Android studio中使用OpenCV C++库
android·c++·opencv·mobile
沉默王二38 分钟前
携程员工:在携程4年,月薪3万左右,基本没涨薪了。不过挺满足的,毕竟稳定,福利也不错(附Agent面试题)
面试·openai·agent
Moment41 分钟前
2026 了,前端转 AI 全栈我是这么学的 😍😍😍
前端·后端·面试
恋猫de小郭43 分钟前
Android R8 为什么可以让 Kotlin 协程提速 2 倍?
android·前端·flutter
FogLetter1 小时前
三栏布局的七十二变:从Flex到Grid,我学会了响应式设计的"降龙十八掌"
前端·面试
李斯维1 小时前
Jetpack UI状态模型 ViewModel 的入门和使用
android·android studio·android jetpack
2501_915909061 小时前
iOS应用性能监控 Instruments工具与崩溃日志分析完整指南
android·ios·小程序·https·uni-app·iphone·webview
杉氧1 小时前
弹性滚动的奥秘:在 Flutter 中使用 CustomScrollView 与 Sliver 打造极致流畅列表
android·前端·flutter
黄林晴2 小时前
你敢信吗?R8让 Compose 协程直接快 2 倍!你敢相信吗?R8 让合成程度直接协调快速 2 倍!
android