存储与文件系统

JerryXia 发表于 , 阅读 (552)
存储 (Storage)存储是用于保有数据的技术。目前计算机存储采用的技术方式主要有以下几种:磁介质(硬盘,磁带),半导体(内存,固态硬盘,闪存卡等),光介质(光盘)等。不同的存储方式在各方面具有不同的特点,如易失性(断电是否失去数据),容量大小,读写支持(读写,只读,快读慢写,一次性写入等),数据存取方式(连续存取,随机存取),性能(如延迟,吞吐量等),能耗等。下文所说的存储指二级存储,又称外存,或辅存。与此对应的主要存储是指内存,即"运行内存"。事实上只有这一种内存,把移动设备的持久化... 阅读全文

字符集与编码

JerryXia 发表于 , 阅读 (138)
字符集和编码字符集(Character Set)是字符的集合,定义系统能处理哪些字符;编码(Encoding)则规定这些字符在计算机内部的表示方式。这里字符是抽象的概念,编码将其与二进制数据进行映射。由于编码通常依赖于字符集,实践中两者经常是绑定或互指的。常见的汉字编码方案GB2312,其全名为《信息交换用汉字编码字符集·基本集》;而 HTML 中的<meta charset="encoding">标签也混用了字符集(charset)和编码的概念。既然是集合... 阅读全文

设计简单的后台管理的数据排序

JerryXia 发表于 , 阅读 (1,325)
场景:前端需要展示一个列表(如:首页的轮播图),后台需要能够控制列表数据的排序。需求:自动规则 + 运营干预,干预包括:降低排名,提升排名,设定位置和新增item实现:在Web后台管理系统中,列表形式的数据排序功能是很常见的需求。要实现这类功能,给数据表增加一个排序字段order,越大排名越靠前,数字相同时按照自动规则(如:id)排序,这样,就可以实现了:idnameorder1tom22jack33bob1实际的排序显示为:jack tom bob 既然是后台,那么主要的用户是公司的运营... 阅读全文

分布式日志系统

JerryXia 发表于 , 阅读 (1,423)
我们采用了一个经典的组合 logstash + elasticsearch + kibana。说明:多个独立的agent(Shipper)负责收集各应用不同来源的数据,中心agent(Indexer)负责汇总和分析数据,在中心agent前的Broker(使用redis实现)作为缓冲区,中心LogStash后的ElasticSearch用于存储和搜索数据,前端的Kibana提供丰富的图表展示。Shipper表示日志发送者,在应用中使用NLog组件来发送日志数据;Broker作为远程agent... 阅读全文

字符编码

JerryXia 发表于 , 阅读 (1,179)
我们已经讲过了,字符串也是一种数据类型,但是,字符串比较特殊的是还有一个编码问题。因为计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理。最早的计算机在设计时采用8个比特(bit)作为一个字节(byte),所以,一个字节能表示的最大的整数就是255(二进制11111111=十进制255),如果要表示更大的整数,就必须用更多的字节。比如两个字节可以表示的最大整数是65535,4个字节可以表示的最大整数是4294967295。由于计算机是美国人发明的,因此,最早只有127个字... 阅读全文

正确实现对象的浅拷贝和深拷贝

JerryXia 发表于 , 阅读 (1,339)
为对象创建副本的技术称为拷贝(也叫克隆)。我们将拷贝分为浅拷贝和深拷贝。浅拷贝 将对象中的所有字段复制到新的对象(副本)中。其中,值类型字段的值被复制到副本中,在副本中修改不会影响到源对象对应的值。而引用类型的字段被复制到副本中的是引用类型的引用,而不是引用的对象,在副本中对引用类型的字段值做修改会影响到源对象本身。深拷贝同样,将对象中的所有字段复制到新的对象中。不过,无论是对象的值类型字段,还是引用类型字段,都会被重新创建并赋值,对于副本的修改,不会影响到源对象本身。无论是浅拷贝还是深拷... 阅读全文

面向对象的理解

JerryXia 发表于 , 阅读 (1,311)
数据结构里面有个抽象数据类型(ADT)概念,是指一个数学模型以及定义在该模型上的一组操作。抽象数据类型的定义取决与它的一组逻辑特性,而与其在计算机内部如何表示和实现无关,即不论其内部结构如何变化,只要它的数学特性不变,都不影响其外部的使用。这让我想到了面向对象的程序设计,为了提高软件的重用率,在程序设计时要求在构成软件系统的每个相对独立的模块上,定义一组数据和施于这些数据上的一组操作(数据和行为),并在模块的内部给出这些数据的表示及其操作的细节,而在模块外部使用的只是抽象的数据及抽象的操作... 阅读全文