成都精灵云初试
最近参加了成都精灵云的笔试与面试,岗位是c++工程师。后面自己复盘了过程,初试部分总结如下,希望能对各位相进该公司以及面试C++工程师的同学提供一些参考。这也是博主第一次参加面试,很多东西都还没准备,很多答得不好,所以显得有些问题很突兀。
后续也会陆续分享各公司的面试和笔试经验在该专栏,想看的可以关注一下博主!
正文开始
首先是做自我介绍,个人觉得尽可能讲和找工作有关,展现自己能力的内容即可。
下面是问答环节(前方高能!!!):
Q:解释一下static关键字
A:static用来控制变量的存储方式和可见性,static函数,仅该文件可见;static全局变量,仅该文件可见;static局部变量,改变该局部变量的生存期
更多关于static原理可见博客 static关键字详解
Q:static定义的全局变量(为什么问这题是因为上面没答到仅该文件可见)
A:表明这是一个静态全局变量,使该变量仅在这个源文件中可用
Q:解释一下const关键字
A:用const修饰,意味着该变量的数据只能被访问,而不能被修改,意味着“只读”
Q:const修饰指针有几种,分别是什么
A:有三种,const修饰指针——常量指针;const修饰常量——指针常量;const既修饰指针又修饰常量
Q:const修饰成员变量和成员函数
A:const修饰的成员变量相当于该变量是一个常量,所以只能初始化列表上的初始化
const修饰的成员函数,事实上修饰的是成员函数隐藏的this指针,表示该成员函数不能对类的成员变量修饰,所以const不可以修饰构造函数,析构函数和赋值运算重载符
Q:解释一下什么是内联函数
A:为了消除函数调用的时空开销,c++提供一种提高效率的方法,即在编译时将函数调用处用函数体替换,类似于C语言中的宏展开,这种在函数调用处直接嵌入函数体的函数称为内联函数
Q:追问——调用函数会有什么开销
A:我在回答函数调用的过程来解释时空开销,于是HR直接问我下一个问题
Q:简述一下函数调用过程
A:将当前运行地址压入栈中;
将参数压入栈中,如果参数较少的话会直接存到寄存器中;
跳转到目标函数地址;
执行函数体;
销毁局部变量和函数形参;
弹出调用者的运行地址;
跳转回调用方;
Q:程序调用完是如何跳回调用方的
A:函数的调用和返回是通过调用栈来管理的,每当调用一个函数,程序会将当前函数的上下文全部压入调用栈中,然后开始执行被调用的函数,当被调用的函数执行完毕并准备返回时,程序会从调用栈中弹出该函数的上下文,并将控制权返回给调用方
在底层中使用的是程序计数器PC,储存当前正在执行的指令地址,当函数被调用时,PC的值会被保存到调用栈中的函数上下文中,当函数返回时,程序计数器的值将从调用栈中的函数上下文中回复,以便程序继续执行调用方函数的下一条指令
Q:解释一下SP指针(为什么问这个,是因为我把PC指针记成SP指针了,搞混了,啊啊啊啊啊啊,好尴尬)
A:SP指针是堆栈指针,用于出栈和入栈操作
Q:malloc和new的区别
A:malloc是函数,而new是关键字;malloc不会调用构造函数,new会调用构造函数;malloc是在堆区动态分配内存,new是在自由存储区动态分配内存;new会严格返回对象类型指针,malloc返回的是void指针,需要强制转换;new失败会抛出bac_alloc异常,malloc会返回null;new会根据对象类型自动分配大小,而malloc需要指定开辟空间大小
具体还有区别可以详见 细说new与malloc的区别
Q:如果用malloc分配了一个地址,那么地址上的值为多少,如果是new的呢?
A:malloc函数申请的空间在没有使用前,空间里面存放的是随机值
new的话后面不加(),则不会被初始化,是随机值,如果加了(),其值为0
Q:重载函数和虚函数的区别
A:重载函数只要求函数有相同的函数名,并且重载函数是在相同作用域内定义的名字相同的不同函数;而虚函数不仅要求函数名相同,而且要求函数的签名,返回类型也相同,也就是说函数原型必须完全相同,而且虚函数特性必定是体现在基类和派生类的类层次结构中。
重载函数可以是成员函数或友元函数,虚函数只能是非静态成员函数
构造函数可以重载,析构函数不可以重载;构造函数不能被定义为虚函数,析构函数能定义为虚函数
重载函数的调用是以传递参数序列的差别作为调用不同函数的依据,而虚函数是根据对象的不同区调用不同类的函数
重载函数在编译时表现出多态性,是静态联编,虚函数则在运行时表现出多态性,是动态联编
Q:讲一下虚函数和虚函数表的关系
A:多态是由虚函数实现的,虚函数主要是通过虚函数表来实现的。在这个表中,主要是一个类的虚函数的地址表,这张表解决了集成覆盖的问题,在有虚函数的实例中,这张表被分配在这个实例的内存中,所以当我们用父类指针来操作一个子类时,这张虚函数表就像地图一样指明实际所应该调用的函数
Q:讲一下链式结构和顺序结构的优缺点
A:顺序存储结构是一段连续的存储单元,依次存储线性表的数据元素;链式存储结构是一组任意的存储单元,存放线性表的元素
线性表查找很方便,但插入删除较为麻烦
链式结构插入删除很方便,但查找较为麻烦
Q:如何让链式结构也方便查找
A:维护一个额外索引数据结构,每个索引节点指向链表中的一个元素,这样就可以在索引结构中快速查找,再根据链表中的指针找到具体的元素
Q:进程之间如何通信
A:消息传递(管道,FIFO,posix和消息队列)
同步(互斥锁,条件变量,读写锁,文件和记录锁,Posix和System V信号灯)
共享内存区(匿名共享内存区,有名Posix共享内存区,有名System V共享内存区)
过程调用
Q:如何创建一个管道
A:windows中使用函数CreatePipe(),Unix/Linux中使用pipe()
Q:解释一下什么是智能指针
A:智能指针是帮忙管理动态分配的内存,帮助我们自动释放new出来的内存,避免内存泄露的
Q:解释一下tcp协议的三次握手,四次握手
A:tcp的三次握手是为了建立可靠的连接,首先客户端向服务器发送请求,客户端切换到发送状态,服务器处于侦听状态,侦听到请求后,服务器返回一个确认,服务器变为接收状态,客户端收到确认后返回一个确认给服务器,表示自己收到服务器返回信息,客户端切换到连接状态,服务器收到信息后正式建立连接。
tcp的四次握手是为了确保客户端和服务器端断开连接请求和数据传输完成:首先客户端发送断开连接请求,服务器收到后发送确认给客户端,客户端收到确认后进入半连接状态,表示只能收不能发。服务器传完信息就向客户端发送断开请求,客户端收到后返回一个确认,服务器接收后断开连接请求,客户端等待2个最大报文生存时间后断开连接。
不让服务器在传输信息的同时返回确认连接的原因:TCP有超时重传机制,时间较短,等待服务器传输完,估计客户端会重发很多个。
相关文章:
成都精灵云初试
最近参加了成都精灵云的笔试与面试,岗位是c工程师。后面自己复盘了过程,初试部分总结如下,希望能对各位相进该公司以及面试C工程师的同学提供一些参考。这也是博主第一次参加面试,很多东西都还没准备,很多答得不好&…...

css relative 和absolute布局
1、relative和absolute内部的元素都是相对于父容器,若父容器没有指定为relative,则默认为整个文档视图空间,absolute可以重叠元素,relative则不行。relative意味着元素的任意属性如left和right都是相对于其他元素的。absolute则相…...

更健康舒适更科技的照明体验!书客SKY护眼台灯SUKER L1上手体验
低价又好用的护眼台灯是多数人的需求,很多人只追求功能性护眼台灯,显色高、无频闪、无蓝光等基础需求。但是在较低价格中很难面面俱到,然而刚发布的SUKER书客L1护眼台灯却是一款不可多得的性价比护眼台灯,拥有高品质光源ÿ…...

经管博士科研基础【19】齐次线性方程组
1. 线性方程组 2. 非线性方程组 非线性方程,就是因变量与自变量之间的关系不是线性的关系,这类方程很多,例如平方关系、对数关系、指数关系、三角函数关系等等。求解此类方程往往很难得到精确解,经常需要求近似解问题。相应的求近似解的方法也逐渐得到大家的重视。 3. 线…...
django报错解决 Forbidden (403) CSRF verification failed. Request aborted.
django报错解决 Forbidden (403) CSRF verification failed. Request aborted. 报错内容 Forbidden (403) CSRF verification failed. Request aborted.Help Reason given for failure:Origin checking failed - https://active-mantis-distinct.ngrok-free.app does not mat…...
k8s-实战——yapi平台部署
文章目录 k8s 部署yapi平台前言准备工作构建yapi镜像Dockerfileentrypoint.shbuild.sh源码下载构建镜像启动mongo数据库新建nfs服务mongo创建mongo服务初始化数据启动yapi服务创建yapi服务查看密码访问地址k8s 部署yapi平台 前言 部署yapi平台需要mo...

Excel VSTO开发5 -Excel对象结构
版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。 5 Excel对象结构 Excel提供了几个比较重要的对象: Application、Workbooks、Workbook、Worksheets、Worksheet 为了便…...
Javafx集成sqlite数据库
什么是SQLite SQLite是一款非常轻量级的关系数据库系统,支持多数SQL92标准。SQLite在使用前不需要安装设置,不需要进程来启动、停止或配置,而其他大多数SQL数据库引擎是作为一个单独的服务器进程,被程序使用某种内部进程通信(典型…...

react-native实现 TextInput 键盘显示搜索按钮并触发回调
<TextInput returnKeyType"search"returnKeyLabel"搜索"onSubmitEditing{e > {toSearch(keyword);}} /><SearchBarref{serachBarEl}placeholder"请输入"onChangeText{handleChangeSearch}value{search}onSubmitEditing{handleSearch…...
人大金仓分析型数据库备份和恢复(五)
增量备份 gpbackup和gprestore工具支持创建追加优化表的增量备份以及从增量备份还原。 只有表被更改时,增量备份才会备份所有指定的堆表和追加优化的表(包括追加优化的,面向列的表)。 例如,如果追加优化表的行已更改&a…...

lenovo联想笔记本ThinkPad P16V Gen 1(21FC,21FD)原装出厂Win11系统
原厂W11系统自带所有驱动、出厂主题壁纸、Office办公软件、联想电脑管家等预装程序 链接:https://pan.baidu.com/s/17dTExDSz-EDN4Qd-PZGJuw?pwdrgl3 提取码:rgl3 所需要工具:32G或以上的U盘 文件格式:ISO 文件大小…...
Django实现音乐网站 ⒃
使用Python Django框架制作一个音乐网站, 本篇主要是歌手详情页-专辑列表、专辑详情-单曲列表开发实现内容。 目录 歌手详情-专辑列表 路由设置 跳转设置 视图方法 模板内容 专辑详情-单曲列表 设置路由 视图处理并返回 模板渲染 分页优化 引入错误类型库…...

【开发问题系列】CSV转Excel
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kuan 的首页,持续学…...
mysql物理备份步骤
原库10.153.88.5,新建数据库实例10.153.88.6,注意/etc/my.cnf配置和88.5一致,测试目的是通过copy数据文件到88.6来恢复数据库。 在数据库10.153.88.5打包数据文件: [mysqlt3-dtpoc-dtpoc-web04 mysql]$ cd /testdata/mysql [mys…...

react使用hook封装一个tab组件
目录 react使用hook封装一个tab组件Tabbar.jsx使用组件效果 react使用hook封装一个tab组件 Tabbar.jsx import PropsTypes from "prop-types"; import React, { useEffect, useState } from react; export default function Tabbar(props) {const { tabData , cur…...
java详细安装教程(供参考)一一java(jdk)安装
一、java历史简介 1991 年Sun公司的James Gosling等人开始开发名称为 Oak (橡树)的语言。希望用于控制嵌入在有线电视交换盒、PDA等的微处理器, 1994年将Oak语言更名为Java 1998年JDK1.2时,更名为Java 2 Platform 分为标准版J…...

C++函数内联详解
本文旨在讲解C中的函数内联相关知识,读完这篇文章,希望读者们会对函数内联有更深一步的认识! 内联函数的定义 在计算机科学中, 内联函数 (有时称作 在线函数 或 编译时期展开函数 )是一种编程语言结构&…...

Revit SDK 介绍:NewForm 新建体量
前言 这个例子介绍如何新建体量。 内容 图形生成效果。 用 Extrusion 创建体量 // 创建一个轮廓 ReferenceArray ref_ar new ReferenceArray(); // 创建三条直线,并放入轮廓 Autodesk.Revit.DB.XYZ ptA new Autodesk.Revit.DB.XYZ(10, 10, 0); Autodesk.Rev…...
Ubuntu离线或在线安装Python解释器
这里以安装Python3.5.7为例。 首先进入官网,下载Python-3.5.7.tgz,或者使用以下命令下载(需要联网): wget https://www.python.org/ftp/python/3.5.7/Python-3.5.7.tgz下载完成后,使用以下命令进行解压缩…...
微信小程序隐私协议相关接口实际使用方式
<view wx:if"{{showPrivacy}}" class"privacy"><view class"popup"><view>隐私弹窗内容....</view><view bindtap"openPrivacyAgreement">点击查看隐私协议</view><button id"disagreeBt…...
KubeSphere 容器平台高可用:环境搭建与可视化操作指南
Linux_k8s篇 欢迎来到Linux的世界,看笔记好好学多敲多打,每个人都是大神! 题目:KubeSphere 容器平台高可用:环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析
1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具,该工具基于TUN接口实现其功能,利用反向TCP/TLS连接建立一条隐蔽的通信信道,支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式,适应复杂网…...

MPNet:旋转机械轻量化故障诊断模型详解python代码复现
目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...

【WiFi帧结构】
文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成:MAC头部frame bodyFCS,其中MAC是固定格式的,frame body是可变长度。 MAC头部有frame control,duration,address1,address2,addre…...
linux 下常用变更-8
1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行,YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID: YW3…...

【配置 YOLOX 用于按目录分类的图片数据集】
现在的图标点选越来越多,如何一步解决,采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集(每个目录代表一个类别,目录下是该类别的所有图片),你需要进行以下配置步骤&#x…...

DBAPI如何优雅的获取单条数据
API如何优雅的获取单条数据 案例一 对于查询类API,查询的是单条数据,比如根据主键ID查询用户信息,sql如下: select id, name, age from user where id #{id}API默认返回的数据格式是多条的,如下: {&qu…...
AI编程--插件对比分析:CodeRider、GitHub Copilot及其他
AI编程插件对比分析:CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展,AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者,分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...

【Oracle】分区表
个人主页:Guiat 归属专栏:Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...

Windows安装Miniconda
一、下载 https://www.anaconda.com/download/success 二、安装 三、配置镜像源 Anaconda/Miniconda pip 配置清华镜像源_anaconda配置清华源-CSDN博客 四、常用操作命令 Anaconda/Miniconda 基本操作命令_miniconda创建环境命令-CSDN博客...