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

一文详解 Linux下的开源打印系统CUPS(Common UNIX Printing System)

文章目录

  • 前言
  • 一、CUPS 简介
  • 二、CUPS 常用指令解析
    • 2.1 安装 CUPS
    • 2.2 启动/重启服务
    • 2.3 添加打印机(核心操作)
    • 2.4 设置默认打印机
    • 2.5 打印文件
    • 2.6 查看打印任务
    • 2.7 取消打印任务
    • 2.8 查看、移除已添加的打印机
  • 三、调试与常见问题
    • 3.1 日志查看
    • 3.2 驱动问题
    • 3.3 权限问题
  • 四、注意事项


前言

本文基于Orange Pi CM4介绍了Linux下的开源打印系统CUPS(Common UNIX Printing System),文章内容涵盖CUPS的核心功能与常用操作指令解析,助力快速实现Linux系统打印功能的开发。


一、CUPS 简介

CUPS(Common UNIX Printing System)是 Linux/UNIX 系统下的开源打印系统。其通过IPP协议实现跨平台的打印任务管理,提供了队列调度、驱动兼容及多设备并行控制的功能。开发者可通过命令行操作或者Web界面快速配置打印机、监控任务状态并支持PDF/图像等格式解析,大大简化了打印功能的集成流程。

核心特性:

  • 支持本地和网络打印机(USB/Socket)
  • 提供 Web 管理界面(端口 631)
  • 兼容多种打印协议(IPP、Socket、USB)
  • 支持 PDF/PostScript/图像等格式转换
  • 提供 API 供开发者集成

CUPS 架构:

  • Scheduler(cupsd):核心守护进程,管理打印队列和任务分发。
  • Filters:格式转换模块(如 PDF 转 PostScript)。
  • Backends:与物理打印机通信的驱动接口。

二、CUPS 常用指令解析

2.1 安装 CUPS

sudo apt update
sudo apt install cups

2.2 启动/重启服务

sudo systemctl start cups    # 启动
sudo systemctl restart cups  # 重启

2.3 添加打印机(核心操作)

(1) 命令行添加(推荐)

基本语法:

sudo lpadmin -p [打印机名称] -v [设备URI] -m [驱动] -E

输出示例:

sudo lpadmin -p HP_LaserJet-v "ipp://192.168.1.100/ipp/print" -m everywhere -E

参数说明:

  • -p:指定打印机名称(自定义打印机名称,如 HP_LaserJet,建议用英文/数字,避免空格)。
  • -v:打印机设备地址(URI),取决于连接方式(如WiFi/USB/网络等)请看下文。
  • -m:指定打印机的驱动(PPD 文件)(或使用 -m everywhere 自动选择 IPP Everywhere 通用驱动)。
  • -E: 启用打印机。

设备 URI 是打印机的物理或网络地址,具体的格式取决于连接协议:

连接类型URI 格式示例适用场景
IPP 协议ipp://<IP地址>/ipp/printipp://192.168.1.100/ipp/print支持 IPP 的现代网络打印机
Socketsocket://<IP地址>:<端口>socket://192.168.1.100:9100传统网络打印机(如 HP JetDirect)
USBusb://<制造商>/<型号>?serial=XXXusb://HP/Deskjet-2130?serial=1234直接连接的 USB 打印机
LPDlpd://<IP地址>/<队列名>lpd://192.168.1.100/LPT1支持 LPD 协议的旧打印机

驱动选择:

驱动类型参数示例说明
通用驱动-m everywhere适用于大多数打印机,支持基础功能(推荐优先尝试)
厂商专用驱动-m hp-laserjet.ppd需提前安装驱动包(如 printer-driver-hpcups)
自定义 PPD 文件-m /path/to/driver.ppd手动指定驱动文件路径(需提前下载或生成)

(2) Web界面添加

你可以通过浏览器访问CUPS的Web管理界面,在CUPS配置页面将打印机添加到系统中:

  • 打开浏览器,输入 http://localhost:631 访问CUPS管理界面。
  • 选择 Administration。
  • 选择 Add Printer,在系统会显示网络中可用的打印机。
  • 选择你的打印机(根据打印机名称,如CanonCP910)。
  • 输入打印机的IP地址(192.168.176.236)并选择协议。通常选择 IPP 或 LPD。
  • 选择对应的打印机型号,或者手动下载并安装Canon的驱动程序。

2.4 设置默认打印机

CUPS提供了两种设置默认打印机的方法,分别是用户级别的 lpoptions 和系统级别的 lpadmin。

(1) lpoptions -d(用户级默认打印机)

基本语法:

lpoptions -d <打印机名称>
  • 功能:用于查看或设置用户级别的打印选项,包括默认打印机、纸张大小、打印质量等。
  • 用户级配置:设置保存在当前用户的 ~/.cups/lpoptions 文件中,仅对当前用户生效。
  • 无需管理员权限:普通用户可以直接使用,无需 sudo。

(2) lpadmin -d(系统级默认打印机)

基本语法:

sudo lpadmin -d <打印机名称>
  • 作用范围:设置系统全局默认打印机(影响所有未设置用户级默认的用户)。
  • 权限要求:需要管理员权限,需使用 sudo。

2.5 打印文件

基本语法:

lp [选项] <文件路径>

常用选项:

选项作用
-d <打印机名称>指定目标打印机(覆盖默认打印机)
-n <份数>设置打印份数(例如 -n 2)
-o landscape横向打印
-o media=A4指定纸张大小(如 A4)
-o fit-to-page自动缩放内容适应纸张

2.6 查看打印任务

(1) 列出所有打印队列中的任务:

lpstat -o

输出示例:

root@orangepicm4:~/jeff/orthocone-qt/build# lpstat -o
HPB0227A57280A-71       root            583680   Tue 29 Apr 2025 08:22:21 AM UTC
HPB0227A57280A-72       root            601088   Tue 29 Apr 2025 08:22:34 AM UTC
root@orangepicm4:~/jeff/orthocone-qt/build#

(2) 查看特定打印机的任务:

lpstat -o -P <打印机名称>

(3) 查看更详细的任务信息:

lpq -a

2.7 取消打印任务

(1) 取消单个任务:

cancel <任务ID>

输出示例:

root@orangepicm4:~/jeff/orthocone-qt/build# lpstat -o
HPB0227A57280A-77       root            601088   Tue 29 Apr 2025 08:28:49 AM UTC
root@orangepicm4:~/jeff/orthocone-qt/build# cancel HPB0227A57280A-77

(2) 取消所有任务(需管理员权限):

sudo cancel -a

(3) 取消某用户的所有任务:

cancel -u <用户名>

2.8 查看、移除已添加的打印机

(1) 查看当前已添加的打印机:

lpstat -p

输出示例:

root@orangepicm4:~/jeff/orthocone-qt/build# lpstat -p
printer CP9101c8df3 is idle.  enabled since Tue 29 Apr 2025 02:34:41 AM UTC
printer HPB0227A57280A is idle.  enabled since Tue 29 Apr 2025 08:28:59 AM UTC

(2) 移除指定打印机:

sudo lpadmin -x PrinterName

输出示例:

#查看当前系统所有的打印机
root@orangepicm4:~/jeff/orthocone-qt/build# lpstat -p
printer CP9101c8df3 is idle.  enabled since Tue 29 Apr 2025 02:34:41 AM UTC
printer HPB0227A57280A is idle.  enabled since Tue 29 Apr 2025 08:28:59 AM UTC
#移除指定打印机
root@orangepicm4:~/jeff/orthocone-qt/build# lpadmin -x CP9101c8df3
root@orangepicm4:~/jeff/orthocone-qt/build# lpstat -p
printer HPB0227A57280A is idle.  enabled since Tue 29 Apr 2025 08:28:59 AM UTC
root@orangepicm4:~/jeff/orthocone-qt/build# lpadmin -x HPB0227A57280A
root@orangepicm4:~/jeff/orthocone-qt/build# lpstat -p
lpstat: No destinations added.
root@orangepicm4:~/jeff/orthocone-qt/build#

(3) 打印机搜索(扩展):

在 Linux 系统中,命令 avahi-browse -rt _ipp._tcp 用于通过零配置网络(Zeroconf/mDNS) 发现并列出局域网内所有支持 IPP(Internet Printing Protocol) 协议的打印机或其他打印服务,我们可以通过此命令来搜索网络中所有支持IPP协议的打印机。

命令/参数作用
avahi-browseAvahi 工具的命令,用于在网络中浏览和发现服务(基于 mDNS/DNS-SD 协议)。
-r解析详细信息(Resolve),显示服务的完整配置(如 IP、端口等)。
-t单次扫描并退出(Terminate),不持续监听,仅执行一次扫描。
_ipp._tcp指定目标服务类型为 IPP 协议(用于网络打印)。

输出示例:

root@orangepicm4:~/jeff/orthocone-qt/build# avahi-browse -rt _ipp._tcp
+  wlan0 IPv4 CanonCP910                                    Internet Printer     local
+  wlan0 IPv4 HPB0227A57280A (HP Laser MFP 131 133 135-138) Internet Printer     local
=  wlan0 IPv4 HPB0227A57280A (HP Laser MFP 131 133 135-138) Internet Printer     localhostname = [HPB0227A57280A.local]address = [192.168.8.124]port = [631]txt = ["mopria-certified=2.0" "Staple=F" "Sort=F" "Punch=0" "PaperCustom=T" "Duplex=F" "Copies=T" "Color=F" "Collate=F" "Bind=F" "URF=CP255,FN3,IFU0,IS1-2-19,MT1-2-3-4,OB10,PQ4,RS300,V1.4,W8" "PaperMax=legal-A4" "Scan=T" "Fax=F" "kind=document,envelope,label" "print_wfds=T" "UUID=16a65700-007c-1000-bb49-b0227a57280a" "MDL=HP Laser MFP 136w" "MFG=HP" "usb_CMD=MFG:HP;CMD:SPL,URF,FWV,PIC,RDS,AMPV,PWGRaster,EXT;PRN:4ZB86A;MDL:HP Laser MFP 131 133 135-138;CLS:PRINTER;CID:HPLJPCLMSMV1;MODE:SCN,SPL3,R000105;" "usb_MDL=HP Laser MFP 136w" "usb_MFG=HP" "adminurl=http://HPB0227A57280A.local./sws/index.html?link=/sws/app/settings/network/AirPrint/AirPrint.html" "pdl=application/octet-stream,application/x-QPDL,image/urf,application/PCLm" "product=(HP Laser MFP 136w)" "priority=51" "qtotal=1" "rp=ipp/print" "ty=HP Laser MFP 131 133 135-138" "note=" "txtvers=1"]
=  wlan0 IPv4 CanonCP910                                    Internet Printer     localhostname = [CP9101c8df3.local]address = [192.168.8.177]port = [631]txt = ["note=" "kind=photo" "URF=W8,SRGB24,V1.3,RS300,IS7,MT11,PQ4,OB9,IFU0,OFU0,CP99" "Staple=F" "Sort=F" "Scan=F" "Punch=F" "PaperMax=<legal-A4" "PaperCustom=T" "Fax=F" "Duplex=F" "Copies=T" "Color=T" "Collate=F" "Bind=F" "TBCP=F" "Binary=F" "Transparent=F" "UUID=4d701b50-0439-4af1-a33d-d8492f1c8df3" "usb_CMD=URF" "usb_MDL=CP910_ipp" "usb_MFG=Canon" "adminurl=http://CP9101c8df3.local:8008/index.html" "pdl=image/urf,image/jpeg,application/octet-stream" "product=(Canon CP910_ipp)" "ty=Canon CP910_ipp" "priority=50" "qtotal=1" "rp=ipp/print" "txtvers=1"]
root@orangepicm4:~/jeff/orthocone-qt/build#

三、调试与常见问题

3.1 日志查看

tail -f /var/log/cups/error_log  # 实时监控错误日志

3.2 驱动问题

若打印机未识别,尝试安装 printer-driver-* 软件包:

sudo apt install printer-driver-gutenprint

3.3 权限问题

确保用户属于 lpadmin 组:

sudo usermod -aG lpadmin $USER

四、注意事项

  • 网络打印机需开放端口:确保防火墙允许 631(IPP)或 9100(Socket)。
  • ARM 架构兼容性:部分厂商驱动可能不支持 aarch64,优先使用通用驱动。

相关文章:

一文详解 Linux下的开源打印系统CUPS(Common UNIX Printing System)

文章目录 前言一、CUPS 简介二、CUPS 常用指令解析2.1 安装 CUPS2.2 启动/重启服务2.3 添加打印机&#xff08;核心操作&#xff09;2.4 设置默认打印机2.5 打印文件2.6 查看打印任务2.7 取消打印任务2.8 查看、移除已添加的打印机 三、调试与常见问题3.1 日志查看3.2 驱动问题…...

uniapp打包apk详细教程

目录 1.打apk包前提条件 2.获取uni-app标识 3.进入dcloud开发者后台 4.开始打包 1.打apk包前提条件 1.在HBuilderX.exe软化中&#xff0c;登录自己的账号 2.在dcloud官网&#xff0c;同样登录自己的账号。没有可以免费注册。 2.获取uni-app标识 获取方法&#xff1a;点…...

C++初阶-string类2

目录 1.迭代器 1.1普通迭代器的使用 1.2string::begin 1.3string::end 1.4const迭代器的使用 1.5泛型迭代器和const反向迭代器 1.6string::rbegin 1.6string::rend 1.7string::cbegin、string::cend、string::crbegin、string::crend 与begin/end、rbegin/rend的区别 …...

Qt QComboBox 下拉复选多选(multicombobox)

Qt QComboBox 下拉复选多选&#xff08;multicombobox&#xff09;&#xff0c;备忘&#xff0c;待更多测试 【免费】QtQComboBox下拉复选多选&#xff08;multicombobox&#xff09;资源-CSDN文库...

逻辑回归之参数选择:从理论到实践

在机器学习的广阔领域中&#xff0c;逻辑回归作为一种经典的有监督学习算法&#xff0c;常用于解决分类问题。它以其简单易懂的原理和高效的计算性能&#xff0c;在实际应用中备受青睐。然而&#xff0c;要充分发挥逻辑回归的优势&#xff0c;参数选择是关键环节。本文将结合信…...

10、属性和数据处理---c++17

一、[[fallthrought]] 用途&#xff1a;在 switch 语句中标记某个分支 (case) 故意不写 break&#xff0c;明确告知编译器“执行穿透”是有意为之。 仅在需要向下穿透时使用&#xff0c;且应添加注释说明原因 #include<cstdio> #include<iostream> using namesp…...

conda管理python环境

安装conda 使用anaconda官网安装地址&#xff1a;https://www.anaconda.com/download/success 配置镜像环境 conda config --add channels Index of /anaconda/pkgs/main/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror conda config --add channels Index of /an…...

【Python学习路线】零基础到项目实战系统

目录 &#x1f31f; 前言技术背景与价值当前技术痛点解决方案概述目标读者说明 &#x1f9e0; 一、技术原理剖析核心概念图解核心作用讲解关键技术模块说明技术选型对比 &#x1f4bb; 二、实战演示环境配置要求核心代码实现运行结果验证 ⚡ 三、性能对比测试方法论量化数据对比…...

C/C++核心机制深度解析:指针、结构体与动态内存管理(面试精要)

C/C核心机制深度解析&#xff1a;指针、结构体与动态内存管理&#xff08;面试精要&#xff09; 引言 在系统级编程领域&#xff0c;C/C语言凭借对硬件的直接操作能力和高效的内存管理机制&#xff0c;长期占据主导地位。面试中&#xff0c;指针、结构体和动态内存管理作为三…...

宇树科技举办“人型机器人格斗大赛”

2025 年 5 月至 6 月&#xff0c;一场全球瞩目的科技盛宴 —— 全球首场 “人形机器人格斗大赛”&#xff0c;将由杭州宇树科技盛大举办。届时&#xff0c;观众将迎来机器人格斗领域前所未有的视觉震撼。 为打造最强参赛阵容&#xff0c;宇树科技技术团队在过去数周里&#xf…...

getattr 的作用

getattr 是 Python 内置的一个函数&#xff0c;用于“动态地”获取对象的属性。**它允许你在运行时通过属性名称&#xff08;字符串形式&#xff09;来访问对象的属性&#xff0c;而不用在代码中直接硬编码属性名。**下面详细介绍该方法的用法和注意事项&#xff1a; ────…...

腾讯云服务器性能提升全栈指南(2025版)

腾讯云服务器性能提升全栈指南&#xff08;2025版&#xff09; 一、硬件选型与资源优化 1. 实例规格精准匹配 腾讯云服务器提供计算型CVM、内存型MEM、大数据型Hadoop等12种实例类型。根据业务特性选择&#xff1a; • 高并发Web应用&#xff1a;推荐SA3实例&#xff0…...

Kotlin与Jetpack Compose的详细使用指南

Kotlin与Jetpack Compose的详细使用指南&#xff0c;综合最新技术实践和官方文档整理&#xff1a; 一、环境配置与基础架构 ‌项目创建‌ 在Android Studio中选择Empty Compose Activity模板&#xff0c;默认生成包含Composable预览的MainActivity2要求Kotlin版本≥1.8.0&…...

潇洒郎: 100% 成功搭建Docker私有镜像仓库并管理、删除镜像

1、Registry Web管理界面 2、拉取Registry-Web镜像 创建配置文件 tee /opt/zwx-registry/web-config.yml <<-EOF registry:url: http://172.28.73.90:8010/v2name: registryreadonly: falseauth:enabled: false EOF 拉取docker-registry-web镜像并绑定Registry仓库 …...

【Spring Boot 注解】@ConfigurationProperties

文章目录 ConfigurationProperties注解一、简介二、依赖引入三、基本用法四、主要特性五、激活方式六&#xff0c;优点七、与 Value 对比 ConfigurationProperties注解 一、简介 ConfigurationProperties 是 Spring Boot 提供的一个强大注解&#xff0c;用于将外部配置&#…...

阿里云服务迁移实战: 06-切换DNS

概述 按前面的步骤&#xff0c;所有服务迁移完毕之后&#xff0c;最后就剩下 DNS 解析修改了。 修改解析 在域名解析处&#xff0c;修改域名的解析地址即可。 如果 IP 已经过户到了新账号&#xff0c;则不需要修改解析。 何确保业务稳定 域名解析更换时&#xff0c;由于 D…...

Java实现归并排序算法

1. 归并排序原理图解 归并排序是一种分治算法&#xff0c;其核心思想是将数组分成两半&#xff0c;分别对这两半进行排序&#xff0c;然后将排序后的两半合并。以下是归并排序的步骤&#xff1a; 1. 分治&#xff1a; - 将数组分成两半。 - 递归地对每半部分进行归并排序。 2. …...

Vue 项目中运行 `npm run dev` 时发生的过程

步骤1&#xff1a;找到「任务说明书」(package.json) 当你输入 npm run dev&#xff0c;系统首先会去查项目的 「任务说明书」&#xff08;即 package.json 文件&#xff09;&#xff0c;看看 dev 这个任务具体要做什么。 示例代码&#xff08;package.json 片段&#xff09;…...

Python3(19)数据结构

在 Python 编程中&#xff0c;数据结构是组织和存储数据的重要方式&#xff0c;合理选择和使用数据结构能显著提升程序的效率和可读性。这篇博客通过丰富的代码示例深入学习 Python3 的数据结构知识&#xff0c;方便日后复习回顾。 一、列表&#xff08;List&#xff09; 1.1…...

macOS 安装了Docker Desktop版终端docker 命令没办法使用

macOS 安装了Docker Desktop版终端docker 命令没办法使用 1、检查Docker Desktop能否正常运行。 确保Docker Desktop能正常运行。 2、检查环境变量是否添加 1、添加环境变量 如果环境变量中没有包含Docker的路径&#xff0c;你可以手动添加。首先&#xff0c;找到Docker的…...

VR 汽车线束培训:探索高效学习新路径​

在汽车线束生产领域&#xff0c;VR 汽车线束培训对于新员工的成长至关重要&#xff0c;它是一个关键环节&#xff0c;直接影响着生产效率和产品质量。传统的培训方式&#xff0c;通常是新员工在老员工的指导下&#xff0c;通过实际操作来学习线束装配流程。这种方式不仅耗费大量…...

k8s术语之Deployment

Deployment为Pod和Replica Set(下一代Replication Controller)提供声明式更新 您只需要在Deployment中描述您想要的目标状态是什么&#xff0c;Deployment controller就会帮您将Pod和ReplicaSet的实际状态改变到您的目标状态。您可以定义一个全新的Deployment Controller的职责…...

对js的Date二次封装,继承了原Date的所有方法,增加了自己扩展的方法,可以实现任意时间往前往后推算多少小时、多少天、多少周、多少月;

封装js时间工具 概述 该方法继承了 js 中 Date的所有方法&#xff1b;同时扩展了一部分自用方法&#xff1a; 1、任意时间 往前推多少小时&#xff0c;天&#xff0c;月&#xff0c;周&#xff1b;参数1、2必填&#xff0c;参数3可选beforeDate(num,formatter,dateVal); befo…...

17、商品管理:魔药商店运营——React 19 CRUD实现

一、魔药商店的炼金基石 1. 魔药配方契约&#xff08;数据模型设计&#xff09; // 预言池契约&#xff08;Supabase Schema&#xff09; interface Potion { id: uuid, name: string, effect: healing | transformation | attack, stock: number, moonSensitive: boo…...

2025-04-30 AIGC-如何做短片视频

摘要: 2025-04-30 AIGC-如何做短片视频 如何做短片视频: 一、画图修图 1.保存视频&#xff08;无水保存&#xff09; 2.文案提取&#xff08;提取文案&#xff09; 3. DeepSeek(提示词&#xff09; 4.小梦Ai&#xff08;图片视频&#xff09; 5.修图Ai 6.扩图Ai 7.养生…...

【自然语言处理与大模型】如何获取特定领域的微调数据集?

在特定领域中&#xff0c;数据集通常由提出需求的一方提供。然而&#xff0c;在某些情况下&#xff0c;如果他们未能提供所需的数据&#xff0c;或者你正在独立开展一个项目&#xff0c;并且需要相应的数据来推进工作&#xff0c;这时你应该怎么办呢&#xff1f;本文提供一种思…...

算法导论第6章思考题

6.3-2 func(A) 1 A.heap-sizeA.len 2 \quad for i ⌊ A . l e n 2 ⌋ \lfloor {A.len\over2}\rfloor ⌊2A.len​⌋ downto 1 3 \qquad MAX-HEAPIFY(A,i) 对于第2行的循环控制变量i来说&#xff0c;为啥要求它是从 ⌊ A . l e n 2 ⌋ \lfloor {A.len\over2}\rfloor ⌊2A.len​⌋…...

论文阅读:2024 ACM SIGSAC Membership inference attacks against in-context learning

总目录 大模型安全相关研究&#xff1a;https://blog.csdn.net/WhiffeYF/article/details/142132328 Membership inference attacks against in-context learning https://arxiv.org/pdf/2409.01380 https://www.doubao.com/chat/4030440311895554 速览 这篇论文主要研究了…...

读论文笔记-CoOp:对CLIP的handcrafted改进

读论文笔记-Learning to Prompt for Vision-Language Models Problems 现有基于prompt engineering的多模态模型在设计合适的prompt时有很大困难&#xff0c;从而设计了一种更简单的方法来制作prompt。 Motivations prompt engineering虽然促进了视觉表示的学习&#xff0c…...

国产化海光C86架构服务器安装windows实录

最近几年与红蓝关系急转直下&#xff0c;尤其是科技领域尤为突出。随之而来的就是软硬件的国产化大潮。由于行业的原因根据要求必须使用国产化服务器、国产化操作系统、国产化数据库、国产化中间件。虽然闭关锁国断开红蓝联系可以在一定程度激发国产化发展&#xff0c;但是不得…...

基于SpringBoot的旅游网站的设计与实现

资源详情&#xff1a; 私信我或点击链接获取&#xff1a; 基于SpringBoot的旅游网站的设计与实现资源-CSDN文库 摘要 随着科学技术的飞速发展&#xff0c;各行各业都在努力与现代先进技术接轨&#xff0c;通过科技手段提高自身的优势&#xff0c;旅游网站当然也不能排除在外…...

【Axure教程】增删改饼图

今天教大家制作增删改饼图的原型模版&#xff0c;该模版是用Axure原生元件制作的&#xff0c;所以不需要联网或者调用外部接口&#xff0c;使用也很方便&#xff0c;默认数据在中继器表格里填写&#xff0c;默认支持20个不同颜色的扇形&#xff0c;后续可根据实际需要自己增加扇…...

FastAPI系列12:使用JWT 登录认证和RBAC 权限控制

使用JWT 登录认证和RBAC 权限控制 1、身份认证&#xff08;Authentication&#xff09;与JWT身份认证&#xff08;Authentication&#xff09;的方式JWT&#xff08;JSON Web Token&#xff09;的实现原理 2、授权&#xff08;Authorization&#xff09;与RBAC授权&#xff08;…...

定时任务xxl-job国产化改造,适配磐维数据库(PostgreSQL)

前言 因公司要求系统需要全面国产化改造&#xff0c;其中也涉及到定时任务xxl-job的改造。 使用的xxl-job版本为&#xff1a;2.5.0 一、修改配置 1、修改pom.xml&#xff0c;引入postgresql组件 <dependency><groupId>org.postgresql</groupId><artif…...

2025华东杯ABC题赛题已出速拿

2025华东杯ABC题赛题已出速拿 A: B: C:...

PostgreSQL事务与并发清理

1.并发清理概述 清理过程为指定的表&#xff0c;或数据库中的所有表执行以下任务。 1. 移除死元组 移除每一页中的死元组&#xff0c;并对每一页内的活元组进行碎片整理。 移除指向死元组的索引元组。 2. 冻结旧的事务标识&#xff08;txid&#xff09; 如有必要&#xf…...

基于DeepSeek与HTML的可视化图表创新研究

一、研究背景 在当今数字化时代&#xff0c;数据呈指数级增长&#xff0c;广泛渗透于社会各个领域。无论是商业运营、科学研究&#xff0c;还是公共管理等方面&#xff0c;海量数据蕴含着丰富的潜在价值&#xff0c;成为驱动决策优化、推动业务发展、促进科学创新的关键要素。数…...

游戏引擎学习第250天:# 清理DEBUG GUID

设置阶段&#xff0c;重新开始清理调试层 今天&#xff0c;我们将继续进行之前未完成的任务&#xff0c;主要是清理调试层的代码&#xff0c;并为其在游戏中使用做好准备。昨天我原本准备清理一些代码&#xff0c;但没能完成&#xff0c;所以今天我们将从那里开始&#xff0c;…...

删除k8s某命名空间,一直卡住了怎么办?

以 kubectl delete ns cert-manager 命令卡住为例&#xff0c;并且命名空间一直处于 Terminating 状态&#xff0c;说明 Kubernetes 无法完成删除操作&#xff0c;通常是因为 Finalizers 阻塞或某些资源无法正常清理。 解决方法 1. 检查命名空间状态 kubectl get ns cert-man…...

聊一聊接口自动化测试断言处理策略

目录 一、断言设计原则 1.1精准性 1.2可维护性 1.3容错性 二、常见断言类型及实现 2.1基础验证 2.2响应体验证 2.3业务逻辑验证 2.4异常场景验证 2.5数据库断言 三、断言策略 3.1 精准断言 vs 模糊断言 3.2关键字段优先 3.3数据动态处理 四、多断言处理 4.1单用…...

C# 实现列式存储数据

C#实现列式存储数据指南 一、列式存储概述 列式存储(Columnar Storage)是一种数据存储方式&#xff0c;它将数据按列而非行组织。与传统的行式存储相比&#xff0c;列式存储在以下场景具有优势&#xff1a; ​​分析型查询​​&#xff1a;聚合计算、分组统计等操作效率更高…...

vscode中设置eslint保存时自动格式化未生效

vscode中设置eslint保存时自动格式化未生效 设置一 设置二 上述设置二未勾选导致未生效...

力扣HOT100——207.课程表

你这个学期必须选修 numCourses 门课程&#xff0c;记为 0 到 numCourses - 1 。 在选修某些课程之前需要一些先修课程。 先修课程按数组 prerequisites 给出&#xff0c;其中 prerequisites[i] [ai, bi] &#xff0c;表示如果要学习课程 ai 则 必须 先学习课程 bi 。 例如…...

开源协议全解析:类型、选择与法律风险规避指南

[TOC] 在当今开源软件主导的技术生态中&#xff0c;开源协议&#xff08;Open Source License&#xff09;是决定项目能否被商业使用、二次开发的关键法律文件。据统计&#xff0c;GitHub上超过70%的项目使用某种形式的开源协议&#xff0c;但其中近30%存在协议兼容性问题。本…...

Android学习总结之自定义view设计模式理解

面试题 1&#xff1a;请举例说明自定义 View 中模板方法模式的应用 考点分析 此问题主要考查对模板方法模式的理解&#xff0c;以及该模式在 Android 自定义 View 生命周期方法里的实际运用。 回答内容 模板方法模式定义了一个操作的算法骨架&#xff0c;把一些步骤的实现延…...

Kubernetes Ingress 深度解析

Kubernetes Ingress 深度解析 一、Ingress 基本概念 Ingress 是 Kubernetes 中管理外部访问集群服务的 API 对象&#xff0c;提供 HTTP/HTTPS 路由规则&#xff0c;实现以下功能&#xff1a; 基于域名/路径的路由TLS/SSL 终止负载均衡流量控制 与传统服务的区别 特性Ingre…...

rk3568安全启动功能实践

本文主要讲述笔者在rk3568芯片上开发安全启动功能实践的流程。其中主要参考瑞芯微官方文档《Rockchip_Developer_Guide_Secure_Boot_for_UBoot_Next_Dev_CN.pdf》。文档中描述逻辑不是很清晰而且和当前瑞芯微的sdk中安全启动的流程匹配度不高。本文就不再对瑞芯微官方文档的内容…...

transformer-实现解码器Decoder

Decoder 论文地址 https://arxiv.org/pdf/1706.03762 Decoder结构介绍 Transformer Decoder是Transformer模型的核心生成组件&#xff0c;负责基于编码器输出和已生成内容预测后续token。通过堆叠多层结构相同的解码层&#xff08;Decoder Layer&#xff09;&#xff0c;每层包…...

iOS RunLoop 深入解析

本文深入探讨 iOS 中 RunLoop 的实现原理、工作机制以及实际应用。通过源码分析和实际案例&#xff0c;帮助读者全面理解 RunLoop 在 iOS 系统中的重要作用。 一、RunLoop 基础概念 1. RunLoop 的定义与作用 RunLoop 是 iOS 系统中用于处理事件和消息的循环机制。它负责管理线…...

软考中级-软件设计师 数据结构(手写笔记)

第一章&#xff1a;基础 基础知识 五大特性 第二章&#xff1a;线性表 第三章&#xff1a;栈和队列 队列 广义表 第四章&#xff1a;树和二叉树 基础知识 树转二叉树和二叉排序树 哈夫曼树 线索二叉树和平衡二叉树 第五章&#xff1a;图 基础知识和邻接矩阵和邻接表 图的遍…...