- 博客(56)
- 资源 (4)
- 收藏
- 关注
原创 cookie,session,token的区别和作用
1.cookie,session,token的出现的背景很久很久以前,Web 基本上就是文档的浏览而已, 既然是浏览,作为服务器, 不需要记录谁在某一段时间里都浏览了什么文档,每次请求都是一个新的HTTP协议, 就是请求加响应, 尤其是我不用记住是谁刚刚发了HTTP请求, 每个请求对我来说都是全新的。这段时间很嗨皮但是随着交互式Web应用的兴起,像在线购物网站,需要登录的网站等等,马上就面临一个问题,那就是要管理会话,必须记住哪些人登录系统, 哪些人往自己的购物车中放商品, 也就是说我必须把每个人区分
2021-11-16 15:47:37
1079
原创 std::bind可以绑定成员变量
#include <iostream>#include <string>#include <functional>using namespace std;class MyClass{public: MyClass(){} MyClass(int a): m_i(a){} ~MyClass(){} void Get(int a, string str) { cout << a << " " << str .
2021-09-15 09:49:15
906
原创 std::future、std::promise、std::packaged_task、std::async
#include <iostream>#include <string>#include <future>#include <thread>#include <chrono>#include <condition_variable>#include <hash_map>#include <unordered_map>using namespace std;// 使用std::promise.
2021-09-14 14:50:32
273
原创 C++实现定时器
定时器的主要数据: 1.一个线程变量,保存定时器线程 2.一个互斥锁,配合条件变量使用 3.一个条件变量,结合互斥锁,可以是线程不执行任务时,睡眠一段时间,在退出调用时,可以唤醒线程完成退出 4.定时执行函数,具体的定时执行业务操作 5.间隔时间,定时器间隔一段时间调用定时执行函数 6.一个退出标识,标志是否退出定时线程循环 7.立即执行标识,标识新建状态的定时线程是否立即执行一次任务,而不需等待一个间隔时间才开始执行第一次任务#include <ios...
2021-08-27 16:33:43
13353
原创 C++读写锁的托管包装器
// 读锁template<class T>class CReadLock{public: explicit CReadLock(T& rwmutex) : m_rwmutex_(rwmutex) { m_rwmutex_.LockRead(); } virtual ~CReadLock() { m_rwmutex_.UnLockRead(); }private: CReadLock() = delete; CReadLock(const T&.
2021-08-17 23:21:17
132
原创 C++读写锁- 一个互斥量、一个条件变量、一个计数变量实现读写锁
// 一个互斥量、一个条件变量、一个计数变量实现读写锁class CRWMutex2{public: CRWMutex2() : m_count_(0) { } virtual ~CRWMutex2() = default; void LockRead() { std::unique_lock<std::mutex> locker(m_mutex_); while (m_count_ < 0) m_cond_.wait(locker, [=] {r.
2021-08-17 22:27:48
404
原创 C++实现递归锁CRecursiveMutex
1、递归锁允许同一个线程多次加锁而不死锁,不同线程加锁和正常的互斥量一样。2、应用场景解决这后续描述的一类问题。在一个函数内给互斥量上了锁还没有解开,然后又调用了另一个函数,这个被调用的函数也去给互斥量上锁,这种情境下就会出现死锁。3、递归互斥量主要是通过对同一个线程的加锁请求计数。#ifndef _RECURSIVELOCK_H_#define _RECURSIVELOCK_H_#include <map>#include <mutex>#in
2021-08-17 18:29:29
1022
原创 C++11 auto、decltype、is_reference、is_rvalue_reference/is_lvalue_reference、typeid
#include <iostream>#include <type_traits> // 存在is_rvalue_reference、is_lvalue_reference、is_reference模板using namespace std;/* 左值:可以取地址的、有名字的就是左值; 右值:不可以取地址的、没有名字的是右值;右值是由两个概念构成的,一个是纯右值,另一个则是将亡值。 左值引用:对左值的引用,是具名变量值的别名,声明时必须初始化,不能对左值引用重定义。.
2021-08-14 11:46:58
405
原创 std::map、std::set使用自定义数据的键值时注意排序
map、set插入自定义数据类型作为key时需要注意什么问题问题?!!!!!!!!首先要解决排序问题,方法有:1.重载自定义数据类型的operator<()操作符2.map类型的第三个参数为函数对象类类型,可以自定义这个比较函数的函数对象, 如申明一个类似 struct CustomLess { bool operator()(const CustomKey2& other1, const CustomKey2& other2) { ...
2021-08-10 23:48:51
826
原创 算法实现--二分查找-0~n-1中缺失的数字
/************************************************************************/ /* 剑指 Offer 53 - II. 0~n-1中缺失的数字 一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0~n-1之内。在范围0~n-1内的n个数字中有且只有一个数字不在该数组中,请找出这个数字。 示例 1: 输入: [0,1,3] 输出: 2 示例2: 输入: [0,1,2,3,4,5,6,7,9..
2021-06-13 17:06:39
366
原创 算法实现--二分查找-在排序数组中查找元素的第一个和最后一个位置
/************************************************************************/ /* 34. 在排序数组中查找元素的第一个和最后一个位置 给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。 如果数组中不存在目标值 target,返回 [-1, -1]。 进阶: 你可以设计并实现时间复杂度为 O(log n) 的算法解决此问题吗? 示例 1: 输入..
2021-06-13 15:52:24
247
原创 算法实现--二分查找-旋转数组的最小数字
/* 剑指 Offer 11. 旋转数组的最小数字 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组[3,4,5,1,2] 为 [1,2,3,4,5] 的一个旋转,该数组的最小值为1。 示例 1: 输入:[3,4,5,1,2] 输出:1 示例 2: 输入:[2,2,2,0,1] 输出:0 来源:力扣(LeetCode) 链接:ht...
2021-06-13 15:51:03
110
原创 C++模板全特化(具体化)与偏特化(部分具体化)详解
1.模板简介模板就是实现代码重用的一种机制,它可以实现类型参数化,即把类型定义为参数, 从而实现了真正的代码可重用性。模板编程和函数重载可以实现C++静态多态,也叫编译时多态。模版可以分为两类,一个是函数模版,另一个是类模版。2.模板特化的目的模板本来是一组通用逻辑的实现,但是可能存在特定的参数类型下,通用的逻辑实现不能满足要求,这时就需要针对这些特殊的类型,而实现一个特例模板—即模板特化。3.重点注意1)类模板和函数模板都可以被全特化;2)类模板能偏特化,不能被重载;...
2020-06-19 17:58:02
5725
4
原创 C++四种类型转换运算符const_cast、static_cast、dynamic_cast、reinterpret_cast相关实验总结
1.const_cast<type-name>(expression)目标类型只能是指针或者引用,作用是去掉类型的const或volatile属性2.static_cast<type-name>(expression)类似于C风格的强制转换,无条件转换,但没有运行时类型检查来保证转换的安全性,所以在编译时已经完成转换。 static_cast一般用于基本类型转换。 1)基类和子类之间的转换:其中子类指针转换为父类指针是安全的,但父类指针转换为子类指针是不安...
2020-06-12 16:03:10
769
原创 C++读写锁-实现优先写
#ifndef _RWLOCK_H_#define _RWLOCK_H_#include <mutex>#include <condition_variable>// 读写互斥量// 当有写和读操作同时竞争时,写操作优先与读操作class CRWMutex{public: CRWMutex() : m_read_count_(0) , m_write_count_(0) , m_is_writing_(false) { } virtual .
2020-06-08 17:31:15
932
原创 C++多态与虚函数相关实验说明
void Test_Polym_Virtual_Func(){ cout << "Test_Polym_Virtual_Func" << endl; // 测试虚函数 class A { public: A(){ cout << "A Constructor." << endl; f(); g(); m_p1_ = new int; *m_p1_ = 1; } virtual~A(){ cout << "A Destructo.
2020-06-08 14:56:56
357
原创 C++继承与组合关系中构造函数与析构函数执行顺序
/* 测试继承与组合关系中构造函数与析构函数执行顺序 在继承关系中:先调用基类构造函数,再调用子类构造函数 针对包含自定义类型成员变量的情况,先构造成员变量,在调用自己的构造函数 析构函数与构造函数调用顺序相反*/void Test_Constructor_Destructor_Sequence(){ cout << "Test_Constructor_Destructor_Sequence" << endl; // 测试包含继承关系和自定义成员变量的 clas.
2020-06-08 14:14:04
445
原创 emplace_back与push_back的区别
C++11中经常用到插入操作对stl的各种容器进行操作,比如vector,map,set等,以vector为列,当数据类型实现了移动构造函数时,push_back()插入一个右值时,会先调用构造函数创建临时对象,再调用移动构造函数将对象放置到容器中,如果数据类型没有实现移动构造函数,push_back()插入一个右值时,会先调用构造函数创建临时对象,再调用拷贝构造函数将对象放置到容器中;而emplace_back()一个右值时,都是在插入的时候直接构造对象,不需要调用移动构造函数或拷贝构造函数;如下列子:
2020-05-12 21:24:44
692
原创 算法实现-二叉树相关
#pragma once#include <stack>#include <queue>#include <vector>#include <iostream>using namespace std;namespace BinaryTree{ void PrintFunStr(string funStr) { printf...
2020-04-07 00:32:43
166
原创 算法实现-排序相关
#pragma once#include <vector>#include <string>#include <iostream>using namespace std;namespace Sort{ // 基本思想:通过一趟排序将数分割为左,右两部分,并选择出基数,使得左边的都得基数小,右边的都比基数大,并依此递归操作。 // 1. ...
2020-04-06 20:18:43
169
原创 算法实现--判断两个字符串是否互为旋转词
/*旋转字符串判断:如果对于一个字符串A,将A的前面任意一部分挪到后边去形成的字符串称为A的旋转词。比如A="12345",A的旋转词有"12345","23451","34512","45123"和"51234"。对个字符串A和B,请判断A和B是否互为旋转词。给定两个字符串A和B,请返回一个bool值,代表他们是否互为旋转词。测试样例:"cdab","abcd"返回:true*...
2020-04-06 17:57:52
150
原创 算法实现--给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
给定一个字符串,请你找出其中不含有重复字符的最长子串的长度。示例1:输入: "abcabcbb"输出: 3解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。示例 2:输入: "bbbbb"输出: 1解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。示例 3:输入: "pwwkew"输出: 3解释: 因为无重复字符的最长子串是"w...
2020-04-06 17:57:30
3630
原创 算法实现--找出一个字符串中第一个无重复字符
下面代码中使用自定义的高精度计时器,统计两种方案消耗时间。/*编写一个高效率函数来找出一个字符串中第一个无重复字符.例如:”total”中的o,”teeter”中的r.要求算法效率优于O(n2).字符串中的字符均存在于ASCII表中。*/#include <iostream>#include "StopwatchTime.h" // 计时接口#define AS...
2020-04-06 17:57:15
254
原创 算法实现--二维数组-查找数字
/* 题目描述: 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。 请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 思路: 利用二维数组由上到下,由左到右递增的规律, 那么选取右上角或者左下角的元素a[row][col]与target进行比较, 当target小于元素a[row][c...
2020-04-06 17:54:54
105
原创 算法实现--字符串替换空格
/* 题目描述: 请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。 思路: 问题1:替换字符串,是在原来的字符串上做替换,还是新开辟一个字符串做替换! 问题2:在当前字符串替换,怎么替换才更有效率(不考虑java里现有的replace方法)。 从前往后替换,后面的字符要不断...
2020-04-06 17:54:41
117
原创 算法实现--list相关
#pragma once#include <vector>#include <string>#include <iostream>using namespace std;namespace List{ struct ListNode { int val; ListNode* next; ListNode(int x) : val(...
2020-04-06 17:54:13
216
原创 算法实现--求和为s的连续正数序列.
求和为s的连续正数序列.如,输入9,输出序列:{2,3,4}、和{4,5}下面是暴力循环法:// 暴力法vector<vector<int>> FindContinuousSequence(int target) { int sum = 0; vector<vector<int>> result; for (int i = 1;...
2020-04-06 17:53:28
165
原创 unique_ptr智能指针的简单实现
#ifndef UNIQUE_PTR_H#define UNIQUE_PTR_H#include <stdio.h>#include <iostream>using namespace std;// unique_ptr对象始终是关联的原始指针的唯一所有者。// 无法复制unique_ptr对象,它只能移动template <typename T...
2020-03-30 13:22:38
407
原创 算法实现--KMP算法-匹配字符串
/*有一个文本串S,和一个模式串P,现在要查找P在S中的位置,怎么查找呢?*//*** @brief 暴力匹配* @param[in] s 主串* @param[in] p 模式串* @note 如果用暴力匹配的思路,并假设现在文本串S匹配到 i 位置,模式串P匹配到 j 位置,则有:如果当前字符匹配成功(即S[i] == P[j]),则i++,j++,继续匹配下一个字符;如...
2019-06-06 15:39:29
270
原创 C++ 与String与WString相互转换
#include <wchar.h>#include <windows.h>/** @fn std::wstring String2WString(const std::string& str_in)* @brief string转换为wstring* @param (IN) const std::string&* @return st...
2019-06-06 15:03:03
1235
原创 算法实现--二分查找-数组中负数与正数
/* 一个数组中中间部分都是0,前半部分全是负数,后半部分都是正数,要求时间复杂度尽量低的情况下,查找最后一个负数和第一个正数。 题目中描述的数组,求解结果是与0比较的,可以看做是有序的,使用二分查找,时间复杂度可以达到log(n)*/#include <vector>#include <iostream>using namespace std;/...
2019-06-03 19:13:00
1529
原创 单例模式实现
实现线程安全的泛型单例模式#ifndef __SINGLETON_H__#define __SINGLETON_H__#include <mutex>#include <memory>template <class T>class CSingleton{public: static T& Instance();priva...
2019-05-06 23:10:38
435
原创 shared_ptr智能指针的简单实现
#ifndef SHARED_PTR_H#define SHARED_PTR_H#include <stdio.h>#include <iostream>using namespace std;template <typename T> // 泛型编程class Shared_ptr{public: Shared_ptr() : m_p...
2019-05-06 11:47:38
179
原创 找出数组中每个元素右边第一个比它大的元素
题目:给定一个整型数组,数组元素随机无序的,要求打印出所有元素右边第一个大于该元素的值。要求时间复杂度O(n)。借助栈结构可以一次遍历完数组,得到结果。#define INVALID_MAX -1vector<int> findMax(vector<int> num){ if(num.size()==0) return num; ...
2019-05-05 15:45:37
2499
1
原创 UMDH帮助排查内存持续增长问题
1.简介umdh是windows debug tools下的一款命令行工具,它的全名是User-Mode Dump Heap 这个工具会分析当前进程在堆上分配的内存,通过命令操作,可以对当前进程分配的每一块内存做日志记录,其中包含分配的内存大小、内存分配地址、内存分配时的函数调用堆栈等;还可以通多命令操作,比较几个顺序时间的日志记录,找出内存增长的位置。2.步骤在已经安装windbg的...
2019-04-11 14:01:04
2004
原创 centos7下编译安装make-3.13.2
1.下载cmake源码[root@localhost download]# wget https://github.com/Kitware/CMake/releases/download/v3.13.2/cmake-3.13.2.tar.gz2.解压 cmake-3.11.2.tar.gz 文件[root@localhost download]# tar -zxvf cmake-3...
2019-01-11 18:24:29
2999
原创 linux centos7.x防火墙设置
1.firewalld的基本使用查看防火墙状态: systemctl status firewalld开启防火墙: systemctl start firewalld关闭防火墙: systemctl stop firewalld重启防火墙: systemctl restart firewalld开机禁用防火墙: systemctl disable firewalld开机启用防火墙: ...
2019-01-11 10:38:06
381
原创 查看centos版本
1.打开终端,接着会弹出终端窗口2.在里面输入“cat /etc/redhat-release”命令 3.回车后就可以输出centos系统的版本4.使用“uname -a”命令可以查看内核版本等信息...
2019-01-10 09:56:30
2824
原创 win7本机ping不通虚拟机,虚拟机可以ping通win7主机
1.将虚拟机设置为NAT模式(VMnet8)点击虚拟机工具栏:编辑->虚拟网络编辑器2.关闭虚拟机的防火墙设置service iptables stop确定是否关闭service iptables status3.在linux使用ifconfig查看ip,如图可看出ip是192.168.159.1284.回到win7本机,进入cmd使用ipconfig,查...
2019-01-09 20:25:22
3623
原创 C++智能指针unique_ptr
C++11:unique_ptr、shared_ptr、weak_ptr,本节介绍一下unique_ptr1.智能指针产生原因众所周知,C++程序设计中使用堆内存是非常频繁的操作,堆内存的申请和释放都由程序员自己管理。然而,很多程序员在使用堆内存时都很头疼,因为一次不恰当的使用方法,很容易造成堆内存泄露(忘记释放),二次释放,程序发生异常时内存泄露等问题等。所以C++引入了智能指针,使用使...
2018-12-20 17:19:11
754
DES算法实现-分组模式-数据补位.doc
2020-05-05
tcpip详解里-sock-0.3.2程序
2019-01-18
VA_X_Setup2210 + VA_X.dll破解补丁,支持2008-2017均可用
2019-01-12
包含string对象的结构与memset初始化操作
2018-11-23
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人