博客
关于我
Java最新面试题2024,Java八股文204
阅读量:634 次
发布时间:2019-03-14

本文共 1817 字,大约阅读时间需要 6 分钟。

Java面试核心笔记

一、多线程基础

1. 进程与线程的区别
  • 进程是程序运行的基本单位,拥有独立的内存空间。
  • 线程是比进程更小的执行单元,共享进程内存,开销更低。
2. 并发与并行的区别
  • 并发:同一时间处理多个任务,线程轮流执行。
  • 并行:同一时间处理多个任务,多核CPU同时执行。
3. 创建线程方式
  • 继承Thread类:new Thread(new Runnable() { ... })
  • 实现Runnable接口:new Thread(runnable)
  • 实现Callable接口:new Thread(new Callable<V>() { ... }).start()
  • 使用线程池:executorService.submit(runnable)
  • 4. Runnable与Callable的区别
    • Runnablerun方法无返回值,适合不需要返回结果的任务。
    • Callablecall方法有返回值,适合需要结果的任务。
    5. run与start的区别
    • start方法启动线程,线程运行run方法。
    • run方法可以在多次调用。
    6. 线程状态

    新建、可执行、阻塞、等待、计时等待、死亡。

    7. 线程同步
    • synchronized:互斥锁,基于 Monitor机制。
    • lock:可重入锁,提供更多同步选项,如公平锁、可中断等待。
    8. CAS原理
    • 原子操作:确保多线程环境下操作的原子性。
    • 优点:高效,但存在ABA问题和循环开销。

    二、JVM基础

    1. JVM主要组成部分
    • 类加载器:加载.class文件。
    • 运行时数据区:堆、方法区、程序计数器、虚拟机栈、本地方法栈。
    • 执行引擎:字节码到机器码的翻译。
    • 本地方法接口:与C/C++接口沟通。
    2. 运行时数据区组成
    • 方法区:存储类信息、常量、静态变量。
    • :存储对象实例、数组。
    • 程序计数器:记录当前线程执行位置。
    • 虚拟机栈:存储局部变量、方法参数。
    • 本地方法栈:支持本地方法。
    3. 垃圾回收
    • 是垃圾回收的主要区域。
    • 中的对象一般在方法结束时被回收。
    4. 栈内存管理
    • 栈溢出:方法调用深度过大或内存不足。
    • 默认栈内存大小:1MB。

    三、并发编程

    1. 线程池核心参数
    • 核心线程数(corePoolSize):控制核心线程数量。
    • 最大线程数(maximumPoolSize):核心线程+救急线程最大数量。
    • 队列(workQueue):默认使用LinkedBlockingQueue。
    • 夜间线程存活时间(keepAliveTime):默认为无限。
    2. 线程池创建方式
  • 固定线程池:核心线程数固定,适合已知任务总量。
  • 单例线程池:核心线程数为1,适合按顺序执行任务。
  • 可缓存线程池:核心线程数为0,适合任务密集型场景。
  • 定时执行线程池:执行定期任务。
  • 3. 线程池拒绝策略
    • 直接拒绝:默认策略。
    • 抛弃策略:丢弃任务记录。
    • 抢占策略:强制终止任务。
    • 重新路线:重试执行任务。

    四、ThreadLocal内存泄漏

    1. ThreadLocal原理
    • 每个线程维护一个ThreadLocalMap存储变量。
    • 内存泄漏:未及时清除ThreadLocal中的变量。
    2. 解决方法
    • 及时调用ThreadLocal.remove()清除变量。
    • 避免使用ThreadLocal存储大型对象。

    五、JVM性能调优

    1. 堆大小设置
    • 默认初始堆大小为XMB,最小堆大小为XMB。
    • 增大堆大小:优化内存使用,但增加GC开销。
    2. 课程主类设置
    • -Xms:初始堆大小。
    • -Xmx:最大堆大小。
    • -Xmn:年轻代大小。
    3. GC优化
    • 使用-XX:+UseParallelGC优化吞吐量。
    • 调整-XX:ParallelGCThreads控制并行收集线程数。
    4. 内存分配优化
    • 使用-XX:+UseTLAB减少TLAB分配时间。

    六、其他技术要点

    1. ThreadLocal与线程安全
    • ThreadLocal确保线程隔离,但需谨慎使用。
    2. 线程池与异步调用
    • 使用@EnableAsync注释启动类,定义自定义线程池。
    3. 任务调度
    • 使用CountDownLatch实现任务顺序执行。
    4. 线程间通信
    • 使用Object类的wait/notify方法。
    • 使用LockCondition实现更高级锁机制。

    七、总结

    Java多线程和并发编程是核心技能,理解线程池、锁机制、内存管理至关重要。

    转载地址:http://orxoz.baihongyu.com/

    你可能感兴趣的文章
    nacos本地可以,上服务器报错
    查看>>
    Nacos注册Dubbo(2.7.x)以及namespace配置
    查看>>
    Nacos注册中心有几种调用方式?
    查看>>
    nacos注册失败,Feign调用失败,feign无法注入成我们的bean对象
    查看>>
    nacos源码 nacos注册中心1.4.x 源码 nacos源码如何下载 nacos 客户端源码下载地址 nacos discovery下载地址(一)
    查看>>
    nacos源码 nacos注册中心1.4.x 源码 spring cloud alibaba 的discovery做了什么 nacos客户端是如何启动的(二)
    查看>>
    nacos源码 nacos注册中心1.4.x 源码 如何注册服务 发送请求,nacos clinet客户端心跳 nacos 注册中心客户端如何发送的心跳 (三)
    查看>>
    Nacos源码分析:心跳机制、健康检查、服务发现、AP集群
    查看>>
    nacos看这一篇文章就够了
    查看>>
    Nacos简介、下载与配置持久化到Mysql
    查看>>
    Nacos简介和控制台服务安装
    查看>>
    Nacos管理界面详细介绍
    查看>>
    Nacos编译报错NacosException: endpoint is blank
    查看>>
    nacos自动刷新配置
    查看>>
    nacos运行报错问题之一
    查看>>
    Nacos部署中的一些常见问题汇总
    查看>>
    NACOS部署,微服务框架之NACOS-单机、集群方式部署
    查看>>
    Nacos配置Mysql数据库
    查看>>
    Nacos配置中心中配置文件的创建、微服务读取nacos配置中心
    查看>>
    Nacos配置中心集群原理及源码分析
    查看>>