【Linux】进程地址空间
本篇博客来认识一下linux下程序地址空间的概念 演示所用系统:CentOS 7.6 [TOC] 1.引入程序地址空间之前学习C/C++的时候,多少应该都听过栈区/堆区/静态区/全局区的概念,还有一张很经典的演示图,大部分讲解这几个内存区域的图片都和下图类似 但是有一个问题,这里的程序地址空间,是我们的物理内存上的东西吗? 并不是! 程序/进程地址空间是操作系统上的概念,它和我们物理内存本身不是一个东西 1.1 验证不同区域用下面这个代码来简单验证一下不同区域上的区别 12345678910111213141516171819202122 ...
【Linux】环境变量
本篇博客记录了Linux下一些概念的解释,以及环境变量的相关操作 所用系统:CentOS 7.6 1.概念解释1.1 进程竞争性系统进程的数目较多。而CPU资源等其他资源不够用,所以进程之间存在竞争性,也就出现了优先级,这在上篇博客中有过介绍 1.2 进程独立性进程运行具有独立性,不会因为某个进程出错,而影响其他进程的运行 我们知道,一个进程是内核结构task_truck+代码和数据组成的。而linux系统是通过进程地址空间方式来保证进程的独立性,那是下篇博客会讲到的内容 1.3 并行并行:多个进程在多个CPU下分割,同时运行 我们一般的电脑都是只有1个cpu,那是怎么做到多个进程运 ...
【C++】异常处理
本篇博客让我们来认识一下C++中对于异常的处理机制 [TOC] 1.概念1.1 C语言对于异常的处理在之前我们遇到一些bug的时候,通常会用if判断或者assert断言等问题进行处理。但这种方式太过暴力,会直接中断程序的运行 另外一种办法是返回错误码,C语言的报错大多使用这种方式。不过这需要程序的用户自己去查对应的错误码表格,较为麻烦 1.2 C++异常所谓异常,便是程序运行过程中可能遇到的bug或者问题。程序可以有选择地抛出一个异常,告知用户程序运行出现了问题。 C++标准库中便使用了一个exception类来进行异常的处理,我们运行程序中遇到的一些报错,其实就是标准库里面抛出了对应的 ...
【C++】C++11的那些新特性
本篇博客,让我们一起来看看C++11的那些新特性! 所使用的编译器:VS2019 本篇博客所有的测试源码都可以在我的GITEE仓库找到 [TOC] 1.前言C++11是C++的标准委员会在2011年更新的C++新特性。说白了就是一个升级包。和JAVA\PYTHON这种更新比较频繁的语言相比,C++更新的就没有那么顺风顺水了,而且每一次更新虽然修复了一些问题,但也带来了更多的“没太大必要”的更新 比如没啥用的array容器,和int arr[10]这种内置方式的区别主要在于越界检查 不过咱们这种小菜鸡,只有学习的权力,哪有啥资格评定C++标准呢?我听大佬说,现在最关注的C++更新便 ...
【Linux】进程概念
本篇博客是有关进程状态的,好久没有写Linux的博客了,一起来看看吧! 实验系统:CentOS 7.6 1.系统进程的运行状态当我们想到进程的时候,一定要首先想到task_struct结构体。该结构体内部有一个state状态码,用于标识当前进程处于什么状态 1.1 运行态CPU会有一个进程队列(双链表),队列的每一个成员都是一个task_struct结构体,用来维护即将运行的进程。当轮到某个进程运行的时候,CPU就会将这个进程的数据和代码放入内存和自己的寄存器,并开始运行 只要进入了运行队列的进程,就是运行态的进程 所以运行态并不是正在运行的进程 为什么我们对这件事的感知不大呢? ...
【C++】哈希Hash(未完成)
学习完了红黑树以及map/set,下面让我们来康康另外一种用于查找数据的新方式,那便是哈希表 1.概念哈希是一种用下标映射来查找数据的方式。在STL库中,有map和set的unordered(即为stl库里面的哈希)版本 我们可以来对比一下它和红黑树(map/set的标准版本)的查找时间差距(是通过for循环查找所有插入数据来实现的计时) 可以看到,在查找方面,unordered版本查找的速度比正常的map和set快了一倍有余。之前我已经觉得搜索二叉树的查找已经非常快了,实际上哈希才是真正的快中之快! 这两种算法的时间复杂度为: 平衡二叉搜索树 O(logN) 哈希算法 O( ...
【C++】STL map_set
本篇博客让我们来了解一下STL库里面的map/set的使用,并尝试用自己写的红黑树封装一个类似的map/set出来 所用编译器:VS2019 [TOC] 1 setset就是二叉搜索树中只有单个key的树,它有下面的函数可供使用 1.1 构造函数、迭代器构造函数、迭代器什么的都很简单,在这里就提到了,和其他STL基本一致 1.2 节点计数 sizeset自带节点计数,我们可以之间获取二叉树中节点的个数,或判断set是否为空 1.3 插入删除插入删除等函数在这里不过多解释,使用方法和string、vector完全一致。如果大家的stl是从string一路学习过来,那么对于 ...
【Python】关于vip和普通用户商店返回值图片出错的问题定位+大白话说明
在开发阿狸的过程中,遇到了一个全局变量写错而导致的bug…… 问题引出如果你最近几天有用过shop查询功能,可能会遇到下面的情况 上图为普通用户的商店用了vip用户16-9的图片; 下图为vip用户的商店用了普通用户1-1的图片 简单说来,vip的商店返回值是16-9的图片,而普通用户的商店是1-1的图片。 在上面的三个每日商店返回值中,就出现了vip用户的商店用了1-1的图,或者普通用户的商店用了16-9的图。 这个bug昨天(22.09.12)我就发现了,是一位vip用户的商店返回值里面用了普通用户的图片。而我昨天定位bug的时候,测试bot保存了画出来的4个小图,没有问题;然后 ...
【牛客网】HJ92 在字符串中找出连续最长的数字串
HJ92 在字符串中找出连续最长的数字串 题目来源 牛客网 HJ92 描述输入一个字符串,返回其最长的数字子串,以及其长度。若有多个最长的数字子串,则将它们全部输出(按原字符串的相对位置) 本题含有多组样例输入。 数据范围:字符串长度 1 \le n \le 200 \1≤n≤200 , 保证每组输入都至少含有一个数字 输入描述:输入一个字符串。1<=len(字符串)<=200 输出描述:输出字符串中最长的数字字符串和它的长度,中间用逗号间隔。如果有相同长度的串,则要一块儿输出(中间不要输出空格) 123456789输入:abcd12345ed125ss123 ...
【C++】红黑树的性质和实现
上篇博客我们了解了AVL树,这篇博客就让我们来看看另外一个二叉树:红黑树 使用的编译器:VS2019 [TOC] 博客里面引用了一些百度搜到的图片(自己懒的画了,呜呜) 1.概念AVL树是一个几乎完全平衡的搜素二叉树,其左右子树的高度差不会超过1。与之相对应的,是每一次插入都有可能需要旋转多次,插入的效率较低。 而红黑树则选择了“相对平衡”,并拥有以下的特性: 红黑树可以保证最长路径的小于最短路径的2倍 比如最短路径为30,那么最长路径就不能超过60 对于cpu来说,AVL树遍历20次(百万级数据)和红黑树遍历40次的时间差距极小。所以红黑树即保持了相对平衡,又减小了AVL树 ...