面试真题之收钱吧问题与总结

收钱吧面试技术笔记​编辑

1. 线程安全相关

什么叫线程安全

线程安全指的是多个线程访问同一个资源时,不会引起数据不一致或者程序异常的行为。实现线程安全的方式有:

  • 互斥锁(synchronized、ReentrantLock)
  • 原子操作(AtomicInteger 等)
  • 线程安全的数据结构(ConcurrentHashMap)

2. Java 基本类型及包装类

基本类型 包装类 说明
byte Byte -
short Short -
int Integer -
long Long -
float Float -
double Double -
char Character -
boolean Boolean -

使用场景

  • 当需要使用泛型(Collection 只能存对象)
  • 需要对象方法(如 Integer.parseInt()
  • 与反射或框架交互

包装类线程安全吗?

  • 不可变对象 → Integer、Long、String 等都是线程安全的
  • 注意:线程安全只针对对象不可变性,引用本身的赋值不是线程安全的

除了不能修改值,还不能修改什么

  • 对象的内部状态不可变
  • 没有 setter 或修改内部数组/集合的接口

​编辑

3. String 与线程安全

为什么 split 方法线程安全

  • String 是不可变对象
  • split 返回的是新的数组或字符串,不会修改原字符串
  • 线程安全来源于对象不可变性

4. 线程池

线程池主要参数(以 Java ThreadPoolExecutor 为例)

text 复制代码
corePoolSize:核心线程数  
maximumPoolSize:最大线程数  
keepAliveTime:非核心线程空闲存活时间  
unit:时间单位  
workQueue:任务队列  
threadFactory:线程创建工厂  
handler:拒绝策略  

创建线程时,是先放队列还是先放线程

  • 如果当前线程数 < corePoolSize → 创建核心线程
  • 超过 corePoolSize → 放入队列
  • 队列满 → 创建非核心线程(直到 maximumPoolSize)
  • 超过 maximumPoolSize → 执行拒绝策略

IO 密集型线程池参数设置

  • 核心线程数可以设大一些(CPU × 2 或更多)
  • 使用 LinkedBlockingQueue 避免阻塞

保证核心线程不销毁

  • allowCoreThreadTimeOut(false)(默认 false)

5. Java POJO 与 HashCode/Equals

POJO 是否要重写 hashCode 和 equals

  • 必须重写:存入 HashMap、HashSet 或需要按内容比较对象时
  • 不必要:只是普通存储或不比较对象的场景

除了判断相等情况下,是否有必要重写

  • 可以不重写,除非你需要放入 hash 系列集合或者基于对象内容比较

6. 数组与字符串

数组 length 和字符串 length 区别

  • 数组:arr.length → 属性
  • 字符串:str.length() → 方法

数组元素如何存储

  • 数组连续存储在堆中,元素可以是基本类型或对象引用 编辑

7. 反射与类加载器

反射

  • 获取类信息:Class<?> clazz = Class.forName("com.example.MyClass");
  • 创建对象:clazz.newInstance()
  • 调用方法、获取字段、修改字段

ClassLoader 和 Class 区别

  • Class:类的字节码对象,Java 层抽象
  • ClassLoader:负责加载字节码文件到 JVM
  • 两者都可以用于加载类,但 ClassLoader 更底层

8. 单例模式

常见场景

  • 全局配置对象
  • 线程池、缓存管理

最简单实现(懒汉/饿汉)

java 复制代码
// 饿汉  
public class Singleton {  
    private static final Singleton INSTANCE = new Singleton();  
    private Singleton() {}  
    public static Singleton getInstance() {  
        return INSTANCE;  
    }  
}  

9. HTTP 与 TCP

HTTP 版本区别

版本 特点
1.0 每次请求创建新 TCP 连接
1.1 支持 Keep-Alive、管道化
2.0 二进制帧、多路复用、头部压缩

TCP 实现 HTTP

  • 理论上用 Socket 建立 TCP 连接,手动发送 HTTP 请求报文
  • Java 示例略(面试一般不要求完整实现)

10. 数据库 ACID 与事务

ACID

  • Atomicity 原子性
  • Consistency 一致性
  • Isolation 隔离性
  • Durability 持久性

事务隔离级别

隔离级别 现象
READ UNCOMMITTED 脏读
READ COMMITTED 不可重复读
REPEATABLE READ 幻读
SERIALIZABLE 串行化

不同隔离级别下锁

  • 读锁、写锁、间隙锁(防止幻读)

千万级数据表索引策略

  • 自增 ID → 主键索引
  • 年龄 → 可加普通索引,考虑范围查询
  • 不建议频繁变化字段建索引

事务传播机制

  • 默认:REQUIRED
  • 并发事务修改:数据库通过锁和隔离级别解决,也可通过乐观锁/悲观锁在代码控制

相关推荐
腾渊信息科技公司11 分钟前
Spring Boot对接MES实战:视觉检测数据自动同步方案
java·人工智能·spring boot·后端·计算机视觉·ai·软件需求
一点一木12 分钟前
从60首歌到1个网站:输入你的故事,还你一首歌
前端·github
沉默王二1 小时前
腾讯一面,我霸气反问:“你说你们在做Agent项目,说说 SubAgent、Plan 模式、Skill 调用这些你们都是怎么做的?”面试官一直在擦汗。。
面试·agent·ai编程
IT_陈寒1 小时前
Vue这个特性差点让我加班到凌晨,谁懂啊
前端·人工智能·后端
段一凡-华北理工大学1 小时前
向量数据库实战:选型、调优与落地~系列文章12:文本分块策略实战:chunk_size 怎么选?重叠多少?
开发语言·数据库·后端·oracle·rust·工业智能体·高炉智能化
码事漫谈2 小时前
1999年的电商前夜和2026年的AI前夜 历史押韵但从不重复
后端
Conan在掘金3 小时前
鸿蒙报错速查:arkts-strict-typing Property does not exist on type 'object',object 装函数就炸,根因 + 真解法
后端
颜酱3 小时前
01 | 骨架搭建:FastAPI + Vue 跑通第一个 SSE 流式问答
前端·人工智能·后端
程序员cxuan4 小时前
Grok Build 被众人唾骂,结果老马把它开源了
人工智能·后端·程序员
从零开始的代码生活_4 小时前
C++ 继承详解:访问控制、对象模型、菱形继承与设计取舍
开发语言·c++·后端·学习·算法