04 2018 档案

摘要:Go语言字符串是一种值类型,且值不可变,即创建某个文本后你无法再次修改这个文本的内容;更深入地讲,字符串是字节的定长数组。Go 代码使用 UTF 8 编码(且不能带 BOM),同时标识符支持 Unicode 字符。在标准库 unicode 包及其子包 utf8、utf16中,提供了对 Unicode 阅读全文
posted @ 2018-04-26 17:51 木易森林 阅读(238) 评论(0) 推荐(0) 编辑
摘要:模板文件是使用 Compose 的核心,涉及到的指令关键字也比较多,这里面大部分指令跟 docker run 相关参数的含义都是类似的。默认的模板文件名称为 docker compose.yml ,格式为 YAML 格式。 注意每个服务都必须通过 image 指令指定镜像或 build 指令(需要 阅读全文
posted @ 2018-04-20 10:17 木易森林 阅读(445) 评论(0) 推荐(0) 编辑
摘要:Go语言数组 数组是Go语言编程中最常用的数据结构之一。顾名思义,数组就是指一系列同一类型数据的集合。数组中包含的每个数据被称为数组元素( element),一个数组包含的元素个数被称为数组的长度。需要强调的一点是Go语言中数组的长度固定,无法扩容。 声明定义 数组在定义初始化的时候,长度可以指定, 阅读全文
posted @ 2018-04-19 20:25 木易森林 阅读(13051) 评论(0) 推荐(0) 编辑
摘要:基本结构 相比较 C 和 Java 等其它语言而言,Go 语言中的 switch 结构使用上更加灵活。它接受任意形式的表达式,例如: 变量 var1 可以是任何类型,而 val1 和 val2 则可以是同类型的任意值。类型不被局限于常量或整数,但必须是相同的类型;或者最终结果为相同类型的表达式。前花 阅读全文
posted @ 2018-04-17 20:30 木易森林 阅读(251) 评论(0) 推荐(0) 编辑
摘要:for结构简介 Go语言只有for循环这一种循环结构,Go语言中的for循环语句的三个部分不需要用括号括起来,但循环体必须用 { } 括起来。基本的for循环包含三个由分号分开的组成部分: 初始化语句:在第一次循环执行前被执行 循环条件表达式:每轮迭代开始前被求值 后置语句:每轮迭代后被执行 初始化 阅读全文
posted @ 2018-04-17 19:58 木易森林 阅读(2657) 评论(0) 推荐(0) 编辑
摘要:if语句 if 是用于测试某个条件(布尔型或逻辑型)的语句,如果该条件成立,则会执行 if 后由大括号括起来的代码块,否则就忽略该代码块继续执行后续的代码。 if else结构定义 如果存在第二个分支,则可以在上面代码的基础上添加 else 关键字以及另一代码块,这个代码块中的代码只有在条件不满足时 阅读全文
posted @ 2018-04-17 19:34 木易森林 阅读(1752) 评论(1) 推荐(0) 编辑
摘要:变量命名原则 go语言的变量名有字母数字和下划线组成,首字母不能为数字,但是字母不仅仅只限于英文字母,所有的UTF 8字符都是可以的。 变量声明和初始化方式 使用var关键字 注意,Go语言变量类型放在变量名之后! 如果上面的代码段没有初始化值,那么变量就会被初始化为对应类型的零值。 这个代码片段声 阅读全文
posted @ 2018-04-16 20:09 木易森林 阅读(13555) 评论(0) 推荐(0) 编辑
摘要:数据类型 Go语言按类别有以下几种数据类型: bool,一个字节,值是true或者false,不可以用0或者1表示 int/uint(带符号为与不带符号位的int类型):根据平台不同是32位或者64位 intx/uintx:x代表任意位数,例如:int3,代表占3bit的int类型 byte占用8位 阅读全文
posted @ 2018-04-16 17:46 木易森林 阅读(1618) 评论(0) 推荐(0) 编辑
摘要:Docker Compose 是 Docker 官方编排(Orchestration)项目之一,负责快速在集群中部署分布式应用。 Compose 简介 Compose 项目是 Docker 官方的开源项目,负责实现对 Docker 容器集群的快速编排。Compose 定位是 「定义和运行多个 Doc 阅读全文
posted @ 2018-04-16 17:06 木易森林 阅读(19356) 评论(0) 推荐(2) 编辑
摘要:不一致产生的原因 我们在使用redis过程中,通常会这样做:先读取缓存,如果缓存不存在,则读取数据库。伪代码如下: 写数据库的伪代码如下: 不管是先写库,再删除缓存;还是先删缓存,再写库,都有可能出现数据不一致的情况 因为写和读是并发的,没法保证顺序,如果删了缓存,还没有来得及写库,另一个线程就来读 阅读全文
posted @ 2018-04-14 10:54 木易森林 阅读(17337) 评论(0) 推荐(2) 编辑
摘要:编写LUA脚本 该脚本功能:先检查redis中某个key的值是否与期望的值V1一致,如果一致则将其修改为新的值V2并返回true,否则返回false。其实就是CAS。 注意,lua脚本中的变量都要是local 的,不可以是全局变量。否则会报错。详见 http://doc.redisfans.com/ 阅读全文
posted @ 2018-04-14 10:23 木易森林 阅读(4182) 评论(0) 推荐(0) 编辑
摘要:在实际工作过程中,可以使用lua脚本来解决一些需要保证原子性的问题,而且lua脚本可以缓存在redis服务器上,势必会增加性能。 不过lua也会有很多限制,在使用的时候要注意。 在Redis中执行Lua脚本有两种方法:eval和evalsha eval 其中: <1> script:你的lua脚本 阅读全文
posted @ 2018-04-14 10:09 木易森林 阅读(803) 评论(0) 推荐(0) 编辑
摘要:Redis 集群的时候报错: 修改配置 redis.conf 配置集群 修改redis.config,添加cluster-enabled yes 阅读全文
posted @ 2018-04-13 15:55 木易森林 阅读(2701) 评论(0) 推荐(1) 编辑
摘要:方法1: 用SET PASSWORD命令 mysql -u root mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('newpass'); 方法2:用mysqladmin mysqladmin -u root password "newp 阅读全文
posted @ 2018-04-12 09:32 木易森林 阅读(179) 评论(0) 推荐(0) 编辑
摘要:手动安装 下载golang安装包 从上面的网站上下载适合自己机器的go版本,我这里选择的是go1.10.linux 386.tar.gz 解压安装包到指定目录 检查是否安装成功 环境变量的设置 编写hello.go文件,测试安装是否成功 用go run命令直接运行hello.go 用go build 阅读全文
posted @ 2018-04-10 10:59 木易森林 阅读(7855) 评论(1) 推荐(0) 编辑
摘要:避免死锁 死锁出现的四要素: 互斥条件:进程对于所分配到的资源具有排它性,即一个资源只能被一个进程占用,直到被该进程释放; 请求与保持条件:一个进程因请求被占用资源而发生阻塞时,对已获得的资源保持不放 不可中条件:任何一个资源在没被该进程释放之前,任何其他进程都无法对他剥夺占用 循环等待条件:当发生 阅读全文
posted @ 2018-04-08 16:11 木易森林 阅读(730) 评论(0) 推荐(0) 编辑
摘要:使用Java那么久,在此总结一下Java中常见的内存溢出问题以及对应的解决思路 堆溢出 报错信息 报错原因 堆中(新生代和老年代)无法继续分配对象了; 某些对象的引用长期被持有没有被释放,垃圾回收器无法回收; 使用了大量的 Finalizer 对象,这些对象并不在 GC 的回收周期内。 解决办法 将 阅读全文
posted @ 2018-04-08 14:23 木易森林 阅读(1281) 评论(0) 推荐(0) 编辑
摘要:在GC日志里,一条完整的GC日志记录最后,会带有本次GC所花费的时间,如下面这一条新生代GC: 注意到日志中时间分为了三块:user, sys,和 real,三者的区别和含义如下: real:指的是在此次GC事件中所花费的总时间; user:指的是CPU工作在用户态所花费的时间; sys:指的是CP 阅读全文
posted @ 2018-04-04 15:44 木易森林 阅读(4032) 评论(0) 推荐(2) 编辑
摘要:Spring中bean的定义可以通过编程,可以定义在properties文件,也可以定义在通过xml文件中,用的最多的是通过xml形式,由于xml格式具有很好的自说明便于编写及维护。对于xml的文档结构、数据定义及格式验证可以通过DTD和Schema, 在spring2.0之前采用的是DTD,在sp 阅读全文
posted @ 2018-04-02 21:05 木易森林 阅读(436) 评论(0) 推荐(0) 编辑