C++笔试笔记1(4399 西山居 深信服 剑心互娱 快手)

news2024/11/25 18:54:29

写在前头,这里面只是我在做这些公司笔试时抄下来的一部分题,并不全,但我会尽量把我所抄的每道题的知识点都贴上


1. Linux下支持的IO多路复用,有selec、poll和epoll,但Windows下仅支持select。

2. 新版C++,智能指针不再推荐使用auto_ptr。

3.char数组和char*的区别:

#include<iostream>
#include<string>
#include<cstring>
using namespace std;
int main(){
    char str1[] = "abc";
    char str2[] = "abc";
    const char str3[] = "abc";
    const char str4[] = "abc";
    const char *str5 = "abc";
    const char *str6 = "abc" ;
    char *str7 = "abc";
    char *str8 = "abc";
    cout<<(str1==str2)<<endl;
    cout<<(str3==str4)<<endl;
    cout<<(str5==str6)<<endl;
    cout<<(str7==str8)<<endl;
    cout<<(str5==str7)<<endl;
    return 0;
}

打印结果是:
0
0
1
1
1

char * 更加类似于string类,而且重载了很多运算符如程序中的“==”,“<<”。
所以比较的是字符串的 内容 (重载的效果),而char[] 由于是没有重载——是默认效果,比较的是 地址

a、str1==str2比较的是地址,而不是内容;
b、每个数组对象都分配了自己的存储空间,地址各不相同;
c、指针变量并不分配存储区,而是指向常量“abc”所在的静态存储区,由于是指向同一个常量,所以str5,str6,str7,str8指向的地址相同

4.私有IP地址的范围:

在这里插入图片描述

5. 网络字节序一般采用的是大端

6. 指针的大小
相当于一个内存地址所占的内存大小。
在这里插入图片描述
在这里插入图片描述

#include<iostream>
#include<string>
#include<cstring>
using namespace std;
int main(){
    const char *str = "hello";
    char str2[] = "he";
    cout<<sizeof(str)<<endl;
    cout<<sizeof(str2)<<endl;
    cout<<sizeof("hello")<<endl;
    return 0;
}

输出结果为
8
3
6

7. 它们的区别:
在这里插入图片描述
这里有一个小技巧:一般先看const左边修饰什么,要是左边没有东西,才看右边。具体可以看这个视频
8.线程问题
在这里插入图片描述
在这里插入图片描述
通过fork创建子进程读时共享,写时复制,一开始时,父子进程共享同一块虚拟内存空间,当要写的时候,子进程复制父进程的虚拟内存空间,并把它映射到新的实际内存。
线程就不一样,共享虚拟内存空间,但栈和代码区不共享。每个线程处理各自负责的一部分。
在这里插入图片描述
在这里插入图片描述

在很多现代操作系统中,一个进程的(虚)地址空间大小为4G,分为系统(内核)空间和用户空间两部分,系统空间为所有进程共享,而用户空间是独立的,一般Windows进程的用户空间为2G。
一个进程中的所有线程共享该进程的地址空间,但它们有各自独立的(/私有的)栈(stack),Windows线程的缺省堆栈大小为1M。堆(heap)的分配与栈有所不同,一般是一个进程有一个C运行时堆,这个堆为本进程中所有线程共享,windows进程还有所谓进程默认堆,用户也可以创建自己的堆。
用操作系统术语,线程切换的时候实际上切换的是一个可以称之为线程控制块的结构(TCB),里面保存所有将来用于恢复线程环境必须的信息,包括所有必须保存的寄存器集,线程的状态等。

堆:是大家共有的空间,分全局堆和局部堆。全局堆就是所有没有分配的空间,局部堆就是用户分配的空间。堆在操作系统对进程初始化的时候分配,运行过程中也可以向系统要额外的堆,但是记得用完了要还给操作系统,要不然就是内存泄漏。
栈:是个线程独有的,保存其运行状态和局部自动变量的。栈在线程开始的时候初始化,每个线程的栈互相独立,因此,栈是thread safe的。操作系统在切换线程的时候会自动的切换栈,就是切换 ESP/EBP 寄存器。栈空间不需要在高级语言里面显式的分配和释放。

9.STL常见的容器
顺序容器(容器并非排序的,元素的插入位置同元素的值无关): vector:动态数组,内存连续,末端增删性能最佳,无序; deque:双向队列,内存连续,无序; list:双向循环链表,内存不连续(不支持随机存取),无序;
关联容器(元素是排序的,插入任何元素,都按相应的排序规则来确定其位置): set/multiset:红黑树,有序; map/multimap:红黑树,有序
容器适配器: stack:先进后出; queue:先进先出; priority_queue:优先级队列(内部维持某种有序,然后确保优先级最高的元素总是位于头部,最高优先级元素总是第一个出列)

10.%hu代表以 unsigned short格式输出整数

11.正则表达式
在线测试工具

在这里插入图片描述
?(问号) 加在一个字符后面,表示前面的这个字符出现0次或者1次,也就是可有可无的意思。

在这里插入图片描述
*(星号) 可以匹配0个或者多个字符,也就是上面的’b’要出现0次或者多次。

在这里插入图片描述
+(加号) 会匹配至少出现一次以上的字符。

在这里插入图片描述
{}(花括号) 可以指定字符出现次数的范围。上面是指定匹配’b’出现六次的。
在这里插入图片描述
上面的意思是我们希望’b’的出现次数在2到6之间。
在这里插入图片描述
如果希望’b’出现两次以上,我们可以之间省略这里的6。
这上面介绍的都是匹配一个字符的,如果我们想匹配多个字符的,可以采用用()(括号),把我们要匹配的字符括起来。如:
在这里插入图片描述

或运算符(|)
在这里插入图片描述

字符类:
例如我们想要匹配有abc组合起来的单词,我们可以用[](方括号)。
在这里插入图片描述
方括号里的内容代表要求匹配的字符只能取自于它们。
我们还可以在方括号里指定字符的范围。
在这里插入图片描述
a-z:表示所有的小写英文字符。

在这里插入图片描述
a-zA-z:表示所有的英文字符,包括大小写。

在这里插入图片描述
a-zA-z0-9:表示所有的英文字符和数字。

^(尖号运算符)
如果我们在方括号里的前面加一个 ^ ,就代表要求匹配除了尖号后面列出的那些以外的字符。如:
在这里插入图片描述
[ ^0-9 ] 表示所有的非数字字符(包括换行符)。

元字符:
在这里插入图片描述

12.

	char a[][5]={"abc","ijh","defg","opq"};   
	char* p = &a[1][1];   //&a[1][1]表示第二行的第二个元素的地址
	printf("%d %s %s",a[2]-a[0],&p[1],&p[5]);    //a[2]表示的是第三行的首地址,a[0]表示的是第一行的首地址,所以a[2]-a[0]为10(10个char)
												//&p[1]为"h\0",因为a[1][3]和a[1][4]为空,但也算一个字节,所以&p[5]的起始位'e'

在这里插入图片描述

13. C++中为什么要把源码分为头文件( *.h)和源文件( *.cpp)?
当一个源文件A要用到源文件B的函数时,只需要在自己的程序加上这个函数的声明,而且这个声明(函数类型、函数名和参数列表)要一样。当需要源文件B或者其他源文件中的多个函数时,这个时候就会很麻烦了,因为要确保源文件A要确保这些函数的函数签名的声明都正确,但这个是比较难做到的事,这个时候就需要有头文件来存放这些函数的声明。详细的可以看这篇博文

14. 数组定义为"int a[4][5]";下列哪个是不正确的()
A.* a B.* (*(a+2)+3) C.&a[2][3] D.++a
答案是D。
A . * a 之后得到的值是一个地址,这个值跟就是数组a的首地址,不过意义不一样,a相当于一个二级指针,指向一个4行5列的二维数组,而 *a是一个一级指针,指向一个有5个元素的数组首地址。
B. 这是二维数组的另外一种元素索引方式,不过多解释。
C. 取 第2行第3列元素首地址。
D. 语法有错误。指针可以++操作,而数组名也可以转化为指向第一个元素的指针,但是为什么数组名不能++操作呢?因为定义了一个数组,那么这个数组的地址就是固定的了。int a[4][5],那么a的地址是固定的,相当于 int **const类型,改变了a的指向就会出错。

15. 主要考察运算符的优先级和&&的使用规则

	int a=1,b=2,c=3,m=4,n=5,k=6;
	(a=m>k)&&(b=n>k);
	cout<<a<<" "<<b; 

输出:
0 2

运算符优先级:
在这里插入图片描述

&&和||的使用规则:
&&左边为false,右边不执行;
||左边为true,右边不执行;

16. Linux哪个信号不能被捕获?(快手)
两种不能被忽略和被捕获的信号:SIGKILL和SIGSTOP

17. (快手)

#define VERSION(x,y) #x"."#y
#define MINS(x) x
#define MAXS(x) x

int main(){
	printf("%s\n",VERSION(MAXS(1),MINS(0)));
}

输出结果:
在这里插入图片描述
如果x是一个宏参量,那么#x可以把参数名转化为相应的字符串。该过程称为字符串化。
具体可以参考这篇文章

18. (快手)
int *p1 = new int[10]; // 10个未初始化int
int *p2 = new int[10] (); // 10个值初始化为0的int
详情看这个

19. class的大小(快手)
看这个

20. poll之所以对fd数量没有限制是因为使用了链表(快手)。
select一般限制的大小为1024,epoll也没有限制。

21. 友元函数不是成员函数,不能被继承,也不具备传递性(A是B的友元,B是C的友元,但A不是C的友元),没有this指针,但可以直接被调用。具体可以看这个

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

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

相关文章

OpenGL(一)——初识和搭建

目录 一、前言 二、概述 2.1 光学 2.2 三通道 2.3 上下文Context 2.4 渲染管线 2.5 着色器Shader 2.6 缓冲区和数组 三、安装 四、运行 五、库API 5.1 核心库GL 5.2 实用库GLUT 一、前言 渲染render是用软件从模型生成图像的过程&#xff0c;也表示编辑视频生成想达…

2023年第二十届五一数学建模竞赛题目 B题超详细思路

详细思路以及发布视频版&#xff0c;大家可以去观看&#xff0c;这里是对应的文字版&#xff0c;内容相差不多。 B题&#xff1a;快递需求分析问题 B题的问题难度不大&#xff0c;难点就在于后几问的模型求解。问题多、模型多、冗杂&#xff0c;就是B题的特点。 难度 A>B…

代码随想录训练营day56|583、两个字符串的删除操作;72、编辑距离;编辑距离总结篇

583、两个字符串的删除操作 给定两个单词 word1 和 word2&#xff0c;找到使得 word1 和 word2 相同所需的最小步数&#xff0c;每步可以删除任意一个字符串中的一个字符。 示例&#xff1a; 输入: "sea", "eat"输出: 2解释: 第一步将"sea"变…

vue3之vite创建h5项目1(创建vite项目、配置IP访问项目、配置多环境变量与预览打包生产效果、配置别名)

目录 vue3之vite创建h5项目101&#xff1a;创建vite项目02&#xff1a;配置IP访问项目 vite.config.ts03&#xff1a;配置多环境变量03-1&#xff1a;配置多环境变量之dev环境 .env.development03-2&#xff1a;配置多环境变量之test环境 .env.test03-3&#xff1a;配置多环境变…

精彩!openEuler 社区年度顶级会议发生了啥?

2023年4月20-21日&#xff0c;万涓汇流&#xff0c;奔涌向前&#xff0c;openEuler Developer Day2023(以下简称“ODD2023”)在上海以线上线下的方式圆满举办。 本次大会由开放原子开源基金会指导&#xff0c;中国软件行业协会、openEuler社区、边缘计算产业联盟共同主办&#…

移动端Touch事件点击穿透

文章目录 移动端Touch事件点击穿透问题原因解决阻止默认行为目标元素延迟隐藏 移动端Touch事件点击穿透 问题 在发生触摸动作约300ms之后&#xff0c;移动端会模拟产生click动作&#xff0c;如果touch事件隐藏了原来元素 则click总作用到它底下的具有点击特性的元素&#xff…

高铁列车粒子群算法及改进粒子群算法多目标单目标运行优化设计

问题介绍 根据表1、2、3 所列数据&#xff0c;以能耗、运行时间、舒适性为目标分别设计列车运行速度—距离曲线&#xff1b;完成单目标以及多目标优化下的列车运行对比&#xff1b;选择其中一种方案&#xff0c;设计列车速度跟踪控制算法并进行性能分析。 1 列车参数设置表优化…

陶渊明最有名的10首诗,闲适美好

他是中国第一位田园诗人&#xff0c;被誉为“古今隐逸诗人之宗”、“田园诗派之鼻祖”。 他是诗人、辞赋家、散文家。 他是陶渊明。 欧阳修&#xff1a;晋无文章&#xff0c;唯陶渊明《归去来兮辞》。 陶渊明不为五斗米折腰&#xff0c;挂冠而去&#xff0c;给后世留下一段…

浅谈软件测试工程师的技能树

软件测试工程师是一个历史很悠久的职位&#xff0c;可以说从有软件开发这个行业以来&#xff0c;就开始有了软件测试工程师的角色。随着时代的发展&#xff0c;软件测试工程师的角色和职责也在悄然发生着变化&#xff0c;从一开始单纯的在瀑布式开发流程中担任测试阶段的执行者…

基于H3Core分区的司机轨迹实时存储-技术方案

1、背景 由数据分析师提出的需求&#xff0c;需要分析每10s各个区域&#xff08;颗粒度到H3Code 8级 面积约0.7平方公里&#xff09;的司机分布情况&#xff0c;实现准实时的区域司机分布。 H3Code的概念可以参考以下博客&#xff1a; Uber H3简单介绍_Scc_hy的博客-CSDN博客…

【Python学习 】Python的模块或py文件导入

目录 一、前言 二、python项目中导入模块&#xff08;py文件&#xff09;的几种方式 1、直接将py文件放到默认的库位置&#xff08;特点&#xff1a;高效&#xff09; 2、将文件放到创建的库位置&#xff08;特点&#xff1a;方便管理&#xff09; 3、将模块&#xff08;模…

OpenAI私有自然语言处理模型、ChatGPT官方模型、百度智能云UNIT模型定制三者的使用方式、应用场景及区别

目录 前言 1、ChatGPT私有自然语言模型数据响应 1.1、私有模型列表 1.2、搭建属于自己的 WEB AI 应用 1.3、模型介绍及使用场景 1.3.1、text-embedding-ada-002模型 1.3.2、davinci模型 2、ChatGPT官方模型 2.1、OpenAI GPT-4介绍 2.2、能力 2.3、优势 2.4、官方模…

MySQL和Redis如何保证数据一致性?

前言 由于缓存的高并发和高性能已经在各种项目中被广泛使用&#xff0c;在读取缓存这方面基本都是一致的&#xff0c;大概都是按照下图的流程进行操作&#xff1a; 但是在更新缓存方面&#xff0c;是更新完数据库再更新缓存还是直接删除缓存呢&#xff1f;又或者是先删除缓存再…

日撸 Java 三百行day40

文章目录 day40 小结1.回顾2.​​面向对象思想3.收获4.联系与区别5.不足 day40 小结 1.回顾 这10天主要从图的存储结构和图的应用方面进行了学习&#xff0c;在实现不同的存储结构都借助了矩阵来实现。首先&#xff0c;再回过去看这些代码&#xff0c;平时自己也写过许多业务…

R语言的贝叶斯时空数据模型实践技术应用

时间&#xff0d;空间数据&#xff08;以下简称“时空数据”&#xff09;是最重要的观测数据形式之一&#xff0c;很多科学研究的数据都以时空数据的形式得以呈现&#xff0c;而科学研究目的可以归结为挖掘时空数据中的规律。另一方面&#xff0c;贝叶斯统计学作为与传统统计学…

SystemView的使用教程(基于FreeRTOS的配置)

目录 1.添加文件 2.配置修改 3.连接运行 4.常见问题 SystemView 是一个可以在线调试嵌入式系统的工具&#xff0c;它可以分析有哪些中断、任务执行了&#xff0c;以及这些中断、任务执行的先后关系。还可以查看一些内核对象持有和释放的时间点&#xff0c;比如信号量、互斥…

10款比较好用的网页设计工具

网页设计软件的轻量化和在线协作已成为当前网页制作软件的发展趋势。网页设计并不容易&#xff0c;易于使用的网页UI设计软件更难找到。随着网络的快速发展&#xff0c;网站迅速崛起&#xff0c;网页设计也很受欢迎。网页设计软件即时设计是一种在线协作设计工具&#xff0c;深…

Github为开发者打造的AI代码编写建议插件

仓库&#xff1a; GitHub - github/copilot.vim: Neovim plugin for GitHub Copilot 特性&#xff1a; GitHub Copilot Your AI pair programmer GitHub 目录 代码建议 付费使用 专注于解决问题 支持常用IDE ​在不熟悉的领域自信地编写代码 GitHub Copilot使用Open…

python smtplib.SMTP_SS发邮件提示550, b‘The “From“ header is missing or invalid

发现网站不能注册新用户&#xff0c;报错提示&#xff1a;(550, b’The “From” header is missing or invalid. Please follow RFC5322, RFC2047, RFC822 standard protocol. https://service.mail.qq.com/detail/124/995.) 定位是注册时不能发邮件验证导致。QQ邮箱的From格式…

使用 Luckysheet 可实现 Web 的 Excel

一、写在前面 工作中会遇到excel的导入和导出&#xff0c;换个角度看&#xff0c;假如有个 web 版本的excel &#xff0c;且能上传现有的&#xff0c;修改编辑后再下载也是个不错的方案。 Luckysheet 是实现 web版Excel的一个优秀的框架。 Luckysheet &#xff0c;一款纯前端类…