当前位置: 首页 > 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.lryc.cn/news/599882.html

相关文章:

  • 函数-变量的作用域和生命周期
  • 算法思维进阶 力扣 62.不同路径 暴力搜索 记忆化搜索 DFS 动态规划 C++详细算法解析 每日一题
  • Vue基础(24)_VueCompinent构造函数、Vue实例对象与组件实例对象
  • 【循环语句,求100内能被6整除的和】
  • 智能制造——解读39页MOM数字化工厂平台解决方案【附全文阅读】
  • Android 10.0 sts CtsSecurityBulletinHostTestCases的相关异常分析
  • ARPG开发流程第一章——方法合集
  • 负载均衡:提升业务性能的关键技术
  • 后端项目中大量 SQL 执行的性能优化
  • ptmalloc(glibc-2.12.1)源码解析2
  • 基于米尔瑞芯微RK3576开发板部署运行TinyMaix:超轻量级推理框架
  • Shopify Section Rendering API
  • 小白如何认识并处理Java异常?
  • 【嵌入式汇编基础】-ARM架构基础(二)
  • 从0到1:初创企业适合做企业架构吗?TOGAF 能带来什么?
  • 小架构step系列25:错误码
  • Haproxy七层代理及配置
  • 数据结构2-集合类ArrayList与洗牌算法
  • 在Word和WPS文字中添加的拼音放到文字右边
  • JS与Go:编程语言双星的碰撞与共生
  • 初识opencv04——图像预处理3
  • ModelWhale+数据分析 消费者行为数据分析实战
  • 判断子序列-leetcode
  • 广州 VR 安全用电技术:工作原理、特性及优势探析​
  • CTF-Web题解:“require_once(‘flag.php‘); assert(“$i == $u“);”
  • Linux系统基本配置以及认识文件作用
  • 双非上岸985!专业课140分经验!信号与系统考研专业课140+上岸中南大学,通信考研小马哥
  • 20分钟学会TypeScript
  • 本地内网IP映射到公网访问如何实现?内网端口映射外网工具有哪些?
  • VUE2 学习笔记6 vue数据监测原理