自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(48)
  • 资源 (5)
  • 收藏
  • 关注

原创 tars 的基本使用——使用 tars 发布服务

改好后,执行 /usr/local/taf/cpp/tools/jce2cpp GetProduct.jce 命令,意为执行该 jce 脚本,生成 GetProduct.c 与 GetProduct.cpp 文件。可以手动进行发布,首先把之前写好的代码打包,执行 make tar 命令,可以得到项目的压缩包。其中 /usr/local/taf/cpp/script/cpp_taf_server.sh 为脚本程序所在目录。进入服务管理,发布管理,上传发布包。粘贴到 GetProductImp.h 文件中。..

2022-08-28 14:35:26 890

原创 tars 常用类用法总结一

一.配置类——taf::TC_Config1.主要成员函数及数据成员2.基本使用二.Mysql 操作类——taf::TC_Mysql1.主要成员函数及数据成员2.基本使用TC_DBConf三.Mysql 数据类——taf::TC_Mysql::MysqlData1.主要成员函数及数据成员2.基本使用四.网络端口类——taf::TC_Endpoint1.主要成员函数及数据成员2.基本使用。

2022-08-19 17:12:33 633 1

原创 LeetCode 笔记九

LeetCode 笔记九一.解码方法前言:主要是记录一些算法题的解题思路与技巧,纯当笔记用。图片与部分代码来源:leetcode图片与部分代码来源:leetcode图片与部分代码来源:leetcode一.解码方法力扣链接:力扣链接这题可以用动态规划做,定义 dp 数组,dp[i] 的含义表示为字符串从 0 到 i 的解码方法有多少种。遍历字符串 s 同时更新 dp 数组的值。如果 s[i] 的值不为 0,则 s[i] 可以单独解码为一个字母,dp[i]+=dp[i-1] ; 如果他和 s[i

2022-07-25 10:16:16 269

原创 LeetCode 笔记八

LeetCode 笔记八一.二叉搜索树与双向链表前言:主要是记录一些算法题的解题思路与技巧,纯当笔记用。图片与部分代码来源:leetcode图片与部分代码来源:leetcode图片与部分代码来源:leetcode一.二叉搜索树与双向链表力扣链接:二叉搜索树与双向链表二叉搜索树的中序遍历是有序的,这点应该很容易想到,所以我们需要在中序遍历的顺序下重新串联起各节点,把二叉搜索树组织成双向链表。使用递归的难点在于每遍历到一个节点时,无法得到上一个节点,节点间的串联操作也就无法进行。关于这个问题,

2022-05-30 20:20:22 307

原创 LeetCode 笔记七

LeetCode 笔记七一.滑动窗口最大值前言:主要是记录一些算法题的解题思路与技巧,纯当笔记用。图片与部分代码来源:leetcode图片与部分代码来源:leetcode图片与部分代码来源:leetcode一.滑动窗口最大值力扣链接:滑动窗口最大值单调栈思路,维护一个单调栈,如果后面入栈的数大于栈底部元素,则栈底部元素不可能是当前窗口的最大值,则当前栈底部元素可以从栈中删除。每次都取栈头部元素作为滑动窗口的最大值,但要注意判断栈头部元素是否是当前滑动窗口内元素。class Solution

2022-05-20 21:17:59 138

原创 LeetCode 笔记六

LeetCode 笔记六一.乘积小于 K 的子数组前言:主要是记录一些算法题的解题思路与技巧,纯当笔记用。图片与部分代码来源:leetcode图片与部分代码来源:leetcode图片与部分代码来源:leetcode一.乘积小于 K 的子数组力扣链接:乘积小于 K 的子数组这题就一个关键点,懂了这点,这题就会了。首先利用双指针扩展窗口直至当前窗口的乘积位于K的临界值,即再乘上下一个数,乘积会大于或等于K 。然后缩小窗口,即增加左指针的值缩小窗口,因为所有的数都是正数,所以相当于除了一个正数。如

2022-05-09 20:51:51 516

原创 LeetCode 笔记五

LeetCode 笔记四一.岛屿数量前言:主要是记录一些算法题的解题思路与技巧,纯当笔记用。图片与部分代码来源:leetcode图片与部分代码来源:leetcode图片与部分代码来源:leetcode一.岛屿数量力扣链接:岛屿数量对广度优先搜索不太熟,所以借这题练习随便熟悉一下。做了之后发现不难。和深度优先搜索一样,广度优先搜索也有模板。每考虑一个元素都以该元素为中心找到它附近所有满足条件的元素并且加入队列中。然后取出队列中一个元素进行一样的操作,直至队列元素为空。解这题的核心思路可以概括

2022-05-04 20:31:13 189

原创 LeetCode 笔记四

LeetCode 笔记四一.重建二叉树前言:主要是记录一些算法题的解题思路与技巧,纯当笔记用。图片与部分代码来源:leetcode图片与部分代码来源:leetcode图片与部分代码来源:leetcode一.重建二叉树力扣链接:重建二叉树可以用递归做这题,但要明白如何利用前序遍历与中序遍历构造二叉树。首先取前序遍历的第一个数,以它做二叉树的父节点构造二叉树。然后在中序遍历中找到该数,中序遍历左边的数为该二叉树的左子树,中序遍历右边的数为该二叉树的右子树。到这里,基本的递归模型就构造完成了,接

2022-04-26 19:39:22 718

原创 位图算法的简单实现

位图算法的简单实现一.原理二.算法实现一.原理位图算法是一种利用比特位来判断一个数是否存在的算法,比特位为一则表示该数存在,为零则不存在。如下图,存在数 1,3,5,7,10,13 。所以这些数的比特位都被置为一。不存在的数对应的比特位则被置为零。比如我可以分配 15 字节的内存用来实现位图算法,15 字节的内存一共有 15 * 8 个比特位,也就是 120 个比特位,所以我可以表示数字 0到119 是否存在。注意是从 0 开始,所以只能表示到 119 。二.算法实现#include <

2022-04-18 19:51:12 430

原创 LeetCode 笔记三

LeetCode 笔记三一.缺失的第一个正数前言:主要是记录一些算法题的解题思路与技巧,纯当笔记用。图片与部分代码来源:leetcode图片与部分代码来源:leetcode图片与部分代码来源:leetcode一.缺失的第一个正数力扣链接:缺失的第一个正数这题如果没有空间复杂度的限制,那还是很简单的。但题目却要求空间复杂度为 O(1) 。不能利用额外的空间,那就利用给定数组作为额外空间。具体的方法有两种,一种是利用已有数组作为哈希表,边遍历数组边修改哈希表,存在的数的哈希值置为负数,表示存在

2022-04-17 15:54:47 477

原创 Qt 常用函数一

Qt 常用函数一.QWidget1.setWindowTitle()2.setWindowModality()3.setWindowFlags()一.QWidget1.setWindowTitle()看函数名应该也知道这个函数的功能,设置窗口的标题。函数原型:void setWindowTitle(const QString &); //传入一个字符串作为窗口的标题2.setWindowModality()该函数功能为设置窗口模态。函数原型:void setWindowM

2022-04-15 10:34:49 4147 2

原创 二叉树的遍历

二叉树的三种遍历1.前序遍历2.中序遍历递归版非递归版3.后序遍历前言:图片与部分代码来自力扣1.前序遍历2.中序遍历递归版class Solution {public: void dfs(TreeNode* node,vector<int>& ret){ if(!node) return; dfs(node->left,ret); //遍历左子树 ret.push_back(node->v

2022-04-10 16:40:08 482

原创 LeetCode 笔记二

LeetCode 笔记二一.最大子数组和前言:主要是记录一些算法题的解题思路与技巧,纯当笔记用。图片与部分代码来源:leetcode图片与部分代码来源:leetcode图片与部分代码来源:leetcode一.最大子数组和力扣链接:最大子数组和子数组,要求是连续数组,所以对于每一个数,都有加入数组组成和或者不加入,自己单独成为子数组两个选择。当加入之前的子数组能使得和变大时,就可以加入,否则就不加入。dp 数组可以保存连续子数组的和,表示从首元素到当前元素的包含当前元素的最大子数组。cla

2022-04-02 21:02:29 282

原创 Nginx 内存池

Nginx 内存池前言一.高并发下传统方式的弊端1.高并发时较小内存块使用导致系统调用频繁,降低了系统的执行效率2.频繁使用时增加了系统内存的碎片,降低内存使用效率3. 没有垃圾回收机制,容易造成内存泄漏,导致内存枯竭二.弊端解决之道1.系统层面2.应用层面三.Nginx内存池总结实现1.什么是内存池2.实现思路3.Nginx 内存池结构图4.数据结构详解完整代码文件:前言最近学习了Nginx的内存池实现。想着总结记录一下。一.高并发下传统方式的弊端首先为什么我们需要使用内存池,就是因为传统方式有很

2022-04-02 15:45:28 3554

原创 LeetCode 笔记一

LeetCode 笔记1.最长连续序列前言:主要是记录一些算法题的解题思路与技巧。题目来源:leetcode1.最长连续序列力扣链接:最长连续序列暴力的解法当然是分别以数组中每一个数作为第一个数,找到连续的最长序列,保存以每一个数开始的最长连续序列,取最大值。然而这种解法有很多重复计算。举个例子:有序列 0,2,8,3,9,4,5 。显然最长连续序列是 2,3,4,5 。但在暴力解法的过程以 2 为第一个数的最长序列为 2,3,4,5;以 3 为第一个数的最长序列为 3,4,5;以 4 为第一个

2022-03-27 19:54:29 4127

原创 关于回溯法的理解与总结

回溯法(探索与回溯法)是一种选优搜索法,又称为试探法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法,而满足回溯条件的某个状态的点称为“回溯点”。

2022-03-19 16:00:39 1203

原创 Redis数据结构总结二

Redis数据结构总结二二.字典1.字典简介2.数据结构3.哈希表的扩展或收缩前言:引用与参考来源 《Redis设计与实现》。二.字典1.字典简介Redis 的数据库就是使用字典来作为底层实现的,对数据库的增 删 改 查操作也是构建在对字典的操作之上的。字典还是哈希键的底层实现之一,当一个哈希键包含的键值对比较多,又或者键值对中的元素都是比较长的字符串时,Redis 就会使用字典作为哈希键的底层实现。字典是 Redis 的底层实现。也就是说 Redis 的所有操作都是构建在对字典的操作之上的

2022-03-10 21:36:51 886

原创 C/C++注意事项一

C++注意事项1.无参构造函数若要调用自己的无参构造函数,则构造时不能带括号。#include <stdio.h>#include <vector>#include <list>#include <iostream>#include <Windows.h>using namespace std;class DEMO {public: DEMO() { cout << "调用无参构造函数" <<

2022-03-03 19:34:43 551

原创 淘宝分布式文件系统核心储存引擎学习总结

淘宝分布式文件核心储存引擎架构总结——TFS系统1.内存映射类1.主要功能2.主要方法2.文件操作类1.主要功能2.基本方法1.内存映射类内存映射类——MMapFile1.主要功能实现内存映射的相关操作,封装内存映射相关函数。2.主要方法执行内存映射——map_file()重新执行内存映射(常用来扩容)——remap_file()得到内存映射首地址——get_data()得到内存映射大小——get_size()解除内存映射——munmap_file()将内存映射的内容同步到文件——e

2022-03-03 10:03:46 4602 7

原创 C语言基础向——二级总结

C语言基础向——二级总结1.前言2.例题1.累加累乘问题2.去星号问题3.字符后移问题4.字符串转整数1.前言最近考了计算机二级C,我在做完大约100道操作题后对C语言有了新的收获,小部分的题目还是有做的价值。二级C操作题的难度大约是力扣简单题的难度(大部分题目甚至更简单),但对C语言初学者来说掌握这些还是有很大意义的。2.例题1.累加累乘问题初学循化的人做这类题目可能还是有一定难度,不过这也是一种很好的锻炼。这题关键就在于又要累加又要累乘,如何使用一个循化就完成这两个要求。读者不

2022-03-01 18:31:29 306

原创 Redis数据结构总结一

Redis数据结构总结一1.前言2.动态字符串1.数据结构2.较之传统字符串的优势1.常数复杂度获取字符串长度2.避免缓冲区溢出3.减少因修改字符串时造成的内存重分配3.二进制安全3.链表1.数据结构1.链表节点2.list1.前言这篇文章可以算做是我一些书做的读书笔记吧。主要是对从书中学到的东西做一个总结,方便以后复习。2.动态字符串当Redis需要一个简单的字符串,而且这个字符串可能需要频繁的修改时。Redis会使用动态字符串储存字符串,简称SDS。1.数据结构struct sdshdr{

2022-02-22 21:45:32 695

原创 常见算法思路及技巧总结一

常见算法与技巧1.前言2.整数运算技巧一:类似于快速幂的加法1.前言这篇算是我自己对《剑指offter》的总结吧,外加一些其他的算法。2.整数运算技巧一:类似于快速幂的加法问题:计算两数相除的商,但不能使用乘法与除法或者取余。可以使用类似于快速幂的加法技巧。举个例子16除以2,暴力思路是用2累加并计算累加次数,直至累加和大于或等于16 。使用类似于快速幂的加法则为:2加2等于4,此时累加次数为2 。再使用4进行加法计算4加4等于8,注意此时累加次数为2加2等于4,最后8加8为16,累加次数为

2022-02-08 19:51:29 2716

原创 共享顺风车项目总结一——第一次迭代项目架构

共享风车项目总结一——类架构1.事件类Event:所有事件类的基类2.短信验证码类:MobileCodeEvent类,作为验证码事件,是短信具体功能的基类。

2022-01-18 16:23:07 2988 5

原创 递归模型总结一——链表问题

递归模型总结一——链表问题1.前言2.反转链表1.问题描述2.代码解析3.递归模型解析2.回文链表1.问题描述2.代码解析3.递归模型解析1.前言对初学递归的人来说,递归无疑是很不好理解的,本系列旨在对常见算法中使用的递归做一定程度的解析,学习这些算法的同时,总结出其递归模型。以便于加深对递归的理解,同时,当我们掌握了多种递归模型。那无论何时需要使用递归解决问题,我们都能从已有的递归模型中得到一些启发。或者相似的场景使用的模型是一样时(类似于数学或物理中的建模,通过对具有某类特征的事物的分析

2021-12-28 09:29:17 194

原创 递归模型总结三——快速排序

递归模型总结三——快速排序1.前言2.快速排序1.排序流程2.代码实现3.递归模型总结1.前言对初学递归的人来说,递归无疑是很不好理解的,本系列旨在对常见算法中使用的递归做一定程度的解析,学习这些算法的同时,总结出其递归模型。以便于加深对递归的理解,同时,当我们掌握了多种递归模型。那无论何时需要使用递归解决问题,我们都能从已有的递归模型中得到一些启发。或者相似的场景使用的模型是一样时(类似于数学或物理中的建模,通过对具有某类特征的事物的分析,总结出其一般规律,以便应用到具有相同特征的情况中去

2021-12-28 09:28:33 347

原创 C++子类对象的内存分布

C++子类对象的内存分布

2021-12-27 19:10:55 601

原创 C++拷贝构造函数的调用时机

C++拷贝构造函数的调用时机1.显示的调用2.类作为函数形参时调用3.返回值为类类型时4.数组初始化时1.显示的调用2.类作为函数形参时调用3.返回值为类类型时4.数组初始化时

2021-12-18 20:39:21 762

原创 数据结构总结一——堆

数据结构总结——堆1.堆的基本概念2.代码讲解1.堆的构建1.堆的基本概念摘自百度百科:堆(Heap)是计算机科学中一类特殊的数据结构的统称。堆通常是一个可以被看做一棵完全二叉树的数组对象。1.堆中某个结点的值总是不大于(最大堆)或不小于(最小堆)其父结点的值;2.堆总是一棵完全二叉树。从结构上看,堆是一棵完全二叉树。但它实际上是以完全二叉树的数组映射形式储存在数组中的。树中每个结点的值总是不大于(最大堆)或不小于(最小堆)其父结点的值。所以堆顶元素总是所有元素中的最大值或最小值

2021-12-09 21:33:29 1282

原创 模板类实现vector容器

模板类实现vector容器1.Vector.h2.Vector.cpp3.main.cpp1.Vector.h#pragma once#include <iostream>#include <Windows.h>#include <stdio.h>#include <stdlib.h>using namespace std;template <typename T>class Vector {public:

2021-12-06 10:10:35 1108

原创 C++模板函数

模板函数与类模板1.模板函数1.模板函数的声明与定义2.模板函数的调用显式类型调用自动推导3.模板函数的底层实现1.模板函数1.模板函数的声明与定义C++提供了模板(template)编程的概念。所谓模板,实际上是建立一个通用函数或类,其类内部的类型和函数的形参类型不具体指定,用一个虚拟的类型来代表。这种通用的方式称为模板。模板是泛型编程的基础,泛型编程即以一种独立于任何特定类型的方式编写代码。简单来说,就是我们提供一个抽象的函数,并不具体指定其中数据的类型,而是某个虚拟类型代替。只提供基本的功

2021-12-06 10:10:14 21471 3

原创 C++类模板

C++类模板1.上期内容2.类模板1.在类内部定义与声明2.在类外部定义成员函数3.类模板的继承1.上期内容2.类模板类模板是为了减少重复工作量而出现的一种进制,当一个类的功能类似只是类型相同时,一个通用的类模板可以根据使用者的需要而生成具体类型的类,从而减少功能重复的代码。C++在STL中大量使用了类模板,很多迭代器与算法的实现都离不开泛型编程与类模板的支持。所以掌握类模板的基本使用是很重要的。1.在类内部定义与声明#include <iostream>#include <

2021-12-06 10:09:50 5318

原创 动态规划总结篇一

动态规划总结篇一1.什么是动态规划2.动态规划使用情景一——求极值问题1.思路分析2.代码实现1.什么是动态规划摘自leetcode动态规划(英语:Dynamic programming,简称 DP)是一种在数学、管理科学、计算机科学、经济学和生物信息学中使用的,通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法。动态规划常常适用于有重叠子问题和最优子结构性质的问题,并且记录所有子问题的结果,因此动态规划方法所耗时间往往远少于朴素解法。动态规划有自底向上和自顶向下两种解决问题的方式。自顶向下

2021-12-03 21:36:39 1170

原创 C++智能指针总结三——shared_ptr与weak_ptr

C++智能指针总结三——shared_ptr 1.往期回顾2.为什么要使用shared_ptr3.shared_ptr的使用1.shared_ptr原理2.shared_ptr的使用1.往期回顾2.为什么要使用shared_ptr这是因为,无论是auto_ptr还是unique_ptr都是排它型的,即只允许一个智能指针对象引用控制一块动态内存。那如果我们要使用多个指向同一块动态内存的指针时,显然auto_ptr与unique_ptr都不能做到。因此,为了实现多个智能指针引用同一块动态内存的

2021-12-01 21:01:50 2191

原创 C++智能指针总结二——unique_ptr

C++智能指针总结二1.往期回顾2.auto_ptr的缺陷1.缺陷一2.缺陷二3.unique_ptr1."更安全的赋值"2.支持创建动态数组3.补充API1.往期回顾2.auto_ptr的缺陷1.缺陷一先来看下面的代码:#include <Windows.h>#include <iostream>#include <string>#include <vector>#include <memory>using na

2021-12-01 21:01:30 1573

原创 C++智能指针总结一——auto_ptr

C++智能指针总结1.前言2.为什么要使用智能指针2.auto_ptr1.API用法2.使用建议1.前言本文旨在旋风式的介绍一下智能指针的基本用法,然后一定程度上的解析一下它们的底层原理。2.为什么要使用智能指针其实智能指针就是为了解决动态分配的内存得不到及时的释放的问题而出现的一种机制。我们知道在C与C++语言中,是可以使用指针来操纵内存的。使用malloc或new可以在堆上分配一块内存。但使用malloc或new分配的内存是不会被操作系统主动回收的,需要程序员自己手动释放。如果程序员分配了太多

2021-12-01 20:59:35 1223

原创 递归模型总结二——归并排序

递归模型总结1.归并排序1.归并排序摘自百度百科归并排序(Merge Sort)是建立在归并操作上的一种有效,稳定的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。举个例子便于理解归并排序:有如下数据需要排序:{1,4,2,65,76,15,9,0,54,32};我们首先使用递归深度的将上述数据分割成不可分割

2021-11-21 20:49:20 1151

原创 对于Rabin-Karp算法(旋转哈希)的一些理解

1.传统方式下的一般思路常用于滑动窗口下字符串的匹配问题。对于一个长度为m的字符串,若要找到定长(固定长度)为n的一个子字符串,最坏情况下则要遍历m-n次,每次需比较n个字符。所以时间复杂度为O((m-n)*n),当n相对于m来说较小时。就可以把(m-n)看成m。所以时间复杂度即为O(mn)。如下图:若要在长度为22的字符串中找到短字符串ae,则要构建一个长度为2的滑动窗口,比较滑动窗口中的字符串是否为要找到的字符串,每次需比较两个字符串。若不是,则滑动窗口右移一位,重复比较的过程。直至找到该子字符

2021-10-25 21:18:24 715

原创 Socket-网络编程-C语言版回声服务器

Socket-网络编程1.回声服务器代码实现1.server.c2.client.c2.原理讲解1.回声服务器代码实现1.server.c#include <stdio.h>#include <unistd.h>#include <sys/types.h>#include <sys/socket.h>#include <string.h>#include <ctype.h>#include <arpa

2021-08-30 22:28:14 1153

原创 IO多路复用

1.同步IO和异步IO1.同步IO同步IO指的是用户进程触发I/O操作并等待或者轮询的去查看I/O操作是否就绪。同步IO的执行者是IO操作的发起者。同步IO需要发起者进行内核态到用户态的数据拷贝过程,所以这里必须阻塞。2.异步IO异步IO是指用户进程触发I/O操作以后就立即返回,继续开始做自己的事情,而当I/O操作已经完成的时候会得到I/O完成的通知。异步IO的执行者不是IO操作的发起者。这就是同步IO与异步IO的根本区别。异步IO的执行者是内核线程,内核线程将数据从内核态拷贝到用户态,所以这里没有

2021-08-27 16:03:35 505

原创 libevent库函数的简单介绍

libevent库函数的简单介绍1.前言2.什么是libevent1.简介2.接口详解3.响应事件4.利用缓存事件5.libevent 中文文档1.前言2.什么是libevent1.简介摘自搜狗百科Libevent 是一个用C语言编写的、轻量级的开源高性能事件通知库,主要有以下几个亮点:事件驱动( event-driven),高性能;轻量级,专注于网络,不如 ACE 那么臃肿庞大;源代码相当精炼、易读;跨平台,支持 Windows、 Linux、 *BSD 和 Mac Os;支持多种 I/O 多

2021-08-03 20:20:57 959

淘宝分布式文件储存引擎——TFS

淘宝分布式文件储存引擎——TFS

2022-03-02

共享顺风车项目源代码压缩文件

关于高并发的共享顺风车项目源代码

2022-01-20

libevent 文档.zip

libevent中文文档

2021-08-03

threadpool.zip

nginx线程池

2021-07-19

mem_pool.zip

nginx内存池源代码

2021-06-10

空空如也

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

TA关注的人

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