【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…...
Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例
使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件,常用于在两个集合之间进行数据转移,如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model:绑定右侧列表的值&…...
【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)
可以使用Sqliteviz这个网站免费编写sql语句,它能够让用户直接在浏览器内练习SQL的语法,不需要安装任何软件。 链接如下: sqliteviz 注意: 在转写SQL语法时,关键字之间有一个特定的顺序,这个顺序会影响到…...
UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)
UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中,UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化…...
C++八股 —— 单例模式
文章目录 1. 基本概念2. 设计要点3. 实现方式4. 详解懒汉模式 1. 基本概念 线程安全(Thread Safety) 线程安全是指在多线程环境下,某个函数、类或代码片段能够被多个线程同时调用时,仍能保证数据的一致性和逻辑的正确性…...
4. TypeScript 类型推断与类型组合
一、类型推断 (一) 什么是类型推断 TypeScript 的类型推断会根据变量、函数返回值、对象和数组的赋值和使用方式,自动确定它们的类型。 这一特性减少了显式类型注解的需要,在保持类型安全的同时简化了代码。通过分析上下文和初始值,TypeSc…...
Chromium 136 编译指南 Windows篇:depot_tools 配置与源码获取(二)
引言 工欲善其事,必先利其器。在完成了 Visual Studio 2022 和 Windows SDK 的安装后,我们即将接触到 Chromium 开发生态中最核心的工具——depot_tools。这个由 Google 精心打造的工具集,就像是连接开发者与 Chromium 庞大代码库的智能桥梁…...
提升移动端网页调试效率:WebDebugX 与常见工具组合实践
在日常移动端开发中,网页调试始终是一个高频但又极具挑战的环节。尤其在面对 iOS 与 Android 的混合技术栈、各种设备差异化行为时,开发者迫切需要一套高效、可靠且跨平台的调试方案。过去,我们或多或少使用过 Chrome DevTools、Remote Debug…...
【Elasticsearch】Elasticsearch 在大数据生态圈的地位 实践经验
Elasticsearch 在大数据生态圈的地位 & 实践经验 1.Elasticsearch 的优势1.1 Elasticsearch 解决的核心问题1.1.1 传统方案的短板1.1.2 Elasticsearch 的解决方案 1.2 与大数据组件的对比优势1.3 关键优势技术支撑1.4 Elasticsearch 的竞品1.4.1 全文搜索领域1.4.2 日志分析…...
热烈祝贺埃文科技正式加入可信数据空间发展联盟
2025年4月29日,在福州举办的第八届数字中国建设峰会“可信数据空间分论坛”上,可信数据空间发展联盟正式宣告成立。国家数据局党组书记、局长刘烈宏出席并致辞,强调该联盟是推进全国一体化数据市场建设的关键抓手。 郑州埃文科技有限公司&am…...
恶补电源:1.电桥
一、元器件的选择 搜索并选择电桥,再multisim中选择FWB,就有各种型号的电桥: 电桥是用来干嘛的呢? 它是一个由四个二极管搭成的“桥梁”形状的电路,用来把交流电(AC)变成直流电(DC)。…...
