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

linux基础 - 内核的基础概念

目录

零. 前言

一. 源码简介

二. 存储管理

物理内存管理:

虚拟内存管理:

内存分配与回收:

三. CPU 和进程管理

进程管理:

CPU 管理:

四. 文件系统

文件系统的概念

常见的 Linux 文件系统类型

文件系统的工作原理

文件操作示例

五. 设备管理和驱动

设备管理

设备驱动

六. 网络通信

网络协议栈

套接字(Socket)接口

数据包处理

网络设备驱动

网络安全机制

网络性能优化

七. 系统的初始化(引导)

BIOS/UEFI 阶段

加载引导程序

内核加载阶段

内核初始化阶段

/sbin/init 进程

八. 系统调用

定义和作用

重要性

常见的系统调用类型

系统调用的执行过程

九. 总结


零. 前言

Linux 内核是一种开源电脑操作系统内核,是 Linux 操作系统的主要组件,也是计算机硬件与其进程之间的核心接口,负责二者之间的通信。它是一个用 C 语言写成、符合 POSIX 标准的类 Unix 操作系统。

Linux 内核最早是由林纳斯·托瓦兹(Linus Torvalds)于 1991 年在芬兰赫尔辛基大学读书时研发,后来由几千名开发人员在互联网上协作来编写和维护。它最初是为基于 x86 的 32 位 PC(386 或更高版本)开发的,现在用于各种类型的设备,例如服务器、智能手机和嵌入式系统。

Linux 内核的主要模块(或组件)包括存储管理、CPU 和进程管理、文件系统、设备管理和驱动、网络通信,以及系统的初始化(引导)、系统调用等。

一. 源码简介

Linux 内核代码是开源操作系统 Linux 的核心部分,由众多开发者共同维护和完善。以下是关于 Linux 内核代码的一些重要信息:

  • 代码结构:Linux 内核源代码位于/usr/src/linux/目录下,包含多个子目录,如include/init/arch/drivers/fs/net/mm/ipc/kernel/等。每个子目录都有其特定的功能和相关代码。
  • 重要文件和功能
    • asm.s:包含大部分硬件异常所引起的中断的汇编语言处理过程。
    • traps.c:实现了asm.s中断处理过程中调用的 C 函数,用于显示出错位置和出错号等调试信息。
    • system_call.s:实现系统调用中断int 0x80的入口处理过程以及信号检测处理,同时给出了两个系统功能的底层接口。
    • sched.c:内核中有关任务调度函数的程序,包括调度的基本函数和一些简单的系统调用函数。
    • signal.c:涉及内核中所有有关信号处理的函数。
    • exit.c:描述进程终止和退出的处理事宜,包含进程释放、会话终止和程序退出处理函数以及杀死进程、终止进程、挂起进程等系统调用函数。
    • fork.cfork()系统调用用于创建子进程。
  • 版本发布:Linux 内核有主线、稳定版和长期支持版等不同版本。你可以从 Linux 内核官网(The Linux Kernel Archives)获取最新的内核代码。

二. 存储管理

Linux 内核的存储管理负责管理系统的内存资源,其主要功能包括内存分配、回收、映射和保护等。以下是对 Linux 内核存储管理的详细介绍:

物理内存管理

  • 页面管理:Linux 内核将物理内存划分为固定大小的页面,通常为 4KB。页面是内存管理的基本单位,内核通过页面表将虚拟地址映射到物理地址。
  • 伙伴系统:用于分配和回收物理页面。伙伴系统将连续的空闲页面组织成大小不同的块,以满足不同大小的内存请求。
  • 内存区管理:Linux 内核将物理内存划分为不同的区域,如 DMA 区域、普通区域和高端内存区域等。不同的区域有不同的用途和访问限制。

虚拟内存管理

  • 虚拟地址空间:每个进程都拥有独立的虚拟地址空间,虚拟地址空间被划分为用户空间和内核空间。用户空间用于进程的代码、数据和堆等,内核空间用于内核代码和数据。
  • 页表:页表用于将虚拟地址转换为物理地址。当进程访问虚拟地址时,内核通过页表查找对应的物理页面,并进行访问权限检查。
  • 内存映射:Linux 内核支持将文件或设备映射到进程的虚拟地址空间,实现文件的共享和进程间通信。
  • 交换空间:当物理内存不足时,Linux 内核可以将部分不常用的页面交换到磁盘上的交换空间,以释放物理内存。

内存分配与回收

  • **malloc()和 free()**:用户程序通过 malloc()函数申请内存,通过 free()函数释放内存。内核负责管理内存的分配和回收,并确保内存的合理使用。
  • 内核内存分配:内核自身也需要分配内存,如内核模块、缓冲区等。内核使用 kmalloc()、vmalloc()等函数进行内存分配。
  • 内存回收:内核会定期扫描内存,回收不再使用的内存页面,以提高内存的利用率。
  1. 内存保护

    • 访问权限检查:内核通过页表中的访问权限位来检查进程对内存的访问是否合法,防止进程越界访问或非法修改其他进程的内存。
    • 内核空间保护:用户进程不能直接访问内核空间,只有内核代码可以访问内核空间,以保证内核的安全性和稳定性。
  2. 存储管理策略

    • 缓存管理:Linux 内核使用缓存来提高内存的访问速度,如页缓存、inode 缓存等。
    • 交换策略:内核根据系统的内存使用情况和交换空间的大小,决定何时将页面交换到磁盘上。
    • 内存压缩:一些 Linux 内核支持内存压缩技术,如 ZRAM,可以在内存紧张时对页面进行压缩,以增加可用内存。

Linux 内核的存储管理是一个复杂而重要的系统组件,它确保了系统的内存资源得到合理的分配和利用,同时保证了内存的安全性和稳定性。不同的 Linux 发行版可能会对存储管理进行一些优化和调整,以适应不同的应用场景和硬件环境

三. CPU 和进程管理

Linux 内核的 CPU 和进程管理是操作系统的核心部分,负责有效地分配 CPU 资源和管理进程的执行。以下是对其的详细介绍:

进程管理

  1. 进程描述

    • 为每个进程创建一个进程控制块(PCB),包含进程的标识符、状态、优先级、资源分配、上下文等信息。
    • 进程状态包括就绪、运行、阻塞等,内核根据这些状态来决定进程的调度。
  2. 进程创建和终止

    • 通过系统调用(如 fork())创建新进程,复制父进程的资源和环境。
    • 当进程完成任务或出现异常时,通过系统调用(如 exit())终止进程,并释放相关资源。
  3. 进程调度

    • 决定哪个进程在何时获得 CPU 时间。调度策略通常基于进程的优先级、时间片等因素。
    • 常见的调度算法包括先来先服务(FCFS)、短作业优先(SJF)、时间片轮转(RR)等。Linux 内核通常采用多种调度策略的组合,以适应不同的场景。

CPU 管理

  1. 中断处理

    • 响应硬件设备产生的中断请求,暂停当前进程的执行,转而去处理中断服务程序。
    • 中断处理完成后,恢复之前被中断的进程或调度新的进程执行。
  2. 上下文切换

    • 当切换进程时,保存当前进程的 CPU 上下文(寄存器值、程序计数器等),并加载新进程的上下文。
    • 这确保了进程能够在被暂停后准确地恢复执行。
  3. 多核支持

    • 充分利用多核 CPU 的优势,实现并行处理和负载均衡。
    • 内核可以将进程分配到不同的 CPU 核心上,提高系统的整体性能。
  4. 进程优先级调整

    • 根据进程的行为和系统的需求,动态调整进程的优先级。
    • 例如,I/O 密集型进程在等待 I/O 操作完成时,其优先级可能会被提高,以避免 CPU 资源的浪费。

例如,在一个多任务的系统中,当用户同时运行多个程序时,如浏览器、文本编辑器和音乐播放器,内核的 CPU 和进程管理会根据各个进程的优先级和需求,合理地分配 CPU 时间片。如果浏览器正在加载网页,需要更多的 CPU 资源,内核可能会暂时减少分配给文本编辑器和音乐播放器的时间片,以加快网页加载速度。当网页加载完成后,再重新调整各个进程的资源分配。

Linux 内核的 CPU 和进程管理是确保系统高效运行、资源合理分配以及各个进程协同工作的关键机制。

四. 文件系统

Linux 内核中的文件系统是用于组织、存储和管理文件及目录的重要组成部分。以下是对其的详细介绍:

文件系统的概念

文件系统是一种数据结构和相关算法的集合,用于在存储设备上组织和管理文件和目录。它提供了一种统一的方式来访问、读取、写入和操作文件。

主要功能

  1. 文件和目录管理

    • 创建、删除、重命名文件和目录。
    • 维护文件和目录的层次结构。
  2. 存储空间分配

    • 为新创建的文件分配存储空间。
    • 回收删除文件所释放的空间。
  3. 文件访问控制

    • 设置文件和目录的权限,如读、写、执行权限,以控制用户对文件的访问。
  4. 文件属性管理

    • 记录文件的各种属性,如创建时间、修改时间、文件大小等。
  5. 数据存储和检索

    • 将文件的数据以适当的方式存储在存储设备上,并能够快速检索和读取。

常见的 Linux 文件系统类型

  1. Ext4:是 Ext3 的扩展,具有更好的性能、可靠性和更大的文件系统容量支持。
  2. XFS:适用于大容量存储和高性能需求的场景。
  3. Btrfs:具有先进的特性,如快照、数据校验和等。

文件系统的工作原理

  1. 文件系统在存储设备上划分出不同的区域,如超级块、inode 区、数据区等。
  2. 超级块包含文件系统的关键信息,如文件系统的大小、空闲空间等。
  3. Inode(索引节点)用于存储文件的元数据,如权限、所有者、大小、指向数据块的指针等。
  4. 数据区用于实际存储文件的内容。

文件操作示例

当用户打开一个文件进行读取时,文件系统会:

  1. 根据文件名查找对应的 inode。
  2. 从 inode 中获取文件的属性和数据块的位置信息。
  3. 从指定的数据块中读取文件的内容,并返回给用户程序。

文件系统是 Linux 内核中实现数据持久化和有效管理的关键部分,它为用户和应用程序提供了方便、高效和可靠的文件操作接口。

五. 设备管理和驱动

Linux 内核中的设备管理和驱动是负责处理与硬件设备交互的关键部分。以下是对其的详细介绍:

设备管理

  1. 设备分类

    • 字符设备:以字符流的方式进行数据传输,例如键盘、鼠标、串口等。
    • 块设备:以数据块的方式进行数据传输,例如硬盘、软盘、U 盘等。
    • 网络设备:用于网络通信,例如以太网卡。
  2. 设备注册与发现

    • 硬件设备在系统启动或插入时,其驱动程序会向内核注册设备信息。
    • 内核通过各种机制(如总线扫描)发现新设备。
  3. 设备资源管理

    • 分配和管理设备所需的 I/O 端口、内存地址、中断等资源。
  4. 设备文件

    • 在文件系统中为每个设备创建一个特殊的设备文件,用户程序通过对设备文件的操作来与设备交互。

设备驱动

  1. 驱动程序的作用

    • 作为内核与硬件设备之间的桥梁,将硬件的操作细节封装起来,为内核提供统一的接口。
  2. 驱动程序的结构

    • 初始化部分:完成设备的初始化、资源申请等工作。
    • 操作接口实现:实现对设备的读、写、控制等操作。
    • 中断处理:处理设备产生的中断。
  3. 驱动加载与卸载

    • 可以在内核启动时静态加载,也可以在运行时动态加载和卸载。
  4. 数据传输方式

    • 轮询:驱动程序不断检查设备状态,以获取数据或确定是否可以发送数据。
    • 中断:设备通过发送中断信号通知内核有数据或操作完成。
  5. 示例

    • 例如硬盘驱动程序,负责管理硬盘的读写操作,处理磁盘的分区、扇区、磁道等物理特性,将复杂的硬件操作转化为内核能够理解的统一接口。

总之,设备管理和驱动使得 Linux 能够支持各种各样的硬件设备,为用户提供丰富的功能和良好的性能。不同类型的设备需要相应的驱动程序来实现与内核的有效通信和协同工作。

六. 网络通信

Linux 内核中的网络通信是实现系统与外部网络进行数据交换和通信的关键部分。以下是对其的详细介绍:

网络协议栈

  1. TCP/IP 协议簇

    • 包括 TCP(传输控制协议)提供可靠的面向连接的通信,确保数据的准确和有序传输。
    • UDP(用户数据报协议)提供无连接、不可靠但快速的数据传输。
    • IP(网际协议)负责数据包的路由和寻址。
  2. 网络层

    • 处理 IP 数据包的路由和转发,根据目标 IP 地址确定数据包的传输路径。
  3. 传输层

    • TCP 负责建立连接、数据分段、流量控制、拥塞控制和错误恢复。
    • UDP 则用于简单的、对实时性要求高的应用,如音频和视频流。
  4. 应用层协议支持

    • 支持 HTTP、FTP、SSH 等各种常见的应用层协议。

套接字(Socket)接口

  1. 提供统一的编程接口

    • 应用程序通过创建套接字来与网络进行通信。
    • 套接字类型包括流式套接字(SOCK_STREAM,对应 TCP)和数据报套接字(SOCK_DGRAM,对应 UDP)。
  2. 地址和端口

    • 定义网络通信的端点,包括 IP 地址和端口号。

数据包处理

  1. 接收数据包

    • 网络接口接收来自网络的数据包,并将其传递给内核网络层。
  2. 数据包解析

    • 内核解析数据包的头部信息,确定协议类型、源地址、目标地址等。
  3. 路由决策

    • 根据目标地址和路由表,决定数据包的下一跳。
  4. 发送数据包

    • 应用程序通过套接字发送数据,内核将数据封装成数据包,并通过网络接口发送出去。

网络设备驱动

  1. 与硬件网络设备交互

    • 负责控制网络接口卡(NIC)的工作,如发送和接收数据帧。
  2. 中断处理

    • 处理网络设备产生的中断,通知内核有新的数据到达或发送完成。

网络安全机制

  1. 防火墙

    • 基于规则对数据包进行过滤,阻止非法访问。
  2. IP tables

    • 提供灵活的数据包过滤和网络地址转换(NAT)功能。

网络性能优化

  1. 缓冲区管理

    • 优化数据包的接收和发送缓冲区,减少数据丢失和提高传输效率。
  2. 拥塞控制

    • 调整数据发送速率,避免网络拥塞。

例如,当您在浏览器中访问一个网站时,浏览器通过套接字向 Linux 内核发送请求。内核根据网络协议栈处理数据包,通过路由找到目标服务器,并将响应数据包返回给浏览器,整个过程都依赖于 Linux 内核的网络通信功能。

Linux 内核的网络通信部分提供了强大而灵活的功能,使得系统能够高效、可靠地在网络环境中进行数据传输和通信。

七. 系统的初始化(引导)

Linux 系统的初始化(引导)是一个复杂但有序的过程,负责启动系统并为其运行做好准备。以下是对其的详细介绍:

BIOS/UEFI 阶段

  1. 开机自检(Power-On Self-Test,POST)

    • 计算机硬件进行基本的检查,包括内存、硬盘、CPU 等。
    • 检测硬件是否正常工作。
  2. 选择启动设备

    • 根据 BIOS/UEFI 的设置,选择从硬盘、光盘、USB 等设备启动。

加载引导程序

  1. 主引导记录(MBR)或 GUID 分区表(GPT)

    • MBR 位于硬盘的第一个扇区,GPT 有特定的分区结构。
    • 包含引导代码和分区表信息。
  2. 引导加载程序(Boot Loader)

    • 常见的如 GRUB(Grand Unified Bootloader)。
    • 负责加载内核映像。

内核加载阶段

  1. 定位和读取内核映像

    • 引导加载程序从指定位置(如硬盘分区)读取压缩的内核映像到内存。
  2. 解压缩内核

    • 对内核映像进行解压缩,准备执行。

内核初始化阶段

  1. 硬件检测和初始化

    • 检测系统中的硬件设备,并初始化必要的硬件驱动。
  2. 内存管理初始化

    • 建立内存映射,设置内存区域的访问权限。
  3. 进程管理初始化

    • 创建初始进程和进程调度相关的数据结构。
  4. 中断处理初始化

    • 设置中断向量表,使系统能够响应硬件中断。
  5. 文件系统初始化

    • 挂载根文件系统。
  6. 启动第一个用户空间进程

    • 通常是 /sbin/init 进程。

/sbin/init 进程

  1. 运行系统初始化脚本

    • 根据系统的运行级别,执行相应的初始化脚本。
    • 例如,在系统启动时执行服务的启动、设置网络参数等操作。
  2. 切换运行级别

    • 用户可以通过命令切换系统的运行级别,以改变系统的服务和运行状态。

系统的初始化(引导)过程确保了 Linux 系统能够从硬件启动到进入可操作的状态,为用户提供稳定和可用的环境。在这个过程中,各个组件协同工作,完成硬件检测、资源配置和服务启动等关键任务。

八. 系统调用

系统调用是操作系统提供给应用程序与内核进行交互的接口,下面是详细介绍:

定义和作用

系统调用是应用程序请求内核服务的一种机制。它允许应用程序访问操作系统内核所管理的资源,执行特权操作,以及获得内核提供的功能。

重要性

  1. 安全性保障

    • 防止应用程序直接访问和修改关键的系统资源,保护系统的稳定性和安全性。
  2. 资源管理

    • 内核统一管理系统资源,通过系统调用合理分配和控制资源的使用。

常见的系统调用类型

  1. 进程管理

    • fork():创建一个新进程。
    • exec():在当前进程中执行新的程序。
    • wait():等待子进程结束。
  2. 文件操作

    • open():打开文件。
    • read():从文件读取数据。
    • write():向文件写入数据。
    • close():关闭文件。
  3. 内存管理

    • malloc():动态分配内存。
    • free():释放动态分配的内存。
  4. 设备操作

    • ioctl():对设备进行特定的控制操作。
  5. 网络操作

    • socket():创建套接字。

系统调用的执行过程

  1. 应用程序通过特定的指令或函数调用触发系统调用。

  2. 处理器切换到特权模式(内核模式)。

  3. 内核根据系统调用号确定要执行的具体服务例程。

  4. 执行相应的内核代码,完成请求的操作。

  5. 返回结果给应用程序,处理器切换回用户模式。

例如,当一个应用程序需要读取一个文件的内容时,它会调用 read() 系统调用。内核会验证应用程序的权限,然后从磁盘中读取数据并返回给应用程序。

总之,系统调用是连接应用程序和操作系统内核的桥梁,使得应用程序能够在受控和安全的方式下利用操作系统的功能。

九. 总结

Linux 内核是 Linux 操作系统的核心中枢,具有以下重要方面:

  1. 资源统筹:管理着计算机的关键资源,涵盖 CPU 调度、内存分配、存储管理、设备控制和网络通信。
  2. 进程运作:负责进程的全生命周期,从创建、调度到终止,保障进程高效且有序执行。
  3. 内存掌控:运用虚拟内存技术,合理分配物理内存,确保各进程内存空间独立且安全。
  4. 文件管理:组织和操控文件及目录,分配存储空间,设定访问权限和记录文件属性。
  5. 设备交互:通过驱动程序使内核与各类硬件设备有效通信,实现设备的正常运作。
  6. 网络连接:构建网络协议栈,处理数据包传输、路由决策和网络安全,支持多样的网络应用。
  7. 启动引导:历经硬件自检、引导程序加载、内核初始化等步骤,为系统运行做好准备。
  8. 系统接口:通过系统调用为应用程序提供访问内核服务的途径,严格控制操作权限。

开源的 Linux 内核不断演进,适应多变的硬件环境和复杂的应用需求,是 Linux 系统稳定性和扩展性的基石。

相关文章:

linux基础 - 内核的基础概念

目录 零. 前言 一. 源码简介 二. 存储管理 物理内存管理: 虚拟内存管理: 内存分配与回收: 三. CPU 和进程管理 进程管理: CPU 管理: 四. 文件系统 文件系统的概念 常见的 Linux 文件系统类型 文件系统的工…...

centos7系统使用docker-compose安装部署jenkins

CentOS7系统使用docker-compose安装部署jenkins,并实现前后端自动构建 记录一次工作中部署jenkins的真实经历,总结了相关经验 1.准备环境 1.java 由于最新的jenkins需要jdk11以上才能支持,而系统里的jdk是1.8的,因此等jenkins安…...

传染病报卡内容——丙型

--丙型 select a.morbiditdate 发病日期, diagnosedate 诊断日期, a.deathdate 死亡日期, a.casetypequality 病例分类,a.hcvrna "HCR_RNA定量" from zl_sdmb.t_报卡记录 t, c1_infectiousv1_6 a where t.id a.fileid and t.卡片种类 传…...

本地快速部署大语言模型开发平台Dify并实现远程访问保姆级教程

文章目录 前言1. Docker部署Dify2. 本地访问Dify3. Ubuntu安装Cpolar4. 配置公网地址5. 远程访问6. 固定Cpolar公网地址7. 固定地址访问 前言 本文主要介绍如何在Linux Ubuntu系统使用Docker快速部署大语言模型应用开发平台Dify,并结合cpolar内网穿透工具实现公网环境远程访问…...

《Cloud Native Data Center Networking》(云原生数据中心网络设计)读书笔记 -- 02 Clos拓扑

本章回答以下问题: 什么是 Clos 拓扑,它与“接入 - 汇聚 - 核心”拓扑有何不同?Clos 拓扑的特征是什么?Clos 拓扑对数据中心网络的影响是什么? Clos拓扑 云原生数据中心基础设施的先行者们想要构建一种支持大规模水平扩展网络。 基本的Clos拓扑如图…...

VUE3版本新特性

VUE3版本新特性 VUE3和VUE2的区别路由的使用vite安装项目新特性使用 1.VUE3和VUE2的区别 2020年9月18日,Vue.js发布版3.0版本,代号:One Piece 于 2022 年 2 月 7 日星期一成为新的默认版本! Vue3性能更高,初次渲染快55%, 更新渲染快133% 。…...

【Oracle篇】Oracle数据库坏块处理:rman修复坏块实践与案例分析(第七篇,总共八篇)

💫《博主介绍》:✨又是一天没白过,我是奈斯,DBA一名✨ 💫《擅长领域》:✌️擅长Oracle、MySQL、SQLserver、阿里云AnalyticDB for MySQL(分布式数据仓库)、Linux,也在扩展大数据方向的知识面✌️…...

学懂C#编程:从一个简单的例子理解事件处理

在C#中,事件是一种特殊的委托类型,用于在对象上发生某些事情时通知订阅者。事件的处理通常包括定义事件,创建触发事件的条件,以及订阅该事件的事件处理程序。 以下是一个简单的C#事件处理示例: using System;// 定义…...

深入理解指针(2)

4. const 修饰指针 4.1 const修饰变量 变量是可以修改的,如果把变量的地址交给⼀个指针变量,通过指针变量的也可以修改这个变量。 但是如果我们希望⼀个变量加上⼀些限制,不能被修改,怎么做呢?这就是const的作⽤。 …...

C#.Net筑基-集合知识全解

01、集合基础知识 .Net 中提供了一系列的管理对象集合的类型,数组、可变列表、字典等。从类型安全上集合分为两类,泛型集合 和 非泛型集合,传统的非泛型集合存储为Object,需要类型转。而泛型集合提供了更好的性能、编译时类型安全…...

AI PPT生成器,一键在线智能生成PPT工具

PPT作为商业沟通和教育培训中的重要工具,PPT制作对于我们来说并不陌生。但是传统的PPT制作不仅耗时,而且想要做出精美的PPT,需要具备一定的设计技能。下面小编就来和大家分享几款AI PPT工具,只要输入主题,内容就可以在…...

stm32学习笔记---零基础入门介绍2

目录 STM32介绍 STM32家族系列 ARM介绍 ARM内核型号种类 我们学习用的STM32 片上资源/外设(Peripheral) 命名规则 系统结构 引脚定义 STM32的启动配置 STM32最小系统电路和其他部分电路 最小系统板的实物图 附:安装软件准备 声明…...

搭建取图系统app源码开发,满足广泛应用需求

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 前言 图片已成为信息传递的重要媒介,广泛应用于各个领域。为满足日益增长的图片需求,搭建一款高效的取图系统,可以为用户提供便捷、全面的…...

语音质量评价方法之MOS

引言 在语音增强、语音合成、语音转换、声音转换、语音克隆、语音修复等等领域,常常要对输出的语音进行评价。对语音的质量评价一般关注两个方面,即主观评价和客观评价。主观评价就是人凭借听觉感受对语音进行打分,客观评价比较广泛&#xf…...

gorm简介

【1】ORM: 即Object-Relational Mapping,它的作用是在关系型数据库和对象之间作一个映射,这样我们在具体的操作数据库的时候,就不需要再去和复杂的SQL语句打交道,只要像平时操作对象一样操作它们就可以了。 【2】GORM gorm是go语言的一个orm…...

MySQL:SELECT list is not in GROUP BY clause 报错 解决方案

一、前言 一大早上测试环境,发现测试环境的MySQL报错了。 SELECT list is not in GROUP BY clause and contains nonaggregated column二、解决方案 官方文档中提到: 大致意思: 用于GROUP BY的SQL / 92标准要求满足以下条件: SE…...

IPython的使用技巧

1、解释说明 IPython是一个强大的Python交互式shell,它提供了丰富的功能,如自动补全、历史记录、内置帮助等。IPython使得在命令行下编写和测试Python代码变得更加方便和高效。 2、使用示例 安装IPython: pip install ipython启动IPython…...

Spring Boot 多线程例子

在Spring Boot中,多线程可以通过Java的并发工具来实现。以下是一些常见的多线程实现方法: 1. 使用Async注解和CompletableFuture: 首先,需要在Spring Boot应用的主类上添加EnableAsync注解,以启用异步支持。 java Spr…...

java干货 线程池的分析和使用

文章目录 一、了解线程池1.1 什么是线程池1.2 为什么需要线程池 二、四种线程池的使用2.1 newFixedThreadPool2.2 newCachedThreadPool2.3 newSingleThreadExecutor2.4 newScheduledThreadPool 三、自定义线程池3.1 线程池七大核心参数3.2 线程池内部处理逻辑 一、了解线程池 …...

文本张量入门

张量,英文为Tensor,是机器学习的基本构建模块,是以数字方式表示数据的形式。 张量的基本类型: 创建一个标量(0维张量),也就是一个单独的数字 scalar torch.tensor(7) scalar.ndim # 返回张量的维度 0 # …...

js文字如何轮播?

<div class"td-style"> <span class"td-text">内容1内容1内容1内容1内容1内容1</span> </div> css&#xff1a; <style> .td-style { width: 160px; height: 72px; overflow: hidden; white-…...

Linux 五种IO模型

注&#xff1a;还有一种信号驱动IO&#xff0c;使用较少暂不讨论&#xff1b; 一&#xff0c;区分阻塞、非阻塞和同步、异步 看了很多文章对这两组概念解释和对比&#xff0c;说的太复杂了&#xff0c;其实没必要&#xff0c;两句话就能说清楚。 首先&#xff0c;对于读数据rec…...

深度解析响应式异步编程模型

上一篇文章中我们聊了一下线程池,基于线程池的多线程编程是我们在高并发场景下提升系统处理效率的有效手段,但却不是唯一的。今天我们来看一下另一种异步开发的常用手段-响应式编程模型 传统多线程模型的缺陷 多线程模型是目前应用最为广泛的并发编程手段,但凡遇到什么性能…...

一个软件是如何开发出来的呢?

一、前言 如今&#xff0c;AI大爆发的时代&#xff0c;作为一名IT从业者&#xff0c;你是否也想尝试开发一套自己的系统&#xff0c;实现那些看似有可能实现的天马行空的想法&#xff0c;变成一个优秀甚至伟大的产品&#xff0c;甚至带来某个行业的革新&#xff0c;那作为一名…...

宝塔板面有哪些优势

哈喽呀&#xff0c;大家好呀&#xff0c;淼淼又来和大家见面啦&#xff0c;在当今数字化时代&#xff0c;随着云计算和互联网技术的飞速发展&#xff0c;服务器管理成为了许多企业和个人开发者不可或缺的一部分。然而&#xff0c;传统服务器管理方式的复杂性和技术门槛往往令初…...

Mybatis中BaseEntity作用

新建各种对象的时候&#xff0c;一般来说&#xff0c;有几个属性是所有对象共有的&#xff0c;比如说id,is_del&#xff0c;is_enable这些&#xff0c;然后设置一个基础对象&#xff0c;以后新建所有对象的时候都继承它&#xff0c;就省的每次都要写这些共有的属性了...

IDEA2023中使用run Dashboard面板?实现批量运行微服务

1、直接点击Add service--->Run Configuration Type---->Spring Boot 2、这样就出现了run Dashboard面板&#xff0c;可同时运行多个工程模块&#xff0c;shift选中所有启动类组命名&#xff08;Group Configurations&#xff09; 3、启动所有的项目...

分数受限,鱼和熊掌如何兼得?专业or学校,这样选最明智!

文章目录 引言一、专业解析二、名校效应分析三、好专业和好学校的权衡结论个人建议 引言 24年高考帷幕落下&#xff0c;一场新的思考与选择悄然来临。对于每一位高考考生&#xff0c;学校和专业都是开启大学新生活的两个前置必选项。但有时候“鱼与熊掌不可兼得”&#xff0c;…...

CentOS 8.5 - 配置ssh的免密登录

文章目录 生成ssh密钥公钥内容放入服务器 生成ssh密钥 在本地主机安装 ssh工具&#xff0c;并生成公钥、私钥。 # 命令行输入 ssh-keygen -r rsa# 会在当前用户的家目录下生成一个.ssh目录公钥内容放入服务器 将上一步生成的id_rsa.pub公钥的内容复制到远程服务器 # 编辑文…...

反转链表(java精简版)

反转一个单向链表。 public class ReversingLinkedList {static class Node {int val;Node next;public Node(int val) {this.val val;}public boolean hasNext() {return next ! null;}}public static void main(String[] args) {//构造Node head null;Node shift null;for…...

非模板网站/seo工具网站

一、硬核! 30张图解HTTP常见面试题 在面试过程中。HTTP被提问的概率还是比较高的。小编我授集了5大类HTTP面试常问的题目&#xff0c;同时这5大类题跟HTTP的发展和演变关联性是比较大的&#xff0c;通过问答图解的形式由浅入深的方式帮助大家进一步的学习和理解 HTTP . HTTP基…...

常州公司建站模板/搜索引擎优化指的是

Eclipse基金会建议创建一个名为Eclipse Tempest的开源项目&#xff0c;以构建用于开发&#xff0c;测试和调试Kubernetes容器编排平台的应用程序的工具 。 这些工具还将帮助开发人员将现有应用程序迁移到Docker和Kubernetes。 借助Tempest&#xff0c;Eclipse希望提供用于构建…...

大连 网站制作/营销推广计划

原文博客&#xff1a;Doi技术团队 链接地址&#xff1a;https://blog.doiduoyi.com/authors/1584446358138 初心&#xff1a;记录优秀的Doi技术团队学习经历 前言 我们在第五章学习了循环神经网络&#xff0c;在第五章中我们使用循环神经网络实现了一个文本分类的模型&#xf…...

做网站友情链接都写什么/中国十大教育培训机构有哪些

Java 语言的Calendar(日历),Date(日期), 和DateFormat(日期格式)组成了Java标准的一个基本但是非常重要的部分. 日期是商业逻辑计算一个关键的部分. 所有的开发者都应该能够计算未来的日期, 定制日期的显示格式, 并将文本数据解析成日期对象. 我们写了两篇文章, 这是第一篇, 我…...

青岛网站开发建设/拼多多商品关键词搜索排名

栈上分配内存和回收都是自动的&#xff0c;不用程序员来处理 堆上分配内存有系列的函数或操作符 如c的 malloc vs free c的 new vs delete 这些内存的分配和释放由程序员来负责 引用的长篇大论开始了&#xff1a; 在C中&#xff0c;内存分成5个区&#xff0c;他们分别是堆、栈、…...

网站 robots.txt/设计案例网

DB2数据库服务器 v8(Linux)在更改机器名后数据库服务异常&#xff0c;症状是当使用db2 list db directory命令或者其他命令的时候提示错误信息如下&#xff1a;SQL6031N 在 db2nodes.cfg 文件的行号"1" 上出错。原因码为"10"。解决的办法: 打开DB2实例所有…...