自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(186)
  • 资源 (11)
  • 收藏
  • 关注

原创 区间相关

其实是要求横纵边都有交集, 横轴交际就是阴影宽,纵轴交际就是阴影高,所以。判断两区间是否有交集?

2024-04-14 16:06:33 320

原创 最小栈、最小队列

定义一种栈或队列,提供push、pop、getMin三种操作,要求平均复杂度O(1)。

2024-04-05 18:39:27 148 1

原创 螺丝螺母比较

【代码】螺丝螺母比较。

2023-08-31 19:53:35 146

原创 cacheline一致性、内存序、volatile

CPU cache有三级,其中L1、L2是每个core私有的,L3是公共的,cacheline是CPU cache中最小的缓存单位,CPU访问主存中某个数据时会将cache line大小的数据全部读入cache中,目前主流CPU的cacheline大小是64B,比如访问一个long数组,cpu每次会将8个值一起读到cache中,利用这个特性我们可以快速遍历连续内存的数据,比如数组;但是对于非连续性内存比如链表,每次都要从主存中读取数据。

2023-06-13 15:33:39 185

原创 RPC原理与实现

rpc叫做远程过程调用,是指一台机器上的服务通过通信协议调用网络中另一台机器上的程序,并拿到结果。

2023-05-28 23:13:31 881

原创 Redis相关知识

redis是kv存储系统,key为字符串类型,值为redis对象。由5种常用数据类型:String,List,Hash,Set,ZSet。底层没有直接使用C字符串,而是使用简单动态字符串实现。区别:(1)是二进制安全的,不会遇到'\0'而终止,可以存储图像和序列化对象;(2)结构中有表示长度的字段,获取字符串长度时间复杂度时O(1);(3)空间不足时会自动扩容,大小小于1M时每次扩容一倍空间,大小大于等于1M时,每次扩容1M。

2023-05-11 23:35:51 560

原创 Kafka相关知识

将每个Topic划分为多个分区Partition,每个分区时一组有序的消息日志,分区内每条消息都会关联一个连续的数字ID即offset,生产的一条消息只会送到一个分区上。topic是逻辑概念Partition是物理概念对用户透明,生产者只需要关心消息投递到哪个topic上消费者只需要关心在哪个topic行订阅数据。为了提高每个分区的可用性,分区也存在多个副本。图中相同颜色的分区互为副本。kafka存在两种模式:pull和pull模式。

2023-05-06 20:09:39 641

原创 操作系统 知识点

对于32位系统虚拟内存空间有4G,其中系统内存占高位地址的1G,进程内存最多占用3G,进程内部从低位到高位依次是.data段,.bss段,堆,mmap,栈。linux系统下默认栈空间大小为10M,也就是系统最多分配300个线程(3G/10M)。线程切换时机:时间片用完;线程阻塞(如等待IO时间、sleep)线程切换后被移入就绪队列。

2023-05-03 18:32:08 71

原创 二分查找原理及使用场景

建议使用左闭右开区间[l, r)查找。二分查找的最后,索引l,r会落到右区间第一个元素位置。因此但凡是能够见数组分成左右两个区间的都能应用二分查找法。

2023-04-12 14:46:14 457

原创 无锁容器 c++

当生产者消费者数目较多时,用锁实现的线程安全容器锁竞争激烈,上下文切换严重带来较大的性能开销。无所容器实现的关键是为容器的每个槽位设置状态,拿到期望状态的线程通过CAS将状态修改,其他线程因拿不到期望状态二锁死在循环里。

2023-03-31 10:25:49 158

原创 刷题过程中的小规律

a & (a - 1):消去二进制最右边一个1a & -a:最右侧的1异或满足交换律:a ^ 0 = aa ^ a = 0。

2023-03-19 14:04:40 70

原创 dp分类--状态枚举

股票系列常见提问方式:给定n天的股票价格,用户可以买入和卖出股票且交易次数(买入+卖出算一次交易)最多k次,计算可以获得的最大收益?注意不同于取元素,每天的操作是不同的因此对应买入和卖出操作将元素状态分为有没有持股,所以元素状态必须作为dp状态;

2023-03-19 00:02:35 190

原创 11.盛最多水的容器

所以Area1

2023-01-31 11:38:51 257

原创 函数定义与声明

在C98中inline用于函数内联,但是在C++11以及更高的版本中编译器内联函数不再完全参考inline关键字。inline是一种弱修饰符,可修饰函数和命名空间(C++17)。

2023-01-19 16:10:27 139

原创 并行下的效率与安全

cacheline被读取进来后会拷贝到内核私有的L1/L2cache下,当原子变量被修改后,会通知cpu的其他核心来同步变量所在的cacheline(cpu一致性同步)。这就存在falsesharing现象当某个变量被多个核心共享时,一个核心对其进行修改就会导致其所在的cacheline失效,需要重新从内存读取,cacheline中的其他变量也要等待缓存同步而变慢,严重影响整体性能。......

2022-07-24 21:51:00 283

原创 设计模式--策略模式

多态:同一类型的指针或引用在指向不同子类对象时可以表现出不同的行为。我们知道多态最常见的实现方式就是基类定义虚函数,派生类通过继承基类的函数后,对基类函数重写来实现。但是在项目中,往往出现表现多态的类本身改动很小,而该类簇的行为改动频繁,(或者可能行为的实现时算法同学负责,而多态类时我们架构同学负责)那么我们把多态类视为使用行为的上下文,把行为从中抽象出来定义成行为类,这就引出了多态实现的另一种方式:通过继承基类的行为对象成员,然后派生类将成员初始化为不同的行为派生类对象,这样在调用行为类对象的方法时就能表

2021-06-27 19:49:43 124

原创 设计模式--工厂模式

文章目录使用场景工厂模式应用很广,重构场景:冗长switch:如果case比较多而且每个case处理处理程序比较复杂(即使将其封装到函数也不容易管理,而且可读性不高,每次要重新阅读case),都可以通过"简单工厂模式"优化:将//优化前{switch(cmd) {case HTTP_REQ_CMD: process_http_req(); break;case RPC_REQ_CMD: process_rpc_req(); break;case:...}//优化后cla

2021-06-20 20:36:35 258 1

原创 c++探险--有虚函数时的继承

父类没有虚函数我们都知道子类在继承父类的时候,会将父类的变量和虚表指针继承下来保存到自己的内存里(即使父类private变量的内存也会继承下来,只会无法访问到),也就是子类对象内存中存储着一个父类对象。如果使菱形继承,那么"菱形"底部的类就会存储两份"菱形"顶端的类对象内存,通过虚继承可优化成一份,暂且不表。class Base {public: int a;private: int b;};class Sub : public Base {int c;};#mermaid-svg.

2021-06-20 18:15:27 231

原创 写出优雅代码

目录一. 封装,继承,多态封装继承多态二. 设计原则单一职责一. 封装,继承,多态封装尽可能隐藏一个模块的实现细节。原因:增加调用者负担,使用者在使用你的类时还要知道实现细节。耦合性。比如类内部有个成员是vector,那么外部应该用push_back等方法来操作,有一天需要换城map,那么所有调用方的代码都得改。应该对外界提供访问数据的方法(getter、setter);而不是直接将数据等实现细节暴露出去。继承不能仅仅因为is-a和is-kind-of就定义为继承关系,必须是派生类能够适

2021-05-27 02:11:57 108

原创 再探git

–cached == --stagednot staged:文件已经存在暂存区,工作区文件修改了但还没add到Stagenot tracked:工作区新建的文件,从未添加到Stage。git status : 查看暂存区和本地仓库的状态。git ls-files : 显示暂存区的文件,git commit/push之后,记录仍在。–cached : 显示暂存区里的文件(默认)–deleted:显示从暂存区删除的文件(git rm file :从Stage中删除)–modified:显示.

2021-05-09 16:47:09 207

原创 桶原理的应用

鸽笼原理计算最大间距问题:要求线性时间复杂度下计算数组元素在排序后的最大间距。如果直接对数组排序那么时间复杂度是nlogn,这里使用桶,设置n+1个桶这样n个元素放入后至少出现一个空桶,这就使得不同桶之间的元素差大于同内部的元素差(因为空桶两侧的桶元素差>=width,桶内元素差<width)。计算所有相邻非空桶之间元素差值(相邻桶之间的元素差可能大于空桶两侧的桶元素之间元素差)。int largestDiff(vector<int>& nums) { int.

2021-01-09 01:46:40 171

原创 单调栈总结

leet"255. 验证前序遍历序列二叉搜索树"题解:先序遍历搜索树,只有左子树时元素是单调递减的,但存在某一结点的右子树就不满足单调。如5/ \2 6/ \1 3输入: [5,2,6,1,3]输出: false先序遍历[5,2,1,3,6]。只有左子树[5,2,1],加入2的右子树变成[5,2,1,3]。因此为了保持栈的单调,元素大于栈顶元素,弹出栈中小于当前结点的值,并把当前节点入栈,变成[5,3],这时栈中又只剩下左子树,满足单调。最后一个弹出栈2的是当前节点3的根节点。

2020-12-09 10:17:08 164 1

原创 计算字符串表达式

整体思路:按照“符号-数字”处理字符串,将+/-运算看作数字的符号不单独运算,因此不需要考虑符号的优先级问题,在遇到非数字符号或者到达字符串结尾时处理上一个“符号-数字”组合。将括号内容看作一个数字,递归处理,遇到“)”表示当前是计算的括号内容,因此直接将结果返回,一定注意共用一个索引,用来跳过括号内容。class Solution {public: int helper(string s, int& i) { int n = s.size(), num = 0; stack<i

2020-09-30 15:34:33 544

原创 并查集原理及应用

并查集树形的数据结构,每个集合有其代表节点,代表节点相同的元素属于同一集合。find:通过查找节点的代表节点,判断节点所属集合。union:合并两集合,小集合合并到大集合,使用大集合的代表节点。class UnionFindSet {private: unordered_map<int, int> fatherMap; unordered_map<int, int> nodesNum;public: UnionFindSet(vector<int> ve

2020-05-20 18:26:04 179

原创 c++引用

c++引用包含左值引用和右值引用,因为引用都是变量,因此右值引用是左值。左值指变量,右值指临时对象,字面值(16,“string”,13+2)。当函数参数为T&&时(其中T时模板类型),是万能引用,传入参数是左值,T&&就变成左值引用,否则T&&变成右值引用。template<typename T> void f(T&&a...

2019-12-24 11:55:18 149

原创 TrieTree

class TrieTree{public: //定义trie树节点,26个字符是定义在分支上。 struct Node { int across; int end; shared_ptr<Node> nexts[26]; Node() :across(0), end(0) {} }; typedef shared_ptr<Node> Node...

2019-12-23 20:37:40 170

原创

图的结构定义(邻接表)struct Node{ int id;//节点id,如果节点本身有值还可以加val字段。 bool visit;//是否访问 vector<shared_ptr<Node>> nexts;//从本节点出发的下一个节点,有向无向均可。 Node(int _id) :id(_id), visit(false) {}};struct Edg...

2019-12-23 16:21:12 187

原创 哈希表

哈希表又称散列表,存储键值对,主要操作有插入,删除,查找。哈希表底层是一个数组,首先将key通过哈希函数计算哈希值,也即数组下标,然后对位置上的元素执行插入删除,查询。三种操作时间复杂度均为O(1)O(1)O(1),耗时操作在哈希函数计算和哈希冲突的处理上。哈希函数(*)哈希函数的要求是,映射均匀,降低哈希冲突的几率;计算简单,节省时间。直接定址法使用key的线性函数作为哈希函数,H(k...

2019-12-21 20:54:30 297

原创 模板相关

一. 编译过程首先介绍C++程序的编译过程。编译器以源文件为编译单元,编译过程分为四个阶段:预处理,编译,汇编,链接。预处理:处理头文件和宏定义。首先根据寻找源文件中所包含的头文件,进入头文件进行宏替换,根据条件编译修改源程序。然后把头文件的内容全部添加到当前原文件里,形成一个中间c文件。编译:对中间的c文件进行语法检查,并将源代码编译成汇编文件。汇编:将汇编翻译成二进制的机器码...

2019-12-20 17:28:30 138

原创 c++智能指针以及shared_ptr实现

简化版shared_ptr初始化两种方式:传指针int * a = new int(1);shared_ptr<int> p(a), q(a);//这时两个智能指针对象p,q里的计数无法同步,都是1.//避免这种//尽量使用shared_ptr<int> p(new int(1));make_sharedshared_ptr<int>...

2019-12-18 17:44:47 290

原创 top k和第k大元素的问题

堆方法使用容量为k的最小堆,当堆满了以后,加进来的元素和堆顶元素比较,如果大于堆顶元素就先弹一个元素,再加入,否则抛弃。结果最小堆中的元素就是topk元素,堆顶元素是第k大元素。时间复杂度:调整堆O(logk)O(logk)O(logk), n个元素n∗logkn*logkn∗logk。class Solution {public: int findKthLargest(vector&l...

2019-12-16 12:02:36 259 1

原创 区间最大经过次数

给定一组区间,求重叠次数最多的子区间以及重叠次数。样例输入10 31 44 74 9样例输出3 4 4定义结构体(数值,是否为起始端),把输入放入结构体数组。先排序,数值小的在前,相同数值情况下,起始点在前。定义一个计数器,遍历结构体数组,遇到起始端计数加一,遇到结束点计数器减一,并保存最大值。最大值处保存左端点,保存下一个结束点为右端点。struct node { int ...

2019-12-13 11:48:33 372

原创 01背包问题及其应用

01背包问题有n个重量为w1,w2,w3…的物品,价值分别为v1,v2,v3…,现有一个容量为C的背包,问在不超过背包容量的条件下,所装物品的最大价值是多少?这个问题有两个变量,分别为物品总数n,背包容量C。记F(n,C)F(n,C)F(n,C)表示n件物品,C容量时的最大价值。考虑最后一步,F(n)F(n)F(n)能通过F(n−1)F(n-1)F(n−1)放与不放当前物品推导出来。不放当前...

2019-12-12 11:53:15 1133

转载 redis安装

下载 http://download.redis.io/releases/redis-4.0.10.tar.gztar -xzvf redis-4.0.10.tar.gzcd redis-4.0.10make -j12 #编译源文件cd src由于我只把redis安装到我的用户目录(由于使用服务器没有root权限),修改Makefile中PREFIX=/home/xxx/redis,如...

2019-11-15 17:11:17 645

转载 Ubuntu 安装MySQL-5.6.tar.gz

转载:https://blog.csdn.net/u011110953/article/details/9361829mysql-5.xx.tar.gz,解压至/usr/local/mysql创建用户组:sudo groupadd mysql在创建的用户组中创建一个用户:sudo useradd -r -g mysql mysql这里使用sudo命令是确保以root权限执行此命令,如果...

2019-11-12 15:11:25 393

原创 c++11新特性

move语义 与forward完美转发减少内存复制成本将不再需要的变量,取消它对资源的的持有权。对临时变量(如函数中的参数)的复制,只复制临时对象中的指针,然后将其置null,避免了内存拷贝,提高了效率。std::move本质上是类型转换,讲左指类型变为右值类型,从而可以调用移动构造或移动赋值操作符。override与finaloverride:对重写的虚函数进行修饰,在编译期...

2019-09-26 11:44:31 146

原创 c++编译期间和运行期间

编译期编译期主要是编译器的预处理和编译C++代码,(汇编和链接是对机器码不考虑)。预处理阶段:宏替换 #define,条件编译 #ifndef #endif头文件编译:执行类型检查,语法检查,以及为变量确定内存分配大小,这些变量包括全局或静态变量,栈上的变量。所以说数组大小必须是编译期间确定的值,编译期间并不给变量分配内存,而是确定好内存大小,等到运行分配。sizeof编译期运...

2019-09-25 01:28:43 2076 2

转载 哲学家就餐问题

有五个哲学家,每个哲学家之间有一只筷子,必须同时获得两只筷子才能进餐。平时一个哲学家进行思考,饥饿时便试图取用其左、右最靠近他的筷子,只有在他拿到两支筷子时才能进餐。进餐完毕,放下筷子又继续思考。在就餐时会引发两个问题:1.死锁 :每个哲学家持有一只筷子,等待相邻哲学家释放另一只筷子而形成循环等待的状态。2.饥饿:所有哲学家同时持有一只筷子,因无法得到两只而同时释放,发现条件满足又同时拿起...

2019-09-18 15:49:48 388

原创 红黑树与AVL树

AVL树平衡二叉树又称为AVL树,是一种特殊的二查搜索树。任意节点左右子树高度之差的绝对值不超过1。平衡二叉树的搜索和插入,删除时间复杂度都是O(logn).对于普通二查搜索树,当树的结构变成线性时,查找时间复杂度为O(n)。如何实现平衡:节点分布:左左型 右旋右右型 左旋左右型 先左旋变成左左型,再右旋右左型 先右旋变成右右型,再左旋左旋:逆时针旋转,父节点被右孩...

2019-09-17 11:18:06 292

原创 c++冷门知识

表达式计算方向printf和cin是从右往左计算.其他表达式从左往右计算,比如逗号表达式,但是逗号表达式返回值是最右边的值。逗号运算符优先级最低,所以要加括号。int b[5] = { 1,2,3,4,5 };int* p = b;printf("%d, %d\n", *(p), *(++p));//输出2, 2int i = 1;int a = (2,i=3, i);cou...

2019-09-11 19:00:10 220

xmapp+phpwind+agileone.zip

xmapp+phpwind+agileone搭建后台web服务。如果这三个版本不匹配,如php版本过高,会出现phpwind在注册时空白页面的出现。如xmapp版本过高,agileone无法兼容的情况,这是试过版本可以的。

2019-12-05

nccl-2.4.8-1-x86_64.pkg.tar.xz

nccl-2.4.8-1-x86_64.pkg.tar.xz是从linux org下下载下来的。要与tensorflow版本对应,不是下载deb格式。

2019-07-28

QT实现wav音频文件读写

使用QT实现pcm和wav文件相互转换,读取wav音频格式等。其中有些数据类型属于qt特有如qint32, QString等完全可以转成int,std::string,移植的话转成相应类型即可。

2018-09-11

c++版神经网络实现

c++版神经网络的实现,内部实现了矩阵运算,前向传播,反向传播的基本逻辑,使用的是交叉熵损失函数,二分类问题,数据集是64*64*3的猫的图片,已被展成12288向量存于txt文件中,由于数据量大训练时间可能较长

2018-06-19

Deep Learning with TensorFlow

Deep Learning with TensorFlow Giancarlo Zaccone, Md. Rezaul Karim, Ahmed Menshawy

2018-04-11

香港中文大学tensorflow课件

香港中文大学tensorflow课件,适合初学者入门,内容讲解的还算详细

2017-11-06

飞思卡尔K60野火底层库,拉普兰德底层库及其使用教程

飞思卡尔K60野火底层库,拉普兰德底层库及其使用教程,以前做智能车时积累的资源

2016-11-17

stc15w4k58s4控制的直立车(带角度闭环、速度闭环,蓝牙调试、OLED显示等)

stc15w4k58s4控制的直立车程序 带角度闭环、速度闭环,底层兼容性好,个别参数需要实际调试,如PID参数 蓝牙调试、OLED显示方便参数显示及调试 本程序为上传者之前参加比赛的程序,与大家分享 不同思路欢迎讨论

2016-09-11

完整android API文档

当前从网上找到的最完整api,基本包含所有内容,对于无法在网上查看api的朋友,很适合哟!

2015-03-15

JAVA对象研究.ppt

深入剖析java对象,带你走进你不知道到的java世界

2014-11-01

空空如也

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

TA关注的人

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