广州某小厂笔试题+一面
写完后马上用手机记录的,可能有一两道忘记了
1.exception和error都继承自throwable接口,有什么区别?
主要答了exception是程序可处理的异常,可进行抛出或捕获,而error是系统级错误,程序无法处理只能终止,通常是jvm层面或硬件错误导致
2.为什么使用线程池,你怎么样去创建一个线程(使用 Executors 的缺陷?)
为什么主要答了实现线程复用,减少线程创建、销毁的开销,同时避免线程过多导致资源耗尽。怎么样创建答了通常直接使用 ThreadPoolExecutor
自定义参数实现线程池。缺陷答了如 FixedThreadPool
使用无界队列可能导致内存溢出、CachedThreadPool
可能创建过多线程,浪费资源。
3.Thread.sleep(0) 的意义及替代
意义答了主动让出 CPU 时间片,触发线程调度,避免长时间占用 CPU。用Thread.yeild()替代,直接让出CUP。好像还能用一个叫LockSupport.parkNanos(0)的东西,没见过。
4.常见的设计模式及其应用场景?
单例模式:配置管理(如 Spring
容器)
工厂模式:如复杂对象的创建
观察者模式:事件监听(如 GUI 事件)
策略模式:算法切换(如支付方式)
适配器模式:接口兼容(如旧系统适配)
代理模式:如AOP面向切面编程
5.UUID 转 Base64 后的位数计算
这个真不会,可能是计组的内容?没学过
- UUID 为 128 位(16 字节)。
- Base64 规则:每 3 字节转换为 4 字符,不足则填充。
- 计算:16 字节 → 分为 5 组 3 字节(余 1 字节)→ 总长度
(16 / 3) * 4 ≈ 22
→ 填充至 24 字符(末尾加==
)。
也就是三字节转换为4字符就是了
7.饿汉式和懒汉式的区别?优缺点?
饿汉式单例是在类加载时就创建实例。换句话说,类被加载时,单例对象就已经实例化。它不管你是否需要这个实例,都会在应用启动时创建。由于实例化发生在类加载时,饿汉式单例天生是线程安全的。
优点是线程安全(因为其实例化发生在类加载时,天然线程安全),实现简单;缺点是即使没有用到该实例,类加载时就会创建实例,可能会浪费资源。此外,无法实现延迟加载。
懒汉式单例是在第一次调用 getInstance() 方法时才创建实例。也就是只有在需要的时候,才进行实例化操作,这样能避免不必要的资源浪费。因此,懒汉式单例通常适用于实例的创建较为昂贵且不一定总是需要的情况。
优点是节约资源,避免不必要的实例创建;缺点是线程不安全,如果多个线程同时访问 getInstance() 方法,并且实例尚未创建,就可能会创建多个实例,导致线程安全问题。
8.SpringIOC的理解?
- 控制反转:对象创建和依赖注入由容器管理。
- 优点:解耦组件,提升可维护性和可测试性(如通过注解或 XML 配置 Bean)。
9.一道算法题:二维数组找指定元素
可能就是想办法找到一种比O(n^2)更快的算法,但是给的那个二维数组真没看出来什么特别的。。
一面:聊天局,是跟一个小姐姐,人很好,就问一些平常的问题,说面试通过后有一次技术面,期待。
#职场捅娄子大赛##如何KTV领导##牛客创作赏金赛##如果不工作真的会快乐吗##互联网行业现在还值得去吗#