- 博客(81)
- 资源 (28)
- 收藏
- 关注

原创 SSL/TLS
SSL/TLS一、SSL/TLS 是什么?SSL/TLS的历史何处使用 TLS?为什么需要 TLS?TLS 如何工作?TLS 同时使用对称和非对称加密,为什么不只使用一个?对称加密(Symmetric Cryptography)1、TLS Handshake握手发生了什么?2、为什么需要握手?3、TLS使用什么加密算法来保护数据?4、为什么我们需要数字证书?5、为什么需要由证书颁发机构签名?6、什么是数字签名,如何生成?一、SSL/TLS 是什么?SSL(Secure Socket Laye
2021-01-26 17:13:44
1993

原创 Golang优雅初始化结构体
所谓优雅,即能够让扩展性更好,便于在后期扩展的时候,减少开发时间,以及更加易于添加功能。具体的实现,就是一次对于闭包的灵活使用(阅go-micro)。从示例代码main.go、service.go、options.go的实现来说明。main.gopackage mainfunc main() { srv := NewService( Name("golang"), Age(9)...
2018-12-02 18:01:53
8345
1

原创 Golang队列中间件开发总结
目前很多框架中都存在消息队列的中间件,例如ActiveMQ,RabbitMQ,ZeroMQ,Kafka等,基本都是封装好,足够我们使用。但是,我们如何自己去实现一个消息队列中间件呢? 由于公司需求,进行了golang实现消息队列中间件的开发,这里做一个总结,把自己的一个想法和实现的经验分享给大家,非个人开发没有源码提供,如有不足多多指教。 主要内容包括:队列服的作用与特性,什么试试有状态与无状...
2018-09-03 00:38:48
6982
1

原创 Ghost之远程终端管理
主要分析,客户端连接上主控端后,主控端主动要求进行终端管理后的一系列实现过程。一、主控端发起远控申请指令COMMAND_SHELL1、点击“终端管理”按钮后,主控端获取要进行远控的客户端(这里我习惯称为客户端,也有人称被控端为服务端)连接上来的套接字,然后向该客户端发送指令COMMAND_SHELL二、客户端对收到的远控申请处理1、客户端的工作线程WorkThread收到主控端...
2018-05-23 00:04:13
2156

原创 截图并使用libjpeg库压缩BMP为JPG与将JPG转换为BMP
使用libjpeg实现了对截屏后的BMP图片进行压缩为JPG格式和将JPG转换为BMP格式的操作。避免大家也碰壁,拿出来和大家分享。
2018-01-14 21:28:33
2000
1

原创 基于完成例程的重叠I/O网络模型
详细解释了网络重叠I/O模型中的完成例程,对相关难以理解的APi进行释义,附有详尽的代码。不足之处望大家多多指正,以促进共同进步
2017-11-01 02:12:23
2397
原创 TLS原理及实现
概念对称密钥既可以加密也可以解密的密钥非对称密钥密钥分为公钥和私钥两部分,公钥用于加密和验证签名,私钥用于解密和签名证书可理解为身份证,证书由证书机构颁发(可信第三方),证书中包括证书所有者的相关属性信息,并且证书可由证书机构的公钥进行验证,杜绝身份伪造。证书链由根证书衍生而来,例如根证书R给A颁发证书,A给B颁发证书,B给C颁发证书,最终R->A->B->C形成一条证书链。证书链确保了次级证书的合法性,并允许验证,验证的过程是逆向的C->B->A
2022-05-28 11:25:11
3397
原创 docker-compose 搭建 etcd 集群
搭建etcd集群准备工作安装好 docker 与 docker-compose下载etcd镜像:docker pull bitnami/etcd:latest最好关闭防火墙。如果遇到外部主机能ping通linux,但是不能访问docker容器的情况,需要开启防火墙,然后再关掉防火墙,最后重启docker即可。docker-compose.ymlversion: "3.0"networks: etcd-net: # 网络 driver: bridge
2021-04-06 19:56:20
2645
4
原创 优化缓存中锁机制带来的开销
在实现基本的FIFO、IFU、LRU或其他的淘汰算法的基础上,为了保证其并发安全,可以采用读写锁的方式。但在大量并发写的情况下,锁机制的开销将会明显的体现出来,这将会成为其中的瓶颈。为了达到足够的高性能,就必须解决并发情况下锁机制的开销。本文将讲解如何通过分片的思想来缓解并发下锁机制的开销。分片思想这里暂且将实现的缓存对象简单看作一个基于读写锁的map,当前其瓶颈即为并发时的锁开销。并发的情况是无法避免的,那如果将一个map下的开销分担到多个map下,这样锁机制的开销将会减小。其主要思想是:将缓存的数
2021-04-02 21:00:38
276
原创 grpc-gateway返回json时由于omitempty标签忽略默认值问题
问题由于json的omitempty标签,导致序列化时默认值会被忽略,出现如下返回结果:{ "status": {},}期待的返回结果:{ "status": { "code": 0, "message": "" },}早期的解决方法m := &runtime.JSONPb{OrigName: true, EmitDefaults: true}gwmux := runtime.NewServeMux(runtime.Wit
2021-03-27 11:48:27
1889
2
原创 Unbuntu配置JAVA开发环境
本文采用的离线的安装方式,所使用到的相关版本:JAVA JDK版本:15.0.2IntelliJ IDEA版本:2020.3.2安装 JAVA SDK下载SDKhttps://www.oracle.com/java/technologies/javase-downloads.html点击“JDK Download”将jdk-15.0.2_linux-x64_bin.tar.gz解压到/usr/local/jdk-15.0.2(或者解压后拷贝到/usr/local/jdk-15.0.2,
2021-03-17 08:04:18
185
原创 gRPC的通信方式概述
gRPC一共有四种通信方式:UNARY:一元通信方式CLIENT STREAMING:客户端流通信方式SERVER STREAMING:服务端流通信方式BIDIRECTIONAL STREAMING:双向流通信方式UNARY在这种情况下,为最简单的客户端与服务端模式,客户端发送一个消息后,阻塞等待服务端回复一个消息。CLIENT STREAMING在这种情况下,客户端将发送多个消息流,而后服务端回复一个消息。SERVER STREAMING在这种情况下,客户端仅发送一个消息,而后服务
2021-03-03 11:27:04
1678
原创 protocol buffers
关于 protocol buffers(protobuf),可以查阅 protocol buffers 官方文档,一切你想知道的如何安装、如何编译 .proto 文件、相关的语法都有详细的说明。注意:由于技术的更新迭代快,有可能对官方文档的更新不是那么及时,可能官方文档会导致一定的误导(亲历)。本文的记录有限,其中包括:了 protoc 工具在安装时的失败复盘、proto 常用语法,以及关于 GRPC 生成 golang 存根。一、环境配置protobuf 对应的工具为 protoc,即首要是安装
2021-02-06 15:11:36
184
原创 使用openssl创建并签署SSL/TLS证书
希望在生成 SSL/TLS 证书之前,您已经安装有 openssl 以及对 SSL/TLS 有了初步的了解。概述本文主要讲述CA的私钥和x509自签名证书的生成,服务器/客户端的私钥和CSR的生成,以及CA对服务器/客户端的CSR签名操作。初始文件包括server-ext.cnf、client-ext.cnf以及gen.sh,相关内容如下:server-ext.cnfsubjectAltName=DNS:*.study.com,DNS:*.study.org,IP:0.0.0.0client-e
2021-01-28 17:31:36
2539
2
原创 Hyperledger Fabric源码解析 Gossip-Emitter
分批发射器 batchingEmitter分批发射器的实现是为了解决来一条数据就处理一次所带来的效率问题。采用的思想是,将收到的数据累积到一定数量后再进行处理或者定时器超时进行就处理。我更喜欢将分批发射器叫做分批处理器。接口定义type batchingEmitter interface { // Add 添加要批处理的消息 Add(interface{}) // Stop 停止组件 Stop() // Size 返回要转发的挂起消息的数量 Size() int}batchin
2020-11-30 22:24:58
246
原创 ERROR: Package ‘pyrsistent‘ requires a different Python: 2.7.5 not in ‘>=3.5‘
注意看错误的上两行:指出我的python_version < "3"该条命令没错,但是接下来的Downloading产生了错误,也就是Collecting pyrsistent>=0.14.0失败,也就是说你的pyrsistent版本不是>=0.14.0的,需要更新下。查询当前的版本:pip install pyrsistent==?更新pyrsistent的版本:pip install pyrsistent==0.15.0...
2020-10-24 09:41:01
8868
原创 BTC-密码学原理
简介:本文主要介绍了关于1、密钥比特币中生成1.1 SHA-256 性质collision resistance:按照鸽笼原理,必然有两个输入映射到同一个地址,碰撞是客观存在的(x!=y, H(x)=H(y))。虽然碰撞是客观存在的,但是SHA-256碰撞的几率比地球爆炸还小。注:没有哪个hash函数能被数学证明是collision resistance,例如md5。hiding:hash函数的计算过程是单向的,不可逆的。collistion resisitance 与 hiding 可用于 d
2020-10-15 20:36:47
1421
1
原创 VS2015 使用 protocbuf-2.6.1安装及使用
VS2015 使用 protocbuf-2.6.1安装及使用一、安装二、使用一、安装1、下载:https://github.com/protocolbuffers/protobuf/releases/tag/v2.6.12、解压。3、进入vsprojects,双击 extract_includes.bat 生成 include 目录。4、点击 protobuf.sln,对(libprotobuf、libprotobuf-lite、libprotoc)点击菜单的项目—属性—配置属性—C/C+±–预处
2020-06-18 16:39:05
498
原创 MYSQL操作类
前序:没有找到以前封装的mysql的操作类,重新又写了一遍,着实让人头疼。希望能帮到大家。关于相关的配置:1、将你安装的MYSQL的include目录和lib库,分别加到(以VS举例)VS的包含目录于库目录(属性->VC++ 目录)2、将libmysql.dll拷贝到你的工程目录下sqlnet.h#ifndef __SQLNET_H#define __SQLNET_H#ifd...
2020-03-13 20:40:21
264
原创 线性回归
曾经有一段往事…某一天,我想去中国银行贷款,特此向周边的一些朋友询问了下他们的贷款情况,并做了张如下的表:工资年龄额度40002520000800032600006000273400075003350000120003980000通过上述的数据,我想预测下:如果我去银行贷款,银行会贷多少给我呢?如果我要贷50000,银行能...
2018-12-16 23:36:23
387
原创 简单插件式编程实现
最近接触到插件式编程,感觉是一种不错的思想。分享给大家两种实现Golang的插件式编程C++的插件式编程Golang的插件式编程实现原理Golang的插件式实现主要依赖于自身的断言机制和接口实现。通过统一插件的接口后,规定实现的接口必须满足指定接口的实现,然后注册到插件管理类,外部使用时直接通过插件管理对象实现调用指定的插件。注意:插件式编程与插件是有区别的,插件式编程是一种规...
2018-12-02 13:46:59
2887
1
原创 Golang洗牌算法
两种洗牌算法:1、Fisher-Yates2、Knuthtype Handle struct {}Fisher–Yates 洗牌算法// Fisher-Yates正向func (h *Handle) shuffle_FisherYates_Forward(cards []uint32, r *rand.Rand) { var size int = len(cards) var ...
2018-11-04 19:43:39
1761
原创 结合CGo对切片slice简单实现
在对自定义slice实现的过程中,体会到以下两点: 1、Go封装得确实比较好,但是Go中的指针也因此受到了大大的削弱,在Go中指针平常也就只能用来做引用传递。 2、对于Cgo的资料太少了,为此买了两本书,也就一本有略微提及。我希望你能从代码中找到你对CGo存在的疑问和解决办法。不多说,上代码package main/*#include <stdio.h>#inclu...
2018-08-06 23:48:19
1409
原创 面试总结一
1、基类的虚构函数为什么使用virtual?这种虚析构函数寻在的意义? virtual虚函数是动态绑定的基础(这很重要)!在动态绑定的过程中,我们使用的是基类的指针指向子类(例如B派生于A,A *pA = new B();),如果没有使用virtual实现动态绑定,在进行delete A;时,不会调用B的析构函数,如果B的析构函数中写有释放内存的源码,此时可能就会造成内存的泄漏。 1)何为动态...
2018-07-17 20:15:30
230
原创 红黑树
这里主要讲解红黑树的源码实现,并附上源码。具体参考书籍为《算法导论》首先,我们知道红黑树也是树的一种,所以在程序的设计上,它的大部分方法完全能够继承自普通树(父类)的方法,父类的存在可以使得在对树这种数据结构了解的同时,同时也注意程序的高聚合与低耦合性。原先在对二叉树与红黑树数据结构实现的时候,都是分为一个二叉树实现类,一个红黑树实现类,两个类中,往往好多方法都是重用,以至于这里copy过去,...
2018-07-06 22:05:30
204
模拟实现了TLS通信过程的全流程
2022-08-11
protocbuf-2.6.1.zip
2020-06-18
select网络模型
2017-10-25
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人