自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(32)
  • 收藏
  • 关注

原创 Linux核心目录

本文概述了Linux系统核心目录结构及其功能:/bin存放基础命令,/etc存放系统配置,/usr包含用户程序,/var存储可变数据,/boot存放启动文件,/mnt用于临时挂载,/tmp存放临时文件,/dev管理设备文件,/sys提供内核接口。每个目录都有特定用途和访问规则,如/bin命令所有用户可用,/tmp临时文件可被清空,/dev区分字符设备和块设备等。这些目录共同构成了Linux文件系统的核心架构,支撑着系统的正常运行和管理。

2026-03-17 22:47:52 26

原创 数据库部分总结

数据库索引优化在数据量小、返回大量数据或字段选择性低时可能降低查询速度。事务具有ACID特性(原子性、一致性、隔离性、持久性),通过UndoLog实现回滚和MVCC,RedoLog确保崩溃恢复。InnoDB的行级锁基于索引实现,提高并发性。不同隔离级别解决脏读、幻读和不可重复读问题,其中ReadView机制实现MVCC数据可见性判断。四种隔离级别(读未提交、读已提交、可重复读、串行化)在并发控制与性能间取得平衡。

2026-03-14 17:30:09 33

原创 类成员函数的重载、覆盖和隐藏区别

本文介绍了C++中函数重载、覆盖和隐藏的区别。重载发生在同一类中,函数名相同但参数不同,属于静态绑定;覆盖是子类重写父类虚函数,要求签名一致,实现动态多态;隐藏则是子类定义了与父类同名函数(参数不同),导致父类函数被隐藏。三者区别主要体现在作用域、参数要求和绑定时机上。正确理解这些概念对实现多态性和避免命名冲突至关重要。

2026-03-12 22:46:01 17

原创 C++后端部分总结

本文总结了C++编程中的核心概念:1.RAII机制通过对象生命周期自动管理资源;2.智能指针类型(unique_ptr/shared_ptr/weak_ptr)及其特性;3.shared_ptr线程安全性分析;4.虚函数表实现多态的原理;5.虚析构函数的必要性;6.内存五大分区模型;7.new与malloc的关键区别;8.左右值引用的绑定规则;9.std::move的类型转换作用。这些知识点涵盖了C++内存管理、多态实现、智能指针等核心内容,是掌握现代C++编程的重要基础。

2026-03-07 23:19:59 195

原创 什么情况下重写拷贝构造

本文通过示例说明类中包含指针成员时默认拷贝构造函数的浅拷贝问题。当类A管理动态内存时,默认拷贝会导致多个对象共享同一资源,引发重复释放问题。通过重写拷贝构造函数实现深拷贝,为每个对象创建独立资源副本,解决了资源管理问题。文章强调,对于管理动态内存、文件句柄等系统资源的类,必须自定义拷贝构造函数实现深拷贝,以避免资源冲突和重复释放的风险。

2026-03-05 22:55:20 18

原创 类的成员为什么不能包含自身类对象

类对象不能直接包含自身成员,因为会导致无限递归嵌套,使对象大小无法确定。编译器要求在编译期确定对象大小,因此直接包含自身会引发编译错误。解决方法是用指针或引用代替,如使用原始指针、引用或智能指针(如shared_ptr),这些方式只占用固定内存大小,避免了无限嵌套问题。

2026-03-05 15:37:52 11

原创 为什么要防止拷贝构造

摘要:防止类对象被拷贝常用于资源管理类(如Socket、File等)和单例类,通过禁用拷贝构造/赋值来保证对象唯一性和安全性。典型做法是继承noncopyable基类,该基类将拷贝操作声明为delete。这种设计可避免资源重复释放(如文件描述符被多次close)或单例被复制等问题,适用于RAII类、线程/锁类等需要严格控制对象复制的场景。

2026-03-04 20:06:55 14

原创 线程池动态调整

动态线程池通过实时监控任务队列、CPU负载等指标,自动调整工作线程数量以平衡性能与资源消耗。核心设计包括:1)基于任务积压量、CPU利用率等指标触发扩缩容;2)采用带超时的条件变量实现安全缩容;3)管理线程周期性地评估系统状态并决策。实现要点包括原子计数器、线程退出协议及扩容算法(线性/比例/积压量驱动)。典型实现包含工作线程循环、管理线程及线程安全的任务队列,在保证吞吐量的同时避免资源浪费。

2026-03-02 23:20:28 37

原创 左值引用和右值引用

C++中左值引用(T&)绑定长期存在的对象,可以修改原对象;右值引用(T&&)绑定临时对象或即将销毁的对象,支持移动语义。左值有名字和稳定地址,右值是临时结果或字面量。右值引用通过std::move()将左值转为可移动的"亡值",避免不必要的深拷贝,提高效率。例如vector的移动构造可以"偷取"原vector资源而非复制。左值引用操作存活对象,右值引用处理临时对象,共同优化资源管理。

2026-03-01 18:37:25 16

原创 __builtin_expect()内部的优化暗示

摘要:__builtin_expect()是GCC内置函数,用于向编译器提供分支预测提示。它通过指定表达式更可能的结果(expected_value),帮助编译器优化代码布局:将热路径(高频执行)安排为顺序执行,冷路径(低频执行)设置为跳转分支。这种优化能提升CPU分支预测命中率、减少流水线冲刷,但不会改变程序逻辑或缓存结果。典型应用场景包括优化关键路径的性能敏感代码,通过调整指令顺序来改善指令缓存命中率和执行效率。

2026-02-25 17:46:50 17

原创 Linux五种IO模型

本文介绍了五种I/O模型的特点:1)阻塞I/O模型会阻塞线程直到数据到达;2)非阻塞I/O通过轮询避免线程阻塞但浪费CPU;3)I/O多路复用通过单线程监听多个连接实现高并发;4)信号驱动I/O利用内核信号通知数据就绪;5)异步I/O由内核完成所有操作后回调通知。各模型在等待数据、拷贝数据、线程阻塞等方面表现不同,其中异步I/O性能最优但实现复杂,I/O多路复用则平衡了性能与实现难度。

2026-02-21 16:18:21 61

原创 WebSocket与HTTP区别

WebSocket 在初始通过 HTTP 握手后升级为持久连接协议,支持客户端和服务器之间的全双工通信,服务器可以主动向客户端推送数据,适用于实时通信场景。WebSocket是Client ⇄ Server(一直连着)这样一种模式,建立连接后,双方可以随时发消息,不区分“请求/响应”,更像是TCP socket的应用层版本。WebSocket是基于“HTTP握手”的,WebSocket建立连接时,会先走一次HTTP,服务器返回响应,之后为WebSocket协议,不再是HTTP。

2026-02-21 14:45:57 27

原创 HTTP和HTTPS的差异

HTTP与HTTPS的核心区别在于安全机制:HTTP以明文传输数据,易被监听篡改;而HTTPS通过TLS/SSL加密层实现安全通信。HTTPS在TCP握手后需进行TLS握手(交换随机数、验证证书、协商密钥),随后所有HTTP数据均以密文传输,能有效防止中间人攻击。虽然HTTPS会增加少量握手时间和CPU开销(用于加解密),但现代硬件已基本消除性能差异。必须使用HTTPS的场景包括登录、支付等敏感操作,而HTTP仍适用于内网测试等非敏感场景。简言之,HTTP解决数据传输,HTTPS解决安全传输问题。

2026-02-19 21:18:51 140

原创 策略模式(c++)

策略模式是一种行为型设计模式,通过将算法封装为独立类,使它们可以互相替换而不影响客户端代码。该模式包含抽象策略、具体策略和上下文三个核心角色,其中上下文负责持有策略对象并调用其算法。典型应用场景包括多种可互换算法(如排序、压缩、加密)以及需要避免大量条件判断的情况。C++示例展示了如何使用策略模式实现不同的排序算法(冒泡排序和快速排序),并能在运行时动态切换策略。

2026-02-04 13:36:07 81

原创 数据库连接所常用的RAII模式

RAII模式通过对象生命周期自动管理资源,在构造时获取连接,析构时释放连接,确保异常安全。文章以数据库连接池为例,展示了传统手动管理方式的不足,并通过DBConnRAII类实现自动化管理:构造函数从连接池获取连接,析构函数自动归还。这种模式能有效避免资源泄漏,建议在日常开发中优先采用RAII模式进行资源管理。

2026-02-03 20:32:07 17

原创 strtok和strtok_r不同情况下的应用

strtok和strtok_r是C语言中用于字符串分割的函数,主要区别在于线程安全性。strtok使用静态变量保存状态,会修改原字符串且不支持多线程或嵌套调用。而strtok_r通过额外参数保存上下文,不依赖静态变量,是线程安全的可重入版本,支持嵌套调用且不会破坏原字符串。在单线程环境下strtok足够使用,但在多线程场景必须使用strtok_r以避免线程安全问题。

2026-02-03 15:49:37 26

原创 观察者模式(c++)

观察者模式是一种行为设计模式,用于建立对象间的一对多依赖关系。当主题对象(Subject)状态改变时,会自动通知所有注册的观察者(Observer)。该模式包含抽象主题、具体主题、抽象观察者和具体观察者四个角色,通过attach/detach方法管理观察者列表,使用notify方法实现自动通知。主要优点是低耦合和动态扩展性,但也存在循环依赖风险和性能问题。示例代码展示了主题状态变化时如何通知多个观察者的实现过程,体现了观察者模式的核心机制。

2026-02-02 22:08:56 46

原创 工厂模式(c++)

工厂模式是一种创建型设计模式,将对象创建与使用解耦,提升代码可维护性。分为三种形式: 简单工厂:通过参数返回不同对象,但新增产品需修改工厂类; 工厂方法:将产品创建延迟到子类,扩展时只需新增工厂类; 抽象工厂:创建一组相关对象(如不同风格的UI组件),通过具体工厂实现统一接口。核心优势是调用方无需依赖具体类,便于扩展和维护。

2026-01-31 20:03:08 24

原创 单例模式(c++)

单例模式是一种创建型设计模式,确保类只有一个实例并提供全局访问点。适用于日志系统、配置管理等场景。实现方式分为饿汉式(启动即创建,线程安全但可能浪费资源)和懒汉式(延迟加载)。懒汉式需通过加锁保证线程安全,可采用双重检查锁优化性能。最简洁安全的实现是使用局部静态变量(C++11保证线程安全)。关键点包括私有构造函数、静态实例和全局访问接口。

2026-01-30 19:33:56 19

原创 分布式与集群

集群是多台机器协同提供同一服务,旨在提升吞吐量、可用性和并发能力(如Nginx集群);分布式则是将系统拆分为不同职责的子系统,强调任务拆分与协作(如微服务架构)。两者并非对立,实际系统往往结合使用:分布式架构中各功能模块通过集群部署(如Web服务中登录模块采用多机集群)。集群侧重服务复制,分布式关注功能解耦,共同构建高性能系统。

2026-01-30 19:17:54 17

原创 linux的ubuntu无法联网问题

linux的ubuntu无法联网

2024-11-09 17:08:16 377 1

原创 Codeforces Round 954 (Div. 3) Editorial(A-E)

mp[x],x为余数,nums即为其中的数字,如果nums.size()为偶数,直接计算即可,如果为奇数,只能出现一次,否则输出-1,最后计算为奇数的情况,我这里使用前缀和,枚举哪一个数字作为最中间的那个数,找到最小值即可。要求找出最小的字符串,贪心思想,先记录t中字母出现次数,对给出的索引数组排序,从小到大遍历索引,对26个字母进行遍历,找到第一个不为0的字母,进行替换。数据范围小,观察题目,要求加n-2个符号,说明其中一个数字要连着,我们可以直接枚举所有情况,然后贪心找出最小值。直接枚举x的位置即可。

2024-06-25 17:51:47 555

原创 Codeforces Round 946 (Div. 3)(A-E)

思路:构造,把'N','S','E','W',先平均分配给A,B,再判断其中剩余的情况,使其能够刚好抵消,如果不能,就最后无法相等,其中要确保两者都要行动,我们用cnt来记录,在modify中cnt值小的移动。思路:动态规划,dp[i]定义为幸福值为i的最小花费,dp[i]=min(dp[i],dp[i-h]+c)=c1和 b2==c2 和 b3==c3。mp2保存b1==c1和 b2!=c2和 b3==c3。mp3保存b1==c1和b2==c2和b3!思路:先取出辅助串r,得到替换规律,直接输出即可。

2024-05-21 21:32:10 499

原创 atcoder abc 353(A-E)

思路:前缀和,求出i~n的和,对于当前a[i]要乘多少,由i以后的数的位数决定,预处理i~n的数的位数之和,只需要a[i]*prod[i+1]即可求出a[i]与之后的数串联起来a[i]相应的值,再加上a[i]之后的数之和就可以了。思路:先排序,在顺序遍历,当前数为a[i],在i+1~n中二分找到a[i]+a[j]>=1e8的个数m,最后减去m*1e8,加上sum*(n-1),每个数被加了n-1次。给定x,y,f(x,y)=xy(x,y串连起来),求∑(N−1,​j)∑(N,i)​f(Ai​,Aj​).

2024-05-16 21:50:53 612

原创 笔记本用网线接口转换器但依旧不能联网

以太网适配器

2024-04-21 08:36:46 19134 5

原创 Codeforces Round 920 (Div. 3)(A-E)

Codeforces Round 920 (Div. 3)(A-E)

2024-01-17 23:34:28 569

原创 C++中常指针,指向常量的指针和指向常量的常指针的区别

C++中常指针,指向常量的指针和指向常量的常指针的区别

2023-08-14 23:17:08 141

原创 十大排序算法代码实现

小生花费些许时间将这十种基本排序算法都搞明白了,在次将python版本的代码分享给大家,如有需要,欢迎借鉴。^_^

2023-07-16 23:27:57 340 1

原创 python在创建二维数组时的易错处

今天在刷题的过程中,本小白发现了个易混点,自己一直以来好像都没搞明白,在此分享给诸位。在pyhton中要得到一个二维数组,我们有两种方法:1. s=[ [0for _ in range(3)] ]*32. s=[[0]*3 for _ in range(3)]这两种形式输出都是:

2023-07-01 23:50:44 174

原创 python关于删除的几种方法的优劣论述

python关于删除的几种方法的优劣论述

2023-02-02 12:19:41 170

原创 python中列表,元组与集合的特点

python小白发表文章,有错误希望指出

2022-12-19 21:27:33 251 1

原创 Hangman Judge, UVa 489

希望能给你带来帮助。

2022-12-17 15:59:33 240 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除