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

java面试题(一)

1. 计算机网络传输层有哪些协议?分别适用于什么场景?​

传输层核心协议有两个:​

  • TCP(传输控制协议):​

特点:面向连接、可靠传输(通过三次握手建立连接、四次挥手断开连接,支持重传、拥塞控制等)、字节流传输。​

适用场景:对可靠性要求高的场景,如文件传输(FTP)、网页浏览(HTTP/HTTPS)、邮件发送(SMTP)等。​

  • UDP(用户数据报协议):​

特点:无连接、不可靠(不保证送达,无重传机制)、数据报传输、效率高。​

适用场景:对实时性要求高但可容忍少量丢包的场景,如视频 / 语音通话(流媒体)、在线游戏、DNS 查询等。​

2. 多线程的使用场景有哪些?线程开启多少个合适?判断标准有哪些?​

多线程使用场景:​

  • 异步任务处理(如日志记录、邮件发送,不阻塞主线程);​
  • 并发 IO 操作(如多文件下载、数据库批量查询,利用 IO 等待时间);​
  • 实时数据处理(如消息队列消费、实时监控);​
  • 复杂计算任务拆分(如大数据量排序、分布式计算)。​

线程数量没有 “固定答案”,需结合任务类型判断:​

  • CPU 密集型任务(如数学计算):线程数≈CPU 核心数(避免线程切换开销);​
  • IO 密集型任务(如网络请求、文件读写):线程数可适当增加(通常为 CPU 核心数 ×2,或根据 IO 等待时间调整)。​

判断标准:​

  • 系统响应时间(避免线程过多导致调度延迟);​
  • 资源利用率(CPU、内存、IO 不超限);​
  • 任务类型(CPU/IO 密集);​
  • 实际压测结果(通过监控工具观察性能瓶颈)。​

3. 线程池的提交方式有哪几种?​

Java 线程池(ExecutorService)有两种核心提交方式:​

  • execute(Runnable command):​

无返回值,仅执行任务;若任务抛出异常,会直接抛出(需手动捕获)。​

  • submit(Callable<T> task) 或 submit(Runnable task, T result):​

有返回值(Future<T>),可通过Future获取任务结果或异常;任务异常会被封装在Future中(调用get()时抛出)。​

4. 锁的实现原理介绍一下?​

Java 中锁的实现主要分为两类:​

(1)synchronized 关键字​

  • 底层依赖 对象头(Mark Word) 和 Monitor(监视器锁):​
  • 对象头存储锁状态(无锁、偏向锁、轻量级锁、重量级锁);​
  • 重量级锁通过 Monitor 实现:每个对象关联一个 Monitor,线程竞争锁时需获取 Monitor 的所有权(涉及操作系统互斥锁,开销较大)。​
  • JDK 6 后优化:引入偏向锁(减少无竞争时的开销)、轻量级锁(自旋锁,避免立即升级为重量级锁)。​

(2)java.util.concurrent.locks.Lock 接口(如 ReentrantLock)​

  • 基于 AQS(AbstractQueuedSynchronizer) 实现:​
  • AQS 通过内置的双向队列管理等待线程,用state变量表示锁的状态(0:无锁,>0:被持有);​
  • 线程竞争锁时,通过 CAS 操作修改state,失败则进入队列等待(可响应中断、设置超时)。​

5. TCP 协议中拥塞控制的主要作用是什么?​

拥塞控制是 TCP 协议为避免网络拥塞而设计的机制,主要作用:​

  • 防止发送方发送速率超过网络承载能力,避免数据包大量丢失;​
  • 维持网络稳定性,保证数据传输的高效性(在拥塞与吞吐量间平衡)。​

核心算法包括:慢启动、拥塞避免、快重传、快恢复。​

6. String 类的常用函数有哪些?列举十种。​

String类提供了丰富的字符串操作方法,常用的有:​

  1. int length():返回字符串长度;​
  2. char charAt(int index):获取指定索引的字符;​
  3. String substring(int beginIndex, int endIndex):截取子串(左闭右开);​
  4. boolean equals(Object anObject):比较字符串内容是否相等;​
  5. int indexOf(String str):查找子串首次出现的索引(未找到返回 - 1);​
  6. String replace(char oldChar, char newChar):替换字符;​
  7. String trim():去除首尾空白字符;​
  8. String toLowerCase() / toUpperCase():转换为小写 / 大写;​
  9. String[] split(String regex):按正则分割字符串;​
  10. boolean startsWith(String prefix):判断是否以指定前缀开头。

7. String、StringBuffer、StringBuilder 的区别有哪些?所有类名包含 Buffer 的类的内部实现原理是什么?有什么优势?​

(1)三者区别​

特性​

String​

StringBuffer​

StringBuilder​

可变性​

不可变(底层数组final)​

可变(数组可修改)​

可变(数组可修改)​

线程安全​

安全(不可变)​

安全(方法加synchronized)​

不安全(无同步)​

性能​

差(修改时创建新对象)​

中(同步开销)​

优(无同步开销)​

(2)Buffer 类(如ByteBuffer、StringBuffer)的实现原理与优势​

  • 原理:内部基于数组存储数据,通过position(当前位置)、limit(可操作上限)、capacity(容量)三个指针控制数据读写,避免频繁创建新对象。​
  • 优势:​
  • 高效处理数据:通过指针操作减少数组复制,提升 IO / 字符串操作性能;​
  • 支持批量操作:如ByteBuffer可直接与 Channel 交互,适合网络 / 文件传输。​

8. String 字符串的不可变是指哪里不可变?​

String的不可变性体现在:​

  • 底层存储数据的数组被final修饰(JDK 8 为char[],JDK 9 + 为byte[]),无法修改数组引用;​
  • 类中未提供修改数组元素的方法(如substring、replace等方法均返回新String对象)。​

即:一旦创建String对象,其内容(字符序列)无法被修改,任何 “修改” 操作都会生成新对象。​

9. HTTP 协议有哪些字段,列举 3 个就可以。​

HTTP 请求 / 响应头包含多个字段,常用的有:​

  • Host:指定请求的服务器域名和端口(如Host: www.example.com);​
  • Content-Type:表示请求 / 响应体的数据格式(如Content-Type: application/json、text/html);​
  • User-Agent:描述发送请求的客户端(如浏览器型号、操作系统,User-Agent: Mozilla/5.0 ...)。​

10. Java 异常类有哪些?分别管理什么异常?​

Java 异常体系以Throwable为根,分为两类:​

(1)Error(错误)​

  • 表示 JVM 无法处理的严重错误(如内存溢出),无需捕获,如:​
  • OutOfMemoryError:内存不足;​
  • StackOverflowError:栈溢出(如递归过深)。​

(2)Exception(异常)​

  • 表示程序可处理的异常,分为受检异常(编译时需捕获)和非受检异常(RuntimeException及其子类,编译时无需捕获)。​
  • 受检异常:如IOException(IO 操作错误)、ClassNotFoundException(类未找到);​
  • 非受检异常:如NullPointerException(空指针)、IndexOutOfBoundsException(索引越界)、ArithmeticException(算术错误,如除 0)。

 

http://www.xdnf.cn/news/1187569.html

相关文章:

  • 基于深度学习的图像分类:使用DenseNet实现高效分类
  • 解决 Delete ␍ prettier/prettier问题的方案
  • TwinCAT3编程入门1
  • 理解Spring中的IoC
  • 探索 MyBatis-Plus
  • [2025CVPR-图象分类方向]SPARC:用于视觉语言模型中零样本多标签识别的分数提示和自适应融合
  • TDengine 转化函数 TO_UNIXTIMESTAMP 用户手册
  • S7-1500 与 ET200MP 的组态控制通信(Configuration Control)功能实现详解(下)
  • 【vue3+vue-pdf-embed】实现PDF+图片预览
  • 文件被删除了怎么恢复?恢复方法总结与重点注意事项
  • Mysql 日志 binlog redolog
  • deepseek本地部署,轻松实现编程自由
  • 在线事务型的业务、实时分析类业务、离线处理类型的业务
  • 数据赋能(332)——安全与合规——保密管理
  • MJ11032G和MJ11033G是对管由onsemi/安森美公司研发的一款高性能、低功耗的达林顿晶体管
  • Node.js(三)之Express
  • Zero-Shot TrackingT0:对象分割+运动感知记——当“切万物”武士学会运动记忆,目标跟踪稳如老狗
  • ESP32学习笔记_Components(1)——使用LED Strip组件点亮LED灯带
  • 图论水题日记
  • MC_GearInPos电子齿轮
  • ISIS高级特性LSP的分片扩展
  • Cacti 前台命令注入漏洞(CVE-2022-46169)
  • 深入解析Linux匿名管道机制与应用
  • 浅析PCIe 6.0 ATS地址转换功能
  • python基础:request模块简介与安装、基本使用,如何发送get请求响应数据,response属性与请求头
  • SpringBoot学习路径--SpringBoot的简单介绍和项目搭建
  • JDK8保姆级安装教程
  • 协作机器人掀起工厂革命:码垛场景如何用数据重塑制造业命脉?
  • day33:零基础学嵌入式之网络——TCP并发服务器
  • 渗透高级-----测试复现(第三次作业)