【C++】面试题
1、都说c++是面向对象的语言,面向对象的三个特性能 [展开] 介绍一下吗?
封装:封装是一种集中管理的思想,把内部的数据和实现方法组合在一起,并且不对外暴漏内部的数据和实现方法,只对外提供几个接口来完成函数的调用和数据的操作,保证了数据的安全性和一致性。
继承:继承是指一个类可以继承另一个类的方法和数据,可以提高代码的复用性,建立类与类之间的关系。
多态:多态是指同一个方法对于不同的对象有不同的行为,提高了代码的灵活度。
2、多态的底层实现有了解过吗?
多态的底层是通过一个虚函数指针实现的,虚函数指针指向一块虚函数表,虚函数表当中存储的各个函数的地址,虚函数表是一个指针数组,虚函数表中存储的是函数指针,当一个表达式满足多态的时候,它确定类型的时候就不是在编译阶段,而是在运行阶段来判断是什么类型,然后根据不同的对象来调用虚函数表。
3、虚函数它底层又是怎么实现的?
当一个类中的函数被
virtual修饰之后,就会多出一个虚函数指针,虚函数指针指向虚函数表。
4、(场景一)有两个类它们的实例变量以及它们支持的函数方法完全相同,一个类实现了一个虚函数,它们有什么区别?它们生成一个实例对象的内存占用一样吗?
占用内存不一样,实现了虚函数就会多一个虚函数指针,会多出4/8字节的空间,内存占用不同。
5、(场景二)有四个类 B、C 继承 A,D 继承 B、C(多继承),A 中有一个 public 函数,然后 B、C 里面各自重写了,然后从 D 里面想要调用 B 或则 C 的实现要怎么调用呢?
直接用类域操作符
::,指定类域调用。
6、还是上述的场景,A 里边有一个 public 变量,B、C 是继承自 A 的,D 继承自 B、C,那么 D 里边又存储了几份 public 变量(一直在引导我,是一份、两份、三份)
这题需要分类讨论。
普通继承:两份(B、C当中各自一份)。
虚继承:一份,直接放在公共区。
7、malloc 跟 new 有什么区别呀?
1、malloc返回类型是(void*)需要手动强制类型转换。
2、malloc内存分配错误返回
NULL,而new是抛异常。3、new分配内存的同时会调用构造函数进行初始化,malloc需要手动初始化。
4、malloc分配内存的时候需要手动计算开多大的空间,new不需要。
5、new释放内存使用delete,malloc使用free。
6、new的底层也是去调用
operator new,在operator new当中也是调用malloc来实现内存分配的。
8、new 除了分配内存它还会比 malloc 还有其他额外的操作吗?
会调用构造函数进行初始化。
9、new 实际上是做了两件事嘛,一个是分配内存、一个是调用实例的构造函数,那有了解过 new 可以只进行一个操作嘛?比如只分配内存不调用构造函数、或者只调用构造函数不分配内存嘛?
不分配内存,只调用构造函数:定位new(
placement new)以及operator new。不调用构造函数,只分配内存:
new (std::nothrow) type。
10、计算下面两个结构体的sizeof是多少
struct {char A;char B;int C;
}struct {char A;int C;char B;
}
内存对齐问题。
第一个是8字节。
第二个是12字节。
11、看你写了对STL熟悉,那智能指针你有了解过嘛?
1、最早期的智能指针是
auto_ptr,但这种智能指针并没有完全实现了指针的功能,主要是实现了RAII的思想,以及权限转移。2、然后出现了
unique_ptr,这个智能指针的做法比较粗暴,不让拷贝,禁止调用拷贝构造。3、然后就是
shared_ptr,这个智能指针解决了原来的问题:一块地址只能被一个智能指针指向,否则就会导致同一块内存被释放两次。解决方法:利用引用计数。但依旧存在循环引用的问题。4、
weak_ptr,一个辅助性质的智能指针,用于解决循环引用的问题,让内部的指针变量用weak_ptr来表示,weak_ptr不会修改引用计数,所以能够很好的解决循环引用的问题。
12、举一个实际场景智能指针的例子?为什么用?怎么使用的?不用可以嘛?
在关于异常安全的时候就最好用智能指针。
比如以下代码:
#include<iostream> using namespace std;int div() {int a, b;cin >> a >> b;if (b == 0)throw invalid_argument("除0错误");return a / b; } void Func() {// 1、如果p1这里new 抛异常会如何?// 2、如果p2这里new 抛异常会如何?// 3、如果div调用这里又会抛异常会如何?int* p1 = new int;int* p2 = new int;cout << div() << endl;delete p1;delete p2; } int main() {try{Func();}catch (exception& e){cout << e.what() << endl;}return 0; }不使用智能指针,就会导致各种内存没有被释放,或者直接没有开空间的问题。
可以不用指针指针吗?可以,但是需要套好几层异常捕捉,太麻烦,代码的可读性也变得很低了。
13、刚才你提到了shared_ptr 底层是用一个引用计数来实现的共享,那还了解过其他的内存管理方式嘛?
JAVA中的内存自动回收机制,是通过比较复杂的一套算法来计算回收的时机,具体没有深入了解。
14、STL 里边常用的 vector 容器的扩容机制有了解过嘛?
扩容机制在不同平台不一样。
VS:1.5倍。
Linux:2倍。
扩容是重新开一片空间,然后把原来的内容拷贝过来,再销毁原来的空间。
15:扩容3倍可以嘛?
可以,但是可能会导致大量的空间浪费。
16:vector 的初始容量了解过嘛?什么时候会进行初次扩容?
在第一次添加元素的时候会进行扩容,第一个扩容一般会设置为8或者16。
相关文章:
【C++】面试题
1、都说c是面向对象的语言,面向对象的三个特性能 [展开] 介绍一下吗? 封装:封装是一种集中管理的思想,把内部的数据和实现方法组合在一起,并且不对外暴漏内部的数据和实现方法,只对外提供几个接口来完成函数…...
机器学习算法之-逻辑回归(1)
什么是回归 回归树,随机森林的回归,无一例外他们都是区别于分类算法们,用来处理和预测连续型标签的算法。然而逻辑回归,是一种名为“回归”的线性分类器,其本质是由线性回归变化而来的,一种广泛使用于分类问…...
JAVA多线程和并发基础面试问答(翻译)
JAVA多线程和并发基础面试问答(翻译) java多线程面试问题 1. 进程和线程之间有什么不同? 一个进程是一个独立(self contained)的运行环境,它可以被看作一个程序或者一个应用。而线程是在进程中执行的一个任务。Java运行环境是一个包含了不同的类和程序…...
正中优配:2023新股上市涨跌幅规则?新股上市涨跌幅限制为几天?
A股与美股不同,股票存在涨跌幅限制,那么,2023新股上市涨跌幅规矩?新股上市涨跌幅限制为几天?下面正中优配为我们预备了相关内容,以供参阅。 2023年新股上市涨跌幅存在以下规矩: 1、主板初次公开…...
如何查看线程在哪个cpu核上
1、ps -eLF查看PSR值 2、 taskset -pc $pid(进程/线程) 参考链接:https://blog.csdn.net/test1280/article/details/87993669...
【Vue前端】设置标题用于SEO优化
原文作者:我辈李想 版权声明:文章原创,转载时请务必加上原文超链接、作者信息和本声明。 文章目录 1.vue全局配置2.创建并暴露getPageTitle方法3.通过全局前置守卫设置title4.页面上引用title5.项目使用中英文翻译,title失效 1.vu…...
maven install
maven install maven 的 install 命令,当我们的一个 maven 模块想要依赖其他目录下的模块时,直接添加会找不到对应的模块,只需要找到需要引入的模块,执行 install 命令,就会将该模块放入本地仓库,就可以进…...
Vue.js2+Cesium1.103.0 七、Primitive 绘制航线元素
Vue.js2Cesium1.103.0 七、Primitive 绘制航线元素 用 Primitive 绘制航线元素,包括航点图标,航线线段,线段距离标注,航点序号,海拔标注,总航程等信息。 可同时绘制多条航线;可根据 id 清除指…...
Mybatis 源码 ④ :TypeHandler
文章目录 一、前言二、DefaultParameterHandler1. DefaultParameterHandler#setParameters1.1 UnknownTypeHandler1.2 自定义 TypeHandler 三、DefaultResultSetHandler1. hasNestedResultMaps2. handleRowValuesForNestedResultMap2.1 resolveDiscriminatedResultMap2.2 creat…...
RabbitMQ和JMeter,一个完美的组合!优化你的中间件处理方式
RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息中间件,它是基于Erlang语言编写的,并发能力强,性能好,是目前主流的消息队列中间件之一。 RabbitMQ的安装可参照官网( https://www.rabbitmq.c…...
WARNING: IPv4 forwarding is disabled. Networking will not work
当我在运行某条语句的时候 docker run -it -p 30001:22 --namecentos-ssh centos /bin/bash 提示 WARNING: IPv4 forwarding is disabled. Networking will not work. 解决: vim /usr/lib/sysctl.d/00-system.conf net.ipv4.ip_forward1 systemctl restart networ…...
SpringBoot复习:(40)@EnableConofigurationProperties注解的用法
一、配置文件: server.port9123 二、配置类: package cn.edu.tju.config;import com.mysql.fabric.Server; import org.springframework.boot.autoconfigure.web.ServerProperties; import org.springframework.boot.context.properties.EnableConfigu…...
Live Market是如何做跨境客户服务的?哪些技术赋能?
在面对不同的海外市场和用户群体时,如何进行有效地出海营销是跨境商家面临的挑战。其中消费者服务管理和卖家保障尤其关键,如何做好客户服务管理?包括处理好客户投诉,提升消费者满意度是所有跨境商家和品牌独立站卖家非常重视的问题。 在数字化浪潮席卷之下&#…...
2023年7月京东洗衣机行业品牌销售排行榜(京东数据分析软件)
2023年上半年,洗衣机市场表现平淡,同环比来看出货量都有一定程度的下滑。7月份,洗衣机市场仍未改变这一下滑态势。 根据鲸参谋电商数据分析平台的相关数据显示,7月份,京东平台洗衣机的销量为109万,环比下降…...
【0214】postgres后端进程session退出,如何通过日志分析其会话信息
文章目录 1. postgres进程session退出2. 开启日志记录postgres进程会话状态3. postgres进程会话结束,记录日志的实现原理1. postgres进程session退出 默认情况下,新建一个postgres后端进程会话(session),或是postgres进程正常/异常退出时,日志中没有很明显的记录用于说明…...
Rust 重载运算符|复数结构的“加减乘除”四则运算
复数 基本概念 复数定义 由实数部分和虚数部分所组成的数,形如a+bi 。 其中a、b为实数,i 为“虚数单位”,i -1,即虚数单位的平方等于-1。 a、b分别叫做复数a+bi的实部和虚部。 当b0时,a&…...
Oracle删除表空间
1.检查表空间状态 SELECT tablespace_name, status FROM dba_tablespaces;备注:tablespace_name表示删除表空间的名称,status为表空间的状态。如果状态为ONLINE,表示表空间当前正在使用,不能被删除。 2.关闭表空间 ALTER TABLE…...
Mysql - 配置Mysql主从复制-keepalived高可用-读写分离集群
目录 高可用: 为什么需要高可用呢? 高可用的主要作用: keepalived是什么?它用在哪里? 什么是VRRP协议,它的作用是什么? 搭建一个基于keepalived的高可用Mysql主从复制读写分离集群 一、项…...
Qt QLineEdit输入时限制,采用正则表达式
QLineEdit 正则 序言使用方法正则表达式使用例子 序言 老是有人在群里问这个,所以我干脆写一篇方便予人查看,很简单的小功能。 使用方法 Qt5 #include <QRegExpValidator> //#include "qvalidator.h"ui->lineEdit->setValida…...
【CSS】文本效果
文本溢出、整字换行、换行规则以及书写模式 代码: <style> p.test1 {white-space: nowrap; width: 200px; border: 1px solid #000000;overflow: hidden;text-overflow: clip; }p.test2 {white-space: nowrap; width: 200px; border: 1px solid #000000;ove…...
微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】
微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来,Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...
iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版分享
平时用 iPhone 的时候,难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵,或者买了二手 iPhone 却被原来的 iCloud 账号锁住,这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...
UE5 学习系列(三)创建和移动物体
这篇博客是该系列的第三篇,是在之前两篇博客的基础上展开,主要介绍如何在操作界面中创建和拖动物体,这篇博客跟随的视频链接如下: B 站视频:s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...
相机从app启动流程
一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...
Ascend NPU上适配Step-Audio模型
1 概述 1.1 简述 Step-Audio 是业界首个集语音理解与生成控制一体化的产品级开源实时语音对话系统,支持多语言对话(如 中文,英文,日语),语音情感(如 开心,悲伤)&#x…...
微信小程序云开发平台MySQL的连接方式
注:微信小程序云开发平台指的是腾讯云开发 先给结论:微信小程序云开发平台的MySQL,无法通过获取数据库连接信息的方式进行连接,连接只能通过云开发的SDK连接,具体要参考官方文档: 为什么? 因为…...
浅谈不同二分算法的查找情况
二分算法原理比较简单,但是实际的算法模板却有很多,这一切都源于二分查找问题中的复杂情况和二分算法的边界处理,以下是博主对一些二分算法查找的情况分析。 需要说明的是,以下二分算法都是基于有序序列为升序有序的情况…...
C++使用 new 来创建动态数组
问题: 不能使用变量定义数组大小 原因: 这是因为数组在内存中是连续存储的,编译器需要在编译阶段就确定数组的大小,以便正确地分配内存空间。如果允许使用变量来定义数组的大小,那么编译器就无法在编译时确定数组的大…...
Fabric V2.5 通用溯源系统——增加图片上传与下载功能
fabric-trace项目在发布一年后,部署量已突破1000次,为支持更多场景,现新增支持图片信息上链,本文对图片上传、下载功能代码进行梳理,包含智能合约、后端、前端部分。 一、智能合约修改 为了增加图片信息上链溯源,需要对底层数据结构进行修改,在此对智能合约中的农产品数…...
从 GreenPlum 到镜舟数据库:杭银消费金融湖仓一体转型实践
作者:吴岐诗,杭银消费金融大数据应用开发工程师 本文整理自杭银消费金融大数据应用开发工程师在StarRocks Summit Asia 2024的分享 引言:融合数据湖与数仓的创新之路 在数字金融时代,数据已成为金融机构的核心竞争力。杭银消费金…...
