嵌入式八股文面试题(一)C语言部分
1. 变量/函数的声明和定义的区别?
(1)变量
定义不仅告知编译器变量的类型和名字,还会分配内存空间。
int x = 10; // 定义并初始化x int x; //同样是定义声明只是告诉编译器变量的名字和类型,但并不为它分配内存空间。使用extern来修饰。告诉编译器这个变量的定义在其他地方,这里使用此变量。
extern int x; // 声明x是一个整型变量(2)函数
函数定义提供了函数的具体实现,它包括了函数的返回类型、函数名、参数类型以及函数体的内容。
int add(int a, int b) {return a + b; // 函数体 }函数声明告知编译器函数的返回类型、函数名及其参数类型,但并不提供函数的具体实现。
int add(int a, int b); // 声明add函数
2. sizeof和strlen的区别?
(1)
sizeof是一个操作符(与<、>类似),而strlen是一个库函数(在#inlcude <string>中)。(2)
sizeof的参数可以是任何数据类型或变量,而strlen只能是以‘ \0 ’结尾的字符串作为参数。(3)编译器在编译时就计算出了
sizeof的结果,而strlen函数必须要在运行时才会被计算出来,其核心是因为strlen是通过遍历字符串,在遇到 ‘\0’ 就会结束(结果大小不包含‘\0’),而sizeof则会将其包含在内计算大小。char str[] = "Hello"; printf("sizeof(str) = %zu\n", sizeof(str)); // 输出6(包括'\0') printf("strlen(str) = %zu\n", strlen(str)); // 输出5(不包括'\0')
3. &的用法:引用和取地址。
(1)& 用作取地址符号:表示获取变量的内存地址。
int x = 10;
int *ptr = &x; // 使用 & 获取 x 的地址,并赋给指针 ptrprintf("x 的地址:%p\n", (void*)&x); // 输出 x 的内存地址
(2)& 用作引用符号:表示一个变量的引用,即该变量的别名。创建一个引用,引用是变量的别名,它不会创建新的内存空间,而是直接使用原变量的内存。
int x = 10;
int& ref = x; // ref 是 x 的引用,两个变量共享相同的内存地址ref = 20; // 通过引用修改 x 的值
printf("x = %d\n", x); // 输出 x = 20,引用修改了原变量
4. static关键字。
static关键字可以修饰变量和函数,对此有着不同给功能。static修饰的变量默认初始化值为0。
变量
(1)在函数内部定义的变量。
当
static用于函数内部的局部变量时,它表示该变量的生命周期改变。局部变量通常在每次函数调用时被创建并销毁,但使用
static关键字后,局部变量在函数调用结束后不会销毁,而是保留其值,直到下一次函数调用时继续使用上一次的值。直到程序结束后销毁。void count_calls() {static int count = 0; // 静态变量,只初始化一次count++;printf("This function has been called %d times.\n", count); }int main() {count_calls(); // 输出: This function has been called 1 times.count_calls(); // 输出: This function has been called 2 times.return 0; }(2)在函数外部定义的变量。
当
static用于函数外部的变量或函数时,它限制了该变量或函数的作用域,使得它只能在当前文件中使用,无法被其他文件访问。对于被static修饰全局变量来说,其他文件无法通过extern来引用它。函数
当
static用于函数时,它限制了该函数的作用域,使得它只能在当前文件中使用,无法被其他文件访问。(即只能在当前的C文件中使用,其他文件中无法调用该函数)注意:在多线程程序中,使用
static变量时要小心,因为它们的值会在多个线程之间共享,可能会引发竞态条件。为了保证线程安全,通常需要使用同步机制(如互斥锁)来访问这些静态变量。
5. volatile关键字。
在 C 和 C++ 中,
volatile是一个非常重要的关键字,它告诉编译器不要优化该变量的读取或写入操作。例如,减少不必要的变量读取或写入,以提高程序的效率。但是,对于某些变量,如硬件寄存器或多线程共享变量,编译器优化可能导致程序行为不符合预期。因此,volatile被用来告诉编译器:不要对该变量进行优化,每次访问该变量时,都必须从内存中读取最新的值。场景:对硬件寄存器进行访问时,都要加上此关键字。
#define STATUS_REGISTER (volatile int*)0x40001000int main() {int status = *STATUS_REGISTER; // 硬件寄存器的读取,每次都要从内存重新读取// 其他代码 }
6. const关键字。
在 C 和 C++ 中,
const关键字用于声明常量或表示某个对象的值不能被修改。const提供了一种有效的方式来增强程序的可读性、可维护性以及避免意外的修改。常见的有限制常量、指针、数组、函数参数等的修改性。(1)常量
const int x = 10; // x 是常量,值不能被修改 x = 20; // 错误:无法修改常量变量 x(2)指针
常量指针:指向常量数据的指针,
const放在*之前,表示指向的数据是常量。作用:即通过这个指针你不能修改它所指向的数据,但指针本身可以指向其他内存位置。
const int *ptr = &x; // ptr 是指向常量 int 的指针,不能通过 ptr 修改 x 的值 *ptr = 20; // 错误:不能通过 ptr 修改值 ptr = &y; // 合法:可以让 ptr 指向其他位置指针常量:指的是指针本身是常量,
const放在*之后,表示指针本身是常量。作用:即你不能改变指针指向的地址,但指针所指向的数据可以被修改。
int x = 5; int y = 10; int *const ptr = &x; // ptr 是常量指针,指向 x*ptr = 20; // 合法:可以通过 ptr 修改 x 的值 ptr = &y; // 错误:不能改变 ptr 的值(即不能让 ptr 指向 y)常量指针指向常量:既不允许修改指针的值(即指针常量),也不允许修改指针所指向的数据(即指向常量的数据)。
const int *const ptr; // ptr 是常量指针,指向常量 int(3)数组
使用
const可以确保数组中的元素在程序执行过程中保持不变。const int arr[] = {1, 2, 3, 4}; // arr 中的元素是常量,不能修改 arr[0] = 10; // 错误:不能修改 arr 中的元素(4)函数参数
在函数参数中使用
const,可以确保函数不会意外修改传入的参数,特别是对于指针或引用类型的参数。这有助于增加代码的可维护性和安全性。void print(const int &x) {printf("%d", x); // 不能修改 x }void foo(const int *ptr) {*ptr = 10; // 错误:不能修改 ptr 指向的数据 }
7. inline关键字。
在 C/C++ 中,inline 关键字用于请求编译器将函数的代码插入到调用该函数的地方,而不是通过传统的函数调用机制(即通过栈保存返回地址、传递参数等)。它的目的是提高代码的执行效率,特别是对于那些调用频繁且函数体较小的函数。递归函数不能内联。
#include <iostream>inline int square(int x) {return x * x;
}int main() {int a = 5;int result = square(a); // 在这里会将 square(a) 展开为 a * astd::cout << result << std::endl; // 输出 25return 0;
}
编译器会尽可能地将内联函数的代码嵌入到调用点。但是如果内联函数太复杂,编译器可能不会进行内联优化,尽管我们声明了 inline。编译器有最终决定权,可能会忽略 inline 关键字的请求。
8. C中的 malloc 和C++中的 new 有什么区别?
在 C 和 C++ 中,
malloc和new都用于动态内存分配,但它们有一些重要的区别。(1)new、delete是操作符,可以重载,只能在C++中使用。而 malloc、函数 free是函数,在C++和C中都可以使用,在stdlib头文件中。
(2)new 在 C++ 中它不仅分配内存,还会调用类的构造函数,delete调用类的析构函数(如果是类类型的话)。而 malloc 和 free 函数仅仅是分配内存和释放内存,并不执行构造和析构函数。
(3)new、delete返回的是某种数据类型的指针,而malloc和free返回的是void类型的指针(因此需要强制类型转换)。
(4)malloc申请的内存要使用free来释放,new申请的内存要使用delete来释放,两者不能混用,因为底层实现原理不同。
(5)malloc申请内存失败时会返回NULL,所以判断返回值来判断内存是否申请成功。而new申请内存失败时会抛出异常。
int* arr = (int*)malloc(10 * sizeof(int)); // 分配 10 个整数的空间 free(arr); // 释放内存int* arr = new int[10]; // 分配 10 个整数的数组,自动初始化 delete[] arr; // 释放数组,自动调用析构函数
9. 程序中的内存分配方式。
(1)栈区:对于所有的局部变量(除了局部静态变量),都存储在栈区中,栈内存的分配和释放由编译器自动管理,不需要程序员显式调用。
(2)堆区:使用malloc/new创建的内存都存储在堆区,需要程序员手动创建和释放。如果分配的内存,使用完成后就必须要记得释放,不然会造成内存泄漏的风险!
(3)静态存储区:用于存放全局变量和静态变量,内存在程序编译时就已经分配好了,这块内存在程序整个运行期间都存在。
10. 什么是野指针,如何避免?
野指针(Dangling Pointer)是指指向已经被释放或未初始化的内存位置的指针。野指针是指针操作中常见的错误之一,它会导致程序崩溃、内存泄漏或者不预期的行为。平时使用时一定要避免野指针的情况。如下所示:
// 1. 使用销毁的指针 int *ptr = new int(10); // 在堆上分配内存 delete ptr; // 释放内存 // ptr 现在是一个野指针,因为它指向已释放的内存//第二种情况: int* createPointer() {int x = 10; // 局部变量 xreturn &x; // 返回指向 x 的指针 } int main() {int* p = createPointer(); // p 指向局部变量 xprintf("%d\n", *p); // 试图访问已超出作用范围的变量return 0; } /* 原因:局部变量在函数执行完毕后销毁,指针p获取到的是销毁空间的变量,会导致崩溃*/// 2. 使用未初始化的指针 int *ptr; // 未初始化的指针 *ptr = 10; // 访问未初始化的指针,导致未定义行为// 3. 超过作用域。野指针的产生原因及解决办法如下:
(1)指针变量未初始化。解决办法:指针声明时初始化,可以是具体位置,也可以指向NULL。
int *ptr = NULL; // C语言中使用NULL初始化(2)使用被free或delete释放的指针。解决办法:指针指向的内存空间被释放后,应该指向NULL。
int *p=(int *)malloc(sizeof(int)); free(p);p=NULL;(3)指针越界。解决办法:在变量的作用域结束前释放掉变量的地址空间并且指向NULL。
11. 什么是函数指针和指针函数?
(1)函数指针
是指向函数的指针。可以通过它调用函数,使得程序在运行时能够动态地决定调用哪个函数。这在实现回调函数、函数数组等情况下非常有用。
定义一个函数指针:
返回类型 (*指针变量名)(参数类型1, 参数类型2, ...);使用举例:
#include <iostream>// 定义一个普通函数 int add(int a, int b) {return a + b; }int main() {// 声明一个指向函数的指针int (*func_ptr)(int, int);// 将指针指向 add 函数func_ptr = &add;// 通过函数指针调用函数int result = func_ptr(3, 4); // 调用 add(3, 4)std::cout << "Result: " << result << std::endl; // 输出 7return 0; }(2)指针函数
指返回指针的函数。它是一个普通的函数,只是返回值类型是一个指针。
返回类型 *函数名(参数类型1, 参数类型2, ...);
12. 指针的大小。
在 C/C++ 中,指针的大小是由编译器和系统架构决定的。指针本身的大小与它所指向的数据类型(
int、double、char等)无关,而是与计算机的位数有关。在 32 位系统中,指针通常占 4 字节(32 位),在 64 位系统中,指针通常占 8 字节(64 位)。
13. 内存对齐。
内存对齐指计算机中数据在内存中的存储方式,确保数据结构的成员按照特定规则排列,以提高访问效率。
(1)为什么要进行内存对齐?
CPU访问内存时,如果数据地址是对齐的(比如4字节对齐),那么访问速度会更快。如果数据没有对齐,可能需要多次访问内存,甚至导致错误。尤其是在不同的硬件平台上,对齐要求可能不同,所以编译器会自动进行内存对齐优化。
(2)对齐规则。
通常,每个数据类型的对齐要求是其自身的大小。比如,int通常是4字节,所以它需要4字节对齐;double是8字节,需要8字节对齐。结构体的对齐要求则是其成员中最大的对齐值。结构体的总大小需要是对齐值的整数倍,所以在成员之间可能会插入填充字节。
(3)如何减少填充?
对于结构体而言,调整成员顺序可以优化结构体大小。如下所示:
//字节大小为24 struct MyStruct {int a; // 4 字节,对齐值 4double b; // 8 字节,对齐值 8char c; // 1 字节,对齐值 1 };//字节大小为16 struct OptimizedStruct {double b; // 8 字节,对齐值 8int a; // 4 字节,对齐值 4char c; // 1 字节,对齐值 1 };
14. 结构体和联合体中成员所占内存大小。
(1)内存分配。
结构体中的每个成员都有自己的内存空间,所有成员的内存是按顺序排列的。
联合体中的所有成员共享同一块内存空间。
(2)内存所占大小。
结构体的总大小是各个成员大小的总和(可能会有填充字节以保证字节对齐,结构体的对齐方式通常由其最大成员的对齐要求决定。)。
联合体无论定义了多少个成员,内存大小总是等于其最大成员的大小。
举例:
#include <iostream> //结构体 struct MyStruct { int a; // 4 bytesdouble b; // 8 byteschar c; // 1 byte };struct MyStruct2 { int a; // 4 byteschar c; // 1 bytedouble b; // 8 bytes };//联合体 union MyUnion {int a; // 4 bytesdouble b; // 8 byteschar c; // 1 byte };int main() {MyStruct s1 = {1, 3.14, 'A'};MyStruct2 s2 = {1, 3.14, 'A'};MyUnion u={10,2.2,'C'};std::cout << "Size of struct: " << sizeof(s1) << " bytes" << std::endl; //大小为24字节。std::cout << "Size of struct: " << sizeof(s2) << " bytes" << std::endl; //大小为16字节。std::cout << "Size of union: " << sizeof(u) << " bytes" << std::endl; //大小为8字节。return 0; }结构体大小分析:以使得结构体的总大小是 8最大成员所占字节的倍数。
int a占用 4 字节。插入 4 字节填充,使double b从 8 字节边界开始。
double b占用 8 字节。
char c占用 1 字节。插入 7 字节填充,使结构体总大小为 8 的倍数。大小:4+4+8+1+7=24。
15. 数组和链表的区别。
(1)数组的地址空间是连续的,而链表的地址空间不是连续的。
(2)数组大小固定,而链表的大小不固定。
(3)数组的访问速度更快。数组直接可以使用下标进行访问,而链表则需要遍历访问。
(4)链表增删改查的速度更快。
(5)数组适用于数据量固定或变化不大,且需要频繁随机访问的场景。链表适合需要频繁插入和删除,不需要随机访问的场景。
16. define和typedef的区别。
(1)
#define是 C/C++ 中的预处理指令,它在编译之前由预处理器处理,进行简单的文本替换。适合定义常量、宏或代码片段,但不安全且难以调试。●特点:不进行类型错误检查,只是简单的文本替换。可以定义常量、函数宏或代码片段。
#define PI 3.14159 // 定义常量 #define MAX(a, b) ((a) > (b) ? (a) : (b)) // 定义函数宏int main() {double radius = 5.0;double area = PI * radius * radius; // 替换为 3.14159 * radius * radiusint max_value = MAX(10, 20); // 替换为 ((10) > (20) ? (10) : (20))return 0; }(2)
typedef是 C/C++ 中的关键字,用于为现有类型定义别名。类型安全且易于调试,适合提高代码可读性和维护性。●特点:进行类型检查,是类型安全的。只能用于定义类型别名,不能定义常量或宏。
typedef unsigned int uint; // 定义 uint 为 unsigned int 的别名 typedef int* IntPtr; // 定义 IntPtr 为 int* 的别名int main() {uint x = 10; // 等价于 unsigned int x = 10;IntPtr p = &x; // 等价于 int* p = &x;return 0; }如果需要类型安全或定义复杂类型别名,优先使用
typedef;如果需要定义常量或宏函数,可以使用#define。
17. 程序分为几个段?
通常,程序分为代码段(text)、数据段(data)、BSS段、堆(heap)和栈。具体详情查看本文内容第二章节。
●代码段:存储可执行指令(编译后的机器码)。
●数据段:通常包括已初始化的全局变量和静态变量。
●BSS段:存放未初始化的全局变量和静态变量,或者初始化为0的变量。
●堆:动态分配的内存(如
malloc)。●栈:局部变量。
18. 栈和队列的区别?
(1)核心规则
(2)基本操作
(3)结构特点
(4)示例
19. c文件是如何转为可执行文件的?
具体详情查看文章:Linux环境下的编译和调试。
相关文章:
嵌入式八股文面试题(一)C语言部分
1. 变量/函数的声明和定义的区别? (1)变量 定义不仅告知编译器变量的类型和名字,还会分配内存空间。 int x 10; // 定义并初始化x int x; //同样是定义 声明只是告诉编译器变量的名字和类型,但并不为它分配内存空间…...
Redis企业开发实战(二)——点评项目之商户缓存查询
目录 一、缓存介绍 二、缓存更新策略 三、如何保证redis与数据库一致性 1.解决方案概述 2.双写策略 3.双删策略 3.1延迟双删的目的 4.数据重要程度划分 四、缓存穿透 (一)缓存穿透解决方案 (二)缓存穿透示意图 五、缓存雪崩 (一)缓存雪崩解决方案 (二)缓存雪崩…...
RK3568中使用QT opencv(显示基础图像)
文章目录 一、查看对应的开发环境是否有opencv的库二、QT使用opencv一、查看对应的开发环境是否有opencv的库 在开发板中的/usr/lib目录下查看是否有opencv的库: 这里使用的是正点原子的ubuntu虚拟机,在他的虚拟机里面已经安装好了opencv的库。 二、QT使用opencv 在QT pr…...
C++模板编程——完美转发与可变参函数模板
1 基础概念 首先介绍几个概念: 假设现在有A、B、C三个函数。 直接调用:在A函数中调用C就叫做直接调用,不拐弯抹角。转发:在A函数中调用B函数,在B函数调用C函数,这就叫做转发。这种情况下,B函数…...
CentOS服务器部署Docker+Jenkins持续集成环境
一、准备工作 一台运行 CentOS 的服务器,确保有足够的磁盘空间、内存资源,并且网络连接稳定。建议使用 CentOS 7 或更高版本,本文以 CentOS 7 为例进行讲解。 拥有服务器的 root 权限,因为后续安装软件包、配置环境等操作需要较…...
蓝桥杯单片机(十)PWM脉宽调制信号的发生与控制
模块训练: 一、PWM基本原理 1.占空比 2.脉宽周期与占空比 当PWM脉宽信号的频率确定时,脉宽周期也确定了,此时改变占空比即可。当利用PWM脉宽周期改变LED灯的亮度时,灯是低电平亮,所以将低电平占空比改成10%即可实现…...
Redis --- 使用HyperLogLog实现UV(访客量)
UV 和 PV 是网站或应用数据分析中的常用指标,用于衡量用户活跃度和页面访问量。 UV (Unique Visitor 独立访客): 指的是在一定时间内访问过网站或应用的独立用户数量。通常根据用户的 IP 地址、Cookies 或用户 ID 等来唯一标识一个用户。示例࿱…...
postgresql-COALESCE函数、NULLIF函数、NVL函数使用
COALESCE函数 COALESCE函数是返回参数中的第一个非null的值,它要求参数中至少有一个是非null的; select coalesce(1,null,2),coalesce(null,2,1),coalesce(null,null,null); NULLIF(ex1,ex2)函数 如果ex1与ex2相等则返回Null,不相等返回第一个表达式的值…...
《深度揭秘LDA:开启人工智能降维与分类优化的大门》
在当今人工智能蓬勃发展的时代,数据成为了驱动技术进步的核心要素。随着数据采集和存储技术的飞速发展,我们所面临的数据量不仅日益庞大,其维度也愈发复杂。高维数据虽然蕴含着丰富的信息,但却给机器学习算法带来了一系列严峻的挑…...
逐笔成交委托level2高频tick股票历史下载和分析:20250206
Level2逐笔成交逐笔委托数据分享下载 通过Level2的逐笔成交和逐笔委托信息,这种精确到毫秒的数据能挖掘出许多有价值的信息,如庄家动向、欺诈行为,让所有交易行为无处隐藏。这适合交易高手研究主力规律,也适合人工智能进行数据挖…...
【办公类-99-01】20250201学具PDF打印会缩小一圈——解决办法:换一个PDF阅读器
背景需求: 2024年1月13日,快要放寒假了,组长拿着我们班的打印好的一叠教案来调整。 “前面周计划下面的家园共育有调整,你自己看批注。” “还有你这个教案部分的模版有问题,太小(窄)了。考虑…...
Macos安装APOC拓展库
文章目录 说明错误提示原因分析解决方法 说明 Macos安装APOC核心库 错误提示 There is no procedure with the name apoc.generate.ba registered for this database instance. Please ensure youve spelled the procedure name correctly and that the procedure is prope…...
YUV 颜色空间的数据存储格式详解
YUV 颜色空间的数据存储格式详解 在视频处理和存储中,YUV 颜色空间是一种常用的颜色表示方法。它将颜色信息分为亮度(Luma,Y)和色度(Chroma,U 和 V)两部分,适合视频压缩和传输。YUV 数据的存储格式有多种,主要分为 Planar 格式 和 Packed 格式,并结合不同的色度二次…...
Google C++ Style / 谷歌C++开源风格
文章目录 前言1. 头文件1.1 自给自足的头文件1.2 #define 防护符1.3 导入你的依赖1.4 前向声明1.5 内联函数1.6 #include 的路径及顺序 2. 作用域2.1 命名空间2.2 内部链接2.3 非成员函数、静态成员函数和全局函数2.4 局部变量2.5 静态和全局变量2.6 thread_local 变量 3. 类3.…...
HELLOCTF反序列化靶场全解
level 2 <?php/* --- HelloCTF - 反序列化靶场 关卡 2 : 类值的传递 --- HINT:尝试将flag传递出来~# -*- coding: utf-8 -*- # Author: 探姬 # Date: 2024-07-01 20:30 # Repo: github.com/ProbiusOfficial/PHPSerialize-labs # email: adminhello-ctf.com…...
Spring Boot 自动装配机制深度解析
在 Java 开发领域,Spring Boot 以其强大的功能和便捷的开发体验受到广大开发者的青睐。其中,自动装配机制是 Spring Boot 的核心特性之一,它极大地简化了 Spring 应用的开发过程,让开发者能够专注于业务逻辑的实现。本文将深入剖析…...
echarts中x轴、y轴 类目自定义换行
在echarts中可能因为某项的名字过长想要换行展示,就可以在 axisLabel 属性中自定义换行, 如以下案例在y轴上换行展示() yAxis:[ axisLabel: { formatter: function(value) { var ret // 拼接加 \n 返回的类目项 var maxLength 6 // 每…...
禅道社区版项目管理软件部署(记录篇)
系统要求(这里推荐使用docker容器化方式)安装前的准备Docker快速安装最后通过查看地址验证是否部署成功开始界面化安装配置 禅道(ZenTao)是一款国产开源的项目管理软件,专注于敏捷开发流程,支持 Scrum 和 K…...
探索C语言简易计算器程序的实现与优化
在C语言编程学习中,实现一个简易计算器是一个常见且有趣的练习项目。它不仅能帮助我们巩固基本的语法知识,如函数、循环、分支结构,还能让我们深入理解程序设计的逻辑。接下来,我们将分析三段实现简易计算器功能的C语言代码&#…...
时间序列分析(一)——基础概念篇
一、时间序列的相关概念 定义:时间序列是按时间顺序排列的一系列观测值,通常以固定间隔(如秒、天、年)记录。而时间序列分析是一种研究按时间顺序排列的数据点的统计方法,发现趋势、季节性波动、周期性和异常等模式&a…...
Python因为网络原因安装依赖库报错
现象 在终端运行以下指令 pip install pyautogui pillow keyboard 出现报错,终端信息如下: PS D:\code\Python> pip install pyautogui pillow keyboard Collecting pyautoguiUsing cached PyAutoGUI-0.9.54.tar.gz (61 kB)Installing build depe…...
【Redis】主从模式,哨兵,集群
主从复制 单点问题: 在分布式系统中,如果某个服务器程序,只有一个节点(也就是一个物理服务器)来部署这个服务器程序的话,那么可能会出现以下问题: 1.可用性问题:如果这个机器挂了…...
DockerFile详细学习
目录 1.DockerFile介绍 2.DockerFile常用指令 3.指令详细讲解 4.实例 构建Node-Exporter 构建Alertmanager 构建Mariadb 1.DockerFile介绍 什么是 Dockerfile? Dockerfile 是一个文本文件,包含了构建 Docker 镜像的所有指令。 Dockerfile 是一…...
寒假2.5
题解 web:[网鼎杯 2020 朱雀组]phpweb 打开网址,一直在刷新,并有一段警告 翻译一下 查看源码 每隔五秒钟将会提交一次form1,index.php用post方式提交了两个参数func和p,func的值为date,p的值为Y-m-d h:i:s a 执行fu…...
Temperature、Top-P、Top-K、Frequency Penalty详解
在生成式AI(比如ChatGPT)中,Temperature、Top-P、Top-K、Frequency Penalty 这些参数用于控制文本生成的多样性、随机性和重复度,它们的作用如下: 1. Temperature(温度) 作用:控制输…...
【大数据技术】编写Python代码实现词频统计(python+hadoop+mapreduce+yarn)
编写Python代码实现词频统计(python+hadoop+mapreduce+yarn) 搭建完全分布式高可用大数据集群(VMware+CentOS+FinalShell) 搭建完全分布式高可用大数据集群(Hadoop+MapReduce+Yarn) 本机PyCharm连接CentOS虚拟机 在阅读本文前,请确保已经阅读过以上三篇文章,成功搭建了…...
中国销冠,比亚迪1月销量超30万台,出口量飙升83%
近日,比亚迪公布的 1 月销量数据成为了汽车行业热议的焦点,比亚迪凭借 300538 辆的销量成绩,进一步巩固了其在新能源汽车市场的统治力,再次稳坐中国品牌汽车市场销冠宝座。 在 1 月的销售数据中,比亚迪王朝丨海洋系列无…...
App拉新、推广
任推邦 https://www.bilibili.com/video/BV1qD2qY4E7D u客直谈 https://space.bilibili.com/1817283205...
大数据sql查询速度慢有哪些原因
1.索引问题 可能缺少索引,也有可能是索引不生效 2.连接数配置:连接数过少/连接池比较小 连接数过 3.sql本身有问题,响应比较慢,比如多表 4.缓存池大小 可能是缓存问题(命中率>99%) 5.加了锁 6. redis&a…...
2 fastAPI请求参数
1. 路径参数 (Path Parameters) 路径参数是 URL 路径的一部分,通常用于标识资源的唯一性。路径参数在 FastAPI 中通过在路由装饰器中使用大括号 {} 来定义。 获取路径参数的方式 from fastapi import FastAPIapp FastAPI()app.get("/items/{item_id}"…...




