秋招面试题记录_半结构化面试

c++八股(可能问的多一点)

1.简单说说C++11语法特性

答:
1.auto以及decltype自动类型推导,避免手动声明复杂类型,减少冗长代码提升了可读性和安全性。

2.智能指针 自动释放内存

(具体说说)
有shared和unique 差异主要体现在所有权、内存开销、引用计数以及线程安全上。

(本质和实现原理)
智能指针本质是一个封装了一个原始C++指针的类模板,为了确保动态内存的安全性而产生的。实现原理是通过一个对象存储需要被自动释放的资源,然后依靠对象的析构函数来释放资源。

(说说shared和unique的区别)
在这里插入图片描述
3.nullptr来代替NULL来表示空指针,因为NULL实际上是整数0,而不是一个真正的指针类型,容易产生误导。

4.C++11中的移动语义右值引用(T&&)用于避免不必要的深拷贝,提高性能。它们允许对象的资源在右值或即将销毁的对象之间转移,而不是复制。例如,std::move 强制将对象转换为右值引用,从而实现高效的资源转移,减少内存分配和拷贝操作。移动构造函数和移动赋值运算符是实现这一功能的关键。

(为什么要引入右值引用?)右值引用是为一个临时变量取别名,它只能绑定到一个临时变量或表达式(将亡值)上。实际开发中我们可能需要对右值进行修改(实现移动语义时就需要)而右值引用可以对右值进行修改。

(左值引用和指针的区别?)
是否初始化:指针可以不用初始化,引用必须初始化 这里要区分初始化和声明的差异
本质不同:指针是一个变量,拥有自己的内存空间,引用是对被引用的对象取一个别名,引用和被引用对象占同一个空间。

5.lambda表达式

6.std::thread 多线程库的支持

7.范围for循环

2.说说面向对象的三大特性及其意义

封装 隐藏实现细节 实现模块化
继承 不修改类的情况下实现代码重用和扩展
多态 一个接口多种形态 为了代码扩展和重用性 分为静态多态和动态多态 分别用函数重载和虚函数重写实现

虚函数是怎么实现的?它存放在哪里在内存的哪个区?什么时候生成的

虚函数通过虚函数表和虚函数指针来实现的。虚函数表本质上就是一个由指针构成的数组,每个元素中的指针,即虚函数指针,会指向一个虚函数重写的实现代码。
虚函数表存放在静态存储区,在编译期就会生成。虚函数指针存放在实现该虚函数的对象的内存布局中,对象的内存是堆或栈,它就在哪里。

Static关键词的作用?

static 关键字有三个主要作用:

局部变量:在函数内部,static 局部变量只初始化一次,且在函数调用结束后仍然保留其值。

全局变量/函数:在文件内部,static 限制全局变量或函数的作用域,使其仅对当前文件可见。

类成员:在类中,static 成员变量或函数属于类本身而非某个对象,可以不通过对象访问(
int MyClass::count = 0;)。

贴个代码理解第三点:

#include <iostream>

class MyClass {
public:
    // 静态成员变量,属于类本身
    static int count;

    // 构造函数,每创建一个对象,count 就增加1
    MyClass() {
        count++;
    }

    // 静态成员函数,用于访问或修改静态成员变量
    static void showCount() {
        std::cout << "Count: " << count << std::endl;
    }
};

// 初始化静态成员变量
int MyClass::count = 0;

int main() {
    // 在没有创建对象的情况下,直接通过类名访问静态成员函数
    MyClass::showCount();  // 输出: Count: 0

    MyClass obj1;
    MyClass obj2;
    
    // 可以通过类名或者对象访问静态成员
    obj1.showCount();  // 输出: Count: 2
    MyClass::showCount();  // 输出: Count: 2

    return 0;
}

typedef和define有什么区别?

typedef 用于定义类型别名,遵循编译器检查.#define 是预处理宏替换,直接文本替换,无类型检查。

简单说说final、extern、const、voliate的作用

final 防止继承 保证类不再扩展
extern 跨文件全局变量
const 定义常量
voliate 防止意外修改值 避免编译器优化

说说指针常量和常量指针

指针常量是指针本身是一个常量,指针指向的地址不可变 指向的对象值可以修改
常量指针是一个指向常量的指针,指向可以指向其他对象,指向的对象的值不可以改变

友元是什么?

友元(friend)是一个能够访问类的私有和保护成员的函数或类。

如何解决菱形继承的问题?

菱形继承发生在两个派生类从同一个基类继承,且最终有一个派生类同时继承两个派生类,导致重复继承
用虚基类,这样派生的是最后覆盖的虚函数。

如何将数据定义为寄存器变量?

关键字register register int a

有没有遇到内存泄漏的情况 如何处理的?

为什么不全用mmap分配内存?

mmap将文件映射到内存空间,作为一个系统调用的分配内存的手段,必然伴随着大量用户态和内核态的切换,这对小内存块的分配和释放非常不利,因此mmap知识和大内存块的分配

为什么不全用brk分配内存?

brk所操作的是堆的内存空间。堆内存分配往往会导致内存碎片,尤其是当内存频繁分配和释放时,连续的堆空间难以保持。这会影响性能。

define和const的区别是什么?

编译阶段:define是在编译预处理阶段进行简单的文本替换,const是在编译阶段确定其值

安全性:define定义的宏常量没有数据类型,只是进行简单的替换,不会进行类型安全检查;const定义的常量是有类型的,是要进行类型判断的

内存占用:define定义的宏常量,在程序中使用多少次就会进行多少次替换,内存中有多个备份,占用的是代码段的内存;const定义常量占用静态存储区域的空间,程序运行过程中只有一份

调试:define定义的宏常量不能调试,因为在预编译阶段就已经进行替换了;const定义的常量是可以进行调试的。

程序运行的步骤

预处理 编译 汇编 链接

17.class与struct的区别

默认继承权限不同:class默认继承的是private继承,struct默认是public继承。

C++保留struct关键字,原因是保证与C语言的向下兼容性,为了保证百分百的与C语言中的struct向下兼容,C++把最基本的对象单元规定为class而不是struct,就是为了避免各种兼容性的限制。

锁的底层机制是什么?

锁的底层原理是通过硬件或操作系统提供的原子操作,如CAS,即Compare And Swap,就是每一个线程从主内存复制一个变量副本后,进行操作,然后对其进行修改,修改完后,再刷新回主内存前。再取一次主内存的值,进行比较,是否一样,如果不一样,说明有其他线程修改,本次修改放弃,重试。

Linux八股(可能问的多一点)

数据库八股(可能问的多一点)

另外三大件 计算机组成原理、操作系统、计算机网络

数据结构与算法

多线程与webserver后端知识

音视频八股

结构化面试

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Tesseract OCR 安装

Tesseract OCR 的安装步骤因操作系统的不同而有所区别。以下是针对 Windows、macOS 和 Linux 系统的详细安装指导。 1. Windows 步骤&#xff1a; 下载 Tesseract 安装程序 访问 Tesseract GitHub Release 页面。下载最新版本的安装程序&#xff08;例如 .exe 文件&#xff0…

【小趴菜前端实习日记5】

实习日记5 一、vue3中如何使用router&#xff08;获取this)二、ts中用object定义类型太宽泛导致Ts无法推断出正确类型三、动态设置日记封面失败vite动态引入静态资源1.方法一vue3父子组件生命周期执行顺序 2.方法二3.方法三 四、打包问题总结1.The import.meta meta-property i…

整理—Redis

目录 Redis底层的数据结构 ZSet用过吗 Zset 底层是怎么实现的 跳表是怎么实现的&#xff1f; Redis为什么使用跳表而不是用B树? 压缩列表是怎么实现的&#xff1f; Redis 中的 listpack 哈希表是怎么扩容的&#xff1f; String 是使用什么存储的 Redis为什么快&#xf…

最好的ppt模板网站是哪个?做PPT不可错过的18个网站!

现在有很多PPT模板网站&#xff0c;但真正免费且高质量的不多&#xff0c;今天我就分享主流的国内外PPT模板下载网站&#xff0c;并且会详细分析这些网站的优缺点&#xff0c;这些网站都是基于个人实际使用经验的&#xff0c;免费站点会特别标注&#xff0c;让你可以放心下载&a…

C++:模板(2)

目录 非类型模板参数 模板的特化 概念 函数模板特化 类模板特化 全特化 偏特化 模板的分离编译 分离编译的概念 模板的分离编译 ​编辑 模板总结 非类型模板参数 模板参数分为类型形参与非类型形参。 类型形参&#xff1a;在模板参数列表中&#xff0c;跟在class…

STM32L1x 片上温度传感器采用ADC及工厂校准数据提升测量温度精度

背景 由于项目临时需要温度数据&#xff0c;又不想改动硬件了&#xff0c;反正对温度精度要求不算太高&#xff0c;索性就用MCU片上温度传感器的温度&#xff0c;来替代了。这里自己根据网上帖子做了一些测试用例尝试测温&#xff0c;但是&#xff0c;效果都不理想。发现ST官方…

得物App3D博物馆亮相“两博会”,正品保障助力消费体验升级

近日&#xff0c;2024中国体育文化博览会、中国体育旅游博览会&#xff08;以下简称“两博会”&#xff09;在苏州国际展览中心盛大开幕。本次展会汇聚了众多国内外体育文化、体育旅游领域的顶尖企业和品牌&#xff0c;共同展示体育产业的发展成果和最新趋势。在C展馆C21展位&a…

Adams函数构建器(Function Builder)教程来了

学会使用函数构建器是在进行Adams仿真分析的必备技能&#xff0c;通过函数构建器可以查询和使用Adams的各种设计时函数和运行时函数&#xff0c;并能够构建用户自己的函数&#xff0c;大多数情况下的力或者驱动都不是简单的数字&#xff0c;而是需要函数来驱动的&#xff0c;那…

GEE数据集:2001年-2019年全球土地覆被估算(GLanCE)

目录 简介 数据集说明 空间信息 代码1 代码2 代码链接 APP链接 结果 引用 许可 网址推荐 知识星球 机器学习 简介 全球土地覆被估算&#xff08;GLanCE&#xff09; 全球土地覆被估算&#xff08;GLanCE&#xff09;数据集利用 30 米空间分辨率的大地遥感卫星图…

【拯救头痛大作战!有效应对焦虑引发的“脑内风暴”】

在这个快节奏、高压力的时代&#xff0c;焦虑似乎成了许多人难以摆脱的“隐形伴侣”。它不仅悄无声息地侵蚀着我们的心理健康&#xff0c;还可能引发一系列生理反应&#xff0c;其中最常见也最让人苦恼的便是——焦虑导致的头疼。今天&#xff0c;就让我们一起探索如何有效应对…

Linux介绍及常用命令

Linux 系统简介 1969 年&#xff0c;AT&T 公司的⻉尔实验室P MIT 合作开发的 Unix&#xff0c;在于创建⼀个⽤于⼤型、并⾏、多⽤户的操作系统Unix 的推⼴&#xff1a;从学校⾛进企业Unix 的版本要两个&#xff1a; AT&T System V ——就是俗称的 系统 5Berkley Soft…

【数据结构】-数组

数组 特点&#xff1a; 数组的地址连续&#xff0c;可以通过下标获取数据。 1. 数组扩容 步骤&#xff1a; $1. 创建一个比原来数组更长的新数组 $2. 让原来数组当中的数据依次复制到新数组当中 $3. 让arr指向新数组&#xff0c;原数组空间释放 2. 数组插入 2.1 最后位置…

kotlin 入门总结

目录 1、构造函数 2、数据类 data class&#xff0c; 3、object 单例类&#xff0c;相当于java线程安全的懒加载 4、companion object 伴生对象&#xff0c;类似于包装静态值的一个区域块 5、解构 6、空安全 7、条件语句 8、集合 9 属性和支持属性 属性 支持属性 10 …

HarmonyOS Next模拟器异常问题及解决方法

1、问题1&#xff1a;Failed to get the device apiVersion. 解决方法&#xff1a;关闭模拟器清除用户数据重启

【java】数组(超详细总结)

目录 一.一维数组的定义 1.创建数组 2.初始化数组 二.数组的使用 1.访问数组 2.遍历数组 3.修改数据内容 三.有关数组方法的使用 1.toString 2. copyOf 四.查找数组中的元素 1.顺序查找 2.二分查找binarySearch 五.数组排序 1.冒泡排序 2.排序方法sort 六.数组逆置…

redis的配置文件解析

我的后端学习大纲 我的Redis学习大纲 1.1.Redis的配置文件&#xff1a; 1.Redis的配置文件名称是&#xff1a;redis.conf 2.在vim这个配置文件的时候&#xff0c;默认是不显示行号的&#xff0c;可以编辑下面这个文件&#xff0c;末尾加上set nu&#xff0c;就会显示行号: 1.…

React源码03 - React 中的更新

03 - React 中的更新 React 中创建更新的方式&#xff1a; 初次渲染&#xff1a;ReactDOM.render、ReactDOM.hydrate 后续更新&#xff1a;setState、forceUpdate 1. ReactDOM.render() 先创建 ReactRoot 顶点对象然后创建 FiberRoot 和 RootFiber创建更新&#xff0c;使应用进…

Qt | http获取网页文件(小项目)

点击上方"蓝字"关注我们 ctrl+r 运行 URL可以自己替换一个试一试 【源码获取】 链接:https://pan.baidu.com/s/1QzHKZPXjkpx2p5TWUS_acA?pwd=5xsd 提取码:5xsd 01、QProgressDialog >>> QProgressDialog 是 Qt 框架中的一个类,主要用于显示一个进…

Java使用dom4j生成kml(xml)文件遇到No such namespace prefix: xxx is in scope on:问题解决

介绍addAttribute和addNamepsace: addAttribute 方法 addAttribute 方法用于给XML元素添加属性。属性&#xff08;Attributes&#xff09;是元素的修饰符&#xff0c;提供了关于元素的额外信息&#xff0c;并且位于元素的开始标签中。属性通常用于指定元素的行为或样式&#…

Golang | Leetcode Golang题解之第497题非重叠矩形中的随机点

题目&#xff1a; 题解&#xff1a; type Solution struct {rects [][]intsum []int }func Constructor(rects [][]int) Solution {sum : make([]int, len(rects)1)for i, r : range rects {a, b, x, y : r[0], r[1], r[2], r[3]sum[i1] sum[i] (x-a1)*(y-b1)}return Sol…