GCC和GDB基础知识
1 GCC和G++
一套开源的编译器,支持 C、C++、Fortran 等语言。它负责将人类编写的源代码(如 .c 文件)翻译成计算机能执行的二进制文件(如 .exe)。
核心作用:
- 预处理:处理宏、头文件展开等。
- 编译:将代码转为汇编语言。
- 汇编:将汇编转为机器码(.o 目标文件)。
- 链接:将多个目标文件和库合并成最终可执行文件。
1.1 编译单个源文件
命令 :gcc hello.c -o hello
在这个示例中,gcc 是编译器命令,hello.c 是要编译的源文件,-o 选项用于指定输出的可执行文件的名称,hello 就是最终生成的可执行文件。
1.2 编译多个源文件
语法:gcc [选项] 源文件1 源文件2 ... -o 可执行文件
示例: gcc main.c utils.c -o program
note:gcc 只有一个入口就是int main,也就是说 utils.c 是作为库文件
这样,GCC 会将 main.c 和 utils.c 一起编译,并链接成一个可执行文件 program
1.3 指定头文件搜索路径
语法:gcc [选项] -I 头文件路径 源文件 -o 可执行文件
示例:如果你的头文件存放在 ./include 目录下,编译 main.c 时可以这样指定头文件搜索路径。:gcc -I ./include main.c -o program
1.4 编译时添加库文件()
语法:gcc [选项] 源文件 -L 库文件路径 -l 库名 -o 可执行文件
示例:假设你要使用一个名为 mylib 的库,该库文件存放在 ./lib 目录下,编译 main.c 时可以这样添加库文件。:gcc main.c -L ./lib -l mylib -o program
疑问:头文件和库文件分别的作用是啥:
- 头文件在编译阶段::头文件主要包含函数声明、宏定义、类型定义等信息,在编译源文件时,编译器需要这些信息来理解代码中使用的函数和类型。例如,当你在源文件中调用一个函数时,编译器需要知道这个函数的参数类型和返回值类型,这些信息通常在头文件中提供。编译器会将源文件和头文件进行预处理,生成预处理后的。
- 库文件在链接时起到关键作用。链接器的主要任务是将多个目标文件(由源文件编译生成)和库文件组合成一个可执行文件。库文件中包含了已经编译好的代码,链接器会在库文件中查找源文件中调用的函数的实际定义,并将这些定义插入到最终的可执行文件中。
疑问:什么静态库和动态库
- 静态库(Static Library)是一种在编译时被完整地复制到可执行文件中的库文件。它包含了已经编译好的代码和数据,通常以 .a(在 Unix/Linux 系统)或 .lib(在 Windows 系统)为文件扩展名。生成静态库
ar rcs libutils.a utils.o
- 动态库(Dynamic Library)也称为共享库(Shared Library),是一种在运行时被动态加载到内存中的库文件。它通常以 .so(在 Unix/Linux 系统)或 .dll(在 Windows 系统)为文件扩展名。生成动态库
gcc -shared -fPIC utils.o -o libutils.so
- note:但是在链接库的时候 都是一样的操作
gcc main.c -L. -lutils -o program
-l 选项后面的库名可以同时代表静态库和动态库,编译器会根据搜索路径和链接策略来选择具体的库文件进行链接。
1.5 生成调试信息
语法:gcc [选项] -g 源文件 -o 可执行文件
示例:编译 hello.c 并生成带有调试信息的可执行文件 hello
gcc -g hello.c -o hello
-g 方便使用调试工具(如 GDB)进行调试
1.6 优化编译
定义:优化编译是指在编译过程中,编译器对源代码进行一系列分析和转换,以生成执行效率更高、占用资源更少的目标代码的过程
语法:
# 不进行优化
gcc -O0 main.c -o program_O0
# 基本优化
gcc -O1 main.c -o program_O1
# 中等优化
gcc -O2 main.c -o program_O2
# 高级优化
gcc -O3 main.c -o program_O3
# 优化代码大小
gcc -Os main.c -o program_Os
优点
- 提高性能:优化编译可以显著提高程序的执行速度,减少响应时间,提升用户体验。
- 节省资源:优化后的代码通常占用更少的内存和磁盘空间,降低了系统资源的消耗。
- 增强可移植性:编译器的优化操作可以根据不同的目标机器进行调整,使代码在不同的平台上都能获得较好的性能。
缺点
- 增加编译时间:优化级别越高,编译器需要进行的分析和转换操作就越多,编译时间也就越长。
- 调试困难:优化后的代码可能与源代码的结构差异较大,增加了调试的难度。在调试阶段,通常建议使用 -O0 级别进行编译。
- 可能引入错误:在某些情况下,优化操作可能会引入一些难以察觉的错误,特别是在处理复杂的代码逻辑时。因此,在进行优化编译后,需要进行充分的测试。
1.7 其他常见的命令
-c
通常,一个完整的编译过程包含预处理、编译、汇编和链接这几个步骤。当使用 gcc -c 时,GCC 会完成从源文件到目标文件的转换,也就是完成预处理、编译和汇编这三个步骤,最终生成后缀为 .o 的目标文件,但不会执行链接步骤,不会把多个目标文件和库文件合并成可执行文件。
示例:假设项目中有 main.c 和 utils.c 两个源文件,可按如下方式分别编译
gcc -c main.c -o main.o
gcc -c utils.c -o utils.o
上述代码分别将 main.c 和 utils.c 编译成 main.o 和 utils.o 目标文件。之后,若只修改了 utils.c,就只需重新编译 utils.c 即可。
gcc main.o utils.o -o program
运行即可
wall
Wall 选项的主要作用是开启编译器的大部分常见警告信息。当你使用该选项编译代码时,GCC 会检查代码里可能存在的问题与潜在错误,一旦发现就会输出相应的警告信息,这有助于你在编译阶段就发现代码中的一些小错误或者不规范的地方,进而提升代码的质量与健壮性。
2 GDB(GNU Debugge)
GDB是什么:一个调试器,用于在程序运行时检查其内部状态(如变量值、内存、函数调用栈等),帮助定位代码中的逻辑错误(Bug)。
调试(Debugging) 是软件开发过程中发现、定位和修复程序错误(Bug)的核心环节。简单来说,调试就像“给程序看病”:当程序运行结果不符合预期、崩溃或出现异常时,开发者需要通过调试工具和方法,一步步找到问题的根源并修复它。
核心功能:
- 设置断点(break)、逐行执行(next/step)。
- 查看变量值(print)、监控内存(x)。
- 分析程序崩溃时的错误原因(如段错误)。
2.1常用命令
命令格式 | 功能描述 | 知识拓展 |
---|---|---|
l(list) 行号/函数名 | 按照指定的行号或者函数名来显示对应代码,每次显示的代码量为 10 行。 | list 命令是调试时查看源码的重要工具。若不指定行号或函数名,默认会从上次显示的位置继续显示后续代码。可使用 list - 查看上一个 10 行代码。若源码文件较大,可结合 list 行号范围,如 list 1,20 查看第 1 行到第 20 行的代码。 |
r(run) | 若程序中没有设置断点,就直接启动程序运行;若存在断点,则从第一个断点处开始程序的运行,类似于在其他开发环境中按下 F5 键。 | 在使用 run 命令前,若程序有命令行参数,可使用 set args 命令设置参数,如 set args 1 2 3 。若程序运行崩溃,可使用 run 重新启动程序继续调试。 |
b(breakpoint) + 行号 | 在当前文件指定的行号位置设置一个断点,当程序执行到这一行时会暂停运行。 | 除了在当前文件行号打断点,还能指定文件和行号,如 break file.c:10 。也可基于条件设置断点,如 break 10 if x > 5 ,当变量 x 的值大于 5 时,程序才会在第 10 行暂停。 |
b 源文件:函数名 | 在指定源文件里的目标函数的起始行添加一个断点,当程序调用该函数时会暂停。 | 若多个文件中有同名函数,指定源文件可精确设置断点。对于 C++ 中的成员函数,要使用完整的类名和作用域解析运算符,如 break MyClass::myFunction 。 |
b 源文件:行号 | 在指定源文件的特定行号处设置断点,方便对特定文件中的某一行代码进行调试。 | 若源文件不在当前工作目录,可使用完整路径指定源文件,如 break /home/user/project/file.c:20 。这在多文件项目调试时很实用。 |
info b | 查看所有已设置断点的详细信息,包括断点编号、位置、是否启用以及断点被命中的次数等。 | 该命令会显示断点编号、类型、位置、是否启用、命中次数等信息。可根据这些信息判断断点是否按预期工作,比如命中次数异常可能意味着代码逻辑有问题。 |
d(delete) + 当前要删除断点的编号 | 根据指定的断点编号,将对应的单个断点从断点列表中移除,不能使用行号来删除断点。 | 若要删除多个连续编号的断点,可使用范围删除,如 delete 2-5 。删除断点后,后续断点编号不会重新排序。 |
d + breakpoints | 一次性清除所有已经设置的断点,使程序在后续运行时不会因为任何断点而暂停。 | 当调试接近尾声,不再需要断点时,可使用此命令快速清除所有断点。使用前要确认是否真的不需要任何断点了。 |
disable b(breakpoints) | 让所有已设置的断点暂时失效,程序运行时会忽略这些断点,但断点信息依然保留。 | 禁用断点后,程序运行时不会在这些断点处暂停,但断点信息仍保留,可随时启用。这在临时跳过某些断点调试时很有用。 |
enable b(breakpoints) | 恢复所有已设置断点的功能,使程序在运行过程中遇到这些断点时能够正常暂停。 | 与禁用断点对应,在临时禁用断点后,可使用此命令恢复所有断点的功能。 |
disable b(breakpoint) + 编号 | 针对指定编号的单个断点,使其暂时失去作用,程序运行到该断点时不会暂停。 | 当只想临时跳过某个特定断点时,可使用此命令。禁用的断点不会影响其他断点的正常工作。 |
enable b(breakpoint) + 编号 | 激活指定编号的单个断点,让该断点恢复正常功能,程序运行到此处会暂停。 | 用于恢复之前被禁用的特定断点。可根据调试进度灵活启用和禁用断点。 |
enable breakpount | 此命令可能存在拼写错误,正确形式应为 enable breakpoint ,作用是使指定的单个断点生效。 | 使用时要准确指定断点编号,确保开启的是需要的断点。 |
n(next) | 按行执行程序代码,若遇到函数调用,会将函数作为一个整体执行,不进入函数内部,类似于在其他开发环境中按下 F10 键,常用于查找函数级别的错误。 | next 命令会执行下一行代码,若下一行是函数调用,会把函数当作一个整体执行,不会进入函数内部。这在不需要深入函数细节时可提高调试效率。 |
s(step) | 逐行执行程序代码,当遇到函数调用时,会进入函数内部继续逐行调试,类似于在其他开发环境中按下 F11 键。 | step 命令会逐行执行代码,遇到函数调用会进入函数内部,可详细查看函数内部的执行情况。但在调用库函数时,可能会进入库函数代码,可使用 next 跳过。 |
bt | 显示当前程序的函数调用栈信息,按照从栈顶到栈底的顺序展示函数的调用过程,帮助了解程序的执行路径。 | bt 命令会显示当前程序的调用栈,从栈顶到栈底依次显示函数调用顺序。可帮助定位程序崩溃时的错误位置,栈顶的函数通常是出错的位置。还可使用 bt full 显示更多变量信息。 |
set var | 在调试过程中动态修改程序中变量的值,方便测试不同变量取值下程序的运行情况。 | 可在调试过程中动态修改变量的值,如 set var x = 10 。这有助于测试不同变量值下程序的行为,也可用于修复临时错误,继续调试。 |
p(print) 变量名 | 打印指定变量的当前值,方便在调试时查看变量的状态。 | 除了基本变量,print 还可以用于打印数组、结构体等复杂数据类型。例如对于数组 int arr[5] ,可使用 print arr 查看数组内容;对于结构体 struct Person { char name[20]; int age; } p; ,可使用 print p 查看结构体信息。还能使用表达式,如 print x + 5 计算并打印表达式的值。 |
display 变量名 | 跟踪指定的变量(可以是变量、结构体等),在程序每次暂停时都会自动显示该变量的值。 | 可以同时设置多个 display 变量,每个变量会分配一个唯一的编号。使用 info display 可以查看所有跟踪变量的信息,包括编号、表达式和当前值。这对于观察变量在程序执行过程中的变化非常有用。 |
undisplay + 变量名编号 | 取消对先前通过 display 命令设置跟踪的指定编号变量的跟踪。 | 当不再需要跟踪某个变量时,使用该命令可以清理跟踪列表,避免显示过多不必要的信息。注意要准确输入变量编号,否则无法正确取消跟踪。 |
2.2 最常用指令(指令三剑客)
- until+ 行号:进行指定位置跳转,执行完区间代码
- finish :在一个函数内部,执行到当前函数返回,然后停下来等待命令
- c(continue) —— 从一个断点处,直接运行至下一个断点处。
不想献丑 转链接-详细讲解可以看这个
相关文章:
GCC和GDB基础知识
1 GCC和G 一套开源的编译器,支持 C、C、Fortran 等语言。它负责将人类编写的源代码(如 .c 文件)翻译成计算机能执行的二进制文件(如 .exe)。 核心作用: 预处理:处理宏…...
网络复习二(TCP【3】)
一、为什么TIME_WAIT等待的时间是2MSL? MSL:报文最大生存时间 我们要知道TCP报文是基于IP协议生存的,而在IP头中有一个TTL(经过路由跳数),当TTL为0使,数据报被丢失,同时发送ICMP报…...
【5G通信】通过RRC重配实现功率调整的可能性
在5G网络中,通过解析UE Capability Information消息中的RF Parameters字段实现终端发射功率的动态调整,需要结合协议规范、射频特性及网络控制策略。以下是技术实现流程及示例: 一、RF Parameters关键字段解析 根据3GPP TS 38.331和TS 38.10…...
UE 使用事件分发器设计程序
【双字精译】虚幻引擎中的设计模式:观察者模式——Ali Elzoheiry|游戏开发游戏编程模式游戏设计模式虚幻蓝图编程事件分发器UnrealEngineUE5_哔哩哔哩_bilibili 创建一个事件分发器,这里是放在死亡事件里 比如计算场景中的敌人数量,这个UI是…...
前端面试宝典---原型链
引言----感谢大佬的讲解 大佬链接 原型链示意图 原型链问题中需要记住一句话:一切变量和函数都可以并且只能通过__proto__去找它所在原型链上的属性与方法 原型链需要注意的点 看上图可以发现 函数(构造函数)也可以通过__proto__去找到原…...
ViT 模型讲解
文章目录 一、模型的诞生背景1.1 背景1.2 ViT 的提出(2020年) 二、模型架构2.1 patch2.2 模型结构2.2.1 数据 shape 变化2.2.2 代码示例2.2.3 模型结构图 2.3 关于空间信息 三、实验3.1 主要实验3.2 消融实验 四、先验问题4.1 归纳偏置4.2 先验or大数据&…...
【技术文章的标准结构与内容指南】
技术文章的标准结构与内容指南 技术文章是传递专业知识、分享实践经验的重要媒介。一篇高质量的技术文章不仅能够帮助读者解决问题,还能促进技术交流与创新。以下是技术文章通常包含的核心内容与结构指南。 1. 标题 一个好的技术文章标题应当: 简洁明…...
Mysql概述
一、数据库相关概念 1.数据库(Data Base ,简称DB)是长期存储在计算机中有组织、可管理、可共享的数据集合。 2.数据库管理系统(Database Management System,简称为 DBMS)是管理数据库的系统软件 3.MySQL数据库全称为MySQL数据库管理系统 3.SQL语言(S…...
系统设计模块之安全架构设计(身份认证与授权(OAuth2.0、JWT、RBAC/ABAC))
一、OAuth 2.0:开放授权框架 OAuth 2.0 是一种标准化的授权协议,允许第三方应用在用户授权下访问其资源,而无需直接暴露用户密码。其核心目标是 分离身份验证与授权,提升安全性与灵活性。 1. 核心概念与流程 角色划分ÿ…...
如何管理“灰色时间”导致的成本漏洞
明确时间记录机制、优化流程透明度、应用自动化工具、强化绩效考核机制、提高员工时间意识 来有效管理。其中,明确时间记录机制 是最关键的一步。通过统一的时间记录平台,例如Toggl Track、Clockify或企业级工时系统,不仅可以实时掌握员工工作…...
程序化广告行业(84/89):4A广告代理公司与行业资质解读
程序化广告行业(84/89):4A广告代理公司与行业资质解读 大家好!在探索程序化广告行业的道路上,每一次知识的分享都是我们共同进步的阶梯。一直以来,我都希望能和大家携手前行,深入了解这个充满机…...
MTK Android12-13 -Intent Filter Verification Service 停止运行
MTK Android12-13 -Intent Filter Verification Service 停止运行 问题修复 文章目录 参考资料解决方案-修改文件源码分析源码 StatementService配置加载config_appsNotReportingCrashesActivityManagerService -retrieveSettings 加载配置AppErrors-loadAppsNotReportingCrash…...
Sentinel源码—1.使用演示和简介二
大纲 1.Sentinel流量治理框架简介 2.Sentinel源码编译及Demo演示 3.Dashboard功能介绍 4.流控规则使用演示 5.熔断规则使用演示 6.热点规则使用演示 7.授权规则使用演示 8.系统规则使用演示 9.集群流控使用演示 5.熔断规则使用演示 (1)案例说明熔断和降级 (2)Sentin…...
基于Geotools的PostGIS原始操作之CQL过滤及按属性名称生成面属性时间-以湖北省地级市行政区划为例
目录 前言 背景与意义 技术方法概述 一、CQL查询实现 1、CQL查询原理 2、Geotools中的CQL实现 二、SLD编程式样式生成 1、获取唯一的分类值 2、生成不同颜色分类 3、集成生成SLD的Style文件 三、总结 前言 随着地理信息系统(GIS)技术的快速发展…...
Linux内核中struct net_protocol的early_demux字段解析
背景问题 在内核版本4.19.0-25的头文件中,struct net_protocol结构体的定义未显式包含early_demux字段。然而,在内核版本4.19的源代码中可以看到tcp_protocol实例化时却对该字段进行了赋值: static struct net_protocol tcp_protocol = {.early_demux = tcp_v4_earl…...
TLS协议四次握手原理详解,密钥套件采用DH密钥交换算法
目录 1.TLS协议握手概述 2.TLS协议握手具体步骤 2.1.TLS第一次握手 2.2.TLS第二次握手 2.3.TLS第三次握手 2.4.TLS第四次握手 3.DH密钥交换算法 1.TLS协议握手概述 第一步客户端会发起一个消息,携带了TLS的版本号,客户端随机数,密码套…...
React 更新state中的对象
更新 state 中的对象 state 中可以保存任意类型的 JavaScript 值,包括对象。但是,你不应该直接修改存放在 React state 中的对象。相反,当你想要更新一个对象时,你需要创建一个新的对象(或者将其拷贝一份)…...
祁连山国家公园shp格式数据
地理位置:祁连山国家公园位于中国西北部,横跨甘肃省与青海省交界处,主体处于青藏高原东北边缘。总面积约5.02万平方公里,是中国首批设立的10个国家公园之一。 设立背景 试点启动:2017年,祁连山国家公园体制…...
电梯设备与电源滤波器:现代建筑中的安全守护者与电力净化师
在现代都市的钢铁森林中,电梯作为垂直交通的动脉,承载着无数人的日常出行。与此同时,在电气系统的隐秘角落,电源滤波器则默默扮演着“电力净化师”的角色,保障着各类电子设备的稳定运行。电梯设备与电源滤波器…...
Qt样式表(窗口、按钮之类,有图片和代码详细注释)
Qt样式表 1、前言2、QWdiget窗口添加背景图片2.1使用Frame解决 3、主题1(黑色背景发光边框冷色调)3.1 QWidget3.2 QPushButton3.3QLineEdit3.4 QTextEdit 4、主题二(极简冰川蓝)4.1QWidget4.2 QLineEdit4.3QTextEdit4.4QPushButto…...
在Ubuntu下进行单片机开发是否需要关闭Secure Boot
1. Secure Boot的作用 功能:Secure Boot是UEFI的安全功能,旨在阻止未经验证的驱动或操作系统启动,防止恶意软件篡改引导过程。 影响范围:它主要限制的是操作系统启动阶段加载的内核级驱动(如显卡驱动、虚拟化模块&…...
【Python爬虫】简单案例介绍4
本文继续接着我的上一篇博客【Python爬虫】简单案例介绍3-CSDN博客 目录 3.4 完整代码 3.4 完整代码 此小节给出上述案例的完整代码, # encodingutf-8 import re, json, requests, xlwt, csv import pandas as pd from lxml import etree from bs4 import Beauti…...
农民剧团的春天与改变之路
杨天义,男,1966年9月生,中共党员,江西省吉安市吉水县水南农民剧团团长。 杨天义从废品收购起家,凭借自身的努力和奋斗,自筹资金100余万元建设了水南镇的第一座影剧院,组建了江西省吉安市吉水县…...
网页防篡改与盗链防护:实时监控与自动化修复实践
摘要:针对网页内容篡改与盗链问题,本文基于群联AI云防护系统,详解如何通过哈希校验、实时监控与CDN联动实现秒级修复,并提供Python与AWS S3集成代码。 一、网页安全的核心需求 防篡改:保障页面内容完整性,…...
【密码学——基础理论与应用】李子臣编著 第五章 序列密码 课后习题
免责声明 这里都是自己搓或者手写的。 里面不少题目感觉有问题或者我的理解有偏颇,请大佬批评指正! 不带思考抄作业的请自动退出,我的并非全对,仅仅提供思维! 题目 逐题解析 5.1 我们先要知道三阶LFSR函数的表达式…...
【uni-app】页面跳转传参
一、EventChannel 的核心作用 替代全局事件总线 相比传统的 uni.$emit 和 uni.$on,EventChannel 无需手动移除监听(如 uni.$off),避免内存泄漏风险。解决 URL 传参限制 当需要传递大量数据时,URL 拼接参数可能超出长度…...
【MySQL】表的增删改查
前言 前面我们对表结构做了介绍,本期我们对表的内容操作机增删改查进行介绍! 目录 前言 一、insert 插入 1.1 单行数据 全列插入 1.2 多行数据 指定列插入 1.3 插入否则更新 1.4 插入否则替换 二、select 查询 2.1 select 列 2.1.1 全列查询…...
AQchat
在当前项目里,Handler 类主要用于处理不同类型的命令或者消息,下面按照不同功能模块为你详细介绍各 Handler 的作用。 命令处理 Handler(位于 com.howcode.aqchat.handler.impl 包) SyncRoomMembersCmdHandler:处理同…...
Profibus DP转ModbusTCP网关通讯案例解析
Profibus DP转ModbusTCP网关通讯案例解析 Profibus DP和Modbus TCP都是工业自动化领域中常见的通信协议,各自在不同的应用场景中发挥着重要作用。然而,由于不同设备、系统之间的兼容性需求,常常需要进行这两种协议的转换。本文将介绍一个典型…...
将你的 Rust + WebAssembly 项目发布到 npm
一、准备工作:登录 npm 在发布之前,你需要: 拥有一个 npm 账号 没有的话可前往 https://www.npmjs.com/signup 免费注册。 登录本地 npm 账户 使用 wasm-pack 自带的登录命令: wasm-pack login它会提示你输入 npm token…...
RGBD惯性SLAM
介绍 本篇介绍一种基于视觉光流法的RGBD惯性SLAM算法,该算法的前身是DEMO算法。 相对于原始版本: 更新了相对较老的IplImage 相关接口 加入了GTSAM后端;滑动窗口后端;3D-3Dbatch优化;点到面batch后端。分别对应不同的…...
linuxbash原理
3417 1647 0 04:17 ? 00:00:21 /usr/libexec/gnome-terminal-server yangang 3425 3417 0 04:17 pts/0 00:00:00 bash yangang 4524 3417 0 04:26 pts/1 00:00:00 bash 控制台创建是通过/usr/libexec/gnome-terminal-server 进行创建 rea…...
ctfshow做题笔记—栈溢出—pwn75~pwn79
目录 前言 一、pwn75(栈空间不够怎么办?) 二、pwn76 三、pwn77(Ez ROP or Mid ROP ?) 四、pwn79(你需要注意某些函数,这是解题的关键!) 前言 嘿嘿,隔了一段时间没有做pwn题了(主播脱单了)࿰…...
C++ 标准库中的 <algorithm> 头文件算法总结
C 常用 <algorithm> 算法概览 C 标准库中的 <algorithm> 头文件提供了大量有用的算法,主要用于操作容器(如 vector, list, array 等)。这些算法通常通过迭代器来操作容器元素。 1. 非修改序列操作 std::all_of, std::any_of, s…...
leecode Hot100之回溯算法【C++速查】
文章目录 [46. 全排列](https://leetcode.cn/problems/permutations/)[78. 子集](https://leetcode.cn/problems/subsets/)[17. 电话号码的字母组合](https://leetcode.cn/problems/letter-combinations-of-a-phone-number/)[39. 组合总和](https://leetcode.cn/problems/combi…...
前端 main.js能做哪些事?
前端 main.js 的从入门到进阶 摘要 在前端开发中,main.js 文件是项目启动的关键入口,它承担着初始化应用、引入依赖、配置全局设置等重要职责。本文将全面介绍 main.js 的基础知识,包括其基本结构和作用,并深入探讨如何进行进阶开…...
JAVA Web_定义Servlet2_学生登录验证Servlet
题目 页面StudentLogin.html中有一HTML的表单代码如下: <form action"studentLogin" method"post">学生姓名:<input type"text" name"stuName" value""><br>登录密码:…...
【信息系统项目管理师】高分论文:论信息系统项目的范围管理(电网公司保供电可视化系统)
更多内容请见: 备考信息系统项目管理师-专栏介绍和目录 文章目录 论文1、规划范围管理2、收集需求3、定义范围4、创建工作分解结构(WBS)5、确认范围6、控制范围论文 2017年5月,我作为项目经理参加XX省电网公司保供电可视化系统应用项目的建设,该项目是2017年XX省电网信息化…...
如何高效查询订单销售情况与售罄率:从SQL到架构优化的全流程设计
在电商平台、SaaS多租户系统中,订单数据作为核心数据之一,承载了关键的运营指标,如销售额、商品售罄率、订单转化等。随着数据量的持续增长,如何在大数据量条件下快速、稳定地获取统计信息,成为系统设计的重点之一。 本文将从查询目标分析入手,结合数据库设计优化与典型…...
RTT添加一个RTC时钟驱动,以DS1307为例
添加一个外部时钟芯片 这里多了一个选项 复制drv_rtc.c,重命名为drv_rtc_ds1307.c 添加到工程中 /*** @file drv_rtc_ds1307.c* @brief * @author jiache (wanghuan3037@fiberhome.com)* @version 1.0* @date 2025-01-08* * @copyright Copyright (c) 2025 58* */ #...
Leetcode 独一无二的出现次数
可以通过哈希集来判断是否独一无二,如果set中已经包含了count,那么set.add(count)会返回false class Solution {public boolean uniqueOccurrences(int[] arr) {Map<Integer, Integer> map new HashMap<>();for(int i 0; i < arr.leng…...
ubuntu上,e1000e,i1210有线网卡驱动安装
1,下载附属资源,解压对应的压缩包 tar zxf e1000e-<x.x.x>.tar.gz 2,进入压缩包src目录下 cd e1000e-<x.x.x>/src/ 3,安装 sudo make install 4,重启 reboot e1000e Intel官网下载地址 https://www.i…...
Xmind 2025 中文思维导图
Xmind 2025 中文思维导图 一、介绍 Xmind ,是一款出色的思维导图和头脑风暴软件,拥有美观的智能配色方案,便于你轻松理清思路捕捉创意。丰富的导图模板及多种创意整合工具,可助力导图迸发更多活力。还拥有强大演说模式ÿ…...
搭载DeepSeek|暴雨AI教育一体机加速AI教育普及
近日,在全国智算大会上,暴雨公司展示了新一代 AI 教育一体机,通过全栈国产化技术与 DeepSeek 模型的深度适配,打造低成本、高性能的人工智能教育解决方案,助力 AI 教育普及与教育数字化转型。 暴雨AI教育一体机&#…...
【字节跳动AI论文】Seaweed-7B:视频生成基础模型的高成本效益培训
摘要:本技术报告介绍了一种经济有效的视频生成基础模型训练策略。 我们提出了一种中等规模的研究模型,大约有70亿个参数(7B),称为Seaweed-7B,使用665,000个H100 GPU小时从头开始训练。 尽管使用适度的计算资…...
java 线程池:IO密集型的任务(CPU核数 * 2 + 1),为什么这么设置,计算密集型任务( CPU核数+1 ),为什么这么设置
文章目录 1. IO密集型任务:`CPU核数 2 + 1`为什么这样设置?示例场景:2. CPU密集型任务:`CPU核数 + 1`为什么这样设置?示例场景:3. 两者的核心差异4. 实际应用中的注意事项5. 总结在Java线程池的配置中, IO密集型和 CPU密集型任务的线程数设置逻辑存在显著差异,核心原…...
RabbitMQ消息的可靠性
生产者的可靠 首先,我们一起分析一下消息丢失的可能性有哪些。 消息从发送者发送消息,到消费者处理消息,需要经过的流程是这样的: 消息从生产者到消费者的每一步都可能导致消息丢失: ● 发送消息时丢失:…...
涵盖通算、智算、超算、量算!“四算合一”算力网络投入使用,效率提升20%
近日,由中国移动承建的全国首个“四算合一”算力网络调度平台日前正式投入使用。这座“数字三峡”的诞生,标志着我国算力基建完成从“单兵作战”到“军团协同”的跃迁。 什么是“四算合一”? “四算合一”是指将通用算力、智能算力、超级算…...
【Redis】数据结构和内部编码
先来复习一下之前学过的几个基本的全局命令: keys:用来查看匹配规则的keyexists:用来判定执行key是否存在del:删除指定的keyexpire:给key设置过期时间ttl:查询key的过期时间type:查询key对应的…...
考研数据结构之二叉树(一)(包含真题及解析)
考研数据结构之二叉树(一) 下期预告:后续文章将深入探讨二叉树的遍历算法与高频考点(如平衡二叉树、线索二叉树)。 二叉树是数据结构中的核心内容之一,也是考研高频考点。本文将从定义和存储结构两方面展开…...