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

3 JDK 常见的包和BIO,NIO,AIO

JDK常见的包

java.lang:系统基础类
java.io:文件操作相关类,比如文件操作
java.nio:为了完善io包中的功能,提高io性能而写的一个新包
java.net:网络相关的包
java.util:java辅助类,特别是集合类
java.sql:数据库操作类

IO流

按照流的流向分可分为输入流和输出流
按照操作单元分可分为字节流和字符流
按照流的角色分可分为节点流和处理流

java io 流共涉及40多个类,看上去很乱,其实有自己的规则,而且都是相关联的。java io都是从下面的四个基类中派生出来的。
InputStream/Reader:所以输入流的基类。前面是字节输入流,后面是字符输入流
OutputStream/Writer:所有输出流的基类,前面是字节输出流,后面是字符输出流

按照操作方式给相关的类分类,如下图:
在这里插入图片描述
![(https://i-blog.csdnimg.cn/direct/93122a2ecec9491e928e2912de6e17d8.png)

在这里插入图片描述

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

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

上面是一些书面的表达,读起来感觉就是一些冰冷的文字。
我们先描述下BIO,当我们开启一个线程执行IO操作的时候,要等这个IO流在对应的通道中读写完成之后,线程才能接着往下执行。我们写一个简单的网络编程的代码如下:

import java.io.;
import java.net.
;
public class BIOServer {
public static void main(String[] args) throws IOException {
ServerSocket serverSocket = new ServerSocket(8080);
while (true) {
Socket clientSocket = serverSocket.accept();
handleClient(clientSocket);
}
}
private static void handleClient(Socket client) throws IOException {
BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));
PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(client.getOutputStream())), true);
String request;
while ((request = in.readLine()) != null) {
out.println("Request received: " + request);
if (request.equals(“END”)) {
break;
}
}
in.close();
out.close();
client.close();
}
}

我们发现这段代码中,一直在等待client发送消息,如果没有发送消息就会一直等待并阻塞下去

我们看下下面基于NIO的代码实现

package com.study.test;
import java.io.IOException;
import java.net.InetSocketAddress;
import java.nio.ByteBuffer;
import java.nio.channels.SelectionKey;
import java.nio.channels.Selector;
import java.nio.channels.ServerSocketChannel;
import java.nio.channels.SocketChannel;
import java.util.Iterator;
public class Server {
public static void main(String[] args) throws IOException {
//1. 获取通道
ServerSocketChannel ssChannel = ServerSocketChannel.open();
//2. 切换非阻塞模式
ssChannel.configureBlocking(false);
//3. 绑定连接
ssChannel.bind(new InetSocketAddress(9999));
//4. 获取选择器
Selector selector = Selector.open();
//5. 将通道注册到选择器上, 并且指定“监听接收事件”
ssChannel.register(selector, SelectionKey.OP_ACCEPT);
//6. 轮询式的获取选择器上已经“准备就绪”的事件
// selector.select() 方法会阻塞,直到有客户端连接进来,或者客户端SocketChannel发送数据过来
while (selector.select() > 0) {
System.out.println(“轮一轮”);
//7. 获取当前选择器中所有注册的“选择键(已就绪的监听事件)”
Iterator it = selector.selectedKeys().iterator();
while (it.hasNext()) {
//8. 获取准备“就绪”的是事件
SelectionKey sk = it.next();
//9. 判断具体是什么事件准备就绪
if (sk.isAcceptable()) {
//10. 若“接收就绪”,获取客户端连接
SocketChannel sChannel = ssChannel.accept();
//11. 切换非阻塞模式
sChannel.configureBlocking(false);
//12. 将该通道注册到选择器上
sChannel.register(selector, SelectionKey.OP_READ);
} else if (sk.isReadable()) {
//13. 获取当前选择器上“读就绪”状态的通道
SocketChannel sChannel = (SocketChannel) sk.channel();
//14. 读取数据
ByteBuffer buf = ByteBuffer.allocate(1024);//[pos=0 lim=1024 cap=1024]
int len;//数据长度
while ((len = sChannel.read(buf)) > 0) {//[pos=数据长度 lim=1024 cap=1024]
buf.flip();//[pos=0 lim=数据长度 cap=1024]
System.out.println(new String(buf.array(), 0, len));
buf.clear();
}
}
//15. 取消选择键 SelectionKey
it.remove();
}
}
}
}
##客户端的代码
package com.study.test;
import java.net.InetSocketAddress;
import java.nio.ByteBuffer;
import java.nio.channels.SocketChannel;
import java.text.SimpleDateFormat;
import java.util.Scanner;
public class Client {
public static void main(String[] args) throws Exception {
//1. 获取通道
SocketChannel sChannel = SocketChannel.open(new InetSocketAddress(“127.0.0.1”, 9999));
//2. 切换非阻塞模式
sChannel.configureBlocking(false);
//3. 分配指定大小的缓冲区
ByteBuffer buf = ByteBuffer.allocate(1024);
//4. 发送数据给服务端
Scanner scan = new Scanner(System.in);
while (scan.hasNext()) {
String str = scan.nextLine();
buf.put((new SimpleDateFormat(“yyyy/MM/dd HH:mm:ss”).format(System.currentTimeMillis())
+ “\n” + str).getBytes());
buf.flip();
sChannel.write(buf);
buf.clear();
}
//5. 关闭通道
sChannel.close();
}
}
这个案例启动了一个 Selector 选择器,将服务端通道 ServerSocketChannel 注册到 Selector 选择器上,并绑定一个接收 OP_ACCEPT 事件
然后调用 Selector 选择器select()方法,这个方法是阻塞,直到 有 OP_ACCEPT事件(有客户端SocketChannel 连接请求),select()方法不再阻塞,继续往下执行,
接收到客户端SocketChannel 连接请求后,将这个SocketChannel 再注册到 Selector 选择器上,并绑定一个读 OP_READ 事件,以后 选择器 就可以监听到 客户端发送过来的数据
每次 Selector 选择器 接收到 事件驱动后 要记得移除 这个驱动事件

这就是我们NIO的处理方式。如下图:

在这里插入图片描述

相关文章:

3 JDK 常见的包和BIO,NIO,AIO

JDK常见的包 java.lang:系统基础类 java.io:文件操作相关类,比如文件操作 java.nio:为了完善io包中的功能,提高io性能而写的一个新包 java.net:网络相关的包 java.util:java辅助类,特别是集合类 java.sql:数据库操作类 IO流 按照流的流向分…...

解决Apache/2.4.39 (Win64) PHP/7.2.18 Server at localhost Port 80问题

配置一下apache里面的配置文件:httpd.conf 和 httpd.vhosts.conf httpd.conf httpd-vhosts.conf 重启服务 展示: 浏览器中中文乱码问题:...

带有 Elasticsearch 和 Langchain 的 Agentic RAG

作者:来自 Elastic Han Xiang Choong 讨论并实现 Elastic RAG 的代理流程,其中 LLM 选择调用 Elastic KB。 更多阅读:Elasticsearch:基于 Langchain 的 Elasticsearch Agent 对文档的搜索。 简介 代理是将 LLM 应用于实际用例的…...

【数据结构与算法】深度优先搜索:树与图的路径探寻之道

一、引言 在计算机科学领域,树与图的路径搜索是一个基础且重要的问题,而深度优先搜索算法(Depth First Search,简称 DFS)则是解决此类问题的经典算法之一。深度优先搜索算法通过从起始节点开始,沿着一条路径…...

vue3项目结合Echarts实现甘特图(可拖拽、选中等操作)

效果图: 图一:选中操作 图二:上下左右拖拽操作 本案例在echarts​​​​​​​示例机场航班甘特图的基础上修改​​​​​​​ 封装ganttEcharts组件,测试数据 airport-schedule.jsonganttEcharts代码: 直接复制粘贴可测​​​​…...

【EXCEL 逻辑函数】AND、OR、XOR、NOT、IF、IFS、IFERROR、IFNA、SWITCH

目录 AND:当所有条件都为真时返回 TRUE,否则返回 FALSE OR:当任一条件为真时返回 TRUE,否则返回 FALSE XOR:当奇数个条件为真时返回 TRUE,否则返回 FALSE NOT :反转逻辑值 IF:根…...

单片机长耗时前后台任务优化

代码: void Task_10ms(void) {... }//改 void Task_2ms(void) {static uint8_t s_state 0switch(s_state){case 0:....s_state 1;break;case 1:....s_state 2;break;case 3:....s_state 1;break;default: //此段可以去除s_state 0;break; } } 参考链接 MCU长…...

java引入jedis并且关于开放redis端口问题

博主主页: 码农派大星. 数据结构专栏:Java数据结构 数据库专栏:数据库 JavaEE专栏:JavaEE 软件测试专栏:软件测试 关注博主带你了解更多知识 目录 1. 引入jedis ​编辑 2. 关于java客户端开放redis端口问题 3. 连接redis服务器 redis服务器在官网公开了使用的协议: resp…...

测试电脑是否真实多核CPU

测试电脑是否真实多核CPU 在CPU的描述上现在多数看到的是多核心/多内核,看上去就像是多CPU的样子。但核心是有分真实核心和虚拟核心。如果是真实的多核心,多线程是能够并行。如果不是多核心,多线程就只能够并发。 这里就直接采用多线程的应用…...

Ubuntu 安装实时内核指南

在运行需要高精度和低延迟响应的机器人驱动程序时,安装一个具备实时内核(Real-Time Kernel)的 Ubuntu 系统是至关重要的。若缺乏实时系统的支持,高频率的控制指令可能会导致机器人运动轨迹不流畅,甚至产生抖动现象。以…...

LeetCode:1387. 将整数按权重排序(记忆化搜索 Java)

目录 1387. 将整数按权重排序 题目描述: 实现代码与解析: 记忆化搜索 原理思路: 1387. 将整数按权重排序 题目描述: 我们将整数 x 的 权重 定义为按照下述规则将 x 变成 1 所需要的步数: 如果 x 是偶数&#xff…...

某音最新滑块3.5.68(Web/App皆可支持)

某音滑块核心是 captchaBody 参数 难度较大 h5_sdk_version - 代表验证码的版本 如何代表通过验证了呢? 1.web端 fp参数 - verify_m4zafhzb_yARRD6RZ_YwNj_4gjp_AdsL_yxw0thiqv0ub 2.移动端 did参数 - 1997744780462444 当该接口返回如下数据即通过验证码 该设…...

FFmpeg 框架简介和文件解复用

文章目录 ffmpeg框架简介libavformat库libavcodec库libavdevice库 复用(muxers)和解复用(demuxers)容器格式FLVScript Tag Data结构(脚本类型、帧类型)Audio Tag Data结构(音频Tag)V…...

观察者模式(sigslot in C++)

大家,我是东风,今天抽点时间整理一下我很久前关注的一个不错的库,可以支持我们在使用标准C的时候使用信号槽机制进行观察者模式设计,sigslot 官网: http://sigslot.sourceforge.net/ 本文较为详尽探讨了一种观察者模…...

git企业开发的相关理论(二)

目录 git企业开发的相关理论(一) 八.修改文件 九.版本回退 十.撤销修改 情况一(还没有add) 情况二(add后还没有commit) 情况三(commit后还没有push) 十一.删除本地仓库中的文件 方法一 方法二 十二.理解分支 1.常见的分支工作流程 2.合并冲…...

力扣-图论-70【算法学习day.70】

前言 ###我做这类文章一个重要的目的还是给正在学习的大家提供方向和记录学习过程(例如想要掌握基础用法,该刷哪些题?)我的解析也不会做的非常详细,只会提供思路和一些关键点,力扣上的大佬们的题解质量是非…...

jmeter中的prev对象

在jmeter中通过beanshell、JSR223的各种处理器编写脚本时,都会看到页面上有这样的说明 这些ctx、vars、props、OUT、sampler、prev等等都是可以直接在脚本中使用的对象,由jmeter抛出 今天主要讲一下prev的使用 SampleResult prev jmctx.getPreviousRe…...

机器学习中的密度聚类算法:深入解析与应用

在机器学习的广阔领域中,聚类算法作为一种无监督学习方法,扮演着至关重要的角色。其中,密度聚类算法以其独特的优势,在数据挖掘、图像分割、市场细分等多个领域得到了广泛应用。 一、密度聚类算法的基本原理 密度聚类算法是一种…...

简单分析一下 a,b,c=a+1,a+1,b+1 执行原理

在 Go 语言中,赋值表达式 a, b, c x, y, z 是同时进行的,但是其计算顺序是从左到右依次进行的。即在 a, b, c 被赋值之前,先计算 x, y, z 的值,并依次将它们赋值给 a, b, c。 例如:a, b, c a1, a1, b1,其…...

2025年前端面试热门题目——HTML|CSS|Javascript|TS知识

以下是对这些 HTML 面试问题的详细解答&#xff1a; 1. HTML 的 src 和 href 属性有什么区别? src (Source) 属性&#xff1a; 用于嵌入资源&#xff0c;例如图像、脚本或 iframe。加载资源时&#xff0c;当前页面的加载会暂停&#xff0c;直到资源加载完成。常用于 <img&g…...

将4G太阳能无线监控的视频接入电子监控大屏,要考虑哪些方面?

随着科技的飞速发展&#xff0c;4G太阳能无线监控系统以其独特的优势在远程监控领域脱颖而出。这种系统结合了太阳能供电的环保特性和4G无线传输的便捷性&#xff0c;为各种环境尤其是无电或电网不稳定的地区提供了一种高效、可靠的视频监控解决方案。将这些视频流接入大屏显示…...

【102. 二叉树的层序遍历 中等】

题目&#xff1a; 给你二叉树的根节点 root &#xff0c;返回其节点值的 层序遍历 。 &#xff08;即逐层地&#xff0c;从左到右访问所有节点&#xff09;。 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;[[3],[9,20],[15,7]] 示例…...

文件包含tomato靶机通关

靶机地址&#xff1a;192.168.152.152 注&#xff1a;靶机打开后在 kali 中扫描一下就能得到 打开网站 第一步信息收集 将网址放到 dirb 中扫描一下 得到了三个目录 我们挨个访问一下 第一个是主目录 第二个是主页面 第三个报错 第二步 我们在主目录页面继续访问 我们进行…...

oracle dblink 的创建及使用

Oracle Database Link&#xff08;DB Link&#xff09;是Oracle提供的一种功能&#xff0c;允许你在一个数据库中直接访问另一个远程或本地数据库的对象&#xff08;如表、视图、序列等&#xff09;。DB Link的设置简化了跨数据库操作&#xff0c;使得数据的集成和同步变得更加…...

java开发入门学习五-流程控制

流程控制语句 if&#xff0c; if...else&#xff0c; if..else if..else 与前端相同 略 switch case 与前端不同的是case不能使用表达式&#xff0c;使用表达式会报错 class TestSwitch {public static void main(String[] args) {// switch 表达式只能是特定的数据类型…...

【蓝桥杯——物联网设计与开发】拓展模块3 - 温度传感器模块

一、温度传感器模块 &#xff08;1&#xff09;资源介绍 &#x1f505;原理图 蓝桥杯物联网竞赛实训平台提供了一个拓展接口 CN2&#xff0c;所有拓展模块均可直接安装在 Lora 终端上使用&#xff1b; 图1 拓展接口 温度传感器模块电路原理图如下所示&#xff1a; 图2 …...

Zookeeper 底层原理解析

一、引言 在分布式系统的浩瀚星空中&#xff0c;Zookeeper 宛如一颗最为闪耀的导航星&#xff0c;为众多分布式应用指引方向、保驾护航。无论是大名鼎鼎的 Hadoop、HBase&#xff0c;还是其他各类复杂的分布式架构&#xff0c;Zookeeper 都扮演着不可或缺的关键角色。它如同一…...

面试题整理9----谈谈对k8s的理解1

谈谈对k8s的理解 1. Kubernetes 概念 1.1 Kubernetes是什么 Kubernetes 是一个可移植、可扩展的开源平台&#xff0c;用于管理容器化的工作负载和服务&#xff0c;方便进行声明式配置和自动化。Kubernetes 拥有一个庞大且快速增长的生态系统&#xff0c;其服务、支持和工具的…...

PromptGIP:Unifying lmage Processing as Visual Prompting Question Answering

“Unifying Image Processing as Visual Prompting Question Answering” 文章提出了一种名为 PromptGIP 的通用模型&#xff0c;将图像处理任务统一为视觉提示问答范式&#xff0c;在多个图像处理任务上展现出良好性能&#xff0c;为通用图像处理提供了新的思路和方法。 confe…...

chart文件结构

在 Helm 中&#xff0c;Chart 是一个用于定义、安装和升级 Kubernetes 应用程序的包。Chart 文件结构遵循一定的目录和文件组织方式&#xff0c;以下是典型的 Helm Chart 文件结构&#xff1a; 1. Chart 文件结构示例 mychart/ ├── Chart.yaml # 描述 Chart 的基…...

SQL优化

SQL优化 插入数据 insert优化 批量插入 insert into tb_test 2values(1, Tom), (2, Cat), (3, jerry); 手动提交事务 start transaction; insert into test1 values(4, Tom), (5, Cat), (6, jerry); insert into test1 values(7, Tom), (8, Cat), (9, jerry); insert int…...

输出1-100之间的随机数,控制输出格式,每行10个(注释有详解)

C 随机数生成与格式化输出 在编程中&#xff0c;随机数的生成是一个常见的需求&#xff0c;尤其是在游戏开发、模拟实验和数据分析等领域。本文将通过一个简单的 C 程序来演示如何生成随机数并进行格式化输出。我们将逐步解析代码&#xff0c;并讨论其工作原理及应用场景。 代…...

【数字化】华为数字化转型架构蓝图-2

目录 1、客户联结的架构思路 1.1 ROADS体验设计 1.2 具体应用场景 1.3 统一的数据底座 1.4 案例与成效 2、一线作战平台的架构思路 2.1 核心要素 2.2 关键功能 2.3 实施路径 2.4 案例与成效 3、能力数字化的架构思路 3.1 能力数字化的核心目标 3.2 能力数字化的实…...

MyBatis是什么?为什么有全自动ORM框架还是MyBatis比较受欢迎?

MyBatis是什么&#xff1f; MyBatis是一个半自动的ORM持久层框架&#xff0c;内部封装了JDBC&#xff0c;mybatis是通过XML或注解的方式将需要执行的statement配置&#xff0c;支持定制化sql&#xff0c;存储过程以及高级映射。 解释 所谓的半自动ORM意思就是将JDBC的工作交…...

基础元器件的学习

1、二极管 1.1二极管的符号 ZD是稳压二极管 VD、V、D是普通二极管的符号。 1.2二极管的反向恢复时间 首先交流电为上正下负&#xff0c;然后下正上负。当二极管接到反向电压&#xff0c;二极管存在寄生电容&#xff0c;电压不能立刻突变&#xff0c;当输入频率变高时&#…...

GTID下复制问题和解决

环境介绍 数据库1主2从&#xff0c;mysql版本是v5.19 表结构 一、主库新增记录&#xff0c;从库提示主键冲突 模拟故障 1&#xff0c; master上关闭 sql_log_bin,删除id 103 后打开 2&#xff0c; 确认此时从库有id103,主库没有 3&#xff0c; master insert id103 主从异常…...

Linux 下的 GPT 和 MBR 分区表详解

文章目录 Linux 下的 GPT 和 MBR 分区表详解一、分区表的作用二、MBR&#xff08;Master Boot Record&#xff09;1. **特点**2. **优点**3. **缺点**4. **适用场景** 三、GPT&#xff08;GUID Partition Table&#xff09;1. **特点**2. **优点**3. **缺点**4. **适用场景** 四…...

mysql的事务控制和数据库的备份和恢复

事务控制语句 行锁和死锁 行锁 两个客户端同时对同一索引行进行操作 客户端1正常运行 客户端2想修改&#xff0c;被锁行 除非将事务提交才能继续运行 死锁 客户端1删除第5行 客户端2设置第1行为排他锁 客户端1删除行1被锁 客户端2更新行5被锁 如何避免死锁 mysql的备份和还…...

2014年IMO第4题

△ A B C \triangle ABC △ABC 中, B C BC BC 上有一点 P P P 满足 ∠ B A P = ∠ A C B \angle BAP=\angle ACB ∠BAP=∠ACB, 还有一点 Q Q Q 满足 ∠ A = Q A C = ∠ A B C \angle A=QAC=\angle ABC ∠A=QAC=∠ABC. 分别延长 A P AP AP, A Q AQ AQ 一倍至 M M M, N …...

如何实现层叠布局

文章目录 1 概念介绍2 使用方法3 示例代码我们在上一章回中介绍了GirdView Widget,本章回中将介绍Stack这种Widget,闲话休提,让我们一起Talk Flutter吧。 1 概念介绍 在Flutter中Stack主要用来叠加显示其它的Widget,类似我们日常生活中的楼层或者说PS中的图层,因此它也是一…...

Qwen2.5-7B-Instruct Lora微调

Qwen2.5-7B-Instruct Lora 微调 本文简要介绍如何基于 transformers、peft 等框架&#xff0c;对 Qwen2.5-7B-Instruct 模型进行 Lora 微调。Lora 是一种高效微调方法。 环境配置 在完成基本环境配置和本地模型部署的情况下&#xff0c;你还需要安装一些第三方库&#xff0c…...

MacOS安装MySQL

官网下载MySQL 苹果芯片选择ARM版本 安装过程中会要求你输入root的密码&#xff08;不少于8位&#xff09;&#xff0c;这里设置为12345678 打开系统设置查看是否成功安装MySQL 配置MySQL环境变量 vi ~/.zshrc加入一行export PATH$PATH:/usr/local/mysql/bin 执行source ~/…...

基础库正则表达式

我们已经可以用requests 库来获取网页的源代码&#xff0c;得到 HTML 代码。但我们真正想要的数据是包含在 HTML代码之中的&#xff0c;要怎样才能从 HTML,代码中获取想要的信息呢?正则表达式就是其中一个有效的方法。 本篇博客我们将了解一下正则表达式的相关用法。正则表达…...

Matlab 和 R 语言的数组索引都是从 1 开始,并且是左闭右闭的

文章目录 一、前言二、主要内容三、小结 &#x1f349; CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ 一、前言 在早期的计算机科学中&#xff0c;数组索引从 1 开始是很常见的。例如&#xff0c;Fortran 和 Pascal 等编程语言也采用了从 1 开始的索引。 这种索引…...

选择排序和冒泡排序;MySQL架构

1. 选择排序和冒泡排序 &#xff08;1&#xff09;选择排序 原理&#xff1a; 选择排序有升序和降序两种排序方法。升序排序的原理是&#xff1a;对于一个无序数列&#xff0c;先假定其中一个数为这个数列的最小值&#xff0c;然后让这个假定最小值和其他数依次比较&#xff0…...

蓝桥杯算法训练 黑色星期五

题目描述 有些西方人比较迷信&#xff0c;如果某个月的13号正好是星期五&#xff0c;他们就会觉得不太吉利&#xff0c;用古人的说法&#xff0c;就是“诸事不宜”。请你编写一个程序&#xff0c;统计出在某个特定的年份中&#xff0c;出现了多少次既是13号又是星期五的情形&am…...

Mybatis-Plus快速入门

参考&#xff1a;黑马MyBatisPlus教程全套视频教程&#xff0c;快速精通mybatisplus框架 1.Mapper-plus配置 1.MapperScan("Mapper目录的位置") 2.Mapper层文件需要继承BaseMapper extends BaseMapper<实体类> 3.开启日志 4.配置类 Configuration public cl…...

MySQL库的操作

目录 1. 创建数据库2. 创建数据库案例3. 认识系统编码以及字符集和校验规则4. 操纵数据库4.1 查看数据库4.2 显示创建语句4.3 修改数据库4.4 数据库的删除4.5 备份和恢复4.6 查看连接情况 1. 创建数据库 &#xff08;1&#xff09;语法&#xff1a; create database db_name;…...

JVM性能优化一:初识内存泄露-内存溢出-垃圾回收

本文主要是让你充分的认识到什么叫做内存泄露&#xff0c;什么叫做内存溢出&#xff0c;别再傻傻分不清了&#xff0c;别再动不动的升级服务器的内存了。 文章目录 1.基本概念1.1.内存泄露1.2.内存溢出1.3.垃圾回收1.4.内存泄露-垃圾回收-内存溢出三者的关系关系 2.代码示例2.…...

2024年山东省职业院校技能大赛网络建设与运维X86架构与ARM架构搭建赛题

完整赛题解析主页联系&#xff01; 一、X86架构计算机操作系统安装与管理 1.PC1 系统为 ubuntu-desktop-amd64 系统&#xff08;已安装&#xff0c;语言为英文&#xff09;&#xff0c;登录用户为 ubuntu&#xff0c;密码为Key-1122。配置ubuntu用户能免密使用sudo命令。 sud…...