go

通过blockchain_go分析区块链交易原理

耗尽温柔 提交于 2021-01-14 13:40:58
原文链接-石匠的Blog 1.背景 在去中心化的区块链中进行交易(转账)是怎么实现的呢?本篇通过blockchain_go来分析一下。需要进行交易,首先就需要有交易的双方以及他们的认证机制,其次是各自的资金账户规则。在分布式账本系统里面,需要有机制能够准确验证一个用户身份以及对账户资金的精确计算,不能出现一丁点差错。在区块链中交易通过Transaction表示,而账户的自己并不是在每个节点上保存每个用户的一个余额的数字,而是通过历史交易信息计算而来(历史交易不可篡改),其中的关键机制是UTXO。 2.身份认证 在区块链身份认证是采用RSA非对称加密体系完成,每个用户在会拥有一个“钱包”,钱包是通过安全的椭圆曲线加密算法生成,其中包括一对公私钥。私钥自己保留不能暴露,用作加密,签名等,公钥公开给所有人,用于信息验证等。只要是用私钥签名的信息,就可以通过配对的公钥解码认证,不可抵赖。在blockchain_go中,钱包实现如下: // Wallet stores private and public keys type Wallet struct { PrivateKey ecdsa.PrivateKey PublicKey []byte } // NewWallet creates and returns a Wallet func NewWallet() *Wallet {

QQ空间(Qzone)爬虫,手机扫描登陆后即可并发下载相册的相片/视频,嗯~就是这么简单

↘锁芯ラ 提交于 2021-01-14 10:56:24
qq-zone QQ空间爬虫,多协程并发下载相册的相片/视频 介绍 使用GO语言多协程并发式开发的QQ空间爬虫,通过手机QQ扫码登陆后即可全自动下载相册的相片和视频 环境要求 go 1.14.4 (我的环境是这个版本,其他版本应该也没问题) go mod 使用说明一 把项目下载下来 git clone https://github.com/qinjintian/qq-zone.git 进入到qq-zone目录 构建项目 go build 后会在当前目录下生成一个 qq-zone.exe 可执行文件(windows 10 环境,其他环境自行百度构建) 双击运行 qq-zone.exe,根据终端提示输入QQ账号,然后当前目录下会生成扫码登陆的二维码,扫码即可登陆进行自动下载 使用说明二 对于不想看代码实现过程,只想直接可以运行使用的情况可以直接下载 qq-zone.exe 可执行文件到本地电脑直接双击运行即可 截图 GITHUB代码已开源,传送门 https://github.com/qinjintian/qq-zone 若项目思路对您有帮助,请不吝点个赞呗~~~ 在此谢过!!! 来源: oschina 链接: https://my.oschina.net/u/3833010/blog/4898263

Walking Between Houses(贪心+思维)

家住魔仙堡 提交于 2021-01-14 07:37:51
Walking Between Houses There are n n houses in a row. They are numbered from 1 1 to n n in order from left to right. Initially you are in the house 1 1. You have to perform k k moves to other house. In one move you go from your current house to some other house. You can't stay where you are (i.e., in each move the new house differs from the current house). If you go from the house x x to the house y y, the total distance you walked increases by | x − y | |x−y| units of distance, where | a | |a| is the absolute value of a a. It is possible to visit the same house multiple times (but you can't

《HelloGitHub》第 25 期

Deadly 提交于 2021-01-14 07:25:52
《HelloGitHub》第 25 期 兴趣是最好的老师, HelloGitHub 就是帮你找到兴趣! 简介 分享 GitHub 上有趣、入门级的开源项目。 这是一个面向 编程新手 、 热爱编程 、 对开源社区感兴趣 人群的月刊,月刊的内容包括: 各种编程语言的项目 、 让生活变得更美好的工具 、 书籍、学习笔记、教程等 ,这些开源项目大多都是非常容易上手,而且非常 Cool。主要是希望大家能动手用起来,加入到 开源社区 中。 会编程的可以贡献代码 不会编程的可以反馈使用这些工具中的 Bug 帮着宣传你觉得优秀的项目 Star 项目⭐️ 在浏览、参与这些项目的过程中,你将学习到 更多编程知识 、 提高编程技巧 、 找到编程的乐趣 。 🎉 最后 HelloGitHub 这个项目就诞生了 🎉 以下为本期内容 |每个月 28 号发布最新一期| 点击查看往期内容 C 项目 1、 swipe-workspace :基于 libinput 实现 Linux 系统下通过二指滑动控制面板,切换屏幕的程序。虽然功能简单,且不支持全平台。但是十分推荐这种自己动手实现一个实用的功能这种行为,这是非常有成就感的事情 CSS 项目 2、 tabler :一套基于 Bootstrap 4 免费开源的 Dashboard 模版 Go 项目 3、 dynamo.cli :AWS DynamoDB 是一项快速灵活的

你心中最高大上最牛逼的技术到底是什么大声告诉我

一曲冷凌霜 提交于 2021-01-14 03:46:58
借用一句话, 西北玄天一片云,乌鸦落进凤凰群 满网都是英雄汉,谁是君来谁是臣 **高以下为基,贵以贱为本 互联网技术的核心根基就是 TCP/IP,TCP/IP 的实现依赖于Linux socket API【我们的项目大部分运行在上面】 没有它们各种高大上牛逼的技术就无从建立起来。而这根基对大家所用的java,go,py,php,c,c++,nodejs...都是一样的,只不过是基于Linux api做了各种各样的封装百家争鸣,百花齐放,跟易经里的阴阳构成64卦一样,当你刚开始撸程序时,可能并不会觉得基础的重要性,甚至可能几年内一直是框架crud boy,你并不会察觉到基础核心Linux socket api! 每天被各种新技术词汇遮蔽双眼,而基础知识你一直的错失和鄙视低估,就想一步飞龙在天,达到九五爻之位,并没有“以下为基” “以贱为本” ** 甚至对于其它知识点你都持“下贱之态”只想与天齐名,从不脚踏实地从坤做起。 先给总结图 你再看下面的内容 下面就是要告诉你所谓的牛逼技术到底是什么回事!!! 我们测试一下数据库,java,python,go,c/c++,php,redis,docker进行测试 【测完你会发现点东西】 然后你再看图比较好,免得大家天天为了这个框架,那个框架,这个语言,哪个语言在b乎,快手,抖音,b站吵的跟少妇一样[只是吐槽一下] ^_^

理解Go协程与并发

强颜欢笑 提交于 2021-01-14 02:54:08
协程 Go语言里创建一个协程很简单,使用 go 关键字就可以让一个普通方法协程化: package main import ( "fmt" "time" ) func main(){ fmt.Println("run in main coroutine.") for i:=0; i<10; i++ { go func(i int) { fmt.Printf("run in child coroutine %d.\n", i) }(i) } //防止子协程还没有结束主协程就退出了 time.Sleep(time.Second * 1) } 下面这些概念可能不太好理解,需要慢慢理解。可以先跳过,回头再来看。 概念: 协程 可以理解为纯用户态的线程,其通过协作而不是抢占来进行切换。相对于进程或者线程,协程所有的操作都可以在用户态完成,创建和切换的消耗更低。 一个进程内部可以运行多个线程,而每个线程又可以运行很多协程。线程要负责对协程进行调度,保证每个协程都有机会得到执行。当一个协程睡眠时,它要将线程的运行权让给其它的协程来运行,而不能持续霸占这个线程。同一个线程内部最多只会有一个协程正在运行。 协程可以简化为三个状态: 运行态 、 就绪态 和 休眠态 。同一个线程中最多只会存在一个处于运行态的协程。 就绪态协程 是指那些具备了运行能力但是还没有得到运行机会的协程,它们随时会被调度到运行态

程序员如何避免陷入内卷?

橙三吉。 提交于 2021-01-13 23:07:30
前几天有个后端程序员的朋友跟我吐槽说,年初立志:今年升职加薪,进阶架构师。 结果,疫情之下工作差点没保住。今年大部分的时间也一直在重复着「增删改查」,回顾这一年基本没啥进步,内卷严重啊。 实际情况中,往往很多人都是这样。很多后端开发工作年限越高,反而更加面临危机。 薪资不好涨、大厂不好跳、体力在倒退...... 更可怕的是,这样的情况,只是出现在了自己身上!!! 如何才能进阶成一个好的后端开发呢? 简单地说,就是既具备技术整合能力,也通晓技术细节,从而实现技术驱动业务的突破,而不是纠结于某个中间件或存储服务。 IT 技术发展日新月异,想要不被淘汰,一句话: “ 永远不要停止学习 ”。 任何程序员,都得时刻学习。在工作中你如果只会某一语言,但是这样会局限你的工作能力及职业发展。多花费一些时间学习一些最近比较流行的架构体系,比如 Spring Cloud。学以致用,不仅有助于工作,更有助于自己以后的发展。 相信关注我公众号的朋友们,都是追求进步的朋友。拉勾教育的 12.12 年末最后知识大促, 全场专栏都可以砍价到 1 元。 都是原价 98 的专栏,现在 1 块钱就能解锁等于白给。有几个还是 拉勾教育付费用户评选的最具价值 Top10 的专栏 ,给大家推荐推荐: ① 「Java 并发编程核心 78 讲」 原价98,现在 发起砍价仅需 1 元 想成为一名优秀的 Java 开发,学好并发

2020-11-29:手写代码:堆排序。

你。 提交于 2021-01-13 22:02:13
福哥答案2020-11-29: 1,先让整个数组都变成大根堆结构,建立堆的过程: 1)从上到下的方法,时间复杂度为O(N*logN)。 2)从下到上的方法,时间复杂度为O(N)。 2,把堆的最大值和堆末尾的值交换,然后减少堆的大小之后,再去调整堆,一直周而复始,时间复杂度为O(N*logN)。 3,堆的大小减小成0之后,排序完成。 golang代码如下: package class04 import ( "fmt" "testing" ) /* 堆排序 1,先让整个数组都变成大根堆结构,建立堆的过程: 1)从上到下的方法,时间复杂度为O(N*logN) 2)从下到上的方法,时间复杂度为O(N) 2,把堆的最大值和堆末尾的值交换,然后减少堆的大小之后,再去调整堆,一直周而复始,时间复杂度为O(N*logN) 3,堆的大小减小成0之后,排序完成 与堆有关的题目 已知一个几乎有序的数组。几乎有序是指,如果把数组排好顺序的话,每个元素移动的距离一定不超过k,并且k相对于数组长度来说是比较小的。 请选择一个合适的排序策略,对这个数组进行排序。 */ //go test -v -test.run TestHeapSort func TestHeapSort (t *testing.T) { fmt.Println( "----------------------" ) if true {

面试官:插入 100 条数据用时最短的方法是?

故事扮演 提交于 2021-01-13 19:59:01
作者 | 孤独键客 链接 | juejin.im/post/5d255ab9e51d454f73356dcd 最近群里的学习氛围又浓厚了起来。 群友又抛出了一道面试题,有人给出了答案,看完后,是否还有改进的地方,留言评论,一起精进吧! 多线程插入(单表) 问:为何对同一个表的插入多线程会比单线程快?同一时间对一个表的写操作不应该是独占的吗? 答:在数据里做插入操作的时候,整体时间的分配是这样的: 链接耗时 (30%) 发送query到服务器 (20%) 解析query (20%) 插入操作 (10% * 词条数目) 插入index (10% * Index的数目) 关闭链接 (10%) 从这里可以看出来,真正耗时的不是操作,而是链接,解析的过程。 MySQL插入数据在写阶段是独占的,但是插入一条数据仍然需要解析、计算、最后才进行写处理,比如要给每一条记录分配自增id,校验主键唯一键属性,或者其他一些逻辑处理,都是需要计算的,所以说多线程能够提高效率。 多线程插入(多表) 分区分表后使用多线程插入。 预处理SQL 普通SQL,即使用Statement接口执行SQL 预处理SQL,即使用PreparedStatement接口执行SQL 使用PreparedStatement接口允许数据库预编译SQL语句,以后只需传入参数,避免了数据库每次都编译SQL语句,因此性能更好。 String