源码

btcd源码解析——交易创建

喜你入骨 提交于 2020-02-28 22:08:37
文章目录 1. 写在前面 2. 相关命令 3. 从btcctl到btcwallet 4. btcwallet中的实现——创建新交易 4.1. wallet变量的传入 4.2. 创建output 4.2.1. 将字符串解码为地址 4.2.1.1 ECDSA public key 格式 4.2.1.2 Common Bitcoin addr 格式 4.2.2. 构建锁定脚本 4.2.3. 构建output 1. 写在前面 从本节开始,我们从源码层面关注比特币交易的构建过程。 其中,我们尤其会关注比特币解锁脚本(为了使用 UTXO )和新的锁定脚本(为了生成新的 UTXO )的创建细节。我们相信通过跟踪两种脚本的创建过程,我们将对于比特币的交易细节理解得更为深入。 新交易的创建会涉及到两个代码仓库( btcd 和 btcwallet )编译生成的三个可执行文件( btcd , btcctl ,和 btcwallet )。 btcd 和 btcwallet 代码版本号如下所示: btcd 版本:[git commit log]: ed77733ec07dfc8a513741138419b8d9d3de9d2d btcwallet 版本:[git commit log]: ae9416ad7623598121a7c8ad67a202c1be767155 读者如果没有阅读过之前的这两篇博客

RTFSC——SQLMap源码(慢慢更给自己)

半世苍凉 提交于 2020-02-28 19:23:16
因为主要是自己看SQLMap源码有个记录,所以写上来的东西,对我个人来说就是想到什么写什么,比较杂乱,推荐看参考中各位大牛的文章。 ============================================================== 流程图 目录结构 流程 源码详读 ============================================================== 流程图 目录结构 sqlmap-master ├── doc ├── extra ├── ISSUE_TEMPLATE.md ├── lib ├── plugins ├── procs ├── README.md ├── shell ├── sqlmapapi.py ├── sqlmap.conf ├── sqlmap.py ├── tamper ├── thirdparty ├── txt ├── udf ├── waf └── xml doc : 一些文档,Readme.pdf 内容跟wiki内容大部分一致,值得一看 extra : 一些外部工具 lib : 核心源码实现 plugins :插件。generic子文件为通用的一些相关插件、 dbms子文件夹具体到各种特定数据库相关的一些插件(连接器、枚举、指纹、文件系统、语法、接管相关)会在exploit SQL

ubuntu 下部署源码管理器(git +gitea+mysql)

生来就可爱ヽ(ⅴ<●) 提交于 2020-02-28 17:25:56
之前源码服务器都是部署在内网服务器上,但是最近需要用到外网上,所以在外网服务器上部署一下,并记录一下过程。 1 首先是安装一下 MySQL ,我用的是 ubuntu 系统  (1)首先根据官网 地址 https://dev.mysql.com/downloads/ 找到apt链接 也可以手动下载,这里 直接输入下面命令 wget https://repo.mysql.com//mysql-apt-config_0.8.14-1_all.deb  (2) 接下来 输入以下命令(非 root 用户需加上 sudo ) dpkg -i mysql-apt-config_0.8.14-1_all.deb   (3)以上输入命令后会弹出设置,这里是让你选择要安装哪些功能,我这里直接按默认功能,确定之后 会提示 使用 apt-get update 更新mysql安装包链接 (4)接下里依次输入 apt-get update apt-get install mysql-server 中间会有弹窗提示输入密码,和密码验证方式 2 配置 MySQL 远程访问   (1) 本地连接 MySQL mysql -uroot -p   输入密码   (2)查看用户相关信息 use mysql; select host, user, authentication_string, plugin from

如何正确的开始用 Go 编程

主宰稳场 提交于 2020-02-28 16:12:56
本文会演示简单的Go软件包的开发过程,并介绍了 go 命令行工具,这是我们获取,构建和安装Go软件包和命令的标准方法。 go工具要求你以特定方式组织代码。我们会介绍Go安装启动和运行的最简单方法,一定要仔细阅读啊。 组织代码结构 概要 Go 程序员一般会将他们的源代码存放在一个工作区中(多个项目放在一个工作区) 工作区中包含许多由 git 管理的代码仓库(也可以是其他版本控制工具管理的) 每个代码仓库包含一个或者多个 Go package 每个 package 由单一目录下的一个或多个Go 源码文件组成 package 的目录路径决定了其导入路径 与其他编程语言不同的是,在其他编程语言里每个项目都有自己的工作区,并且工作区都与版本控制系统紧密相关。 工作区 工作区是一个目录层级,这个目录层级在顶层有两个目录: src 目录,存放源代码文件。 bin 目录,存放可执行二进制文件。 go 命令工具会把 src 中的Go 文件构建生成二进制文件放在 bin 目录中。 src 子目录通常包含用 git 管理的多个代码仓库,他们对应一个或多个Go 包的开发源码。 一个典型的工作区中会包含多个源码仓库,对应多个可执行命令源码和包源码。大多数 Go 程序员会把他们的Go 源码和所有依赖的包都放在单一的工作区中。 下面的例子可以让你更好的了解Go 的工作区大概的样子: bin/ hello #

[dubbo 源码之 ]1. 服务提供方如何发布服务

北城余情 提交于 2020-02-28 16:12:29
服务发布 启动流程 1.ServiceConfig#export 服务提供方在启动部署时,dubbo会调用 ServiceConfig#export 来激活服务发布流程,如下所示: Java API: // 1. 创建ServiceConfig实例 ServiceConfig<igreetingservice> serviceConfig = new ServiceConfig<>(); // 2. 设置应用程序配置 serviceConfig.setApplication(new ApplicationConfig("deep-in-dubbo-first-provider")); // 3. 设置注册中心 RegistryConfig registryConfig = new RegistryConfig(" zookeeper://127.0.0.1:2181/ "); serviceConfig.setRegistry(registryConfig); // 4. 设置接口和实现类 // 5. 设置服务分组和版本 // dubbo中,服务接口+服务分组+服务版本 唯一的确定一个服务,同一个接口可以有不同版本,方便维护升级 serviceConfig.setInterface(IGreetingService.class); serviceConfig.setRef(new

[dubbo 源码之 ]1. 服务提供方如何发布服务

陌路散爱 提交于 2020-02-28 16:08:33
服务发布 启动流程 1.ServiceConfig#export 服务提供方在启动部署时,dubbo会调用 ServiceConfig#export 来激活服务发布流程,如下所示: Java API: // 1. 创建ServiceConfig实例 ServiceConfig<IGreetingService> serviceConfig = new ServiceConfig<>(); // 2. 设置应用程序配置 serviceConfig.setApplication(new ApplicationConfig("deep-in-dubbo-first-provider")); // 3. 设置注册中心 RegistryConfig registryConfig = new RegistryConfig("zookeeper://127.0.0.1:2181/"); serviceConfig.setRegistry(registryConfig); // 4. 设置接口和实现类 // 5. 设置服务分组和版本 // dubbo中,服务接口+服务分组+服务版本 唯一的确定一个服务,同一个接口可以有不同版本,方便维护升级 serviceConfig.setInterface(IGreetingService.class); serviceConfig.setRef(new

源码分析HashMap的几个问题(JDK1.7)

大城市里の小女人 提交于 2020-02-28 15:54:25
如何存储数据 (put、get) put数据 public V put(K key, V value) { if (table == EMPTY_TABLE) { inflateTable(threshold); } if (key == null) return putForNullKey(value); //计算key的hash值 int hash = hash(key); //根据hash和数组的长度计算索引,即数组存放的位置 int i = indexFor(hash, table.length); for (Entry<K,V> e = table[i]; e != null; e = e.next) { Object k; //如果值存在,则新值替换老值,并返回老值 if (e.hash == hash && ((k = e.key) == key || key.equals(k))) { V oldValue = e.value; e.value = value; e.recordAccess(this); return oldValue; } } modCount++; //将算出的key的hash值,key,value ,以及索引存放在entry对象中,并加入table数组中 addEntry(hash, key, value, i); return null;

安装CPULimit到Linux(源码)

天大地大妈咪最大 提交于 2020-02-28 14:22:30
运行环境 适用系统:所有Linux系统 当前版本:无 硬件要求:无 安装过程 1、安装依赖 root@localhost:~# apt-get -y install git 2、从GitHUB中克隆源码到本地 root@localhost:~# git clone https://github.com/opsengine/cpulimit.git 3、编译并安装 root@localhost:~# cd cpulimit/src root@localhost:~/cpulimit/src# make root@localhost:~/cpulimit/src# cp cpulimit /usr/bin 4、限制指定进程的CPU百分比 下面演示的是将进程号为“11830”的进程的CPU限制在百分之200。 root@localhost:~# nohup cpulimit --pid 11830 --limit 200 & 来源: https://www.cnblogs.com/network-ren/p/12376998.html

JDK源码那些事儿之FutureTask

耗尽温柔 提交于 2020-02-28 14:02:51
上一篇文章中我们已经介绍了ThreadPoolExecutor线程池,在通过submit方法提交执行任务时曾提及可以跟踪任务执行状态的FutureTask,那么在jdk中是如何实现的呢? 前言 JDK版本号:1.8.0_171 在使用ThreadPoolExecutor时如果我们不需要获取任务执行的状态和结果,直接调用ThreadPoolExecutor.execute(Runnable command)方法即可,然而当我们需要知道提交的任务执行状态和结果时,我们该如何进行呢? jdk本身为我们提供了 Callable 接口和 Future 接口来实现我们需要的功能。其中 FutureTask 是实现了 Future 接口的实现类 FutureTask 可用于异步获取执行结果或取消执行任务。通过传入Runnable或者Callable的任务给FutureTask(可以在下面的构造方法源码中看到),直接调用其run方法或者放入线程池执行,之后可以在外部通过FutureTask的get方法异步获取执行结果。所以,FutureTask适用于比较耗时的计算,主线程可以在完成自己的任务后,再去获取结果以减少等待的消耗 Callable 类似于Runnable,和Runnable不同的是run方法无任何返回值,而Callable提供了call泛型接口,返回类型是传递进来的V类型

装饰者模式与代理模式的差异

柔情痞子 提交于 2020-02-28 10:59:04
前言 在还没毕业的去面试的时候,被问到动态代理与策略模式有什么区别,当时想了想也没想出来什么合适的回答,最会草草越过,之后面试完毕进行了相关的查阅,还是懵懵懂懂的,到现在debug SpringMVC源码的时候,遇到 initHandlerAdapters 初始化的后,一直纠结此处是使用了责任链模式还是策略模式,然后就想到了之前遇到的动态代理和装饰者模式。 来源: oschina 链接: https://my.oschina.net/u/2555967/blog/3156190