自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 C++异常处理

异常是指存在运行时的反常行为,这些行为超出了函数正常功能的范围。典型的异常包括:数组越界、除零、失去数据库连接、遇到意外的输入等。处理反常行为可能是设计所有系统最难的一部分。

2023-01-11 01:15:55 1082 1

原创 WSL2安装和基本命令

适用于 Linux 的 Windows 子系统可让开发人员按原样运行 GNU/Linux 环境 - 包括大多数命令行工具、实用工具和应用程序 - 且不会产生传统虚拟机或双启动设置开销。在 Microsoft Store 中选择你偏好的 GNU/Linux 分发版。运行常用的命令行软件工具(例如 grep、sed、awk)或其他 ELF-64 二进制文件。运行 Bash shell 脚本和 GNU/Linux 命令行应用程序,包括:工具:vim、emacs、tmux。

2023-01-04 00:54:13 4528

原创 算法题的ACM模式与核心代码模式

这两种模式各自都有优点,ACM 模式的代码是要求直接可以在本地运行的,但是需要自己写 include 哪些库函数,输入和输出格式控制等,在本地调试也是非常方便,但在代码调试正确后提交前,不要忘了删掉调试的代码。:在实现题目过程中,所有的输入和输出触发方式必须严格按照题目的描述进行,数据需要自己构造输入,OJ 不会提供任何代码,包括 include 都需要自己写,输出的格式也需要自行控制格式,即便输入输出结果正确,但因为格式控制错误也无法通过 OJ。

2022-12-25 16:13:44 5437

原创 算法程序的输入输出框架与重定向读写

在一个算法中,程序的执行是自动完成的,不需要人工干涉,所以不要在用户输入之前打印提示信息(例如:Please input r:),这样及时结果计算正确,算法也不能通过,因为这些信息会被认为是输出数据的一部分,和标准结果不符合。尽管上面说的可以使用管道的方法,但是数据只是保存在命令行中,每次运行都要输入,依旧不够方便。

2022-12-24 17:23:55 701

原创 MySQL数据类型

数据类型在数据库中非常重要,对数据类型的选择将会影响数据库的性能,除此之外,在数据库中使用了不是非常合适的数据类型可能会对后期维护造成麻烦。在选择数据类型时,必须格外谨慎,因为在生产环境下更改数据库是非常危险的操作。

2022-11-24 04:20:17 1098

原创 MySQL基础语句

SQL 是 Structure Query Language(结构化查询语言)的缩写,它是使用关系模型的数据库应用语言,由 IBM 在 20 世纪 70 年代开发出来,作为 IBM 关系数据库原型 System R 的原型关系语言,实现了关系数据库中的信息检索。

2022-11-21 01:22:31 208

原创 Ubuntu 20.04 英特尔 Wi-Fi 6 AX200 160MHz WIFI 或蓝牙无法打开的解决办法

今天把 NUC9 装成了 Ubuntu22.04,因为平时经常需要 Linux 环境,但是 WSL 有时候确实也不方便,所以直接装了,然后进入系统后,发现 WIFI 都可以正常工作,但是蓝牙却无法打开。看了很多博客,并且经过一系列的更新,设置,重启等操作,最后终于可以了,但是这种方法不能保证所有情况哦,顺便记录一下。注意:这个驱动是适用于 Llinux 内核大于 5.1 的版本,如果内核太老,而硬件太新,驱动也是没办法支持的。可以通过uname -r查看系统内核版本。

2022-10-21 23:55:45 7605

原创 修改Typora编辑器的字体

Typora 是一个非常优秀的 Markdown 编辑器,但是其由国外开发者开发,对于中文本地化支持不算特别完善,其中之一就是默认的字体是西方字体,在写作时,打的中文双引号根本无法分清楚是左双引号还是右双引号,所以需要自行修改一下配置,使用中文的字体,我们在写作时也会更方便直观。

2022-10-07 13:13:56 4908

原创 Windows上安装jdk17后没有jre的解决方法

因为历史原因,Sun公司被 Oracel 公司收购,即将被收购时, Sun 公司将 JDK 开源,于是就出现了 OpenJDK,开放了 JDK 源码可以让所有开发者学习。

2022-10-01 11:10:42 12868

转载 windows磁盘引导分区

可扩展固件接口系统分区(EFI 系统分区或 ESP)。UEFI BIOS 引导系统使用,存储BIOS/EFI NAND芯片存储不下的那部分EFI扩展功能。Microsoft® 保留分区(MSR)。主 Windows 分区。下表显示了分区结构:上例中,Windows 分区分配了驱动器号 “W” 以避免驱动器号冲突。在计算机重新启动后,主硬盘将自动分配驱动器号 “C”。创建 ESP 的优先级高于创建 MSR,因为新电脑新系统启动机时需要 ESP。

2022-09-11 17:49:40 1714

原创 华为云服务器装数据库远程连接被拒绝

在华为云服务器上装了 MariaDB,并且为用户授予了远程连接的权限,查看用户信息如下,Host 为 % 是可以远程连接的:MariaDB [(none)]> SELECT User, Host FROM mysql.user;+----------+-----------+| User | Host |+----------+-----------+| codepeak | % || root | % || codepeak |

2022-05-31 17:58:52 1163 1

原创 python安装requests模块失败的问题解决

今天帮朋友装一些 Python 相关的软件,但是最终因为 pip 一直安装模块失败等原因,当时没有查出问题的原因。折腾了挺久,最终还是先放弃了,回去后在自己电脑上又试了几下。可能因为朋友之前在电脑上装的 Python 版本比较多,pip 版本为 20.0.2,在安装时,又遇到了升级 pip 失败,手动升级了但是依旧无法安装 requests 模块。回去后想了想可能是因为软件版本太旧的问题,于是直接将 Python 安装到 3.10.2 版本,并且安装了 PyCharm 2022.1。就解决了安装各种模块

2022-03-12 01:27:40 24871 7

原创 协程(coroutine)的原理与实现

协程概念协程相当于用户态的线程,更轻量级。线程的调度是操作系统完成的,而协程的调度是由用户态控制。线程相比进程来说,上下文切换快,资源开销变小,但是作为操作系统的,但是多线程如果设计的不够好,可能有大量的锁同步、切换等待。除此之外,如果一个系统的瓶颈在 IO 上,一个线程可能不能完全发挥出它的作用。而协程一般在线程中运行,有用户态的调度器调度,不需要进行反复的系统调用,而且可以利用到线程的并发优势,协程的执行效率极高,在一些高并发系统应用比较广泛。协程可以看作一种使用起来比较特殊的函数,函数的调用一般是

2021-11-27 15:34:57 4963

原创 C语言变长参数函数原理

变长参数函数概念在很多日志 Log 函数的封装中,可以看到可变长参数函数。C99中,出现了函数可变长参数特性,例如:printf 就可以接受任意长度的参数列表。看一下 printf 函数的定义:int printf (const char* format, ...);可以看到可变长参数除了有一个 format 固定外,其他参数的个数和类型就是可变的,用三个点 ... 作为参数占位符,代表变长参数。固定参数和可选参数共同构成变长参数函数的参数列表。任何一个边长参数的函数都可以分为两部分:固定参数和

2021-10-30 17:30:12 1934

转载 gdb配置打印STL容器脚本pretty printer

使用 gdb 调试是 Linux 下 C/C++ 开发不可少的工具,但是对于大型项目,调试需要有更高的效率,虽然 gdb 原生支持配置文件中自定义打印函数,可以自行定制这些函数。网上也有一些针对 STL 标准容器的 .gdbinit 文件,该文件会定义string、vector、map、set、deque、priority_queue 等,可以参考这里。把该文件保存 为 .gdbinit, 放在用户目录下~/.gdbinit,当执行 gdb 调试时会自动加载 .gdbinit 初始文件。使用该配置文件时,

2021-10-30 16:28:23 2485

转载 CentOS7升级gcc10

gcc10.2 安装包获取:wget https://ftp.gnu.org/gnu/gcc/gcc-10.2.0/gcc-10.2.0.tar.gz解压包并进入:$ tar -zxvf gcc-10.2.0.tar.gz$ cd gcc-10.2.0安装编译所需要的依赖坏境$ ./contrib/download_prerequisites建立临时文件并进行编译安装$ cd ..$ mkdir gcc-10.2-build$ cd gcc-10.2-build$ ../gcc-

2021-10-30 16:21:23 1073

原创 解决Nvidia显卡DP接口无法进入BIOS

因为 DP 接口的带宽很高,高分辨率和高刷新显示器广泛使用。然而在 9 代显卡上使用 DP 接口却发现不能进入 BIOS,一直是黑屏。整个人瞬间不好了,以为是显卡接口或者显卡有问题,但又一想 HDMI 接口都是好的,并且 DP 接口进入系统后也是有信号的,应该不是显卡的问题,但接口好像也没什么问题就是进 BIOS 时直接黑屏显,然后显示器也检测不到 DP 的信号源 。通过网上查了很多办法,最终在贴吧吧主“霄龙7601”的回答中找到了答案:因为20系以下的显

2021-10-30 13:49:25 15705 2

转载 vim命令大全

转载:vim 操作命令大全1. 关于 vimvim是 Linux 下非常强大的编辑器。 如果是初学 vi,运行一下 vimtutor 是个聪明的决定。(如果你的系统环境不是中文,而你想使用中文的vimtutor,就运行vimtutor zh)1.1 vim 的几种模式正常模式:可以使用快捷键命令,或按 : 输入命令行。插入模式:可以输入文本,在正常模式下,按 i、a、o 等都可以进入插入模式。可视模式:正常模式下按 v 可以进入可视模式,在可视模式下,移动光标可以选择文本。按 V 进入可视行模

2021-10-28 00:54:26 555

原创 使用火焰图(FlameGraph)分析程序性能

火焰图概念火焰图(FlameGraph)是 svg 格式的矢量图,是先通过 perf 工具分析得到的结果,并将其生成的具有不同层次且支持互动的图片,看起来就像是火焰,这也正是它的名字的由来。其表现形式大概如下所示:需要有以下几点注意:纵向(Y 轴)高低不平,表示的是函数调用栈的深度。每一层都是一个函数。调用栈越深,火焰就越高,顶部就是正在执行的函数,下方都是它的父函数。横向(X 轴)表示该函数执行消耗的时间,横向上会按照字母顺序排序,而且如果是同样的调用会做合并(注意:如果一个函数在 X

2021-10-17 17:55:11 20391

原创 红黑树的详细实现(C++)

红黑树概念(concept)树型结构主要用于搜索,一直是科学领域的重要演算法,当中探讨了树可能遇到的问题:树的成长可能偏向于一边,也就是不平衡现象。二叉树是常见且广泛使用的一种树,面临其可能退化成链表的潜藏缺点,在使用上难免让人担心其效率。此外,在一些应用上,可能不希望这样的不平衡的可能性发生。所以具有自动平衡左右数量分布效果的演算算法早在 1962 年被提出,称为 AVL 树。这种平衡成长的二叉搜索树被称为自平衡二叉搜索树。接下来,介绍同为自平衡二叉搜索树的红黑树对平衡性的要求比 AVL 树还要宽松

2021-10-08 00:05:59 5567 3

原创 解决VMware安装Windows11报错:这台电脑无法运行 Windows 11,这台电脑不符合安装此版本的 Windows 所需的最低系统要求。

Windows 11 已经正式发布,迫不及待的想在虚拟机中先尝试一下,下载地址为:https://www.microsoft.com/zh-cn/software-download/windows11结果出现了如下错误:查看了 Windows 11 的安装要求大概如下:电脑支持安全启动。电脑支持 TPM 2.0。CPU 必须为 1Ghz 以上 64 位双核处理器。内存容量必须为 4GB 以上。系统磁盘大小为 64 GB 以上。显卡必须支持 DX12。这些安装要

2021-10-05 22:47:33 51051 1

原创 AVL树的详细实现(C++)

AVL树概念前面已经介绍了二叉搜索树,但是二叉搜索树在某些情况下会出现极度不平衡,其树形结构便退化成了链表,查找效率也会下降。于是出现了 AVL 树,AVL 树保证了二叉搜索树的平衡,引入了平衡监督机制,也就是在插入结点时,树中某一部分不平衡度超过一个阈值后将出发平衡调整操作,这样便保证了树的平衡度在可接受的范围内,最大的好处就是提高了搜索的效率。AVL 树是一种平衡二叉树,其名字来源于发明者的名字(Adelson-Velskii 以及 Landis)。AVL树的递归定义如下:左右子树的高度差小于等

2021-10-05 00:30:19 4380 4

原创 二叉搜索树的详细实现(C++)

二叉搜索树概念二叉搜索树(Binary Search Tree),又称为二叉查找树。之前已经说过了二叉树的概念和实现,而二叉搜索树是一种特殊的二叉树。假设 x 为二叉树中的任意一个结点,x 结点包含包含关键字 key,结点 X 的 key 值记为 key[x],如果 y 是 x 的左子树中的一个结点,则 key[y] <= key[x];如果 y 是 x 的右子树的一个结点,则 key[y] >= key[x]。那么,这棵树就是二叉查找树,如下图所示:在二叉搜索树中:(01) 若任意节

2021-10-01 23:02:16 1196 1

原创 对于APUE中信号的 #define SIG_ERR (void(*)())-1 的理解

在学习 APUE 的信号章节中,我们知道 Linux 中最简单的信号接口如下:#include <signal.h>void (*signal(int signo, void (*func)(int)))(int);//返回值:若成功,返回以前的信号处理配置;若出错,返回 SIG_ERR参数:signo:上面给出的信号名。func:常量值 SIG_IGN、常量 SIG_DEL 或当接到此信号后要调用的函数的地址。如果指定 SIG_IGN,则向内核表示忽略此信号(但是信号 SIGK

2021-09-08 23:46:36 341

原创 线索二叉树的详细实现(C++)

线索二叉树概述二叉树虽然是非线性结构,但二叉树的遍历却为二叉树的结点集导出了一个线性序列。如果我们希望很快找到某一结点的前驱或后继,但不希望每次都要对二叉树遍历一遍,这就需要把每个结点的前驱和后继信息记录下来。为了做到这一点,可在原来的二叉链表中增加一个前驱指针域(pred)和一个后继指针域(succ),分别指向该结点在某种次序下的前驱结点和后继结点,但是这种方法将会导致很多结点中有没有利用的空指针,先看下面的例子。比如:现在有一个结点数为 n 的二叉树,采用二叉链表形式存储。对于每个结点均有指向左右

2021-09-06 00:02:29 3003

原创 ProtoBuf详解(二)编码风格

本片文章主要介绍 protobuf 的编码风格,这些都是 google 官方推荐的 proto 文件编码风格,遵循这些风格编写 proto 风格,可以使团队的 ProtoBuf 消息定义和风格保持一致,有利于阅读和维护。protobuf 的风格可能会随着不同版本变化,有可能会看到 .proto 文件以不同的风格编写,但是最好采用当前的最佳风格,请参考官方 Protobuf Style Guide。文件的标准格式每行的长度保持在 80 个字符以内。使用 2 个空格缩进。(注:这里实际使用 4 个空格

2021-09-05 17:26:56 573

原创 二叉树的详细实现(C++)

关于二叉树的概念,已经在树的基本概念中详细描述,这里不做过多赘述。本文将对二叉树进行详细实现,采用 C++ 语言。二叉树结点类型定义template <typename T>struct BinTreeNode{ T data; //结点中存储的数据 BinTreeNo

2021-09-05 17:02:17 9349

原创 树的基本概念

树型结构,不同于线性数据结构,比较适合用于描述分支结构的数据,这种数据之间可能有祖先和后代的关系。在计算机中树型结构应用非常广泛,例如在文件系统和数据库系统中,树是组织信息的重要形式之一。树的定义树是一种数据结构,是由 n(n ≥ 1)个有限节点组成的一个具有层次关系的集合。树的示意图如下:之所以被叫做树,是因为看起来像一棵倒过来的树,也就是根朝上,叶朝下。从上图中可以看出它具有如下特点:每个节点有零个或者多个子节点,树是一个递归的定义,即树的定义中又用到了树的概念。没有父节点的节点称

2021-09-05 16:32:53 1257

原创 ProtoBuf详解(一)概念和语法

关于ProtoBufProtoBuf 是谷歌开源的一套与语言无关,平台无关,可扩展性强,兼容性好并且效率很高的数据序列化方法,非常适合用于做二进制数据的通信协议和数据存储。这里可以访问官方文档。很多人都喜欢将 ProtoBuf 和 XML 和 JSON 这两个常用于网络通信和数据交换的格式做比较,但我觉得这并不合适,因为完全就是两个侧重点。首先 ProtoBuf 的突出点是在二进制序列化方面,而另外两者都是突出字符串文本的可读性上,其效率当然是 ProtoBuf 快的不是一点,其次 ProtoBuf

2021-08-15 23:51:23 2829

原创 深入实践C++11智能指针

智能指针概念C/C++ 语言最为人所诟病的特性之一就是存在内存泄露问题,因此后来的大多数语言都提供了内置内存分配与释放功能,有的甚至干脆对语言的使用者屏蔽了内存指针这一概念。这里不置贬褒,手动分配内存与手动释放内存有利也有弊,自动分配内存和自动释放内存亦如此,这是两种不同的设计哲学。有人认为,内存如此重要的东西怎么能放心交给用户去管理呢?而另外一些人则认为,内存如此重要的东西怎么能放心交给系统去管理呢?在 C/C++ 语言中,内存泄露的问题一直困扰着广大的开发者,因此各类库和工具的一直在努力尝试各种方法去

2021-08-15 23:19:50 9069 12

转载 图的最短路径之Floyd算法

参考:https://wangkuiwu.github.io/2013/04/15/floyd-cplusFloyd算法介绍弗洛伊德 Floyd 算法和 Dijkstra 算法一样,也是用于寻找给定的加权图中顶点间的最短路径算法。该算法名称以创始人——1978年图灵奖获得者、斯坦福大学计算机科学系教授罗伯特·弗洛伊德命名。算法思想:通过 Floyd 计算图 G=(V, E) 中各个顶点的最短路径时,需要引入一个矩阵 S,矩阵 S 中的元素 a[i][j] 表示顶点 i(第 i 个顶点)到顶点 j(第

2021-08-13 22:41:09 409 1

转载 图的最短路径之Dijkstra算法

参考:https://wangkuiwu.github.io/2013/04/14/dijkstra-cplusDijkstra算法介绍迪杰斯特拉(Dijkstra)算法是典型最短路径算法,用于计算一个节点到其他节点的最短路径。它的主要特点是以起始点为中心向外层层扩展(广度优先搜索思想),直到扩展到终点为止。算法基本思想:通过 Dijkstra 计算图 G 中的最短路径时,需要指定起点 s(即从顶点 s 开始计算)。此外,还需要引进两个集合 S 和 U。S 的作用是记录已求出最短路径的顶点(以及

2021-08-08 21:19:46 625

转载 图的最小生成树之Kruskal算法

参考:https://wangkuiwu.github.io/2013/04/12/kruskal-cplusKruskal算法介绍克鲁斯卡尔(Kruskal)算法,和普利姆(Prim)算法类似,也是用来求加权连通图的最小生成树的算法。关于最小生成树的概念,已经在之前的图的最小生成树之Prim算法篇首介绍过。Kruskal 与 Prim 算法思想出发点不同,Prim 算法是以顶点出发的,而 Kruskal 算法是以边出发的。其算法思想是:按照权值从小到大的顺序选择 n-1 条边,并保证这 n-1 条

2021-08-08 21:06:16 801 1

转载 图的最小生成树之Prim算法

参考:https://wangkuiwu.github.io/2013/04/13/prim-cplusPrim算法介绍在介绍普里姆 Prim 算法前,首先需要知道 Prim 算法的作用。Prim 算法是用来求加权连通图的最小生成树的算法。下面先介绍最小生成树。最小生成树概念在含有 n 个顶点的连通图中选择 n -1 条边,构成一棵极小连通子图,并使该连通子图中 n -1 条边上权值之和达到最小,则称其为连通图的最小生成树。图 G4如上连通图 G4 所示,可以有多棵权值总和不相同的生成树。情

2021-08-08 20:51:53 1267

转载 图的拓扑排序

参考:https://wangkuiwu.github.io/2013/04/11/topsort-cplus拓扑排序介绍拓扑排序(Topological Order)是指,将一个有向无环图(Directed Acyclic Graph,简称 DAG)进行排序而得到一个有序的线性序列。比如:有这样一种情景,一个项目包括 A、B、C、D 四个部分来完成,并且 A 依赖于 B 和 D,C 依赖于 D。现在要制定一个计划,写出 A、B、C、D 的执行顺序。这时候,就需要用到拓扑排序,他就是用来确定事物的发生

2021-08-08 20:36:10 1006

转载 图的遍历之DFS与BFS

参考:https://wangkuiwu.github.io/2013/04/10/iterator深度优先搜索DFS图的深度优先遍历(Depth First Search)和树的先序遍历有一定相似之处,它的基本思想是:假设初始状态是图中所有顶点均未被访问,则从某个顶点 v 出发,首先访问该顶点,然后依次从它的各个未被访问的邻接点出发深度优先搜索遍历图,直至图中所有和 v 有路径相通的顶点都被访问到。 若此时尚有其他顶点未被访问到,则另选一个未被访问的顶点作起始点,重复上述过程,直至图中所有顶点都被访问

2021-08-08 20:23:25 257

转载 C++11的Lambda函数

Lambad函数概念参考:《深入理解C++11:新特性解析与应用》C++11 中新增了 Lambda 匿名函数,其基本格式如下:[捕捉列表] (参数) mutable -> 返回值类型 {函数体}参数说明:[] 是 Lambda 的引出符,捕捉列表能够捕捉上下文中的变量,来供 Lambda 函数使用,变量捕捉规则如下:[var] 表示以值传递方式捕捉变量 var[=] 表示值传递捕捉所有父作用域变量[&var] 表示以引用传递方式捕捉变量 var[&] 表示引

2021-08-02 00:41:00 673

原创 STL萃取(Traits)机制

问题前述我们希望有一个类,并有一个成员方法 GetSum 可以完成数组元素的一系列运算。具体看如下代码:#include <iostream>using namespace std;//处理int类型class IntArray{public: IntArray() { a = new int[10]; for (int i = 0; i < 10; ++i) { a[i] = i +

2021-08-02 00:26:13 974

原创 字符串匹配之BF与KMP算法

字符串模式匹配字符串模式匹配的描述:有两个字符串 T 和 p,若打开在串 T 中查找是否有与串 p 相等的的字串,称串 T 为目标串,串 p 为模式串,并称查找模式串 p 在目标串的匹配位置的运算为模式匹配。比如有如下两个字符串:目标串T: abaabcac模式串p: ab我们可以看到,模式串 p 的匹配结果会出现两次,分别是从 T[0] 和 T[3] 开始。字符串匹配是一项非常频繁的任务。例如,有一份名单,你急切地想知道自己在不在名单上;又如,假设你拿到了一份文献,你希望快速的找到某个关键字

2021-08-01 19:27:00 589

原创 经典十大排序算法的总结与实现

排序算法相关概念经典的排序算法经典的十大排序算法包括:冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序、堆排序、计数排序、桶排序、基数排序,本文将在后面对其原理和实现做详细说明。排序算法的稳定性在一个待排序的序列中,如果有两个元素 R[i] 和 R[j],它们排序码 k[i] == k[j],如果在排序前,元素 R[i] 排在 R[j]前面,如果在排序之后,元素 R[i] 仍在元素 R[j] 的前面,那么就认为这个排序算法是稳定的,否则称这个排序算法是不稳定的。稳定和不稳定的排序都有各自适

2021-07-31 13:50:17 408

空空如也

空空如也

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

TA关注的人

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