字节小米等后端岗位C++面试题
C++ 基础
- 引用和指针之间的区别?
- 堆栈和堆中的内存分配有何区别?
- 存在哪些类型的智能指针?
- unique_ptr 是如何实现的?我们如何强制在 unique_ptr 中仅存在一个对象所有者?
- shared_ptr 如何工作?对象之间如何同步引用计数器?
- 我们可以复制unique_ptr或者将其从一个对象传递到另一个对象吗?
- 什么是右值和左值?
- 什么是 std::move 和 std::forward()
面向对象编程(OOP)
- 访问某些类的私有字段的方法?
- 一个类可以继承多个类吗?
- 静态字段是否在类构造函数中初始化?
- 构造函数/析构函数中会抛出异常吗?如何防止这种情况发生?
- 什么是虚方法?
- 为什么我们需要虚拟析构函数?
- 抽象类和接口的区别?
- 构造函数可以是虚拟的吗?
- 关键字 const 如何用于类方法?
- 如何保护对象不被复制?
STL 容器
- 向量和列表之间的区别?
- 地图和无序地图之间的区别?
- 调用 push_back() 时向量中的迭代器无效吗?
如何修改你的类以便与 map 和 unordered_map 一起使用?
主题
- 进程和线程之间的区别?
- 同一根线程可以重复运行吗?
- 同步线程的方法?
- 什么是死锁?
字节跳动中台、后端研发面试题
一面经常提到的问题
1.手撕lru
2.并发编程
3.函数式编程
4.无锁队列
5.CAP
6.线程池,进程池
7.大文件如何对字符串排序
8.线程同步
9.进程状态
10.进程调度、多进程开发,多线程开发
11.线程通信 + 2道场景题选择进程通信方式
12.raws
13.ocket与socket区别
14.设计高性能服务
15.nginx反向代理 epoll,nginx工作模式实现原理
16.pmtu,sendfile,io status等等
17.手撕memcpy 考虑内存重叠与copy效率
二面
1.自我介绍+项目介绍
2.mmap
3.软链接与硬链接
4.free命令 cache与buffer区别
5.数据库 列与行数据库区别
6.线程安全
7.单核线程安全
8.事务
9.隔离性,隔离级别
10.索引,合并
11.http cookie与session
12.跨域请求
13.最大上升子序列个数
14.函数调用过程
15.static c/c++区别
16.项目中的一些问题
17.tcp与udp
18.tcp深挖
19.进程与线程
20.字符串匹配
小米C++相关岗位面试题
1.自我介绍
2.项目介绍
3.实习介绍
4.C++11的新特性
5.懂rapidjson的底层原理?rapidjson使用的过程中遇到过那些bug?
6.判断链表是否有环,求环的入口节点
7.多态实现原理?虚函数指针具体怎么找虚函数表?
8.如何创建进程?
9.进程布局?堆栈全局代码那些区
10.函数压栈过程,包括函数带参数
11.”hello world"存在那个区?
12.线程私有区和共享区
13.是个全局变量但我又想是线程独有的怎么办?
14.tcp三次握手、流量控制、拥塞控制、MSS那一套
15.timewait
16.客户端握手发送SYN,TCP状态机,client变成什么状态?
17.相交链表
C++ 基础
1、引用和指针之间的区别?
引用和指针是C++中两种重要的间接访问机制。引用实质上是一个别名,它在声明时必须初始化,一旦绑定就不能改变。引用不能为空,也不能建立引用的引用,这使得它比指针更安全。引用在内存中实际上是作为一个常量指针实现的,但它对程序员隐藏了指针的复杂性。指针则是一个变量,它存储了另一个变量的内存地址。指针可以为空,可以改变它所指向的对象,也可以进行指针运算。指针的灵活性使它成为一个强大的工具,但同时也容易导致程序错误,如悬空指针和内存泄漏。
2、堆栈和堆中的内存分配有何区别?
栈内存的分配和释放是由编译器自动完成的。当变量超出其作用域时,栈内存会自动释放。栈内存的分配和释放速度很快,因为它使用简单的指针移动来实现。栈内存的大小是固定的,在程序运行时就已确定。
堆内存则是动态分配的,由程序员手动管理或使用智能指针等工具管理。堆内存的生命周期不受作用域限制,可以在需要时分配,在不需要时释放。堆内存的大小理论上只受系统可用内存的限制。但堆内存的分配和释放相对较慢,且容易产生内存碎片。
3、存在哪些类型的智能指针?
智能指针类型: C++11定义了三种智能指针。unique_ptr实现了独占式拥有概念,它保证一个对象只被一个指针拥有。shared_ptr允许多个指针指向同一个对象,通过引用计数机制来管理对象的生命周期。weak_ptr是一种弱引用,它不会增加引用计数,主要用于解决shared_ptr可能产生的循环引用问题。
auto_ptr是C++98引入的智能指针,但由于其危险的拷贝语义已在C++11中被弃用。每种智能指针都有其特定的使用场景,选择合适的智能指针可以大大降低内存管理的复杂性。
4、unique_ptr 是如何实现的?我们如何强制在 unique_ptr 中仅存在一个对象所有者?
unique_ptr的核心思想是独占式拥有。它通过删除拷贝构造函数和拷贝赋值运算符来保证一个对象只能被一个unique_ptr拥有。它支持移动语义,允许在保证安全的情况下转移对象的所有权。
unique_ptr内部包含一个原始指针和一个删除器。删除器是一个可调用对象,负责在unique_ptr析构时释放所管理的资源。unique_ptr的实现非常轻量,在大多数情况下不会带来任何额外的开销。
5、shared_ptr 如何工作?对象之间如何同步引用计数器?
shared_ptr使用引用计数来追踪有多少个shared_ptr共享同一个对象。当引用计数增加时(比如拷贝构造),计数器加一;当引用计数减少时(比如shared_ptr析构),计数器减一。当计数器降为零时,管理的对象会被删除。
为了保证线程安全,引用计数的更新必须是原子操作。shared_ptr内部实际上包含两个指针:一个指向管理的对象,另一个指向控制块。控制块包含引用计数、删除器等信息。这种实现方式使shared_ptr的大小是原始指针的两倍。
6、我们可以复制unique_ptr或者将其从一个对象传递到另一个对象吗?
由于unique_ptr强制独占所有权,所以它不能被复制。但它可以通过std::move来转移所有权。在转移后,原来的unique_ptr会变为空指针,而目标unique_ptr获得对象的所有权。
这种设计使得unique_ptr可以方便地在函数间传递对象的所有权。例如,factory函数可以返回一个unique_ptr,调用者就获得了返回对象的所有权。unique_ptr也可以存储在容器中,但必须使用移动语义来操作。
7、什么是右值和左值?
在C++中,左值是一个位置值,它标识一个持久的对象。左值有一个地址,可以取地址操作符作用于它。典型的左值包括变量名、解引用的指针等。
右值表示临时值,它不能取地址。右值可以分为纯右值(pr-value)和将亡值(x-value)。纯右值是临时的、不具名的值,如字面常量。将亡值是即将被销毁的值,比如即将被移动的对象。
8、什么是 std::move 和 std::forward()
std::move和std::forward: std::move是一个工具函数,它将一个左值强制转换为右值引用,使得我们可以调用移动构造函数或移动赋值运算符。这在需要显式地指明要进行移动操作时非常有用。
std::forward用于完美转发,它保持参数的值类别(左值或右值)不变。在模板编程中,std::forward可以确保参数按照其原始类型被转发,这对于通用库的实现非常重要。
9、访问某些类的私有字段的方法?
访问私有字段的方法: 在C++中,有几种合法的方式可以访问类的私有成员。最常用的是通过友元(friend)声明,可以是友元函数或友元类。友元声明允许外部代码访问类的私有成员。
另一种方式是通过类的公共接口方法来间接访问私有成员。这是面向对象设计中推荐的方式,因为它维护了类的封装性。还可以使用嵌套类,因为嵌套类可以访问外部类的所有成员。
10、一个类可以继承多个类吗?
类的多重继承: C++支持多重继承,即一个类可以同时继承多个基类。但这可能导致菱形继承问题,即一个类通过不同的路径继承了同一个基类的多个实例。
为了解决这个问题,C++引入了虚继承。虚继承确保共同基类只有一个实例。虽然C++支持多重继承,但在实际开发中应该谨慎使用,因为它可能增加代码的复杂性。
11、静态字段是否在类构造函数中初始化?
静态字段的初始化: 静态成员变量属于类而不是对象,它们不在构造函数中初始化。静态成员需要在类外进行定义和初始化,除非是整型或枚举类型的const static成员,这种情况可以在类内初始化。
这样设计的原因是为了避免静态成员被多次初始化。在程序的整个生命周期中,静态成员只需要初始化一次。静态成员的初始化发生在程序开始执行之前。
12、构造函数/析构函数中会抛出异常吗?如何防止这种情况发生?
构造函数/析构函数的异常: 构造函数可以抛出异常,这通常用于指示初始化失败。但析构函数应该避免抛出异常,因为如果在异常处理过程中析构函数抛出异常,程序会立即终止。
为了防止构造函数抛出异常,可以使用try-catch块包装可能抛出异常的代码,或者使用初始化列表来确保资源获取。对于析构函数,应该将其声明为noexcept,并在内部处理所有可能的异常。
13、什么是虚方法?
虚方法: 虚方法是C++实现运行时多态的机制。当基类中声明一个函数为virtual时,派生类可以重写这个函数。在运行时,程序会根据对象的实际类型来调用适当的函数版本。
虚函数通过虚函数表(vtable)来实现。每个包含虚函数的类都有一个vtable,其中存储了该类虚函数的地址。每个对象都包含一个指向vtable的指针(vptr)。这种机制允许在运行时动态绑定函数调用。
14、为什么我们需要虚拟析构函数?
虚析构函数的必要性: 当通过基类指针删除派生类对象时,如果析构函数不是虚函数,则只会调用基类的析构函数,而不会调用派生类的析构函数。这会导致资源泄漏。
因此,当一个类可能作为基类时,其析构函数应该声明为虚函数。这确保了在删除对象时,无论使用什么类型的指针,都能正确调用整个继承链上的析构函数。
15、抽象类和接口的区别?
抽象类和接口的区别: 抽象类是包含至少一个纯虚函数的类。它不能被实例化,只能作为基类使用。抽象类可以包含普通成员函数和数据成员,这些可以在派生类中直接使用。
接口是一种特殊的抽象类,它只包含纯虚函数。在C++中,接口通常被实现为所有函数都是纯虚函数的抽象类。接口定义了一个对象能够做什么,而不规定如何做。
16、构造函数可以是虚拟的吗?
构造函数的虚拟性: 构造函数不能是虚函数。这是因为在调用构造函数时,对象还没有被完全构造,vptr还没有被初始化。因此不能使用虚函数机制。
如果需要根据运行时条件创建不同类型的对象,可以使用工厂模式。工厂模式通过一个静态成员函数来创建对象,这个函数可以根据参数返回不同类型的对象。
17、关键字 const 如何用于类方法?
const关键字在类方法中的使用: const成员函数承诺不会修改对象的状态。它们可以被const对象调用,这提供了一种编译时的类型安全机制。const成员函数不能调用非const成员函数。如果需要在const成员函数中修改某些成员变量,可以将这些变量声明为mutable。mutable允许在const成员函数中修改特定的成员变量,这通常用于缓存等不影响对象逻辑状态的场合。
18、如何保护对象不被复制?
防止对象被复制: 有几种方式可以防止对象被复制。最现代的方式是使用=delete来删除拷贝构造函数和拷贝赋值运算符。这会在编译时阻止任何复制操作。
另一种方式是将拷贝构造函数和拷贝赋值运算符声明为private,并且不提供实现。这也可以防止复制,但错误信息可能不如=delete清晰。
19、向量和列表之间的区别?
vector和list的区别: vector是一种连续存储的容器,它在内存中分配一块连续的空间。这使得vector支持随机访问,但在中间插入或删除元素时需要移动后续元素。当vector需要更多空间时,它会重新分配一个更大的连续空间。
list是一种链式存储的容器,它的元素可以分散在内存的不同位置。list不支持随机访问,但在任何位置插入或删除元素都很快,因为只需要修改相关节点的指针。list的每个元素都需要额外的内存来存储指针。
20、map和unordered_map之间的区别?
map和unordered_map的区别: map基于红黑树实现,它保持键值对按键的顺序存储。这使得map的查找、插入和删除操作的时间复杂度都是O(log n)。map占用的内存较少,而且可以按序遍历。
unordered_map基于哈希表实现,它不保持任何顺序。在理想情况下,查找、插入和删除操作的时间复杂度都是O(1)。但unordered_map需要额外的内存来存储哈希表,而且可能需要处理哈希冲突。
21 调用 push_back() 时向量中的迭代器无效吗?
vector的push_back和迭代器:
当向vector调用push_back时,迭代器的有效性取决于是否发生了内存重新分配。如果vector当前的capacity足够容纳新元素,那么push_back不会导致迭代器失效。但如果capacity不足,vector会分配一个更大的内存块(通常是当前大小的1.5或2倍),并将所有元素复制到新位置,这时之前的所有迭代器都会失效。
为了避免迭代器失效的问题,有以下几种方法:
- 预先使用reserve分配足够的空间
- 在push_back后重新获取迭代器
- 使用索引而不是迭代器来遍历vector
- 如果必须使用迭代器,可以先完成迭代器操作,再进行push_back
在实际编程中,建议在知道vector大致容量的情况下,先调用reserve预分配空间。这不仅能避免迭代器失效,还能提高程序性能,因为减少了内存重新分配的次数。
22、如何修改你的类以便与 map 和 unordered_map 一起使用?
修改类使其可用于map和unordered_map:
要让自定义类可以作为map的键,必须为该类实现小于运算符(operator<)。这是因为map内部使用红黑树来组织数据,需要通过比较运算来确定元素的位置。operator<必须满足严格弱序关系,即具有传递性且不能出现等价关系。
对于unordered_map,要求更复杂:
- 需要实现相等运算符(operator==)
- 需要提供一个特化的std::hash模板,或者自定义哈希函数
实现示例:
class MyClass {int id;string name;
public:// 为map实现小于运算符bool operator<(const MyClass& other) const {if (id != other.id) return id < other.id;return name < other.name;}// 为unordered_map实现相等运算符bool operator==(const MyClass& other) const {return id == other.id && name == other.name;}
};// 为unordered_map特化hash模板
namespace std {template<>struct hash<MyClass> {size_t operator()(const MyClass& obj) const {return hash<int>()(obj.id) ^ hash<string>()(obj.name);}};
}
哈希函数的质量会直接影响unordered_map的性能。好的哈希函数应该能够均匀分布键值,避免产生过多的哈希冲突。在选择容器时,如果需要保持元素顺序就用map,如果需要最快的查找性能就用unordered_map。
23、同步线程的方法?
在C++中,有多种线程同步机制可以确保多线程程序的正确性:
- 互斥锁(mutex):
最基本的同步机制,用于保护共享资源。C++提供了多种互斥锁:
- std::mutex:标准互斥锁
- std::recursive_mutex:允许同一线程多次加锁
- std::timed_mutex:支持超时的互斥锁
- std::shared_mutex:读写锁,允许多个读者或一个写者
- 条件变量(condition_variable):
用于线程间的通信和同步,典型用法是等待某个条件成立:
std::mutex mtx;
std::condition_variable cv;
bool ready = false;// 消费者线程
{std::unique_lock<std::mutex> lock(mtx);cv.wait(lock, []{ return ready; });// 处理数据
}// 生产者线程
{std::lock_guard<std::mutex> lock(mtx);ready = true;cv.notify_one();
}
-
原子操作:
对于简单的数据类型,使用std::atomic可以避免显式的锁定:
std::atomic counter{0};
counter++; // 原子操作,线程安全 -
读写锁:
当读操作远多于写操作时,使用std::shared_mutex可以提高并发性:
std::shared_mutex rwlock;
// 读者
{std::shared_lock<std::shared_mutex> lock(rwlock);// 读取数据
}
// 写者
{std::unique_lock<std::shared_mutex> lock(rwlock);// 修改数据
}
选择合适的同步机制取决于具体场景:
- 简单的共享资源保护用mutex
- 需要线程间通信用condition_variable
- 简单数据类型的并发访问用atomic
- 读多写少的场景用shared_mutex
5.避免死锁一般通过以下方法:
- 始终按照相同的顺序获取锁
- 使用std::lock同时获取多个锁
- 避免在持有锁时调用用户代码
- 使用RAII风格的锁管理
相关文章:
字节小米等后端岗位C++面试题
C 基础 引用和指针之间的区别?堆栈和堆中的内存分配有何区别?存在哪些类型的智能指针?unique_ptr 是如何实现的?我们如何强制在 unique_ptr 中仅存在一个对象所有者?shared_ptr 如何工作?对象之间如何同步…...
IOS HTTPS代理抓包工具使用教程
打开抓包软件 在设备列表中选择要抓包的 设备,然后选择功能区域中的 HTTPS代理抓包。根据弹出的提示按照配置文件和设置手机代理。如果是本机则会自动配置,只需要按照提醒操作即可。 iOS 抓包准备 通过 USB 将 iOS 设备连接到电脑,设备需解…...
renben-openstack-使用操作
管理员操作 (1)上传一个qcow2格式的centos7镜像 (2)管理员------>云主机类型------>创建云主机类型 名称:Centos7 VCPU数量:1 内存: 1024 根磁盘: 10G 其他的默认 点击创建云主机类型即可 界面会显示如下 创建公网络 (1)创建…...
HOW - Form 表单确认校验两种模式(以 Modal 场景为例)
目录 一、背景二、具体1. 模式一:点击确认进行校验提示2. 模式二:确认按钮依赖于表单内容实现说明 一、背景 基于react、antd form分别实现如下两种模式: 1、一个 Modal,点击确认进行校验提示2、一个 Modal,确认按钮…...
MATLAB算法实战应用案例精讲-【数模应用】图像边缘检测(附MATLAB和python代码实现)(二)
目录 前言 算法原理 相关概念 二值图像、灰度图像、彩色图像 邻接性、连通性 图像滤波 频率 滤波器 边缘检测算子:Sobel算子、Scharr算子、Laplacian算子、Canny算子 梯度计算 + 顶帽 + 黑帽 + 拉普拉斯金字塔 相位一致性(Phase Congruency,PC) 几种常见的算法…...
高考日语听力中常考2大类关键词
高考日语听力中,有些关键词的出现频率很高,同学们掌握这些关键词的读音和意思,可以提高听力答题的正确率,如时间类、地点类、天气类关键词……本文档为大家整理了干货,高考日语听力常考关键词,帮助同学们区分和积累常用词汇,记得要持续关注哦! 时间类关键词 1.星期 ∙…...
windows和linux的抓包方式
1.实验准备: 一台windows主机,一台linux主机 wireshark使用: 打开wireshark,这些有波动的就代表可以有流量经过该网卡,选择一张有流量经过的网卡 可以看到很多的流量,然后可以使用过滤器来过滤想要的流量…...
工业 4G 路由器赋能远程医疗,守护生命线
在医疗领域,尤其是偏远地区的医疗救治场景中,工业 4G 路由器正发挥着无可替代的关键作用,宛如一条坚韧的 “生命线”,为守护患者健康持续赋能。 偏远地区医疗资源相对匮乏,常常面临着专业医生短缺、诊疗设备有限等困境…...
《太阳之子》Build16524106官方中文学习版
《太阳之子》官方中文版https://pan.xunlei.com/s/VODabFuJ5gA7rCUACMulT5YGA1?pwdc47e# 集战术狙击、解谜与轻度潜行要素于一身,呈现独一无二的第三人称射击游戏体验。每关你只有一发子弹,但你可以进行在命中时重新瞄准、绕过障碍物、加速击穿护甲等操…...
shell-条件判断
目录 一、条件判断 1.按照文件类型进行判断 2.按照文件权限进行判断 3.两个文件之间进行比较 4.两个整数之间进行比较 5.字符串的判断 6.多重条件判断 二、if条件判断 1.单分支if条件语句 2.双分支if条件语句 (1)判断某文件是否存在 &#x…...
【TI毫米波雷达】DCA1000不使用mmWave Studio的数据采集方法,以及自动化实时数据采集
【TI毫米波雷达】DCA1000不使用mmWave Studio的数据采集方法,以及自动化实时数据采集 mmWave Studio提供的功能完全够用了 不用去纠结用DCA1000低延迟、无GUI传数据 速度最快又保证算力无非就是就是Linux板自己写驱动做串口和UDP 做雷达产品应用也不会采用DCA1000的…...
20250110_ PyTorch中的张量操作
文章目录 前言1、torch.cat 函数2、索引、维度扩展和张量的广播3、切片操作3.1、 encoded_first_node3.2、probs 4、长难代码分析4.1、selected4.1.1、multinomial(1)工作原理: 总结 前言 1、torch.cat 函数 torch.cat 函数将两个张量拼接起来,具体地是…...
【ROS2】☆ launch之Python
☆重点 ROS1和ROS2其中一个很大区别之一就是launch的编写方式。在ROS1中采用xml格式编写launch,而ROS2保留了XML 格式launch,还另外引入了Python和YAML 编写方式。选择哪种编写取决于每位开发人员的爱好,但是ROS2官方推荐使用Python方式编写…...
unity rb.velocity和transform.position
rb.velocity和transform.position是用来控制物体位置的两种方式,前者通常用来控制人物的移动,它们的主要区别和适用场景如下 一,rb.velocity(控制刚体的速度) 它可以直接控制物体的速度,而不是物体的位置…...
景芯SOC设计实战
终身辅导、一对一辅导,手把手教您完成SoC全流程设计,从入门到进阶,带您掌握SoC芯片架构、算法、设计、验证、DFT、后端及低功耗全流程!直播视频不定期升级!让您快速超越同龄人! 景芯团队主打文档服务器实战…...
【WRF运行报错】总结WRF运行时报错及解决方案(持续更新)
目录 ./real.exe错误1:ERROR while reading namelist physics./wrf.exe错误1:FATAL CALLED FROM FILE: <stdin> LINE: 2419 Warning: too many input landuse types参考./real.exe 错误1:ERROR while reading namelist physics 执行./real.exe时,报错如下: taski…...
Mysql快速列出来所有列信息
文章目录 需求描述实现思路1、如何查表信息2、如何取字段描述信息3、如何将列信息一行展示4、拼接最终结果 需求描述 如何将MySQL数据库中指定表【tb_order】的所有字段都展示出来,以备注中的中文名为列名。 实现思路 最终展示效果,即拼接出可执行执行…...
spring boot发送邮箱,java实现邮箱发送(邮件带附件)3中方式【保姆级教程一,代码直接用】
文章目录 Java发送邮箱的方式1. 基于 Javax.mail 实现关于附件上传的方法 2. 基于 org.apache.commons.mail 实现常见报错 3. 基于 spring-boot-starter-mail 实现(推荐) 实际开发时需要实现邮件发送,本文章实现如何从零实现邮件发送。也就是…...
数据集-目标检测系列- 电话 测数据集 call_phone >> DataBall
数据集-目标检测系列- 电话 测数据集 call DataBall 助力快速掌握数据集的信息和使用方式,会员享有 百种数据集,持续增加中。 需要更多数据资源和技术解决方案,知识星球: “DataBall - X 数据球(free)” 贵在坚持! …...
Zstandard压缩算法
简介 Zstandard(缩写为zstd)是一种开源的无损数据压缩算法,主要设计目标是提供高比率的压缩和快速的解压缩速度。它由Yann Collet开发,并于2015年首次发布。 特点 高比率的压缩(通常比gzip更好)。快速的解压缩速度(通常比gzip更快)。支持流式解压缩。可以选择不同的压…...
npm i 报错
nodejs中 使用npm install命令时报错 npm err! file C: \user\admin\package.json_package.json 里缺少 description 和 repository 两个n字段。-CSDN博客...
【LeetCode】力扣刷题热题100道(26-30题)附源码 轮转数组 乘积 矩阵 螺旋矩阵 旋转图像(C++)
目录 1.轮转数组 2.除自身以外数组的乘积 3.矩阵置零 4.螺旋矩阵 5.旋转图像 1.轮转数组 给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。 class Solution { public:void rotate(vector<int>& nums, int k) …...
EFCore HasDefaultValueSql
今天小伙伴在代码中遇到了有关 HasDefaultValue 的疑问,这里整理澄清下... 在使用 Entity Framework Core (EFCore) 配置实体时,HasDefaultValue 方法会为数据库列设置一个默认值。该默认值的行为取决于以下条件: 1. 配置 HasDefaultValue 的…...
【数据结构】栈
目录 1.1 什么是栈 1.2 顺序栈 1.2.1 特性 1.3 链式栈 1.3.1 特性 总结: 1.1 什么是栈 栈是只能在一端进行插入和删除操作的线性表(又称为堆栈),进行插入和删除操作的一端称为栈顶,另一端称为栈底。 特点:栈是先进后出FILO…...
C++初阶—CC++内存管理
第一章:C/C内存分布 int globalVar 1; static int staticGlobalVar 1; void Test() {static int staticVar 1;int localVar 1;int num1[10] { 1, 2, 3, 4 };char char2[] "abcd";const char* pChar3 "abcd";int* ptr1 (int*)malloc(si…...
【机器视觉】OpenCV 图像基本变换
文章目录 介绍机器视觉的核心组成部分机器视觉的关键技术和趋势 4. 图像的基本变换4.1 图像的放大与缩小4.2 图像的翻转4.3 图像的旋转4.4 仿射变换之图像平移4.5 仿射变换之获取变换矩阵4.6 透视变换 介绍 机器视觉(Machine Vision)是一门跨学科的领域…...
【数据库】四、数据库管理与维护
文章目录 四、数据库管理与维护1 安全性管理2 事务概述3 并发控制4 备份与恢复管理 四、数据库管理与维护 1 安全性管理 安全性管理是指保护数据库,以避免非法用户进行窃取数据、篡改数据、删除数据和破坏数据库结构等操作 三个级别认证: 服务器级别…...
徐克版射雕唤醒热血武侠魂,共赴新春侠义之约
2025年大年初一,由徐克执导的古装武侠电影《射雕英雄传:侠之大者》将在影院拉开帷幕,在精彩纷呈的春节档电影中,“大IP”“大导演”“大场面”等标签让这部电影自定档起便备受关注,其精良的制作和传统中国武侠风的设定…...
设计模式(观察者模式)
设计模式(观察者模式) 第三章 设计模式之观察者模式 观察者模式介绍 观察者模式(Observer Design Pattern) 也被称为发布订阅模式 。模式定义:在对象之间定义一个一对多的依赖,当一个对象状态改变的时候…...
能量函数和能量守恒
在之前的文章1中讨论了与循环坐标相对应的动量守恒定律和动量矩守恒定律,本文将由拉格朗日方程中导出能量函数,进一步讨论能量守恒定律,并给出耗散系统的处理方法,这其中用到的一个关键数学定理是欧拉定理(描述如何将一…...
【pycharm发现找不到python打包工具,且无法下载】
发现找不到python打包工具,且无法下载 解决方法: 第一步:安装distutils,在CMD命令行输入: python -m ensurepip --default-pip第二步:检查和安装setuptools和wheel: python -m pip install --upgrade …...
使用 Maxwell 计算母线的电动势
三相短路事件的动力学 三相短路事件在电气系统中至关重要,因为三相之间的意外连接会导致电流大幅激增。如果管理不当,这些事件可能会造成损坏,因为它们会对电气元件(尤其是母线)产生极大的力和热效应。 短路时&#x…...
【Python】Python之Selenium基础教程+实战demo:提升你的测试+测试数据构造的效率!
这里写目录标题 什么是Selenium?Selenium基础用法详解环境搭建编写第一个Selenium脚本解析脚本常用的元素定位方法常用的WebDriver方法等待机制 Selenium高级技巧详解页面元素操作处理弹窗和警告框截图和日志记录多窗口和多标签页操作 一个实战的小demo步骤一&#…...
Ubuntu中批量重命名,rename
你可以使用下面的命令批量重命名这些文件,在文件名中插入 _1: 方式一 使用 mv 命令批量重命名 如果你已经在终端中,且当前目录包含这些文件,可以执行以下命令: mv ai.c ai_1.c mv ai.h ai_1.h mv ao.c ao_1.c mv a…...
LINUX 下 NODE 安装与配置
一、官网地址: (中文网)https://nodejs.cn/ (英文网)https://nodejs.org/en/ 二、下载安装包 2.1、下载地址:下载 | Node.js 中文网 https://nodejs.cn/download/ 2.2、使用 wget 命令下载到linux 服务器…...
Vue3 el-tree-v2渲染慢的问题
一、现象 使用el-tree-v2处理组织架构权限时,整个树的数据在8500条,勾选数据8200条,打开页面需要8~10秒,用户无法接受。 经调试,发现主要卡在树的渲染回显上(勾选数据少时,很快,勾选…...
【redis初阶】浅谈分布式系统
目录 一、常见概念 1.1 基本概念 2.2 评价指标(Metric) 二、架构演进 2.1 单机架构 2.2 应用数据分离架构 2.3 应用服务集群架构 2.4 读写分离/主从分离架构 2.5 引入缓存 ⸺ 冷热分离架构 2.6 数据库分库分表 2.7 业务拆分 ⸺ 引入微服务 redis学习&…...
模式识别与机器学习 | 十一章 概率图模型基础
隐马尔科夫模型(Hidden Markov Model,HMM) HMM是建模序列数据的图模型 1、第一个状态节点对应一个初始状态概率分布 2、状态转移矩阵A, 3、发射矩阵概率B 4、对特定的(x,y)的联合概率可以表示为 α递归计算——前向算法β递归…...
Linux基本指令(1)
一、ls指令 功能:对于目录,显示这个目录下的目录名以及文件名;对于文件,显示文件名 后面可接命令行选项配合使用,接选项时ls与选项以及选项与选项之间要有一个空格; 这里先学习了两个选项:-l…...
逐“绿”前行 企业综合能源管控低碳转型如何推进?
引言: 在“双碳”战略指引下,中国低碳节能各项工作有序推进,逐步建立起碳达峰碳中和“1N”的政策体系,重点领域、重点行业及各地区的碳达峰实施方案相继出台。能源对于促进经济社会发展、增进人民福祉至关重要。近年来࿰…...
springboot和vue配置https请求
项目场景: 代码发布到线上使用https请求需要配置ssl证书,前后端都需要修改。 问题描述 如图,我们在调用接口时报如下错误,这就是未配置ssl但是用https请求产生的问题。 解决方案: 前端:在vite.config.js文…...
数据库(2)--建表 表操作
1.建表 语法: create table if not exists 表名( 类型名 类型 comment ‘注释内容’, ... )设置字符集编码与排序规则; create table if not exists student( name char(10) comment 姓名, id bigint comment 学号 )character set utf8mb4 collate utf8mb4_0900_a…...
泷羽sec----学会并玩转powershell【基础1-2】
声明! 学习视频来自B站up主 泷羽sec 有兴趣的师傅可以关注一下,如涉及侵权马上删除文章,笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其他均与本人以及泷羽sec团队无关&#…...
2 逻辑符号
在文件和目录的判断或者其他情况中,可以组合使用多个条件。 逻辑与 (&&) 逻辑与运算符 && 用于在多个条件都为真时执行某个操作。 # 判断文件是否存在且可读 if [ -f "$file" ] && [ -r "$file" ]; thenecho "…...
Android基于回调的事件处理
Android 中的回调机制:基于回调的事件处理详解 在 Android 开发中,回调(Callback)是一种常见的事件处理机制,主要用于异步操作和事件通知。与传统的基于监听器的事件处理相比,回调机制更加灵活、通用&…...
跨界融合:人工智能与区块链如何重新定义数据安全?
引言:数据安全的挑战与现状 在信息化驱动的数字化时代,数据已成为企业和个人最重要的资产之一。然而,随着网络技术的逐步优化和数据量的爆发式增长,数据安全问题也愈变突出。 数据安全现状:– 数据泄露驱动相关事件驱…...
qml SpringAnimation详解
1. 概述 SpringAnimation 是 Qt Quick 中用于模拟弹簧效果的动画类。它通过模拟物体在弹簧力作用下的反应,产生一种振荡的动画效果,常用于模拟具有自然回弹、弹性和振动的动态行为。这种动画效果在 UI 中广泛应用,特别是在拖动、拉伸、回弹等…...
Qt 5.14.2 学习记录 —— 칠 QWidget 常用控件(2)
文章目录 1、Window Frame2、windowTitle3、windowIcon4、qrc机制5、windowOpacity 1、Window Frame 在运行Qt程序后,除了用户做的界面,最上面还有一个框,这就是window frame框。对于界面的元素,它们的原点是Qt界面的左上角或win…...
Windows service运行Django项目
系统:Windows Service 软件:nssm,nginx 配置Django项目 1、把Django项目的静态文件整理到staticfiles文件夹中 注:settings中的设置 STATIC_URL /static/ STATIC_ROOT os.path.join(BASE_DIR, staticfiles/) STATICFILES_DI…...
notebook主目录及pip镜像源修改
目录 一、notebook主目录修改二、pip镜像源修改 一、notebook主目录修改 在使用Jupyter Notebook进行数据分析时,生成的.ipynb文件默认会保存在Jupyter的主目录中。通常情况下,系统会将Jupyter的主目录设置为系统的文档目录,而文档目录通常位…...