【面试系列】C 语言高频面试题

欢迎来到我的博客,很高兴能够在这里和您见面!欢迎订阅相关专栏:

⭐️ 全网最全IT互联网公司面试宝典:收集整理全网各大IT互联网公司技术、项目、HR面试真题.
⭐️ AIGC时代的创新与未来:详细讲解AIGC的概念、核心技术、应用领域等内容。
⭐️ 全流程数据技术实战指南:全面讲解从数据采集到数据可视化的整个过程,掌握构建现代化数据平台和数据仓库的核心技术和方法。

文章目录

      • 常见的C语言初级面试题及详细解答
        • 1. **C语言的基本数据类型有哪些?**
        • 2. **如何在C语言中定义和使用指针?**
        • 3. **C语言中的数组和指针有什么关系?**
        • 4. **什么是结构体,如何定义和使用结构体?**
        • 5. **C语言中的内存分配函数有哪些?**
        • 6. **解释C语言中的条件编译和宏定义。**
        • 7. **什么是文件操作,C语言如何进行文件读写?**
        • 8. **如何在C语言中处理字符串?**
        • 9. **解释C语言中的递归函数,并举例说明。**
        • 10. **如何在C语言中处理命令行参数?**
      • 常见的C语言中级面试题及详细解答
        • 1. **解释C语言中的指针数组和数组指针的区别。**
        • 2. **什么是静态变量,如何在C语言中定义和使用?**
        • 3. **解释C语言中的内存对齐以及其重要性。**
        • 4. **什么是`const`指针和指向`const`的指针,如何使用?**
        • 5. **解释`typedef`的作用,并举例说明。**
        • 6. **如何在C语言中实现一个链表,并进行基本的插入和删除操作?**
        • 7. **解释C语言中的动态内存分配,`malloc`和`calloc`的区别。**
        • 8. **什么是递归函数,如何避免递归引起的栈溢出问题?**
        • 9. **解释C语言中的位运算及其常见用途。**
        • 10. **如何在C语言中实现函数指针及其应用?**
      • 常见的C语言高级面试题及详细解答
        • 1. **什么是内存泄漏,如何检测和防止内存泄漏?**
        • 2. **解释C语言中的`volatile`关键字及其应用场景。**
        • 3. **解释C语言中的`inline`函数及其优缺点。**
        • 4. **如何在C语言中实现多线程编程,举例说明线程的创建与同步。**
        • 5. **什么是“深拷贝”和“浅拷贝”?举例说明它们在C语言中的实现。**
        • 6. **解释C语言中的`restrict`关键字及其用途。**
        • 7. **如何在C语言中实现内存池(memory pool)?**
        • 8. **解释C语言中的内联汇编及其用途,举例说明。**
        • 9. **解释C语言中的自定义内存管理器,并举例说明其实现。**
        • 10. **解释C语言中的编译器优化选项及其作用。**
      • 面试中需要掌握的知识点总结
        • 1. 基本语法和结构
        • 2. 指针和内存管理
        • 3. 数据结构
        • 4. 字符串处理
        • 5. 文件操作
        • 6. 高级特性
        • 7. 编译和调试
        • 8. 并发和多线程编程
        • 9. 编程实践

常见的C语言初级面试题及详细解答

1. C语言的基本数据类型有哪些?

解答:
C语言的基本数据类型包括整型(int)、字符型(char)、浮点型(float)、双精度浮点型(double)。整型可以进一步分为短整型(short int)、长整型(long int)和无符号整型(unsigned int)。这些基本数据类型构成了C语言处理不同类型数据的基础。

2. 如何在C语言中定义和使用指针?

解答:
指针是存储变量地址的变量。在C语言中,定义指针的语法为<数据类型> *<指针变量名>。例如,int *ptr定义了一个整型指针。使用&运算符获取变量地址并赋值给指针,如ptr = &var。通过解引用运算符*可以访问指针指向的值,如*ptr

3. C语言中的数组和指针有什么关系?

解答:
数组名在大多数情况下是指向数组第一个元素的指针。例如,int arr[5]定义一个整型数组arrarr即为指向第一个元素的指针,等价于&arr[0]。可以通过指针运算访问数组元素,如*(arr + 1)访问arr[1]

4. 什么是结构体,如何定义和使用结构体?

解答:
结构体(struct)是用户自定义的数据类型,用于存储不同类型的数据。定义结构体的语法为struct <结构体名> { <成员列表> };。例如:

struct Student {int id;char name[50];float gpa;
};

定义结构体变量struct Student student1;,访问成员使用点运算符,如student1.id = 101;

5. C语言中的内存分配函数有哪些?

解答:
C语言中内存分配函数包括malloccallocreallocfreemalloc分配指定字节的内存,calloc分配指定数量且初始化为0的内存块,realloc调整已分配内存大小,free释放已分配的内存。例如:

int *ptr = (int *)malloc(10 * sizeof(int));
if (ptr != NULL) {free(ptr);
}
6. 解释C语言中的条件编译和宏定义。

解答:
条件编译和宏定义用于控制代码的编译。宏定义使用#define创建符号常量或宏函数,如#define PI 3.14。条件编译使用预处理指令如#ifdef#ifndef#if#else#elif#endif,根据条件编译特定部分代码。例如:

#define DEBUG
#ifdef DEBUGprintf("Debug mode\n");
#endif
7. 什么是文件操作,C语言如何进行文件读写?

解答:
文件操作包括文件的打开、读写和关闭。C语言使用fopen打开文件,fclose关闭文件,freadfwrite进行二进制读写,fprintffscanf进行格式化读写。例如:

FILE *file = fopen("data.txt", "r");
if (file != NULL) {char buffer[100];while (fgets(buffer, 100, file) != NULL) {printf("%s", buffer);}fclose(file);
}
8. 如何在C语言中处理字符串?

解答:
C语言中字符串以字符数组表示,并以空字符'\0'结尾。常用字符串操作函数包括strcpystrcatstrcmpstrlen。例如:

char str1[20] = "Hello";
char str2[20];
strcpy(str2, str1); // 复制str1到str2
strcat(str1, " World"); // 拼接" World"到str1
int len = strlen(str1); // 获取str1的长度
9. 解释C语言中的递归函数,并举例说明。

解答:
递归函数是指在函数内部调用自身的函数。递归函数必须有基例条件,以避免无限递归。例如,计算阶乘的递归函数:

int factorial(int n) {if (n == 0) {return 1;} else {return n * factorial(n - 1);}
}

调用factorial(5)会计算并返回5的阶乘120。
这些问题涵盖了C语言的基础知识,帮助面试官评估候选人的基础编程能力和理解水平。

10. 如何在C语言中处理命令行参数?

解答:
C语言通过main函数的参数处理命令行参数:int main(int argc, char *argv[])argc表示参数个数,argv是参数数组。例如:

#include <stdio.h>int main(int argc, char *argv[]) {for (int i = 0; i < argc; i++) {printf("Argument %d: %s\n", i, argv[i]);}return 0;
}

执行./program arg1 arg2,将输出参数列表。

常见的C语言中级面试题及详细解答

1. 解释C语言中的指针数组和数组指针的区别。

解答:
指针数组是一个数组,数组元素是指针。例如,int *arr[10]是一个指向整数的指针数组。数组指针是指向数组的指针。例如,int (*ptr)[10]是一个指向包含10个整数的数组的指针。区别在于指针数组是多个指针的集合,而数组指针是指向一个数组的单一指针。

2. 什么是静态变量,如何在C语言中定义和使用?

解答:
静态变量使用关键字static定义,具有静态存储期,生命周期贯穿整个程序运行期间,但其作用域仅限于定义它的函数或文件。例如:

void func() {static int count = 0; // 静态变量,仅初始化一次count++;printf("Count: %d\n", count);
}

调用func函数多次,count变量的值会累积,而不是每次都重置为0。

3. 解释C语言中的内存对齐以及其重要性。

解答:
内存对齐是指在内存中存储数据时,数据的地址要按特定字节边界对齐,以提高数据访问效率。C编译器通常会对结构体进行内存对齐,插入填充字节以确保每个成员在适当的边界上。例如:

struct Example {char a;int b;
};

在32位系统中,int通常要求4字节对齐,因此在char aint b之间会插入3个字节的填充。

4. 什么是const指针和指向const的指针,如何使用?

解答:
const指针指针自身是常量,不能修改指向的地址。例如,int *const ptr
指向const的指针指针指向的值是常量,不能通过该指针修改指向的值。例如,const int *ptr

int a = 10, b = 20;
const int *ptr1 = &a; // 指向const的指针
int *const ptr2 = &a; // const指针
ptr1 = &b; // 合法
*ptr1 = 30; // 非法
ptr2 = &b; // 非法
*ptr2 = 30; // 合法
5. 解释typedef的作用,并举例说明。

解答:
typedef用于为现有类型定义新的类型名,简化复杂类型的使用。例如:

typedef unsigned long ulong;
ulong a = 100;

此示例中,ulongunsigned long的新类型名,使用更简洁。此外,typedef还可以用于简化复杂的指针和函数指针类型定义。

6. 如何在C语言中实现一个链表,并进行基本的插入和删除操作?

解答:
链表是由节点组成的数据结构,每个节点包含数据和指向下一个节点的指针。以下是链表的实现和基本操作:

#include <stdio.h>
#include <stdlib.h>struct Node {int data;struct Node *next;
};void insert(struct Node **head, int data) {struct Node *new_node = (struct Node *)malloc(sizeof(struct Node));new_node->data = data;new_node->next = *head;*head = new_node;
}void delete(struct Node **head, int key) {struct Node *temp = *head, *prev;if (temp != NULL && temp->data == key) {*head = temp->next;free(temp);return;}while (temp != NULL && temp->data != key) {prev = temp;temp = temp->next;}if (temp == NULL) return;prev->next = temp->next;free(temp);
}void printList(struct Node *node) {while (node != NULL) {printf("%d -> ", node->data);node = node->next;}printf("NULL\n");
}
7. 解释C语言中的动态内存分配,malloccalloc的区别。

解答:
动态内存分配允许程序在运行时分配内存。malloc分配指定字节的未初始化内存,calloc分配指定数量的元素,并初始化为0。区别在于初始化和参数:

int *ptr1 = (int *)malloc(10 * sizeof(int)); // 分配10个整型大小的未初始化内存
int *ptr2 = (int *)calloc(10, sizeof(int)); // 分配并初始化为0的10个整型大小内存

malloc需要一个参数(总字节数),calloc需要两个参数(元素数量和每个元素的字节数)。

8. 什么是递归函数,如何避免递归引起的栈溢出问题?

解答:
递归函数是指在其自身内部调用自身的函数。递归函数需要基例条件来结束递归,否则可能引起栈溢出。避免递归引起的栈溢出可以通过优化递归深度、使用尾递归或将递归改写为迭代。例如,计算阶乘的递归和迭代实现:

int factorial(int n) {if (n == 0) return 1;return n * factorial(n - 1);
}int factorial_iterative(int n) {int result = 1;for (int i = 1; i <= n; i++) {result *= i;}return result;
}
9. 解释C语言中的位运算及其常见用途。

解答:
位运算是对二进制位进行操作,包括与(&)、或(|)、异或(^)、非(~)、左移(<<)和右移(>>)。常见用途包括设置、清除和检查特定位。例如:

int a = 5; // 0101
int b = a << 1; // 左移1位,结果为1010(10)
int c = a & 1; // 检查最低位是否为1,结果为1
int d = a | 8; // 设置第4位,结果为1101(13)

位运算常用于低级编程、位掩码和位字段操作。

10. 如何在C语言中实现函数指针及其应用?

解答:
函数指针是指向函数的指针,可以动态调用函数。在C语言中,函数指针定义语法为<返回类型> (*<指针名>)(<参数列表>)。例如:

#include <stdio.h>int add(int a, int b) {return a + b;
}int subtract(int a, int b) {return a - b;
}int main() {int (*func_ptr)(int, int); // 定义函数指针func_ptr = add; // 将指针指向add函数printf("Add: %d\n", func_ptr(2, 3)); // 调用add函数func_ptr = subtract; // 将指针指向subtract函数printf("Subtract: %d\n", func_ptr(5, 2)); // 调用subtract函数return 0;
}

函数指针常用于回调函数、动态函数调用和实现多态性。

这些中级问题帮助评估候选人对C语言的更深入理解和应用能力,涵盖了内存管理、数据结构、函数指针和位运算等重要主题。

常见的C语言高级面试题及详细解答

1. 什么是内存泄漏,如何检测和防止内存泄漏?

解答:
内存泄漏是指程序在运行过程中分配了内存但未能释放,导致内存占用逐渐增加。内存泄漏会降低系统性能,甚至导致程序崩溃。检测内存泄漏的方法包括使用工具如Valgrind、AddressSanitizer等。防止内存泄漏的方法包括确保每次malloccalloc分配的内存都有对应的free调用,尽量使用智能指针(在支持的环境中),进行严格的代码审查和测试。

2. 解释C语言中的volatile关键字及其应用场景。

解答:
volatile关键字告诉编译器变量可能在任何时间被外部因素修改,因此编译器不能对该变量进行优化。常见应用场景包括:

  • 硬件寄存器地址映射,如嵌入式系统中的I/O端口
  • 多线程编程中的共享变量,避免编译器优化导致的读取缓存问题
    例如:
volatile int flag = 0; // 该变量可能在另一个线程中被修改
while (!flag) {// Do something
}

在这个例子中,编译器不会将flag变量的读取操作优化为缓存的读取,而是每次都从内存中读取。

3. 解释C语言中的inline函数及其优缺点。

解答:
inline关键字用于建议编译器将函数体直接插入到调用处,减少函数调用的开销。优点包括减少函数调用的开销、提高代码执行速度。缺点是可能导致代码膨胀,增加编译时间和最终的二进制文件大小。使用示例:

inline int add(int a, int b) {return a + b;
}
int main() {int result = add(3, 4); // 编译器可能将add函数的代码直接插入到此处return 0;
}

需要注意,inline只是建议,编译器可能会忽略。

4. 如何在C语言中实现多线程编程,举例说明线程的创建与同步。

解答:
C语言中多线程编程通常使用POSIX线程(pthread)库。创建线程使用pthread_create函数,同步线程使用互斥锁(mutex)或条件变量。示例如下:

#include <pthread.h>
#include <stdio.h>void *print_message(void *ptr) {printf("%s\n", (char *)ptr);return NULL;
}int main() {pthread_t thread1, thread2;char *message1 = "Thread 1";char *message2 = "Thread 2";pthread_create(&thread1, NULL, print_message, (void *)message1);pthread_create(&thread2, NULL, print_message, (void *)message2);pthread_join(thread1, NULL);pthread_join(thread2, NULL);return 0;
}

在此例中,pthread_create函数创建两个线程,pthread_join函数等待线程完成。

5. 什么是“深拷贝”和“浅拷贝”?举例说明它们在C语言中的实现。

解答:
浅拷贝是指复制对象的值,但不复制指向的内存,两个对象共享同一内存。深拷贝是指不仅复制对象的值,还复制对象指向的内存,两个对象独立。示例如下:

// 浅拷贝
typedef struct {int *data;
} ShallowCopy;ShallowCopy shallow_copy(ShallowCopy src) {ShallowCopy dest;dest.data = src.data;return dest;
}// 深拷贝
typedef struct {int *data;
} DeepCopy;DeepCopy deep_copy(DeepCopy src) {DeepCopy dest;dest.data = (int *)malloc(sizeof(int));*(dest.data) = *(src.data);return dest;
}

在深拷贝中,malloc分配新的内存,并复制源对象的数据。

6. 解释C语言中的restrict关键字及其用途。

解答:
restrict关键字是C99引入的,用于指示指针是访问对象的唯一方法,允许编译器进行更激进的优化。使用restrict指针,编译器假设没有别的指针会访问同一块内存,从而可以优化代码。例如:

void add_arrays(int *restrict a, int *restrict b, int *restrict c, size_t n) {for (size_t i = 0; i < n; i++) {c[i] = a[i] + b[i];}
}

在此例中,编译器可以假设abc指向的内存不会重叠,优化内存访问。

7. 如何在C语言中实现内存池(memory pool)?

解答:
内存池是一种内存管理机制,预先分配大块内存并按需分配小块内存,以提高内存分配和释放的效率。示例如下:

#include <stdlib.h>#define POOL_SIZE 1024typedef struct {char pool[POOL_SIZE];size_t offset;
} MemoryPool;void *pool_alloc(MemoryPool *pool, size_t size) {if (pool->offset + size <= POOL_SIZE) {void *ptr = pool->pool + pool->offset;pool->offset += size;return ptr;} else {return NULL; // 内存不足}
}void pool_free(MemoryPool *pool) {pool->offset = 0;
}int main() {MemoryPool pool = { .offset = 0 };int *a = (int *)pool_alloc(&pool, sizeof(int));*a = 42;pool_free(&pool);return 0;
}

在此例中,pool_alloc函数从内存池中分配内存,pool_free重置内存池。

8. 解释C语言中的内联汇编及其用途,举例说明。

解答:
内联汇编允许在C代码中嵌入汇编指令,通常用于性能优化或访问硬件级功能。GCC编译器支持__asm____asm语法。例如:

#include <stdio.h>int main() {int a = 5, b = 10, result;__asm__ ("addl %%ebx, %%eax;": "=a" (result): "a" (a), "b" (b));printf("Result: %d\n", result);return 0;
}

在此例中,内联汇编将寄存器ebx的值加到eax,结果存储在result中。

9. 解释C语言中的自定义内存管理器,并举例说明其实现。

解答:
自定义内存管理器可以提高内存分配效率,减少碎片化。实现包括自定义mallocfree函数,管理内存块。示例如下:

#include <stdlib.h>
#include <stdio.h>#define MEMORY_SIZE 1024char memory[MEMORY_SIZE];
size_t memory_offset = 0;void *my_malloc(size_t size) {if (memory_offset + size <= MEMORY_SIZE) {void *ptr = memory + memory_offset;memory_offset += size;return ptr;} else {return NULL; // 内存不足}
}void my_free(void *ptr) {// 自定义内存管理器通常不支持单独释放内存块// 此示例仅演示基本原理
}int main() {int *a = (int *)my_malloc(sizeof(int));if (a) {*a = 42;printf("Value: %d\n", *a);}return 0;
}

在此例中,my_malloc从预分配的内存块中分配内存。

10. 解释C语言中的编译器优化选项及其作用。

解答:
编译器优化选项用于控制编译器的优化级别,提高生成代码的性能和效率。常见优化选项包括:

  • -O0:无优化,便于调试
  • -O1:基本优化,平衡编译时间和执行速度
  • -O2:更多优化,提高执行速度
  • -O3:激进优化,可能增加代码大小
  • -Os:优化生成代码大小

例如,使用GCC编译器进行优化:

gcc -O2-o my_program my_program.c

在此例中,-O2选项启用更多优化,提高生成代码的执行速度。不同优化级别适用于不同场景,根据需要选择合适的优化级别。

这些高级问题涵盖了内存管理、编译器优化、多线程编程、内联汇编等高级主题,评估候选人对C语言的深入理解和应用能力。

面试中需要掌握的知识点总结

C语言是一种功能强大且灵活的编程语言,被广泛应用于系统编程、嵌入式系统开发、游戏开发等领域。要在C语言面试中脱颖而出,候选人需要掌握以下关键知识点:

1. 基本语法和结构
  • 数据类型:理解基本数据类型(如intcharfloatdouble)及其大小,熟悉枚举、结构体和联合体的定义和使用。
  • 变量和常量:掌握变量声明、定义和初始化,了解常量和const关键字的使用。
  • 控制结构:熟悉if-elseswitch-caseforwhiledo-while等控制结构的使用及其语法。
  • 函数:理解函数的定义、声明、参数传递方式(按值传递和按引用传递)、递归函数及其应用。
2. 指针和内存管理
  • 指针基础:理解指针的概念、指针运算、指针与数组的关系。
  • 指针高级:掌握指向指针的指针、指针数组、数组指针、函数指针的定义和使用。
  • 动态内存分配:熟悉malloccallocreallocfree函数的使用,理解内存泄漏及其检测方法。
  • 内存模型:了解堆栈内存分配、局部变量和全局变量的存储位置及其生命周期。
3. 数据结构
  • 数组:理解一维数组和多维数组的声明、初始化和访问方式。
  • 链表:掌握单链表、双链表和循环链表的基本操作(如插入、删除、遍历)。
  • 栈和队列:理解栈和队列的基本概念及其基于数组和链表的实现。
  • 树和图:了解二叉树、二叉搜索树的基本操作,理解图的表示方法(邻接矩阵和邻接表)。
4. 字符串处理
  • 字符串基础:熟悉C语言中的字符串定义、初始化和常用操作(如strlenstrcpystrcatstrcmp)。
  • 字符串操作:掌握字符串操作函数的实现原理和可能的边界条件(如缓冲区溢出)。
5. 文件操作
  • 文件指针:理解文件指针的概念及其使用(如FILE *fp)。
  • 文件操作函数:熟悉文件打开(fopen)、关闭(fclose)、读(freadfgetsfscanf)、写(fwritefputsfprintf)及其相关函数的使用。
6. 高级特性
  • 宏和预处理器指令:掌握宏定义(#define)、宏函数、条件编译(#ifdef#ifndef#endif)的使用。
  • 位操作:理解位运算符(如&|^~<<>>)及其应用,掌握位掩码和位字段操作。
  • 内联汇编:了解在C语言中嵌入汇编代码的方法及其应用场景。
7. 编译和调试
  • 编译过程:理解C语言的编译过程,包括预处理、编译、汇编和链接,了解生成可执行文件的步骤。
  • 调试工具:熟悉常用调试工具(如GDB)的使用,掌握基本调试命令(如断点设置、单步执行、查看变量值)。
8. 并发和多线程编程
  • 线程创建与管理:理解线程的基本概念,掌握线程的创建(如pthread_create)、同步(如互斥锁、条件变量)及其使用。
  • 并发控制:了解常见的并发问题(如死锁、竞态条件)及其解决方法。
9. 编程实践
  • 代码优化:掌握常见的代码优化技巧,理解内联函数、循环展开、减少内存访问等优化方法。
  • 代码风格:了解良好的代码风格和编码规范,掌握代码注释、命名规范、代码模块化等最佳实践。

掌握上述知识点不仅能够帮助候选人在C语言面试中应对各种问题,还能提升他们在实际开发中的编程能力和解决问题的技巧。通过不断练习和积累经验,候选人可以在C语言编程领域中脱颖而出。


💗💗💗 如果觉得这篇文对您有帮助,请给个点赞、关注、收藏吧,谢谢!💗💗💗

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

VQ-VAE中如何解决梯度截断(不可导)问题?直通估计、(stop gradient,停止梯度)

&#xff08;stop gradient&#xff0c;停止梯度&#xff09;运算 它简称为sg 也就是说&#xff0c;前向传播时&#xff0c;&#x1d460;&#x1d454;里的值不变(sg1)&#xff1b;反向传播时&#xff0c;&#x1d460;&#x1d454;按值为0求导(sg0)&#xff0c;即此次计算无…

canvas画箭头线

箭头线 vueuni-appcanvas 画带箭头可拖动的线段 <template><div><canvas ref"canvas" class"canvas" width"600px" height"400px" mousedown"startDrawing" mousemove"draw" mouseup"stopD…

Centos手动安装PHP和配置mydqli模块

第一步&#xff1a;手动安装php和php-fpm sudo yum install php php-fpm 安装 sudo systemctl start php-fpm 启动 sudo systemctl enable php-fpm 开机启动 php -v php-fpm -v PHP 5.4.16 (cli) (built: Apr 1 2020 04:07:17) Copyright (c) 1997-2013 The PHP G…

【加密与解密】【09】GPG Client签名流程

什么是GPG客户端 GPG客户端是实现PGP加密协议的一套客户端程序&#xff0c;可用于加密或签名 下载GPG客户端 建议安装命令行工具&#xff0c;图形工具一般不具备完整功能 https://gnupg.org/download/index.html生成私钥 此时会要求你输入名称&#xff0c;邮箱&#xff0c…

Qt Q_ASSERT详解

Q_ASSERT详解 引言一、基本用法二、深入了解三、参考链接 引言 Q_ASSERT是 Qt 框架中的一个宏&#xff0c;用于在调试时检查某个条件是否为真。它是程序调试中的一个重要工具&#xff0c;有助于开发者在开发过程中及时发现并修复潜在的错误。 一、基本用法 只在使用 Qt 的 D…

干货:科技论文写作保姆级攻略

前言&#xff1a;Hello大家好&#xff0c;我是小哥谈。科技论文是报道自然科学研究或技术开发工作成果的论说文章。通常基于概念、判断、推理、证明或反驳等逻辑思维体系&#xff0c;使用实验调研或理论计算等研究手段&#xff0c;按照特定格式撰写完成。 科技论文可以粗略分为…

UiPath+Appium实现app自动化测试

一、环境准备工作 1.1 完成appium环境的搭建 参考&#xff1a;pythonappiumpytestallure模拟器(MuMu)自动化测试环境搭建_appium mumu模拟器-CSDN博客 1.2 完成uipath的安装 登录官网&#xff0c;完成注册与软件下载安装。 UiPath业务自动化平台&#xff1a;先进的RPA及自动…

vue组件深入介绍之插槽

了解插槽之前请先了解vue组件基础及注册 Vue2官网介绍 Vue3官网介绍 1、vue2插槽介绍 在2.6.0中&#xff0c;具名插槽和作用域插槽引入了一个新的统一语法&#xff08;v-slot指令&#xff09;。它将取代slot和slot-scope&#xff1b; Vue 实现了一套内容分发的 API&#xf…

AI 会淘汰程序员吗?

前言 前些日子看过一篇文章&#xff0c;说国外一位拥有 19 年编码经验、会 100% 手写代码的程序员被企业解雇了&#xff0c;因为他的竞争对手&#xff0c;一位仅有 4 年经验、却善于使用 Copilot、GPT-4 的后辈&#xff0c;生产力比他更高&#xff0c;成本比他更低&#xff0c…

【数据分享】《中国金融年鉴》1986-2020年PDF版

而今天要免费分享的数据就是1986-2020年间出版的《中国金融年鉴》并以多格式提供免费下载。&#xff08;无需分享朋友圈即可获取&#xff09; 数据介绍 《中国金融年鉴》自1986年起&#xff0c;逐年记录着中国金融领域的发展历程、政策变化和市场动态。这部年鉴不仅是金融专业…

利用人工智能技术提升返利App的智能推荐功能

利用人工智能技术提升返利App的智能推荐功能 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 随着人工智能技术的迅猛发展&#xff0c;它已经渗透到了各行各业…

Halcon 基于分水岭的目标分割

一 分水岭 1 分水岭介绍 传统的分水岭分割方法&#xff0c;是一种基于拓扑理论的数学形态学的分割方法&#xff0c;其基本思想是把图像看作是地质学上的拓扑地貌&#xff0c;图像中每一像素的灰度值表示该点的海拔高度&#xff0c;每一个局部极小值及其周边区域称为集水盆地&…

企业私有模型和提示词工程初探

企业私有模型和提示词工程&#xff1a;提升AI应用的策略和方法 摘要 在当今竞争激烈的商业环境中&#xff0c;企业越来越依赖于人工智能&#xff08;AI&#xff09;技术来提高运营效率和创新能力。本文探讨了企业如何通过构建私有模型和应用提示词工程来优化AI系统。首先&…

ROS学习笔记(18):建图与定位(2)

0.前言 上文提到现在的我们已经进入到了SLAM领域的学习&#xff0c;会涉及到大量专业知识&#xff0c;作为一个自学的大三&#xff08;好吧也快大四了&#xff09;萌新并不能保证每次文章的专业性和准确性&#xff0c;所以&#xff0c;本人推荐大家能自己去查阅一些相关书籍和…

牛!手机、TV双端聚合,免费可同步!

哈喽&#xff0c;各位小伙伴们好&#xff0c;我是给大家带来各类黑科技与前沿资讯的小武。 有不少小伙伴闲时会选择观看游戏、户外、娱乐等各类的直播&#xff0c;而关注的主播可能驻留在不同直播平台&#xff0c;需要下载多个APP&#xff0c;且切换非常不方便。 所以今天给大…

缓存生命周期管理:探索Memcached的过期策略

缓存生命周期管理&#xff1a;探索Memcached的过期策略 在高效的缓存系统中&#xff0c;过期策略是确保数据时效性的关键。Memcached作为一个简单而强大的分布式内存缓存系统&#xff0c;提供了几种不同的缓存过期策略来满足不同的业务需求。本文将详细介绍Memcached的缓存过期…

OpenHarmony移植小型系统exynos4412(一)

新建芯片解决方案 1、新建目录 芯片解决方案的目录规则为:device/board/{芯片解决方案厂商}/{开发板}。以exynos的fs4412开发板为例,在代码根目录执行如下命令建立目录: mkdir -p device/exynos/fs4412 芯片解决方案目录树的规则如下: device/board └── company # 芯…

自定义动态数据源+事务控制

1&#xff1a;首先yml配置两个数据库的链接 spring:application:name: xxxxmain:banner-mode: OFFdatasource: # 默认数据源 datamarkdruid: # 关闭数据库的 web 访问stat-view-servlet:enabled: falseweb-stat-filter:enabled: falsefilt…

Linux系统之玩转SafeLine防火墙应用

Linux系统之玩转SafeLine防火墙应用 一、SafeLine介绍1.1SafeLine简介1.2 SafeLine功能1.3 SafeLine 的工作原理二、本地环境介绍2.1 本地环境规划2.2 本次实践介绍三、本地环境检查3.1 检查Docker服务状态3.2 检查Docker版本3.3 检查docker compose 版本四、部署SafeLine4.1 安…

算法训练营day67

题目1&#xff1a; #include <iostream> #include <vector> #include <string> #include <unordered_set> #include <unordered_map> #include <queue>using namespace std;int main() {string beginStr, endStr;int n;cin >> n;ci…