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

java面试-java基础

char 变量能不能存贮一个中文汉字?为什么?

char 变量可以存贮一个汉字,因为 Java 中使用的默认编码是 Unicode ,一个 char 类型占 2 个字节(16 bit),一个汉字是2个字节,所以放一个中文是没问题的。

jdk与jre的区别是什么?

jdk是java开发包,提供了java的开发环境和运行环境。而jre仅是java的运行环境,jdk包含jre以及其他编译工具和分析调试工具

Comparable 和 Comparator 有哪些区别?

•Comparable 位于 java.lang 包下,而 Comparator 位于 java.util 包下;•Comparable 在排序类的内部实现,而 Comparator 在排序类的外部实现;•Comparable 需要重写 CompareTo() 方法,而 Comparator 需要重写 Compare() 方法;

== 和 equals 的区别是什么?

双等于号对于基本类型,两者比较的是值,而对于引用类型,对比的是,其引用是否相同
equals 本质上就是 ==,只不过 String 和 Integer 等重写了 equals 方法,把它变成了值比较

final 在 java 中有什么作用??

final 修饰类,类不可以被继承。
final 修饰的方法不可以被重写
final 修饰的量是常量。必须初始化且不能被修改

String 属于基础的数据类型吗??

String 不属于基础类型,基础类型有 8 种:byte、boolean、char、short、int、float、long、double,而
String 属于对象

为什么 string 要设计成不可变??

(1) 节省空间:在 java 中,将字符串常量存储在字符串常量池中,这样这些字符串方便被共享,可以节省空间,同时防止其他线程修改该字符串,string 设计为不可变
(2) 提高效率,线程安全:正是由于 string 会被不同用户共享,在多线程编程时,在多线程共享string 时,因为 string 不可变所以 string 是线程安全且省略了同步的过程会显著提高效率。

String、StringBuffer、StringBuilder 的区别?

可变性: String 为字符串常量是不可变对象,StringBuffer 与 StringBuilder 为字符串变量是可变对象;
性能: String 它的底层是一个用 final 修饰的字符数组,每次修改相当于生成一个新对象,因此性能最低;StringBuffer 和 StringBuilder 底层使用的是没有用 final 修饰的字符数组 char[],所以在做字符串拼接的时候就在原来的内存上进行拼接,不会浪费内存空间。但是 StringBuffer 不同与StringBuilder 使用 synchronized 来保证线程安全,但两者性能均优于 String。;

java 中 IO 流分为几种?

主要分为输入输出流。字节流和字符流。字节流按八位传输。以字节为单位。进行输入输出。字符流按
16 位进行传输。以字符为单位进行输入输出。分别来看字符流(Reader、Writer)和字节流(InputStream、OutputStream)的使用。

Writer 使用Writer 可用来写入文件,请参考以下代码:// 给指定目录下的文件追加信息Writer writer = new FileWriter("d:\\io.txt",true);writer.append("老王");writer.close();这几行简单的代码就可以实现把信息 老王 追加到 d:\\io.txt 的文件下,参数二表示的是覆盖文字还是追加文字。② Reader 使用Reader 可用来读取文件,请参考以下代码:Reader reader = new FileReader("d:\\io.txt");BufferedReader bufferedReader = new BufferedReader(reader);String str = null;// 逐行读取信息while (null != (str = bufferedReader.readLine())) {System.out.println(str);}bufferedReader.close();reader.close();InputStream 使用InputStream 可用来读取文件,请参考以下代码:InputStream inputStream = new FileInputStream(new File("d:\\io.txt"));byte[] bytes = new byte[inputStream.available()];// 读取到 byte 数组inputStream.read(bytes);// 内容转换为字符串String content = new String(bytes, "UTF-8");inputStream.close();OutputStream 使用OutputStream 可用来写入文件,请参考以下代码:OutputStream outputStream = new FileOutputStream(new File("d:\\io.txt"),true);outputStream.write("老王".getBytes());outputStream.close();

同步与异步,阻塞与非阻塞

  • 同步和异步指的是:当前线程是否需要等待方法调用执行完毕。
    比如你调用一个搬运一百块石头的方法:
    同步指的是调用这个方法,你的线程需要等待这一百块石头搬完,然后得到搬完了的结果,接着
    再继续执行剩下的代码逻辑。
    异步指的是调用这个方法,立马就直接返回,不必等候这一百块石头还未搬完,可以立马执行后
    面的代码逻辑,然后利用回调(这里也能体现了回调函数的应用场景)或者事件通知的方式得到
    石头已经搬完的结果
  • 阻塞和非阻塞指的是:当前接口数据还未准备就绪时,线程是否被阻塞挂起。
    何为阻塞挂起?就是当前线程还处于 CPU 时间片当中,调用了阻塞的方法,由于数据未准备就
    绪,则时间片还未到就让出 CPU。
    所以阻塞和同步看起来都是等,但是本质上它们不一样,同步的时候可没有让出 CPU。
    而非阻塞就是当前接口数据还未准备就绪时,线程不会被阻塞挂起,可以不断轮询请求接口,看
    看数据是否已经准备就绪。
  • 至此我们可以得到一个结论:
    同步, 异步指:当数据还未处理完成时,代码的逻辑处理方式不同。
    阻塞, 非阻塞指:当数据还未处理完成时 (未就绪),线程的状态。所以同步, 异步其实是处于框架
    这种高层次维度来看待的,而阻塞与非阻塞往往针对底层的系统调用方面来抉择,也就是说两者
    是从不同维度来考虑的。

同步与异步,阻塞与非阻塞 IO

  • 前提:程序和硬件之间隔了个操作系统,而为了安全考虑,Linux 系统分了:用户态和内核态
    在这个前提下,我们再明确 I/O 操作有两个步骤:1.发起 I/O 请求 2.实际 I/O 读写(即数据从内核缓存拷贝到用户空间).

  • 阻塞 I/O 和非阻塞 I/O。按照上文,其实指的就是用户线程是否被阻塞,这里指代的步骤 1
    (发起 I/O 请求)。

  • 阻塞 I/O,指用户线程发起 I/O 请求的时候,如果数据还未准备就绪(例如暂无网络数据接 收),就会阻塞当前线程,让出 CPU。

  • 非阻塞 I/O,指用户线程发起 I/O 请求的时候,如果数据还未准备就绪(例如暂无网络数据
    接收),也不会阻塞当前线程,可以继续执行后续的任务。可以发现,这里的阻塞和非阻塞其实 是指用户线程是否会被阻塞。

  • 同步 I/O 和异步 I/O。按照上文,我们可以得知这就是根据 I/O 响应方式不同而划分的。

  • 同步 I/O,指用户线程发起 I/O 请求的时候,数据是有的,那么将进行步骤 2(实际 I/O 读
    写,即数据从内核缓存拷贝到用户空间),这个过程用户线程是要等待着拷贝完成。

  • 异步 I/O,指用户线程发起 I/O 请求的时候,数据是有的,那么将进行步骤 2(实际 I/O 读
    写,即数据从内核缓存拷贝到用户空间),拷贝的过程中不需要用户线程等待,用户线程可以去
    执行其它逻辑,等内核将数据从内核空间拷贝到用户空间后,用户线程会得到一个“通知”。再 仔细思考下,在 I/O场景下同步和异步说的其实是内核的实现,因为拷贝的执行者是内核,一种是同步将数据拷贝到用户空间,用户线程是需要等着的。一个是通过异步的方式,用户线程不 用等,在拷贝完之后,内核会调用指定的回调函数。

我再简单的总结一下,关于 I/O 的阻塞、非阻塞、同步、异步:
阻塞和非阻塞指的是发起 I/O 请求后,用户线程状态的不同,阻塞 I/O 在数据未准备就绪的
时候会阻塞当前用户线程,而非阻塞 I/O 会立马返回一个错误,不会阻塞当前用户线程。同步和
异步是指,内核的 I/O 拷贝实现,当数据准备就绪后,需要将内核空间的数据拷贝至用户空间,
如果是同步 I/O 那么用户线程会等待拷贝的完成,而异步 I/O 则这个拷贝过程用户线程该干嘛可
以去干吗,当内核拷贝完毕之后会“通知”用户线程。

BIO,NIO,AIO

BIO: 同步阻塞
NIO:同步非阻塞
AIO:异步非阻塞

异常处理

throw 和 throws 的区别?

throws 用来声明一个方法可能抛出的所有异常,表示谁调用都要使用 try-catch 进行异常处理而
throw 则是直接抛出一个具体异常

final、finally、finalize 有什么区别?

final 可以修饰类、变量、方法,修饰类表示该类不能被继承、修饰方法表示该方法不能被
重写、修饰变量表示该变量是一个常量不能被重新赋值。
在 try-catch 中不管有没有异常都要执行 finally 中的内容
finalize 属于所有类父类 Object 类的方法,该方法一般由垃圾回收器执行,当调用 system.gc()
时由垃圾回收器调用 finalize 执行

try-catch-finally 中哪个部分可以省略??

可以省略 catch 或者 finally。catch 和 finally 不可以同时省略。

原因:try 可以自己处理运行异常,try+catch 可以处理运行时 + 普通异常,当我们处理普通异常
省略 catch 编译不通过会报错但是当我们处理运行时异常则可以直接使用 try.

注:如果 catch 中 return 了,finally 会在 return 前执行

java 泛型

使用了迭代器就可以不用关注容器的内部细节,用同样的方式遍历不同类型的容器。(泛型可以修饰
类、方法、接口、变量。)

在这里插入图片描述

List<Object> 和 List<?> 有什么区别?

答:List<?> 可以容纳任意类型,只不过 List<?> 被赋值之后,就不允许添加和修改操作了;而
List<Object> 和 List<?> 不同的是它在赋值之后,可以进行添加和修改操作

List 和 List<Object> 的区别是什么?

答:List 和 List<Object> 都能存储任意类型的数据,但 List 和 List<Object> 的唯一区别就是,List不会触发编译器的类型安全检查,比如把 List<String> 赋值给 List 是没有任何问题的,但赋值给List<Object> 就不行

泛型的工作原理是什么?为什么要有类型擦除??

答:泛型是通过类型擦除来实现的,类型擦除指的是编译器在编译时,会擦除了所有类型相关的信息,比如 List 在编译后就会变成 List 类型,这样做的目的就是确保能和 Java 5 之前的版本(二进制类库)进行兼容。

相关文章:

java面试-java基础

char 变量能不能存贮一个中文汉字&#xff1f;为什么&#xff1f; char 变量可以存贮一个汉字&#xff0c;因为 Java 中使用的默认编码是 Unicode &#xff0c;一个 char 类型占 2 个字节&#xff08;16 bit&#xff09;&#xff0c;一个汉字是2个字节&#xff0c;所以放一个中…...

Kafka 消息不丢失

Kafka 消息不丢失生产者丢失消费者丢失不丢失配置Kafka 保证消息不丢失&#xff1a;只对已提交的消息 (committed message) 做有限度的持久化保证 已提交的消息&#xff1a;当 n 个 Broker 成功接收到该消息并写入到日志文件后&#xff0c;就告诉生产者该消息已成功提交有限度…...

ASEMI高压MOS管10N65参数,10N65规格,10N65封装

编辑-Z ASEMI高压MOS管10N65参数&#xff1a; 型号&#xff1a;10N65 漏极-源极电压&#xff08;VDS&#xff09;&#xff1a;650V 栅源电压&#xff08;VGS&#xff09;&#xff1a;30V 漏极电流&#xff08;ID&#xff09;&#xff1a;10A 功耗&#xff08;PD&#xff…...

LeetCode-416. 分割等和子集

目录题目分析回溯法动态规划动态规划(压缩)题目来源 416. 分割等和子集 题目分析 这道题目是要找是否可以将这个数组分割成两个子集&#xff0c;使得两个子集的元素和相等。 那么只要找到集合里能够出现 sum / 2 的子集总和&#xff0c;就算是可以分割成两个相同元素和子集了…...

2021年 第12届 蓝桥杯 Java B组 省赛真题详解及小结【第2场省赛 2021.05.09】

一、试题A&#xff1a;求余&#xff08;本题总分&#xff1a;5 分&#xff09; 得&#xff1a;5分 本题总分&#xff1a;5 分 【问题描述】 在 C/C/Java/Python 等语言中&#xff0c;使用 % 表示求余&#xff0c;请问 2021%20 的值是多少&#xff1f; 【答案提交】 这是一道结果…...

elasticSearch写入原理

elasticSearch写入原理 最近学习完了es相关的课程整理除了es的核心内容&#xff0c;学习这东西知其然知其所以然&#xff0c;自己按照自己的理解整理了es相关的面试题。先热个身&#xff0c;整理一下es的写入原理&#xff0c;有不对的地方请大家指正。 这些原理的东西我觉得还是…...

第十四届蓝桥杯模拟赛(第三期)Python

1 进制转换 问题描述   请找到一个大于 2022 的最小数&#xff0c;这个数转换成十六进制之后&#xff0c;所有的数位&#xff08;不含前导 0&#xff09;都为字母&#xff08;A 到 F&#xff09;。   请将这个数的十进制形式作为答案提交。 答案&#xff1a;2730 def ch…...

Pytorch模型参数的保存和加载

目录 一、前言 二、参数保存 三、参数的加载 四、保存和加载整个模型 五、总结 一、前言 在模型训练完成后&#xff0c;我们需要保存模型参数值用于后续的测试过程。由于保存整个模型将耗费大量的存储&#xff0c;故推荐的做法是只保存参数&#xff0c;使用时只需在建好模…...

面试热点题:回溯算法之组合 组合与组合总和 III

什么是回溯算法&#xff1f; 回溯算法也可以叫回溯搜索算法&#xff0c;回溯是递归的"副产品",回溯的本质是穷举&#xff0c;然后选出我们需要的数据&#xff0c;回溯本身不是特别高效的算法&#xff0c;但我们可以通过"剪枝"来优化它。 理解回溯算法 回溯…...

java面试-jvm

JVM JVM 是 java 虚拟机&#xff0c;简单来说就是能执行标准 java 字节码的虚拟计算机 JVM 是如何工作的 首先程序在执行之前先要把 Java 代码&#xff08;.java&#xff09;转换成字节码&#xff08;.class&#xff09;&#xff0c;JVM 通过类加载器&#xff08;ClassLoade…...

vscode下载与使用

1.vscode下载 官网下载地址&#xff1a;Download Visual Studio Code - Mac, Linux, Windows下载太慢&#xff0c;推荐文章&#xff1a;解决VsCode下载慢问题_vscode下载太慢_迷小圈的博客-CSDN博客下载太慢&#xff0c;推荐下载链接&#xff1a;https://vscode.cdn.azure.cn/s…...

人员摔倒识别预警算法 opencv

人员摔倒识别预警算法通过opencv网络模型技术&#xff0c;人员摔倒识别预警算法能够智能检测现场画面中人员有没有摔倒&#xff0c;无需人为干预可以立刻抓拍告警。OpenCV的全称是Open Source Computer Vision Library&#xff0c;是一个跨平台的计算机视觉处理开源软件库&…...

华为OD机试题 - 火星文计算(JavaScript)| 机考必刷

更多题库,搜索引擎搜 梦想橡皮擦华为OD 👑👑👑 更多华为OD题库,搜 梦想橡皮擦 华为OD 👑👑👑 更多华为机考题库,搜 梦想橡皮擦华为OD 👑👑👑 华为OD机试题 最近更新的博客使用说明本篇题解:火星文计算题目输入输出示例一输入输出说明Code解题思路版权说明…...

AI人工智能 - 初探

1.应用场景 主要用于了解和系统学习AI&#xff0c;从而可以在工作生活中利用AI做一些事。 2.学习/操作 1.文档阅读 下面的内容来自于与chatGPT的对话 2.整理输出 介绍AI 人工智能&#xff08;Artificial Intelligence&#xff0c;简称AI&#xff09;是计算机科学中的一个分支&…...

Spring-AOP工作流程

Spring-AOP工作流程 3&#xff0c;AOP工作流程 3.1 AOP工作流程 由于AOP是基于Spring容器管理的bean做的增强&#xff0c;所以整个工作过程需要从Spring加载bean说起: 流程1:Spring容器启动 容器启动就需要去加载bean,哪些类需要被加载呢?需要被增强的类&#xff0c;如:B…...

C51---串口发送指令,控制LED灯亮灭

1.Code: #include "reg52.h" #include "intrins.h" sfr AUXR 0x8E; sbit D5 P3^7; void UartInit(void) //9600bps11.0592MHz { //PCON & 0x7F; //波特率不倍速 AUXR 0x01; SCON 0x50; //8位数据,可变波…...

【Wiki】XWiki数据备份

XWiki为主题使用java开发的开源wiki&#xff0c;官网地址如下&#xff1a; https://www.xwiki.org/xwiki/bin/view/Main/ 目录1、 XWiki升级数据备份1.1、 获取XWiki配置的数据库与持久化目录信息1.2 备份数据库信息1.3 备份持久化目录2、XWiki数据迁移如果一个知识库不能确保数…...

ctk框架开发Qt插件应用示例工程

目录 前言 约定 插件工程pluginApp: 主启动工程StartApp: 效果演示 结语...

spring5源码篇(4)——beanFactoryPostProcessor执行/注解bean的装配

spring-framework 版本&#xff1a;v5.3.19 前面研究了beanDefinition的注册&#xff0c;但也仅仅是注册这一动作。那么在spring容器启动的过程中&#xff0c;是何时/如何装配的&#xff1f;以及装配的bean是如何注入的&#xff1f; &#xff08;考虑到xml方式基本不用了以及篇…...

masstransit的message几个高级用法

1&#xff09;问题&#xff0c;Class MessageA 基类&#xff0c;Class MessageB继承自MessageA&#xff1b; 用bus.Publish方法本想把有些消息只发给B队列&#xff0c;结果由于其继承关系A队列也获得了消息&#xff1b; 解决方法用send&#xff0c; Uri uri new Uri(RabbitM…...

漏洞分析丨cve-2012-0003

作者:黑蛋一、漏洞简介这次漏洞属于堆溢出漏洞&#xff0c;他是MIDI文件中存在的堆溢出漏洞。在IE6&#xff0c;IE7&#xff0c;IE8中都存在这个漏洞。而这个漏洞是Winmm.dll中产生的。二、漏洞环境虚拟机调试工具目标软件辅助工具XP-SP3、KaliOD、IDAIE6Windbg组件gflags.exe三…...

rm命令——删除文件或目录

rm命令是英文单词remove的缩写&#xff0c;主要功能是删除文件或目录。 因为删除文件是一个破坏性动作&#xff0c;因此&#xff0c;在使用时需要格外小心&#xff0c;在执行之前一定要再三确认删除的是哪个目录中的什么文件。 rm命令的语法格式如下&#xff1a; rm [选项] …...

【零基础入门学习Python---Python的基本语法使用】

一.Python基本语法使用 Python是一种易学且功能强大的编程语言,具有简洁的语法和广泛的应用领域。在本文中,我们将介绍Python的基本语法使用,以帮助初学者快速入门Python编程。 1.1 注释 Python 支持两种类型的注释:单行注释和多行注释。 单行注释:以 # 符号开头,从 # …...

数据仓库相关概念的解释

数据仓库相关概念的解释 文章目录数据仓库相关概念的解释1 ETL是什么&#xff1f;ETL体系结构2 数据流向何为数仓DW3 ODS 是什么&#xff1f;4 数据仓库层DWDWD 明细层DWD 轻度汇总层&#xff08;MID或DWB&#xff0c;data warehouse basis&#xff09;DWS 主题层&#xff08;D…...

1/4车、1/2车、整车悬架模糊PID控制仿真合集

目录 前言 1. 1/4悬架系统 1.1数学模型 1.2仿真分析 2. 1/2悬架系统 2.1数学模型 2.2仿真模型 2.3仿真分析 3. 整车悬架系统 3.1数学模型 3.2仿真分析 4.总结 前言 前面几篇文章介绍了LQR、SkyHook、H2/H∞、PID控制&#xff0c;接下来会继续介绍滑模、反步法、M…...

Linux性能补丁升级,避免不必要的跨核Wake-Up

导读一个由英特尔发起的、旨在改进Linux内核公平调度程序代码的补丁系列&#xff0c;也看到了来自AMD工程师和其他利益相关者的测试/反馈&#xff0c;并继续进行改进。这个补丁系列的重点是避免在不必要的情况下发生过多的跨核唤醒(Cross-CPU Wake-up)。这样一来&#xff0c;这…...

Spring Cloud Alibaba全家桶(六)——微服务组件Sentinel介绍与使用

前言 本文小新为大家带来 微服务组件Sentinel介绍与使用 相关知识&#xff0c;具体内容包括分布式系统存在的问题&#xff0c;分布式系统问题的解决方案&#xff0c;Sentinel介绍&#xff0c;Sentinel快速开始&#xff08;包括&#xff1a;API实现Sentinel资源保护&#xff0c;…...

拼多多2021笔试真题集 -- 3. 多多的求和计算

多多的求和计算 多多路上从左到右有N棵树&#xff08;编号1&#xff5e;N&#xff09;&#xff0c;其中第i个颗树有和谐值Ai。 多多鸡认为&#xff0c;如果一段连续的树&#xff0c;它们的和谐值之和可以被M整除&#xff0c;那么这个区间整体看起来就是和谐的。 现在多多鸡想请…...

DP算法:动态规划算法

步骤&#xff08;1&#xff09;确定初始状态&#xff08;2&#xff09;确定转移矩阵&#xff0c;得到每个阶段的状态&#xff0c;由上一阶段推到出来&#xff08;3&#xff09;确定边界条件。例题蓝桥杯——印章&#xff08;python实现&#xff09;使用dp记录状态&#xff0c;d…...

一三四——一六七

一三四、JavaScript——_DOM简介 MDNq前端参考文档&#xff1a;DOM 概述 - Web API 接口参考 | MDN (mozilla.org) 一三五、JavaScript——HelloWorld <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta h…...

陕西电信网站备案信息真实性核验委托书/企业网络营销青岛

概念介绍1、onInterceptTouchEvent()是用于处理事件&#xff08;重点onInterceptTouchEvent这个事件是从父控件开始往子控件传的&#xff0c;直到有拦截或者到没有这个事件的view&#xff0c;然后就往回从子到父控件&#xff0c;这次是onTouch的&#xff09;&#xff08;类似于…...

网站建设文字设计/哪里可以学seo课程

在学习 javascript 的过程中&#xff0c;我们第一步最应该了解和掌握的就是作用域&#xff0c;与之相关还有程序是怎么编译的&#xff0c;变量是怎么查找的&#xff0c;js 引擎是什么&#xff0c;引擎和作用域的关系又是什么&#xff0c;这些是 javascript 这门语言最基础的地基…...

越秀区网站建设公司/危机公关处理

每次单击Graphical Layout窗口时,Eclipse ADT都会给我空错误消息.这是截图&#xff1a;以下是第一个错误的详细信息&#xff1a;java.lang.NullPointerExceptionat com.android.layoutlib.bridge.impl.RenderSessionImpl.getDefaultProperties(RenderSessionImpl.java:1476)at …...

网站别人做的收到方正侵权/二十四个关键词

Dao 中需要通过 SqlSession 对象来操作 DB。而 SqlSession 对象的创建&#xff0c; 需要其工厂对象 SqlSessionFactory。SqlSessionFactory 对象&#xff0c; 需要通过其构建器对象 SqlSessionFactoryBuilder 的 build()方法&#xff0c;在加载了主配置文件的输入流对象后创建 …...

中学网上做试卷的网站/seo引擎搜索网站

介绍 Vue-loader 是什么&#xff1f; vue-loader 是一个加载器&#xff0c;能把如下格式的 Vue 组件转化成JavaScript模块。vue-loader 提供了一些非常酷炫的特性&#xff1a; ES2015默认可用&#xff1b;在每个 Vue 组件内支持其他的 Webpack 加载器&#xff0c;如用于<sty…...

北京最大的网站建设有限公司/代写文章价格表

[20171121]rman backup as copy 2.txt --//昨天测试backup as copy ,备份时备份文件的文件头什么时候更新.是最后完成后还是顺序写入备份文件. --//我测试的数据文件使用数据文件2(表空间sysaux),也许是文件不够大,应该减慢备份速度来测试看看. 1.环境: SCOTTbook> &r/…...