自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

欧阳桫的技术博客

寸土寸金,寸言寸心,寸取天下慰平生

原创 漫谈Go语言后端开发

为什么使用Go语言做后端开发?简单高效:几乎所有主流的编程语言如Java、C++、PHP、Python、JavaScript等等都是可以用于服务端开发的,Go语言作为后起之秀,在语言层面具有语法简洁、执行效率高(底层语言)的特点;相比之下,Java和Python、PHP都显得低效,C++则太过麻烦,而Go则可以做到简单与高效兼顾;高并发:Go语言是主打并发、为并发而生的,其出发点即是瞄准大数...

2019-02-14 21:47:08 10097

原创 漫谈Go语言与区块链

Go语言优势高并发:百万级并发能力,令所有其它语言黯然失色;简洁:语法简洁媲美Python,学习成本低,开发速度快;高效:执行效率媲美C++;底层语言:意味着C能做的事情Go都可以做;博采众长:简化的C语言指针 + Java的内存管理/异常处理/反射 + Python的多返回值/一行声明多个变量;谷歌:谷歌嫡出的战略性语言你懂的;应用领域:Web、容器、微服务、区块链…总结:Go...

2018-12-20 01:09:34 5507 2

原创 自定义控件-继承法

在布局文件中使用自定义的控件→ 声明自定义的命名空间: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:mobile="http://com.kitty.widget" android:layout_width="fill_parent"...

2019-03-14 22:28:26 352 1

原创 自定义控件-组合法

→ 在布局中使用自定义的组合控件(本例不带自有命名空间): <com.kitty.widget.LabelEditText android:layout_width="fill_parent" android:layout_height="wrap_content" labelFontSize="16" ...

2019-03-14 22:28:22 216

原创 Golang精编100题1:选择题

1.【初级】下面属于关键字的是()A. funcB. defC. structD. class参考答案:AC2.【初级】定义一个包内全局字符串变量,下面语法正确的是()A. var str stringB. str := “”C. str = “”D. var str = “”参考答案:AD3.【初级】通过指针变量 p 访问其成员变量 name,下面语法正确的是()A. ...

2019-03-14 22:27:37 1260

原创 Golang精编100题2:填空题

1.【初级】声明一个整型变量i__________参考答案:var i int2.【初级】声明一个含有10个元素的整型数组a__________参考答案:var a [10]int3.【初级】声明一个整型数组切片s__________参考答案:var s []int4.【初级】声明一个整型指针变量p__________参考答案:var p *int5.【初级】声明一个key为字符串...

2019-03-14 22:27:32 357

原创 Golang精编100题3:判断题

1.【初级】数组是一个值类型()参考答案:T2.【初级】使用map不需要引入任何库()参考答案:T3.【中级】内置函数delete可以删除数组切片内的元素()参考答案:F4.【初级】指针是基础类型()参考答案:F5.【初级】 interface{}是可以指向任意对象的Any类型()参考答案:T6.【中级】下面关于文件操作的代码可能触发异常()file, err := os.O...

2019-03-14 22:27:25 417

原创 Golang精编100题4:程序输出

1 写出下面代码输出内容package mainimport "fmt"func main() { defer_call()}func defer_call() { defer func() { fmt.Println("打印前") }() defer func() { fmt.Println("打印中") }() defer func() { fmt.

2019-03-14 22:27:20 513

原创 Golang面试精编1

简单介绍一下Golang?谷歌开发的一种系统编程语言;它具有内置的垃圾收集机制;支持高并发;代码可以编译成单个可执行二进制文件,不需要添加库或运行时环境即可在服务器上执行;Golang是否可以声明一个类?可以,type Person struct{…}Go是否支持泛型?(陷阱问题)否,泛型是方便的,但是它们在类型系统和运行时的复杂性方面付出了代价。Go语言的解决方案就是...

2019-03-14 22:27:14 1229

原创 Golang面试精编2:并发相关

简述goroutine调度器模型?go为什么有如此强大的并发能力——得益于其goroutine调度器?简述goroutine并发模型?MPG模型:goroutine的并发模型可以归纳为MPG模型;MPG概念:线程(machine,系统线程,物理线程)-内核(processor)-协程(goroutine,用户线程,逻辑线程);多对多调度模型:整体调度遵循多对多模型,多个协程(约百万级)...

2019-03-14 22:27:08 963

原创 5.12 Go语言破解SSH服务器

需求和思路分析现在的很多小伙伴们都拥有了自己的云服务器了,lots of them!平时大家是怎么做服务器管理的呢?相信多数人都是通过SSH客户端连接过去的吧;无论PUTTY还是XShell,我们只需要一个登陆密码,就能轻松地登陆到远程服务器终端,然后对我们的服务器做任何事情;只需要一个密码就可以了!Go语言有SSH连接的第三方库,参数自然是用户名、密码、远程IP和端口,而密码我们可以...

2019-02-21 16:48:00 702

原创 5.11 Go语言文本大数据处理(2):文件分割与入库

需求分析上一节我们对文本大数据进行了读入和清洗,这一节我们把清洗后的数据存入MySQL数据库,清洗过后的有效信息约为1800万条;思路分析要想提高数据写入的速度,我们一方面要做并发的数据库写入,一方面又要尽量减少操作的次数,一次性插入尽可能多的记录;最终的方案如下:主要的性能瓶颈其实是主协程对文本的读取速度,可以事先对文件进行分割操作,然后并发地做数据读入;主协程逐条读...

2019-02-19 13:53:38 1062

原创 5.10 Go语言文本大数据处理(1):读入、清洗、分类

需求分析如图是一个大小达到1.3G的纯文本大数据,其中记录了情人节当天帝各大宾馆的开房数据~我们对这一大数据文本进行读取、清洗、分类、入库;读取文本大数据通过ioutil.ReadFile(filename)API可以傻瓜式地一次性读入全部数据//一次性将全部数据载入内存(不可取)func main011() { //一次性将全部数据载入内存(不可取) contentBy...

2019-02-18 15:57:05 1761

原创 5.9 Go语言项目实战:驾考系统

项目需求考场签到,名字丢入管道;只有5个车道,最多供5个人同时考试;考生按签到顺序依次考试,给予考生10%的违规几率;每3秒钟巡视一次,发现违规的清出考场,否则输出考场时序良好;所有考试者考完后,向MySQL数据库录入考试成绩;成绩录入完毕通知考生,考生查阅自己的成绩;当前目录下的成绩录入MySQL数据库,数据库允许一写多读;再次查询成绩使用Redis缓存(二级缓存);整理优化...

2019-01-16 17:52:19 1009

原创 4.12 并发技术:sync包同步调度综合案例

同步调度概述Go语言的并发中,当使用go关键字开辟若干新的协程时,如果不加干涉,它们会完全并发地得到执行;而所谓调度,就是在并发的局部植入一些串行和同步的操作,让某些协程有逻辑上的先后关系;执行同步调度,可以通过管道读写阻塞和Go语言SDK提供的sync包下的API两种方式;Go语言的官方文档推荐我们使用管道的读写阻塞功能来执行这些同步操作,并称使用sync包为“低水平编程”而事实上...

2019-01-16 12:03:09 212

原创 4.11 并发技术:原子操作

概述sync/atomic包下提供了原子操作的系列API官方文档的解释是:atomic包提供了底层的原子级内存操作,对于同步算法的实现很有用。这些函数必须谨慎地保证正确使用。除了某些特殊的底层应用,使用通道或者sync包的函数/类型实现同步更好。应通过通信来共享内存,而不通过共享内存实现通信。它是使用互斥锁进行同步操作的一种替代方案原子操作由底层硬件支持,而锁则由操作系统提...

2019-01-11 17:46:34 178

原创 4.10 并发技术:条件变量案例

案例1:服务器负载控制监听最大客户端连接数服务端协程:只要服务器过载,就通知控制协程,并进入阻塞等待控制协程:受到服务端预警,削减客户端数量,并通知服务端(预警已解除)package mainimport ( "fmt" "math/rand" "sync"

2019-01-11 17:26:04 167

原创 4.9 并发技术:条件变量

概述sync包下的Cond对象能够帮我们实现并发中对任意对象的值的监听当不满足条件时,我们进行阻塞等待而当条件满足时,我们又能以通知的形式通知等待协程这有点类似并发中的观察者模式案例说明在下面的例子中,投资者监听比特币的市场行情当行情下跌时,投资者协程阻塞等待等待上涨通知,行情上涨时进行投资市场协程在比特币上涨时通知投资者协程package mainimport (...

2019-01-11 17:14:12 142

原创 4.8 并发技术:只执行一次

sync.Once概述sync包下的Once对象可以保证某个函数在多任务并发过程中只被执行一次var once sync.Onceonce.Do(task())案例下面的案例中,我们开辟10条协程一起追杀比尔,但保证比尔只被杀死一次即Kill(bill)在并发中确保只被执行一次package mainimport ( "fmt" "sync" &

2019-01-11 17:06:57 296

原创 5.8 Go语言项目实战:点对点聊天

需求摘要实现一个分布式点对点的聊天系统,所有节点都是对等的,不需要中央服务器实现注册节点名称,节点之间通过节点名称发起会话思路分析节点同时具备服务端和客户端的职能服务端只负责接收其它节点主动发送过来的消息客户端只负责主动向其它节点发送消息通信都用短连接,服务端收完消息/客户端发完消息都断开conn——一方面是节约IO资源,另一方面是为了使逻辑清晰节点名称注册到【注册服务器】(...

2019-01-11 16:57:45 1091 1

原创 Go语言算法:切片处理

判断切片相等func AreEquivalentSlice(temp, answers []interface{}) bool { if len(temp) != len(answers) { return false } else { for i, v := range temp { //先判断类型是否相同 if reflect.TypeOf(v) != reflect...

2019-01-04 11:57:05 243

原创 Go语言算法:排序算法

选择排序/*选择排序,正序排列*/func SortSliceSelected(slice []int) { for i:=0;i<len(slice)-1;i++{ for j:=i;j<len(slice);j++{ if slice[j] < slice[i]{ slice[i],slice[j] = slice[j],slice[i] } ...

2019-01-04 11:54:11 201

原创 Go语言算法:判断素数

判断是否素数func IsPrime(n int) bool { if n == 1 { return false } //从2遍历到n-1,看看是否有因子 for i := 2; i < n; i++ { if n%i == 0 { //发现一个因子 return false } } return true}判断是否素数优化算法func Is...

2019-01-04 11:53:03 717

原创 Go语言算法:水仙花与自幂数

判断水仙花数func IsNarcissistic(n int) bool { //153 a := float64(n / 100) b := float64(n % 100 / 10) c := float64(n % 10) return int(math.Pow(a, 3)+math.Pow(b, 3)+math.Pow(c, 3)) == n}判断自幂数自幂数定义:...

2019-01-04 11:49:51 174

原创 Go语言算法:求斐波那契数

递归求斐波那契数列第N项func GetFibonacciRecursively(n int) int { if n == 0 || n == 1 { return 1 } return GetFibonacciRecursively(n-1) + GetFibonacciRecursively(n-2)}循环求斐波那契数列第N项func GetFibonacciII(n in...

2019-01-04 11:48:09 116

原创 2.15 Go语言反射实例

需求摘要所有的商品都有一些共性,例如都有品名、价格,个性则无千无万;自行封装出三种商品(以模拟30万种商品)随意给出一个商品的集合,将每件商品的所有属性值输出到《品名.txt》文件中;需求分析该需求的难点在于,给过来的商品是什么类型都有的,每种不同类型的商品具体有些什么属性值我们完全无法预知——所以我们可以通过反射来得到这些属性的名值;导入必要的包import ( "os" ...

2019-01-04 06:51:35 428 1

原创 3.10 EOS智能合约案例实践

1.Dapp框架与开发传统Web开发模式如下程序员负责的工作: 写后端服务 设计数据库表 前端人员开发页面 前后端接口交互的开发 编写缓存服务区块链开发模式如下数据是存在内存数据库和区块上会给前端提供SDK下图是2个Instance,也就是2个节点程序员负责的工作: 编写智能合约 前端人员开发页面 编写SDK调用回顾EOS开发流程2.Oasi...

2018-12-07 00:32:57 798

原创 3.09. EOSJS SDK

1.eosjs介绍eosjs是与EOSIO区块链网络交互的方法库通过eosjs可以程序化与区块链网络交互,代替cleos命令行交互2.eosjs基本依赖eosjs-api nodeos的远程API调用 这个lib库是对区块链网络坐查询,不需要签名认证eosjs-ecc 私钥、公钥、签名、AES算法、加密解密等的实现 验证公私钥配对、加密解密eosjs-keyg...

2018-12-07 00:32:47 996 1

原创 3.08 EOS智能合约(下)

1.什么是李嘉图合约李嘉图合约是一种特殊的结构化文本,主要用作交易中明确双方的意图,是做交易之前查看的要遵循的规则以后正式合法的合约都要有李嘉图合约EOS白皮书中所提到的,所有的交易,都会是基于对宪法同意的基础之上进行的,这就意味着,EOS启动后,用户所有的链上行为,都会涉及到李嘉图合约简单说,李嘉图合约是一个文件,定义了通过互联网发行的某种类型的价值,标识发行人和签署人,将发行人认为合...

2018-12-07 00:32:36 769

原创 3.07 EOS数据库应用

1.EOS数据库介绍数据库是辅助智能合约存储一些状态和数据数据库运行在内存中,是KV存储(区块链就是分布式的KV存储问题),通过multi_index与数据库交互建表和操作,multi_index可以理解为一个表数据库是按不同账户分不同空间,Account里实际上还有scope,scope中有tableEOS数据库的重点 数据表定义 多索引使用 迭代器使用2.数据表...

2018-12-07 00:32:21 772

原创 3.06 EOS智能合约(上)

1.eosiocpp工具介绍是一个 C++ 生成 WASM 和 ABI 文件的编译工具有很多依赖库,因此需要在eosio/eos-dev 的环境中才可以运行2.abi介绍ABI是Application Binary Interface的缩写,它的意思是程序二进制接口一个ABI是不同二进制片段的连接纽带,它定义了函数被调用的规则EOS中的ABI除了约束action之外,还可以约束t...

2018-12-07 00:32:10 698

原创 3.05 EOS单点测试网络

1.获取源码编译搭建下载源码切换分支运行安装程序编译完成如下进行安装进入eos/build目录,输入 make test 进行验证,所有模块验证通过,证明EOS搭建完成2.通过docker搭建EOS环境前提:安装了docker和docker-compose从官方拉取eos-dev标记1.0.8为latest3.启动单节点测试网络创建两个volume...

2018-12-07 00:31:54 721

原创 3.04 账户体系与安全设计

EOS账户依赖于ECC加密算法虚拟机管理智能合约与EOS账户体系有交叉1.账户、权限管理EOS权限管理2.钱包(Wallet)存储密钥Lock和Unlock状态,需要密码去解锁签名授权,转账时实际上就是做一个签名3.账户(Account)可读名字(12字符),被个人或组织(多人)拥有多权限管理、支持多签名、支持自定义权限可定义Action和Handler...

2018-12-07 00:31:41 952

原创 3.03 模块插件介绍

地址:https://github.com/EOSIO/eos/tree/v1.0.8编译模块主程序模块依赖库模块插件模块智能合约模块测试模块docker定制模块文档说明模块,这个就不细说了...

2018-12-07 00:30:55 720

原创 3.02 EOS核心框架

1.EOS核心框架介绍架构图EOSIO程序模块图2.区块结构Merkel Tree:比较两个节点数据是否同步,直接比较树根是否一样就可以,EOS节点数据是用Merkel Tree组织的如果2个节点比较不一样,可以快速查找树中哪个节点不一样,能快速定位修改互相验证时,密码学中叫零知识证明,比较Merkel Tree是否相同就可以EOS通过Merkle Tree做验证,成本比比...

2018-12-07 00:30:17 691

原创 3.01 EOS概念

1.什么是EOSEOS是当下最火的区块链技术,被社会广泛看好为下一代区块链3.0不同于以太坊和超级账本的学习,EOS的主语言是C++EOS期望做加强版的以太坊,一个高吞吐量的智能合约平台以太坊虽然功能齐备,但受制于其设计选择,15秒的出块速度导致交易吞吐量 远远不能达到大规模实用的程度,大约只有30~40TPS(交易/秒),而EOS则选择 了不同的技术路线,目标是达到可观的百万TPSE...

2018-12-07 00:29:34 634

原创 2.11 node.js SDK的使用

1.centOS7安装node.js杀掉活跃的容器官网https://nodejs.org/en/下载tar.xz包,然后解压设置node为全局变量设置npm为全局变量查看版本2.搭建网络赋予执行权限启动网络进入容器查看通道,已经存在3.链码编写和测试编写nodeExample.go安装链码实例化链码初始化车辆信息查询车辆信息查询...

2018-12-07 00:28:28 753

原创 2.10 java SDK的使用

1.centOS7安装node.js杀掉活跃的容器官网https://nodejs.org/en/下载tar.xz包,然后解压设置node为全局变量设置npm为全局变量查看版本2.搭建网络赋予执行权限启动网络进入容器查看通道,已经存在3.链码编写和测试编写nodeExample.go安装链码实例化链码初始化车辆信息查...

2018-12-05 20:28:10 129

原创 2.09 java编写智能合约

1.本地环境准备需要有JDK和Maven需要安装Gradle,Gradle是一个基于Maven概念的项目自动化构建开源工具面向Java应用为主,当前其支持的语言限于Java、Groovy、Kotlin和Scala下载地址:https://gradle.org/releases/将下好的包直接解压,然后设置环境变量GRADLE_HOME,添加到PATHcmd输入gradle -v查...

2018-12-05 20:22:44 322

原创 2.08 hyperledger fabric完整案例

1.fabric开发流程需求整理合约编写合约部署合约交互外部服务编写2.需求分析开发一个资产转让功能模块平台功能 用户开户和销户 资产登记,解决资产上链和用户绑定资产 资产转让,资产所有权的变更 查询功能,用户查询、资产查询、资产变更历史查询3.合约编写assetsExchange.go4.合约部署关闭docker生成通道的创世交易查看...

2018-12-05 17:32:44 1207

提示
确定要删除当前文章?
取消 删除