一个Java字符串中到底有多少个字符?

依照Java的文档, Java中的字符内部是以UTF-16编码方式表示的,最小值是 \u0000 (0),最大值是\uffff(65535), 也就是一个字符以2个字节来表示,难道Java最多只能表示 65535个字符?

char: The char data type is a single 16-bit Unicode character. It has a minimum value of '\u0000' (or 0) and a maximum value of '\uffff' (or 65,535 inclusive).

from The Java™ Tutorials

首先,让我们先看个例子:

阅读全文

sync.mutex 源代码分析

sync.Mutex是Go标准库中常用的一个排外锁。当一个 goroutine 获得了这个锁的拥有权后, 其它请求锁的 goroutine 就会阻塞在 Lock 方法的调用上,直到锁被释放。

mutex

sync.Mutex的实现也是经过多次的演化,功能逐步加强,增加了公平的处理和饥饿机制。

阅读全文

搭建一个私有的EOS集群

EOS (Enterprise Operation System)是由 Block.one公司主导开发的一种全新的基于区块链智能合约平台,由区块链奇才 BM (Daniel Larimer)领导开发。旨在为高性能分布式应用提供底层区块链平台服务。EOS 项目的目标是实现一个类似操作系统的支撑分布式应用程序的区块链架构。该架构可以提供账户,身份认证,数据库,异步通信以及可在数以万计的 CPU/GPU群集上进行程序调度和并行运算。EOS最终可以支持每秒执行数百万个交易,同时普通用户执行智能合约无需支付使用费用。

Block.one团队人才济济,包括Brendan Blummer(之前的公司交易MMORPG游戏货币)、首席科技官Daniel Larimer(区块链传奇人物之一,下面会介绍)和Brock Pierce(区块链基金会主席,Blockchain Capital联合创始人)等等。

2017年6月26日,Block.one开始销售EOS代币,计划355天共销售10亿EOS代币,EOS主网上线后会将这个以太坊基础版本的代币EOS转换为其主链上的代币。

2017年6月26-30日,销售20%也就是2亿代币,5天融资1.85亿美元,打破了当时ICO的世界纪录。70%接下来会以每小时23小时200万个发售。发售期间始于7月1号,剩下的持续350天。剩余的10%留属Block.one,不能交易和转让。每年新产生最多5%用于做DPoS的奖励。

EOS 项目刚刚发布的时候的共识机制是 DPoS(Deligated Proof of Stake,委托股权证明),类似于 Bitshares 和 Steem,这种共识机制采用随机的见证人出块顺序,出块速度为 3 秒,交易不可逆需要45秒。

EOS 最新的白皮书中已经将共识机制从 DPoS 升级为了 BFT-DPoS(Byzantine Fault Tolerance – Deligated Proof of Stake,带有拜占庭容错的委托股权证明)。交易确认时间大大缩短,从 45 秒缩短至 3 秒左右(主要为等待生产区块的时间)。这种机制可以称为初级版的 BFT-DPoS 共识机制。Daniel Larimer 称 EOS 新的 BFT-DPoS 共识机制还在开发中,会在系统上线前完成开发。

阅读全文

Java: 未来已来

在10月22的 Oracle Codeone大会上,Java平台的首席架构师 Mark Reinhold 做了The Future of Java is Today的演讲, 回顾了最近Java的几个版本的新的功能,Java的每年两次的发布周期, 澄清了关于发布流程和Java版本的几个误区,最后花了很大的篇幅介绍了未来Java几个令人非常期待的几个孵化中项目,可以为Java带来更好的生产力、性能和可扩展性。我整理了这四个项目相关的知识,你可以提前了解到Java未来的这些酷炫的特性。

Java各版本的发布时间点和LTS版本

Mark Reinhold 我不多介绍了, 之前要了解Java的未来动向看Java之父James Gosling, 他离开Oracle之后想了解Java的动向就看 Mark Reinhold。

阅读全文

Docker日志太多导致磁盘占满

我有一台服务器上面部署了多个docker容器, 并且每个docker容器都往stderr中源源不断的输出日志,导致今天磁盘被占满了。搜索了一下,docker官方网站上提供了一篇解决方案的文章

Docker容器在启动/重启的时候会往/var/lib/docker中写东西,如果你在启动docker容器遇到No space left on device的问题,可以按照下面的步骤进行清理相关的日志操作。

1、 对/var/lib/docker/containers下的文件夹进行排序,看看哪个容器占用了太多的磁盘空间

$ du -d1 -h /var/lib/docker/containers | sort -h

上面的命令会按照升序的方式对于容器文件夹进行排序,并列出容器文件夹的大小:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
[root@dbl14195 testnet]# du -d1 -h /var/lib/docker/containers | sort -h
36K /var/lib/docker/containers/4d91f92dd7604216f2e9e123572e9a80d7bbee3d8c8ce7be2ed241c572816fb6
40K /var/lib/docker/containers/374aa0ba92b37d829012282ff15c1bb838d95dedb54589874c4285991be2d4aa
40K /var/lib/docker/containers/7cfdbc453b2f7109b52e974061754266e6cdc0ccaee62ab4a5887865113e1144
40K /var/lib/docker/containers/84ee24989ad52383c6e99eaa4d236e600095aa7f855e81fbafe10416b75ceefb
40K /var/lib/docker/containers/aeced3ef3e23df27e52f65743bb05448b46a2c660acc5b0aab12604e060779b4
40K /var/lib/docker/containers/c36722baf0d2e1c22b7dde9979665ab62cd8ab85c3f1d0f427bb7a34e0fd977a
44K /var/lib/docker/containers/62477b332d18e192d70c7420435d47a379e6bbd8de13da8a8762e0fd95b341ca
44K /var/lib/docker/containers/78da0cf9743b6940fabbbd8c574b99dc5deb642fa998a8f819a6c6978fc875d7
44K /var/lib/docker/containers/9f63daf7caa7c469385bed4b178fbfe662e15b8c569c6644081af090f8e40426
44K /var/lib/docker/containers/e2d1286119a45aac7e58d6dac6e4b44b1d1288799b735943be45abed50244e56
56K /var/lib/docker/containers/ebd1bd211a1b9d02bb39bfb80eec3d0960a5b25e18f54d7371781ec456e7a1e8
176K /var/lib/docker/containers/1fe0a241e5ce9726c547c68739793633f9dd906768a36fe80e8fb80373aa3bfb
17M /var/lib/docker/containers/ac30e68d454b37d22b3964053a2b52ba043baa1add13556a09c0e3e05589104f
25M /var/lib/docker/containers/872ca4e3d005594591ca2df0e832d36eef448981ab2820c69df4ff1399f8423e
25M /var/lib/docker/containers/bd49a0a0368b99a9f69981d8b921ea1830957451577b635a07d5425d48e1144b
30M /var/lib/docker/containers/8f732390a020a6ef647fabb04da32c87d6341b72ac2af6bb4a1cf5743fda54db
88M /var/lib/docker/containers/648e883aa0a93f696f64e4ab76434657f4845769fe1eaaad49c2dc1d7960f2b0
171M /var/lib/docker/containers/8de7ff9f0276586a6ab346c2be1c9dc879bbb0d795fa7776c1d8d1568ea2794a
354M /var/lib/docker/containers

2、选择你要清理的容器进行清理

1
$ cat /dev/null > /var/lib/docker/containers/container_id/container_log_name

上述命令会清空对应的日志,如:

1
cat /dev/null > /var/lib/docker/containers/374aa0ba92b37d829012282ff15c1bb838d95dedb54589874c4285991be2d4aa/374aa0ba92b37d829012282ff15c1bb838d95dedb54589874c4285991be2d4aa-json.log

3、限制日志文件的大小

启动容器时,可以通过参数设置日志文件的大小、日志文件的格式

1
docker run -it --log-opt max-size=10m --log-opt max-file=3 alpine ash

Cookie是指网站为了辨别用户身份而储存于客户端的数据,由网景公司的前雇员卢·蒙特利在1993年3月发明。最初定义于RFC 2109, 以及后续的规范 RFC 2965RFC 6265

服务器可以设置或读取Cookies中包含信息,借此维护用户跟服务器会话中的状态,并且可以基于Cookie实现Session,用来在服务器端存储用户的数据。

现在,几乎所有的商业网站都会使用Cookie技术用来标示浏览的用户,比如电子商务中的购物车、广告追踪系统等,并且涉及到一系列的安全问题和隐私问题。

Go的标准库中提供了Cookie的操作,并且第三方的库提供了Session的实现,所以在使用Go开发web应用中,我们可以很方便的实现session的管理,但是也有一些安全方面的设置需要注意。

本文介绍了使用Go语言开发web应用的时候,服务器端Cookie和Session的使用。

阅读全文