自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(128)
  • 资源 (4)
  • 收藏
  • 关注

原创 dij最短路径算法

Dijkstra算法解决的是单源最短路径问题:对于给定的有向网络G=(V,E)及单个源点v,求从v到G的其余各顶点的最短路径。本文以下面的有向网络(用邻接矩阵存储)为例,并假设源点为1。

2024-03-22 11:43:49 126

原创 定时器实现数据结构比较

大小堆:大小堆的插入和删除操作相对简单,主要涉及上浮(向上调整)和下沉(向下调整)操作,以维护堆的性质。1. 红黑树获得最小值的时间复杂度是O(h), 最小堆的是O(1),因为最小值永远是根节点.红黑树:红黑树的插入和删除操作相对复杂,需要根据红黑树的性质进行调整和旋转,以保持平衡性。2.红黑树相同的时间定时任务,后面需要挂一个桶 类似mutilmap。

2024-01-22 16:28:53 438 1

原创 全球同服方案

数据集中和逻辑分布, 每个区一套游戏服,数据中心固定在某一地区,如global,,适用于游戏玩法上尽量是同区域玩家间互动,并且对网络延迟要求较高的游戏类型。但需要多区域部署,跨区域玩家互动时会有一方玩家网络延迟变大,需要有完善的脏数据回写机制以保证数据一致性。集中部署,跨区域地区做网络优化,如加入udp,或者gate转发, 适用于游戏服务器架构不适合作分布式部署、而运营发行方期望覆盖尽量多的区域,同时游戏网络延迟在200ms以内的游戏。该架构部署简单,主要覆盖区域的玩家游戏体验较好,没有数据一致性问题。

2024-01-11 17:13:35 436

原创 地图移动逻辑

之前经常发生进行同步的时候,第三方客户端上的角色最终停止的位置会比主客户端多走了几步的问题,这时因为对最后一个同步坐标也做了预测的缘故。做预测, 在没有收到下一个同步点的时候,客户端自己做一个位移预测,让角色保持位移的状态,客户端简单地认为角色会保持当前的位移方向和速度继续运动(事实上也确实是保持运动状态的情况居多,变化居少)会有收到最后一个点的时候,角色已经做了预测,并且走超了的情况,这种情况只能按照终点坐标做一个会拉的操作了,或者客户端设定了预测上限,在偏差值不大的情况下允许这种偏差存在也可以。

2024-01-10 20:08:43 439

原创 内网穿透工具frpc ,流量代理

svn: //123.207.61.13:9227 就行了。

2023-12-14 14:09:53 426

原创 stl容器

std::stack 和 std::queue: 它们是容器适配器,实际上依赖于其他容器实现(例如 vector, deque, 或 list),因此其 size 复杂度与底层容器的 size()` 复杂度相同。std::forward_list: 时间复杂度为 O(N),其中 N 是容器中的元素数。std::map 和 std::multimap: 时间复杂度为 O(1)(C++11 及以后的版本)。std::set 和 std::multiset: 时间复杂度为 O(1)(C++11 及以后的版本)。

2023-12-08 15:31:34 379

原创 linux api daemon,后台运行进程

函数将当前进程转变为守护进程。在守护进程中,可以执行需要在后台运行的任务。在示例中,守护进程会打印一条消息,然后睡眠10秒,最后打印另一条消息。函数仅适用于Unix/Linux系统,不适用于所有操作系统。在其他操作系统上实现守护进程可能需要使用不同的方法和函数。函数是一个标准的Unix/Linux系统调用,用于将当前进程转变为守护进程。函数可以简化将进程转变为守护进程的过程。例如,下面的代码演示了如何使用。函数的返回值为0表示成功,返回-1表示失败。在Linux系统中,确实有一个名为。

2023-11-29 16:11:42 448

原创 gcc编译优化

thinLTO是GCC引入的一种折衷方案,它结合了整个程序模式和LTRANS模式的优点. 在链接阶段,链接器可以使用这些索引文件来进行全局的优化和代码生成。总体而言,LTRANS和ThinLTO都是有效的链接时优化方式,但根据项目的规模、编译时间和优化需求来选择适合的模式。O3在O2的基础上进行更多的优化,例如使用伪寄存器网络,普通函数的内联,以及针对循环的更多优化。O2会尝试更多的寄存器级的优化以及指令级的优化,它会在编译期间占用更多的内存和编译时间。

2023-11-24 12:28:40 495

原创 eventfd

flags:eventfd文件描述符的标志,可由三种选项组成:EFD_CLOEXEC、EFD_NONBLOCK和EFD_SEMAPHORE。EFD_CLOEXEC:表示返回的eventfd文件描述符在fork后exec其他程序时会自动关闭这个文件描述符;EFD_SEMAPHORE表:表示将eventfd作为一个信号量来使用。initval:创建eventfd时它所对应的64位计数器的初始值;EFD_NONBLOCK:设置返回的eventfd非阻塞;一个消费者,多个生产的时候,一个消费者,一个生产者。

2023-10-12 20:42:30 657 1

原创 windows 关闭自动更新

1.2.

2023-10-11 14:30:47 129

原创 信号驱动io

免去了select的阻塞与轮询,当有活跃套接字时,再由注册的handler 处理, 无需进程主动去check活跃的socket,把检查工作交给内核,进程只需要确定合适处理拷贝即可。不过可以对TCP监听套接字可以使用SIGIO,因为对于监听套接字,产生SIGIO信号的唯一条件是某个新连接完成了。当套接口上有可用数据时,内核将发送SIGIO信号给进程,此时信号处理程序将被调用,并且可以执行相应的操作。这么多条件都会触发SIGIO信号,导致应用进程对该信号一头雾水,没法确定套接字具体发生了什么事情。

2023-09-26 20:38:15 111

原创 nginx

[nginX-1.7.2] worker进程的诞生: ngx_start_worker_processes-PCliangtao-ChinaUnix博客

2023-09-26 17:07:45 83

原创 小优化记录

1. sizeof("12345678" ) 和 strlen("12345678")2. 字符串大小写转换。

2023-09-23 17:56:45 90

原创 debug调试打印c++堆栈调用

g++ -g trac.cpp // 编译。

2023-09-18 14:15:10 206

原创 openssl websockets

1.

2023-09-14 20:25:57 265

原创 c++ try catch

【代码】c++ try catch。

2023-09-13 16:18:00 108

原创 docker

7. docker run -it -v /root/ceshi:/root centos /bin/bash docker 启动一个centos并且挂载到ceshi目录。docker exec -it 88d23bcbe1f2 /bin/bash , 进入不停止容器。4.docker run -it centos /bin/bash 启动并进入容器。docker rm -f $(docker ps -aq) 删除全部容器。docker attach 容器id , 进入不停止容器。

2023-09-11 17:27:36 185

转载 内存序atomic

截止到此,分析了memory_order_acquire&memory_order_acquire组合以及memory_order_release&memory_order_consume组合的对重排的影响:当对读操作使用memory_order_acquire标记的时候,对于写操作来说,写操作之前的所有读写都不能重排到写操作之后,对于读操作来说,读操作之后的所有读写不能重排到读操作之前;在未进行任何同步的条件下,即使线程A先执行,线程B后执行,线程B读取到的x的值也不一定是最新的值。

2023-09-11 09:49:59 44

原创 godbolt使用

Compiler Explorer

2023-09-06 11:27:04 862

原创 真伪随机数

算法生成随机数,比如c++中的 mt19937梅森旋转算法即为一种软件层面的随机数生成算法算法。如果知道了seed和算法的具体实现,别人就可以知道你生成的随机数序列。不是跨平台的,依赖于硬件具体的实现,C++标准没有严格要求,编译器可能会偷懒,用伪随机数糊弄你(特指mingw),而。,原理是用某个仪器一直探测环境中的物理量,将该物理量作为随机数,比如 Intel 和 AMD CPU指令集中的。指令,C++ 中random_device就是利用RDRAND实现的。

2023-08-31 20:43:14 120

原创 gdbserver

B 主机gdb -q Document/trunk/runtime/game/game。A主机 gdbserver :9101 game_2。这时候a主机已经跑来了。其他使用和方法一一样。

2023-07-21 16:16:13 62

原创 条件变量笔记

如果此时存在一个低优先级的线程在等待锁,那么一旦锁被释放,那么这个锁就会被低优先级的线程争抢去,而不会被wait的线程得到,导致wait线程阻塞,无法返回。, 只有本线程和要唤醒的线程,竞争这把锁的时候,,,,就不会存在这种情况.因为唤醒线程和解锁,都是需要再内核态完成的,而先解锁,再唤醒,内核会一次将这两个操作完成,这样就减少了用户态和内核态切换的次数,从而节省了资源。:唤醒后的线程在等待为该互斥锁加锁,一旦锁被释放,wait线程就会立即加锁,而不会发生上述,锁被抢占额度情况。

2023-06-21 17:46:19 389

原创 c++11 atomic 内存序

5.test_and_set() 函数检查 std::atomic_flag 标志,如果 std::atomic_flag 之前没有被设置过,则设置 std::atomic_flag 的标志,并返回先前该 std::atomic_flag 对象是否被设置过,如果之前 std::atomic_flag 对象已被设置,则返回 true,否则返回 false。3. 初始状态c++20之前不确定 ,c++20之后是false。7. c++20以前只提供了上面两个方法。

2023-06-15 16:54:26 463

原创 linux内存

同时堆是一个连续空间,并且堆内碎片由于没有归还 OS ,如果可重用碎片,再次访问该内存很可能不需产生任何系统调用和缺页中断,这将大大降低 CPU 的消耗。2.malloc小于128k的内存,使用brk分配内存, malloc大于128k的内存,使用mmap分配内存,在堆和栈之间找一块空闲内存分配(对应独立内存,而且初始化为0)brk分配的内存需要等到高地址内存释放以后才能释放(例如,在B释放之前,A是不可能释放的,这就是内存碎片产生的原因,什么时候紧缩看下面),而mmap分配的内存可以单独释放。

2023-06-13 14:34:49 468

原创 ws 升级为wss

1. 获取免费证书。

2023-05-15 11:35:13 218 1

原创 tcp 神秘的40ms 延迟,关闭nagle算法

默认 TCP_NODELAY=0,表示关闭 TCP_NODELAY 选项,也就是说,关闭了禁止延迟,也就是说有延迟,即采用了 Nagle 算法,会延迟 40ms。

2023-05-06 16:59:42 333

原创 cocos protobuf

不装这个 2.npm install -g protobufjs。

2023-04-27 20:10:44 77

原创 linux 各个版本区别

同一个版本的类unix往往有多个不同的安装镜像,这些镜像往往以livecd、livedvd、netinst等结尾,其中,带live的镜像是一个光盘启动的镜像,也就是说可以从该光盘启动进入系统并可以体验。一般而言,cd的容量小于dvd,所以cd版本的安装文件要小于dvd版本,所带的软件包也会少一些。也可以安装到计算机,但是有些内容可能还需要再次到网站下载(自动)liveCD版本:和liveDVD一样,也是一个体验版和DVD体验版唯一的区别就是CD的存储空间要小一些,文件也会小一些,里面的软件包少一点。

2023-04-20 12:17:33 571

原创 mysql杂七杂八

mysql

2023-03-23 20:32:46 410

原创 clion git 合并分支

clion git 合并分支

2023-03-10 17:47:39 342

原创 redis zset

redis zset

2023-03-06 11:32:05 321

原创 操作系统和进程的资源消耗内存

1、进程“需要的”虚拟内存大小,包括进程使用的库、代码、数据,以及malloc、new分配的堆空间和分配的栈空间等;1、进程当前使用的内存大小,包括使用中的malloc、new分配的堆空间和分配的栈空间,但不包括swap out量;2、假如进程新申请10MB的内存,但实际只使用了1MB,那么它会增长10MB,而不是实际的1MB使用量。Resident(pages) 应用程序正在使用的物理内存的大小 VmRSS/4。Lrs(pages) 被映像到任务的虚拟内存空间的库的大小 VmLib/4。

2023-02-21 17:43:19 322 1

原创 epoll 注册事件的时候,一个tcp占用多少内存

epoll 笔记

2023-02-20 10:37:41 902

原创 使用Clion优雅的完全远程自动同步和远程调试c++ , devlepoment

使用Clion优雅的完全远程自动同步和远程调试c++ , devlepoment

2023-02-17 17:41:44 156

原创 valgrind callgrind使用

callgrind使用

2023-01-11 15:50:41 555

原创 tcp 和udp的区别

特点:可靠传输(应答确认)、提供拥塞控制、全双工通信(允许通信双方的应用程序在任何时候都能发送数据,因为TCP连接的两端都设有缓存,用来临时存放双向通信的数据)。2. 线程安全,数据报协议自动维护消息的边界,多线程操作同一个描述符也不会出现粘包,半包的问题(每次从接收缓冲都是只能取回一个完整的包)。使用UDP编程,需要自己确保可靠性(参考tcp实现,设计心跳机制、应答确认、超时重传等)。注:UDP协议栈会在发送的时候分片,到了接收重组,每次组好了完整的包就丢给用户,不完整就丢掉,故,可能会出现丢包现象。

2022-12-12 11:57:36 209

原创 vscode配置remote ssh

vscode配置remote ssh

2022-12-07 19:15:20 5013

原创 gdb工具

执行下一条语句,如果该语句为函数调用,不会进入函数内部执行(即不会一步步地调试函数内部语句)然后使用run或者r命令开始程序的执行,也可以使用 run parameter将。执行下一条语句,如果该语句为函数调用,则进入函数执行其中的第一条语句。开始执行程序,在main函数的第一条语句前面停下来。跟踪查看某个变量,每次停下来都显示它的值。设置断点,程序运行到断点的位置会停下来。然后输入 file yourpram。继续程序的运行,直到遇到下一个断点。产看函数调用信息(堆栈)

2022-11-28 11:50:19 127

原创 c语言数组地址

【代码】c语言数组地址。

2022-11-16 22:21:42 599

原创 clion run qt 工程报错Error copying file “D:/Qt/Qt5.12.11/Tools/mingw730_64/bin/Qt5Cored.dll“

clion run qt 工程报错。

2022-10-24 18:42:10 852 2

eazax-cases-master.zip

皮皮的一些例子

2021-12-21

busybox-x86_64

Linux进程隐藏与检测1. 运行后门 nohup nc -l -p 13733 -e /bin/sh& 2. ps aux |grep ‘/bin/sh’ 查找进程PID mkdir /tmp/empty mount –bind /tmp/empty /proc/进程PID 3. cat /proc/$$/mountinfo 查看隐藏进程 cat /proc/mounts mount 4. 接触隐藏 umount /proc/进程PID 入侵检测之隐藏进程检测

2019-12-18

MySQL-community-5.1.72-1.rhel5.x86_64.rpm-bundle.tar

tar -xvf MySQL-community-5.1.72-1.rhel5.x86_64.rpm-bundle.tar MySQL-client-community-5.1.72-1.rhel5.x86_64.rpm MySQL-community-5.1.72-1.rhel5.x86_64.rpm-bundle.tar MySQL-community-debuginfo-5.1.72-1.rhel5.x86_64.rpm MySQL-devel-community-5.1.72-1.rhel5.x86_64.rpm MySQL-embedded-community-5.1.72-1.rhel5.x86_64.rpm MySQL-server-community-5.1.72-1.rhel5.x86_64.rpm MySQL-shared-community-5.1.72-1.rhel5.x86_64.rpm MySQL-shared-compat-5.1.72-1.rhel5.x86_64.rpm MySQL-test-community-5.1.72-1.rhel5.x86_64.rpm

2019-08-29

VA_X.dll,Visual Assist X安装说明

Visual Assist X安装说明 适用于VS2008至VS2015。 在Win7 ,Win8,Win10上可用 1. 安装Visual Assist 开始安装之前,先关闭VS。 双击运行VA_X_SetupXXX.exe (你看到的可能和下图略有区别,是没有关系的) 如果你的机器上没有VS2008,则不会弹出下面界面,而是直接显示Installation Complete表示安装完成。 点Install 点Next 如果遇到安全卫士提示,则允许安装 点Finish结束安装 2. 破解与注册 2.1 拷贝VA_X.dll 拷贝到哪里去,是个问题。把VA_X.dll拷贝到目标位置,如果存在则覆盖之。 (1)VS2008 直接拷贝到安装目录,如 C:\Program Files\Visual Assist\ (2)VS2010 (以下是Windows7和Windows8的操作方法) 拷贝到类似这个目录 C:\Users\你的用户名\AppData\Local\Microsoft\VisualStudio\10.0\Extensions\Whole Tomato Software\Visual Assist\10.9.2052.0 (3)VS2012及更高版本(以下是Windows7和Windows8的操作方法) 以VS2012为例,拷贝到类似这个目录 C:/Users/用户名/AppData/Local/Microsoft/VisualStudio/11.0/Extensions/XXXXXXX/ (xxxxx 是一个随机目录,里面有一个VA_X.dll文件,替换这个文件就行) 10.0是VS2010, 11.0是VS2012, 12.0是VS2013 注意:C:/Users/用户名/下的AppData是个隐藏目录   2.2 输入注册码 拷贝VA_X.dll后即完成破解。无需输入注册码。 3. 安装后的配置 此时已经安装完成。无需特殊配置,即可使用。 以下画面仅供参考: (1)更新提示 首次启动,可能会弹出以下界面,表示“已经检测到新版本,是否更新?”。点取消按钮。 (2) Tips of day提示 如下图所示,也不用管,直接叉掉即可。

2019-08-20

空空如也

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

TA关注的人

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