C++面试十二连问(语言基础篇)

前言:

         C++开发讲究的是细分领域,越往后越没有人在意你是不是了解语言特性,但是对相关行业经验的要求就越高。作为初入行业的新人,在经验这块是比较欠缺的,相比之下,C++八股还是比较容易上手的,属于努努力就能学会的类型,作为年轻人还是再拼一把吧,少一点怨天尤人,多抓住每一个机会去尝试。

关于语言类型

C/C++是强类型还是弱类型,属于静态语言还是动态语言?

  • 强类型(依据:只允许以不丢失信息为前提的自动类型转换)

  • 静态(依据:数据类型在编译阶段检查)

那静态类型语言一定是类型安全的吗?

不一定。

首先看类型安全的定义:编程语言不允许错误的运算或转换发生。然而,静态语言检查的只是数据类型,这只是错误的一部分,并不是全部;而且也不能保证所有错误都能被捕捉到。两者没有必然联系。

C++的类型转换有哪些?

  • static_cast(用于明确定义的转换)

  • dynamic_cast(类继承结构中类型安全的对象指针向下转换)

  • const_cast(const->non const /volatile->non volatile)

  • reinterpret_cast(在位运算层面操作)

const 和volatile

const *p*const p的区别是什么?

const修饰的表示为常量,它的值不可修改。至于这两者的区别,要看const后面紧跟着的是什么:

  • const *pconst 后面紧跟着*,这个*是取值的意思,说明const用于修饰指针变量指向的内容,即该内容不可修改,但指针变量本身的值可以修改

  • *const p const紧跟着指针p本身,指的是指针变量值为常量,不可修改

谈谈你对volatile关键字的理解?

volatile是指“易变的”,它告诉编译器不要对与volatile有关的运算进行编译优化,并且为了防止前后读取数据不一致,是直接从内存中读取。

指针可以是volatile的吗?能举个例子吗?

可以,因为指针和普通变量一样也有可能发生意想不到的改变。

具体例子:中断服务子程序修改一个指向buffer的指针时,该指针需要用volatile修饰。

还有哪些情况会用到volatile?

  • 最常见的是多线程应用中被共享的变量

  • 并行设备的硬件寄存器

内存管理

堆和栈的区别?

这个问题涉及到内存的组织结构。内存大致划分为四个部分:

  • 栈(向下生长,往内存地址减小的方向)

  • 堆(向上生长)

  • 数据段

  • 代码段

其中:

  • 堆存放程序执行中动态分配的内存段,存放的对象是全局的。

  • 栈存放临时创建的局部变量、函数参数、函数返回地址等,存放的对象是局部的。

以下是一些可能被追问的问题:

  • 堆和栈的大小对比?栈通常远小于堆

  • 资源管理与分配方式?堆中资源由程序员管理,不连续的内存区域;栈中由编译器管理,连续的内存区域

  • 堆和栈的碎片问题?由于堆的内存不连续,频繁new又delete会,但栈不会。

你说说C++中的几个malloc有什么异同?

  • malloc(size_t size):动态分配size字节的空间

  • calloc(int num_elements, size_t size):动态分配num_elements*size字节的空间,并初始化为0

  • realloc(void *ptr, size_t size):重新调整之前调用 malloc 或 calloc 所分配的 ptr 所指向的内存块的大小.

具体方式如下:

  • ptr --。如果为空指针,则会分配一个新的内存块,且函数返回一个指向它的指针
  • size -- 内存块的新的大小,以字节为单位。如果大小为 0 ,且 ptr 指向一个已存在的内存块,则 ptr 所指向的内存块会被释放,并返回一个空指针

malloc和new的区别

  • malloc是C中的标准库函数;new是C++支持的运算符。两者都是针对堆空间的管理机制

  • 对于内置数据类型而言,两者等价

  • 对于非内置数据类型而言,malloc是函数,不在编译器控制权限内,因此需要new的帮忙

语言关键字特性

内联函数与宏的区别?

  • 宏由预处理器展开,内联函数在编译时展开

  • 内联函数会检查参数类型,因此更安全

断言的作用?

强制检查。如果某个表达式的值为假,会输出错误信息,并调用abort()结束程序

【小米篇】C++春招面试总结-覆盖C++面试核心考点​

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

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

相关文章

学习整理 docker

nexus 搭建nexus将其他pom、jar导入到nexus中

java 比Scanner 更高效的输入输出 BufferedWriter和`OutputStreamWriter

BufferedWriter bw new BufferedWriter(new OutputStreamWriter(System.out)); 当我们在 Java 中需要进行字符输出时,可以使用 BufferedWriter 和 OutputStreamWriter 的组合来实现。下面提供更多相关信息: BufferedWriter: BufferedWriter…

硬件接口介绍(一)常用接口及其测试

目录 一、引言 二、常用接口 ------>2.1、DIMM ------>2.2、DCIN ------>2.3、SDIO 三、以太网 ------>3.1、PHY ------>3.2、MAC ------>3.3、LAN 四、MIPI ------>4.1、MIPI CSI ------>4.2、MIPI DSI 五、HDMI 六、音频 ------>6…

fintuning chatglm3

chatglm3介绍 ChatGLM3-6B 是 ChatGLM 系列最新一代的开源模型,在保留了前两代模型对话流畅、部署门槛低等众多优秀特性的基础上,ChatGLM3-6B 引入了如下特性: 更强大的基础模型: ChatGLM3-6B 的基础模型 ChatGLM3-6B-Base 采用…

ic基础|时钟篇06:crg到底是什么?一文带你了解crg中的时钟系统!

大家好,我是数字小熊饼干,一个练习时长两年半的ic打工人。我在两年前通过自学跨行社招加入了IC行业。现在我打算将这两年的工作经验和当初面试时最常问的一些问题进行总结,并通过汇总成文章的形式进行输出,相信无论你是在职的还是…

Material Design 风格的 UI 框架 Vuetify 使用初体验

不知道国外为什么这么多使用 vuetify UI 框架的,简单使用下来发现很多坑。持续更新 1、input 和 button 设置相同的 density,但是大小却不一样; 2、表格功能过于简单,没有列拖拽,只有左侧固定列没有右侧固定列&#…

基于Swing和socket实现双向通讯案例

server代码: import javax.swing.*; import java.awt.*; import java.io.*; import java.net.ServerSocket; import java.net.Socket;public class Server extends JFrame {private JTextArea messageArea;private JTextField textField;private PrintWriter write…

像艺术家一样工作:前言

名人名言 “艺术是盗窃” —— 巴勃罗毕加索 “不成熟的诗人模仿,成熟的诗人偷窃;对于偷窃得到的艺术,坏的诗人丑化它,好的诗人加入自己的理解,使它变得更好,至少会让它有点不同。最优秀的诗人&#xff0…

After Effects 2022(AE2022)支持win版和mac版下载

​After Effects 2022 是由Adobe公司推出的一款专业视频后期制作软件,它主要用于视频合成、视频特效制作、视频剪辑、动画制作等领域。After Effects 2022 内置了丰富的特效和过渡效果,用户可以通过它进行高级的视频合成和动画制作。 该软件具有直观的用…

一文搞懂分布式事务Seta-AT模式实现原理

分布式事务概念 分布式事务(Distributed Transaction) 是指在分布式系统中,涉及多个数据库、服务、消息队列等资源,并且需要保证这些资源上的操作要么全部成功提交,要么全部失败回滚的一种机制。在分布式系统中&#…

IO流---字节流.Java

一,概述 IO流是存储和读取数据的解决方案。 I:input O:output流:像水流一样传输数据 因为IO流与File是息息相关的,所以在学习IO流之前,简单回顾一下File:😄😊&#…

python对文本操作,生成可执行文件

.exe文件主要包含pingmianF.py文件和read_inp_auto.py文件 实现效果 代码 read_inp_auto.py #-*- coding: utf-8 -*- import re import sys import os import os.path import time import pingmianF from pingmianF import vector import numpy as np from tkinter import me…

GDPU JavaWeb EL与JSTL

标签化,可以简化百分号的繁忙。 标签库配置 先下载好jstl标签库,然后放到lib。接着,要让编译器识别到,因此要在模块配置依赖,这里导jar包都得注意一下模块依赖。 也可以在libraries项目库设置。 EL与JSTL查询图书 在…

2024华为OD机试真题-攀登者1-C++(C卷D卷)

题目描述 攀登者喜欢寻找各种地图,并且尝试攀登到最高的山峰。 地图表示为一维数组,数组的索引代表水平位置,数组的元素代表相对海拔高度。 其中数组元素0代表地面。 例如: [0,1,2,4,3,1,0,0,1,2,3,1,2,1,0],代表如下图所示的地图, 地图中有两个山脉位置分别为1,2,3,4,5 …

设计模式(十)结构型模式---享元模式

文章目录 享元模式简介结构UML图具体实现UML图代码实现 享元模式简介 享元模式(fly weight pattern)主要是通过共享对象来减少系统中对象的数量,其本质就是缓存共享对象,降低内存消耗。享元模式将需要重复使用的对象分为两个状态…

大学生Python自救课程总结

因为一些事情的缘故,我已经几乎没有更新很久了,然后现在快到期末了,不知道各位学习python的同志们慌不慌【坏笑】。 本学期,我只是简单的讲了讲python的基础用法。当然,可能有些地方总结的并不全面,很多知…

面试高频问题----2

一、进程、线程、协程有什么区别? 1.进程:进程是操作系统中独立运行的程序实例,每个进程都有自己的内存空间和系统资源;进程之间相互独立,每个进程有自己的内存地址空间,一个进程无法直接访问另一个进程的…

MyBatis中的接口代理机制及其使用

1. MyBatis中的接口代理机制及其使用 文章目录 1. MyBatis中的接口代理机制及其使用2. 实操2.1 准备工作2.2 insert 增加操作2.3 delete 删除操作2.4 update 修改操作2.5 select 查询一条记录操作2.6 select 查询多条记录操作 3. 总结:4. 最后: MyBatis …

基于状态空间模型的预测控制

1、状态空间模型 线性离散时间系统的状态空间模型如下: x ( k 1 ) A x ( k ) B u u ( k ) B d d ( k ) y c ( k ) C c x ( k ) (1) \begin{aligned} &x(k1)Ax(k)B_uu(k)B_dd(k)\\[1ex] &y_c(k)C_cx(k)\tag{1} \end{aligned} ​x(k1)Ax(k)Bu​u(k)Bd​…

HackTheBox-Machines--Nineveh

Nineveh测试过程 1 信息收集 NMAP 端口扫描 80 端口 80端口是服务器的默认页面,无可利用功能点,源代码没有可利用的敏感信息 目录扫描 1.http://10.129.25.123/department 访问/department目录跳转到登录页面,尝试暴力破解,获取…