自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 AES的加密算法

package mainimport ( "bytes" "crypto/aes" "crypto/cipher" "encoding/base64" "encoding/hex" "fmt" "log" "net/url" "strconv" "time" //"log" //"net/url" //"net/url" //"net/url" //"encoding/base64" //"encoding/hex" //"net/url" //"enco.

2021-07-17 09:04:24 344

原创 mysql的隔离级别

坚持有四种隔离级别,每个隔离级别都有对应问题,如 脏读、不可重复读、幻读 由低到高依次为Read uncommitted 读未提交 、Read committed 读已提交、Repeatable read 重复读、Serializable串行化 ,这四个级别可以逐个解决脏读、不可重复读、幻读这几类问题。1.脏读一个事物正在访问数据,并对数据做了修改,修改...

2019-08-24 21:38:51 228

原创 mysql的存储引擎以及索引

mysql的主要索引innodb和misaminnodb:根据存储引擎的不同索引的实现也不同,基于B+树数据结构实现的索引比较多,也有hash索引,根据不同的场景应用不同。接下来描述下innodb存储引擎,innodb的主键索引是在b+树的叶子节点存储的是数据本身,辅助索引叶子节点存储的数据是主键的值,当用辅助索引查询值的时候会找到主键的值,再去主键索引的B+查询一遍。 因为主键索...

2019-08-24 14:06:08 194

原创 回朔算法

回朔算法的思想很简单,每一步都是尝试,如果正确进行下一步,如果不正确则回退,回退到上一步或者原点。 为了优化时间,不必要的搜索要进行剪枝操作常见的深度优先搜索就是回朔法的思想,来几道经典的回朔法。1.https://leetcode-cn.com/problems/combination-sum/ 代码有注释,今天时间紧急,后边有时间画图放上边加以理解class Soluti...

2019-08-15 11:57:17 703

原创 hash表的实现

hash应用非常多,当问到大数据处理时 要求实现一个hash的时候可能有点懵...下边时hash表的实现,散列容器,用的是拉链法,带注释//// Created by yanpan on 2019/8/12.//#if 0#include<iostream>using namespace std;#define M 13 //初始化13个tablet...

2019-08-15 09:58:25 155

原创 string类的实现

string类的实现构造函数、拷贝构造函数、赋值函数、析构函数的实现#if 1#include <iostream>using namespace std;class MyString{public: MyString(const char* str) { if(str == NULL) { ...

2019-08-15 09:54:13 117

原创 epoll解析 -LT ET

I/O多路复用epoll函数epoll是通过一组函数来完成多路复用的其中epoll_create、epoll_ctl、epoll_wait函数,不懂的可以查阅资料!这篇博客主要记录 epoll的LT模式和ET模式的区别LT模式:epoll相当于一个效率较高的poll, 当描述符有事件发生时,会通知用户读取描述符的事件(消息), 当事件没有一次读取完还会继续通知用户去读事件(消...

2019-08-13 18:03:53 174

原创 leetcode---hash

插入hash表之后,要查找这个key是否存在于hash表中,应该用find函数,然后去和容器的end()进行比较1.https://leetcode-cn.com/problems/two-sum/class Solution {public: vector<int> twoSum(vector<int>& nums, int target...

2019-08-13 17:45:49 195

原创 动态规划 -- 动态递推1

53. 最大子序和. 给定一个整数数组 nums,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例:输入: [-2,1,-3,4,-1,2,1,-5,4], 输出: 6 解释:连续子数组[4,-1,2,1] 的和最大,为6dp状态的定义,dp[i] dp方程: dp[i] = max(dp[i-1] + nums[i...

2019-08-13 17:45:27 136

原创 动态规划 -- 动态递推一

第一步. 找出dp状态的定义第二步. 找到dp递推方程Leetcode120. 三角形的最小路径和 动态规划 时间复杂度 O(m*k) 空间复杂度 O(m*k)一种较为好理解的解法,定义一个二维的数组 dp, 状态 存放在二维数组中dp[i][j] = min(dp[i+1][j], dp[i+1][j+1]) + triangle[i][j]对dp二维数组初始化,...

2019-08-13 17:45:17 205

原创 迭代器失效问题

在序列容器里,删除了当前的iterator 导致后边所有元素的迭代器都会失效 增加一个元素也会导致后边的元素进行移动 因为vector、deque是序列容器,使用连续分配的内存,删除当前元素,后边的所有元素都会向前移动一个位置,之后数据的地址发生了变化,之前的迭代器根据原有容器的信息访问不到正确的内容。使用earse方法删除元素的时候 erase方法会返回下一个元素的迭代器(...

2019-08-13 17:44:45 204 1

原创 Linux内存管理 -- 虚拟地址映射

在32位地址下,进程的虚拟地址空间是4GB,需要将虚拟地址与物理内存连接起来,通过分页机制。物理内存,操作系统将物理内存分成一块一块大小为4KB都相同的页。4G的虚拟地址空间 页的大小是4KB, 即有4M的页,4M 的大小就是 1K 个 4K,4K就是一个页面,一共1K个页面,这个1K就是页目录表,页目录表的每一项大小是4个字节,页目录表是4k。页目录有1K个项,用前十位可以定位到页...

2019-08-13 17:44:37 180

原创 进程、线程

什么是进程?进程是资源分配的基本单位 有自己独立的虚拟地址空间,在系统上运行的东西,都可以称为进程, 占用系统的资源 如cpu、物理内存。什么是程序?程序是进程指令的集合,可以启用一个进程或者多个进程,占用磁盘空间,不占用系统资源。什么是线程?在Linux上线程是特殊的进程,是轻量级的进程 线程是资源调度的基本单位 每个线程都有独立的程序计数器,线程栈和一组线程寄存器,内核调...

2019-08-13 17:44:25 129

原创 GDB调试多线程程序

gdb调试多线程:gdb调试多线程程序的常用命令info threads,显示当前可调式的所有线程, gdb调试工具会为可调式的所有线程分配一个ID,通过ID可以来操作线程。 thread ID, 选择要调试的目标线程 set scheduler-locking [off|on|step], 默认的情况下,也是选择 off 的情况,调试多线程程序时,被调试的线程 以及 其他线程都...

2019-08-13 17:42:09 270

原创 GDB调试多进程程序

gdb调试多进程:1.使用子进程的pid来调试子进程attach + 进程pid 将该进程附加到gdb调试器中 6673是子进程的pid,6672是父进程pid2.使用调试器选项 follow-fork-mode modesetfollow-fork-mode mode 其中最后一个mode可以选 parent 和 child选项, 分别代表了父进程...

2019-08-13 17:42:04 116

原创 GDB调试

1.gdb的简介gdb是Linux下的 GUN调试程序,用来调试C/C++的强大调试器。2.基本命令介绍编译文件的时候需要加上 -g加上 生成调试信息, 如 g++ -g -o test test.cpplist 查看源代码, 输入list后可以按回车继续查看源代码run 让程序跑起来next 逐步执行step 进入函数中执行bt 查看函数调用的栈帧...

2019-08-13 17:41:36 287

原创 Linux内存管理 二

内存的分配与回收在程序中申请堆上的内存使用 malloc函数,在系统调用中可以调用 brk() 函数 和 mmap()函数当申请的内存小于128kb(默认值) 的时候会调用brk()函数在heap上开辟内存,当申请内存大于等于128kb(默认值) 的时候会调用mmap()函数在mmap映射区开辟内存内存的回收调用free()函数 或unmap()函数来释放内存函数的声明:...

2019-06-06 15:32:10 103

原创 Linux内存管理 一

1.Linux内核为每个进程提供了一个独立的虚拟地址空间,这个虚拟地址空间是连续的。虚拟地址空间被分为内核空间和用户空间,在32位系统中,虚拟地址空间一共有4GB的大小。内核空间占1G(位于最高处),用户空间占3G。进程在用户态时只可以访问用户空间,在进入内核态之后才可以访问内核空间内存。每个进程的虚拟地址空间都包含了内核空间,他们对应的是同一块物理内存。一个可执行程序在没用...

2019-06-03 09:47:30 170

原创 Leetcode---136

给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素示例 1:输入: [2,2,1] 输出: 1示例2:输入: [4,1,2,1,2] 输出: 4说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?思路采用异或的思路,相同的数字异或的结果是0,不同的数字异或结果是1;不同异...

2019-06-02 16:35:26 83

原创 Linux下的内存分配

1.伙伴算法一种物理内存分配和回收的方法,物理内存所有空闲页都记录在BUDDY链表中。首选,系统建立一个链表,链表中的每个元素代表一类大小的物理内存,分别为2的0次方、1次方、2次方,个页大小,对应4K、8K、16K的内存,没一类大小的内存又有一个链表,表示目前可以分配的物理内存。例如现在仅存需要分配8K的物理内存,系统首先从8K那个链表中查询有无可分配的内存,若有直接分配;否则查找16K大小...

2019-06-02 16:34:52 240

原创 同步、异步、阻塞、非阻塞

阻塞I/O:执行的系统调用方法还没有完成就被操作系统挂起(当前的条件不满足时),直到等待的事件发生为止。非阻塞I/O:执行的系统调用总是立即返回,不会被操作系统挂起(不管条件是否满足),时间到了,如果事件没有立即发生,就会返回-1,在时间没到的时候会轮询检查数据是否处理完成。同步:指进程调用接口后,需要等待接口处理完数据后并返回进程才能继续执行。 重点是,数据处理完 并返回异步:指...

2019-06-02 16:27:45 105

原创 Leetcode---181

给定一个包括n个整数的数组nums和 一个目标值target。找出nums中的三个整数,使得它们的和与target最接近。返回这三个数的和。假定每组输入只存在唯一答案。例如,给定数组 nums = [-1,2,1,-4], 和 target = 1与 target 最接近的三个数的和为 2 (-1 + 2 + 1 = 2)解题思想:将数组进行排序(升序,...

2019-05-30 09:20:53 116

原创 leetcode---5

给定一个字符串s,找到s中最长的回文子串。你可以假设s的最大长度为 1000。示例 1:输入: "babad" 输出: "bab" 注意: "aba" 也是一个有效答案。示例 2:输入: "cbbd" 输出: "bb"class Solution {public: string longestPalindrome(string s) ...

2019-05-28 17:57:41 82

原创 项目

这两天在写项目,刚改完一个bug, 昨天和今天都没有跑步,没有锻炼腹肌。 明天把刷过前两天的刷过的题记录在博客上吧,困~~坚持✊

2019-05-24 23:13:22 95

原创 智能指针 --- 实现

智能指针的功能前边文章已经介绍了接来下来实现一遍智能指针 注释稍后在加//// Created by yanpan on 2019/5/9.///*智能指针的实现*/#if 1#include <iostream>#include <memory>using namespace std;template <class T&g...

2019-05-10 17:56:18 265

原创 智能指针 --- 循环引用问题、解决办法

上一篇介绍了四种智能指针,四种智能指针的特点及使用方法看段代码:class B;class A{public: A(){ cout << "A()" << endl; } A(int i):a(i){ cout << "A(int)" << endl;} ~A(){ cout << "~A()" ...

2019-05-10 17:55:08 612

原创 智能指针 --- 一

C++中的智能指针是用来管理外界资源的,如在堆上边new的资源,当程序还没来得及执行delete操作,函数遇到异常了,没有释放资源,导致内存泄露 如下代码:void fun(){ A *ptr = new A(); /*... ...*/ //程序可能在这行代码中抛出异常,导致ptr所指向堆上的资源没有释放 delete ptr...

2019-05-10 17:54:59 3134

原创 智能指针 --- 0

这篇文章不提任何的智能指针,看一段代码、示例一:#include <iostream>using namespace std;class test{public: test(){cout << "test()" << endl;} ~test(){cout << "~test()" << endl;}...

2019-05-10 17:54:48 215

原创 虚析构函数的深度解析

析构函数为什么要写成虚函数,什么情况下写成虚函数,写成虚函数解决了什么问题, 解决问题的深层原理是什么?前边都是表层,最后一个问题也困扰我了好一阵..// Created by yanpan on 2019/5/10.#include <iostream>using namespace std;class Base{public: Base(){cout ...

2019-05-10 17:33:06 228

原创 输出给定字符串的连续子串

//时间复杂度 O(n三次方)void AllSubString(char *str, int len){ int i = 0; for(; i < len; i++) { for(int j = i; j < len; j++) { for(int k = i; k < j; k++) ...

2019-05-07 13:20:49 718

原创 没有bug的二分查找

二分查找都熟悉吧,先写一个有bug的二分查找static int binary(int *arr, int len, int data){ int min = 0; int max = len - 1; int mid = 0; while(min <= max) { mid = (min + max) / 2; ...

2019-05-06 22:01:29 225

原创 c++中的四种类型强转

坚持✊在语言里边的类型强转:int main(){ int *ptr; char *qtr; qtr = (char*)ptr; return 0;}c++里边有四种强制类型转换:caonst_cast: 去掉变量的const属性 static_cast: 编译器认为可以支持的强转,安全性较高 reinterpret_cast: 和c的强...

2019-05-06 21:54:03 554

原创 继承多态 一

继承有三种继承方式,public继承、protected继承、private继承 基类成员的访问权限在派生类里必须是 <= 继承方式的继承方式 基类的public成员 基类的protected成员 基类的private成员 public继承 仍是public成员 仍是protected成员 被派生类继承,但是不可见 protected...

2019-05-06 21:53:46 401

原创 写出高效的c++代码——函数返回值的优化

函数返回值4字节是通过寄存器带回来的,大于4字节小于8字节通过两个寄存器带回来,大于8字节通过临时对象带回来/* * 写出高效c++代码,函数返回值的优化 */#if 1#include <iostream>using namespace std;class Test{};Test GetObject(Test t){ int value = t....

2019-05-06 21:53:26 955

原创 Leetcode---41

给定一个未排序的整数数组,找出其中没有出现的最小的正整数。 示例1:输入: [1,2,0] 输出: 3示例2:输入: [3,4,-1,1] 输出: 2示例3:输入: [7,8,9,11,12] 输出: 1说明: 你的算法的时间复杂度应为O(n),并且只能使用常数级别的空间。解法一:空间复杂度是O(n)#if 1class Solution {publ...

2019-05-05 14:26:18 250

原创 c++类对象的生存周期 二

构造了一个Test的类代码如下://// Created by yanpan on 2019/4/21.//#if 1#include <iostream>using namespace std;class Test{public: Test(int a = 10, int b = 10):_a(a),_b(b) //带有默认值的构造函数 ...

2019-05-01 21:10:44 145

原创 c++类对象的生存周期 一

构造函数:用来初始化对象的,自动调用的成员方法构造函数是可以重载的 如果在设计类的时候没有自己实现构造函数,则编译器会生成一个默认的构造函数,反之编译器则不会生成默认的构造函数拷贝构造函数:同构造函数的两点 编译器默认生成的拷贝构造函数会发生浅拷贝 拷贝构造函数的形参必须是引用,防止发生递归调用拷贝构造函数赋值运算符重在函数:编译器默认生成的是一个会发生浅拷贝的赋值运算符重...

2019-05-01 21:10:34 325

原创 Libevent 的简单实用

轻量级网络库Libevent对高效的I/O进行了封装,提供统一的API,我们调用API就会很方便,要搞清楚每个API背后的操作。 什么是高效的I/O??? 如Linux中独有的epoll,windows的IOCP,BSD的Kqueque我使用的是libevent2.0.21版本, Libevent2.0版本以后提供了buffere...

2019-05-01 21:07:08 229

原创 查看百度的bduss和cookie

按住F12打开

2019-05-01 21:04:32 8112 1

原创 反转一个字符串,保持字符串中的单词不反转

#if 1#include <stdio.h>#include <string.h>void Reserver(char *start, char *end){// if(NULL == str)// return; while(start <= end) { char tmp = *start; ...

2019-05-01 21:02:07 895

空空如也

空空如也

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

TA关注的人

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