成都精灵云初试
最近参加了成都精灵云的笔试与面试,岗位是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…...
树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法
树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作,无需更改相机配置。但是,一…...
[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?
论文网址:pdf 英文是纯手打的!论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误,若有发现欢迎评论指正!文章偏向于笔记,谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...
【Java学习笔记】BigInteger 和 BigDecimal 类
BigInteger 和 BigDecimal 类 二者共有的常见方法 方法功能add加subtract减multiply乘divide除 注意点:传参类型必须是类对象 一、BigInteger 1. 作用:适合保存比较大的整型数 2. 使用说明 创建BigInteger对象 传入字符串 3. 代码示例 import j…...
LLMs 系列实操科普(1)
写在前面: 本期内容我们继续 Andrej Karpathy 的《How I use LLMs》讲座内容,原视频时长 ~130 分钟,以实操演示主流的一些 LLMs 的使用,由于涉及到实操,实际上并不适合以文字整理,但还是决定尽量整理一份笔…...
多模态图像修复系统:基于深度学习的图片修复实现
多模态图像修复系统:基于深度学习的图片修复实现 1. 系统概述 本系统使用多模态大模型(Stable Diffusion Inpainting)实现图像修复功能,结合文本描述和图片输入,对指定区域进行内容修复。系统包含完整的数据处理、模型训练、推理部署流程。 import torch import numpy …...
Caliper 负载(Workload)详细解析
Caliper 负载(Workload)详细解析 负载(Workload)是 Caliper 性能测试的核心部分,它定义了测试期间要执行的具体合约调用行为和交易模式。下面我将全面深入地讲解负载的各个方面。 一、负载模块基本结构 一个典型的负载模块(如 workload.js)包含以下基本结构: use strict;/…...
怎么让Comfyui导出的图像不包含工作流信息,
为了数据安全,让Comfyui导出的图像不包含工作流信息,导出的图像就不会拖到comfyui中加载出来工作流。 ComfyUI的目录下node.py 直接移除 pnginfo(推荐) 在 save_images 方法中,删除或注释掉所有与 metadata …...
【把数组变成一棵树】有序数组秒变平衡BST,原来可以这么优雅!
【把数组变成一棵树】有序数组秒变平衡BST,原来可以这么优雅! 🌱 前言:一棵树的浪漫,从数组开始说起 程序员的世界里,数组是最常见的基本结构之一,几乎每种语言、每种算法都少不了它。可你有没有想过,一组看似“线性排列”的有序数组,竟然可以**“长”成一棵平衡的二…...
aardio 自动识别验证码输入
技术尝试 上周在发学习日志时有网友提议“在网页上识别验证码”,于是尝试整合图像识别与网页自动化技术,完成了这套模拟登录流程。核心思路是:截图验证码→OCR识别→自动填充表单→提交并验证结果。 代码在这里 import soImage; import we…...
boost::filesystem::path文件路径使用详解和示例
boost::filesystem::path 是 Boost 库中用于跨平台操作文件路径的类,封装了路径的拼接、分割、提取、判断等常用功能。下面是对它的使用详解,包括常用接口与完整示例。 1. 引入头文件与命名空间 #include <boost/filesystem.hpp> namespace fs b…...
