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

java面试题-IO流

基础IO

1.如何从数据传输方式理解IO流?

IO流根据处理数据的类型可以分为字节流和字符流。

  1. 字节流

字节流以字节(8位)为单位读写数据。字节流主要用于读写二进制文件,如图片、音频、视频等。Java中的InputStream和OutputStream就是字节流。

InputStream和OutputStream的子类有很多,如FileInputStream和FileOutputStream、ByteArrayInputStream和ByteArrayOutputStream等。使用字节流进行读写文件时,一般需要使用缓冲流来提高读写效率。缓冲流会将数据先缓存到内存中,再批量读写,从而避免了频繁的磁盘读写操作。

  1. 字符流

字符流以字符为单位读写数据。字符流主要用于读写文本文件,如txt文件等。Java中的Reader和Writer就是字符流。

Reader和Writer的子类有很多,如FileReader和FileWriter、CharArrayReader和CharArrayWriter等。使用字符流进行读写文件时,一般也需要使用缓冲流来提高读写效率。需要注意的是,使用字符流读写文件时需要注意文件编码的问题,否则可能会出现乱码。

在实际开发中,如果需要读写的数据是二进制数据,应该使用字节流;如果需要读写的数据是文本数据,应该使用字符流。需要根据实际需求选择合适的流进行操作。

  • 字节流

  • 字符流

  • 字节转字符

2.如何从数据操作上理解IO流?

3.Java IO设计上使用了什么设计模式?

在Java IO中,装饰器模式被广泛应用于输入流和输出流的设计中。以输入流为例,下面是一个使用装饰器模式的简单示例:

InputStream input = new FileInputStream("file.txt");
input = new BufferedInputStream(input);
input = new DataInputStream(input);

在这个示例中,我们首先创建了一个FileInputStream对象,它是一个具体组件,表示一个输入流。然后,我们通过装饰器模式创建了一个缓冲输入流对象,它是一个具体装饰器,向原始对象添加了缓冲功能。最后,我们又通过装饰器模式创建了一个数据输入流对象,它也是一个具体装饰器,向缓冲输入流添加了读取数据的功能。这样,我们就可以通过数据输入流对象来读取文件中的数据了。

在输出流中,同样使用了装饰器模式。下面是一个简单的示例:

OutputStream output = new FileOutputStream("file.txt");
output = new BufferedOutputStream(output);
output = new DataOutputStream(output);

在这个示例中,我们首先创建了一个FileOutputStream对象,它是一个具体组件,表示一个输出流。然后,我们通过装饰器模式创建了一个缓冲输出流对象,它是一个具体装饰器,向原始对象添加了缓冲功能。最后,我们又通过装饰器模式创建了一个数据输出流对象,它也是一个具体装饰器,向缓冲输出流添加了写入数据的功能。这样,我们就可以通过数据输出流对象来将数据写入到文件中了。


5种IO模型

1.什么是阻塞?什么是同步?

  • 阻塞IO 和 非阻塞IO

这两个概念是程序级别的。主要描述的是程序请求操作系统IO操作后,如果IO资源没有准备好,那么程序该如何处理的问题: 前者等待;后者继续执行(并且使用线程一直轮询,直到有IO资源准备好了)

  • 同步IO 和 非同步IO

这两个概念是操作系统级别的。主要描述的是操作系统在收到程序请求IO操作后,如果IO资源没有准备好,该如何响应程序的问题: 前者不响应,直到IO资源准备好以后;后者返回一个标记(好让程序和自己知道以后的数据往哪里通知),当IO资源准备好以后,再用事件机制返回给程序。

2.什么是同步阻塞IO?

同步阻塞IO是指程序进行IO操作时,程序会一直等待,直到操作完成,期间无法进行其他操作。例如,在Java中,如果使用InputStream的read()方法进行读操作,当没有可读数据时,该方法将会一直阻塞线程,直到有可读数据或者读操作超时才返回。

同步阻塞IO通常使用单线程或者有限数量的线程来处理IO操作,每个线程会阻塞在IO操作上,等待IO操作完成后才会继续执行。这种模型的优点是简单可靠,适用于并发请求量不大的场景,但是并发能力有限,无法满足高并发的需求。

同步阻塞IO的一个特点是每个IO操作需要独立的线程或者进程来处理,因此在并发访问时,可能会出现线程竞争、线程切换等问题,导致性能下降。此外,由于每个线程都会阻塞在IO操作上,当IO操作非常耗时时,会导致线程资源浪费,影响程序的响应性能。

3.什么是同步非阻塞IO?

同步非阻塞IO是指程序进行IO操作时,程序不会一直阻塞等待操作完成,而是先向操作系统发起一个IO请求,并继续执行其他任务。当IO操作完成时,操作系统会通知程序,并将数据复制到程序缓冲区中,程序再次请求读取或写入缓冲区中的数据。

在同步非阻塞IO模型中,程序不会等待IO操作完成,而是通过轮询或者事件通知的方式查询IO状态,直到IO操作完成或者超时才返回。这种模型适用于并发请求数较多的场景,可以通过少量线程处理大量并发请求,从而提高并发处理能力。

同步非阻塞IO的一个特点是需要程序不断轮询IO状态或者注册IO事件,并且需要不断地检查IO状态。这种模型需要更多的CPU资源来处理IO操作,但相对于同步阻塞IO模型,可以更好地支持并发请求。

4.什么是多路复用IO?

多路复用IO(Multiplexing IO)是一种IO模型,它通过使用一种机制,使得单个进程可以同时处理多个I/O请求。

在多路复用IO模型中,一个进程可以同时监听多个文件描述符,当有一个或多个文件描述符有I/O事件发生时,通过操作系统提供的系统调用进行通知,进程可以针对每个文件描述符进行处理,从而实现高并发的I/O处理。常见的多路复用IO机制包括select、poll和epoll。

多路复用IO的主要优点是能够在单个线程内处理多个I/O请求,相比于多线程或者多进程的方式,减少了线程或进程上下文切换的开销,避免了线程或进程资源的浪费。同时,由于多路复用IO可以同时处理多个I/O请求,能够有效地提高程序的并发处理能力,适用于高并发的网络应用场景。

总之,多路复用IO是一种高并发的IO模型,通过使用一种机制,使得单个进程可以同时处理多个I/O请求,能够有效地提高程序的并发处理能力,减少线程或进程资源的浪费。

5.有哪些多路复用IO?

常见的多路复用IO机制包括select、poll和epoll。

  1. select:select是最早的多路复用IO机制之一,可以同时监听多个文件描述符,当有一个或多个文件描述符有I/O事件发生时,通过操作系统提供的系统调用进行通知,进程可以针对每个文件描述符进行处理。

  1. poll:poll是select的改进版,同样可以监听多个文件描述符,但它采用链表来存储文件描述符,避免了select中文件描述符数量的限制。

  1. epoll:epoll是Linux系统上的多路复用IO机制,相对于select和poll,epoll具有更高的效率和更低的延迟。它使用事件驱动的方式来处理文件描述符,可以同时处理大量的文件描述符,避免了select和poll中需要遍历所有文件描述符的缺点。同时,epoll还支持边缘触发和水平触发两种模式,能够更加灵活地处理I/O事件。

6.什么是信号驱动IO?

信号驱动IO是一种I/O模型,也称为异步I/O模型。在信号驱动IO模型中,当进行I/O操作时,进程会向操作系统注册一个信号处理函数,然后继续执行其他任务。当I/O操作完成后,操作系统会向进程发送一个信号,告知该I/O操作已经完成,进程可以通过信号处理函数来获取I/O操作的结果。

相对于阻塞和非阻塞IO模型,信号驱动IO模型更加高效,因为它可以同时处理多个I/O操作,而不需要阻塞进程或使用轮询等方式等待I/O操作的完成。同时,信号驱动IO模型相对于多路复用IO模型更加灵活,因为它不需要将多个文件描述符放在一个轮询列表中等待事件的发生,而是可以对每个文件描述符单独注册信号处理函数。

需要注意的是,信号驱动IO模型在某些情况下也可能存在一些缺陷。例如,当同时注册大量的信号处理函数时,会导致信号处理函数的调用时间变长,从而影响整个系统的性能。因此,在实际应用中,需要根据具体的情况选择最合适的IO模型。

7.什么是异步IO?

异步I/O是一种I/O模型,也称为事件驱动I/O。在异步I/O模型中,当进行I/O操作时,进程不会被阻塞,而是会向操作系统注册一个I/O操作,并继续执行其他任务。当I/O操作完成后,操作系统会通知进程,进程可以获取I/O操作的结果。

相对于阻塞、非阻塞和信号驱动IO模型,异步I/O模型更加高效,因为它可以充分利用CPU资源,同时处理多个I/O操作,而不需要等待任何一个操作的完成。异步I/O模型通常采用回调函数的方式来处理I/O操作的结果,当I/O操作完成后,操作系统会回调相应的函数,进程可以在回调函数中获取I/O操作的结果。

异步I/O模型通常用于需要处理大量I/O操作的系统中,如高并发的网络服务器、图形图像处理等领域。需要注意的是,异步I/O模型的实现比较复杂,需要使用操作系统提供的特定API或框架,如Linux系统中的epoll、Windows系统中的I/O Completion Ports等。

8.什么是Reactor模型?

Reactor模型是一种基于事件驱动的I/O模型,用于处理高并发的网络应用程序。它由Doug Lea等人在1996年提出,是一种被广泛应用的I/O编程模型。

Reactor模型的基本思想是将I/O事件的处理过程分离出来,使其在单独的线程中运行。这个线程被称为Reactor线程,它负责监听所有的I/O事件,并根据事件的类型分发给相应的事件处理器。事件处理器通常在单独的线程中执行,它负责处理I/O事件,并根据业务逻辑进行相应的处理。

Reactor模型中包含两个核心组件,即Reactor和Handler。Reactor是I/O事件处理器的核心,负责监听和分发所有的I/O事件。Handler是具体的事件处理器,它会在事件发生时被Reactor调用,并处理相应的I/O事件。

Reactor模型的优点在于能够有效地利用多核CPU资源,同时处理大量的并发请求,提高系统的吞吐量和响应速度。在实际应用中,Reactor模型被广泛应用于高并发的网络应用程序中,如Web服务器、消息队列等。常见的Reactor模型包括单线程Reactor模型、多线程Reactor模型和主从Reactor模型。

9.什么是Java NIO?

Java NIO的核心组件包括以下几个部分:

  • 缓冲区(Buffer):用于存储数据的内存区域,可以通过NIO提供的ByteBuffer、CharBuffer、ShortBuffer等类来实现。

  • 通道(Channel):用于对数据进行读写操作的对象,可以通过NIO提供的FileChannel、SocketChannel、ServerSocketChannel、DatagramChannel等类来实现。

  • 选择器(Selector):用于监控多个通道的I/O事件,可以通过NIO提供的Selector类来实现。

Java NIO相比于传统的Java I/O,具有以下几个优点:

  • 非阻塞I/O操作:Java NIO提供了基于缓冲区、通道和选择器的非阻塞I/O操作方式,使得单线程可以同时处理多个I/O操作,提高了系统的并发处理能力。

  • 支持多种网络协议:Java NIO提供了对TCP、UDP、SSL等多种网络协议的支持,可以满足不同场景下的需求。

  • 零拷贝I/O:Java NIO支持零拷贝I/O操作,可以直接将数据从文件或网络中读取到内存中,提高了数据的传输效率。

在实际应用中,Java NIO被广泛应用于高并发的网络应用程序中,如网络服务器、消息队列等。

零拷贝

1.传统的IO存在什么问题?为什么引入零拷贝的?

传统的IO(也称为IO流或者普通IO)存在以下几个问题:

  1. 低效:传统的IO操作基于字节流或字符流进行,需要进行频繁的数据转换和复制,造成了大量的CPU和内存资源浪费,导致I/O操作效率低下。

  1. 阻塞:传统的IO操作是阻塞的,即读写操作必须等待I/O操作完成后才能继续执行,这导致单线程无法处理多个I/O操作,从而限制了系统的并发性能。

  1. 不支持零拷贝:传统的IO操作需要进行数据的复制和移动,即从文件或网络读取数据到内存中后,还需要将数据复制到另一个缓冲区中,再进行下一步操作。这种复制和移动操作浪费了大量的CPU和内存资源,影响了I/O操作的效率。

为了解决这些问题,引入了零拷贝技术。零拷贝(Zero-copy)是指在数据传输过程中,数据从磁盘、网络等外部设备直接传输到内存或者其他设备中,避免了数据的重复复制和移动,从而提高了I/O操作的效率和吞吐量。零拷贝技术可以避免数据复制和移动的过程,从而减少了CPU和内存的使用,提高了系统的性能。

Java NIO提供了零拷贝I/O操作的支持,通过使用DirectByteBuffer等直接缓冲区实现了数据在内存和外部设备之间的直接传输,避免了数据复制和移动的过程,从而提高了I/O操作的效率。

2.mmap + write怎么实现的零拷贝

mmap + write 是一种实现零拷贝的方式,其主要思路是将文件数据映射到内存中,通过内存映射的方式来访问文件数据,从而避免了数据从内核空间向用户空间的拷贝,以及从用户空间向内核空间的拷贝。具体实现步骤如下:

  1. 调用 mmap 函数将文件映射到内存中,得到一个指向内存的指针 buf。

  1. 调用 write 函数将内存中的数据写入网络套接字 sockfd 中。

在这个过程中,mmap 函数将文件的数据映射到了内存中,而 write 函数则直接将内存中的数据写入网络套接字中,避免了数据的拷贝过程。

需要注意的是,这里的写入操作是异步的,即 write 函数将数据写入套接字的缓冲区中后就返回了,不会等待数据发送完成。如果需要等待数据发送完成再进行下一步操作,需要使用相应的系统调用来实现。

相比传统的数据拷贝方式,mmap + write 可以避免多次数据拷贝,减少了 CPU 和内存的开销,提高了数据传输的效率。但也有一些限制和注意事项:

  1. mmap 函数会将整个文件映射到内存中,因此对于大文件来说,可能会占用大量的内存,需要谨慎使用。

  1. 在进行写操作之前,需要确保文件的内容已经被完全读入内存中,否则写入的数据可能不完整。

  1. 对于频繁的写操作,由于每次写入都需要调用 mmap 函数重新映射内存,可能会带来额外的开销,因此需要根据具体情况进行优化。

3.sendfile怎么实现的零拷贝?

sendfile() 函数是一种系统调用,它在 Linux 和 Unix 系统上实现了零拷贝技术,可以在内核空间和用户空间之间直接传输数据,从而减少了数据拷贝的次数,提高了传输效率。

sendfile() 函数的基本用法如下

#include <sys/sendfile.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>ssize_t sendfile(int out_fd, int in_fd, off_t *offset, size_t count);

其中,out_fd 是输出文件描述符,in_fd 是输入文件描述符,offset 是输入文件的偏移量,count 是要传输的字节数。在调用 sendfile() 函数时,输入文件描述符 in_fd 必须是一个打开的文件,而输出文件描述符 out_fd 必须是一个套接字。

sendfile() 函数的工作原理是这样的:在内核中,sendfile() 函数将输入文件描述符 in_fd 和输出套接字 out_fd 绑定在一起,然后在内核中将文件内容从输入文件描述符中复制到输出套接字中,这个过程是在内核中完成的,而不涉及用户空间。具体来说,sendfile() 函数首先在内核中将输入文件描述符和输出套接字建立一个连接,然后从输入文件描述符中读取数据到内核缓冲区中,再将数据从内核缓冲区中写入到输出套接字中,最后将输出套接字中写入的字节数返回给用户程序。

在使用 sendfile() 函数时,需要注意以下几点:

  1. sendfile() 函数只能用于在两个文件描述符之间进行数据传输,而不能用于网络套接字和文件之间的传输。

  1. sendfile() 函数只能用于 Linux 和 Unix 系统,而不能用于 Windows 系统。

  1. sendfile() 函数只能传输一个文件的数据,如果需要传输多个文件,则需要在用户程序中多次调用 sendfile() 函数。

  1. sendfile() 函数只能用于传输文件的全部内容,而不能用于传输文件的部分内容。

sendfile() 函数实现了零拷贝技术,可以在内核空间和用户空间之间直接传输数据,减少了数据拷贝的次数,提高了传输效率,是实现高性能网络编程的重要手段之一。

相关文章:

java面试题-IO流

基础IO1.如何从数据传输方式理解IO流&#xff1f;IO流根据处理数据的类型可以分为字节流和字符流。字节流字节流以字节&#xff08;8位&#xff09;为单位读写数据。字节流主要用于读写二进制文件&#xff0c;如图片、音频、视频等。Java中的InputStream和OutputStream就是字节…...

Java性能-GC工具

GC工具(帮助分析程序性能 WE always need THAT TO help US) 开启GC日志 JDK 8 -verbose:gc 开启gc -XX:PrintGC 打印gc信息 -XX:PrintGCDetails 打印详细信息 -XX:PrintGCTimeStamps 相对于jvm启动时间0值开始 -XX:PrintGCDateStamps 日期字符串 -Xloggc:filename gc输入日志…...

复赛名单公布!2022隐私计算HACKATHON大赛火热进行中!

开放隐私计算开放隐私计算开放隐私计算OpenMPC是国内第一个且影响力最大的隐私计算开放社区。社区秉承开放共享的精神&#xff0c;专注于隐私计算行业的研究与布道。社区致力于隐私计算技术的传播&#xff0c;愿成为中国 “隐私计算最后一公里的服务区”。183篇原创内容公众号O…...

微信小程序的全局弹窗以及全局实例

全局组件 微信小程序组件关系中&#xff0c;父组件使用子组件需要在父组件index.json中引入子组件&#xff0c;然后在父组件页面中使用&#xff0c;这种组件的对应状态是一对一的&#xff0c;一个组件对应一个页面。如果有一个全局弹窗&#xff08;登录&#xff09;&#xff0…...

100种思维模型之诺依曼思维模型-019

生活中&#xff0c;难免总会遇到一些“大”、“笼统”、“难入手”的问题&#xff01; 如&#xff0c;前几天突然接到领导安排&#xff0c;帮忙梳理一个材料“***景区创建5A级旅游景区提升规划”。 对于一个没有学过景区提升规划、没有做过规划的我来说&#xff0c;真的挺难的…...

Python + Airtest + poco + pytest + pytest-html 实现Android App自动化测试框架

Python Airtest poco pytest pytest-html 实现Android App自动化测试框架 一、背景 为了尝试除Appium外的测试框架&#xff0c;本文将介绍基于网易的airtest框架为基础&#xff0c;配合poco及pytest实现对Android App的自动化测试。 二、框架介绍 框架集成使用airtest p…...

一篇文章让你学会spring

Spring6 1、概述 1.1、Spring是什么&#xff1f; Spring 是一款主流的 Java EE 轻量级开源框架 &#xff0c;Spring 由“Spring 之父”Rod Johnson 提出并创立&#xff0c;其目的是用于简化 Java 企业级应用的开发难度和开发周期。Spring的用途不仅限于服务器端的开发。从简…...

golang入门笔记——测试

测试类型&#xff1a; 单元测试&#xff1a; 规则&#xff1a; 1.所有测试文件以_test.go结尾 2.func Testxxx&#xff08;*testing.T&#xff09; 3.初始化逻辑放到TestMain中 运行&#xff1a; go test [flags][packages]Go语言中的测试依赖go test命令。 go test命令是一…...

【CSAPP】整数运算

文章目录无符号加法练习1练习2补码加法练习1练习2练习3练习4补码的非练习无符号乘法补码乘法练习1练习2练习3乘以常数练习1练习2除以2的幂练习1练习2关于整数运算的最后思考练习无符号加法 考虑两个非负整数x和y&#xff0c;满足0≤x,y<2w0 \le x, y < 2^w0≤x,y<2w&…...

使用 xshell 远程连接(使用 xftp 远程传输)

xshell 和 xftp的使用都基于ssh协议&#xff0c;我们需要先在远程服务端或者虚拟机上安装ssh服务&#xff0c;然后才能远程连接。 目录 1、什么是ssh协议&#xff1f; 2、安装 openssh (1) 安装 openssh 服务器 (2) 关闭服务器防火墙&#xff08;或者开放端口22&#xff09…...

一个例子搞懂子网划分及子网掩码的计算

前置知识&#xff1a; 1、标准ip地址分为A、B、C、D、E五类&#xff0c;分类标准是ip地址的前几个比特位的值。 我们知道ip地址是32位比特-4字节组成&#xff0c;A类地址则是由首位为0&#xff0c;首字节为网络地址&#xff0c;其余3字节为主机地址组成&#xff0c;A类网络地址…...

SPI机制源码:JDK Dubbo Spring

JDK 17 Dubbo 3.1.6 JDK SPI JDK SPI在sql驱动类加载、以及slf4j日志实现加载方面有具体实现。 示例 public class Test {private static final Logger logger LoggerFactory.getLogger(Test.class);public static void main(String[] args) {ServiceLoader<JdkSpiServi…...

Spring Security+jwt+redis+自定义认证逻辑 权限控制

Spring Securityjwtredis自定义认证逻辑 权限控制 1.拦截访问基本思路 2.创建数据库表&#xff1a;角色表&#xff08;应该6个表&#xff0c;这里只用用户表代替角色表&#xff09;、权限表、路径表、角色-权限表、权限-路径表 /* SQLyog Professional v12.14 (64 bit) MySQL…...

打游戏什么蓝牙耳机好用?打游戏比较好的蓝牙耳机

游戏耳机提供身临其境的细致声音&#xff0c;同时也是与朋友在线聊天的绝佳通信设备&#xff0c;尤其对于游戏玩家来说&#xff0c;聆听和被聆听的最佳方式之一就是游戏耳机&#xff0c;那2023年到底有哪些值得购买的游戏耳机呢&#xff1f;现在就让我们一起来看看吧。 第一款…...

炔基点击交联试剂1704097-05-1,Alkyne-A-DSBSO crosslinker,发生相应点击反应

1、理论分析&#xff1a;中文名&#xff1a;炔基-A-DSBSO crosslinker&#xff0c;英文名&#xff1a;Alkyne-A-DSBSO crosslinkerCAS号&#xff1a;1704097-05-1化学式&#xff1a;C25H32N2O12S2分子量&#xff1a;616.652、产品详情&#xff1a;外观&#xff1a;白色固体&…...

刷题记录:牛客NC24309Overplanting (Silver)

传送门:牛客 题目描述: Farmer John has purchased a new machine that is capable of planting grass within any rectangular region of his farm that is "axially aligned" (i.e., with vertical and horizontal sides). Unfortunately, the machine malfunc…...

Spring Boot中使用Sa-Token实现轻量级登录与鉴权

1. Sa-Token 介绍 Sa-Token 是一个轻量级 Java 权限认证框架&#xff0c;主要解决&#xff1a;登录认证、权限认证、单点登录、OAuth2.0、分布式Session会话、微服务网关鉴权 等一系列权限相关问题。 功能结构图 2. 登录认证 对于一些登录之后才能访问的接口&#xff08;例如&…...

《分布式技术原理与算法解析》学习笔记Day20

CAP理论 什么是CAP理论&#xff1f; CAP理论用来指导分布式系统设计&#xff0c;以保证系统的可用性、数据一致性等。 C&#xff0c;Consistency&#xff0c;一致性&#xff0c;指所有节点在同一时刻的数据是相同的&#xff0c;即更新操作执行结束并响应用户完成后&#xff…...

【2023-2-23】FastDeploy 安装教程

【2023-2-22】FastDeploy 安装编译教程 该测试 FastDeploy CPU版本。 1. fastDeploy库编译 1.1 官方预编译库下载 预编译库下载安装 1.2 自定义CPU版本库编译 官方编译FastDeploy教程 CMakeGUI VS 2019 IDE编译FastDeploy 本人编译教程 CMAKE_CONFIGURATION_TYPES 属性设…...

rollup.js 一个简单实用的打包工具

最近在看vue3相关的知识的时候&#xff0c;发现了一个新的打包工具&#xff0c;至少于我而言是新鲜的。它就是rollup.js。一说到JS打包、合并、压缩、模块处理等都会想到webpack&#xff0c;这是王者&#xff0c;当然入门的难度偏高。而vue3中搭配的vite运行速度确实非常快&…...

数据结构与算法之最小爬楼梯费用动态规划

继续上一道题目&#xff0c;在上一道题目的基础之上&#xff0c;我们来解决这一道爬楼梯最小费用题。一.题目描述二.思路(动态规划五部曲)确定dp数组以及下标的含义使用动态规划&#xff0c;就要有一个数组来记录状态&#xff0c;本题只需要一个一维数组dp[i]就可以了。dp[i]的…...

阿里云ACA认证如何获取?

获取阿里云ACA&#xff08;Alibaba Cloud Certification Associate&#xff09;认证&#xff0c;需要按照以下步骤进行操作&#xff1a; 注册阿里云账号。如果您还没有阿里云账号&#xff0c;请先注册一个账号。登录阿里云官网。登录后&#xff0c;进入阿里云认证中心。选择AC…...

【Python入门第十六天】Python If ... Else

Python 条件和 If 语句 Python 支持来自数学的常用逻辑条件&#xff1a; 等于&#xff1a;a b不等于&#xff1a;a ! b小于&#xff1a;a < b小于等于&#xff1a;a < b大于&#xff1a;a > b大于等于&#xff1a;a > b 这些条件能够以多种方式使用&#xff0c…...

两数之和的解法

给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target 的那 两个 整数&#xff0c;并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是&#xff0c;数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案…...

领导催我优化SQL语句,我求助了ChatGPT。这是ChatGPT给出的建议,你们觉得靠谱吗

作为一个程序员&#xff0c;无论在面试还是工作中&#xff0c;优化SQL都是绕不过去的难题。 为啥&#xff1f;工作之后才会明白&#xff0c;随着公司的业务量增多&#xff0c;SQL的执行效率对程系统运行效率的影响逐渐增大&#xff0c;相对于改造代码&#xff0c;优化SQL语句是…...

ArcGIS手动分割矢量面要素从而划分为多个面部分的方式:Cut Polygons Tool

本文介绍在ArcGIS下属ArcMap软件中&#xff0c;通过“Cut Polygons Tool”工具&#xff0c;对一个面要素矢量图层加以手动分割&#xff0c;从而将其划分为指定形状的多个部分的方法。 对于一个面要素矢量文件&#xff0c;有时我们需要对其加以划分&#xff0c;通过手动勾勒新的…...

【LeetCode】剑指 Offer 13. 机器人的运动范围 p92 -- Java Version

题目链接&#xff1a;https://leetcode.cn/problems/ji-qi-ren-de-yun-dong-fan-wei-lcof/ 1. 题目介绍&#xff08;13. 机器人的运动范围&#xff09; 地上有一个m行n列的方格&#xff0c;从坐标 [0,0] 到坐标 [m-1,n-1] 。一个机器人从坐标 [0, 0] 的格子开始移动&#xff0…...

[oeasy]python0091_仙童公司_八叛逆_intel_8080_altair8800_牛郎星

编码进化 个人电脑 计算机 通过电话网络 进行连接 极客 利用技术 做一些有趣的尝试 极客文化 是 认真研究技术的 文化 计算机 不再是 高校和研究机构高墙里面的 神秘事物而是 生活中常见的 家用电器 ibm 蓝色巨人脚步沉重 dec 小型机不断蚕食低端市场甚至组成网络干掉大型机…...

crontab 执行脚本报错,手动执行脚本正常的解决方法

一、出现的问题 有一个守护脚本XXX.sh&#xff0c;需要使用oracle用户在linux上配置定时任务&#xff0c;每1分钟检查执行一次。但是发现该脚本使用oralce用户手动启动没问题&#xff0c;能正常把程序启动起来&#xff0c;而使用crontab并没有把程序启动起来。 二、排查分析问…...

扎心话题 | 设计院背后的潜规则你知道吗?

大家好&#xff0c;我是建模助手。 大家都知道&#xff0c;在过去的2022年经济是真难&#xff01;以小编所在的广东为例&#xff0c;全年GDP增长仅1.9%。 这个数据足以呈现一个社会现象——不仅消费力咔咔下降&#xff0c;各行各业更有不同程度地嗝屁。这其中也包括一些设计院…...