05 2022 档案
摘要:选取4张牌,最大数字为10,组合数为715,其中149个组合无解,566个组合有解。 (1, (1, 1, 1, 1), 'no ans') (2, (1, 1, 1, 2), 'no ans') (3, (1, 1, 1, 3), 'no ans') (4, (1, 1, 1, 4), 'no a
阅读全文
摘要:随机取四个数字,用加、减、乘、除、括号5种运算,计算结果等于二十四。 穷举法 import itertools # 括号的组合只存在如下五种表达式结构 卡特兰数 formats = ['(({0[0]}{1[0]}{0[1]}){1[1]}{0[2]}){1[2]}{0[3]}', '({0[0]}
阅读全文
摘要:大Key的特征 一般特征: 单个key存储大value。 hash,set,zset,list中存储过多数据。 一个集群存储了上亿的key。 具体描述: 一个STRING类型的Key,它的值为5MB(数据过大)。 一个LIST类型的Key,它的列表数量为20000个(列表数量过多)。 一个ZSET类
阅读全文
摘要://升序排列 template <typename Comparable> int partition(vector<Comparable>& v, int left, int right) { if (left >= right) return left; int i = left, j = ri
阅读全文
摘要:双指针写法 递归 template <typename Comparable> int partition(vector<Comparable>& v, int left, int right) { if (left >= right) return left; int i = left, j =
阅读全文
摘要:function reloadModule(module_name) local old_module = package.loaded[module_name] or {} package.loaded[module_name] = nil require(module_name) local n
阅读全文
摘要:一般算法 void mRandn(int n, int m) { for (int i = 0; i < n && m > 0; ++i) { if (rand() % (n - i) < m) { cout << i << ends; --m; } } } 选取数目满后,可以提前终止。 蓄水池抽样
阅读全文
摘要:锁的本质:操作的序列化、队列化 虽然不同的语言可能会提供不同的锁接口,但是底层调用的都是操作系统的提供的锁。 不同的高级语言只是在操作系统的锁机制基础上进行了些封装而已 硬件 原子操作是指不可被中断的一个或者一组操作。 硬件提供原子指令,支持基本类型。 总线锁 在cpu芯片上有一个HLOCK Pin
阅读全文
摘要:使用位运算的注意事项: 位操作只能用于整形数据,对float和double类型进行位操作编译器会报错。 位操作符的运算优先级比较低,尽量使用括号来确保运算顺序。 注意:一般运算不一定比位运算慢。编译器已经做的很好了,会把一般运算优化为位运算。 某些自作聪明的优化反而会误导编译器,使得编译器不进行更棒
阅读全文
摘要:查表法 unsigned char reverse8(unsigned char c) { static unsigned char sta[16] = {//不多不少的静态数据 0x00,0x08,0x04,0x0C,0x02,0x0A,0x06,0x0E,0x01,0x09,0x05,0x0D,
阅读全文
摘要:TCP Loop Connect:tcp自己连上自己 详见:http://www.rampa.sk/static/tcpLoopConnect.html
阅读全文
摘要:grafana模板批量导出 KEY:grafana configuration--API keys--Add API key 创建一个即可 #!/bin/bash KEY=eyJrIjoiNFZIMU1oaG1QQ3dVREpHMzVCZE1RUG94WXZzdmR4VHUiLCJuIjoidGVz
阅读全文
摘要:windows下的批处理没有直接获取时间戳的方式。 但是,可以通过第三方来获取。 ::get timestamp set " % Echo WScript.Echo(parseInt((new Date()).getTime()/1000)) for /f %%
阅读全文
摘要:一个通用批处理脚本,用于执行定时任务。 @echo off :begin choice /t 5 /c YN /d Y /M "Y:work N:stop. please input:" if errorlevel 2 goto stop if errorlevel 1 goto work :wor
阅读全文
摘要:全服匹配:系统随机将一些玩家分到一组。 常规匹配 流程图 缺陷 异步过程 集群治理:负载均衡、数据容灾 数据缓存:数据冲突 开发和部署复杂,分布式的必然 两级匹配 流程图 核心:两级匹配机制(本地匹配+云端匹配) 区别 报名数据存储在gameserver,利用了gameserver天然的分布式 匹配
阅读全文
摘要:fswatch是一个文件修改监视器,当指定的文件或者文件夹被修改的时候会受到通知。 Github: https://github.com/emcrisostomo/fswatch 特点 支持几种特定于OS的API,跨平台 允许递归目录监视 使用包含和排除正则表达式执行路径过滤 支持自定义记录格式 此
阅读全文
摘要:直接看源码:endl是一个模板函数,接收一个ostream输出流参数。 endl:换行+刷新缓冲区。把缓冲区数据写入 ends:空字符(’\0’)标记结束。不同的操作系统对’\0’处理的方式也不同,有的输出一个空格,有的什么都没有。 flush:刷新缓冲区 template <class _Elem
阅读全文
摘要:C++11新加了两个关键字:auto和decltype。 用于在编译期推导出变量或表达式的类型,方便开发者简化代码。 auto 编译期推导变量类型。 例:auto x = 1; 推导规则 必须初始化。 在一行定义多个变量时,不能有二义性。 无法推导出模板参数。 不能定义数组 不能用于函数参数 cv推
阅读全文
摘要:需求:禁止基类指针指向子类 方法:将继承方式改为protected、private 原因:对象只能访问类的public权限的成员
阅读全文
摘要:做单元测试的时候,为了验证类的私有方法或变量,需要将访问权限都改为public。 为了不改动源代码,可以在编译时,添加宏定义替换权限 CPPFLAGS=-Dprotected=public -Dprivate=public 绝大部分情况下是不会出现问题的。 注意到C++的默认规则,默认权限是priv
阅读全文
摘要:epoll既支持水平触发也支持边缘触发,默认是水平触发。 水平触发(LT) 当被监控的文件描述符上有可读写事件发生时,会通知用户程序去读写,他会一直通知用户,如果这个描述符是用户不关心的,它每次都返回通知用户。 读缓冲区不为空时, 读事件触发。写缓冲区不为满时, 写事件触发。 水平触发时,逻辑简单,
阅读全文
摘要:git status时报错“fatal:Unable to create".../.git/index.lock”。 一开始因为是权限问题,后来发现是磁盘空间不够了。 删除一些废弃文件后,再次执行git就好了。
阅读全文
摘要:call_once是c++11中引入的新特性,用于保证某个函数只调用一次,即使是多线程环境下,它也可以可靠地完成一次函数调用。一般配合once_flag变量。 特别适用于多线程时某个初始化只执行一次的场景。 若调用call_once一切顺利,将会翻转once_flag变量的内部状态,再次调用该函数时
阅读全文
摘要:noexcept关键字是c++11之后新增的。 该关键字会告诉编译器,被修饰的函数不会发生异常,有利于编译器对程序做更多的优化。 编译器做代码生成时,胡加一些额外的代码包裹原始代码,当出现异常时可以抛出一些相关的堆栈错误信息,包含:错误位置、错误原因、调用顺序和层级路径等信息。 当使用noexcep
阅读全文
摘要:C++11新增的关键字thread_local,表示对象的生命周期属于线程存储期。 线程局部存储(Thread Local Storage,TLS)是一种存储期(storage duration),对象的存储是在线程开始时分配,线程结束时回收,每个线程有该对象自己的实例 如果类的成员函数内定义了 t
阅读全文
摘要:分派/派发 dispatch 变量被声明时的类型叫做变量的静态类型(Static Type)。 变量所引用的对象的真实类型又叫做变量的实际类型(Actual Type)。 根据对象的类型而对方法进行的选择,就是分派(Dispatch)。 分派时期 根据分派生的时期,可以将分派分为两种,静态分派和动态
阅读全文