二、面经整理(二)

三、阿里优酷 C++开发实习面经

1.自我介绍

2.c内存分配有哪几种方式

静态内存分配:在程序编译时就已经分配好了一块固定大小的内存空间,程序运行时一直存在。例如:全局变量和静态变量。

栈式内存分配:在函数调用时,在栈上分配一块固定大小的内存空间,函数执行完毕后,内存自动释放。例如:局部变量。

堆式内存分配:程序在运行时动态地分配内存空间,可以根据需要分配和释放内存,由程序员控制。例如:动态分配内存的函数malloc()和free()

3.虚函数和虚函数表如何对应关系

4.C++四种智能指针

C++中的智能指针有4种,分别为:shared_ptr、unique_ptr、weak_ptr、auto_ptr,其中auto_ptr被C++11弃用。

  1. auto_ptr(C++98的方案,C++11已经弃用)
    采用所有权模式
  2. unique_ptr(替换auto_ptr)
    unique_ptr实现独占式拥有或严格拥有概念,保证同一时间内只有一个智能指针可以指向该对象。它对于避免资源泄露,例如,以new创建对象后因为发生异常而忘记调用delete时的情形特别有用。
  3. shared_ptr(非常好使)
    shared_ptr实现共享式拥有概念。多个智能指针可以指向相同对象,该对象和其相关资源会在“最后一个引用被销毁”时候释放。从名字share就可以看出了资源可以被多个指针共享,它使用计数机制来表明资源被几个指针共享。可以通过成员函数use_count()来查看资源的所有者个数。除了可以通过new来构造,还可以通过传入auto_ptr, unique_ptr,weak_ptr来构造。当我们调用release()时,当前指针会释放资源所有权,计数减一。当计数等于0时,资源会被释放。shared_ptr 是为了解决 auto_ptr 在对象所有权上的局限性(auto_ptr 是独占的), 在使用引用计数的机制上提供了可以共享所有权的智能指针。
  4. weak_ptr
    weak_ptr 是一种不控制对象生命周期的智能指针, 它指向一个 shared_ptr 管理的对象。进行该对象的内存管理的是那个强引用的 shared_ptr。weak_ptr只是提供了对管理对象的一个访问手段。weak_ptr 设计的目的是为配合 shared_ptr 而引入的一种智能指针来协助 shared_ptr 工作,它只可以从一个 shared_ptr 或另一个 weak_ptr 对象构造, 它的构造和析构不会引起引用记数的增加或减少。weak_ptr是用来解决shared_ptr相互引用时的死锁问题,如果说两个shared_ptr相互引

5.死锁

  1. 死锁: 是指多个进程在执行过程中,因争夺资源而造成了互相等待。此时系统产生了死锁。比如两
    只羊过独木桥,若两只羊互不相让,争着过桥,就产生死锁。
  2. 产生的条件:死锁发生有四个必要条件:
    (1)互斥条件:进程对所分配到的资源不允许其他进程访问,若其他进程访问,只能等待,直到
    进程使用完成后释放该资源;
    (2)请求保持条件:进程获得一定资源后,又对其他资源发出请求,但该资源被其他进程占有,
    此时请求阻塞,而且该进程不会释放自己已经占有的资源;
    (3)不可剥夺条件:进程已获得的资源,只能自己释放,不可剥夺;
    (4)环路等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。
  3. 如何解决:
    (1)资源一次性分配,从而解决请求保持的问题
    (2)可剥夺资源:当进程新的资源未得到满足时,释放已有的资源;
    (3)资源有序分配:资源按序号递增,进程请求按递增请求,释放则相反。

6.线程安全的集合有哪些

Hashtable与Vector类似,互斥锁!

7.抽象工厂模式和工厂方法模式的区别

8.构造函数为什么不能被继承

为什么构造函数不能继承?
构造函数不能继承的原因是因为继承是用于继承类的属性和方法的,而构造函数是用于初始化对象的。
当一个类继承另一个类时,它会继承父类的属性和方法,但是它不会继承父类的构造函数。这是因为构造函数是用于初始化对象的,它需要根据子类的特定需求进行定制。
如果子类没有定义构造函数,那么它会默认调用父类的构造函数。但是,如果子类定义了构造函数,那么它必须显式地调用父类的构造函数,以确保父类的属性和方法能够被正确地初始化。
因此,构造函数不能被继承,而是需要在子类中显式地调用父类的构造函数。

9.手撕代码

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

“轻松实现文件夹批量重命名:使用顺序编号批量改名“

你是否曾经遇到过需要批量重命名文件夹,却因为繁琐的手动操作而感到困扰?现在,我们为你带来了一款全新的工具——轻松实现文件夹批量重命名,使用顺序编号批量改名。这款工具将帮助你轻松解决文件夹重命名的问题,提高工…

SpringSecurity5|12.实现RememberMe 及 实现原理分析

security/day08 这个功能大家还熟悉么?我们在登录网站的时候,除了让你输入用户名和密码,还会有个勾选框: 记住我!!!不是让大家记住我哈。 值得一提的是,Spring Security 也提供了这个…

2023年汉字小达人市级比赛在线模拟题更新:40分钟150题完整对标

今天是2023年11月19日,距离11月30日的汉字小达人市级比赛还有11天。许多孩子正在利用难得的周末抓紧练习和备赛。 结合一些孩子的反馈和需求,我把150题的在线模拟题做了更新,增加了前面的个人信息填写的部分,并且把整个试卷的完成…

python自动化标注工具+自定义目标P图替换+深度学习大模型(代码+教程+告别手动标注)

省流建议 本文针对以下需求: 想自动化标注一些目标不再想使用yolo想在目标检测/语意分割有所建树计算机视觉项目想玩一玩大模型了解自动化工具了解最前沿模型自定义目标P图替换… 确定好需求,那么我们发车! 实现功能与结果 该模型将首先…

python——第九天

今日目标: 偏函数 递归 字符串对象 切片 常见排序和查找 偏函数: python中存在一种函数的特殊使用,称为偏函数 如果在调用某个函数时,恰好某一个或者,某一些参数都是一个固定值(正好不是默认值)…

Linux常用命令——bye命令

在线Linux命令查询工具 bye 命令用于中断FTP连线并结束程序。。 补充说明 bye命令在ftp模式下,输入bye即可中断目前的连线作业,并结束ftp的执行。 语法 bye实例 bye在线Linux命令查询工具

从0开始学习JavaScript--JavaScript 数字与日期

JavaScript中的数字和日期是处理数值计算和时间相关任务的核心。本文将深入研究JavaScript中数字的表示、常见运算,以及日期对象的创建、格式化等操作,并通过丰富的示例代码,可以更全面地了解和应用这些概念。 JavaScript数字基础 JavaScri…

【RocketMq系列-01】RocketMq安装和基本概念

RocketMq系列整体栏目 内容链接地址【一】RocketMq安装和基本概念https://zhenghuisheng.blog.csdn.net/article/details/134486709 RocketMq安装和基本概念 一,RocketMq安装和基本概念1,RocketMq基本安装(本地安装)2,Rocketmq的核心概念2.1&…

Linux使用ifconifg命令,没有显示ens33

Linux使用ifconifg命令,没有显示ens33 1.问题2.步骤2.1 查看虚拟机的组件是否启动了2.2 修改网络配置文件 ONBOOT修改为yes2.3 重启网络2.4 修改网络服务配置 3.解决 1.问题 打开虚拟机准备使用xshell连接时发现连接失败,在机器上查看ip发现ens33不现实…

Mysql主从搭建

Mysql主从搭建 1.Mysql下载1.1 查看操作系统2.2 下载mysql安装包 2.Mysql安装2.1 解压2.2 目录重命名2.3 创建data,存储文件2.4 创建用户组2.5 授权用户2.6 配置环境变量2.7 编辑my.cnf2.8 创建相关目录和文件2.9 初始化数据库2.10 复制mysql.server到/etc/init.d/下…

安卓环境搭建及运行安卓应用

1 jdk安装 安卓项目也是java开发的,运行在虚拟器上,安装jdk及运行的时候,就会带上虚拟器 jdk前面已经讲过,不在讲解 2 下载安装androj studio https://developer.android.google.cn/studio?hlzh-cn 下载下来,双击…

Shell脚本:Linux Shell脚本学习指南(第一部分Shell基础)一

你好,欢迎来到「Linux Shell脚本」学习专题,你将享受到免费的 Shell 编程资料,以及很棒的浏览体验。 这套 Shell 脚本学习指南针对初学者编写,它通俗易懂,深入浅出,不仅讲解了基本知识,还深入底…

数据采集与大数据架构分享

实现场景 要实现亿级数据的长期收集更新,并对采集后的数据进行整理和加工,用于人工智能的训练数据素材集。 数据采集 java支持的爬虫框架还是有很多的,如:webMagic、Spider、Jsoup等添加链接描述 pipeline处理管道 数据并发开发…

供应链|顶刊MSOM论文解读:服务竞争下的库存共享

问题背景 在汽车、玩具等行业中,零售商之间的库存共享变得十分常见。库存共享可以解决由需求不确定导致的库存错配问题。如果零售商之间同意共享库存,那么当需求较少、自身库存过剩时,可以将过剩库存卖给其他零售商;反之&#xf…

WinForms C# 导入和导出 CSV 文件 Spread.NET

使用 WinForms C# 和 VB.NET 导入和导出 CSV 文件 2023 年 11 月 17 日 使用 Spread.NET 直接在 .NET WinForms 应用程序中处理 CSV 文件。 Spread.NET可帮助您创建电子表格、网格、仪表板和表单。它包括一个强大的计算引擎,具有 450 多个函数以及导入和导出 Micros…

iptables详解:链、表、表链关系、规则的基本使用

目录 防火墙基本概念 什么是防火墙? Netfilter与iptables的关系 链的概念 表的概念 表链关系 规则的概念 查询规则 添加规则 删除iptables中的记录 修改规则 更详细的命令(5链4表) 防火墙基本概念 什么是防火墙? 在…

在VS Code中使用VIM

文章目录 安装和基本使用设置 安装和基本使用 VIM是VS Code的强大对手,其简化版本VI是Linux内置的文本编辑器,堪称VS Code问世之前最流行的编辑器,也是VS Code问世之后,我仍在使用的编辑器。 对VIM无法割舍的原因有二&#xff0…

Python中,我们可以使用pandas和numpy库对Excel数据进行预处理,包括读取数据、数据清洗、异常值剔除等

文章目录 一、什么是数据预处理二、对excel数据进行详细的数据预处理操作总结 一、什么是数据预处理 数据预处理是一种对数据进行清洗、整理、转换等操作的过程,旨在提高数据质量,使其适应模型的需求,从而改进数据挖掘或机器学习的结果。 数…

【LLM】基于LLM的agent应用(更新中)

note 在未来,Agent 还会具备更多的可扩展的空间。 就 Observation 而言,Agent 可以从通过文本输入来观察来理解世界到听觉和视觉的集成;就 Action 而言,Agent 在具身智能的应用场景下,对各种器械进行驱动和操作。 Age…

从0开始学习JavaScript--JavaScript 字符串与文本内容使用

JavaScript中的字符串和文本内容处理是前端开发中的核心技能之一。本文将深入研究字符串的创建、操作,以及文本内容的获取、修改等操作,并通过丰富的示例代码,帮助读者更全面地了解和应用这些概念。 JavaScript 字符串基础 字符串是JavaScr…