以下是一份针对Java架构师的笔试题目,时长1小时,涵盖Java核心、设计模式、框架、数据库、中间件及系统设计等方面,能够全面考察候选人的技术功底和架构设计能力。

Java架构师笔试题(1小时)

一、选择题(每题2分,共16分)

  1. 关于Java内存模型(JVM),以下说法错误的是: A. 程序计数器是线程私有的 B. 方法区是线程共享的 C. 堆内存仅存储对象实例 D. 虚拟机栈存储局部变量表

  2. 以下哪种垃圾回收器主要针对延迟敏感型应用? A. SerialGC B. ParallelGC C. CMS D. G1

  3. 关于Java并发编程,以下说法正确的是: A. volatile可以保证原子性 B. synchronized是可重入锁 C. ThreadLocal会导致内存泄漏,无法避免 D. 线程池的corePoolSize必须小于maximumPoolSize

  4. Spring框架中,以下哪个不是AOP的核心概念? A. 切入点(Pointcut) B. 通知(Advice) C. 连接点(Joinpoint) D. 依赖注入(DI)

  5. 数据库索引设计中,B+树索引相比哈希索引的优势是: A. 等值查询速度更快 B. 支持范围查询 C. 占用存储空间更小 D. 更新效率更高

  6. 关于分布式系统CAP理论,以下说法正确的是: A. 可以同时满足一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance) B. 微服务架构中通常优先保证一致性 C. 分区容错性是分布式系统必须具备的 D. BASE理论是对CAP理论的否定

  7. 以下哪种设计模式不属于创建型模式? A. 单例模式(Singleton) B. 适配器模式(Adapter) C. 工厂模式(Factory) D. 建造者模式(Builder)

  8. 在微服务架构中,服务网关的主要作用不包括: A. 路由转发 B. 负载均衡 C. 服务注册与发现 D. 认证授权

二、简答题(每题6分,共36分)

  1. 请简述Java中的内存屏障(Memory Barrier)及其作用。

  2. 什么是线程安全的单例模式?请写出至少两种实现方式。

  3. 请解释Spring事务的传播机制,并列举至少4种常见的传播行为。

  4. 数据库事务的ACID特性是什么?MySQL的默认隔离级别是什么?可能会导致什么问题?

  5. 请简述分布式事务的解决方案,并分析各自的优缺点。

  6. 什么是缓存穿透、缓存击穿和缓存雪崩?如何解决这些问题?

三、系统设计题(共48分)

设计一个高并发的短链接服务,要求:

  1. 支持将长链接转换为短链接
  2. 支持通过短链接跳转到原始长链接
  3. 支持统计短链接的访问次数和访问来源
  4. 系统需具备高可用性和可扩展性

请回答以下问题: (1)设计核心API接口(8分) (2)设计数据存储模型(10分) (3)描述短链接生成的核心算法(10分) (4)如何设计系统架构以支持高并发访问(10分) (5)如何解决分布式环境下的ID生成问题(10分)

参考答案及评分标准(供阅卷参考)

一、选择题

  1. C(堆内存还存储数组)
  2. C
  3. B
  4. D
  5. B
  6. C
  7. B
  8. C

二、简答题(按要点给分)

  1. 内存屏障是一组处理器指令,用于保证特定操作的内存可见性。(2分) 作用:禁止重排序、保证数据可见性。(4分)

  2. 线程安全的单例模式是指在多线程环境下只会创建一个实例。(2分) 实现方式:饿汉式、懒汉式(双重检查锁)、静态内部类、枚举。(每种2分,写出两种即可)

  3. 事务传播机制定义了多个事务方法调用时的事务边界。(2分) 传播行为:REQUIRED、SUPPORTS、MANDATORY、REQUIRES_NEW、NOT_SUPPORTED、NEVER、NESTED。(每种1分,写出4种即可)

  4. ACID:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。(4分) MySQL默认隔离级别是可重复读(Repeatable Read),可能导致幻读。(2分)

  5. 分布式事务解决方案:

    • 2PC:优点是强一致性,缺点是性能差、协调者单点问题。(2分)
    • TCC:优点是性能好,缺点是开发复杂。(2分)
    • SAGA:优点是适合长事务,缺点是一致性较弱。(2分)
    • 本地消息表、事务消息等(酌情给分)
  6. 缓存穿透:查询不存在的数据,穿透到数据库。解决:布隆过滤器、缓存空值。(2分) 缓存击穿:热点key过期瞬间,大量请求穿透到数据库。解决:互斥锁、热点key永不过期。(2分) 缓存雪崩:大量key同时过期,数据库压力骤增。解决:过期时间加随机值、多级缓存、熔断降级。(2分)

三、系统设计题

(1)核心API:

  • 创建短链接:POST /api/shorten {longUrl, expireTime?} → {shortUrl}(4分)
  • 访问短链接:GET /{shortCode} → 302 重定向到长链接(2分)
  • 获取统计:GET /api/stats/{shortCode} → {clickCount, sources[]}(2分)

(2)数据模型:

  • 短链接表:id、short_code、long_url、create_time、expire_time、click_count(6分)
  • 访问统计表:id、short_code、access_time、ip、user_agent、referrer(4分)

(3)短链接生成算法:

  • 哈希算法:对长链接进行MD5/SHA-1哈希,取前6-8位字符(5分)
  • 自增ID+Base62编码:保证唯一性,实现简单(5分)

(4)高并发架构:

  • 前端:CDN加速(2分)
  • 接入层:负载均衡(Nginx)(2分)
  • 应用层:服务集群、无状态设计(2分)
  • 缓存层:Redis缓存短链接映射关系(2分)
  • 存储层:分库分表(2分)

(5)分布式ID生成:

  • 雪花算法(Snowflake):64位ID,包含时间戳、机器ID、序列号(4分)
  • 数据库自增ID:多库多表设置不同步长(3分)
  • Redis自增:利用INCR命令(3分)

笔试注意事项

  1. 请在答题纸上填写姓名和应聘岗位
  2. 请合理分配时间,先完成有把握的题目
  3. 系统设计题可画图辅助说明,重点突出设计思路
  4. 笔试结束后请将答题纸和试卷一并交回