自定义博客皮肤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)
  • 资源 (1)
  • 收藏
  • 关注

原创 c++后端开发书籍推荐

推荐书籍: 略读80% 精读50%C:

2022-06-22 10:56:25 1076

原创 我的职业生涯规划(软件工程)

2019/6/17推荐视频:https://www.bilibili.com/video/av36343956?t=544视频中的大佬说到:要知道学习知识的这个过程不应该是个很轻松的,如果你太容易得到这个东西往往是价值很低的,我常常和大家强调,你认为你明白的和你真正明白的中间隔着的是一个实践的过程,是你自己用心的过程,其实不只是自己学科学知识,专业知识,你去学体育,打篮球,踢足球,或者是乐器都.........

2019-06-18 09:18:47 14856 1

原创 window10 conda activate指令无效的问题

usage: conda-script.py [-h] [–no-plugins] [-V] COMMAND …conda-script.py: error: argument COMMAND: invalid choice: ‘activate’ (choose from ‘clean’, ‘compare’, ‘config’, ‘create’, ‘info’, ‘init’, ‘install’, ‘list’, ‘notices’, ‘package’, ‘remove’, ‘uninstall

2024-01-24 17:47:15 994

转载 oracle的jdbc连接方式:oci和thin

oci 是一种胖客户端的连接方式,即采用这种连接方式需要安装oracle客户端。oci是Oracle Call Interface的首字母缩写,是ORACLE公司提供了访问接口,就是使用Java来调用本机的Oracle客户端,然后再访问数据库,优点是速度快,但是需要安装和配置数据库。对于oracle数据库客户端的安装,有二种选择,一是老实的用oracle数据库的安装光盘安装对应版本的oracle客户端。二是下载oracle提从的即时客户端,即时客户端是不用安装的,把下载包解压即可。

2023-12-11 09:25:08 811

原创 Redis-布隆过滤器(Bloom Filter)

布隆过滤器,Bloom Filter是1970年由Bloom提出的,它是由一组哈希(Hash)函数和一个位阵列组成。其他问题由于错误率影响hash函数的数量,当hash函数越多,每次插入、查询需做的hash操作就越多。布隆过滤器不支持元素的删除,会出现问题删除的哈希点位可能是别的元素依赖的点,删除后导致缓存无法命中。使用布隆过滤器中的哈希函数对元素值进行计算,得到哈希值(有几个哈希函数得到几个哈希值)布隆过滤器的优点是空间效率和查询时间都比一般的算法要好的多,缺点是有一定的误识别率和。

2023-11-16 09:58:18 251

原创 redis的c++ 客户端 redis-plus-plus

hiredis 多线程不安全,要想多线程使用就得维护一个对象池,使用起来比较麻烦。使用redis-plus-plus来操作redis更加的分布,redis类多线程安全,内部维护了一个连接池

2023-10-17 11:34:20 523

原创 C++语法糖(std::variant)详解以及示例代码

在上面的程序中,我们使用了一个 std::variant 对象 value 来存储整型、浮点型和字符串类型中的任意一种。在程序中,我们分别将 value 赋值为整型、浮点型和字符串类型,并使用 std::get 来获取对应的值。在之前的版本中,C++ 可以使用 union 来存储不同类型的数据,但是 union 存在一些限制,比如不能存储非 POD 类型和类对象。std::variant 是 C++17 中引入的一个新类模板,它可以存储一组类型中的任意一个,并且能够在运行时进行类型检查和转换。

2023-10-17 10:46:54 332

转载 C++17新特性——std::optional

我们在写代码过程中可能经常会碰到这样的情况:某个函数经过一系列计算后获取一个返回值,但是这个函数可能在执行过程中有异常分支,从这些异常分支中return出来的时候还没有得到这个想计算的值。例如想计算得到一个无符号类型,我们可能会在这些异常分支return一个-1出去,用来表示计算失败,或执行有误,甚至不同的负值用来表示不同的异常情况。。。由于这些值的存在,本来返回值应该是uint32类型,为了容纳可能出现的负值和整个uint32的范围,返回值就变成了int64。。。

2023-10-17 10:11:58 155

原创 Dpdk19.11 环境搭建保姆级步骤及常见错误

首先设置运行环境,需要搭建虚拟机的多队列网卡https://www.bilibili.com/read/cv17345493。dpdk的环境搭建分为两个部分,编译环境和运行环境。

2023-05-10 11:00:35 483

原创 memcpy函数实现

为避免溢出,目标参数和源参数所指向的数组的大小应至少为 num 个字节,并且不应重叠(对于重叠的内存块,memmove 是一种更安全的方法)。当然,这里可以考虑倒过来拷贝,这样数据就不会丢失,是否可以用dest - src

2023-05-04 15:44:52 336

原创 剑指 Offer 19. 正则表达式匹配

这题太坑了 想用状态机写,越写坑越多。

2023-04-23 23:54:18 80

原创 575. 分糖果

【代码】575. 分糖果。

2023-04-23 21:35:59 83

原创 剑指 Offer II 041. 滑动窗口的平均值

还是直接用队列比较好,先入先出。用数组模拟队列确实丑陋不少。

2023-04-23 21:28:59 77

转载 iptables中ULOG和NFLOG实现分析

图3说明:如果指定的消息池不存在(使用分组编号定位一个消息池),将不写入消息,也不构造消息。当一个数据包满足了匹配条件,并开始执行NFLOG target时,需要根据nflog target的私有数据struct xt_nflog_info来构造要发送的消息,并使用xt_nflog_info中消息池编号指定的消息池发送消息,使用单播把数据包发送给创建本消息池的进程。1.内核也是通过消息池来发送消息,但是不能接收消息,消息池是静态的,也就是说,消息池的个数和相应的属性是固定的,用户空间没法进行配置,

2023-04-23 13:38:12 594

转载 iptables中ULOG和NFLOG实现分析

图3说明:如果指定的消息池不存在(使用分组编号定位一个消息池),将不写入消息,也不构造消息。当一个数据包满足了匹配条件,并开始执行NFLOG target时,需要根据nflog target的私有数据struct xt_nflog_info来构造要发送的消息,并使用xt_nflog_info中消息池编号指定的消息池发送消息,使用单播把数据包发送给创建本消息池的进程。1.内核也是通过消息池来发送消息,但是不能接收消息,消息池是静态的,也就是说,消息池的个数和相应的属性是固定的,用户空间没法进行配置,

2023-04-23 09:27:35 275

原创 docker依赖的linux内核特性,docker镜像能跨平台运行吗?不一定

这样,可读写层处于Docker容器文件系统的最顶层,其下可能联合挂载了多个只读层,只有在Docker容器运行过程中文件系统发生变化是,才会把变化的文件内容写到可读写层,并且隐藏只读层中的老版本文件。由于rootfs里打包的不只是应用,而是整个操作系统的文件和目录,也就意味着,应用以及它运行所需要的所有依赖,都被封装在了一起。这就赋予了容器所谓的一致性:无论在本地、云端,还是在一台任何地方的机器上,用户只需要解压打包好的容器镜像,那么这个应用运行所需要的完整的执行环境就被重现出来了。

2023-04-13 08:55:08 1230

原创 zeromq 安装

【代码】zeromq 安装。

2023-04-06 17:09:08 635

原创 二分法模板以及例题 (三)

由于每个版本都是基于之前的版本开发的,所以错误的版本之后的所有版本都是错的。输入:numbers = [2,7,11,15], target = 9。输入:nums1 = [1,2,2,1], nums2 = [2,2]输入:arr = [1,2,3,4,5], k = 4, x = 3。解释:最长递增子序列是 [2,3,7,101],因此长度为 4。输入:nums = [10,9,2,5,3,7,101,18]输入: nums = [2,2,3,4]输出:[1,2,3,4]

2023-04-03 23:01:46 265

原创 一篇讲完ZeroMQ七大模式demo (python + c)

例如,可以使用REP/REQ模式与PUSH/PULL模式结合使用,以实现异步的负载均衡。这个模式是DEALER/ROUTER模式的反向。这个模式类似于Req/Rep模式,但客户端可以发送多个请求而不需要等待服务端的响应。这个模式类似于Pub/Sub模式,但是消息不是广播给所有订阅者,而是只发送给一个随机的订阅者。这是最简单的模式,客户端向服务端发送请求,服务端收到请求并发送响应。这个模式是同步的,客户端必须等待服务端的响应。XPUB端发布消息,XSUB端订阅消息,并可以根据自己的需要进行筛选和路由。

2023-04-03 16:46:13 1574

原创 muduo网络库:1---muduo简介之(详解muduo线程池模型)

threadInitCallback_ 是一个Task类型,当不为空的时候调用初始化,在线程池没结束的时候从队列中取任务出来执行。tar还会手动释放线程池,因为stop不当是析构的时候调用,不使用只想停止所有任务但不析构的时候也可以调用。再看看线程池的构建和初始化,c++的线程池构建一般都时用构造函数,muduo库的线程池会命一个名。双条件变量控制流程,是因为他有一个任务的上线,tars没用任务上线用的是单条件变量。muduo 线程池的成员变量和tars的差不多。销毁线程池,和停止线程池。

2023-04-03 15:22:33 433

原创 手撕腾讯的tars框架的线程池

TODO。

2023-04-03 14:47:33 116

原创 二分法模板以及例题 (二)

解题思路:需要一个先增后降的位置,即如果找到是递增的则排除左边,如果找到是递减的则排除右边,峰不会重复,如[1,2,2,1]这样,所以模板一二都可以。要找到第一个小于等于8的值,前面是比之,这题是比平方后的值,万变不离其宗,因为数不会重复,所以模板一二都可以。输入:nums = [5,7,7,8,8,10], target = 8。输入: nums = [1,3,5,6], target = 5。解题思路:这题就类似于[1,2,3,4,5,6,7,8]输入:nums = [1,2,1,3,5,6,4]

2023-04-03 12:04:17 383

原创 module ‘numpy‘ has no attribute ‘object‘.

高版本的numpy np.object弃用了,把np.object改成object,或者降低numpy版本。

2023-03-29 09:53:42 12290 8

原创 【从零开始的go算法】删除有序数组中的重复项

j是快指针,负责找到一个和nums[i]的不同的值。找到不同的之后i++然后将这个j指的值放到i的位置。双指针秒杀了i为当前在队列中不重复的值的下标。最后返回i+1是因为i是下标,表示长度得加一。

2023-03-27 17:31:36 73

原创 kcp源码剖析 (3)

搜索入队的函数iqueue_entry 可以发现在调用ikcp_parse_ack时候 会处理snd_buf中的数据。上文发现了queue读取的时候希望buf是要有序的,那buf里的分片是否是有序的呢,不是可以选择重传了吗。是否是重传后插入到对应的位置然后在一口气写到queue中呢。在ikcp_input函数中调用。

2023-03-27 16:29:55 414

原创 kcp源码剖析+kcp应用层组包 (2)

在ikcp_recv中只用sn是rcv_nxt需要的段序号的时候,才会入队,这就保证了有序性。上文说道分段保持有序,可以先联想一下tcp是怎么保存接受的包有序的。

2023-03-27 15:45:14 421

原创 kcp源码剖析 (1)

kcp怎么学习,按照学习技术的三部曲那就开始第一步会用,下载kcp源码kcp的代码很简单就一个ikcp.c 和一个ikcp.h官方提提供了一个测试文件test.cppkcp的工作流程是kcp是不提供和网络层相关的代码的,是一个纯算法所以第一步就是封装一个output,需要四个参数,buf len 显而易见是要发送的数据和数据长度kcp参数基本上用不上,user是相当于上下文,下面代码就是将user传入了结构体,而结构体中保存了数据如:sockfd下面放出完整代码。

2023-03-27 14:00:51 545

原创 【从零开始的go刷题】合并两个有序链表

递归第一步就是找到边界,第二步是找到要保存的数据压入栈中,第三步考虑返回值和赋值的顺序

2023-03-27 10:50:45 173

原创 【从零开始的go算法】有效的括号

go没有stack等一系列数据结构,只好用数组模组stack了。大佬喜欢用切片不知道性能怎么样。

2023-03-26 18:25:53 59

原创 分段构建dockerfile 使用debian_slim 使用编译后的动态链接文件

【代码】分段构建dockerfile 使用debian_slim 使用编译后的动态链接文件。

2023-03-22 10:48:15 248

原创 C++附加---静态库和动态库的创建与使用(linux下实现和docker实现)

①概念:静态库是指在我们的应用中,有一些公共代码是需要反复使用,就把这些代码编译为“库”文件;在链接步骤中,连接器将从库文件取得所需的代码,复制到生成的可执行文件中的这种库。①概念:动态库链接时不复制,程序运行时由系统动态加载到内存,供程序调用。而且系统只加载一次,可以被多个程序共用。动态函数库在编译的时候并没有被编译进目标代码中,需要用到相应的功能,代码才会被调用到程序中,节约内存。静态库链接之后,静态库改变,对程序不再产生影响,移植方便。动态库的改变,程序也会跟着动态变化,升级更新比较方便。

2023-03-22 10:35:47 363

原创 【从零开始的go算法】最长公共前缀

【代码】【从零开始的go算法】最长公共前缀。

2023-03-22 10:05:48 48

原创 【从零开始的go算法】 罗马数字转整数

写的有点冗余,简单模拟。

2023-03-22 09:29:27 54

原创 【从零开始的Go刷题】回文数

方法二 int做切分写入数组,前后比较是否相等(双指针)方法一 变成字符串,前后比较是否相等(双指针)golong似乎没有变长数组。

2023-03-21 17:06:29 85 1

原创 【从零开始的Go刷题】两数之和

【代码】【从零开始的Go刷题】两数之和。

2023-03-21 16:55:28 66

原创 KMP算法面试题

面试题:写一个在一个宇符串(n)中寻找一个子串(m)第一个位置的函数。10+G的日志中,如何快速地查找关键字?

2022-07-12 22:47:11 185

原创 手势希尔排序

希尔排序

2022-07-12 22:08:02 73

原创 C++有限状态机的实现

//待完善有限状态机是一个很常用的技术,在流程控制和游戏AI中都比较实用,因为状态机编程简单又很符合直觉。与有限状态机类似的是设计模式中的状态模式。本文是参考《Programming Game AI by Example》一、记得最开始工作时候也接触过有限状态机,当时是一个长长的用switch写成的状态机,理解它的时候真的很困难。所以现在使用一套内置规则到状态内部去,来控制状态的转换。现在就来制作一个有限状态机。作为一个关于使用状态机创建一个智能体的实际案例,我们先模拟这样一个场景。是作为一个简

2022-07-07 17:32:51 2656

原创 C语言指针作为函数参数 以及智能指针作为函数参数

总所周知指针作为函数参数传递的时候 传递的是指针的拷贝(指针也是变量) 这里提供四种指针的传递方法 改到实际的指针。

2022-06-28 17:16:33 461

原创 适配器模式 完成vector和list 到 stack和queue的封装

todo: 代码弄丢了 等补

2022-06-27 16:31:56 92

空空如也

空空如也

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

TA关注的人

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