c++华为od面经
手撕代码:
力扣1004 最大连续1的个数 给定一个二进制数组 nums 和一个整数 k,如果可以翻转最多 k 个 0 ,则返回 数组中连续 1
的最大个数 。 输入:nums = [1,1,1,0,0,0,1,1,1,1,0], K = 2 输出:6
解释:[1,1,1,0,0,1,1,1,1,1,1] 翻转后最长的子数组长度为 6。
c++为什么要虚析构?
C++要求程序员手动管理内存,包括对象的构造和销毁。当一个类中含有虚函数时,其析构函数应该也是虚函数,这样在删除基类指针指向的派生类对象时,可以正确调用派生类的析构函数。如果析构函数不是虚函数,那么只会调用基类的析构函数,就无法释放掉派生类的资源,会导致内存泄漏等问题。
为什么不虚构造?
C++中的构造函数不需要虚函数,因为在创建一个对象时,只有当前正在创建的类的构造函数会被调用,因此不存在多态性。同时,在构造函数中调用虚函数会导致一些问题,例如派生类的成员变量还没有被初始化,就会调用派生类的虚函数,这可能导致程序崩溃或者行为不可预测。
说说快排和冒泡
快排采用分治思想,将一个数组分成两个子数组,然后递归地排序两个子数组。具体实现中,选择一个基准元素,将数组中小于等于它的元素放在它的左边,大于它的元素放在右边,最后再递归地对左右子数组进行快排。
冒泡排序则是通过不断地交换相邻的元素来实现排序的。具体实现中,从数组的第一个元素开始,不断比较它与下一个元素的大小关系,如果前者大于后者,则交换它们的位置。重复这个过程,直到整个数组有序为止。
c++三大特性?
面向对象编程:C++支持封装、继承和多态等OOP特性,让开发者可以更加方便地组织代码,提高代码重用性和可维护性。
泛型编程:C++支持泛型编程,即通过模板来实现对不同数据类型的通用处理。这使得程序可以更加灵活和易于扩展,同时也提高了代码的复用性。
内存管理:C++中需要手动管理内存,这既是其优点之一,也是缺点之一。手动管理内存使程序员可以更好地掌控内存分配和释放操作,而且避免了由于自动垃圾回收带来的不确定性和性能问题,但同时也需要开发者具备一定的内存管理经验和技巧。
说说多态
静态多态:也称为函数重载,即在同一作用域内定义了多个名称相同但参数类型、个数或顺序不同的函数。在调用这些函数时,编译器会根据实参的类型和数量自动匹配合适的函数进行调用。
动态多态:也称为虚函数,即通过将基类函数声明为虚函数,实现在派生类中重写基类函数的功能。在运行时,如果指向派生类对象的基类指针调用该函数,则会根据指向的派生类类型选择正确的函数执行。
说说虚函数
通过将基类的成员函数声明为虚函数,可以在派生类中重新定义该函数以实现特定的功能。
实现动态多态的原理是,在程序运行时确定调用的函数版本,而不是在编译时确定。因此,可以通过基类指针或引用来调用派生类的虚函数,从而实现运行时多态性。
虚函数必须以与其重载函数相同的参数列表和返回类型进行重载。同时,虚函数也可以被纯虚函数和抽象类所使用,这会涉及到更高级别的面向对象设计思想,如接口和实现分离等。
说说c++11新特性
- 自动类型推导(auto):使用关键字“auto”可以让编译器自动推导变量类型,减少代码量并提高可读性。
- 范围for循环:使得遍历数组、容器等数据结构更加方便。
- 右值引用(Rvalue Reference):提供了对临时变量的引用,并允许在函数参数和返回值中使用临时对象。
- 移动语义(Move Semantics):通过右值引用来实现对对象的快速移动而不是复制,提高程序效率。
- 智能指针(Smart Pointers):提供了RAII机制,避免了手动管理内存的麻烦,同时防止了内存泄漏和野指针等问题。
- lambda表达式:匿名函数,可以方便地定义简单的函数对象。
- 静态断言(static_assert):编译时检查常量表达式是否满足条件。
- 线程支持库(Thread Support Library):为多线程编程提供了标准库级别的支持。
- 强类型枚举(Scoped Enumerations):在枚举类中定义枚举常量时,可以限制它们的作用域。
- 随机数生成器(Random Number Generators):提供了多种随机数生成算法。
讲讲智能指针
智能指针是一种对象,行为类似于指针,但具有自动管理所指向对象生命周期的功能。
std::shared_ptr允许多个智能指针共享同一个对象,并且会自动计数引用该对象的智能指针数量。当引用计数降为0时,即没有任何智能指针使用该对象,该对象会被自动删除。std::shared_ptr还支持自定义删除器,可在实例化时传入一个函数来指定删除对象的方式。
std::unique_ptr则不允许多个智能指针共享同一个对象,只能有一个所有权,它可以通过std::move转移所有权,但不能直接复制或赋值。当std::unique_ptr超出作用域时,它指向的对象也会被自动删除。
讲讲右值引用
与左值引用类似,是用来引用变量的,区别在于右值引用可以引用临时对象或者表达式产生的结果。
右值引用还有一个很重要的用途就是支持移动语义。在C++11中,我们可以定义一个移动构造函数和一个移动赋值运算符,利用右值引用来实现对于数据的高效移动,而不是进行不必要的拷贝操作。
讲一下多线程
多线程是指在一个程序中同时执行多个独立的线程,每个线程都有自己的代码执行流程、栈和局部变量等资源。通过多线程技术可以充分利用多核处理器的计算能力以及提高程序的并发性和响应性。
在多线程编程中,通常存在一个主线程和多个子线程。主线程负责程序的初始化和管理,而子线程则负责完成任务。由于每个线程都可以独立执行,因此可以提高程序的效率和性能。
linux了解吗?
说说常用指令
- ls:列出当前目录下的文件和子目录。
- cd:改变当前目录。
- pwd:显示当前目录的路径。
- cp:拷贝文件或目录。
- mv:移动文件或目录,也可用于重命名文件或目录。
- rm:删除文件或目录。
- mkdir:创建新目录。
- rmdir:删除空目录。
- touch:创建新文件或更新已有文件的时间戳。
- cat:将文件内容输出到终端。
- less:分页显示文件内容。
- head:显示文件前几行。
- tail:显示文件后几行。
- grep:在文件中查找指定字符串或正则表达式。
- find:在文件系统中查找符合条件的文件或目录。
- top:实时显示系统资源使用情况。
- ps:列出当前系统进程信息。
- kill:终止指定进程。
网络出现故障一般用什么指令排查?
- ping:用于测试网络是否连通。通过发送ICMP请求到目标主机并等待响应来判断网络是否正常。
- traceroute:用于追踪数据包在互联网上的路径,以及判断数据包经过的路由节点的响应时间。
- netstat:用于显示当前网络连接状态和统计信息。可以查看本地系统与其他主机之间的连接数、端口监听情况等信息。
- ifconfig/ip addr:用于查看和配置网络接口信息,包括IP地址、子网掩码、网关等信息。
- curl/wget:用于测试网络连接是否正常和下载文件。可以获取指定URL的内容或文件,并判断下载速度等。
- nslookup/dig:用于进行DNS查询,以确定域名解析是否正常。
- tcpdump:用于捕获和分析网络数据流量,以便诊断网络问题和安全问题。
讲一下TCP如何建立链接?
它使用三次握手来建立连接
-
客户端向服务端发送一个带有SYN标志位的数据包,表示请求建立连接。此时客户端进入SYN_SENT状态。
-
服务端收到请求后,回复一个带有SYN/ACK标志位的数据包,表示同意建立连接。同时,将自己的初始序列号(ISN)放在TCP首部中。此时服务端进入SYN_RCVD状态。
-
客户端再次向服务端发送一个带有ACK标志位和确认号(ACK number)的数据包,表示接受服务端的请求,并确认自己的ISN。此时客户端进入ESTABLISHED状态,服务端也进入ESTABLISHED状态,连接建立成功。
手撕代码经典dfs统计岛屿数量
- 遍历整个地图,从第一个非海洋方格开始进行搜索。
- 对于每个搜索到的陆地方格,向它的上、下、左、右四个方向扩展搜索,找到所有与之相邻且未被访问过的陆地方格,并标记为已访问。
- 继续遍历地图,直到所有的陆地方格都被访问过。
- 记录搜索到的陆地方格的数量即可。
相关文章:
c++华为od面经
手撕代码: 力扣1004 最大连续1的个数 给定一个二进制数组 nums 和一个整数 k,如果可以翻转最多 k 个 0 ,则返回 数组中连续 1 的最大个数 。 输入:nums [1,1,1,0,0,0,1,1,1,1,0], K 2 输出:6 解释:[1,1,1…...

【郭东白架构课 模块二:创造价值】18|节点一:架构活动中为什么要做环境搭建?
你好,我是郭东白。在第 16、17 讲,我们讲解了架构师在架构活动中要起的作用,主要有达成共识、控制风险、保障交付和沉淀知识这四个方面。这是从架构师创造价值的维度来拆解的。 那么从这节课开始,我将从架构活动生命周期的维度上…...

15个awk的经典实战案例
目录 一、插入几个新字段 二、格式化个空白 三、筛选IPV4地址 命令及结果 第一种查询方式 第二种查询方式 第三种查询方式 四、读取.ini配置文件中的某段 命令及结果 第一种查询方式 第二种查询方式 五、根据某字段去重 命令及结果 第一种方式 第二种方式 六、…...

【JAVA】本地代码获取路径乱码
本地代码获取路径乱码 获取resources下资源乱码 解决方法: 获取路径后把返回值decode下就可以了. 用utf-8编码 String path this.getClass().getResource("").getPath();...
自然机器人最新发布:智能流程助手,与GPT深度融合
ChatGPT自2022年11月上线后就受到现象级地广泛关注,5天时间用户就已经突破百万,仅2个月时间月活用户就突破1亿,成为史上增速最快的消费级应用,远超TikTok、Facebook、Google等全球应用。它展现了类似人类的语言理解和对话交互能力…...
【Mybatis】4—动态SQL
⭐⭐⭐⭐⭐⭐ Github主页👉https://github.com/A-BigTree 笔记链接👉https://github.com/A-BigTree/Code_Learning ⭐⭐⭐⭐⭐⭐ 如果可以,麻烦各位看官顺手点个star~😊 如果文章对你有所帮助,可以点赞👍…...

事务传播特性和隔离级别
事务的四大特性 1.原子性(Atomicity):事务不可再分,要么都执行,要么都不执行。 2.一致性(Consistency):事务执行前后,数据的完整性保持一致,即修改前后数据总…...

socket网络编程
端口 :主机上一个应用程序的代号(端口不变) 为什么不用PID来表示一个应用 因为PID会变化,而端口是不变的 套接字进程间通信——跨越主机 1、主机字节序列和网络字节序列 主机字节序列分为大端字节序和小端字节序,不同…...

IO多路复用机制详解
高性能IO模型浅析 服务器端编程经常需要构造高性能的IO模型,常见的IO模型有四种: (1)同步阻塞IO(Blocking IO):即传统的IO模型。 (2)同步非阻塞IO(Non-blo…...

选择一款好用的营销项目管理可以更好帮您解决任何问题
营销项目管理软件哪个好用?使用Zoho Projects营销项目管理软件,您可以从营销活动中获得最佳结果,并获得可执行的见解。Zoho Projects的营销项目管理软件可让您和您的团队全面了解您的所有活动。监控您的社交渠道、跟踪结果并在一处进行交流。…...
计算机网络(第八版)第三章知识总结(期末复习可用)
本笔记来源于博主上课所记笔记整理,可能不全,欢迎大家批评指正,如果觉得有用记得点个赞,给博主点个关注...该笔记将会持续更新...整理不易,希望大家多多点赞。 第一章 第三章 数据链路层 数据链路层属于计算机网络的低…...

VScode配置8086汇编环境
目录 0、感慨 1、VScode的安装 2、下载MASM/TASM插件 3、测试汇编环境 新建文件 汇编文件配置 汇编代码的运行 0、感慨 搭配一个简单些的环境,对于我们汇编的学习很有帮助,在这里又不得不感叹vscode的强大,使用VScodeMASM/TASM插件就…...

银行数字化转型导师坚鹏:银行同业核心产品与营销策略解读
数字化背景下银行同业核心产品与营销策略解读课程背景: 数字化背景下,很多银行存在以下问题:不清楚银行同业核心产品发展现状?不清楚如何银行同业产品营销策略?不知道如何更好地挖掘他行优质客户? 课…...

在线答题考试小程序源码系统 支持在线刷题+考试二合一+安装部署教程
分享一个在线答题考试小程序源码系统,支持在线刷题考试二合一,程序包含前后端和详细的安装部署教程,可以用来给学生刷题,给员工刷题,给政企员工刷题,万能通用版适合任何行业在线刷题及考试。 系统功能一览&…...

同城跑腿小程序怎么做
随着市场需求越来越大,分工越来明细,很多人看到了跑腿类的商机,特别是学校、小区、商务园等场所。无论是校园跑腿还是社会类跑腿,例中代取快递、代拿包裹、代搬东西上下楼、代排队、帮忙办事、代买东西、代送等等功能都少不了&…...

爬虫逆向学习(五):使用RPC框架serkio解决逆向难题
serkio应用实战前言实战开发多次调用加密方法破解失败如何刷新加密方法同一个浏览器的加密代码如何给不同用户使用注意事项总结前言 最近在工作中遇到了一个反爬虫产品,处于技术能力和新产品迭代更新快的考虑,最后选择使用RPC技术解决问题,因…...

NumPy 秘籍中文第二版:三、掌握常用函数
原文:NumPy Cookbook - Second Edition 协议:CC BY-NC-SA 4.0 译者:飞龙 在本章中,我们将介绍许多常用函数: sqrt(),log(),arange(),astype()和sum()ceil(),modf()&…...

蓝桥杯基础17:BASIC-02试题 序列求和
资源限制 内存限制:256.0MB C/C时间限制:1.0s Java时间限制:3.0s Python时间限制:5.0s 问题描述 求123...n的值。 输入格式 输入包括一个整数n。 输出格式 输出一行,包括一个整数,表示123...n…...
vue移动端实现vue-pdf在线预览与展示,并且解决页面汉字空白的问题
vue移动端实现pdf的页面在线预览展示,CMapReaderFactory可以解决文字不展示、空白问题 //1、安装依赖vue-pdf npm install --save vue-pdf//2、使用组件 <pdf v-for"i in numPages" ref"pdfs" :src"pdfUrl" :key"i" …...
代码随想录算法训练营第四十九天 | 121. 买卖股票的最佳时机、122.买卖股票的最佳时机II
打卡第49天,买卖股票系列了 今日任务 ● 121. 买卖股票的最佳时机 ● 122.买卖股票的最佳时机II 121. 买卖股票的最佳时机 给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 你只能选择 某一天 买入这只股票&#x…...

MySQL的日志
就相当于人的日记本,记录每天发生的事,可以对数据进行追踪 一、错误日志 也就是存放错误信息的 二、二进制日志-binlog 在低版本的MySQL中,二进制日志是不会默认开启的 存放除了查询语句的其他语句 三、查询日志 查询日志会记录客户端的所…...

uni-app学习笔记二十四--showLoading和showModal的用法
showLoading(OBJECT) 显示 loading 提示框, 需主动调用 uni.hideLoading 才能关闭提示框。 OBJECT参数说明 参数类型必填说明平台差异说明titleString是提示的文字内容,显示在loading的下方maskBoolean否是否显示透明蒙层,防止触摸穿透,默…...

智能生成完整 Java 后端架构,告别手动编写 ControllerServiceDao
在 Java 后端开发的漫长征途上,开发者们常常深陷繁琐的基础代码编写泥潭。尤其是 Controller、Service、Dao 这三层代码的手动编写,堪称开发效率的 “拦路虎”。从搭建项目骨架到填充业务逻辑,每一个环节都需要开发者投入大量精力,…...

IDEA集成JRebel插件,实现实时热部署
系列文章目录 文章目录 系列文章目录一、JRebel是什么?1.1、对比传统开发流程1.2、JRebel特性以及优势 二、IDEA集成JRebel三、IDEA以JRebel运行报错处理四、IDEA以JRebel运行演示实时热部署 一、JRebel是什么? JRebel 是一款针对 Java 开发的热部署工具…...
Rust 学习笔记:使用自定义命令扩展 Cargo
Rust 学习笔记:使用自定义命令扩展 Cargo Rust 学习笔记:使用自定义命令扩展 Cargo Rust 学习笔记:使用自定义命令扩展 Cargo Cargo 支持通过 $PATH 中的 cargo-something 形式的二进制文件拓展子命令,而无需修改 Cargo 本身。 …...

Web前端基础:JavaScript
1.JS核心语法 1.1 JS引入方式 第一种方式:内部脚本,将JS代码定义在HTML页面中 JavaScript代码必须位于<script></script>标签之间在HTML文档中,可以在任意地方,放置任意数量的<script></script>一般会把…...
MYSQL(二) ---MySQL 8.4 新特性与变量变更
MySQL 8.4 新特性与变量变更 作者:程序员LSP 分类:MySQL 8.4 教程 / 新特性 / 升级指南 更新时间:2025年6月 📌 前言 MySQL 8.4 是当前最新的稳定版本,相较于 8.0 系列,在审计日志、高可用、性能调优、认证…...
STM32开发,创建线程栈空间大小判断
1. 使用RTOS提供的API函数(以FreeRTOS为例) 函数原型:UBaseType_t uxTaskGetStackHighWaterMark(TaskHandle_t xTask)功能:获取指定任务堆栈中剩余的最小空间(以字为单位,非字节)。使用步骤&am…...
大模型高效提示词Prompt编写指南
大模型高效Prompt编写指南 一、引言二、核心原则1. 清晰性原则:明确指令与期望2. 具体性原则:提供详细上下文3. 结构化原则:组织信息的逻辑与层次4. 迭代优化原则:通过反馈改进Prompt5. 简洁性原则:避免冗余信息 三、文…...
网络通讯知识——通讯分层介绍,gRPC,RabbitMQ分层
网络通讯分层 网络通讯分层是为了将复杂的网络通信问题分解为多个独立、可管理的层次,每个层次专注于特定功能。目前主流的分层模型包括OSI七层模型和TCP/IP四层(或五层)模型,以下是详细解析: 一、OSI七层模型&#…...