- 博客(174)
- 收藏
- 关注
原创 RADIUS协议基础原理
Radius概述Radius架构(c/s模式)Radius特点Radius报文Radius认证报文Radius计费报文Radius授权报文Radius工作原理RADIUS(Remote Authentication Dial-In User Server,远程认证拨号用户服务)是一种分布式的、C/S架构的信息交互协议,能包含网络不受未授权访问的干扰,常应用在既要求较高安全性、又允许远程用户访问的各种网络环境中。
2023-09-15 11:56:00
861
原创 configure: error: Building GCC requires GMP 4.2+, MPFR 2.4.0+ and MPC 0.8.0+. 解决
在安装高版本gcc时遇到的问题
2023-03-14 14:14:35
687
原创 Bug解决:出现C++:internal compiler error: killed(program cc1plus)
bug:internal complier error:killed(program cc1plus)
2022-11-17 16:16:42
972
转载 sql注入原理以及解决方案
sql注入1.基本定义2.注入原理2.1恶意拼接查询2.2利用注释执行非法命令2.3传入非法参数2.4 添加额外条件3.避免sql注入3.1过滤输入内容,校验字符串3.2参数化查询3.3开发过程中的点1.基本定义sql injection 是发生在web程序中数据库层的安全漏洞主要原因是程序对用户输入数据的合法性没有进行一个判断和处理,导致攻击者可以在web应用程序中事先定义好的 sql 语句中添加额外的sql语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,
2022-01-26 14:47:53
1477
1
原创 test for thread local storage
#include <iostream>#include <pthread.h>#include <unistd.h>using namespace std;//__thread int iVar = 100;int iVar = 100;void* thread1(void *arg){ iVar += 200; cout << "thread1 val : " << iVar << endl;}v
2022-01-20 16:25:00
264
原创 高精度加减乘除
高精度加法#include <iostream>#include <vector>using namespace std;vector<int> add(vector<int> &A, vector<int> &B){ if (A.size() < B.size()) return add(B, A); vector<int> C; int t = 0; for (i
2022-01-17 16:10:06
151
原创 最长重复子数组
class Solution {public: int findLength(vector<int>& A, vector<int>& B) { vector<vector<int>> dp (A.size() + 1, vector<int>(B.size() + 1, 0)); int result = 0; for (int i = 1; i <= A.siz..
2022-01-17 16:02:19
476
原创 最长公共子序列
class Solution {public: int longestCommonSubsequence(string text1, string text2) { vector<vector<int>> dp(text1.size()+1, vector<int>(text2.size()+1, 0)); for(int i = 1; i <= text1.size(); i++) {...
2022-01-17 15:42:58
106
原创 返回和为目标值的二叉树的路径
/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { }};*/class Solution {public: vector<vector<int> > result; void compare(vector<int>& p.
2022-01-17 14:15:31
196
原创 判断是否存在二叉树中和为某一值的路径
/** * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * }; */class Solution {public: /** * * @param root TreeNode类 * @param sum int整型 * @return bool布尔型 */ bool hasPathSum(TreeNod.
2022-01-17 14:11:16
105
原创 按之字形打印二叉树
/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { }};*/class Solution {public: vector<vector<int> > Print(TreeNode* root) .
2022-01-17 14:09:17
96
原创 二叉树前中后自测
遍历//递归遍历//先序void recursion_dlr(binarynode* root){ if (root==NULL) { return; } //遍历根节点 cout<<root->ch<<"\t"; //遍历左子树 recursion_dlr(root->lchild); //遍历右子树 recursion_dlr(root->rchild);}//中序void recursion_ldr(binarynode*
2022-01-17 14:06:29
102
原创 一个程序怎么跑起来的
#include <stdio.h>int main(){ printf("hello, world\n"); return 0;}在 Unix 系统上,由编译器把源文件转换为目标文件。gcc -o hello hello.c
2022-01-16 22:12:53
297
原创 smart-pointer
原理智能指针是一个类,用来存储指向动态分配对象的指针,负责自动释放动态分配的对象,防止堆内存泄漏。动态分配的资源,交给一个类对象去管理,当类对象声明周期结束时,自动调用析构函数释放资源常用的智能指针(1) shared_ptr实现原理:采用引用计数器的方法,允许多个智能指针指向同一个对象,每当多一个指针指向该对象时,指向该对象的所有智能指针内部的引用计数加1,每当减少一个智能指针指向对象时,引用计数会减1,当计数为0的时候会自动的释放动态分配的资源。智能指针将一个计数器与类指向的对象相关联,引用计
2021-09-25 14:06:38
142
原创 疑难复盘总结(index-->B+)
到底为啥子B+树文件与数据库都是需要较大的存储,也就是说,它们都不可能全部存储在内存中,故需要存储到磁盘上。而所谓索引,则为了数据的快速定位与查找,那么索引的结构组织要尽量减少查找过程中磁盘I/O的存取次数,因此B+树相比B树更为合适。数据库系统巧妙利用了局部性原理与磁盘预读原理,将一个节点的大小设为等于一个页,这样每个节点只需要一次I/O就可以完全载入,而红黑树这种结构,高度明显要深的多,并且由于逻辑上很近的节点(父子)物理上可能很远,无法利用局部性。最重要的是,B+树还有一个最大的好处:方便扫库.
2021-09-25 13:20:00
127
原创 隔离级别小总结
未提交读,事务中发生了修改,即使没有提交,其他事务也是可见的,比如对于一个数A原来50修改为100,但是我还没有提交修改,另一个事务看到这个修改,而这个时候原事务发生了回滚,这时候A还是50,但是另一个事务看到的A是100.可能会导致脏读、幻读或不可重复读提交读,对于一个事务从开始直到提交之前,所做的任何修改是其他事务不可见的,举例就是对于一个数A原来是50,然后提交修改成100,这个时候另一个事务在A提交修改之前,读取的A是50,刚读取完,A就被修改成100,这个时候另一个事务再进行读取发现A就突然变.
2021-09-25 13:17:47
126
原创 指针混淆点!!!
int *p[10]int (*p)[10]int *p(int)int (*p)(int)int *p[10]表示指针数组,强调数组概念,是一个数组变量,数组大小为10,数组内每个元素都是指向int类型的指针变量int (*p)[10]表示数组指针,强调是指针,只有一个变量,是指针类型,不过指向的是一个int类型的数组,这个数组大小是10int *p(int)是函数声明,函数名是p,参数是int类型的,返回值是int *类型的int (*p)(int)是函数指针,强调是指针,该指针指向
2021-09-25 12:04:41
108
原创 MySql执行一条语句过程
Server层按顺序执行sql的步骤为:客户端请求连接器(验证用户身份,给予权限)查询缓存(存在缓存则直接返回,不存在则执行后续操作)分析器(对SQL进行词法分析和语法分析操作)优化器(主要对执行的sql优化选择最优的执行方案方法)执行器(执行时会先看用户是否有执行权限,有才去使用这个引擎提供的接口)去引擎层获取数据返回(如果开启查询缓存则会缓存查询结果)简单概括:连接器:管理连接、权限验证;查询缓存:命中缓存则直接返回结果;分析器:对SQL进行词法分析、语法分析;(判断查询的SQL.
2021-09-25 11:40:49
104
原创 HTTP和HTTPS
HTTP相当于超文本传输协议,但是服务器不会记录HTTP的状态,减轻了服务器的开销,但是在完成关联性操作的时候容易出现问题,因为用会员看视频,不可能每看一集登陆一次,所以使用Cookie技术解决,通过在请求和响应报文中写入Cookie信息来控制客户端的状态,在客户端第一次请求后,服务器会下发一个装有客户信息的Cookie,后续客户端请求服务器的时候,带上Cookie,服务器就能识别出是谁明文传输:相当于信息裸奔,对用户级不安全不安全:通信使用明文传输,账号信息容易泄露,未验证通信双方,访问虚假用户,传输
2021-09-24 11:35:25
142
原创 浅谈索引底层
索引索引引入,从磁盘交互角度InnoDB在建立索引数据结构时,为什么用其他不行?B树和B+树最有意义的区别InnoDB,MyISAM区别索引引入,从磁盘交互角度首先MySql在运行时与磁盘交互的基本单位是16KB(一个页)MySql中的数据文件是以16KB的page保存在磁盘中的MySql的CURD操作都必须要通过计算,去找到对应的插入位置,修改位置,查询数据的位置,这个过程的计算是需要CPU的参与,把数据移动到内存中所以在特定的时间内,数据一定是在磁盘中有,内存中也有,后续再以一定的刷新策略刷
2021-09-17 14:22:40
112
原创 HTTP的进化
HTTP版本演变HTTP1.1优化1.0,但存在性能瓶颈HTTP2.0优化1.1的性能瓶颈1.头部压缩2.二进制格式3.数据流4.多路复用5.服务器推送HTTP3.0优化HTTP2.0的缺陷1.HTTP3.0把TCP换成了UDP2.QUIC协议HTTP1.1优化1.0,但存在性能瓶颈HTTP1.1相比HTTP1.0性能上的改进使用TCP长连接的方式改变了1.0短链接造成的性能开销支持管道网络传输,只要第一个请求发出去了,不必等待回来,就可以发第二个请求出去,减少整体的响应时间HTTP1.1的性
2021-09-02 10:51:28
240
原创 打家劫舍Ⅰ&Ⅱ
打家劫舍Ⅰ & Ⅱ打家劫舍Ⅰ题目代码打家劫舍Ⅱ题目代码打家劫舍Ⅰ题目代码class Solution {public: int rob(vector<int>& nums) { if(nums.size() == 0) return 0; if(nums.size() == 1) return nums[0]; vector<int> dp(nums.size()+1); d
2021-08-31 16:04:05
85
原创 贪心——力扣55.跳跃游戏&&力扣45.跳跃游戏Ⅱ
贪心:局部最优-->整体最优力扣55.跳跃游戏题目描述思路代码力扣45.跳跃游戏Ⅱ题目描述思路代码力扣55.跳跃游戏题目描述思路代码依然是贪心的思路,考虑局部最优到整体最优,我们的目标是到达最后一个下标,是不是我们最终只要大于等于即可,那么我们就可以优先考虑跳跃所覆盖的范围,不用去明确每一步具体跳多少,我们每次移动最大跳跃步数,就更新最大的覆盖范围,最后得到最大的覆盖范围,判断是否到达终点class Solution {public: bool canJump(vector&
2021-08-14 11:24:31
250
1
原创 贪心——力扣53.最大子序和&&力扣122.买卖股票的最佳时机Ⅱ
贪心:局部最优--> 整体最优力扣53.最大子序和题目描述思路代码力扣122.买股票的最佳时机Ⅱ题目描述思路代码力扣53.最大子序和题目描述思路代码上来贪心想不到,先用两个for循环a掉(复杂度太高了)或者动归a掉,比较基础的动归问题了,贪心的思路没想出来,看了题解,只能说贪心真的很巧妙,大体思路是这样的,连续和如果是负数,这样和只会越来越小,负数拉低总和,那我们怎么贪?连续和为负数直接从下一个元素重新计算连续和,遍历数组,维护一个count,count+ nums[i]如果小于0,就跳过
2021-08-13 14:50:11
148
原创 贪心——力扣455.分发饼干&&力扣376.摆动序列
贪心(思想:局部最优 --> 整体最优)力扣455.分发饼干题目描述思路代码力扣376.摆动序列题目描述思路代码力扣455.分发饼干题目描述思路代码我们应该怎么贪才是最合理,联想局部最优到整体最优,我们是不是可以先用大饼干喂大胃口,再统计小孩数量;或者先用小饼干喂小胃口,再统计小孩数量class Solution {public: int findContentChildren(vector<int>& g, vector<int>&
2021-08-12 23:39:22
238
原创 C++实现两个线程交替打印奇偶数
#include<iostream>#include<mutex>#include<thread>#include<condition_variable>#include<Windows.h>using namespace std;mutex mut;condition_variable cond1, cond2;int g_nums = 1;//线程1void thread1(){ while (1) { un
2021-07-21 14:27:16
450
原创 高并发内存池
高并发内存池1.池化技术2.并发内存池2.1 ThreadCache2.2 CentralCache2.3 PageCache3.高并发内存池优点4.项目总结1.池化技术2.并发内存池2.1 ThreadCache2.2 CentralCache2.3 PageCache3.高并发内存池优点4.项目总结...
2021-07-10 00:13:07
332
原创 基于Linux平台下的语音管家Jarvis
语音管家Jarvis1.项目简介2.项目技术点3.项目基本执行流程1.项目简介使用C++编写一个智能AI对话和语音命令执行的语音管理工具借助图灵机器人和百度语音识别和合成等第三方平台和第三方工具除基本交流功能外还可以执行基Linux下的基本指令(支持自己配置)2.项目技术点C++ STL库中的map和unordered_map的使用http第三方库,使用post进行http请求调用图灵机器人的API并接入Linux平台百度语音识别和语音合成SDKLinux系统编程&网络编程
2021-07-10 00:07:40
388
原创 饿汉模式和懒汉模式
单例模式之饿汉、懒汉饿汉模式class singlePattern {private: singlePattern() {}; static singlePattern* p;public: static singlePattern* instance(); class CG { public: ~CG() { if (singlePattern::p != nullptr) { delete singlePattern::p;
2021-07-08 10:08:24
92
原创 归并排序模板
#include <iostream>using namespace std;const int N = 1e5 + 10;int a[N], tmp[N];void merge_sort(int q[], int l, int r){ if (l >= r) return; int mid = (l + r)/2; //递归排序左右区间 merge_sort(q, l, mid), merge_sort(q, mid + 1, r); //
2021-07-07 17:07:29
106
原创 快速排序模板
第一种边界void quick_sort(vector<int>& q,int l, int r) { if(l >= r) return; int i = l - 1, j = r + 1, x= q[(l+r+1)/2]; while(i < j) { do i++; while(q[i] < x); do j--; while(q[j] .
2021-07-07 15:39:53
93
原创 计算机网络之数据链路层协议总结
数据链路层1.数据链路层介绍2.ARP协议2.1 ARP的工作流程2.2 ARP数据报格式3.NAT技术3.1 NAT转换过程3.2 NAPT技术(动态NAT重载)4.DNS技术4.1 域名层级关系4.2 域名解析流程5. ICMP协议5.1 ICMP功能5.2 ICMP类型1.数据链路层介绍数据链路层主要负责相邻设备之间的传输,决定传输的因素是MAC地址MAC地址:6字节的整数,uint_8 addr[6];MAC地址可以唯一标识一台设备和网卡设备绑定的以太网协议:目的MAC地址(6字
2021-06-20 22:54:41
7066
7
原创 计算机网络之IP协议详解
深度理解IP协议1.IP协议基础知识1.1IP协议报头格式(IPv4)2.地址管理2.1 早期划分方式2.2 五类地址详解2.3 子网掩码引入2.4 如何划分子网?2.5 公有IP地址和私有IP地址2.6 特殊的IP地址3.1.IP协议基础知识1.1IP协议报头格式(IPv4)4位版本:标识IP协议的版本4位首部长度:标识IP协议头部长度,4个比特位计算出来的数值×4,标识IP头部占用的字节数量8位区分服务(旧标准叫做服务类型):【3位优先权字段:已经弃用】,【4位TOS字段:最小延时 + 最
2021-06-20 21:12:09
990
1
原创 典型I/O模型——阻塞IO,非阻塞IO,信号驱动IO,异步IO,IO多路转接(select&poll&epoll)
典型IO模型总结1.典型IO模型1.1 什么是IO模型1.2 阻塞IO模型1.3 非阻塞IO模型1.4 信号驱动IO模型1.5 异步IO模型1.6 多路转接IO模型1.6.1 select1.6.2 poll1.6.3 epoll1.6.3.1 工作方式:水平触发 LT模式1.6.3.2 工作方式:边缘触发 ET模式1.典型IO模型1.1 什么是IO模型我们在执行一个程序时,这个程序要求外设进行输入或者输出,内核在处理这个数据时,都在做什么?第一步:等待IO就绪,已经准备好需要的资源了,可以
2021-06-19 00:05:26
397
4
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人