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

嵌入式笔试题+面试题

一、嵌入式笔试题

1) int a;
2) int *a;
3) int **a;
4) int a[10];
5) int *a[10];
6) int (*a)[10];
7) int (*a)(int);
8) int (*a[10])(int);
(1) 一个整型数
(2) 一个指向整型数的指针
(3) 一个指向指针的的指针,它指向的指针是指向一个整型数
(4) 一个有10个整型数的数组
(5) 一个有10个指针的数组,该指针是指向一个整型数
(6) 一个指向有10个整型数数组的指针
(7) 一个指向函数的指针,该函数有一个整型参数并返回一个整型数
(8) 一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数

int (*a)[]
int (**a)[]
int **a[10]
(1) 以上各行代码在作为函数形参时分别是什么意思?
(2) 以上各行代码出现在变量定义时分别是什么意思?

数组指针:int (*a)[10];
指针数组:int *a[10];
函数指针:int (*a)(int);
指针函数:int *a(int);

int f(int *a[10]);
int f(int *a[]);
int f(int **a);
这三行东西有什么区别吗?

数组 / 指针 / 数组指针 / 指针数组

关键字
Static、Const、Volatile
Const和Volatile同时修饰一个参数

const int a;
int const a;
const int * a; // a是一个指向常整型数的指针
int * const a; // a是一个指向整型数的常指针
int const * a const;

相关连接

c/c++笔试题整理
经典16道:嵌入式C语言笔试题
从一道C语言数组指针的笔试题看面试者的能力和心态

内存管理

深入理解Linux内存管理--目录导航
探索 Linux 内存模型
Linux 驱动面试题总结

笔试代码

// 01.c#include <stdio.h>
#include <stdlib.h>
#include <string.h>#define Max(x,y)  ((x) > (y) ? (x) : (y))
#define Min(x,y)  ((x) < (y) ? (x) : (y))int str_to_matrix(char * s, char * d, int * line, int * row)
{unsigned int i = 0;unsigned int mlen = 0;if(s==NULL || d==NULL || line==NULL || row==NULL)return -1;*line = 0;*row = 0;while(s[i] != '\0'){if(s[i] == '0' || s[i] == '1'){d[mlen] = s[i];mlen++;}if(s[i] == '\n'){*line = *line + 1;}i++;}*line = *line - 1;*row = mlen/(*line);
}int main(void)
{int m, n, i, j;char d[1000];int res = 0;int height[1000];int left[1000];int right[1000];memset(d, 0x00, sizeof(d));memset(height, 0x00, sizeof(height));memset(left, 0x00, sizeof(left));memset(right, 0x00, sizeof(right));str_to_matrix(\
"[\n\
['1','0','1','0','0'],\n\
['1','0','1','1','1'],\n\
['1','1','1','1','1'],\n\
['1','0','0','1','0']\n\
]", d, &m, &n);for(i=0; i<m*n; ++i){int cur_left = 0;int cur_right = n;for(j=0; j<n; ++j){if(d[i*n+j] == '1'){++height[j];left[j] = Max(left[j], cur_left);}else{height[j] = 0;left[j] = 0;cur_left = j + 1;}}for(j=n-1; j>=0; --j){if(d[i*n+j] == '1'){right[j] = Min(right[j], cur_right);}else{right[j] = n;cur_right = j;}res = Max(res, (right[j] - left[j]) * height[j]);}}printf("%d\n", res);return res;
}
// 02.c#include <stdio.h>
#include <stdlib.h>#define Max(x,y)  ((x) > (y) ? (x) : (y))int test(const char * s)
{unsigned int len = 0;int i, j, rst;if(s == NULL)return 0;while(s[len] != '\0'){len++;}if(len == 1)return 1;if(len == 2)return s[0]==s[1] ? 2 : 1;char * p = (char *)malloc(len * len);if(p == NULL){return -1;}for(i=0; i<len; i++){p[i*len+i] = 1;for(j=i-1; j>-1; j--){if(s[j] == s[i]){p[i*len+j] = 2 + p[(i-1)*len+j+1];}else{p[i*len+j] = Max(p[(i-1)*len+j], p[i*len+j+1]);}}}rst = p[(len-1)*len];if(p)free(p);return rst;
}int main(void)
{printf("%d\n", test("cbbd"));return 0;
}
// 03.c#include <stdio.h>
#include <stdlib.h>#define Max(x,y)  ((x) > (y) ? (x) : (y))int test(const char * s)
{unsigned int len = 0;int i, j, rst;if(s == NULL)return 0;while(s[len] != '\0'){len++;}if(len == 1)return 1;if(len == 2)return s[0]==s[1] ? 2 : 1;char * p = (char *)malloc(len * len);if(p == NULL){return -1;}for(i=0; i<len; i++){p[i*len+i] = 1;for(j=i-1; j>=0; j--){if(s[j] == s[i]){p[i*len+j] = 2 + p[(i-1)*len+j+1];}else{p[i*len+j] = Max(p[(i-1)*len+j], p[(i*len)+j+1]);}}}rst = p[(len-1)*len];if(p)free(p);return rst;
}int main(void)
{printf("%d\n", test("cbbd"));return 0;
}
// 04.c#include <stdio.h>
#include <stdlib.h>
#include <string.h>#define Max(x,y)  ((x) > (y) ? (x) : (y))
#define Min(x,y)  ((x) < (y) ? (x) : (y))int str_to_matrix(const char * s, char * d, int * line, int * row)
{unsigned int i = 0, mlen = 0;if(s==NULL || d==NULL || line==NULL || row==NULL)return -1;*line = 0;*row = 0;while(s[i] != '\0'){if(s[i] == '0' || s[i] == '1'){d[mlen] = s[i];mlen++;}if(s[i] == '\n'){*line = *line + 1;}i++;}*line = *line - 1;*row = mlen/(*line);return 0;
}int test(const char * input)
{int m, n, i, j, c_l, c_r;char d[1000];int h[100], l[100], r[100];int res = 0;memset(d, 0x00, sizeof(d));str_to_matrix(input, d, &m, &n);memset(h, 0x00, sizeof(h));memset(l, 0x00, sizeof(l));memset(r, n, sizeof(r));for(i=0; i<m*n; ++i){c_l = 0;c_r = n;for(j=0; j<n; ++j){if(d[i*n+j] == '1'){++h[j];l[j] = Max(l[j], c_l);}else{h[j] = 0;l[j] = 0;c_l = j + 1;}}for(j=n-1; j>=0; --j){if(d[i*n+j] == '1'){r[j] = Min(r[j], c_r);}else{r[j] = n;c_r = j;}res = Max(res, (r[j] - l[j]) * h[j]);}}return res;
}int main(void)
{char input[] = "[\n\
['1','0','1','0','0'],\n\
['1','0','1','1','1'],\n\
['1','1','1','1','1'],\n\
['1','0','0','1','0']\n\
]";printf("%d\n", test(input));return 0;
}

 华为笔试题 

转换-LeetCode85-最大矩形 
leetcode85. 最大矩形
LeetCode(85):最大矩形
LeetCode-最长回文子序列
516. 最长回文子序列

// 01.c#include <stdio.h>
#include <stdlib.h>
#include <string.h>#define Max(x,y)  ((x) > (y) ? (x) : (y))
#define Min(x,y)  ((x) < (y) ? (x) : (y))int str_to_matrix(char * s, char * d, int * line, int * row)
{unsigned int i = 0;unsigned int mlen = 0;if(s==NULL || d==NULL || line==NULL || row==NULL)return -1;*line = 0;*row = 0;while(s[i] != '\0'){if(s[i] == '0' || s[i] == '1'){d[mlen] = s[i];mlen++;}if(s[i] == '\n'){*line = *line + 1;}i++;}*line = *line - 1;*row = mlen/(*line);
}int main(void)
{int m, n, i, j;char d[1000];int res = 0;int height[1000];int left[1000];int right[1000];memset(d, 0x00, sizeof(d));memset(height, 0x00, sizeof(height));memset(left, 0x00, sizeof(left));memset(right, 0x00, sizeof(right));str_to_matrix(\
"[\n\
['1','0','1','0','0'],\n\
['1','0','1','1','1'],\n\
['1','1','1','1','1'],\n\
['1','0','0','1','0']\n\
]", d, &m, &n);for(i=0; i<m*n; ++i){int cur_left = 0;int cur_right = n;for(j=0; j<n; ++j){if(d[i*n+j] == '1'){++height[j];left[j] = Max(left[j], cur_left);}else{height[j] = 0;left[j] = 0;cur_left = j + 1;}}for(j=n-1; j>=0; --j){if(d[i*n+j] == '1'){right[j] = Min(right[j], cur_right);}else{right[j] = n;cur_right = j;}res = Max(res, (right[j] - left[j]) * height[j]);}}printf("%d\n", res);return res;
}
// 02.c#include <stdio.h>
#include <stdlib.h>#define Max(x,y)  ((x) > (y) ? (x) : (y))int test(const char * s)
{unsigned int len = 0;int i, j, rst;if(s == NULL)return 0;while(s[len] != '\0'){len++;}if(len == 1)return 1;if(len == 2)return s[0]==s[1] ? 2 : 1;char * p = (char *)malloc(len * len);if(p == NULL){return -1;}for(i=0; i<len; i++){p[i*len+i] = 1;for(j=i-1; j>-1; j--){if(s[j] == s[i]){p[i*len+j] = 2 + p[(i-1)*len+j+1];}else{p[i*len+j] = Max(p[(i-1)*len+j], p[i*len+j+1]);}}}rst = p[(len-1)*len];if(p)free(p);return rst;
}int main(void)
{printf("%d\n", test("cbbd"));return 0;
}

笔试题1——找出最长/最短子串:
1、给定一个字符串s,找出不重复的最长子串,需要保存子串和长度,只能用C语言;
2、给出一个数组和一个目标值,要求找出大于或等于目标值的最短子数组;
PS:有时候面试官要求规定的方法来写:用两个下标,一次遍历整个数组。

笔试题2——合并两个有序数列:
1、2个链表,去重然后排列成一个;
2、合并两个有序数组并移除相同数字;
3、合并两个长度不定有序数组并移除相同数字,不能用排序算法实现;
4、实现两个有序数组的合并,数组内有有序且重复的元素。
5、合并两个长度不定的有序数组并移除相同的数字,返回首地址和长度。(合并、排序、除同在一个循环中实现)

// code05.c#include <stdio.h>
#include <stdlib.h>
#include <string.h>// 合并两个长度不定的有序数组并移除相同的数字,返回首地址和长度。(合并、排序、除同在一个循环中实现)
void merge(int *nums1, int m, int *nums2, int n, int *out, int *out_len)
{int i1 = 0;int i2 = 0;int i = 0;int ii = 0;int *tmp = (int *)malloc(sizeof(int) * (m + n));if (nums1[i1] > nums2[i2]) {tmp[ii++] = nums2[i2++];} else {tmp[ii++] = nums1[i1++];}for (i = 1; i < m + n; i++) {if (i1 >= m) {if (nums2[i2] > tmp[ii - 1]) {tmp[ii++] = nums2[i2++];} else {i2++;}continue;}if (i2 >= n) {if (nums1[i1] > tmp[ii - 1]) {tmp[ii++] = nums1[i1++];} else {i1++;}continue;}if (nums1[i1] > nums2[i2]) {if (nums2[i2] > tmp[ii - 1]) {tmp[ii++] = nums2[i2++];} else {i2++;}} else if (nums1[i1] < nums2[i2]) {if (nums1[i1] > tmp[ii - 1]) {tmp[ii++] = nums1[i1++];} else {i1++;}} else {tmp[ii++] = nums1[i1++];}}*out_len = ii;memcpy(out, tmp, sizeof(int) * ii);free(tmp);tmp = NULL;
}void main(void)
{int a[5] = {1, 2, 2, 3, 4};int b[5] = {1, 3, 3, 4, 5};int out[10];int out_len;int i;merge(a, 5, b, 5, out, &out_len);for (i = 0; i < out_len; i++) {printf("%d\n", out[i]);}
}

笔试题3——其他:

1、其他题的话,C会出内存相关、线程相关的;

二、嵌入式面试题

1、怎么固定一个函数的地址;
2、堆和栈上的内存越界会发生什么;
3、动态库相关(原理、链接);
4、elf相关;
5、const的常量放在什么位置;
6、汇编相关;
7、科学运算库;
8、“stl”function;
9、浅拷贝和引用的区别;
10、函数调用是怎么调用的;
11、怎么调试代码;
12、怎么打断点;
13、线程间通信方式;

14、内存中堆和栈的区别;
15、C++有哪些智能指针,其中的区别是什么;
16、队列:向一个队列放进去几K的数据,这时候如何处理。
17、原子操作
18、信号量和互斥锁
19、__attribute__
20、一个父函数里面有一个子函数,这个子函数里面定义一个1K的数组,然后会发生什么,父函数能得到这个数组数据吗?以及如何调试?
21、函数调用
22、volatile
23、静态链接库和动态链接库
24、两个核CPU,每个核同时处理同样的代码,会有什么问题?
25、介绍堆和栈以及区别
26、栈里面的数据如何存取
27、栈里面都放那些数据
28、代码段、BSS段以及他们里面都放那些数据
29、cache(详细到L1L2L3)
30、宏定义和内联函数的区别
31、变量初始化在哪个步骤完成
32、ARM核
33、linux的RTOS?

34、线程死锁的原因及如何避免
35、QT的信号和槽底层原理
36、FreeRTOS什么情况下会发生线程优先级翻转

37、tickless时,怎么计时
38、FreeRTOS移植步骤
39、怎么提高cache命中率
40、arm中断,linux中断

相关文章:

嵌入式笔试题+面试题

一、嵌入式笔试题 1) int a; 2) int *a; 3) int **a; 4) int a[10]; 5) int *a[10]; 6) int (*a)[10]; 7) int (*a)(int); 8) int (*a[10])(int); (1) 一个整型数 (2) 一个指向整型数的指针 (3) 一个指向指针的的指针&#xff0c;它指向的指针是指向一个整型数 (4) 一个有10个…...

【Go语言生态】

在Go语言生态中&#xff0c;以下工具和方法可以实现类似Laravel的dump()或Symfony的VarDumper的结构体美化打印和调试功能&#xff1a; 使用spew库 spew是Go社区广泛使用的结构化输出库&#xff0c;提供深度嵌套结构的可读性展示&#xff1a; import "github.com/davec…...

PyTorch——卷积操作(2)

二维矩阵 [[ ]] 这里面conv2d(N,C,H,W)里面的四个是 N就是batch size也就是输入图片的数量&#xff0c;C就是通道数这只是一个二维张量所以通道为1&#xff0c;H就是高&#xff0c;W就是宽&#xff0c;所以是1 1 5 5 卷积核 reshape 第一个参数是batch size样本数量 第二个参数…...

【JavaWeb】SpringBoot原理

1 配置优先级 在前面&#xff0c;已经学习了SpringBoot项目当中支持的三类配置文件&#xff1a; application.properties application.yml application.yaml 在SpringBoot项目当中&#xff0c;我们要想配置一个属性&#xff0c;通过这三种方式当中的任意一种来配置都可以&a…...

BSRR对比BRR对比ODR

✅ 三种操作方式的本质区别 寄存器功能原子操作特点BSRR同时支持置位(1)和复位(0)✔️ 是单指令完成任意位操作&#xff0c;无竞争风险ODR直接读写输出状态❌ 否需"读-改-写"&#xff0c;多线程/中断中需关中断保护BRR只能复位(0)✔️ 是仅清零功能&#xff0c;无置…...

ubuntu22.04安装taskfile

sh -c "$(curl --location https://taskfile.dev/install.sh)" -- -dsudo mv ./bin/task /usr/local/bin/测试 task --version...

记录被mybatis一级缓存坑的问题

背景 我之前有个方法需要多次调用数据库拿数据&#xff0c;由于每次查询数据比较少&#xff0c;所以我前期都是直接查数据库拿的&#xff0c;准备后面再改缓存 // 查询代码 假设在A方法中 List<LeftOrderType> leftOrderTypes orderTypeMapper.selectList(wrapper); …...

遥感影像建筑物变化检测

文章目录 效果1、环境安装2、项目下载3、数据集下载4、模型训练5、模型推理6、推理结果7、批量推理效果 1、环境安装 参考文章 搭建Pytorch的GPU环境超详细 win10安装3DGS环境(GPU)超详细 测试GPU环境可用 2、项目下载 https://gitcode.com/gh_mirrors/ch/change_detectio…...

【数据库】《DBA实战手记》- 读书笔记

《DBA实战手记》基本介绍 作者&#xff1a;薛晓刚 等出版时间&#xff1a;2024年6月出版社&#xff1a;机械工业出版社ISBN&#xff1a;9787111757665 本书是一本指导DBA进行数据库开发和运维的实用手册&#xff0c;本书共9章&#xff0c;包括漫谈数据库、如何提升数据库性能…...

多模态大语言模型arxiv论文略读(103)

Are Bigger Encoders Always Better in Vision Large Models? ➡️ 论文标题&#xff1a;Are Bigger Encoders Always Better in Vision Large Models? ➡️ 论文作者&#xff1a;Bozhou Li, Hao Liang, Zimo Meng, Wentao Zhang ➡️ 研究机构: 北京大学 ➡️ 问题背景&…...

汇编语言基础: 搭建实验环境

环境配置 1.Visual Studio 创建空项目 创建成功 2.平台框架改为为WIN32 右键点击项目 点击属性 点击配置管理器 平台改为Win32(本文使用32位的汇编) 3.生成采用MASM 在项目属性里点击"生成依赖项"的"生成自定义" 勾选 masm 4.创建第一个汇编程序 右…...

SIFT 算法原理详解

SIFT 算法原理详解 SIFT&#xff08;尺度不变特征变换&#xff0c;Scale-Invariant Feature Transform&#xff09;是一种经典的局部特征检测和描述算法&#xff0c;它能够在不同的尺度、旋转和光照变化下稳定地检测图像特征。SIFT 主要包括以下几个步骤&#xff1a;尺度空间极…...

基于springboot的益智游戏系统的设计与实现

博主介绍&#xff1a;java高级开发&#xff0c;从事互联网行业六年&#xff0c;熟悉各种主流语言&#xff0c;精通java、python、php、爬虫、web开发&#xff0c;已经做了六年的毕业设计程序开发&#xff0c;开发过上千套毕业设计程序&#xff0c;没有什么华丽的语言&#xff0…...

短剧系统开发文案:打造沉浸式互动娱乐新体验

一、项目背景 随着短视频与碎片化娱乐的兴起&#xff0c;短剧市场呈现爆发式增长。用户对剧情紧凑、节奏明快、互动性强的内容需求激增&#xff0c;传统影视平台已难以满足个性化与参与感需求。「XX短剧系统」应运而生&#xff0c;致力于打造集内容创作、分发、互动于一体的短…...

第十二节:第四部分:集合框架:List系列集合:LinkedList集合的底层原理、特有方法、栈、队列

LinkedList集合的底层原理 LinkedList集合的应用场景之一 代码&#xff1a;掌握LinkedList集合的使用 package com.itheima.day19_Collection_List;import java.util.LinkedList; import java.util.List;//掌握LinkedList集合的使用。 public class ListTest3 {public static …...

多模态大语言模型arxiv论文略读(104)

Talk Less, Interact Better: Evaluating In-context Conversational Adaptation in Multimodal LLMs ➡️ 论文标题&#xff1a;Talk Less, Interact Better: Evaluating In-context Conversational Adaptation in Multimodal LLMs ➡️ 论文作者&#xff1a;Yilun Hua, Yoav…...

【C++高级主题】多重继承下的类作用域

目录 一、类作用域与名字查找规则&#xff1a;理解二义性的根源 1.1 类作用域的基本概念 1.2 单继承的名字查找流程 1.3 多重继承的名字查找特殊性 1.4 关键规则&#xff1a;“最近” 作用域优先&#xff0c;但多重继承无 “最近” 二、多重继承二义性的典型类型与代码示…...

基于Android的一周穿搭APP的设计与实现 _springboot+vue

开发语言&#xff1a;Java框架&#xff1a;springboot AndroidJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7数据库工具&#xff1a;Navicat12开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;Maven3.6 系统展示 APP登录 A…...

机器学习——使用多个决策树

使用单一决策树的弱点之一是决策树对数据中的微小变化非常敏感&#xff0c;一个使算法不那么敏感或更健壮的解决方案&#xff0c;不是建立一个决策树&#xff0c;而是要建立大量的决策树&#xff0c;我们称之为树合奏。 在这个例子中&#xff0c;我们一直在使用最好的特性来分…...

C# 中的对话框与导航:构建流畅用户交互的完整指南

在现代应用程序开发中&#xff0c;良好的用户交互体验是成功的关键因素之一。作为.NET开发者&#xff0c;熟练掌握C#中的对话框与导航技术&#xff0c;能够显著提升应用程序的易用性和专业性。本文将全面探讨Windows Forms、WPF、ASP.NET Core和MAUI等平台下的对话框与导航实现…...

DeepSeek - 尝试一下GitHub Models中的DeepSeek

1.简单介绍 当前DeepSeek使用的人很多&#xff0c;各大AI平台中也快速引入了DeekSeek&#xff0c;比如Azure AI Foundary(以前名字是Azure AI Studio)中的Model Catalog, HuggingFace, GitHub Models等。同时也出现了一些支持DeepSeek的.NET类库。微软的Semantic Kernel也支持…...

【判断酒酒花数】2022-3-31

缘由对超长正整数的处理&#xff1f; - C语言论坛 - 编程论坛 void 判断酒酒花数(_int64 n) {//缘由https://bbs.bccn.net/thread-508634-1-1.html_int64 t n; int h 0, j 0;//while (j < 3)h t % 10, t / 10, j;//整数的个位十位百位之和是其前缀while (t > 0)h t…...

对称加密-非对称加密

目录 非对称加密算法的优缺点是什么&#xff1f; ​一、非对称加密的核心特点​ ​二、非对称加密的显著优点​ 1. ​解决密钥分发难题​ 2. ​支持数字签名​ 3. ​前向安全性​ 4. ​访问控制灵活性​ ​三、非对称加密的局限性​ 1. ​性能瓶颈​ 2. ​密钥长度要…...

【OCCT+ImGUI系列】011-Poly-Poly_Triangle三角形面片

Poly_Triangle 是什么&#xff1f; Poly_Triangle 是一个非常轻量的类&#xff0c;用于表示一个三角网格中的单个三角形面片。它是构成 Poly_Triangulation&#xff08;三角网格对象&#xff09;的基本单位之一。之后会写关于碰撞检测的相关文章&#xff0c;三角面片是非常重要…...

【机器学习基础】机器学习入门核心算法:Mini-Batch K-Means算法

机器学习入门核心算法&#xff1a;Mini-Batch K-Means算法 一、算法逻辑工作流程与传统K-Means对比 二、算法原理与数学推导1. 目标函数2. Mini-Batch更新规则3. 学习率衰减机制4. 伪代码 三、模型评估1. 内部评估指标2. 收敛性判断3. 超参数调优 四、应用案例1. 图像处理 - 颜…...

机器学习实战36-基于遗传算法的水泵调度优化项目研究与代码实现

大家好,我是微学AI,今天给大家介绍一下机器学习实战36-基于遗传算法的水泵调度优化项目研究与代码实现。 文章目录 一、项目介绍二、项目背景三、数学原理与算法分析动态规划模型遗传算法设计编码方案适应度函数约束处理算法参数能量消耗模型一泵房能耗二泵房能耗效率计算模…...

计算机视觉与深度学习 | 基于Matlab的门禁指纹识别与人脸识别双系统实现

系统架构 #mermaid-svg-d8CEMhB3dNDpJu8M {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-d8CEMhB3dNDpJu8M .error-icon{fill:#552222;}#mermaid-svg-d8CEMhB3dNDpJu8M .error-text{fill:#552222;stroke:#552222;}#…...

TypeScript 定义同步方法

在TypeScript中定义同步方法是一个常见的需求&#xff0c;尤其是在处理不涉及异步操作的情况下。本文将详细介绍如何在TypeScript中定义和使用同步方法&#xff0c;包括代码示例和详细解释。 一、定义同步方法 在TypeScript中&#xff0c;定义同步方法与JavaScript类似&#…...

debian12.9或ubuntu,vagrant离线安装插件vagrant-libvirt,20250601

系统盘: https://mirror.lzu.edu.cn/debian-cd/12.9.0/amd64/iso-dvd/debian-12.9.0-amd64-DVD-1.iso 需要的依赖包,无需安装ruby( sudo apt install -y ruby-full ruby-dev rubygems,后来发现不安装会有编译警告,还是安装吧 ) ,无需安装 zlib1g-dev liblzma-dev libxml2-de…...

【仿muduo库实现并发服务器】使用正则表达式提取HTTP元素

使用正则表达式提取HTTP元素 1.正则表达式2.正则库的使用3.使用正则表达式提取HTTP请求行 1.正则表达式 正则表达式它其实是描述了一种字符串匹配的模式&#xff0c;它可以用来在一个字符串中检测一个特定格式的字串&#xff0c;以及可以将符合特定规则的字串进行替换或者提取…...