摘要:
反转一个字节说的是位序反转,别将它和大端转小端混淆了,所谓大端和小端指的是字节序。
字节位序反转的实现算法很多,就是看看谁的算法效率更高了。 阅读全文
摘要:
微软在.NET中对串口通讯进行了封装,我们可以在.net2.0及以上版本开发时直接使用SerialPort类对串口进行读写操作。
为操作方便,本文对SerialPort类做了一些封装,暂时取名为**SerialPortClient**。 阅读全文
摘要:
约束告知编译器类型参数必须具备的功能。 在没有任何约束的情况下,类型参数可以是任何类型。 编译器只能假定 System.Object 的成员,它是任何 .NET 类型的最终基类。 如果客户端代码使用不满足约束的类型,编译器将发出错误。 通过使用 where 上下文关键字指定约束。
最常用的泛型约束为where T : struct、where T : class、where T : new()。 阅读全文
摘要:
二分查找(英语:binary search),也叫折半查找(英语:half-interval search),是一种在有序数组中查找特定元素的搜索算法。所以,二分查找的前提是数组必须是有序的。
二分查找只适用顺序存储结构。为保持表的有序性,在顺序结构里插入和删除都必须移动大量的结点。因此,二分查找特别适用于那种一经建立就很少改动、而又经常需要查找的线性表。
对那些查找少而又经常需要改动的线性表,可采用链表作存储结构,进行顺序查找。链表上无法实现二分查找(更准确的说链表上使用二分查找得不偿失)。 阅读全文
摘要:
BitMap的基本思想就是用一个bit位来标记某个元素对应的Value,而Key即是该元素。由于采用了Bit为单位来存储数据,因此可以大大节省存储空间。
BitMap可以看成一种数据结构。 阅读全文
摘要:
分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移到Cassandra,因为Cassandra没有顺序ID生成机制,所以开发了这样一套全局唯一ID生成服务。
Snowflake ID组成结构:正数位(占1比特)+ 时间戳(占41比特)+ 数据中心(占5比特)+ 机器ID(占5比特)+ 自增值(占12比特)。
第一位为未使用,接下来的41位为毫秒级时间(41位的长度可以使用69年),然后是5位datacenterId和5位workerId(10位的长度最多支持部署1024个节点) ,最后12位是毫秒内的计数(12位的计数顺序号支持每个节点每毫秒产生4096个ID序号)一共加起来刚好64位,为一个Long型(转换成字符串长度为18)。 阅读全文
摘要:
之前接手同事的项目,是一个类似于服务端后台的Winform程序,主界面隐藏起来,只再任务栏显示程序图标。
整个项目里面没有日志记录功能,全靠Console.WriteLine打印信息。自己调试时可以用VS查看输出的内容,但给测试人员使用时很不方便。
最终,我选择将Console.WriteLine的输出内容记录到日志文件。
代码很简单,就不过多解释了,重点注意Console.SetOut方法 、 ConsoleLogTextWriter类即可,日志类Log根据需求自己实现。 阅读全文
摘要:
SqlSugar是EF数倍性能,另外在批量操作和一对多查询上也有不错的SQL优化。高扩展性 ,支持自定义拉姆达函数解析、扩展数据类型、支持自定义实体特性,外部缓存等。功能全面,虽然SqlSugar小巧可功能并不逊色于EF框架。创新、持续更新 ,向下兼容。 阅读全文
摘要:
之前开发一个小工具,内部实现一个状态机,并显示状态机当前状态及状态间的转移过程。我使用了Stateless开源状态机类库及一个开源自定义箭头控件。自定义箭头控件是HZHControls其中一个控件,我单独把它从源码中独立出来。添加、删除、替换了一部分注释,更改了一些内部事件触发逻辑,将外部依赖的 public static void SetGDIHigh(Graphics g)函数移到控件当前代码中。 阅读全文
摘要:
本人的博客创作将会以博客园为主要发布平台,大部分原创或转载博客将发布至博客园,少数零碎笔记或小问题解决方法将继续发布至CSDN博客。 阅读全文