爆款云主机2核4G限时秒杀,88元/年起!
查看详情

活动

天翼云最新优惠活动,涵盖免费试用,产品折扣等,助您降本增效!
热门活动
  • 618智算钜惠季 爆款云主机2核4G限时秒杀,88元/年起!
  • 免费体验DeepSeek,上天翼云息壤 NEW 新老用户均可免费体验2500万Tokens,限时两周
  • 云上钜惠 HOT 爆款云主机全场特惠,更有万元锦鲤券等你来领!
  • 算力套餐 HOT 让算力触手可及
  • 天翼云脑AOne NEW 连接、保护、办公,All-in-One!
  • 中小企业应用上云专场 产品组合下单即享折上9折起,助力企业快速上云
  • 息壤高校钜惠活动 NEW 天翼云息壤杯高校AI大赛,数款产品享受线上订购超值特惠
  • 天翼云电脑专场 HOT 移动办公新选择,爆款4核8G畅享1年3.5折起,快来抢购!
  • 天翼云奖励推广计划 加入成为云推官,推荐新用户注册下单得现金奖励
免费活动
  • 免费试用中心 HOT 多款云产品免费试用,快来开启云上之旅
  • 天翼云用户体验官 NEW 您的洞察,重塑科技边界

智算服务

打造统一的产品能力,实现算网调度、训练推理、技术架构、资源管理一体化智算服务
智算云(DeepSeek专区)
科研助手
  • 算力商城
  • 应用商城
  • 开发机
  • 并行计算
算力互联调度平台
  • 应用市场
  • 算力市场
  • 算力调度推荐
一站式智算服务平台
  • 模型广场
  • 体验中心
  • 服务接入
智算一体机
  • 智算一体机
大模型
  • DeepSeek-R1-昇腾版(671B)
  • DeepSeek-R1-英伟达版(671B)
  • DeepSeek-V3-昇腾版(671B)
  • DeepSeek-R1-Distill-Llama-70B
  • DeepSeek-R1-Distill-Qwen-32B
  • Qwen2-72B-Instruct
  • StableDiffusion-V2.1
  • TeleChat-12B

应用商城

天翼云精选行业优秀合作伙伴及千余款商品,提供一站式云上应用服务
进入甄选商城进入云市场创新解决方案
办公协同
  • WPS云文档
  • 安全邮箱
  • EMM手机管家
  • 智能商业平台
财务管理
  • 工资条
  • 税务风控云
企业应用
  • 翼信息化运维服务
  • 翼视频云归档解决方案
工业能源
  • 智慧工厂_生产流程管理解决方案
  • 智慧工地
建站工具
  • SSL证书
  • 新域名服务
网络工具
  • 翼云加速
灾备迁移
  • 云管家2.0
  • 翼备份
资源管理
  • 全栈混合云敏捷版(软件)
  • 全栈混合云敏捷版(一体机)
行业应用
  • 翼电子教室
  • 翼智慧显示一体化解决方案

合作伙伴

天翼云携手合作伙伴,共创云上生态,合作共赢
天翼云生态合作中心
  • 天翼云生态合作中心
天翼云渠道合作伙伴
  • 天翼云代理渠道合作伙伴
天翼云服务合作伙伴
  • 天翼云集成商交付能力认证
天翼云应用合作伙伴
  • 天翼云云市场合作伙伴
  • 天翼云甄选商城合作伙伴
天翼云技术合作伙伴
  • 天翼云OpenAPI中心
  • 天翼云EasyCoding平台
天翼云培训认证
  • 天翼云学堂
  • 天翼云市场商学院
天翼云合作计划
  • 云汇计划
天翼云东升计划
  • 适配中心
  • 东升计划
  • 适配互认证

开发者

开发者相关功能入口汇聚
技术社区
  • 专栏文章
  • 互动问答
  • 技术视频
资源与工具
  • OpenAPI中心
开放能力
  • EasyCoding敏捷开发平台
培训与认证
  • 天翼云学堂
  • 天翼云认证
魔乐社区
  • 魔乐社区

支持与服务

为您提供全方位支持与服务,全流程技术保障,助您轻松上云,安全无忧
文档与工具
  • 文档中心
  • 新手上云
  • 自助服务
  • OpenAPI中心
定价
  • 价格计算器
  • 定价策略
基础服务
  • 售前咨询
  • 在线支持
  • 在线支持
  • 工单服务
  • 建议与反馈
  • 用户体验官
  • 服务保障
  • 客户公告
  • 会员中心
增值服务
  • 红心服务
  • 首保服务
  • 客户支持计划
  • 专家技术服务
  • 备案管家

了解天翼云

天翼云秉承央企使命,致力于成为数字经济主力军,投身科技强国伟大事业,为用户提供安全、普惠云服务
品牌介绍
  • 关于天翼云
  • 智算云
  • 天翼云4.0
  • 新闻资讯
  • 天翼云APP
基础设施
  • 全球基础设施
  • 信任中心
最佳实践
  • 精选案例
  • 超级探访
  • 云杂志
  • 分析师和白皮书
  • 天翼云·创新直播间
市场活动
  • 2025智能云生态大会
  • 2024智算云生态大会
  • 2023云生态大会
  • 2022云生态大会
  • 天翼云中国行
天翼云
  • 活动
  • 智算服务
  • 产品
  • 解决方案
  • 应用商城
  • 合作伙伴
  • 开发者
  • 支持与服务
  • 了解天翼云
      • 文档
      • 控制中心
      • 备案
      • 管理中心

      Java面试题-基础篇

      首页 知识中心 软件开发 文章详情页

      Java面试题-基础篇

      2024-10-23 08:57:40 阅读次数:28

      Java,NIO,线程

      基础篇

      1.面向对象和面向过程的区别

      面向过程的实现更简单,所以在简单程序的运行来说,性能是优于面向对象的。对于简单的程序来说,可以快速的实现,面向对象的编程相对来说,要实现的步骤比更复杂一点,要先从类开始设计,还要定义类如何生成对象,但是面向对象的程序容易扩展,容易维护,易复用的优点,而且更加贴近现实世界。

      另外,设计糟糕的面向过程的程序有时性能并不见得一定优于面向对象的编程,而面向对象的程序可以通过优化,接近面向过程的程序的性能。

      2.Java 语言有哪些特点?

      1).简单易学; Java简化了C语言很多复杂难懂的操作,所以简单易学。

      2).面向对象 (封装,继承,多态) ;

      3).平台无关性 ( Java 虚拟机实现平台无关性) ;在Windows和Linux上都可以使用

      4).可靠性; 可以平稳,持续的运行

      5).安全性; 内存被严格管理,利用虚拟机是使程序与操作系统隔离。

      6).支持多线程。Java程序支持并发执行,充分利用CPU。

      7).支持网络编程并且很方便(Java 语言诞生本身就是为简化网络编程设计的,因此Java 语言不仅支持网络编程而且很方便) :

      8).编译与解释并存;

      3.字符型常量和字符串常量的区别?

      1. 形式上: 字符常量是单引号引起的一个字符; 字符串常量是双引号引起的若干个字符
      2. 含义上: 字符常量相当于一个整型值( ASCII 值),可以参加表达式运算;字符常量代表一个地址值(该字符串在内存中存放位置)
      3. 占内存大小 字符常量只占 2 个字节; 字符串常量占若个字节(注意: char 在Java 中占两个字节)

      4.构造器 Constructor 是否可被 override?

      Constructor 不能被 override (重写),但是可以overload (重载),所以你可以看到一个类中有多个构造函数的情况

      4.接口和抽象类的区别是什么?

      1.接口的方法默认是 public,所有方法在接口中不能有实现(ava 8 开始接口方法可以有默认实现)而抽象类可以有非抽象的方法。

      2.接口中除了 static、final变量,不能有其他变量,而抽象类中则不一定。

      3.一个类可以实现多个接口,但只能实现一个抽象类。接口自己本身可以通过 extends 关键字扩展多个

      接口。

      4.接口方法默认修饰符是 public,抽象方法可以有 public、proteted 和 default 这些修饰符 (抽象方法就是为了被重写所以不能使用 private 关键字修饰 !)

      5.从设计层面来说,抽象是对类的抽象,是一种模板设计,而接口是对行为的抽象,是一种行为的规范。

      5.构造方法有哪些特性?

      1.名字与类名相同。

      2.没有返回值,但不能用 void 声明构造函数。3.生成类的对象时自动执行,无需调用

      6.简述线程、程序、进程的基本概念。以及他们之间关系是什么?

      线程与进程相似,但线程是一个比进程更小的执行单位。一个进程在其执行的过程中可以产生多个线程。与进程不同的是同类的多个线程共享同一块内存空间和一组系统资源,所以系统在产生一个线程,或是在各个线程之间作切换工作时,负担要比进程小得多,也正因为如此,线程也被称为轻量级进程。

      程序是含有指令和数据的文件,被存储在碰盘或其他的数据存储设备中,也就是说程序是静态的代码。

      进程是程序的一次执行过程,是系统运行程序的基本单位,因此进程是动态的。系统运行一个程序即是个进程从创建,运行到消亡的过程。简单来说,一个进程就是一个执行中的程序,它在计算机中一个指令接着一个指令地执行着,同时,每个进程还占有某些系统资源如 CPU 时间,内存空间,文件,输入输出设备的使用权等等。换句话说,当程序在执行时,将会被操作系统载入内存中。 线程是进程划分成的更小的运行单位。线程和进程最大的不同在于基本上各进程是独立的,而各线程则不一定,因为同一进程中的线程极有可能会相互影响。从另一角度来说,进程属于操作系统的范畴,主要是同一段时间内,可以同时执行一个以上的程序,而线程则是在同一程序内几乎同时执行一个以上的程序段。

      7.BIO,NIO,AIO 有什么区别?

      BIO(Blocking I/O): 同步阻塞 I/O 模式,数据的读取写入必须阻塞在一个线程内等待其完成。在活动连接数不是特别高 (小于单机 1000) 的情况下,这种模型是比较不错的,可以让每一个连接专注于自己的 I/O 并且编程模型简单,也不用过多考虑系统的过载、限流等问题。线程池本身就是一个天然的漏斗,可以缓冲一些系统处理不了的连接或请求。但是,当面对十万甚至百万级连接的时候,传统的 BIO 模型是无能为力的。因此,我们需要一种更高效的I/O 处理模型来应对更高的并发量。

      NIO(New I/O): NIO 是一种同步非阻塞的I/O 模型,在Java 1.4 中引入了 NIO 框架,对应ava.nio包,提供了 Channel,Selector,Buffer 等抽象。NIO 中的 N 可以理解为 Non-blocking,不单纯是New。它支持面向缓冲的,基于通道的I/O 操作方法。NIO 提供了与传统 BIO 模型中的 Socket 和serverSocket 相对应的 SocketChannel和 ServerSocketChannel 两种不同的套接字通道,实现两种通道都支持阻塞和非阻塞两种模式。阻塞模式使用就像传统中的支持一样,比较简单,但是性能和可靠性都不好:非阻塞模式正好与之相反。对于低负载、低并发的应用程序,可以使用同步阻塞 I/O来提升开发速率和更好的维护性:对于高负载、高并发的(网络)应用,应使用 NIO 的非阻塞模式来开发。

      AIO(Asynchronous I/0): AIO 也就是 NIO2。在Java 7 中引入了 NIO 的改进版 NIO 2,它是异步非阻塞的 IO 模型。异步I/O 是基于事件和回调机制实现的,也就是应用操作之后会直接返回,不会堵塞在那里,当后台处理完成,操作系统会通知相应的线程进行后续的操作。AIO 是异步 IO 的缩写,虽然 NIO 在网络操作中,提供了非阻塞的方法,但是 NIO 的 IO 行为还是同步的。对于 NIO 来说我们的业务线程是在 IO 操作准备好时,得到通知,接着就由这个线程自行进行IO 操作,IO 操作本身是同步的。查阅网上相关资料,我发现就目前来说 AIO 的应用还不是很广泛,Netty 之前也尝试使用过 AIO,不过又放弃了。

      Java集合

      1.说说List,Set,Map三者的区别?

      List(对付顺序的好帮手): List接口存储一组不唯一 (可以有多个元素引用相同的对象),有序的对象

      Set(注重独一无二的性质): 不允许重复的集合。不会有多个元素引用相同的对象。

      Map(用Key来搜索的专家): 使用键值对存储。Map会维护与Key有关联的值。两个Key可以引用相同的对象,但Key不能重复,典型的Kev是String类型,但也可以是任何对象。

      2. ArrayList 与 Vector 区别呢?为什么要用Arraylist取代Vector呢?

      Vector类的所有方法都是同步的。可以由两个线程安全地访问一个Vector对象、但是一个线程访问Vector的话代码要在同步操作上耗费大量的时间。

      ArrayList不是同步的,所以在不需要保证线程安全时建议使用ArrayList。

      多线程

      1.使用多线程可能带来什么问题?

      并发编程的目的就是为了能提高程序的执行效率提高程序运行速度,但是并发编程并不总是能提高程序运行速度的,而且并发编程可能会遇到很多问题,比如: 内存泄漏、上下文切换、死锁还有受限于硬件和软件的资源闲置问题。

      2.什么是上下文切换?

      多线程编程中一般线程的个数都大于 CPU 核心的个数,而一个 CPU 核心在任意时刻只能被一个线程使用,为了让这些线程都能得到有效执行,CPU 采取的策略是为每个线程分配时间片并轮转的形式。当一个线程的时间片用完的时候就会重新处于就绪状态让给其他线程使用,这个过程就属于一次上下文切换。

      概括来说就是: 当前任务在执行完 CPU 时间片切换到另一个任务之前会先保存自己的状态,以便下次再切换回这个任务时,可以再加载这个任务的状态。任务从保存到再加载的过程就是一次上下文切换。

      上下文切换通常是计算密集型的。也就是说,它需要相当可观的处理器时间,在每秒几十上百次的切换中,每次切换都需要纳秒量级的时间。所以,上下文切换对系统来说意味着消耗大量的 CPU 时间,事实上,可能是操作系统中时间消耗最大的操作。

      Linux 相比与其他操作系统 (包括其他类 Linux 系统)有很多的优点,其中有一项就是,其上下文切换和模式切换的时间消耗非常少。

      3.什么是线程死锁?如何避免死锁?

      学过操作系统的朋友都知道产生死锁必须具备以下四个条件:

      1. 互斥条件: 该资源任意一个时刻只由一个线程占用。

      2. 请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。

      3.不剥夺条件:线程已获得的资源在末使用完之前不能被其他线程强行剥夺,只有自己使用完毕后才释放资源。

      4.循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。

      如何避免线程死锁?

      我们只要破坏产生死锁的四个条件中的其中一个就可以了

      破坏互斥条件

      这个条件我们没有办法破坏,因为我们用锁本来就是想让他们互斥的(临界资源需要工斥访问)。

      破坏请求与保持条件

      一次性申请所有的资源。

      破坏不剥夺条件

      占用部分资源的线程进一步申请其他资源时,如果申请不到,可以主动释放它占有的资源。

      破坏循环等待条件

      靠按序申请资源来预防。按某一顺序申请资源,释放资源则反序释放。破坏循环等待条件,

      版权声明:本文内容来自第三方投稿或授权转载,原文地址:https://blog.51cto.com/tntxia/7739055,作者:虾王之王,版权归原作者所有。本网站转在其作品的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如因作品内容、版权等问题需要同本网站联系,请发邮件至ctyunbbs@chinatelecom.cn沟通。

      上一篇:在Vite中使用Echarts

      下一篇:Javascript算法题(二)

      相关文章

      2025-05-16 09:15:17

      Linux系统基础-多线程超详细讲解(5)_单例模式与线程池

      Linux系统基础-多线程超详细讲解(5)_单例模式与线程池

      2025-05-16 09:15:17
      单例 , 线程 , 队列
      2025-05-14 10:07:38

      超级好用的C++实用库之互斥锁

      互斥锁是一种用于多线程编程的同步机制,其主要目的是确保在并发执行环境中,同一时间内只有一个线程能够访问和修改共享资源。

      2025-05-14 10:07:38
      CHP , Lock , 互斥 , 线程 , 释放 , 锁定
      2025-05-14 10:03:13

      arm架构下JAVA开发

      ARM(Advanced RISC Machine)是一种基于精简指令集计算(RISC)设计的处理器架构。它以高效、节能著称,因此广泛应用 于从智能手机到物联网设备的各个领域。

      2025-05-14 10:03:13
      Java , JVM , 嵌入式 , 架构 , 设备
      2025-05-14 10:03:13

      超级好用的C++实用库之线程基类

      在C++中,线程是操作系统能够进行运算调度的最小单位。一个进程可以包含多个线程,这些线程共享进程的资源,比如:内存空间和系统资源,但它们有自己的指令指针、堆栈和局部变量等。

      2025-05-14 10:03:13
      Linux , void , Windows , 函数 , 操作系统 , 线程
      2025-05-14 10:02:58

      Java实现根据概率中奖率怎么算

      要实现根据概率计算中奖率的功能,可以使用 Java 编程语言编写一个简单的程序。

      2025-05-14 10:02:58
      Java , 概率 , 模拟 , 程序
      2025-05-14 10:02:48

      互斥锁解决redis缓存击穿

      在高并发系统中,Redis 缓存是一种常见的性能优化方式。然而,缓存击穿问题也伴随着高并发访问而来。

      2025-05-14 10:02:48
      Redis , 互斥 , 数据库 , 线程 , 缓存 , 请求
      2025-05-14 09:51:21

      Java 代码本地设置Hadoop用户名密码

      在Hadoop环境中,通常使用Kerberos进行身份验证。但在一些开发或测试环境中,我们可能需要在本地代码中设置用户名和密码来模拟或进行简单的测试。

      2025-05-14 09:51:21
      Hadoop , Java , 代码 , 使用 , 用户名 , 认证
      2025-05-14 09:51:21

      java 判断map为null或者空

      java 判断map为null或者空

      2025-05-14 09:51:21
      Java , Map , null , 方法 , 是否 , 检查 , 示例
      2025-05-14 09:51:15

      java怎么对线程池做监控

      对Java线程池进行监控是确保系统性能和稳定性的重要部分。监控线程池可以帮助我们了解线程池的状态,如当前活跃线程数、任务队列长度、已完成任务数等。

      2025-05-14 09:51:15
      Java , 方法 , 监控 , 示例 , 线程 , 队列
      2025-05-13 09:53:23

      java动态获取实体类的字段

      在Java中,我们可以使用反射(Reflection)API来动态地获取实体类的字段。

      2025-05-13 09:53:23
      API , Java , 使用 , 字段 , 实体类 , 方法 , 获取
      查看更多
      推荐标签

      作者介绍

      天翼云小翼
      天翼云用户

      文章

      33561

      阅读量

      5256952

      查看更多

      最新文章

      Linux系统基础-多线程超详细讲解(5)_单例模式与线程池

      2025-05-16 09:15:17

      超级好用的C++实用库之互斥锁

      2025-05-14 10:07:38

      arm架构下JAVA开发

      2025-05-14 10:03:13

      超级好用的C++实用库之线程基类

      2025-05-14 10:03:13

      Java实现根据概率中奖率怎么算

      2025-05-14 10:02:58

      互斥锁解决redis缓存击穿

      2025-05-14 10:02:48

      查看更多

      热门文章

      Java线程同步synchronized wait notifyAll

      2023-04-18 14:15:05

      Java/Android Annotation注解/注入(二)

      2023-04-13 09:37:00

      Android/Java判断字符串String是否为float浮点数或double类型

      2023-04-17 09:39:54

      Java小数点数字和百分号数字之间的转换

      2023-04-13 09:48:57

      Java的自带注解Annotation(一)

      2023-05-10 06:02:06

      Java/Android Annotation注解/注入(三)

      2023-04-13 09:37:00

      查看更多

      热门标签

      java Java python 编程开发 代码 开发语言 算法 线程 Python html 数组 C++ 元素 javascript c++
      查看更多

      相关产品

      弹性云主机

      随时自助获取、弹性伸缩的云服务器资源

      天翼云电脑(公众版)

      便捷、安全、高效的云电脑服务

      对象存储

      高品质、低成本的云上存储服务

      云硬盘

      为云上计算资源提供持久性块存储

      查看更多

      随机文章

      【CPP11?】结合CPP发展历史来理解CPP11

      你还不知道ThreadLocal线程本地存储吗

      Java并发基础:深度解析Reentrant可重入性实现

      汇编语言教程及实例

      数据结构之线性表的顺序存储(Java表示)

      Spring中使用Async进行异步功能开发实战-以大文件上传为例

      • 7*24小时售后
      • 无忧退款
      • 免费备案
      • 专家服务
      售前咨询热线
      400-810-9889转1
      关注天翼云
      • 旗舰店
      • 天翼云APP
      • 天翼云微信公众号
      服务与支持
      • 备案中心
      • 售前咨询
      • 智能客服
      • 自助服务
      • 工单管理
      • 客户公告
      • 涉诈举报
      账户管理
      • 管理中心
      • 订单管理
      • 余额管理
      • 发票管理
      • 充值汇款
      • 续费管理
      快速入口
      • 天翼云旗舰店
      • 文档中心
      • 最新活动
      • 免费试用
      • 信任中心
      • 天翼云学堂
      云网生态
      • 甄选商城
      • 渠道合作
      • 云市场合作
      了解天翼云
      • 关于天翼云
      • 天翼云APP
      • 服务案例
      • 新闻资讯
      • 联系我们
      热门产品
      • 云电脑
      • 弹性云主机
      • 云电脑政企版
      • 天翼云手机
      • 云数据库
      • 对象存储
      • 云硬盘
      • Web应用防火墙
      • 服务器安全卫士
      • CDN加速
      热门推荐
      • 云服务备份
      • 边缘安全加速平台
      • 全站加速
      • 安全加速
      • 云服务器
      • 云主机
      • 智能边缘云
      • 应用编排服务
      • 微服务引擎
      • 共享流量包
      更多推荐
      • web应用防火墙
      • 密钥管理
      • 等保咨询
      • 安全专区
      • 应用运维管理
      • 云日志服务
      • 文档数据库服务
      • 云搜索服务
      • 数据湖探索
      • 数据仓库服务
      友情链接
      • 中国电信集团
      • 189邮箱
      • 天翼企业云盘
      • 天翼云盘
      ©2025 天翼云科技有限公司版权所有 增值电信业务经营许可证A2.B1.B2-20090001
      公司地址:北京市东城区青龙胡同甲1号、3号2幢2层205-32室
      • 用户协议
      • 隐私政策
      • 个人信息保护
      • 法律声明
      备案 京公网安备11010802043424号 京ICP备 2021034386号