哈希

git 系列4(文件提交历史)

旧街凉风 提交于 2019-12-18 12:41:07
1 查看文件提交历史,可以用git log 命令 默认不使用任何参数的话,git log会提交时间列出的所有的更新,最近的排在最上面;每次更新都有一个 SHA-1 校验和、作者的名字和电子邮件地址、提交时间,最后缩进一个段落显示提交说明。 git log --stat快速查看文件有了哪些改动 git log -p -2 查看提交文件的不同之处,-2是说只显示最近两次的 另外还有pretty选项,可以指令使用制定的格式显示提交历史 例如 git log --pretty=oneline 在一行内显示提交的历史信息 还有short , full , fuller等格式 另外还可以用format 例如 git log --pretty=format:"%h - %an, %ar : %s" 选项 说明 %H 提交对象(commit)的完整哈希字串 %h 提交对象的简短哈希字串 %T 树对象(tree)的完整哈希字串 %t 树对象的简短哈希字串 %P 父对象(parent)的完整哈希字串 %p 父对象的简短哈希字串 %an 作者(author)的名字 %ae 作者的电子邮件地址 %ad 作者修订日期(可以用 -date= 选项定制格式) %ar 作者修订日期,按多久以前的方式显示 %cn 提交者(committer)的名字 %ce 提交者的电子邮件地址 %cd 提交日期 %cr 提交日期

我们来聊聊分布式

会有一股神秘感。 提交于 2019-12-17 09:23:45
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 大型主机时代已经井喷,集中式时代已经无法满足日益健壮复杂的业务和需求,互联网时代的到来,使得由集中式到分布式的革命犹然而生,网络化,微型化发展步伐迫切,分布式的需求越来越能适应需求,一线电商平台迈入分布式时代。 分布式官方定义为:所谓分布式系统顾名思义就是利用多台计算机协同解决单台计算机所不能解决的计算、存储等。 问题一、 将一个单机问题使用分布式解决,首先要解决的就是如何将问题拆解为可以使用多机分布式解决,使得 分布式系统中的每台机器负责原问题的一个子集。 1.特点: 分布性:分布式多台计算机在空间上可随意分布,机器的分布情况可以随时调整 对等性:分布式系统的计算机没有主从之分,没有控制整个系统的主机,也没有被控制的从机,组成分布式系统的所有计算机节点都是对等的,每个节点都是用 副本 的形式来数据冗余的方式保证数据的持久化。 并发性:同一个分布式系统的的多个节点会操作一份共享的资源和数据的分布式存储,如何高效准确的协调控制分布式并发成为了一个难题。 缺乏全局时钟:典型的分布式系统由多台计算机在空间上随意分布的多个进程组成,进程之间通过消息来进行相互通信,很难保证一个次顺问题,比如分布式中的全局唯一ID如何生成等等问题。 2.环境: 通信异常:分布式可以说是多个节点之间依靠不稳定的网络进行通信

工作量证明及哈希算法

久未见 提交于 2019-12-16 23:12:59
什么是工作量证明: 1、工作的结果作为数据加入区块链成为一个区块 2、完成这个工作的人会获得奖励(这也就是通过挖矿获得比特币) 3、整个“努力工作并进行证明”的机制,就叫工作量证明 为什么采用哈希算法: 1、不可逆:无法从一个哈希值恢复原始数据,哈希并不是加密 2、唯一性:对于特定的数据,只能有一个哈希值,并且这个哈希值是唯一的 3、防篡改:改变输入数据中的一个字节,导致输出一个完全不同的哈希 哈希算法特征: 1、正向快速:给定明文和hash算法,在有限时间和有限资源内能计算出hash值 2、逆向困难:给定hash值,在有限时间内很难逆推出明文 3、输入敏感:原始输入信息修改一点信息,产生的hash值会有很大的不同 4、冲突避免:很难找到两段内容不同的明文,使得他们的hash值一致(发生冲突) main.go package main import ( "core" "fmt" "strconv" ) func main() { bc := core.NewBlockChain() bc.AddBlock("Send 1 BC to Ivan") bc.AddBlock("Send more BC to Ivan") for _,block := range bc.Blocks { fmt.Printf("Prev hash: %x\n", block.PrevBlockHash)

Redis源码剖析--哈希t_hash

馋奶兔 提交于 2019-12-15 18:42:15
不知不觉,从第一篇写Redis源码分析开始,已经过了快一个月了,想想自己的进度,简直慢的吓人啊,这样下去不行,后面得加快脚步了。今天分析的是Redis的又一个数据类型—哈希,哈希键的底层编码形式有OBJ_ENCODING_ZIPLIST和OBJ_ENCODING_HT两种,其中,前者的底层数据结构为压缩列表,后者的底层数据结构为字典。如有对这两个结构不清楚的,可以点击跳转去温故复习一下。 Hash概述 前面我们提到,Redis对于其五个对用户公开的数据类型统一采用RedisObject管理。Hash类型只需要修改encoding字段就能表示该对象为一个哈希对象。为了便于大家理解,我还是不厌其烦的先罗列出RedisObject的结构体定义。 typedef struct redisObject { unsigned type:4; // hash类型 unsigned encoding:4; // hash结构,此字段为OBJ_ENCODING_ZIPLIST或OBJ_ENCODING_HT unsigned lru:LRU_BITS; // 上一次操作的时间 int refcount; // 引用计数,便于内存管理 void *ptr; // 指向底层的数据结构 } robj; 如果底层编码是ziplist的话,hash键按照如下方式排列

区块链技术入门汇总

吃可爱长大的小学妹 提交于 2019-12-15 05:36:51
前言 区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。所谓共识机制是区块链系统中实现不同节点之间建立信任、获取权益的数学算法。 区块链是比特币的一个重要概念,它本质上是一个去中心化的数据库,同时作为比特币的底层技术。区块链是一串使用密码学方法相关联产生的数据块,每一个数据块中包含了一次比特币网络交易的信息,用于验证其信息的有效性(防伪)和生成下一个区块。 狭义来讲,区块链是一种按照时间顺序将数据区块以顺序相连的方式组合成的一种链式数据结构, 并以密码学方式保证的不可篡改和不可伪造的分布式账本。 广义来讲,区块链技术是利用块链式数据结构来验证与存储数据、利用分布式节点共识算法来生成和更新数据、利用密码学的方式保证数据传输和访问的安全、利用由自动化脚本代码组成的智能合约来编程和操作数据的一种全新的分布式基础架构与计算方式。 区块链专业术语  1地址   解释1:   比特币地址由一串字符和数字组成,常见地址以1开头,常见的交易是比特币从一个地址转移到另一个地址。   解释2:   一个比特币“账户”的唯一标识,谁拥有这个地址里的比特币?持有这些地址所对应的“密钥”的人。   2私钥   用来解锁对应地址的一串字符。参考阅读比特币所有权及隐私问题   3签名   解释1:   一个让人可以证明所有权的数学机制。   解释2:  

深入剖析HashMap应用原理

霸气de小男生 提交于 2019-12-14 22:08:21
Hashing(散列法或哈希法)的概念 散列法(Hashing)是一种将字符组成的字符串转换为固定长度(一般是更短长度)的数值或索引值的方法,称为散列法,也叫哈希法。由于通过更短的哈希值比用原始值进行数据库搜索更快,这种方法一般用来在数据库中建立索引并进行搜索,同时还用在各种解密算法中。 HashMap概念和底层结构 HashMap是基于哈希表的Map接口的非同步实现。此实现提供所有可选的映射操作,并允许使用null值和null键。HashMap储存的是键值对,HashMap很快。此类不保证映射的顺序,特别是它不保证该顺序恒久不变。 HashMap实际上是一个“链表散列”的数据结构,即数组和链表的结合体。 数组:存储区间连续,占用内存严重,寻址容易,插入删除困难; 链表:存储区间离散,占用内存比较宽松,寻址困难,插入删除容易; Hashmap综合应用了这两种数据结构,实现了寻址容易,插入删除也容易。 hashMap的结构示意图如下: HashMap的基本存储原理以及存储内容的组成 基本原理:先声明一个下标范围比较大的数组来存储元素。另外设计一个哈希函数(也叫做散列函数)来获得每一个元素的Key(关键字)的函数值(即数组下标,hash值)相对应,数组存储的元素是一个Entry类,这个类有三个数据域,key、value(键值对),next(指向下一个Entry)。 例如,

文本相似度计算基本方法小结

一笑奈何 提交于 2019-12-14 20:28:40
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 相似度计算方面 Jaccard相似度:集合之间的Jaccard相似度等于交集大小与并集大小的比例。适合的应用包括文档文本相似度以及顾客购物习惯的相似度计算等。 Shingling:k-shingle是指文档中连续出现的任意k个字符。如果将文档表示成其k-shingle集合,那么就可以基于集合之间的 Jaccard相似度来计算文档之间的文本相似度。有时,将shingle哈希成更短的位串非常有用,可以基于这些哈希值的集合来表示文档。 最小哈希:集合上的最小哈希函数基于全集上的排序转换来定义。给定任意一个排列转换,集合的最小哈希值为在排列转换次序下出现的第一个集合元素。 最小哈希签名:可以选出多个排列转换,然后在每个排列转换下计算集合的最小哈希值,这些最小哈希值序列构成集合的最小哈希签名。给定两个集合,产生相同哈希值的排列转换所占的期望比率正好等于集合之间的Jaccard相似度。 高效最小哈希:由于实际不可能产生随机的排列转换,因此通常会通过下列方法模拟一个排列转换:选择一个随机哈希函数,利用该函数对集合中所有的元素进行哈希操作,其中得到的最小值看成是集合的最小哈希值。 签名的局部敏感哈希:该技术可以允许我们避免计算所有集合对或其最小哈希签名对之间的相似度。给定集合的签名,我们可以将它们划分成行条

流行哈希

元气小坏坏 提交于 2019-12-13 04:36:54
Popular Hashing Algorithms Message Digest (MD) Algorithm Secure Hash Algorithm (SHA) RACE Integrity Primitives Evaluation Message Digest (RIPEMD) Whirlpool RSA 来源: CSDN 作者: ftwfff 链接: https://blog.csdn.net/ftwfff/article/details/103455511

【架构】Nginx、HAProxy、LVS三者的优缺点分析

喜欢而已 提交于 2019-12-11 03:24:13
一、Nginx服务器 Nginx优点: 1、工作在网络7层之上,可针对http应用做一些分流的策略,如针对域名、目录结构,它的正规规则比HAProxy更为强大和灵活,所以,目前为止广泛流行。 2、Nginx对网络稳定性的依赖非常小,理论上能ping通就能进行负载功能。 3、Nginx安装与配置比较简单,测试也比较方便,基本能把错误日志打印出来。 4、可以承担高负载压力且稳定,硬件不差的情况下一般能支撑几万次的并发量,负载度比LVS小。 5、Nginx可以通过端口检测到服务器内部的故障,如根据服务器处理网页返回的状态码、超时等,并会把返回错误的请求重新提交到另一个节点。 6、不仅仅是优秀的负载均衡器/反向代理软件,同时也是强大的Web应用服务器。LNMP也是近些年非常流行的Web架构,在高流量环境中稳定性也很好。 7、可作为中层反向代理使用。 8、可作为静态网页和图片服务器。 9、Nginx社区活跃,第三方模块非常多,相关的资料在网上比比皆是。 Nginx常规的和HTTP请求和相应流程图: Nginx缺点: 1、适应范围较小,仅能支持http、https、Email协议。 2、对后端服务器的健康检查,只支持通过端口检测,不支持url来检测。比如用户正在上传一个文件,而处理该上传的节点刚好在上传过程中出现故障,Nginx会把上传切到另一台服务器重新处理,而LVS就直接断掉了

比特币:一种点对点电子货币系统

落花浮王杯 提交于 2019-12-10 09:59:37
摘要. 一种完全的点对点电子货币应当允许在线支付从一方直接发送到另一方 而不需要通过一个金融机构。数字签名提供了部分解决方案,但如果仍需一个 可信任第三方来防止双重支付,那就失去了电子货币的主要优点。我们提出一 种使用点对点网络解决双重支付问题的方案。该网络通过将交易哈希进一条持 续增长的基于哈希的工作量证明链来给交易打上时间戳,形成一条除非重做工 作量证明否则不能更改的记录。最长的链不仅是被见证事件序列的证据,而且 也是它本身是由最大 CPU算力池产生的证据。只要多数的 CPU算力被不打 算联合攻击网络的节点控制,这些节点就将生成最长的链而超过攻击者。这种 网络本身只需极简的架构。信息将被尽力广播,节点可以随时离开和重新加入 网络,只需接受最长的工作量证明链作为它们离开时发生事件的证据。 1. 简介 互联网贸易已经变得几乎完全依赖金融机构作为可信任第三方来处理电子支付。尽管对于 大部分交易这种系统运行得足够好,但仍需忍受基于信任模型这个固有缺点。由于金融机 构不可避免的需要仲裁纠纷,完全的不可撤销交易实际是做不到的。仲裁成本增加了交易 成本,限制了最小实际交易额度从而杜绝了日常小额交易的可能性,而且由于不支持不可 撤销支付,对不可撤销服务进行支付将需要更大的成本。由于存在交易被撤销的可能性, 对于信任的需求将更广泛。商家必须警惕他们的客户,麻烦他们提供更多他本不必要的信 息