JAVA面试题速记-java基础

简介: 本文系统梳理Java核心知识点:涵盖8种基本数据类型、String/StringBuffer/Builder区别、final/static作用、==与equals差异、Collection接口与Collections工具类对比;详解List/Set/Map集合特性及线程安全方案;解析反射、异常处理(throw/throws)、线程生命周期、同步机制(synchronized/ReentrantLock)、ThreadLocal原理、序列化等关键概念。(239字)
  1. java 基本数据类型有哪些?
    Java有8种基本数据类型byte、short、int、long、float、double、char、boolean
  2. String、StringBuffer、StringBuilder 区别?
    String类代表字符串,其对象一旦创建便不可变。这使得String在多线程环境下天然安全,且适合作为HashMap的键,因其哈希值可以缓存。
    StringBuffer和StringBuilder的对象是可变的。StringBuffer是线程安全的,方法都用synchronized修饰;StringBuilder是非线程安全的,在需频繁修改字符串 避免+号拼接的场景 效率更高。
  3. final和static关键字作用是啥?
    final:修饰类时,该类不能被继承. 修饰变量时,基本类型变量值不可变,引用类型变量地址不可变。
    static:修饰成员变量时,该变量为类变量,被所有类的对象共享;修饰成员方法时,该方法为类方法,可通过类名直接调用,无需创建对象。
  4. == 和 equals 的区别是什么?
    == 对于基本类型来说是值比较,对于引用类型来说是比较的是引用;而 equals 默认情况下是引用比较,只是很多类重新了 equals 方法,比如 String、Integer 等把它变成了值比较,所以一般情况下 equals 比较的是值是否相等。
  5. Collection 和 Collections 有什么区别?
    java.util.Collection 是集合类的一个顶级接口。它提供了对集合对象进行基本操作的通用接口方法,Collection接口的意义是为各种具体的集合提供了最大化的统一操作方式,其直接继承接口有List与Set。
    Collections则是集合类的一个工具类,其中提供了一系列静态方法,用于对集合中元素进行排序、搜索以及线程安全等各种操作。
  6. 介绍下 java 的集合?
    List:一个有序集合,可以包含重复的元素,常用实现类有ArrayList、LinkedList,ArrayList是基于动态数组的实现,查询效率高,插入和删除效率低, 非线程安全;LinkedList基于双向链表实现,插入和删除效率高,查询效率低,非线程安全;
    可以仅在方法中使用这两个集合定义为局部变量,避免出现线程安全问题
    也可以通过Collections.synchronizedList方法将ArrayList或LinkedList转换为线程安全的集合。
    也可以通过ConcurrentLinkedQueue替代LinkedList,它是一个高性能且线程安全的非阻塞队列,采用无锁设计,通过CAS操作保证线程安全性
    Set:一个不允许有重复元素的集合。常用实现类有HashSet、LinkedHashSet和TreeSet。HashSet基于哈希表实现,元素无序且唯一;LinkedHashSet维护元素插入的顺序;TreeSet保证元素处于排序状态
    Map:HashMap 实现 链表+红黑树实现,扩容时容量翻倍, 是非线程安全的,ConcurrentHashMap:线程安全的哈希表,采用CAS + synchronized实现。它允许多个线程同时读,适合高并发场景。
  7. java的是反射?
    在Java运行时环境中,对于任意一个类,能否知道这个类有哪些属性和方法,
    Object 类(所有类都继承这个类) 其中有个方法 public final Class getClass() 所有的子类都继承了这个方法,返回了一个Class类;这个Class类中包含了某个类的属性、方法、和构造器等
  8. throw 和 throws 的区别是什么?
    throw 关键字用在方法内部,用来抛出方法或代码块中的异常。
    throws 关键字用在方法声明上,可以抛出多个异常,用来标识该方法可能抛出的异常列表。
  9. final、finally、finalize 有什么区别?
    final:是修饰符,如果修饰类此类不能被继承;如果修饰方法和变量 表示不能在被改变。
    finally:是 try{} catch{} finally{} 最后一部分,表示不论发生任何情况都会执行。
    finalize: 是 Object 类的一个方法,在垃圾收回收机制下调用此方法。
  10. try-catch-finally 中,如果 catch 中 return 了,finally 还会执行吗?
    finally 一定会执行,即使是 catch 中 return 了,catch 中的 return 会等 finally 中的代码执行完之后,才会执行。
  11. java 线程创建方式
    继承Thread类:定义一个类继承Thread类,重写run方法。这种方式不推荐,因为Java单继承机制会限制该类的复用性。
    实现Runnable接口:定义一个类实现Runnable接口,实现run方法,然后将该类实例作为参数传递给Thread类的构造函数。这种方式更灵活,可让类继承其他类。
    实现Callable接口:与Runnable类似,但Callable的call方法有返回值,可配合FutureTask获取线程执行结果。
    线程池:通过ExecutorService创建线程池来管理线程资源,如ThreadPoolExecutor。使用线程池可避免频繁创建和销毁线程,提高性能。
  12. 线程同步机制
    synchronized关键字:可用于修饰方法或代码块,实现同步。修饰方法时,该方法成为同步方法;修饰代码块时,需指定锁对象。它是一种非公平锁,不可中断。
    ReentrantLock:可重入锁,功能更强大,支持公平锁和非公平锁,可中断,还可使用Condition实现更灵活的条件变量控制。
  13. 线程状态
    线程有新建(New)、就绪(Runnable)、运行(Running)、阻塞(Blocked)、等待(Waiting)、超时等待(Timed Waiting)和终止(Terminated)等状态。线程在不同场景下会在这些状态间转换。
  14. Thread 类中的start() 和 run() 方法有什么区别?
    start()方法被用来启动新创建的线程,而且start()内部调用了run()方法,这和直接调用run()方法的
    效果不一样。当你调用run()方法的时候,只会是在原来的线程中调用,没有新的线程启动,start()
    方法才会启动新线程。
  15. 常用的线程池有哪些?
    (1)newSingleThreadExecutor:创建一个单线程池,此线程池保证所有任务的执行顺序按照任务的提交顺序执行
    (2)newFixedThreadPool:是一种固定线程数量的线程池
    特点:核心线程和最大线程数量都是一个固定的值。如果任务比较多工作线程处理不过来,就会加入到阻塞队列
    里面等待。
    (3)newCachedThreadPool:是一种可以缓存的线程池,它可以用来处理大量短期的突发流量
    特点:①最大线程数是Interger.MaxValue②线程存活时间是60秒③阻塞队列用的是SynchronousQueue
    (4)newScheduledThreadPool:具有延迟执行功能的线程池,可以用来实现实时调度
    (5)newWorkStealingPool:Java8里面新加入的一个线程池,它内部会创建一个ForkJoinPool,利用工作窃取的算法并行处理请求
  16. 说说ThreadLocal原理
    (1)ThreadLocal相当于一个线程本地变量,他会在每个线程中都创建一个副本;在线程之间访问内部
    副本变量,就可以做到线程之间互相隔离,相比于synchronized它是在用空间来换时间。
    (2)ThreadLocal中有一个静态内部类ThreadLocalMap,ThreadLocalMap又存在一个Entry数组,Entry具备保存key、value键值对的能力。Entry是一个弱引用,他的key是指向ThreadLocal的弱引用,
    (3)使用弱引用的目的是为了防止内存泄露,如果使用的是强引用的话,除非线程结束否则ThreadLocal对象始终无
  17. 什么是 java 序列化?
    序列化:将对象写入到IO流中
    反序列化:从IO流中恢复对象
    意义:序列化机制允许将实现序列化的Java对象转换位字节序列,这些字节序列可以保存在磁盘上,或通过网络传输,以达到以后恢复成原来的对象。序列化机制使得对象可以脱离程序的运行而独立存在。
    使用场景:所有可在网络上传输的对象都必须是可序列化的,所有需要保存到磁盘的java对象都必须是可序列化的。通常建议程序创建的每个JavaBean类都实现Serializeable接口。
相关文章
|
4月前
|
缓存 NoSQL Java
JAVA面试题速记-redis知识点
Redis核心简介(240字内): Redis提供5种基础数据结构:String、Hash、List、Set、ZSet,及Geospatial等扩展类型。支持RDB快照与AOF日志双持久化机制,兼顾性能与安全;通过过期策略(定期+惰性+LRU)管理内存。应对缓存击穿/雪崩,采用错峰过期;保障缓存-数据库一致性,推荐异步Binlog监听+可靠MQ删除。分布式锁推荐Redisson(自动续期、原子Lua脚本)。高可用支持哨兵(主从故障转移)与集群(16384槽分片、水平扩展)。BigKey需拆分、异步删除(UNLINK)、lazy-free优化。
378 131
|
4月前
|
Kubernetes 应用服务中间件 nginx
最全的kubectl命令用法
本文系统讲解kubectl命令行工具:详解所有子命令(创建、查询、部署、调试等)、API资源列表、自动补全配置,并通过大量实操示例(如创建/查看/编辑/删除资源、扩缩容、回滚、标签管理等)助你快速掌握Kubernetes集群管理核心技能。(239字)
860 143
|
4月前
|
应用服务中间件 Shell nginx
最全的docker命令参数解释及命令用法
本文系统详解Docker核心命令,涵盖容器(run/exec/ps/start/stop等)、镜像(pull/build/push/rmi等)、网络、数据卷及全局参数,并配实操示例与可直接执行的命令,助初学者快速掌握Docker日常运维与开发应用。
1764 129
|
3月前
|
人工智能 安全 API
🦞OpenClaw‘小龙虾 AI’保姆级图文教程:阿里云/本地一键部署配置百炼API及ClawHub 5700+技能精选分享
2026年OpenClaw生态持续发展,其技能市场ClawHub已拥有5700+各类技能,成为AI工具生态中极具实用性的分支,但与此同时,供应链安全问题也愈发凸显。此前ClawHavoc供应链攻击事件中,黑客将恶意代码伪装成常规工具,导致超1000名用户中招,API密钥被盗、设备被植入后门的情况频发。据Koi Security专业报告显示,ClawHub上约12%的技能存在恶意行为,这也让用户在选择和使用技能时,安全成为首要考量因素。本文将从技能安全筛选、优质技能推荐、多系统本地部署、阿里云百炼API配置及常见问题解答五个维度,为零基础用户提供一站式OpenClaw使用指南
1052 9
|
4月前
|
运维 安全 应用服务中间件
Xshell高效运维实战:从基础操作到自动化进阶
本文详解Xshell在运维中的高效实战:涵盖会话标准化管理、批量命令执行、VBScript/Python自动化脚本、SSH密钥安全加固及隧道穿透等核心技巧,助你将重复操作耗时缩短90%以上,快速构建安全、智能、可审计的自动化运维体系。(239字)
353 1
|
4月前
|
人工智能 监控 算法
AI 技能树怎么搭?90%的人第一步就走错了
AI热潮下,别只学工具!真正的竞争力在于构建“AI能力树”:认知层(问题拆解、目标定义)、工程思维(风险评估、方案权衡)、工具协作(高效提问、结果验证)。工具是杠杆,能力才是支点。
|
10月前
|
缓存 安全 Java
Java并发性能优化|读写锁与互斥锁解析
本文深入解析Java中两种核心锁机制——互斥锁与读写锁,通过概念对比、代码示例及性能测试,揭示其适用场景。互斥锁适用于写多或强一致性场景,读写锁则在读多写少时显著提升并发性能。结合锁降级、公平模式等高级特性,助你编写高效稳定的并发程序。
445 0
|
6月前
|
Java 数据库连接 调度
xxljob执行源码分析
本文深入解析XXL-JOB分布式任务调度框架的源码实现,涵盖架构设计、核心执行流程与关键线程机制。内容包括任务触发、快慢线程池分离、注册与心跳检测、失败重试告警、日志清理、时间轮调度等核心模块,结合源码与流程图全面剖析其高性能设计原理。(239字)
xxljob执行源码分析
|
9月前
|
算法 Java
50道java集合面试题
50道 java 集合面试题
|
7月前
|
Java 数据库 微服务
Java 学习路线可按「基础→进阶→实战→架构」四阶段推进
Java学习路线分四阶段:基础→进阶→实战→架构。涵盖语法、多线程、框架、微服务等核心内容,搭配项目实战与学习技巧,助你系统掌握Java开发技能,逐步成长为高级工程师。(238字)
726 4