聚类算法
讲解一些重要的聚类算法
miniob初体验
Oceanbase组织的一场针对数据库开发初学者的一场比赛
CPP文件读写
记录C++文件读写操作
C++ 笔记
四区
全局区 静态变量、全局变量、常量 代码区 存储编写的代码,本质就是把代码编译形成的二进制文件放在内存的代码区
栈区 形参、临时变量(由操作系统负责分配与回收)
堆区 new的变量(由程序员负责分配与回收)
argc和argv如果在命令行中编译运行C或C++文件,可能会传入某些参数,argc为参数的个数,argv为每一个参数的名称 main(int argc, char *argv[]) argv[0]为运行文件的目录地址(第一个参数) argv[1]为传入的第二个参数 … argv[argc-1]为传入的argc个参数 argv[argc]为NULL 图片中hello即为传入的第二个参数
函数的分文件编写
把函数声明放在.h的头文件中
把函数定义写在.cpp的函数文件中
在main.cpp中包含了函数声明头文件即可直接使用此函数
123456789101112131415161718192021222324252627swap.h#include <iostream>using namespace std;void swap(int *a, int ...
每日一题-动态规划(从不同类型的物品中各挑选一个,使得最后花费总和等于1000)
四种类型的物品,每一种类型物品数量都是n,先要从每种类型的物品中挑选一件,使得最后花费总和等于1000 暴力做法10000^4 看到花费总和是1000,很小且固定的数字,肯定有玄机,从这里想应该是用dp,不难想到用dp[i][j]表示前i种类型的物品花费为j的方案数量,思考转移方程: dp[i][j] = dp[i-1][j-A] * js[i][A],js[i][A]表示i类型的物件花销为A的方案数量,如此只需要枚举j和A,它们的范围就是1000以内
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354#include <iostream>#include <vector>#define ios ios::sync_with_stdio(0);cin.tie(0);cout.tie(0)using namespace std;int dp[5][1100], js[5][11000];int n;vector< ...
函数对象以及labbda表达式浅析
函数对象函数对象就是仿函数,之所以叫仿函数,是因为使用起来书写形式和调用函数的代码形式很像,之所以叫函数对象,是因为本shi质还是个对象,只不过写这个类是为了使用类似函数的功能。 仿函数就是重载了括号,例如以下代码
123456789101112131415161718192021#include <iostream>using namespace std;class myPrint{ public: int cnt; void operator()(int n) { cout << n << endl; ++ cnt; }}; int main(){ myPrint func; func(2);// myPrint()(2); return 0;}
myPrint类声明的对象就是函数对象,func()本质上是调用成员函数func.operator()(2),但是由于经过运算符重载后也可以写成func(2),形式就像是调用函数一样,所以称为函 ...
快速排序-防止退化O(n2)(三路排序)
题目 click here
题解传统快速排序12345678910111213141516void quickSort(int a[], int l, int r) { if(l >= r) return ; int bas = a[l]; int i = l, j = r; while(i < j) { while(i < j && a[j] >= bas) j --; a[i] = a[j]; while(i < j && a[i] <= bas) i ++; a[j] = a[i]; } a[i] = bas; quickSort(a, l, i-1); quickSort(a, i+1, r);}
Hack数据1严格单调有序的数组 时间复杂度会退化为O(n2) 解决方案:随机化数组或者随机取基准值(而非第一个)
12int id = l + rand() % (r - l + 1);int bas = a[id];
Hack数据2所有数据都相等的数组 ...
高并发浅析
什么是高并发高并发指通过设计保证系统能够同时并行处理很多请求,是分布式系统非常重要的概念 评价分布式系统性能的指标有:
响应时间:系统对请求做出响应的时间。
吞吐量:单位时间内处理的请求数量。
QPS(和吞吐量基本没啥区别):每秒响应请求数。
并发用户数:同时承载正常使用系统功能的用户数量。
水平扩容和垂直扩容那么如何实现高并发呢? 上图都是实现高并发的方法,而这里只介绍水平扩容和垂直扩容
垂直扩容这是过去一直在使用并且可以马上见效的方法,但是缺点也很致命,垂直扩容有两种方案
提升单机硬件配置 例如:增加CPU核数如32核,升级更好的网卡如万兆,升级更好的硬盘如SSD,扩充硬盘容量如2T,扩充系统内存如128G; 改善单机架构 例如:使用Cache来减少IO次数,使用异步来增加单服务吞吐量,使用无锁数据结构来减少响应时间; 但是这种方式势必会受到科技的限制,性能有极限,如果想突破这种极限,实现线性上升,就需要水平扩容
水平扩容增加服务器数量,把请求尽量均匀地分配到各个服务器上,这也是分布式系统的目标。 举个例子,通常一个域名绑定一个IP,而一个IP对应一个服务器,当 ...
环境配置-转载的文章
1. opencv+qt+MinGW click here
2. CLion+opencv click here
Git如何推送当前代码到远程仓库
第一种方法(建立在已经配置好用户变量和ssh基础上) 在本地创建git仓库
git init
绑定远程仓库,origin是给远程仓库起的别名,也可以起其他名字,但是如果用origin,git push时可以不指出名字,如果用其他名字需要指出名字,git push 名字
git remote add origin git@github.com:*/test.git
提交到暂存区,提交所有文件
git add .
从暂存区提交到本地仓库
git commit -m “time”
从本地仓库推送到远程仓库
git push
第二种方法与第一种方法不同的只有绑定远程仓库的方法不同
git clone [远程仓库地址]
之后的步骤一样,git add. git commit git push
工作区、暂存区、版本库、远程仓库 workspace: 工作区 staging:暂存区 local repository:本地仓库(版本库) remote repository:远程仓库
本地分支名字必须和远程分支名字一样本地分支名字必须和远程分支名字一样才能push成功,现在Git ...