当前位置: 首页 > news >正文

0519Java面试题总结

Java面试题总结

1. JVM调优的场景和调优的内容

调优场景

  • 应用出现OutOfMemoryError内存溢出
  • GC频繁导致应用卡顿
  • 应用吞吐量不达标
  • 应用响应时间过长
  • 堆内存持续增长不释放

调优内容

  • 堆内存调整:-Xms(初始堆大小)、-Xmx(最大堆大小)
  • 新生代老年代比例:-XX:NewRatio
  • Survivor区比例:-XX:SurvivorRatio
  • 选择合适的GC算法
    • 串行收集器:-XX:+UseSerialGC
    • 并行收集器:-XX:+UseParallelGC
    • CMS收集器:-XX:+UseConcMarkSweepGC
    • G1收集器:-XX:+UseG1GC
  • 元空间大小:-XX:MetaspaceSize
  • GC日志分析:-XX:+PrintGCDetails
  • 内存泄漏分析:堆转储分析

2. ThreadLocal原理及常用应用场景

原理

  • ThreadLocal在每个线程内部维护一个ThreadLocalMap
  • 以ThreadLocal实例为key,存储线程私有数据
  • 通过get()/set()方法存取数据
  • 每个线程独立拥有自己的副本,互不干扰

内存泄漏风险

  • ThreadLocalMap的key是弱引用,但value是强引用
  • 如果ThreadLocal实例被回收,key变为null,但value仍然存在
  • 最佳实践:使用后调用remove()方法清理

应用场景

  • 线程上下文信息传递(如用户会话信息)
  • 数据库连接管理(每个线程独立连接)
  • SimpleDateFormat等非线程安全对象的线程安全使用
  • 跨方法参数传递(避免方法参数层层传递)

3. 多线程中join方法的使用

作用

  • 让当前线程等待调用join()方法的线程执行完毕

使用方式

Thread t = new Thread(() -> {// 线程执行逻辑
});
t.start();
t.join(); // 当前线程等待t执行完毕

特点

  • join()方法可以设置超时时间:join(long millis)
  • 调用join()方法会释放当前线程持有的锁
  • 底层基于wait/notify机制实现
  • 常用于主线程等待子线程完成后再继续执行

4. 线程池的使用

核心参数

  • corePoolSize:核心线程数
  • maximumPoolSize:最大线程数
  • keepAliveTime:非核心线程空闲存活时间
  • workQueue:任务队列
  • threadFactory:线程工厂
  • handler:拒绝策略

常用线程池

  • newFixedThreadPool:固定大小线程池
  • newCachedThreadPool:可缓存线程池
  • newSingleThreadExecutor:单线程线程池
  • newScheduledThreadPool:定时任务线程池

最佳实践

  • 使用ThreadPoolExecutor自定义线程池
  • 合理设置线程池大小(CPU密集型/IO密集型)
  • 选择合适的拒绝策略
  • 使用有界队列避免OOM
  • 监控线程池状态

5. 高并发的场景和相关技术实现

高并发场景

  • 电商秒杀
  • 抢红包
  • 实时竞价
  • 社交热点

技术实现

  1. 前端优化

    • CDN加速
    • 静态资源缓存
    • 页面静态化
  2. 服务端优化

    • 分布式架构
    • 微服务拆分
    • 负载均衡
  3. 缓存技术

    • 多级缓存(本地缓存+分布式缓存)
    • Redis集群
    • 缓存预热/降级策略
  4. 消息队列

    • 异步处理(削峰填谷)
    • Kafka/RocketMQ
    • 顺序消息/延迟消息
  5. 数据库优化

    • 读写分离
    • 分库分表
    • 数据库连接池
    • 索引优化
  6. 限流熔断

    • 令牌桶/漏桶算法
    • Sentinel/Hystrix
    • 服务降级
  7. 分布式技术

    • 分布式锁(Redis/Zookeeper)
    • 分布式ID生成
    • 分布式事务
  8. 其他优化

    • 无状态设计
    • 异步非阻塞IO(Netty)
    • 协程/虚拟线程(Java19+)
http://www.xdnf.cn/news/534835.html

相关文章:

  • 网络漏洞扫描系统都有哪些类型?
  • PAW3950DM-T5QU游戏级光导航芯片
  • 博图1200硬件组态与启保停程序编写步骤详解
  • AM32电调学习解读九:ESC上电启动关闭全流程波形分析
  • 无人机遥控器光纤通信模块技术要点!
  • 前端(vue)学习笔记(CLASS 6):路由进阶
  • 公网ip是固定的吗?动态ip如何做端口映射?内网ip怎么让外网远程访问?
  • FastAPI自定义异常处理:优雅转换Pydantic校验错误
  • 【占融数科-注册/登录安全分析报告】
  • python里的\和/有什么区别
  • 汇编:电子计数器
  • SCT2A10一款4.5V-85V 0.6A 高效率同步可调频率的降压DCDC转换器
  • Kubernetes高阶使用指南:深入探索容器编排的艺术
  • 基于大模型的手术全流程智能决策支持系统大纲
  • 关于systemverilog中在task中使用force语句的注意事项
  • 核保核赔的集中管理方案
  • GO语言学习(五)
  • 【C/C++】C++并发编程:std::async与std::thread深度对比
  • GPFS故障实际生产故障处理分析
  • 告诉我,pavucontrol的用法,我连接耳机的时候,输入设备应该使用什么呢?
  • AI神经网络降噪 vs 传统单/双麦克风降噪的核心优势对比
  • Ktransformers0.3框架的api访问接口程序
  • vue2.0 组件生命周期
  • LLaMA-Factory:了解webUI参数
  • Mysql 刷题 day06
  • Image and depth from a conventional camera with a coded aperture论文阅读
  • “保证医疗器械信息来源合法 真实、安全的保障措施、情况说明及相关证明”模板
  • 滑动窗口算法详解:从理论到实战(LeetCode 3 438)
  • 自动化测试的框架有哪些?原理是什么?
  • 深入掌握MyBatis:连接池、动态SQL、多表查询与缓存