11
Jul
2024

无为而治:管理的最高境界

标签: 反省 管理
       管理者的作用到底是什么呢?这个问题延续了几千年。相传舜帝在治理天下时,非常注重顺应自然规律和民众意愿。他不与民争、顺应民众、不妄为。在他的治理下,天下太平、百姓安居乐业、社会和谐稳定。汉代的文景之治、唐代的贞观之治等时期,也都出现了社会安定、经济繁荣、文化昌盛的局面。这些时期的统治者都注重顺应自然规律和民众意愿,让社会自行发展和成长。而这种治国理念后被道家提炼成“无为而治”而流传至今,是中国著名的管理哲学。

阅读全文>>

07
Jul
2024

延伸思维害了你

标签: 思考
延伸思维不处不在并时刻影响着我们,然后我们确很少关注。延伸思维是一种顺势思考,指我们的大脑会自动地扩展所看到、所听到所理解、所理解的事物。比如我们看到一片草坪,便会延伸地认为周围都是树木或者环境优雅的土地;又如当我们在某个领域获得成功后,往往会将这种成功经验套用到其他领域,期望能够快速取得类似的成就。这种思考是潜意识的,甚至你都没有向那方面想,但有一种 “感觉” 在导致着你。然而,这种思维方式并不总是最佳的解决方案。

阅读全文>>

10
Mar
2024

ClimbFun-01-呼狗岩

标签: 骑行 户外
点击查看原图

阅读全文>>

09
Jan
2023

网络知识串烧

标签: 网络
最近因为一些原因,从事了一些网络相关工作 ,感觉这块水还是挺深的,特别是无线这块,有很多新的概念,现把学到的基础知识列举如下,希望对大家有帮助。

阅读全文>>

23
Jul
2022

RISING SUN

标签: 骑行 思考
22
Jul
2022

武功山徙步

标签: 徙步

mmexport1656191830041.jpg

02
Jul
2021

在 win10 远程桌面(RDP)中启用显卡加速与 UDP 连接

标签: 效能

远程桌面(RDP)默认使用的是 CPU 模拟的显示,性能很低,在使用大型软件(如 Photoshop)时便会很吃力。之前网上的说法都是通过策略组中的 “计算机配置->管理模板->Windows组件->远程桌面服务->远程桌面会话主机->远程会话环境” 中的 “将硬件图形适配器应用于所有远程桌面服务会话” 配置启动,但是没有作用。


正确的方法是除了打开以上的配置之外,还需要开启显卡支持,因为显卡商考虑到利润,不会让你共享显卡,好在疫情原因让 nVidia 压力山大,于是勉强在开发者论坛放了一个设置工具,下载链接:https://developer.nvidia.com/nvidia-opengl-rdp,这个链接需要注册成开发者才能访问,下载后执行重启计算机就可以了。至于 AMD 显卡,可能也有类型的工具,目前我还没有找到。


开启 UDP 连接可以提升远程桌面的响应能力,只需要修改注册表,方法为用管理员模式打开注册表,然后运行如下命令:

Set-ItemProperty 'HKLM:/Software/Policies/Microsoft/Windows NT/Terminal Services/Client' 'fClientDisableUDP' 0


UDP 使用的端口亦为 3389,如果你在 NAT 后面,别忘了做端口映射。

20
Jun
2021

仰望星空

20
Jun
2021

GAME START

点击查看原图
17
Jun
2021

一种数组压缩算法

标签: 算法

我们在开发中后台应用或者中间件的时候,会存储一些数据在内存中以加快访问速度。随着数据量的增加,除了可以放置于堆外,还可以通过实时压缩来缓解。今天就给大家介绍一种压缩整形数组的方式

数组指 long[] 或者 int[] 类型,主要用来存索引数据。当数据量变大时,首先想到的就是缩减每个数字占用的空间,因为我们都知道一个 long 类型是占 8 个字节,而 int 也是占用 4 个字节。就以正数而言,int 3 个字节以上表示 2^24 = 16M 即 1600 百万以上的数字,一般我们是用不到的,大多数情况下高位都是闲置着的,所以可以将高位去掉,只存储用到的那几个字节(见图1)。当然为了可以还原,我们需要记录这个数字到底使用了几位。这里有两种方式:一是借用几位来表示,就拿 long 来说,我们只需要借用 3 位就可以表示用到的字节数了,另一方面,2^60 以后已经是非常大的数了,几乎用不到,所以我们借用也不会产生额外的效果;另一种就是利用字节最高位表示还有剩余数据(见图2)。这样一来,我们就把 long 或者 int 数组压缩成了 byte 数组,里面所有用到的字节都是有表示意义的。

1.jpg
图1

2.jpg
图2

这样一样我们就可以顺利地将数字进行压缩与解压缩了,在传输场景下可以很好的解决空间问题,这都是常见的思路。但是如果我们需要压缩后的数组仍然具备下标访问的能力怎么办?之前每个数字都是固定长度,我们可以通过 [单个数字占用的字节数]*[下标] 很快地找到对应的地址,但是压缩过后每个数字占用的空间不是一样的,这种方式就失效了。如果我们要取下标为 200 的数据,那我们就得线性查找 200 次?那么时间复杂度就由 O(1) 下降为了 O(n)。有没有更好的办法呢?当然是有的。我们可以建立索引(图3),即:

  1. 将数字分为若干个桶,每个桶的大小可心调节
  2. 我们使用另一个数组,大小为桶的数量,存储每个桶所第一个数据所在的下标
  3. 在查找时我首先使用二分查找到对应的桶,再使用线性查找到对应的数据

3.jpg
图3

由于在桶内是线性查找,因此不会太大,一般是 1KB 或者 4 KB。这样一来,我们查找速度就可以大大提升,接近 O(logn)。使用这套方式,经测试,在 4 亿随机数据的情况占用的空间可以缩减 30% 左右,但这并不是终点。利用桶的性质,我们可以只在桶内第一个元素存原数字,后面的都存一个偏移量,因为当数据不会明显离散(即一会儿是十几,一会是几十亿那种),可以很好地缩减数据大小,比如两个数都占用了 3 个字节,存偏移量后,第二个数字就可以使用 1~2 个字节来表示了。当然如果你对数组本身的顺序没有要求的话,还可以先对数组进行排序,这种偏移量的效果就可以暴表了。最理想的情况下,可以压缩至原来的 30%。

D3035B08-6314-4ee1-9A2D-D9E16C2E0978.png
测试压缩效果(未排序)

UPDATE:2021-06-20

这里还有优化空间,之前采用二分查找是因数我们采用定长的桶,每个桶存储的数字数量不定,但如果我们采用变长桶,让每个桶存储 N 个数,那么,便可以直接通过 “整除+求余” 的方式快速打到数所在的桶,查询效率进一步提升。

源码:seflerZ/zipped-num-array: Compressed number array and acts exactly like the original array like long[] and int[] (github.com)

1 2 3 4 5 6 ... »