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

网络运维基础问题及解答

前言

        本篇文章是对于网络运维基础技能的一些常见问题的解答,希望能够为进行期末复习或者对网络运维感兴趣的同学或专业人员提供一定的帮助。

问题及解答

1. 列3 种常用字符编码,简述怎样在 str bytes 之间进行编码和解码。

        答:常用的字符编码包括ASCII编码、UTF-8编码和UTF-16编码。

        三种常用的字符编码是:

        ① ASCII

        ASCII是最早的字符编码之一,它使用7位来表示字符,共包含128个字符,包括英文字母、数字、标点符号等常用字符。在ASCII编码中,每个字符都有一个对应的数值表示。

        在Python中,可以使用str.encode()方法将字符串转换为ASCII编码的字节序列,或使用bytes.decode()方法将ASCII编码的字节序列转换为字符串。默认情况下,Python使用UTF-8编码来进行转换。

        示例代码:

  1. string = "Hello"  
  2. bytes_sequence = string.encode('ascii')  
  3. print(bytes_sequence)  # b'Hello'  
  4.   
  5. decoded_string = bytes_sequence.decode('ascii')  
  6. print(decoded_string)  # Hello  

        ② UTF-8

        UTF-8是一种变长编码,可以表示Unicode字符集中的所有字符。它使用1至4个字节来表示不同的字符,对于ASCII字符,使用一个字节表示,而对于其他字符,使用多个字节表示。UTF-8是目前互联网上最常用的字符编码。

        在Python中,同样可以使用str.encode()方法将字符串转换为UTF-8编码的字节序列,或使用bytes.decode()方法将UTF-8编码的字节序列转换为字符串。

        示例代码:

  1. string = "你好"  
  2. bytes_sequence = string.encode('utf-8')  
  3. print(bytes_sequence)  # b'\xe4\xbd\xa0\xe5\xa5\xbd'  
  4.   
  5. decoded_string = bytes_sequence.decode('utf-8')  
  6. print(decoded_string)  # 你好  

        ③ UTF-16

        UTF-16是一种定长字符编码,使用2个字节表示一个字符,支持全球各种字符。

        在Python中,可以使用str的encode方法将字符串转换为UTF-16字节,使用bytes的decode方法将字节转换为字符串。例如:

# 编码text = "你好"encoded_bytes = text.encode("utf-16")  # 编码为UTF-16字节print(encoded_bytes)  # b'\xff\xfe`\x4f'# 解码decoded_text = encoded_bytes.decode("utf-16")  # 解码为UTF-16字符串print(decoded_text)  # 你好

总结:在Python中,可以使用不同的编码方案将字符串编码为字节序列,或将字节序列解码为字符串。常见的编码方案包括ASCII、UTF-8和UTF-16。编码和解码操作可以使用str.encode()和bytes.decode()方法,可以指定编码方案,也可以使用默认的编码方案(通常是UTF-8)

2. 简述文件操作的流程,简述 3 个常用的文件操作方法。

答:

        文件操作的一般流程可以分为三个步骤:打开文件、对文件进行操作、关闭文件。具体步骤如下:

        ① 打开文件:使用Python内置`open()`函数可以打开一个指定路径的文件,将其赋予一个变量名以便后续操作。可以指定该文件的打开方式(只读、写入、追加等)和编码格式等参数。

        ② 对文件进行操作:对于已经打开的文件,可以进行读取、写入、查找、修改等各种操作。读取文件可以使用`read()`方法或`readline()`方法,写入文件可以使用`write()`方法,而查找或修改需要使用文件操作的一些高级方法。

        ③ 关闭文件:在对文件进行完操作后,需要使用`close()`方法关闭文件,以释放相关的系统资源。

下面是三个常用的文件操作方法:

        ① `read()`方法:用于从文件中读取指定数量的字符。例如,下面代码读取一个文件中的前5个字符:

  1. with open('example.txt''r') as f:  
  2.     data = f.read(5)  
  3.     print(data) # 输出文件中的前5个字符  

        ② `write()`方法:用于向文件中写入内容。例如,下面代码向一个文件中写入一行文本:

  1. with open('example.txt''a') as f:  
  2.     f.write('这是一行文本\n')  

        注意,如果文件不存在,则会自动创建该文件。上述示例中使用了`a`参数来打开文件,表示对文件进行追加操作。

        ③ `seek()`方法:用于移动文件指针到指定位置。例如,下面代码将文件指针移动到文件的第10个字符位置:

  1. with open('example.txt''r') as f:  
  2.     f.seek(9)  
  3.     data = f.read(5)  
  4.     print(data) # 输出文件中的第10个字符到第14个字符  

3. open 函数的 mode 参数表示什么?简述 mode 参数的 4 个常用取值。

        `open()`函数的`mode`参数表示打开文件的模式,即读取、写入、追加等操作。`mode`参数是可选的,默认值为`r`,表示只读模式。下面是`mode`参数的常用取值:

        1. `r`:只读模式,打开文件后只能读取,不能写入,文件指针指向文件头部。如果文件不存在,会抛出`FileNotFoundError`异常。

        2. `w`:写入模式,打开文件后只能写入,不能读取,会清空文件中的内容。如果文件不存在,会自动创建该文件。

        3. `a`:追加模式,打开文件后可以进行读取和追加操作,文件指针指向文件末尾。如果文件不存在,会自动创建该文件。

        4. `b`:二进制模式,打开文件后以二进制方式进行读取或写入操作。例如,可以使用`rb`模式读取二进制文件(如图片、音频等),使用`wb`模式写入二进制文件。

        除了这四种常用的模式,还可以使用其他模式,如`x`(独占模式,如果文件已经存在则会抛出`FileExistsError`异常)、`+`(可读写模式)、`t`(文本模式,默认值)等等。需要注意,`mode`参数可以组合多种模式,例如`wb+`表示二进制模式下可读写的文件模式。

4. 阐述配置文件的格式,解析配置文件主要用到哪个模块的哪个类?简述 类的 3 个常用方法。

        配置文件是用于存储应用程序或系统配置参数的文件,包含键值对,常见文件格式有INI、JSON、YAML等。

        其中INI是一种以行为基础的配置文件格式,包含了一些配置选项、节和键值对。下面是一个INI格式的配置文件示例:

  1. [logging]  
  2. level = info  
  3. path = /var/log/test.log  
  4.   
  5. [database]  
  6. host = 127.0.0.1  
  7. port = 3306  
  8. username = test  
  9. password = test123  

        Python中常用的解析INI格式配置文件的模块是`configparser`,该模块提供了`ConfigParser`类,常用的方法包括:

1. `read(filename)`:读取配置文件。

  1. import configparser  
  2.   
  3. 创建ConfigParser对象  
  4. config = configparser.ConfigParser()  
  5. 读取配置文件  
  6. config.read('example.ini')  

2. `get(section, option)`:获取指定的配置项的值。

  1. 获取logging节下的level选项的值  
  2. level = config.get('logging''level')  
  3. print(level) # 输出'info'  

3. `set(section, option, value)`:修改指定的配置项的值。

  1. 修改database节下的port选项的值  
  2. config.set('database''port''3307')  

        需要注意的是,`ConfigParser`类可以支持多个节和多个键值对,可以通过指定节名和选项名来访问不同的配置信息。同时,`ConfigParser`类还提供了`getfloat()`、`getint()`、`getboolean()`等方法,方便获取不同类型的值。

5. 简述json  模块中解析json 常用的 4 个函数。

        在Python的`json`模块中,有一些常用的函数用于解析JSON数据。下面是这些常用函数的简要说明:

        1. `json.loads()`: 该函数用于将JSON字符串解析为Python对象。它接受一个JSON字符串作为输入,并返回一个对应的Python数据结构(通常是字典、列表等)。例如,可以使用`json.loads(json_str)`将一个JSON字符串解析为Python对象。

        2. `json.load()`: 该函数用于从文件中读取JSON数据并解析为Python对象。它接受一个文件对象作为输入,并将文件中的JSON数据解析为对应的Python数据结构。例如,可以使用`json.load(file_object)`从文件中读取JSON数据并解析为Python对象。

        3. `json.dumps()`: 该函数用于将Python对象转换为JSON字符串。它接受一个Python对象作为输入,并返回一个对应的JSON字符串。例如,可以使用`json.dumps(python_obj)`将一个Python对象转换为JSON字符串。

        4. `json.dump()`: 该函数用于将Python对象转换为JSON格式,并将其写入到文件中。它接受一个Python对象和文件对象作为输入,将Python对象转换为JSON字符串并写入到文件中。例如,可以使用`json.dump(python_obj, file_object)`将Python对象转换为JSON并写入文件。

        这些函数提供了方便的方式来解析和处理JSON数据。使用`json.loads()`和`json.load()`可以将JSON数据解析为Python对象,而`json.dumps()`和`json.dump()`可以将Python对象转换为JSON格式。通过这些函数,可以在Python中轻松地处理JSON数据,实现数据的解析、读取和写入。

6. 简述 xmltodict 如何处理 xml 数据。

        xmltodict是一个Python库,可以将XML数据转换为Python字典的形式,使得XML数据可以更加方便地进行处理。

        具体而言,xmltodict可以将XML数据转换为嵌套的Python字典和列表的组合,在字典中,XML元素的tag和属性被转换为字典的键和值,而XML元素的文本内容会成为字典的值。如果XML中存在子元素,它们将被转换为一个新的字典,并被赋值给其父元素的键。

7. 如何安装 psutil 模块,简述使用 psutil 模块可以监控系统的那些信息。

        安装psutil模块:

使用psutil模块可以监控系统的以下信息:

        1. CPU使用率

        2. 内存使用情况

        3. 磁盘分区和磁盘使用情况

        4. 系统进程信息,如进程ID、进程启动时间、进程状态、进程内存使用情况等

        5. 网络连接信息,如本机IP地址、远程IP地址、连接状态等

        6. 系统用户信息,如用户名、用户ID、用户组等

8. 阐述使用 watchdog 监控指定目录/文件变化的工作原理

        watchdog是一个Python库,用于监控文件系统上的文件变化,从而可以监听指定目录或文件的变化并发出通知。它使用了操作系统的文件监控机制,常用的包括inotify(Linux系统下)、FSEvents(Apple macOS系统下)和ReadDirectoryChangesW(Windows系统下)。

        watchdog库的工作原理如下:

        1. 创建监控对象

        watchdog通过watchdog.observers.Observer对象来创建监控对象,用于监听指定目录或文件的变化。在创建Observer对象时,我们需要指定回调函数,并注册要监控的目录或文件。

        2. 开始监控

        调用`observer.start()`开始监控目录或文件变化。Observer对象在启动后将不间断地运行,直到我们停止它。

        3. 处理事件

        当监控到目录或文件发生变化时,MyHandler类中重载的回调函数将被调用。

        4. 结束监控

        如果我们想要停止监控,可以调用observer.stop()停止并使用observer.join()等待任务完成。

        注意:watchdog仅在启动后才能监控任何事件,并依赖于文件系统监视机制。因此,如果在程序运行时创建或修改监视的目录或文件,则需要重新创建或重新启动监视。

9. 在 subprocess.Popen 类构造函数的参数中,stdin stdout stderr 的默认取什么?表示什么意思?如何将子进程的输出传给父进程处理?

        在subprocess.Popen类构造函数的参数中,stdin、stdout、stderr的默认取值都是`None`,表示子进程的标准输入、标准输出和标准错误流都会继承父进程的标准I/O流。

        如果要将子进程输出传递给父进程处理,我们可以使用Popen对象的`communicate()`方法。该方法将等待子进程完成,并返回一个元组,其中包含子进程的stdout输出和stderr输出。

        在这个例子中,我们使用`Popen()`打开一个名为“ls”的UNIX命令,并将其stdout和stderr输出捕获并存储到变量output和error中,使用`communicate()`等待命令完成。

        需要注意的是,在使用`Popen()`时,我们可以指定stdout和stderr参数以便捕获子进程的输出。如果将它们设置为`PIPE`,则可以通过子进程的标准输出和标准错误流将输出传递给当前进程。

10. 简述日志的作用,通过日志记录事件时,通常需要记录事件的哪些方面?

        日志是一个记录系统或应用程序运行时发生事件的重要工具。通过记录事件,我们可以理解应用程序在运行过程中发生的情况,并快速发现和解决潜在问题。

日志通常可以用于以下方面:

1.故障排除:当应用程序出现故障时,可以通过日志来查找问题根源并进行排查。

2.性能分析:分析日志可以找到应用程序的瓶颈和性能问题,进而进行优化。

3.安全监控:日志可以记录系统的安全事件,如登录尝试、攻击等。

4.业务分析:日志可以记录系统的用户行为、业务活动等,帮助业务分析人员了解系统的使用情况和用户需求。

当记录事件时,通常需要记录以下方面:

1.时间戳:记录事件发生的时间,以便后续分析和跟踪。

2.事件级别:记录事件的严重程度。常见的事件级别包括DEBUG、INFO、WARNING、ERROR、CRITICAL等。

3.事件内容:记录事件的详细描述,包括事件的类型、ID、位置、来源等。

4.上下文信息:记录事件发生时的上下文信息,包括用户信息、操作信息、请求信息、响应信息等。

5.其他:根据实际需求,可以记录其他附加信息,例如机器IP地址、线程ID等。

        通过合理记录日志,有利于加强系统监控、运维、调试,帮助全面掌握应用程序的运行状况和问题。

11. 在 logging 模块中, 日志的级别有哪些?他们如何排序?

        在logging模块中,日志级别分别为:

1. CRITICAL(50)表示致命错误,会导致程序无法继续执行。

2. ERROR(40)表示错误事件,但应用程序可以继续运行。

3. WARNING(30)表示警告事件,可能会影响应用程序的正常操作。

4. INFO(20)表示重要事件的日志记录,可用于跟踪应用程序状态和行为。

5. DEBUG(10)表示详细的调试记录,用于诊断问题。

6. NOTSET(0)是最低等级,表示不设置日志级别。

        日志级别按照数字大小进行排序,即:

CRITICAL > ERROR > WARNING > INFO > DEBUG > NOTSET

        当设置日志级别时,比所设置级别低的记录将被忽略。例如,当设置级别为`ERROR`时,只有日志级别为`ERROR`或`CRITICAL`的记录才会被记录,而低于`ERROR`级别的记录将被忽略。

        一个常见的日志应用是将所有记录都设置为`WARNING`或`ERROR`,并且只在出现问题时才考虑降低日志级别。

12. 在 logging 模块中,什么是记录器,处理器和格式化器,他们之间是什么系?掌握相关的设置语句。

在logging模块中,主要有三个概念:记录器、处理器和格式化器。

1. 记录器

记录器是将日志事件发送到日志系统的接口,它提供对日志系统配置和状态的访问。在logging模块中,使用`getLogger()`函数创建记录器。

```

import logging

logger = logging.getLogger('mylogger')

```

2. 处理器

处理器决定了将日志记录发送到哪个位置。例如,将记录写入文件、发送电子邮件或将其记录到其他服务,处理器就扮演了这个角色。在logging模块中,可以通过`addHandler()`方法添加处理器。

```

import logging

logger = logging.getLogger('mylogger')

# 创建处理器

handler = logging.FileHandler('mylog.txt')

# 添加处理器

logger.addHandler(handler)

```

3. 格式化器

格式化器决定了记录日志事件的样式。在logging模块中,在处理器中使用`setFormatter()`方法来添加格式化器。

```

import logging

logger = logging.getLogger('mylogger')

# 创建处理器

handler = logging.FileHandler('mylog.txt')

# 创建格式化器

formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')

# 添加格式化器

handler.setFormatter(formatter)

# 添加处理器

logger.addHandler(handler)

```

这三个组件之间的关系如下:

        记录器可以有多个处理器,每个处理器可以有一个格式化器,每个格式化器可以有一个格式化字符串。在记录器中调用`logging.getLogger('mylogger')`函数来创建一个记录器。可以通过`logger.addHandler(handler)`方法将处理器添加到记录器中,通过`handler.setFormatter(formatter)`方法将格式化器添加到处理器中。

        当记录器记录一个事件时,它会将事件传递给其添加的处理器。处理器将事件格式化后传递给所配置的输出目标,例如,可以写入文件或发送电子邮件。当应用程序需要记录日志时,只需要将日志信息传递给记录器即可。

        除了上述基础设置,还可以通过配置文件或字典在不同的环境中使用不同的设置。

13. 使用 pyftpdlib 模块一行命令快速搭建 FTP 服务器可以进行哪些设置?举三个使用 pyftpdlibAPI 编程比一行命令更丰富的功能。

使用pyftpdlib模块,可以使用以下一行命令快速搭建FTP服务器:

```

python -m pyftpdlib

```

这将启动一个默认的FTP服务器,监听IP地址为0.0.0.0,端口号为21。

可以使用以下设置对FTP服务器进行配置:

1. IP地址和端口号:可以使用-h和-p选项来指定FTP服务器监听的IP地址和端口号,例如:

```

python -m pyftpdlib -p 2121 -i 192.168.0.100

```

2. 用户名和密码:可以使用-a选项指定用户名和密码,例如:

```

python -m pyftpdlib -a user:password

```

3. 目录设置:可以使用-w选项设置FTP用户的工作目录,例如:

```

python -m pyftpdlib -w /home/user

```

除了上述基本设置,还可以在pyftpdlib API编程中使用更丰富的功能,例如:

1. 文件上传和下载的事件处理:可以通过自定义事件处理器来处理文件上传和下载事件,例如实现文件上传/下载进度条。

2. 权限和用户管理:可以通过FTPHandler类来自定义用户管理和权限控制,例如限制用户访问特定目录或文件。

3. 自定义命令和响应:可以通过FTPHandler类自定义FTP命令和命令响应。例如自定义FTP服务器的欢迎消息或响应特定的命令。

14. 简述编程实现邮件发送的步骤,并具体说明用到了哪些类或方法

编程实现邮件发送的基本步骤如下:

1. 导入相关模块。在Python中,我们可以使用smtplib模块操作SMTP协议发送电子邮件。使用`from smtplib import SMTP`导入SMTP类。

2. 创建SMTP对象。使用SMTP类的构造函数创建SMTP对象。

```

smtp = SMTP('smtp.example.com', port=25)

```

使用构造函数的两个参数指定SMTP服务器的主机名和端口号。

3. 连接SMTP服务器。使用SMTP对象的`connect()`方法连接SMTP服务器。

```

smtp.connect('smtp.example.com', port=25)

```

4. 登录SMTP服务器。使用SMTP对象的`login()`方法登录SMTP服务器。

```

smtp.login('username', 'password')

```

需要提供登录的用户名和密码。

5. 创建邮件对象。使用email模块来创建邮件消息对象,可以使用MIMEText、MIMEImage、MIMEMultipart等类。例如,使用MIMEText类创建只包含文本的邮件。

```

from email.mime.text import MIMEText

msg = MIMEText('This is a test email')

msg['Subject'] = 'Test Email'

msg['From'] = 'sender@example.com'

msg['To'] = 'receiver@example.com'

```

在这个示例中,我们创建了一个文本邮件,指定邮件的标题、发送者和接收者。

6. 发送邮件。使用SMTP对象的`sendmail()`方法发送邮件。

```

smtp.sendmail('sender@example.com', 'receiver@example.com', msg.as_string())

```

需要提供发送者、接收者和邮件内容。

7. 退出SMTP服务器。使用SMTP对象的`quit()`方法退出SMTP服务器。

```python

smtp.quit()

```

以上是邮件发送的基本步骤,常见的smtplib模块中涉及到的类和方法有:

1. SMTP类:构造函数用于创建SMTP对象,方法包括`connect()`、`login()`、`sendmail()`和`quit()`。

2. email模块:用于创建邮件对象,包括MIMEText、MIMEImage、MIMEMultipart等类。

3. MIMEText类:用于创建包含文本的邮件消息。

4. sendmail()方法:用于发送邮件。需要提供发送者、接收者和邮件内容。

通过在邮件对象中添加标头和正文等信息,可以创建包含任何类型附件的复杂邮件。除此之外,还可以使用SSL或TLS加密连接、自定义SMTP命令、异常处理等技术,实现更加复杂的邮件发送逻辑。

相关文章:

网络运维基础问题及解答

前言 本篇文章是对于网络运维基础技能的一些常见问题的解答,希望能够为进行期末复习或者对网络运维感兴趣的同学或专业人员提供一定的帮助。 问题及解答 1. 列举 3 种常用字符编码,简述怎样在 str 和 bytes 之间进行编码和解码。 答:常用的…...

【RabbitMQ】之保证数据不丢失方案

目录 一、数据丢失场景二、数据可靠性方案 1、生产者丢失消息解决方案2、MQ 队列丢失消息解决方案3、消费者丢失消息解决方案 一、数据丢失场景 MQ 消息数据完整的链路为:从 Producer 发送消息到 RabbitMQ 服务器中,再由 Broker 服务的 Exchange 根据…...

插入排序算法

插入排序 算法说明与代码实现&#xff1a; 以下是使用Go语言实现的插入排序算法示例代码&#xff1a; package mainimport "fmt"func insertionSort(arr []int) {n : len(arr)for i : 1; i < n; i {key : arr[i]j : i - 1for j > 0 && arr[j] > …...

Linux标准库API

目录 1.字符串函数 2.数据转换函数 3.格式化输入输出函数 4.权限控制函数 5.IO函数 6.进程控制函数 7.文件和目录函数 1.字符串函数 2.数据转换函数 3.格式化输入输出函数 #include<stdarg.h>void test(const char * format , ...){va_list ap;va_start(ap,format…...

腾讯云—自动挂载云盘

腾讯云&#xff0c;稍微麻烦了点。 腾讯云服务器&#xff0c;镜像为opencloudos 8。 ### 1、挂载云盘bash #首先通过以下命令&#xff0c;能够看到新的数据盘&#xff0c;如果不能需要通过腾讯云控制台卸载后&#xff0c;重新挂载&#xff0c;并重启服务器。 fdisk -l#为 /dev…...

为Win12做准备?微软Win11 23H2将集成AI助手:GPT4免费用

微软日前确认今年4季度推出Win11 23H2&#xff0c;这是Win11第二个年度更新。 Win11 23H2具体有哪些功能升级&#xff0c;现在还不好说&#xff0c;但它会集成微软的Copilot&#xff0c;它很容易让人想到多年前的“曲别针”助手&#xff0c;但这次是AI技术加持的&#xff0c;Co…...

Opencv Win10+Qt+Cmake 开发环境搭建

文章目录 一.Opencv安装二.Qt搭建opencv开发环境 一.Opencv安装 官网下载Opencv安装包 双击下载的软件进行解压 3. 系统环境变量添加 二.Qt搭建opencv开发环境 创建一个新的Qt项目(Non-Qt Project) 打开创建好的项目中的CMakeLists.txt&#xff0c;添加如下代码 # openc…...

Matlab实现光伏仿真(附上30个完整仿真源码)

光伏发电电池模型是描述光伏电池在不同条件下产生电能的数学模型。该模型可以用于预测光伏电池的输出功率&#xff0c;并为优化光伏电池系统设计和控制提供基础。本文将介绍如何使用Matlab实现光伏发电电池模型。 文章目录 1、光伏发电电池模型2、使用Matlab实现光伏发电电池模…...

JSON.stringify()与JSON.parse()

JSON.parse() 方法用来解析 JSON 字符串 onst json {"result":true, "count":42}; const obj JSON.parse(json); console.log(typeof(json)) //string console.log(typeof(obj)) //objJSON.stringify() 方法将一个 JavaScript 对象或值转换为 JSON 字…...

neo4j教程-安装部署

neo4j教程-安装部署 Neo4j的关键概念和特点 •Neo4j是一个开源的NoSQL图形存储数据库&#xff0c;可为应用程序提供支持ACID的后端。Neo4j的开发始于2003年&#xff0c;自2007年转变为开源图形数据库模型。程序员使用的是路由器和关系的灵活网络结构&#xff0c;而不是静态表…...

网络面试合集

传输层的数据结构是什么&#xff1f; 就是在问他的协议格式&#xff1a;UDP&TCP 2.1.1三次握手 通信前&#xff0c;要先建立连接&#xff0c;确保双方都是在线&#xff0c;具有数据收发的能力。 2.1.2四次挥手 通信结束后&#xff0c;会有一个断开连接的过程&#xff0…...

java+springboot+mysql智慧办公OA管理系统

项目介绍&#xff1a; 使用javaspringbootmysql开发的智慧办公OA管理系统&#xff0c;系统包含超级管理员&#xff0c;系统管理员、员工角色&#xff0c;功能如下&#xff1a; 超级管理员&#xff1a;管理员管理&#xff1b;部门管理&#xff1b;职位管理&#xff1b;员工管理…...

【教程】Tkinter实现Python软件自动更新与提醒

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhang.cn] 文件下载&#xff1a;https://download.csdn.net/download/sxf1061700625/88134425 示例演示&#xff1a; 参考代码&#xff1a; import os import _thread import shutil import subprocess import sys import …...

音频深度学习变得简单:自动语音识别 (ASR),它是如何工作的

一、说明 在过去的几年里&#xff0c;随着Google Home&#xff0c;Amazon Echo&#xff0c;Siri&#xff0c;Cortana等的普及&#xff0c;语音助手已经无处不在。这些是自动语音识别 &#xff08;ASR&#xff09; 最著名的示例。此类应用程序从某种语言的语音音频剪辑开始&…...

反射简述

什么是反射反射在java中起到什么样的作用获取class对象的三种方式反射的优缺点图 什么是反射 JAVA反射机制是在运行状态中&#xff0c;对于任意一个类&#xff0c;都能够知道这个类的所有属性和方法&#xff1b;对于任意一个对象&#xff0c;都能够调用它的任意一个方法和属性&…...

Kotlin泛型的协变与逆变

以下内容摘自郭霖《第一行代码》第三版 泛型的协变 一个泛型类或者泛型接口中的方法&#xff0c;它的参数列表是接收数据的地方&#xff0c;因此可以称它为in位置&#xff0c;而它的返回值是输出数据的地方&#xff0c;因此可以称它为out位置。 先定义三个类&#xff1a; op…...

【后端面经】微服务构架 (1-6) | 隔离:如何确保心悦会员体验无忧?唱响隔离的鸣奏曲!

文章目录 一、前置知识1、什么是隔离?2、为什么要隔离?3、怎么进行隔离?A) 机房隔离B) 实例隔离C) 分组隔离D) 连接池隔离 与 线程池隔离E) 信号量隔离F) 第三方依赖隔离二、面试环节1、面试准备2、基本思路3、亮点方案A) 慢任务隔离B) 制作库与线上库分离三、章节总结 …...

复习之kickstart无人职守安装脚本

一、kickstart简介 kickstart是红帽发行版中的一种安装方式&#xff0c;它通过以配置文件的方式来记录linux系统安装的各项参数和想要安装的软件。只要配置正确&#xff0c;整个安装过程中无需人工交互参与&#xff0c;达到无人值守安装的目的。 二、kickstar文件的生成 进入/…...

CSS动画——实现波浪摇摆效果...

一、效果展示 以下主要实现四个动画&#xff1a; 元素上下摇摆动画波浪上下摇摆动画气泡上升及消失动画连续气泡右飘动画 二、实现思路 这里主要讲一下波浪上下摇摆动画和连续气泡右飘动画的实现思路 这里拿一张波浪图来举例解释实现波浪动画的思路&#xff1a; 波浪的摇…...

【MyBatis学习】Spring Boot(SSM)单元测试,不用打包就可以测试我们的项目了,判断程序是否满足需求变得如此简单 ? ? ?

前言: 大家好,我是良辰丫,在上一篇文章中我们学习了MyBatis简单的查询操作,今天来介绍一下Spring Boot(SSM)的一种单元测试,有人可能会感到疑惑,框架里面还有这玩意?什么东东呀,框架里面是没有这的,但是我们简单的学习一下单元测试,可以帮助我们自己测试代码,学习单元测试可以…...

JavaScript 类

本文内容学习于&#xff1a;后盾人 (houdunren.com) 1.可以使用类声明和赋值表达式定义类&#xff0c;推荐使用类声明来定义类 //类声明 class User {} console.log(new User()); //赋值表达式定义类 let Article class {}; console.log(new Article()); //类方法间不需要逗号…...

SpringBoot的static静态资源访问、参数配置、代码自定义访问规则

目录 1. 静态资源1.1 默认静态资源1.2 Controller高优先级1.3 修改静态资源的URL根路径1.4 修改静态资源的目录1.5 访问webjars依赖包的静态资源1.6 静态资源的关闭1.7 静态资源在浏览器的缓存1.8 静态资源实战1.9 通过代码自定义静态资源访问规则 1. 静态资源 查看源码如下&a…...

IO进、线程——线程(线程的创建、线程的退出、线程的回收、线程的分离和多线程并发编程)

线程 并发执行的轻量级进程 进程是资源分配的最小单位&#xff0c;线程是任务调度的最小单位 线程是进程的一部分&#xff0c;是任务调度的最小单位。一个进程可以包含多个线程&#xff0c;这些线程可以并发执行&#xff0c;共享进程的资源&#xff0c;但每个线程都有自己的…...

neo4j教程-Cypher操作

Cypher基础操作 Cypher是图形存储数据库Neo4j的查询语言&#xff0c;Cypher是通过模式匹配Neo4j数据库中的节点和关系&#xff0c;从而对数据库Neo4j中的节点和关系进行一系列的相关操作。 下面&#xff0c;通过一张表来介绍一下常用的Neo4j操作命令及相关说明&#xff0c;具…...

秋招算法备战第31天 | 贪心算法理论基础、455.分发饼干、376. 摆动序列、53. 最大子序和

贪心算法理论基础 贪心算法并没有固定的套路&#xff0c;唯一的难点就是如何通过局部最优&#xff0c;推出整体最优。如何验证可不可以用贪心算法呢&#xff1f;最好用的策略就是举反例&#xff0c;如果想不到反例&#xff0c;那么就试一试贪心吧。刷题或者面试的时候&#xf…...

页面生成图片或PDF node-egg

没有特别的幸运&#xff0c;那么就特别的努力&#xff01;&#xff01;&#xff01; 中间件&#xff1a;页面生成图片 node-egg 涉及到技术node egg Puppeteer 解决文书智能生成多样化先看效果环境准备初始化项目 目录结构核心代码 完整代码https://gitee.com/hammer1010_ad…...

go常用知识点

go env -w GO111MODULEon go env -w GOPROXYhttps://goproxy.cn,direct 打包一个目录下的多个包时 go build ./… go install ./… 测试时&#xff0c;命令行&#xff1a;go test . //目录下所有单元测试都会执行 go test -v 目录 //测试覆盖率 go test -cover //使用cove…...

ComPDFKit PDF SDK(支持Web、Android、IOS、Windows、Server、API、跨平台)

1. SDK、API是什么&#xff1f; SDK是软件开发工具包的缩写&#xff0c;指的是一组用于开发软件应用的工具、库和文档。SDK包含一系列的函数、类和方法&#xff0c;开发人员可以使用这些工具和资源来开发、测试和部署应用程序。SDK可以提供各种功能和技术支持&#xff0c;如图…...

使用maven容器打包java项目

docker run --rm -v /path/to/your/microservice:/app -w /app maven:latest mvn clean package 解释一下上面的命令&#xff1a; docker run&#xff1a;运行Docker容器。--rm&#xff1a;在容器运行结束后自动删除容器&#xff0c;避免堆积未使用的容器。-v /path/to/you…...

超前端相关的学习网站和一些靠谱的小工具

CSS相关 1. CSS Battle - 在线比拼 CSS https://cssbattle.dev 在线比拼 CSS &#xff0c;一个挺有趣的竞争性游戏&#xff0c;一共有12个级别&#xff0c;需要你用 HTML和 CSS 100%还原它给出的页面&#xff0c;然后再尽量减少代码&#xff0c;你也可以查看全球的排行榜&am…...