- 博客(39)
- 收藏
- 关注
原创 ## #、##、__ VA_ARGS __ 、##__ VA_ARGS __ 浅析
#、##、__ VA_ARGS __ 、##__ VA_ARGS __转载:https://blog.csdn.net/q2519008/article/details/80934815在刨析源码的过程中看到这种神奇的操作,在这里做一个简总# 的用法#的作用:把参数替换成字符串,从下面的代码可看出来,就是直接打印变量名。#define P(a) printf("%s = %d\n", #a, a)int main(){ int a = 1; int b = 2; P(
2020-06-26 20:44:47 234
原创 python实现电话簿
面向对象实现电话簿"""使用面型对象思想实现电话簿采用封装,继承等手段实现。题目分析:电话簿中一般实现都是{人名:电话},但是人名出现重复怎们做删除电话:根据人名删除还是电话删除修改电话:修改人名还是修改电话查询:人名查电话还是电话查人名,是准确查找还是模糊查找呢================================================针对上述问题实现一个电话簿"""class base_check(object): """ 实现一个检测输入
2020-05-28 17:36:24 3739
原创 C++11多线程实现生产者消费者
生产者消费者生产者消费者是典型的多线程模型。单生产者-单消费者#include <iostream>#include <mutex>#include <condition_variable>#include <queue>using namespace std;class Queue{public: void put(int val) { // lock_guard<mutex> lock(mtx); uniqu
2020-05-23 13:58:43 822
原创 new和delete浅析以及与malloc和free区别的简总
new和deletenew/delete是C++动态开辟内存运算符,malloc和free是C库函数实现的动态开辟内存的。new/deletenew和delete其实也是重载函数,其底层也是调用malloc和free包括new数组和delete数组也是重载new[] 和 delete[] 运算符。也可以自己实现new和delete的重载函数。那么new单个元素delete单个元素,new数组,delete[]数组到底有什么区别的,混用到底有什么问题,下面我们使用代码来说明问题// 重载new和ne
2020-05-20 15:43:19 171
原创 C++实现字符串转整性(atoi)
C++实现字符串转整型因为32位有符号整型的大小是 -2147483648 ~ 2147483647,因此在转换的时候需要考虑越界情况,对于越界直接返回0即可。解体思想首先判断正负号,对于负数进行标记。从前向后遍历字符串,如果有字符不是数字直接抛出异常。否则先对上一次的结果乘以10,然后在加上下一位的数字。对于乘10和加当前位置的数字的时候都需要判断是否越界,因为大于214748264 或者小于-214748364 的时候如果在乘以10就已经越界了,因此需要判断。对于加上当前数字也需要判断是
2020-05-18 19:38:33 542 1
原创 DNS域名解析浅析
DNS域名解析浅析为什么需要DNS解析域名为IP地址?网络中通讯大部分使用的都是TCP/IP的,也就是基于IP地址的,因此网络通讯中必须将域名转换成IP地址才能在网络中使用,但是IP地址记起来相对复杂,因此更易理解的域名来代替服务器,那么就需要一种机制来讲域名解析为IP地址、然后在访问服务器。什么是DNS?DNS是域名系统的英文缩写,是一种组织成域层次结构的计算机和网络服务器命名系统,它用于TCP/IP网络,提供的服务是将主机名和域名解析为IP地址。DNS的过程?用户主机运行着DNS的客户端。
2020-05-18 16:54:06 295
原创 虚基类和虚继承&菱形继承
虚基类和虚继承虚继承就是继承方式被virtual修饰的继承。虚基类就是虚继承的基类就叫虚基类。class A{private: int a;public: A() { cout << "A()" << endl; }};class B: virtual public A // 虚继承{public: B() :A() { cout << "B()" << endl; }private: int b;};如上代码中B
2020-05-17 15:36:28 322
原创 页面置换算法
页面置换算法在分页系统下,一个程序的所有页面并不一定都在内存中,那么如果当前需要使用的页面不在内存中,那么系统就会产生所谓的缺页中断,缺页中断程序负责将位于磁盘上的数据加载到物理内存来,如果物理内存中有空闲的页面就直接使用,如果没有就需要挑选一个页面进行替换,那么挑选那个页面才合适呢?页面更换的目标如果我们挑选用来替换的页面很快又要被访问,那么系统将再次发生缺页中断,缺页中断的代价是很大的,...
2020-04-20 14:24:07 389
原创 操作系统学习之存储器层次结构
操作系统学习之存储器层次结构存储器系统是一个具有不同容量,成本和访问时间的存储设备层次结构,如下图所示,CPU寄存器保存最常用数据,靠近CPU的小的、快速的高速缓存存储器(Cache),然后是相对慢的主存(也就是常说的内存),然后是本地存储(固态,磁盘),也可能有远程存储(主要实现于分布式文件系统,Web服务器等)。整个存储器系统,从上到下访问的时间越来越长,速度越来越慢,当然成本也越来越低...
2020-04-17 19:53:32 877
原创 python学习之列表的学习
python学习之列表的学习学习过C的都知道数组,python中的列表list和C中的数组类似,可以说是一个加强版的数组。列表的概念list中可以是任意类型,但是数组中元素只能是同一类型。list不用定义大小,直接使用,数组需要定义大小。list不仅支持正向索引(0,1…)还支持负索引(-1,-2),数组只支持正向索引,都是从0开始。list不仅支持下标访问,而且支持切片,数组不支持...
2020-04-15 16:34:06 117
原创 Linux的shell学习一
Linux的shell学习一积累知识,点滴开始!!!打印HelloWorld# helloworld.sh# #!/bin/bash 是指出解析当前*.sh程序的解析器是/bin/bash#!/bin/bash echo "Hello World" # 类似于c++的cout一样运行sh helloworld.sh ,打印出Helloworld,也可以给使用chmod +x h...
2020-03-25 22:39:44 160
原创 多线程编程基础
多线程编程线程是轻量级的进程,线程依赖进程存在,线程是进程内存的一条执行序列,在一个进程中至少有一个线程(main函数线程),通过线程库可以创建其他线程。同一进程中的线程的执行顺序是由系统调度决定的。函数线程和函数调用的区别函数调用函数调用是在同一线程中完成的,串行执行的。函数线程将函数地址传递给线程,创建的函数线程和主线程并发执行。线程和进程的区别线程是CPU执行...
2020-03-02 16:33:14 165
原创 进程间通讯基础
进程间通讯管道,信号量,消息队列,共享内存,socket(网路部分)通讯条件至少两个以上进程,进程间必须有公共访问的资源。管道文件通讯普通文件的读写文件偏移量是共享的,管道的读写文件偏移量是分开的。管道文件主要用于进程间通信,存储文件内容直接在内存上。有名管道有名管道是半双工通讯,所谓半双工通讯就是在同一时刻只能有一个进程读一个进程写。创建有名管道方式mkfi...
2020-03-01 19:40:17 99
原创 实现一个简单的STL容器 -- vector
实现一个简单的STL容器 --> vector实现了容器容器的空间配置器,迭代器,和基本函数方法。#include <iostream>using namespace std;// 空间配置器template <typename T>struct Myallocator{ T* allocate(size_t size) // 开辟内存 { ...
2020-02-29 22:18:55 369
原创 C++ STL容器
STL 容器顺序容器vector向量容器类模板实现,使用时需要实例化,底层数据结构:动态开辟的数组,每次以原来空间大小的2倍方式扩容。接口名称使用用法功能描述时间复杂度push_backpush_back(val)末尾添加元素0(1)insertinsert(it,val)迭代器位置添加元素0(n)pop_backpop_back()...
2020-02-28 23:31:35 265
原创 函数调用堆栈过程
函数调用堆栈过程示例代码int sum(int a ,int b){ int tmp = 0; tmp = a+b; return tmp;}int main(){ int a = 10; int b = 20; int ret = sum(a,b); cout<<"ret:"<<ret<<...
2020-02-27 23:29:18 299
原创 进程的虚拟地址空间
进程的虚拟地址空间虚拟地址空间图32位系统上进程的4G的虚拟地址空间3G的用户空间和1G的内核空间0x00000000 ~ 0x08048000的内存时不可访问内存。.text段:存储代码生成的指令。.rodata只读数据段:常量字符串等。.data段:初始化不为0的全局数据,静态数据等。.bss段:初始化为0和不初始化全局数据。.heap堆区:进程刚开始是不划分的,程序...
2020-02-27 22:42:55 151
原创 C++11 智能指针
智能指针智能指针就是对裸指针的封装。实现了裸指针的 *解引用运算符重载,->运算符重载等指针的基本操作。智能指针出现原因 – 裸指针使用裸指针可能会忘记释放资源,导致资源泄漏(内存泄漏问题)。同一资源可能被多次释放,导致释放野指针,程序崩溃。裸指针的释放写在代码后面,但是中间代码因为某些原因使得程序崩溃,然后资源未被释放。代码运行异常,释放资源的代码没有被运行。智能指...
2020-02-26 23:57:02 228
原创 C++设计模式~观察者模式
设计模式~观察者模式(观察者模式(Observer patten)、观察者-监听者模式、发布-订阅模式)主要关注的是对象之间的通信对象的一对多的关系,也就是多个对象都依赖一个对象,该对象状态发生改变时,其他对象都能及时够接收到相应的通知。就是多个对象将自己关注的时间注册到某个对象,这个对象只负责关注事件是否发生,如果某个事件发生,通知对应的对象,其他对象可以去做其他事情,等待自己的事件发...
2020-02-24 22:44:38 95
原创 C++设计模式~工厂模式
设计模式~工厂模式工厂模式工厂模式是典型的继承多态。【继承多态】工厂模式封装了对象的创建,即用户不逼自己调用产品的构造函数,是要通过相应的函数接口即可。工厂模式的分类简单工厂(Simple Factory)工厂方法(Factory Method)抽象工厂(Abstract Factory)简单工厂#include <iostream>#include <...
2020-02-24 13:44:38 76
原创 C++设计模式~单例模式
设计模式~单例模式单例模式单例即该类只能实例化一个对象。单例模式的构造函数私有化,拷贝构造,赋值运算符重载函数可直接delete。需要一个静态函数接口,返回唯一静态实例对象。单例模式的分类饿汉式单例模式:唯一的实例对象是在main函数开始前就已经在数据区了。懒汉式单例模式:唯一的实例对象在第一次调用获取实例对象时才构造对象。饿汉式单例模式class Singleton{...
2020-02-24 13:14:16 151
原创 C++ -- 继承和多态
继承继承的本质和原理本质代码的复用,基类提供所有派生类的公共函数接口,派生类也可以有自己特定的成员。在基类中给所有派生类提供统一的虚函数接口,让所有派生类重写,方便实现多态类与类之间的关系组合:一部分的关系,一个类的对象是另一个类的成员继承:一种的关系,一个类是另一个类的派生类。继承方式可见继承中,无论是什么继承方式基类的私有成员在派生类中都是不可访问的,并且访问权限...
2020-02-23 23:54:43 154
原创 网络 -- 滑动窗口
网络 – 滑动窗口作用滑动窗口是确保TCP可靠传输数据的利器。滑动窗口滑动窗口是以字节为单位的。发送方有发送窗口,接收方有接收窗口。图解【step 1】假设A向B发送数据,然后B向A发送确认报文,报文头部信息中窗口大小是20字节,确认号是31,这表明B缓冲区还可接收数据是20字节,而且B期望收到下一个序号是31的数据,并且30为止的数据都已经接受到了,根据这两个数据A的发送窗口如下图...
2020-02-21 23:56:03 330
原创 Nginx内存池仿写和测试
Nginx内存池仿写和测试【Nginx内存池源码刨析】使用C++语言将Nginx内存池封装成面向对象内存池,将内存池的创建和销毁实现在构造函数和析构函数中。Nginx内存池代码ngx_mem_pool.h文件#ifndef NGX_MEM_POOL_H#define NGX_MEM_POOL_H#include <cstdlib>#include <cstring...
2020-02-19 21:36:56 273
原创 SGI STL二级空间配置器源码移植
SGI STL二级空间配置器源码移植【SGI STL源码刨析】malloc_alloc源码移植// malloc_alloc.h文件#ifndef MALLOC_ALLOC_H#define MALLOC_ALLOC_H#include <malloc.h>// 封装了malloc和free操作,可以设置OOM释放内存的回调函数template <int __i...
2020-02-19 14:09:51 151
原创 Nginx内存池源码刨析
Nginx内存池源码刨析重要成员定义主要的宏定义// 在内存池中最大可分配内存 4096 4K// nginx将小于4k的进行小内存管理#define NGX_MAX_ALLOC_FROM_POOL (ngx_pagesize - 1) // 默认内存池的大小 16k#define NGX_DEFAULT_POOL_SIZE (16 * 1024)// 内存对齐#defi...
2020-02-17 22:45:51 189
原创 SGI STL空间配置器源码刨析
SGI STL空间配置器源码刨析SGI STL一级空间配置器和二级空间配置器,一级allocator采用malloc和free管理内存,二级是基于内存池实现的。SGI STL 对于容器空间配置器选择template <class _Tp, class _Alloc = __STL_DEFAULT_ALLOCATOR(_Tp) >class vector;对于vector使用...
2020-02-14 15:16:59 319
原创 Source Insight 如何查看源码
Source Insight 查看源码使用C++的muduo网络库进行举例基本使用步骤【step 1】:点击Project --> New Project填写项目名称以及项目创建的路径,填写完毕点击ok即可【step 2】:如图点击ok进入下一步【step 3】:将muduo网络库源码添加到项目中添加完成会出现如图所示,然后点击 close 即可【step 4】...
2020-02-11 13:25:01 2371
原创 extern “C” 的学习总结
extern “C” 的使用原因和目的原因由于C++支持函数重载,而C语言不支持函数重载,因此C++编译器在编译C++函数生成的函数符号和C语言编译器编译C函数生成的函数符号是有区别的,如下int add(int a,int b); // 使用C语言编译器编译生成的函数符号是 _add// 使用C++编译器编译生成的函数符号类似是 add_int_int 目的为了能够实现C...
2020-02-05 13:44:18 104
原创 git各阶段代码撤销简介
git各阶段代码修改回退撤销操作工作区的代码撤销【step 1】 使用git status 查看当前状态,会提示出修改了文件,如下图中我修改了工作区的main.cpp文件,可以看到git给出的提示由两个,一个是使用git add将工作区的代码提交到暂存区,还有一个是git checkout就是回退到修改之前的代码【step 2】 输入命令 git checkout --filename 直...
2020-01-19 11:45:00 543
原创 git的常用命令介绍
git的常用命令介绍将GitHub上项目拉取到自己的本地使用命令git clone 远程仓库地址仓库地址在GitHub上项目页面的clone or download中,如图所示将仓库地址复制下来,然后在自己的git客户端中命令即可,如图所示克隆成功可以使用git log 查看当前仓库项目的提交日记,需要cd到项目目录中在clone过程中,有两个东西自动生成一个是远程仓...
2020-01-18 19:02:19 279 1
原创 Windows上安装配置git客户端
git客户端配置Windows上安装git客户端下载地址链接:https://pan.baidu.com/s/1hmpEo_ijM09f9hHysY8Z9A提取码:ir01下载安装就一路next即可,完成之后会有如下图,表示安装成功![外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CmOzDypP-1579324425534)(C:\Users\雷神\Ap...
2020-01-18 13:19:58 656
原创 CMake基本使用总结
CMake文件名格式和用法cmake文件的文件名必须是CMakeLists.txt,文件名大小写相关,如果一个工工程中有多个目录,每个目录中都必须有一个CMakeLists.txt文件语法示例代码一编写CMakeLists.txtcmake_minimum_required(version 2.8) # 版本号project(HELLO) ...
2020-01-14 13:19:12 476
原创 Ubuntu18.10更换apt源
标题Ubuntu18.10更换apt源进入apt配置文件# sudo cd /etc/apt/ 将原来的apt源文件保存# sudo mv sources.list sources.list.back查看自己的Ubuntu# lsb_release -a显示Distributor ID: UbuntuDescription: Ubuntu 18.10Release...
2020-01-07 18:33:32 3795
原创 Linux安装zookeeper原生C API接口出现的make编译错误
Linux安装zookeeper原生C API接口出现的make编译错误出现的问题./configure之后,然后make,发现出现如图问题图中出现 [-Werror=format-overflow=]错误问题分析我的Linux上安装的gcc版本是8.3.0,编译检测性非常高zookeeper源码编译生成C函数接口,在./confihure后生成的Makefile文件中,默认是将警告...
2020-01-07 18:24:54 1777 4
原创 红帽系统运行程序找不到共享库问题
红毛系统运行程序找不到共享库问题问题出现在centos上执行一个使用protobuf的程序时,提示了如下错误问题原因第一个原因是没有主机上没有安装该共享库,导致连接失败第二种原因是已经安装了该共享库,但是程序执行调用该共性库时,程序按照默认路径找不到该共享库,因为很多共享的开源库安装的默认安装的路径时/usr/local/lib,而红帽系统一般只会默认在/lib、/use/lib和动态...
2020-01-03 23:16:29 521
原创 C++实现深度遍历迷宫问题
题目要求深度遍历搜索迷宫路径输入要求1. 请输入迷宫行列数(例如:10 10 )2. 请输入迷宫路径信息(0表示可以走、1表示不能走)
2019-11-15 17:11:16 780
原创 C++实现分苹果问题
题目内容问题: n 只奶牛坐在一排,每个奶牛拥有 ai 个苹果,现在你要在它们之间转移苹果,使得最后所有奶牛拥有的苹果数都相同,每一次,你只能从一只奶牛身上拿走恰好两个苹果到另一个奶牛上,问最少需要移动多少次可以平分苹果,如果方案不存在输出 -1。输入描述: 每个输入包含一个测试用例。每个测试用例的第一行包含一个整数 n(1 <= n <= 100),接下来的一行包含 n 个整数 ...
2019-10-28 23:43:28 3844
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人