自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

半 岛 码 农 的 博 客

在内存的世界里,你又是那一个孤儿进程

原创 JavaCore 【 Java中的Class.forName()和ClassLoader.loadClass()的区别】

类装载顺序 类加载过程 Class.forName()和ClassLoader.loadClass 对比 Class.forName(className)方法,内部实际调用的方法是Class.forName(className,true,classloader); 第2个boolean参数表示...

2019-02-15 11:48:57 218 1

原创 Java并发编程 【生产者消费者模式的实现】

最简单的实现方式是利用阻塞队列,废话不多说,上代码: wait、notify、notifyAll是Object对象的属性,并不属于线程。我们先解释这三个的一个很重要的概念 wait:使持有该对象的线程把该对象的控制权交出去,然后处于等待状态,并释放锁 notify:通知某个正在等待这个对象的控制...

2019-02-14 11:01:43 690 0

原创 Java并发编程【线程中安全与锁】

什么是线程安全 当多个线程访问某个类时,不管运行时环境采用何种的调度方式或者这些进程将如何交替执行,并且在主调代码中不需要任何额外的同步或者协同,这个类都能表现出正确的行为,那么就称这个类就是线程安全的。 线程安全主要体现在一下三个方面: 原子性:提供了互斥访问,同一时刻只能有一个线程对它进行操...

2019-02-13 16:49:45 132 0

原创 Java并发编程 【线程的状态和线程的创建】

线程的状态 新建状态(New):新创建了一个线程对象。 就绪状态(Runnable):线程对象创建后,其他线程调用了该对象的start()方法。该状态的线程位于“可运行线程池”中,变得可运行,只等待获取CPU的使用权。即在就绪状态的进程除CPU之外,其它的运行所需资源都已全部获得。 运...

2019-02-13 14:36:17 121 0

原创 Java并发编程【 volatile语义 】

volatile语义 在说明volatile是什么之前,先看看Java的内存模型 那么volatile有什么作用? volatile的第一个语义: 保证线程间的变量,简单地说就是当线程A对变量X进行了修改后,在线程A后面执行的其他线程能看到变量X的变动 线程对变量进行修改之后,要立刻回写到主内存...

2019-01-28 11:31:23 1706 0

转载 jvm虚拟机【内存模型(转)】

并发编程的模型分类 在并发编程需要处理的两个关键问题是:线程之间如何通信 和 线程之间如何同步。 通信 通信 是指线程之间以何种机制来交换信息。在命令式编程中,线程之间的通信机制有两种:共享内存 和 消息传递。 在共享内存的并发模型里,线程之间共享程序的公共状态,线程之间通过写-读内存中的公共状态...

2019-01-28 11:00:37 1750 0

原创 技术杂记 【JSONArray 按指定字段排序,升序和倒序】

第一种 根据自定义的字段去排序,利用sort方法 Random random = new Random(); JSONArray result = new JSONArray(); for(int i = 0 ; i &amp...

2019-01-24 11:25:27 3782 0

原创 Java并发编程【线程中通信 CountDownLatch、CyclicBarrier、Semaphore 介绍和用法】

CountDownLatch 什么是CountDownLatch 一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。 用给定的计数 初始化 CountDownLatch。由于调用了 countDown() 方法,所以在当前计数到达零之前,await 方法会一直受...

2019-01-22 13:51:21 1729 0

原创 Java 并发编程【ThreadLocal的使用和原理】

ThreadLocal是什么 ThreadLocal是一个本地线程副本变量工具类。主要用于将私有线程和该线程存放的副本对象做一个映射,各个线程之间的变量互不干扰,在高并发场景下,可以实现无状态的调用,特别适用于各个线程依赖不通的变量值完成操作的场景。 下图为ThreadLocal的内部结构图 从...

2019-01-22 11:52:14 1806 0

原创 SpringBoot【Swagger2的集成和使用】

Swagger2介绍 Swagger是一款RESTful接口的文档在线自动生成、功能测试功能框架。一个规范和完整的框架,用于生成、描述、调用和可视化RESTful风格的Web服务,加上swagger-ui,可以有很好的呈现。 SpringBoot集成Swagger2 首先添加依赖 &am...

2019-01-21 12:22:45 267 0

原创 jvm虚拟机 【类加载】

类加载机制概述 虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验,解析和初始化,最终形成可以被虚拟机直接使用的java类型,这就是类加载机制 Hotspot类加载器策略是采用懒加载策略 类加载的时机 类的声明周期 类的初始化例子: 遇到new,getstatic,puts...

2019-01-19 15:22:38 1682 0

原创 数字货币的发行

货币的分类: 1,法币 (法定货币) 2,电子货币 (将法定货币数字化) 3,数字货币 (法定货币的替代货币,也就是代币) 任何人任何组织都可以发行任何数量的货币。 智能合约的非侵入式接口 ERC20 Token 接口 :以太坊代币合约接口 什么是侵入式接口: 类必须实现接口才能使用这个接口 ...

2018-10-24 15:21:15 2575 0

转载 Merkle Tree(默克尔树)

  Merkle Tree,通常也被称作Hash Tree,顾名思义,就是存储hash值的一棵树。Merkle树的叶子是数据块(例如,文件或者文件的集合)的hash值。非叶节点是其对应子节点串联字符串的hash。  * 1. Hash*   Hash是一个把任意长度的数据映射成固定长度数据...

2018-09-11 12:07:18 1778 0

转载 以太坊源码分析

最近发现一个大牛分析以太坊源码,转发一下!! 希望能够分析以太坊的代码来学习区块链技术和GO语言的使用 分析go-ethereum的过程,我希望从依赖比较少的底层技术组件开始,慢慢深入到核心逻辑。 目录 go-ethereum代码阅读环境搭建 以太坊黄皮书 符号索引 rlp源码解析 ...

2018-09-10 08:04:53 132 0

原创 搭建智能合约开发环境

本地安装remix-ide在线编译器 首先选择一块风水宝地 mkdir tools/solidity-browser -p cd tools/solidity-browser 下载remix安装包 git clone https://github.com/ethereu...

2018-09-10 07:28:08 1603 0

原创 Mac终端辅助iTerm以及zsh环境变量失效问题

zsh环境变量失效问题, 因为zsh插件新建终端的时候默认只加载 ~/.zshrc。 所以解决方案只需要在~/.zshrc里面先加载当前的环境变量。 修改 ~/.zshrc export PATH=$HOME/bin:/usr/local/bin:$PATH source /etc/pr...

2018-08-08 10:07:52 1787 0

原创 简单了解 一致性算法 - Raft

Raft的基本概念 角色 在Raft中,任何时候一个服务器可以扮演下面角色之一: Leader: 处理所有客户端交互,日志复制等,一般一次只有一个Leader. Follower: 类似选民,完全被动 Candidate候选人: 类似Proposer律师,可以被选为一个新的领导...

2018-08-03 19:19:31 188 0

原创 通过创世区块来初始化区块链

首先需要一个初始化区块链的json文件,如下。 { "config": { "chainId": 17, "homesteadBlock": 0, &q...

2018-08-03 02:39:23 1315 0

转载 浅谈共识机制(POW、POS、DPOS、PBFT及POP)

共识机制有什么用? 它就像一个国家的法律,维系着区块链世界的正常运转。 在区块链上,每个人都会有一份记录链上所有交易的账本,链上产生一笔新的交易时,每个人接收到这个信息的时间是不一样的,有些想要干坏事的人就有可能在这时发布一些错误的信息,这时就需要一个人把所有人接收到的信息进行验证,最后公...

2018-07-30 16:20:18 19029 1

原创 如何编写一个简单的智能合约(Smart Contract)

使用solidity语言编写智能合约 Ethereum 上的智能合约需要使用 solidity 语言编写。虽然还有其他能用来撰写智能合约的语言如 Serpent (类 Python )、lll (类 Fortran),但是目前看到所有公开的智能合约都是使用solidity撰写。 宣传上说,so...

2018-07-26 23:01:40 3967 0

原创 ElasticSearch 的安装

下载 首先先从官网选择版本下载安装包 或者直接运行 $ wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.3.1.tar.gz 解压运行即可 $ tar zxvf elast...

2018-07-24 09:48:08 87 0

原创 玩一玩 golang 之 etcd 基础操作

etcd的安装 下载源码, 编译运行 git clone https://github.com/coreos/etcd.git $ cd etcd $ ./build $ ./bin/etcd 测试etcd 设置值 $ ETCDCTL_API=3 ./bin/etcdct...

2018-07-24 03:45:50 4118 2

转载 玩一玩 Golang 连接 kafka(单机)

环境 kafka的安装 zookeeper的安装 第三方库准备 安装依赖库sarama go get github.com/Shopify/sarama sarama-cluster依赖库(如果你需要的是集群模式) go get github.com/bsm/...

2018-07-24 02:28:03 668 0

原创 zookeeper单机安装

1.下载zookeeper: wget http://apache.fayea.com/zookeeper/stable/zookeeper-3.4.6.tar.gz 2.解压 tar zxvf zookeeper-3.4.6.tar.gz 3.配置 进入配置文件夹,...

2018-07-19 12:29:41 294 0

原创 技术杂记 【kafka的安装 (单机)】

一、环境配置 kafka 版本 2.11 Kafka官网下载地址 JDK版本:1.8 Zookeeper 二、操作过程 1、下载Kafka并解压 下载: wget http://mirrors.hust.edu.cn/apache/kafka/1.1.0/kafka_2....

2018-07-19 11:59:55 1097 0

原创 简单玩一玩 go mysql 编程

首先引入我们需要的第三方库 go get github.com/go-sql-driver/mysql go get github.com/jmoiron/sqlx import ( _ "github.com/go-sql-driver/mysql&...

2018-07-17 17:53:59 161 0

原创 关于Mac或Linux下GO的Permission denied提示错误

有时候当你下载第三方库的时候,编译时会提示Permission denied 权限不足, 出现这种错误因为权限不够。其中一种办法是需要把你项目目录和go的pck、bin权限放开。 chmod -R 777 go目录...

2018-07-11 17:16:42 8294 1

转载 GO中的 new 和 make 的区别

Go 语言中的 new 和 make 一直是新手比较容易混淆的东西,咋一看很相似。不过解释两者之间的不同也非常容易。 他们所做的事情,和应用的类型也不相同。 二者都是用来分配空间。 new 函数 new 是内建函数,函数原型为 func new(Type) *Type 内置函数...

2018-07-09 09:52:53 171 0

原创 Node.js Redis 的使用

Node.js Redis 基本功能: * 缓存系统 * 数据存储 * 消息中介 基本工具 * 服务启动工具 * 命令行 * GUI PS:在之前,需要安装redis对Nodejs的支持 https://redis.io/clients#nodejs $ npm insta...

2018-06-05 14:27:32 28330 1

原创 vim的介绍&&vim 图表

中文: 英文: 在命令状态下对当前行用== (连按=两次), 或对多行用n==(n是自然数)表示自动缩进从当前行起的下面n行。你可以试试把代码缩进任意打乱再用n==排版,相当于一般IDE里的code format。使用gg=G可对整篇代码进行排版。 vim 选择文本,删除...

2018-05-21 17:28:31 435 0

原创 05 duck typing 概念 和 接口

05 duck typing 概念 和 接口 问题: 大黄鸭是鸭子吗? 传统类型系统: 脊索动物们,脊椎动物亚门,鸟纲。。 duck typing: 是鸭子 “像鸭子走路,想鸭子叫(长得像鸭子),那么就是鸭子” 描述事物的外部行为而非内部结构 严格说go属于结构化类型系统,类似duck ...

2018-05-21 16:53:20 1017 0

原创 06 函数式编程

06 函数式编程 函数与闭包 其实理解闭包的最方便的方法就是将闭包函数看成一个类,一个闭包函数调用就是实例化一个类。 然后就可以根据类的角度看出哪些是“全局变量”,哪些是“局部变量”了。 函数式编程 VS 函数指针 * 函数是一等公民:参数,变量,返回值都可以是函数 * 高阶函...

2018-05-21 16:52:54 85 0

原创 04 结构体和方法

04 结构体和方法 面向对象 go语言仅支持封装,不支持继承和多态 如果要支持多态,只需要面向接口编程 go语言没有class,只有struct struct和interface 已经用到了type这个关键字。 另外,Go的type另外一种常用功能,是类似于C/C++的typede...

2018-05-21 16:52:27 76 0

原创 03 数据、切片的概念

03 数组、切片的概念 定义数组 var arr1 [5]int arr2 := [3]int{1,2,3} arr3 :=[...]int{2,4,6,8,10} var grid [3][4]int fmt.Println(arr1,arr2,arr3) fmt.Println(gr...

2018-05-21 16:51:57 5068 0

原创 01 环境安装&&基本语法

01 安装环境 下载地址:https://studygolang.com/dl 安装完了 go的默认路径在/usr/local/go 在idea安装go插件 创建go项目 变量定义 使用var关键字 var a,b,c bool var s1,s2 string = “hell...

2018-05-21 16:48:34 72 0

原创 写一个简单的node程序

写一个简单的node程序 首先创建一个新的目录,创建一个新的文件,package.json这个文件用来描述我们这个项目的信息,依赖 { "name": "app_demo", "main": "./app.j...

2018-05-17 03:06:50 969 0

原创 node 环境安装

安装node 下载地址 https://nodejs.org/en/download/ NPM 和调试工具的使用 主要介绍一下几方面 NPM nodemon pm2 node-inspector 安装npm $ brew install npm 因为npm是托管在国外的,...

2018-05-17 03:04:02 100 0

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