C++基础基础基础杂谈,面试理解,看看就行,有不对欢迎指出

news2024/9/20 1:24:31

20240321 面试

今天面了一家公司,遇到几个之前没有遇到的问题,回答得不是特别好,对此进行归纳整理,顺道吐槽一下,最近西安的公司是真的一言难尽啊,有好的公司推荐下小弟我。

        联系方式 19105695348

1、多线程

对多线程有了解吗,讲一下多线程对数据的处理。

       (扯得有点杂,因为不知道怎么系统回答这个问题。)

        首先,讲多线程就要提到多进程。进程是操作系统调度的基本单元,进程的模型称为PCB,里面包括虚拟内存模型,进程调度优先级等信息(回答的不好,详见下图,图片来源:五分钟扫盲:进程与线程基础必知 - 知乎 (zhihu.com))。对于操作系统来说,对进程进行调度和管理,对于多任务来说,可以使用多进程,但是进程的调度对于性能损耗来讲过于庞大,并且可能某些微形任务,无需使用进程进行调度,由此衍生出来线程。

        线程是轻量级的,一个进程包含多个线程,进程对线程进行管理,线程有自己的局部变量,栈空间,同时线程间共享虚拟内存模型,对于多个线程间共享数据,需要考虑到数据的一致性访问问题,若存在多个线程,且存在一个线程对数据进行写操作,可能会导致其他线程同时写或读错误,导致数据不一致问题。

        线程间对于共享数据,存在同步和互斥,解决线程间对数据访问的安全问题,可以使用锁、条件变量、信号(signal)解决。(面试官提到内核的 handler_route,不知道是社么东西,百度搜索说是Android的,不晓得是不是同一个东西;还问我有没有其他的东西,我是暂时不知道了)

补充一下:进程间通信方式和写时拷贝(想要了解的可以看一下之前的文章Linux 系统编程--进程_线程的pcb是否相同-CSDN博客)

        1)、管道        2)、共享内存        3)、消息队列        4)、信号量        5)、Socket

进程和子进程的共享数据(写时拷贝)简单说一下:

        父进程通过 fork() 开辟子进程时,子进程和父进程共享父进程的PCB,在进程需要进行写操作修改时,会先在自己的内存模型开辟一段空间,将需要修改的数据建立映射关系,然后再属于子进程自己的PCB上进行数据更改。

2、指针和数组(一般都是问指针和引用,这个之前没有系统整理过回复的不是特别好)

        C语言的对象有三种分配方式,静态区、栈、堆

        对于数组而言,一般讲的是栈数组,比如在函数内部使用 int a[10] = {1,2,3,4,5....}; 定义一个数组a,a由编译器进行管理,在函数调用结束后,a的生命周期随之结束;对于指针而言,一般是使用 malloc 和 new 向操作系统申请堆空间的时候,会用到指针,申请到的空间的位置就是在堆上,然后返回给指针变量,生命周期在申请时开始,随进程结束,因此我们需要及时使用 delete 和 free 进行内存释放,防止内存泄漏。

        对于运算符sizeof而言,指针的大小随操作系统,32位操作系统对应4个字节,64位操作系统对应8个字节,且数组+1,跨度为整个数组的长度,即 int a[10],int * b = a + 1,那么 b - a = 40(32位系统),int a* = new int(10),int * b = a + 1,那么 b - a = 1;

        数组的首元素的地址,其实就是一个指针。想到一个题外话,说栈为什么是高地址向低地址增长的? 运用数组可以比较巧合的解释,栈的数据结构是后进先出,数组是返回一个指向首地址的指针,申请一段内存,返回首地址,刚好对应栈顶。。。

       当然对于数组而言,我们也可以使用指针数组,指针指向堆内存,但是这个时候数组是存储在栈上的(面试官纠正说是在堆上的,我试过在函数内部声明一个指针数组和普通数组,发现连个数组的首地址相差不多,应该都是栈上的,只不过里面存储的指针,可以将指针指向堆内存)

        对于指针而言,指向数组首地址时,可以使用指针+1,即指向数组的第二个元素。

最后问了一个 1M 的空间,使用指针还是使用数组呢,我理解错了,以为考察堆和栈的区别,就说,对于1M的空间,可以使用栈进行管理,毕竟安全,不用手动进行管理内存,在一个栈的访问效率较高。其实就是字面意思,问我指针还是数组,我回答的指针,搞不灵清,好像没有特别大的区别吧,数组底层也是用的指针。

3、标准的C是不支持函数重载的,怎么实现

        这个我记得C是支持重载的, 就说没有思路(平常用的都是IDE,VISUAL STUDIO,里面使用的cpp的编译器,纯C的编译器接触较少,没有怎么考虑到)。面试官打算过了,我问了一嘴,提示我说函数指针,我一下秒懂。用函数指针数组呀!然后巴拉巴拉开始讲,C的文件隔离的,使用静态函数,将函数名限定在本文件内,然后声明一个全局的函数指针数组变量,将静态函数放到全局的函数指针数组变量中。但其实是不严谨的。仔细思考一下,静态的函数指针应该放到静态的函数指针数组变量(验证了一下可行的,unbelievable)

        拓展一下,c里面的函数编译后的样子,在看看cpp函数编译后的样子,就知道C不支持函数重载了。

        再扩展一下,使用宏啊!!!

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

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

相关文章

LeetCode-60题:排列序列解法二(原创)

【题目描述】 给出集合 [1,2,3,...,n],其所有元素共有 n! 种排列。按大小顺序列出所有排列情况,并一一标记,当 n 3 时, 所有排列如下:"123" 、"132" 、"213" 、"231"、"312"、…

element-ui实现证件照上传预览下载组件封装

element-ui实现证件照上传预览下载组件封装 效果&#xff1a; 参数说明 我只写了两个参数&#xff0c;后续有需求再对其组件进行丰富~ 参数说明fileListProp用来存储上传后后端返回的图片UR了uploadUrl图片上传反悔的URL后端接口地址 父组件调用&#xff1a; <au-upload…

OSPF-1类Router LSA学习

前面我们又复习了一遍OSPF概述&#xff0c;在OSPF建立关系后有几种交互报文&#xff0c;通过LSU类型报文包含LSA信息实现路由信息传递&#xff0c;常见了1、2、3、4、5、7类LSA&#xff0c;分别对应不同功能使用。这里先看下1类LSA-Router LSA。 一、LSA概述 LSA&#xff0c;全…

vscode中断无法识别npm的命令解决方案

在cmd中可以正常执行npm -v等指令,但是在vs code终端中,无法执行npm -v,node -v等指令 出现报错&#xff1a; 解决办法&#xff1a; 方法一&#xff1a;【右键单击Vscode】以【管理员身份运行】&#xff0c;【重启Vscode】&#xff08;这种办法每次打开都用管理员身份比较麻烦…

【实例】React 组件传值方法: Props、回调函数、Context、路由传参

React原始传值方法 借用状态管理库的传值见下篇文&#xff1a;MobX 和 Redux 【实例】React 状态管理库 MobX Redux 入门及对比 文章目录 React原始传值方法父组件->子组件 props子组件->父组件 回调函数Context路由传值 父组件->子组件 props 父组件可以通过属性&a…

字符串筛选排序 - 华为OD统一考试(C卷)

OD统一考试(C卷) 分值: 100分 题解: Java / Python / C++ 题目描述 输入一个由n个大小写字母组成的字符串, 按照 ASCII 码值从小到大的排序规则,查找字符串中第 k 个最小ASCII 码值的字母(k>=1) , 输出该字母所在字符串的位置索引(字符串的第一个字符位置索引为0) 。…

电源配小了,是不是容易烧?是的!

电源小的话会不会容易烧毁&#xff1f; 是的。 功率电压*电流。 随着功率增大&#xff0c;电压不变&#xff0c;电流增大&#xff0c;发热量增大&#xff0c;可能会烧毁。 今天给大家推荐一款650w的电脑电源&#xff0c;不过在推荐之前&#xff0c;首先要确认自己的电脑功耗…

OpenCV4.9.0在Android 开发简介

查看&#xff1a;OpenCV系列文章目录&#xff08;持续更新中......&#xff09; 上一篇&#xff1a;使用 Clojure 进行 OpenCV 开发简介 下一篇&#xff1a;暂无 引言&#xff1a; OpenCV是一个跨平台计算机视觉库&#xff0c;广泛用于图像处理、计算机视觉和机器学习等领域…

【翻译】Attentive Pooling Networks

摘要&#xff1a; 在这项工作中&#xff0c;我们提出了注意力池化&#xff08;AP&#xff09;&#xff0c;一种用于判别模型训练的双向注意力机制。在使用神经网络进行成对排序或分类的背景下&#xff0c;AP使得池化层能够意识到当前的输入对&#xff0c;使得两个输入项的信息…

AI系统性学习03—ChatGPT开发教程

文章目录 1、OpenAI关键概念⭐️2、OpenAI SDK介绍3、OpenAI API KEY&API 认证3.1 REST API安全认证 4、OpenAI模型⭐️4.1 模型分类4.2 GPT44.3 GPT-3.54.4 Embeddings 5、OpenAI快速入门6、Function calling(函数调用)⭐️⭐️⭐️6.1 应用场景6.2 支持function calling的…

稀碎从零算法笔记Day23-LeetCode:相同的树

题型&#xff1a;二叉树的遍历、链表 链接&#xff1a;100. 相同的树 - 力扣&#xff08;LeetCode&#xff09; 来源&#xff1a;LeetCode 题目描述 给你两棵二叉树的根节点 p 和 q &#xff0c;编写一个函数来检验这两棵树是否相同。 如果两个树在结构上相同&#xff0c;…

ERP系统在企业管理中的重要作用

效率和盈利能力是企业在商业领域取得成功的两大关键要素。企业希望以尽可能高效的方式执行必要的、有利可图的业务流程&#xff0c;但又需要在保持最低运营成本的同时最大化企业的底线利润。要实现这种高效和高盈利的水平&#xff0c;企业需要扩展其业务流程管理策略&#xff0…

python网络爬虫实战教学——urllib的使用(3)

文章目录 专栏导读1、urlsplit2、urlunsplit3、urljoin4、urlencode 专栏导读 ✍ 作者简介&#xff1a;i阿极&#xff0c;CSDN 数据分析领域优质创作者&#xff0c;专注于分享python数据分析领域知识。 ✍ 本文录入于《python网络爬虫实战教学》&#xff0c;本专栏针对大学生、…

三级数据库技术考点(详解!!)

1、 答疑:【解析】分布式数据库系统按不同层次提供的分布透明性有:分片透明性;②位置透明性;③局部映像透明性&#xff0c;位置透明性是指数据分片的分配位置对用户是透明的&#xff0c;用户编写程序时只需 要考虑数据分片情况&#xff0c;不需要了解各分片在各个场地的分配情…

CMake学习(上)

1. CMake概述 CMake 是一个项目构建工具&#xff0c;并且是跨平台的。关于项目构建我们所熟知的还有Makefile&#xff08;通过 make 命令进行项目的构建&#xff09;&#xff0c;大多是IDE软件都集成了make&#xff0c;比如&#xff1a;VS 的 nmake、linux 下的 GNU make、Qt …

关于Rust的项目结构的笔记

层级 PackageCrateModulePath Package cargo的特性, 构建、测试、共享Crate 组成: 一个 Cargo.toml 文件, 描述了如何构建这些 Crates至少包含一个 crate最多只能包含一个 library crate可以包含任意个 binary crate cargo new demo-pro 会产生一个名为 demo-pro 的 Packa…

蓝桥杯-礼物-二分查找

题目 思路 --刚开始想到暴力尝试的方法&#xff0c;但是N太大了&#xff0c;第一个测试点都超时。题目中说前k个石头的和还有后k个石头的和要小于s&#xff0c;在这里要能想到开一个数组来求前n个石头的总重&#xff0c;然后求前k个的直接将sum[i]-sum[i-k-1]就行了&#xff0…

Vue+SpringBoot打造快乐贩卖馆管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 搞笑视频模块2.3 视频收藏模块2.4 视频评分模块2.5 视频交易模块2.6 视频好友模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 搞笑视频表3.2.2 视频收藏表3.2.3 视频评分表3.2.4 视频交易表 四、系…

蓝桥杯-python-递归

递归&#xff1a;通过自我调用解决问题的函数 注意&#xff1a; #1.递归出口 #2.当前问题如何变成子问题 例子&#xff1a;利用递归写一个阶乘函数&#xff0c;F(n),求n的阶乘 def f(n):if n < 1:return 1ans n * f(n-1)return ans print(f(5)) 例子&#xff1a;汉诺塔…

大数据Doris(六十九):项目线上表现

文章目录 项目线上表现 一、查询响应时间