字符编码

ASCII 码

计算机内部,所有信息最终都是一个二进制值。每一个二进制位(bit)有 0 和 1 两种 状态,因此八个二进制位就可以组合出256种状态,这被称为一个字节(byte)。
也就是说,一个字节一共可以用来表示256种不同的状态,每一个状态对应一个符号,就是256个符号,从00000000 到 11111111 。

上个世纪60年代,美国制定了一套字符编码,对英语字符与二进制位之间的关系,做了统一规定。这被称为 ASCII 码,一直沿用至今。

ASCII 码一共规定了128个字符的编码,比如空格 SPACE 是32(二进制 00100000 ),大写的字母 A 是65(二进制 01000001 )。这128个符号(包括32个不能打印出来的控制符号),只占用了一
个字节的后面7位,最前面的一位统一规定为 0 。

Unicode

Unicode 只是一个符号集。Unicode可以容纳100多万个符号。他规定了符号的二进制代码,却没有规定这个二进制代码应该如何存储。比如,汉字严的Unicode是十六进制数 4E25 ,转换成二进制数足足有15位
( 100111000100101 ),也就是说,这个符号的表示至少需要2个字节。表示其他更大的符号,可能需要3个字节或者4个字节,甚至更多。

UTF-8

UTF-8 就是在互联网上使用最广的一种 Unicode 的实现方式。UTF-8 最大的一个特点,就是它是一种变长的编码方式。它可以使用1~4个字节表示一个符号, 根据不同的符号而变化字节长度。

Read More

PC客户端技术方案分析

不同PC客户端技术方案的比较

Qt

官网:https://www.qt.io/

Qt具有跨平台的特性,可选择QWidget、QQuick。整个包比较大。虽然可以根据实际情况去掉一部分动态库和文件,还是比较大。

CEF(Chromium Embedded Framework)

官网:https://bitbucket.org/chromiumembedded/cef/src/master/

是一个基于Google Chromium 的开源项目。Google Chromium项目主要是为Google Chrome应用开发的,而CEF的目标则是为第三方应用提供可嵌入浏览器支持。CEF隔离底层Chromium和Blink的复杂代码,并提供一套产品级稳定的API,发布跟踪具体Chromium版本的分支,以及二进制包。
通过封装接口, 然后由chromium回调到自己的程序, 驱动整个程序运行。

个人认为选择CEF的主要原因有以下几点:

Read More

ReactiveX

Observables

概述

ReactiveX是Reactive Extensions的缩写,一般简写为Rx,最初是LINQ的一个扩展,由微软的架构师Erik Meijer领导的团队开发,在2012年11月开源,Rx是一个编程模型,目标是提供一致的编程接口,帮助开发者更方便的处理异步数据流,Rx库支持大部分主流语
言。

使用这种方法的优点是,当你有一大堆的任务是不相互依赖,你就可以同时执行他们,而不是等待每一个类启动下一个前完成,这样你的整个任务包只需要花最长的任务时间。

在ReactiveX中,一个观察者(Observer)订阅一个可观察对象(Observable)。观察者对Observable发射的数据或数据序列作出响应。这种模式可以极大地简化并发操作,因为它创建了一个处于待命状态的观察者哨兵,在未来某个时刻响应Observable的通知,不需要阻塞等待Observable发射数据。

背景知识

在很多软件编程任务中,或多或少你都会期望你写的代码能按照编写的顺序,一次一个的顺序执行和完成。但是在ReactiveX中,很多指令可能是并行执行的,之后他们的执行结果才会被观察者捕获,顺序是不确定的。为达到这个目的,你定义一种获取和变换数据的机制,而不是调用一个方法。在这种机制下,存在一个可观察对象(Observable),观察者(Observer)订阅(Subscribe)它,当数据就绪时,之前定义的机制就会分发数据给一直处于等待状态的观察者哨兵。

Read More

RabbitMQ笔记

安装

安装PHP扩展amqp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
PHP < 7.3

#install some base extensions
RUN apt-get install -y \
libzip-dev \
zip \
&& docker-php-ext-configure zip --with-libzip \
&& docker-php-ext-install zip

PHP >= 7.3

#install some base extensions
RUN apt-get install -y \
libzip-dev \
zip \
&& docker-php-ext-install zip

安装RabbitMQ

docker安装,使用localhost:5672访问其后台

1
2
3
4
5
6
7
8
9
10
11
12
rabbitmq:
image:rabbitmq:management
restart: always
environment:
RABBITMQ_DEFAULT_USER: "root"
RABBITMQ_DEFAULT_PASS: "root"
volumes:
- ./code/rabbitmq/rabbitmq:/var/lib/rabbitmq
- ./code/rabbitmq/log:/log/rabbitmq/log
ports:
- 15672:15672
- 5672:5672

Symfony安装扩展

https://github.com/php-amqplib/RabbitMqBundle

Read More