某互联网公司c++笔试题1

1. 画多重继承虚函数表

注:虚函数表是一种编译时构建的数据结构,它用于在运行时解析对虚函数的调用,是一个存储类成员函数指针的数组。每个拥有虚函数的类都有一个对应的虚函数表。当类对象创建时,对象中会包含一个指向相应虚函数表的指针(称为vptr,虚指针)。这个指针是对象的隐式成员,由编译器自动添加到每个对象中。
        每个对象的虚指针指向对应的虚函数表。虚函数表的布局和内容在编译时就已确定,里面存储的是类的虚函数的地址。当一个虚函数被调用时,实际上是通过虚指针来间接调用的。

        虚函数表运行时才会被调用,允许通过基类指针或引用调用派生类的方法。特别灵活,子类可以覆盖父类的虚函数实现,而调用者无需知道具体的子类类型。

        当然有额外的开销,虚函数调用通常比非虚函数调用慢,因为需要额外的间接寻址。内存也有额外的开销,每个对象需要额外存储一个虚指针,每个类需要一个虚函数表。

2. 循环与递归可以转换吗?各有啥特点

循环和递归是在编程中实现重复操作的两种基本方法。它们在功能上是等效的,理论上任何使用循环的代码都可以通过递归来实现,反之亦然。尽管如此,它们各有其特点和最适用的场景。

        从循环到递归:将循环结构的代码转换成递归通常涉及将循环的迭代过程表达为递归调用。每次递归调用相当于循环的一次迭代,并在满足基本条件时结束递归。

        从递归到循环:递归函数通常可以重写为使用栈的循环结构,其中栈用来模拟递归调用栈的行为。这种转换可以消除递归的开销,特别是对于深递归调用栈可能导致栈溢出的情况
递归特点:

        自然表达:递归提供了一种简洁的方式来处理那些问题本身就是递归的,如树遍历、分治算法等。
        简化复杂问题:递归可以将复杂问题分解为更小的子问题,每个子问题与原问题有着相同的形式。
        代码简洁:递归代码通常比对应的循环版本更简洁、更易于理解。
        性能开销:每次递归调用都需要在调用栈上增加一层,这会增加额外的时间和空间开销。
        栈溢出风险:深度递归可能导致调用栈过深,从而引发栈溢出错误。
        效率问题:递归可能重复解决相同的子问题,尤其是在没有使用记忆化技术的情况下。

循环特点:

       效率高:循环不涉及多次函数调用的开销,因此通常比递归更快。
       避免栈溢出:使用循环不会增加调用栈深度,因此不会因深度递归而导致栈溢出。
       直观执行流:循环的执行流是顺序的,没有调用栈的额外复杂性,对于追踪程序状态和调试通常更为直接。
       代码复杂度:对于本质上递归的算法(如深度优先搜索),用循环实现可能导致代码更加复杂
       手动管理状态:在某些复杂的情况下,需要手动模拟栈来保存状态,这可以增加实现的难度。

3. 构造函数与析构函数作用及调用时机

 构造函数与析构函数是被编译器隐式调用的。这些函数的调用时间取决于程序执行进入和离开实例化对象的作用域的顺序。通常,析构函数的调用顺序和对应构造函数的调用顺序相反。但是,对象的存储类别可以改变析构函数的调用顺序。

    在全局作用域内定义的构造函数在该文件中任何其他函数(包括main函数)开始执行之前执行(尽管文件间的构造函数的执行顺序是不确定的)。在main函数终止时,调用相应的析构函数。exit函数强制程序立即终止并且不执行自动对象的析构函数。该函数常用于在检测到输入错误或打不开要处理的文件时终止程序。abort函数类似于exit函数,但它强制程序立即终止,不允许调用任何对象的析构函数。abort通常用于指示程序的异常中断。

    自动局部对象的构造函数在执行到达对应的程序点时调用,对应的析构函数在对象离开该对象所在的作用域时(即定义该对象的执行结束时)调用。自动局部对象的构造函数和析构函数在每次到达和离开该对象的作用域时调用。如果程序使用exit和abort函数终止,则不调用自动对象的析构函数。

    static局部对象的构造函数只在执行第一次到达定义对象的程序点时调用一次。对应的析构函数在main函数终止或调用exit函数时调用。全局和static对象的释放顺序和创建顺序相反。如果遇到调用abort函数终止程序,则不调用static对象的析构函数。

4. 进程与线程区别,列出五点

5. 写一个内存拷贝函数

void* copy(void* src,void*dst,int count)

{     

       assert((src != NULL)&&(dest !=NULL));   

       char*tmp, *s;   

       if(dest <=src)     

       {        

              tmp = (char*) dest;

              s = (char*) src;      

              while(count--)     

              *tmp++ = *s++;    

       }      

       else

       {     

              tmp = (char*) dest +count;  

              s = (char*) src +count;       

              while(count--)      

              *--tmp = *--s;            

       } 

        return dst;

}

6. 写一个快排

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

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

相关文章

AI作画算法原理详解:从数据到艺术的自动化之旅

AI作画算法原理详解&#xff1a;从数据到艺术的自动化之旅 在数字化时代&#xff0c;人工智能&#xff08;AI&#xff09;技术正逐步渗透到各个领域&#xff0c;其中AI作画技术更是引发了广泛关注。本文将详细解析AI作画算法的原理&#xff0c;带领读者了解从数据收集与处理到…

c# winform 控件皮肤

控件皮肤下载&#xff1a; https://download.csdn.net/download/m0_46973223/89225992 步骤&#xff1a; 第一步 将IrisSkin4.dll文件放在debug文件下&#xff0c;选一个或者多个后缀名为.ssk文件&#xff08;各个皮肤文件&#xff09;放在debug文件下。 第二步 解决方案资…

ocr、人工智能、文字识别接口

人工智能这个词近几年热度颇高&#xff0c;工业上有人称之为“机器代工”&#xff0c;生活中有人称之为“物联网”&#xff0c;而所体现出来的就是智能化&#xff0c;减少人工参与。翔云公有云平台应运而生&#xff0c;提供的OCR API及实名认证API使产品智能化&#xff0c;自动…

华为OD机试真题-剩余银饰的重量-2024年OD统一考试(C卷D卷)

题目描述: 有N块二手市场收集的银饰,每块银饰的重量都是正整数,收集到的银饰会被熔化用于打造新的饰品。 每一回合,从中选出三块 最重的 银饰,然后一起熔掉。假设银饰的重量分别为 x 、y和z,且 x <= y <= z。那么熔掉的可能结果如下: 如果 x == y == z,那么三块银…

全额退款20000,what?

接单的时候有多兴奋&#xff0c;退单的时候就有多落寞。今天我对客户全额退款了&#xff0c;跟踪了10天的项目正式结束。 这是我接单以来项目单价最高的一个项目&#xff0c;本来不太想接的&#xff0c;因为业务领域不擅长&#xff0c;又想挑战一下。兜兜转转找了几个人因为各种…

使用 Python 将 GB2312 和 UTF8 编码的文件转换为带标记的 UTF8 编码

1. 版本、依赖要求 Python 版本要求&#xff1a;Python > 3.6即可 需要安装的包&#xff08;建议使用 conda、miniconda 等 python 环境管理器创建一个 python 环境后运行 chardettkinter 2. 实现功能 对某一文件夹及其子文件夹下的所有txt文件&#xff0c;将原编码为g…

git分支更新

git分支更新 场景&#xff1a; 在本地创建了一个新的分支 test_20240426 后&#xff0c;远端分支更新了内容&#xff0c;需要更新本地的 master 分支和新创建的 test_20240426 分支。 步骤&#xff1a; 更新 master 分支 首先&#xff0c;切换到 master 分支&#xff1a;git …

Neo-reGeorg明文流量

Neo-reGeorg 1 同IP对&#xff0c;同一个URI&#xff0c;第一个TCP流是“GET”请求&#xff0c;随后的TCP流请求为“POST”。&#xff08;jsp\jspx\php&#xff09; 2 第一个TCP流中&#xff0c;GET只有一个会话。&#xff08;jsp\jspx\php&#xff09;&#xff0c;响应body79…

机器学习——过拟合

一、过拟合得表现 模型在训练过程中&#xff0c;除了会出现过拟合现象&#xff0c;还有可能出现欠拟合的情况。相比而言&#xff0c;后者通常发生在建模前期&#xff0c;只要做好特征工程一般可以解决模型欠拟合问题。下图描述了模型在训练数据集上的三种情况&#xff1a; 其…

【LeetCode:2095. 删除链表的中间节点 + 链表】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

go 环境安装

彻底清楚old version sudo apt-get remove golang-go sudoapt-get remove --auto-remove golang-go rm -rvf /usr/local/go/ 安装方法&#xff1a; 1.下载 Download and install - The Go Programming Language 2. 解压安装 rm -rf /usr/local/go && tar -C /usr/…

BGP的路径属性

路径属性 l每条BGP路由都拥有多个的路径属性&#xff0c;有些是必须携带的&#xff0c;有些是可选添加的 lBGP的路径属性将影响最优路由的选择 lBGP路径属性是描述路由的一组参数&#xff0c;BGP根据路由的属性选择最佳路由&#xff0c;可以人为置值&#xff0c;以便执行路由…

[Android]引导页

使用Kotlin Jetpack Compose创建一个左右滑动的引导页, 效果如图. 1.添加依赖项 androidx.compose.ui最新版本查询:https://maven.google.com/web/index.html com.google.accompanist:accompanist-pager最新版本查询:https://central.sonatype.com/ 确保在 build.gradle (M…

算法-KMP算法

时间复杂度&#xff1a; public int strStr(String haystack, String needle) {int[] next new int[needle.length()];//next数组的生成next[0] 0;int prefixLen 0;//共同前后缀长度int i 1, j 1;//i,j复用while (i < needle.length()) {if (needle.charAt(prefixLen)…

数据库工程师的工作职责(合集)

数据库工程师的工作职责1 职责&#xff1a; 1. 日常数据库的基本安装&#xff0c;维护&#xff0c;升级&#xff0c;监控的; 2. 配合研发部门进行数据库设计支持&#xff0c;协助开发、设计和进行SQL语言优化; 3. 配合相关部门数据库相关的任务&#xff0c;比如数据导入导出&am…

「屡教不改」又被罚,谁还在相信山姆?

值得信赖的品质」「全球进口品牌」……「更好的生活尽在山姆」。 作为全球最大的会员制商店&#xff0c;山姆这几年可以说在中国线下零售市场集体遇劫的背景下&#xff0c;逆势崛起&#xff0c;甚至可以说做到了独树一帜。‍‍‍‍‍‍ 背后的原因是什么&#xff1f;会员制这一…

c++ 中判断字符是 ASCII 编码还是 GBK 编码

在C中&#xff0c;一个字符是ASCII编码还是GBK编码&#xff0c;取决于其在ASCII范围内还是在GBK范围内。 ASCII编码的范围是0到127&#xff0c;而GBK编码是双字节编码&#xff0c;包含了更广泛的字符范围。 #include <iostream> #include <string> #include <…

Python爬虫要点和难点实例代码解析

学习Python爬虫是一个很好的选择,因为Python有很多强大的库可以帮助你进行网络数据的获取和处理。以下是一个简单的Python爬虫入门指南: 1. 了解HTTP协议:在开始编写爬虫之前,了解HTTP协议是很重要的,因为大多数爬虫都是通过HTTP来获取网页数据的。你需要了解HTTP请求和响…

迅雷不限速破解方法

背景&#xff1a;现在迅雷和百度云的下载速度真的太恶心了&#xff0c;所以总有大佬可以采用厉害的方法进行破解&#xff0c;在网上看了一圈&#xff0c;很多都是骗人或者是无效的&#xff0c;找了一个靠谱的方法&#xff0c;亲测速度能达到10M以上&#xff0c;非常给力。 以下…

MySQL数据库运维:运行监控及解决sql执行死锁问题

前言 在现代数据密集型应用程序的开发和部署中&#xff0c;MySQL数据库的运维是至关重要的环节之一。一个良好设计和维护的MySQL数据库系统可以确保数据的准确性、可靠性和高效的访问&#xff0c;从而支持业务的顺利运行。然而&#xff0c;随着业务规模的增长和复杂性增加&…