网络运维基础问题及解答

前言

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

问题及解答

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命令、异常处理等技术,实现更加复杂的邮件发送逻辑。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/52584.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【数学建模】时间序列分析

文章目录 1. 条件2. 模型分类3. SPSS处理时间序列 1. 条件 1.使用于具有时间、数值两种要素 2.数据具有周期性可以使用时间序列分解 2. 模型分类 叠加模型【YTSCI】 序列的季节波动变化越来越大,反映变动之间的关系发生变化乘积序列【YTSC*I】 时间序列波动保持恒…

Scaling Instruction-Finetuned Language Models

Paper name Scaling Instruction-Finetuned Language Models Paper Reading Note Paper URL: https://arxiv.org/pdf/2210.11416.pdf TL;DR 2022 年谷歌出的文章,对指令微调的影响因素进行分析,提出了一些提升指令微调效果的方案。与该文章一起出品…

Linux--验证命令行上运行的程序的父进程是bash

1.输入以下代码&#xff1a; #include <stdio.h> #include <unistd.h> int main() {printf("hello world: pid: %d, ppid: %d\n",getpid(),getppid());return 0; }2.编译得到可执行程序​​​ 3.运行得到ppid 4.输入指令 ps axj | head -1 &&am…

【图论】差分约束

一.情景导入 x1-x0<9 ; x2-x0<14 ; x3-x0<15 ; x2-x1<10 ; x3-x2<9; 求x3-x0的最大值&#xff1b; 二.数学解法 联立式子2和5&#xff0c;可得x3-x0<23;但式子3可得x3-x0<15。所以最大值为15&#xff1b; 三.图论 但式子多了我们就不好解了&#xff0…

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;它包含了不同阶段和不同类型的测试,以此来保证软件工程的稳…

黑马头条---day1

手机端查看 docker 容器&#xff0c;镜像操作命令 1、docker删除所有镜像命令 删除所有镜像的命令是Docker中一个非常常见的操作。下面是具体的实现步骤和命令示例&#xff1a; $ docker stop $(docker ps -aq) 停止所有正在运行的容器。 $ docker rm $(docker ps -aq) 删…

靶机精讲之NYX

主机发现 端口扫描 服务扫描 -sV漏洞脚本扫描 UDP扫描 那些开发那些关闭 脚本扫描 或许有价值.php web渗透 看源码 目录爆破 没有扫到有价值的信息 继续web渗透&#xff0c;访问admin目录 继续目录扫描 sudo gobuster dir -u http://192.168.10.206 -x txt,sql,php,jsp -w…

20.1 HTML 介绍

1. W3C组织 万维网联盟(World Wide Web Consortium, W3C): 是一个国际性的标准化组织, 致力于开发和推广Web标准.W3C的使命是通过制定和推广Web技术标准, 促进Web的长期发展和互操作性, 它由许多组织和个人组成, 包括浏览器制造商, 软件开发商, 网络服务提供商, 学术机构和个…

线性代数(应用篇):第五章:特征值与特征向量、第六章:二次型

文章目录 第5章 特征值与特征向量、相似矩阵(一) 特征值与特征向量1.定义2.性质3.求解(1)具体型矩阵试根法、多项式带余除法&#xff1a;三阶多项式分解因式 (2)抽象型矩阵 (二) 相似1.矩阵相似(1)定义(2)性质 2.相似对角化(1)定义(2)相似对角化的条件&#xff08;n阶矩阵A可相…

python机器学习(五)逻辑回归、决策边界、代价函数、梯度下降法实现线性和非线性逻辑回归

线性回归所解决的问题是把数据集的特征传入到模型中&#xff0c;预测一个值使得误差最小&#xff0c;预测值无限接近于真实值。比如把房子的其他特征传入到模型中&#xff0c;预测出房价&#xff0c; 房价是一系列连续的数值&#xff0c;线性回归解决的是有监督的学习。有很多场…

【微服务】springboot整合mongodb使用详解

目录 一、mongodb简介 1.1 什么是mongodb 1.2 mongodb特点 二、mongodb中的核心术语 2.1 mogodb与数据库对比 2.2 mongodb中的核心概念 2.3 与关系数据库的差异 2.3.1 半结构化 2.3.2 支持多级嵌套 2.3.3 关系弱化 三、mongodb 技术优势和应用场景 3.1 mongodb 技术…

【C#】并行编程实战:并行编程中的模式

本章将介绍并行编程模式&#xff0c;重点是理解并行代码问题场景并使用并行编程/异步技术解决他们。本章会介绍几种最重要的编程模式。 本教程学习工程&#xff1a;魔术师Dix / HandsOnParallelProgramming GitCode 1、MapReduce 模式 引入 MapReduce 是为了解决处理大数据的问…

睡眠健康数据分析

项目背景 背景描述 本数据集涵盖了与睡眠和日常习惯有关的诸多变量。如性别、年龄、职业、睡眠时间、睡眠质量、身体活动水平、压力水平、BMI类别、血压、心率、每日步数、以及是否有睡眠障碍等细节。 数据集的主要特征&#xff1a; 综合睡眠指标&#xff1a; 探索睡眠持续时…

UNISOT让食品欺诈无处遁形

​​发表时间&#xff1a;2023年5月11日 全世界的消费者开始越来越关注食物的来源和采购方式。这是因为人们渴望吃得更健康、更用心&#xff0c;同时人们也认识到了购买可持续且合乎伦理道德的产品的必要性。 近年来&#xff0c;人们对食品溯源的渴望进一步加速&#xff0c;原…

Python读取csv、Excel文件生成图表

简介 本文章介绍了通过读取 csv 或 Excel 文件内容&#xff0c;将其转换为折线图或柱状图的方法&#xff0c;并写入 html 文件中。 目录 1. 读取CSV文件 1.1. 生成折线图 1.1.1. 简单生成图表 1.1.2. 设置折线图格式 1.2. 生成柱状图 1.2.1. 简单生成图表 1.2.2. 设置柱…

文章详情页 - 评论功能的实现

目录 1. 准备工作 1.1 创建评论表 1.2 创建评论实体类 1.3 创建 mapper 层评论接口和对应的 xml 实现 1.4 准备评论的 service 层 1.5 准备评论的 controller 层 2. 总的初始化详情页 2.1 加载评论列表 2.1.1 实现前端代码 2.1.2 实现后端代码 2.2 查询当前登录用户的…

Docker安装es以及ik分词器

1、拉取镜像 docker pull elasticsearch:7.10.12、下载对应版本的ik分词、并将它们解压到ik文件夹下&#xff0c;如图 https://github.com/medcl/elasticsearch-analysis-ik/releases 3、在服务器上创建文件夹 mkdir /usr/elklog/elk/es mkdir /usr/elklog/elk/es/data mkdi…

【C进阶】回调函数(指针进阶2,详解,小白必看)

目录 6. 函数指针数组 6.1简单计算器 6.2函数指针数组实现计算器 7. 指向函数指针数组的指针(仅作了解即可) 8.回调函数 8.1关于回调函数的理解​编辑 8.1.1用回调函数改良简单计算器 8.2qsort库函数的使用 8.2.1冒泡排序 8.2.2qsort的概念 8.3冒泡排序思想实现qsor…

docker存储空间报错解决(谨慎操作,会影响原来的容易镜像,不熟练切勿操作)

报错内容 [rootDream package]# docker build -t imapp . [] Building 21.0s (6/19)> [internal] load build definition from Dockerfile 0.1s> > transferring …