自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 C++右值引用

右值引用应该是C++11引入的一个非常重要的技术,因为它是移动语义(Move semantics)与完美转发(Perfect forwarding)的基石:移动语义:将内存的所有权从一个对象转移到另外一个对象,高效的移动用来替换效率低下的复制,对象的移动语义需要实现移动构造函数(move constructor)和移动赋值运算符(move assignment operator)。 完美转发:定义一个函数模板,该函数模板可以接收任意类型参数,然后将参数转发给其它目标函数,且保证目标函数接受的参数其类型

2021-09-21 21:31:01 188

原创 C++内联inline

内联函数优缺点1优点它通过避免函数调用所带来的开销来提高你程序的运行速度。 当函数调用发生时,它节省了变量弹栈、压栈的开销。 它避免了一个函数执行完返回原现场的开销。 通过将函数声明为内联,你可以把函数定义放在头文件内。缺点:因为代码的扩展,内联函数增大了可执行程序的体积。 C++内联函数的展开是中编译阶段,这就意味着如果你的内联函数发生了改动,那么就需要重新编译代码。 当你把内联函数放在头文件中时,它将会使你的头文件信息变多,不过头文件的使用者不用在意这些。 有时候内联...

2021-09-20 18:25:48 207

转载 http 与 rpc 区别

一.远程调用方式无论是微服务还是分布式服务(都是SOA,都是面向服务编程),都面临着服务间的远程调用。那么服务间的远程调用方式有哪些呢?常见的远程调用方式有以下几种:RPC:Remote Produce Call远程过程调用,类似的还有RMI(Remote Methods Invoke 远程方法调用,是JAVA中的概念,是JAVA十三大技术之一)。自定义数据格式,基于原生TCP通信,速度快,效率高。早期的webservice,现在热门的dubbo,都是RPC的典型 RPC的框架:webserv

2021-09-17 10:21:58 360

原创 Redis单线程为什么快

Redis的性能非常之高,每秒可以承受10W+的QPS,它如此优秀的性能主要取决于以下几个方面:纯内存操作 使用IO多路复用技术 非CPU密集型任务 单线程的优势纯内存操作Redis是一个内存数据库,它的数据都存储在内存中,这意味着我们读写数据都是在内存中完成,这个速度是非常快的。Redis是一个KV内存数据库,它内部构建了一个哈希表,根据指定的KEY访问时,只需要O(1)的时间复杂度就可以找到对应的数据。同时,Redis提供了丰富的数据类型,并使用高效的操作方式进行操作,这些操.

2021-09-16 10:53:04 121

原创 进程切换相关要点

进程切换与线程切换的区别进程切换分两步:1.切换页目录以使用新的地址空间2.切换内核栈和硬件上下文对于linux来说,线程和进程的最大区别就在于地址空间,对于线程切换,第1步是不需要做的,第2是进程和线程切换都要做的。最主要区别:进程切换涉及到虚拟地址空间的切换而线程切换则不会。因为每个进程都有自己的虚拟地址空间,而线程是共享所在进程的虚拟地址空间的,因此同一个进程中的线程进行线程切换时不涉及虚拟地址空间的转换。切换的性能消耗:线程上下文切换和进程上下问切换一个最主要的区别是线程

2021-09-11 10:27:07 460

原创 Nginx进程、网络模型

异步非阻塞,IO多路复用worker处理到一个socket请求阻塞的时候,注册一个回调事件,去处理别的请求,等下游返回后触发回调事件,通知worker继续处理这个事件。

2021-09-02 19:26:41 76

原创 微服务的通信方式——网关 & RPC & Sidecar

异步非阻塞,IO多路复用worker处理到一个socket请求阻塞的时候,注册一个回调事件,去处理别的请求,等下游返回后触发回调事件,通知worker继续处理这个事件。可以简单理解为client 调用 server端函数bthread是一个线程库N指的是系统级的线程,也叫bthread的一个worker线程M是指用户态的一个线程bthread中有两种调度策略,第一种是worker内部的调度,比如第一个圈中两个线程不...

2021-09-02 18:44:50 866 1

原创 Mysql 事务相关知识点

一、事务的特性  1、原子性(Atomicity):事务开始后所有操作,要么全部做完,要么全部不做,不可能停滞在中间环节。事务执行过程中出错,会回滚到事务开始前的状态,所有的操作就像没有发生一样。也就是说事务是一个不可分割的整体,就像化学中学过的原子,是物质构成的基本单位。  2、一致性(Consistency):事务开始前和结束后,数据库的完整性约束没有被破坏 。比如A向B转账,不可能A扣了钱,B却没收到。   3、隔离性(Isolation):同一时间,只允许一个事务请求同一数据,不同的事.

2021-08-22 20:46:49 170

原创 单词拆分。

ACM模式的输入输出是真的搞人C++代码参考:#include<iostream>#include<vector>#include <string>#include<unordered_set>using namespace std;//单词拆分验证bool wordBreak(string s, vector<string>& wordDict) { auto wordDictSet = ...

2021-08-15 18:32:34 145

原创 验证IP地址是否正确

class Solution {public: /** * 验证IP地址 * @param IP string字符串 一个IP地址字符串 * @return string字符串 */ string solve(string IP) { istringstream is(IP); string tmp = ""; int cnt = 0; if (IP.find(':')==IP.npo.

2021-08-10 00:32:32 282

原创 Redis和Memcached

区别:Redis和Memcache都是将数据存放在内存中,都是内存数据库。不过memcache还可用于缓存其他东西,例如图片、视频等等; 数据类型——Memcached仅支持简单的key-value类型的数据,Redis提供list,set,hash,string,zset数据结构的存储; 内存管理——Memcached默认使用Slab Allocation机制管理内存,其主要思想是按照预先规定的大小,将分配的内存分割成特定长度的块以存储相应长度的key-value数据记录,以完全解决内存碎片问题;

2021-08-02 15:26:59 84

原创 二叉树遍历(C++)

#include<iostream>#include<stack>//二叉树节点struct Node { int value; Node* left; Node* right; Node(int value): value(value), left(nullptr), right(nullptr) {}};//递归方式实现先序遍历void preOrderRecur(Node* head) { if (head .

2021-08-01 14:23:21 104

原创 常见位运算表达式

1. x &= x-1含义: 丢弃 x 二进制最右边的1用途:统计二进制中1的个数int count = 0;while(x){ x &= x-1 ; count++;}2. n & 1用途:判断一个整数是奇数还是偶数n & 1 ==0 n为偶数n & 1 ==1 n为奇数3.a ^= b; b ^= a; a ^= b;用途:交换两数字4.n & (n...

2021-07-31 13:43:34 330

原创 高性能服务器程序框架(二)

四、两种高效的事件处理模式服务器程序通常需要处理三类事件:I/O事件、信号、定时事件。

2021-06-16 17:12:59 186

原创 高性能服务器程序框架(一)

我们按照服务器程序的一般原理,将服务器解构为如下三个主要模块:口I/O处理单元。本章将介绍I/O处理单元的四种I/O模型和两种高效事件处理模式。口逻辑单元。本章将介绍逻辑单元的两种高效并发模式,以及高效的逻辑处理方式一有限状态机。口存储单元。本书不讨论存储单元,因为它只是服务器程序的可选模块,而且其内容与网络编程本身无关。最后,本章还介绍了提高服务器性能的其他建议。...

2021-06-15 17:37:38 438 1

原创 PDD笔试题——数字组合、字符变换

题目描述:

2021-06-14 22:09:17 431

原创 守护进程简介

守护进程的g守护进程也叫精灵进程,一般在后台运行,不与任何控制终端相关联。守护进程通常在 系统启动时就运行,它们以 root 用户运行或者其他特殊的用户(例如 apache),并处理一些 系统级的任务。习惯上守护进程的名字通常以 d 结尾(如 httpd, sshd),但这不是强制要求的。 简单讲有两个特点: ◼ 后台运行,不与终端关联 ◼ 运行周期长...

2021-06-14 01:30:53 5172

原创 Linux三剑客之grep、sed、awk 个人简介

剑客一:grep擅长查找、匹配文本。剑客二:sed擅长编辑匹配到的文本,取行、替换。剑客三:awk擅长处理格式化文本、取列。awkawk是linux中的一个报告生成器,它拥有强大的文本格式化的能力,或者说是一种专门处理字符串的语言,它有自己的编码格式。1. 基本语法:[-F 域分隔符] 是可选的,如果分隔符是空格可以不用写,awk默认的分隔符就是空格。 Commands 指定操作命令,一般使用print 进行输出打印。 Input-file 是要...

2021-06-10 17:08:52 149

原创 网络攻击技术

一、网络攻击概述1. 网络攻击的目标:网络攻击的目标主要有系统和数据两类,其所对应的安全性也涉及系统安全和数据安全两个方面。系统型攻击的特点:攻击发生在网络层,破坏系统的可用性,使系统不能正常工作。可能留下明显的攻击痕迹,用户会发现系统不能工作。数据型攻击的特点:发生在网络的应用层,面向信息,主要目的是篡改和偷取信息,不会留下明显的痕迹。...

2021-06-05 16:32:01 9663 1

原创 信息隐藏技术

置换密码( permutation cipher) 加密过程中明文的字母保持相同,但顺序被打乱了,又被称为换位密码。在这里介绍一种较常见的置换处理方法:将明文按行写在一-张格纸上,然后再按列的方式读出结果,即为密文;为了增加变换的复杂性,可以设定读出列的不同次序(该次序即为算法的密钥)。...

2021-06-05 10:28:50 10203 2

原创 计算机病毒与防范技术

计算机病毒概述计算机病毒实际上是一段程序代码。类似自然界中的生物病毒,计算机病毒具有强大的复制能力,能够迅速地蔓延到网络,上的每- -台计算机。病毒能够将自己隐藏在各种类型的文件上。当用户复制感染了病毒的文件后,病毒就伴随着文件的副本蔓延开来。此外,某些计算机病毒能够利用被污染的程序传送病毒的载体。当用户发现病毒载体似乎仅仅表现在文字或图像.上时,它们可能已经损坏了文件、再格式化了用户的硬盘驱动器或引发了其他类型的灾害。有些计算机病毒危害性较小,它们通过占据内存空间降低了用户的计算机性能。

2021-06-04 19:04:12 1369 1

原创 信息加密技术——非对称密码体制

1976年,Diffie与Hellman在IEEE期刊上提出了划时代的公开密钥密码系统的概念,这个观念为密码学的研究开辟了一个新的方向,有效地解决了秘密密钥密码系统通信双方密钥共享困难的缺点,并引进了创新的数字签名的观念。非对称密码系统( asymmetricencryption)可为加解密或数字签名系统。由于加密或签名验证密钥是公开的,故称为公钥(publickey),而解密或签名产生密钥是秘密的,故称为私钥(privatekey)。因为公钥与私钥不同,且公钥与私钥必须存在成对(key pair

2021-06-04 09:46:50 2391

原创 信息加密技术——对称密码体制

对称密码体制(symmetricencryption)也称为秘密密钥密码体制、单密钥密码体制或常规密码体制,其模型如图3-4所示。如果一个密码算法的加密密钥和解密密钥相同,或者由其中一个很容易推导出另一个,该算法就是对称密码算法,满足关系M= Dk (C)=Dk (Ek(M))。...

2021-06-04 09:00:30 8843 2

原创 力扣题:一手顺子

题目描述:

2021-06-02 20:37:00 106

原创 信息加密技术——古典密码体制

信息保密技术是利用数学或物理手段,对信息的传输和存储进行保护以防止泄露的技术,主要包括信息加密技术和信息隐藏技术。密码学的发展历程:手工加密阶段机械加密阶段计算机加密阶段密码学中的基本术语:明文(plaintext/message):指待加密的信息,用P或M表示,可以是文本文件、图形、数字化存储的语音流或数字化视频图像的比特流等。密文(cipertext):指明文经过加密处理后的形式,用C表示。...

2021-06-02 18:39:12 5352

原创 物理安全体系

物理安全也称为实体安全,是指为了保证计算机系统安全、可靠地运行,确保系统在对信息进行采集、传输.存储、处理、显示、分发和利用的过程中,不会受到人为或自然因素的危害而使信息丢失、泄露和破坏,对计算机系统设备、通信与网络设备、存储媒体设备和人员所采取的安全技术措施。物理安全主要考虑的问题是环境、场地和设备的安全,以及物理访问控制和应急处置计划等,它在整个计算机网络信息系统安全中占有重要地位,主要包括环境安全、设备安全和媒体安全3个方面。...

2021-06-02 14:23:39 3391

原创 力扣题:警告一小时内使用员工卡大于等于三次的人

题目描述代码示例class Solution {public:vector<string> alertNames(vector<string>& keyName, vector<string>& keyTime){ vector<string> res; if ((keyName.size() != keyTime.size()) || keyName.size() < 3) return res;//当打卡人和时间数

2021-06-01 10:33:21 80

原创 信息安全概述

一 、信息安全基本概念1. 信息安全的含义影响信息的正常存储、传输和使用,以及不良信息的散布问题属于信息安全问题。ISO提出信息安全的定义是:为数据处理系统建立和采取的技术及管理保护,保护计算机硬件、软件、数据不因偶然及恶意的原因而遭到破坏、更改和泄漏。2. 信息安全问题分为三个层次(1)信息自身安全性;(2)信息系统安全性;(3)某些信息的传播对社会造成的不良影响3. 信息安全的作用和地位(1)关乎经济发展(2)关乎社会稳定(3)关乎国家稳定(4)关乎公众权益4. 商业组

2021-05-30 11:33:29 9875 1

原创 力扣题:电话号码的字母组合

题目描述解题思路代码示例class Solution {public: vector<string> letterCombinations(string digits) { vector<string> combinations;//用来存放组合结果的解集 if (digits.empty()) //如果输入为空,直接返回 { return combinations;

2021-05-25 17:19:11 113

原创 C++中 new 的三种调动规则

1 plain newnew表达式,最常用的方式。先申请内存空间,再构造对象。string* ps = new string("abc");2 nothrow newnew操作符,类似于C语言中的malloc,只是负责申请内存void* buffer = operator new(sizeof(string));3 placement new定位new,在一块已经分配成功的内存上重新构造对象void* buffer = operator new(sizeof(string)

2021-05-15 14:54:20 134

原创 Mysql索引基础及原理

一、索引概述1. 简介索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。举例说明索引:如果把数据库中的某一张看成一本书,那么索引就像是书的目录,可以通过目录快速查找书中指定内容的位置,对于数据库表来说,可以通过索引快速查找表中的数据。2.索引的原理索引一般以文件形式存在磁盘中(也可以存于内存中),存储的索引的原理大致概括为以空间换时间,数据库在未添加索引的时候进行查询默认的是进行全量搜索,也就是进行全局扫描,有多少条数据就要进行多少次查询,然后

2021-05-05 16:04:03 83

原创 计算机系统漫游

计算机系统是由硬件和系统软件组成的,它们共同协作以运行应用程序。计算机内部的信息被表示为一组组的位,它们依据上下文有不同的解释方式。程序被其他程序翻译成不同的形式,开始时是ASCII文本文件,然后被编译器和链接器翻译成二进制可执行文件。处理器读取并解释存放在主存里的二进制指令。因为计算机花费了大量的时间在内存、I/O设备和CPU寄存器之间复制数据,所以将系统中的存储设备划分成层次结构。CPU 寄存器在顶部接着是多层的硬件高速缓存存储器、DRAM主存和磁盘存储器。在层次模型中,位于更高层.

2021-05-05 00:40:10 97 1

原创 动态规划

动态规划问题动态规划法的基本思想:动态规划算法与分治法类似,其基本思想也是将待求解问题分解成若干个子问题, 先求解子问题,然后从这些子问题的解得到原问题的解。与分治法不同的是,适合于用动态规划法求解的问题,经分解得到的子问题往往不是互相独立的。若用分治法解这类问题,则分解得到的子问题数目太多,以至于最后解决原问题需要耗费指数时间。然而,不同子问题的数目常常只有多项式量级。在用分治法求解时,有些子问题被重复计算了许多次。如果能够保存已解决的子问题的答案,而在需要时再找出已求得的答案,就可以避免大量重

2021-04-27 22:55:36 128

转载 深入理解 Mysql 索引底层原理(必读)

一步一步推导出 Mysql 索引的底层数据结构。Mysql 作为互联网中非常热门的数据库,其底层的存储引擎和数据检索引擎的设计非常重要,尤其是 Mysql 数据的存储形式以及索引的设计,决定了 Mysql 整体的数据检索性能。我们知道,索引的作用是做数据的快速检索,而快速检索的实现的本质是数据结构。通过不同数据结构的选择,实现各种数据快速检索。在数据库中,高效的查找算法是非常重要的,因为数据库中存储了大量数据,一个高效的索引能节省巨大的时间。比如下面这个数据表,如果 Mysql 没有实现索引算法,那.

2021-04-24 23:12:34 137

原创 红黑(RB)树

RB 树的定义RB树概述:红黑树(Red Black Tree)是一种种自平衡二叉查找树,是在计算机科学中用到的一种数据结构,典型的用途是实现关联数组。红黑树和AVL树类似,都是在进行插入和删除操作时通过特定操作保持二叉查找树的平衡,从而获得较高的查找性能。它虽然是复杂的,但它的最坏情况运行时间也是非常良好的,并且在实践中是高效的:它可以在 O(log2 n)时间内做查找,插入和删除,这里的n是树中元素的数目。RB树性质红黑树是每个节点都带有颜色属性的二叉查找树,颜色是红色或黑色。在二叉

2021-04-23 17:27:25 488

原创 C语言extern关键字

extern的作用一个c文件需要调用另一个c文件里的变量或者函数, 可以在变量或者函数前面加“extern”而不能从.h文件中调用变量extern和include的区别include相当于把include .h文件直接带入到本源文件里,比如在b.c文件里include “a.h”,就相当于把a.h文件里所有定义的变量和函数全部拷贝了一份放入了b.c里,一个项目里,一个.h文件可能会被多个.c源文件包含,这样编译的时候就会报重复定义的错误。而且尽量不要在.h里定义变量,这是一个不好的习惯。头文

2021-04-21 22:14:27 125

原创 求两个字符串的最长公共子序列(动态规划)

#include<iostream>#include<vector>#include<deque>#include<limits.h>#include<string>using namespace std;int LCSLength(char X[], char Y[], int i, int j, vector<vector<int> > &c,vector<vector<int...

2021-04-20 22:34:11 321

原创 归并排序

递归实现void Copy(int* dist, int* src, int left, int right){ for (int i = left; i <= right; ++i) { dist[i] = src[i]; }}void Merge(int *dist,int *src, int left, int m, int right){ int i = left, j = m + 1; int k = left; while (i <= m &&amp

2021-04-20 20:15:16 55

转载 平衡(AVL)二叉树

AVL树 解决二叉查找(BST)树所有节点都倾向一边,退化成链表的缺点具有二叉查找树的全部特性。每个节点的左子树和右子树的高度差至多等于1定义节点#include<iostream>#include<vector>#include<stack>using namespace std;typedef int KeyType;typedef struct AVLNode{ AVLNode* leftchild; AVLNode* parent;.

2021-04-20 19:46:53 78

原创 求一维点集最接近点对算法

#include<iostream>#include<vector>#include<deque>#include<limits.h>using namespace std;#define INT_MAX 2147483647int Parition(vector<int>& br, int left, int right)//划分区间{ int i = left, j = right; int tmp = br..

2021-04-19 21:15:57 206

空空如也

空空如也

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

TA关注的人

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