- 博客(537)
- 资源 (7)
- 收藏
- 关注
原创 自己动手写数据库:实现一个小型 SQL 解释器(下)
以上代码的调试演示过程请在 B 站搜索 coding 迪斯尼查看相关视频。本节我们完成 SQL 解释器的最后一部分,它涉及到数据的删除和更改,首先我们看删除语句的解析。
2023-09-01 17:12:08 1301 1
原创 区块链系统探索之路:私钥的压缩和WIF格式详解
在前面章节中,我们详细介绍了公钥的压缩,在比特币网络中,一个私钥可以对应两个地址,一个地址是由未压缩公钥所生成的地址,另一个就是由压缩公钥所创建的地址,从公钥到区块链地址的转换算法,我们在这里给出详细描述和代码实现,本节我们看看私钥的压缩以及相关的WIF数据格式。搞笑的是私钥”压缩“后,其长度反而比压缩前增加了一个字节。而“压缩”方法也相当简单,就是在私钥末尾增加一个字节01,例如如果私钥的数据为...
2023-08-12 09:30:54 1551
原创 区块链系统探索之路:钱包地址的实现
在区块链,特别是比特币网络,一个非常关键的组件是钱包。它主要用来实现“价值转移”,既然要转移,那就必须要有转移人和接收人,在转移过程中,我们必须确保转移的发送必须由资产的所有者发起,这就是私钥的作用,一笔交易要生效必须由资产的所有人使用它的私钥确认后才能发起,同时要有办法准确找到价值的正确接受者,这就是公钥的作用,公钥类似于银行账号用于接收转移的资产。在前面章节我们介绍过,私钥是一个随机数,而公钥...
2023-07-02 14:16:00 1455 1
原创 区块链系统探索之路:椭圆曲线上点”+“操作的代码实现
上面情况就对应点"0”,虽然上面直线跟曲线没有第三个交点,但是我们可以“定义”这条直线跟曲线在“无限远”处相加,而那个交点就是"0",于是这种情况下直线跟曲线的两个交点互为“相反数”,如果我们把上面交点记作a,那么下面的那个交点就对应为-a, 当曲线上两个点的连线与y轴平行时,我们把这两个点的“+“运算结果记作"0”。在椭圆曲线上选择任意两点,他们执行"+"操作后,第三点在哪里从数学上是无法预料的,这就形成了椭圆曲线能加密的基础。在区块链应用中,首先需要选定曲线上一个特定点G,然后产生集合{1。
2023-03-19 13:13:57 629 3
原创 自己动手写编译器:从NFA到DFA
前面我们看到,一个DFA节点本质上对应一组NFA节点,因此当我们使用move 和epsilon闭包操作得到一组NFA节点后,我们需要看看是不是已经有DFA节点对应到了生成的NFA节点集合,如果有了,说明对应的DFA节点已经生成,这个操作由函数compareNfaSlice和hasDfaContainsNfa完成,如果当前得到的NFA节点集合没有对应的DFA节点,那么就使用addDfaState函数去创建一个新的DFA节点,然后将其加入到dstates数组中。上一节我们完成了使用NFA来识别字符串的功能。
2023-01-07 21:57:29 1191 1
原创 自己动手写编译器:使用NFA状态机识别字符串
在前面章节中我们构建了NFA状态机,现在我们看看如何使用它来识别给定字符串是否合法。首先我们先构造如下正则表达式对应的NFA,在input文件的表达式部分输入:({D}.{D} | {D}.{D})这个表达式的目的是识别浮点数,用我们前面做好的代码生成的NFA状态机如下:这里我们需要引入两个个概念及其对应操作,首先是epsilon-clousure操作, 它表示给定一系列初始状态后,然后找到从这些...
2022-11-28 09:30:54 454
原创 高并发和大数据下的高级算法与数据结构:如何快速获取给定年龄区间的微信用户数量或快速获取美团中购买量前k的品类
使用count-min-sketch算法解决海量数据的统计难题
2022-11-13 14:37:26 1188 1
原创 自己动手写数据库:记录管理器的设计和实现
在数据库中,数据以”记录“作为一个单元来存储,例如一个表的“一行”就对应一条记录。假设我们有一个表叫STUDENT,其中有name, age, sex, class等字段,那么一条记录的信息就由这四个字段对应的信息合成。一条记录如何存储并不是一个简单的事情,例如我们需要考虑如下因素:1,一条记录是否应该全部存储在一个区块中2,一个区块存储的记录是否应该全部来自同一张表3,记录中每个自动的大小是否应...
2022-10-21 16:29:43 348
原创 自己动手写编译器:从正则表达式到NFA状态机
在编译器开发中有两个非常重要的工具名为lex和yacc,他们是编译器的生成器。本质上我们不需要一行行去完成编译器的代码,只需要借助这两个工具,同时制定好词法解析和语法解析的规则后,这两个工具就会自动帮我们把代码生成,我们后续的任务就是使用go语言将这两个工具实现。为了更好的理解我们要开发的GoLex,我们先熟悉一下lex工具的使用。在Centos上安装lex的命令为:yum install fle...
2022-09-27 09:00:33 964
原创 己动手写编译器:GoLex程序的基本情况介绍
本节我们的目的是,在给定正则表达式后,将其转换为非确定性有限状态自动机数据结构,后者会进一步生成一个跳转表,从而实现字符串匹配的功能。我们首先看输入,输入是一个后缀名为lex的文件,基本内容如下:%{ FCON = 1 ICON = 2%}D [0-9]%%(e{D}+)?%%在编译器开发中有一系列工具链,链条中第一个叫lex, 它的作用是你可以将字符串识别对应的正则表...
2022-09-22 14:29:32 234
原创 自己动手写编译器:while,for,do等循环语句的中间代码生成
编译原理,实现循环体的代码生成,本节处理的语法结构为有:while, do...while和break
2022-06-19 12:00:41 972
一个java实现的简易编译器
2016-02-18
一个android 文本比对app的实现代码
2015-11-16
Android 4.4 App Development Essential
2014-11-21
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人