现代操作系统:I/O
IOIO硬件原理IO设备IO设备可以大致分为两类:块设备与字符设备。 块设备将信息存储在固定大小的块中,每个块有自己的地址,所有传输以一个或多个完整的块位单位。每个块可以独立于其他块而读写。硬盘、USB等都是块设备。 字符设备以字符位单位发送或接收一个字符流,而不考虑任何块结构。字符设备不可寻址,也 ...
计算机网络:套接字编程
套接字编程简介套接字API可以在两个方向上进行传递:从内核到进程和从进程到内核。 套接字地址简介大多数套接字函数都需要一个指向套接字地址结构的指针作为参数。每个协议族都定义它自己的套接字地址结构。这些结构的名字均以sockaddr_开头,并以对应每个协议族的唯一后缀结尾。 IPv4套接字地址结构IP ...
计算机网络:HTTP协议
了解Web及网络基础 Web是建立在何种技术上,HTTP协议是如何诞生并发展的。 Web客户端与服务器是如何通信的,使用HTTP协议访问web。 表示Web内容的资源来自何方。 Web事务是怎样工作的。 HTTP通信所使用的报文格式。 底层TCP网络传输。 不同的HTTP协议变体。 因特网上安装的大 ...
Linux:常用命令
Linux常用命令tab键会对Linux命令进行补全。两下tab会以该命令开头的所有命令打印出。 命令基本格式命令提示符 [root@localhost ~]# root:当前登录用户。 localhost:主机名。 ~:当前所在目录。 用户登录的家目录。root用户在/root。 普通用户在/h ...
消息队列:RabbitMQ概述
RabbitMQRabbitMQ是一个消息代理。它的核心思想非常简单:接收并转发消息。你可以把它想象成一个邮局:当你把邮件丢进邮箱时,你非常确定邮递员先生会把它送到收件人手中。在这个比喻中,RabbitMQ就是邮箱、邮局和邮递员。 概述是什么RabbitMQ是流行的开源消息队列系统,用erlang语 ...
消息队列:RabbitMQ实战
Hello World使用Java进行实现。 会写两个Java程序。一个发送一条消息的producer和一个接收消息并打印出来的consumer。因为只是刚刚起步,我们会忽略一些Java API的细节,只把精力集中在简单的事情上。消息的内容是“Hello World”。 先决条件假定RabbitMQ ...
Redis:数据结构与对象
数据结构与对象Redis数据库里面的每个键值对都是由对象组成的: 数据库键总是一个字符串对象。 数据库值是一个对象,对象的实现可以是各种数据结构。 字符串对象: int、raw、embstr。 列表对象: ziplist、linkedlist。 哈希对象: ziplist、hashtabl ...
架构:大型网站架构演化
概述如何打造一个高性能、高可用、易扩展、可伸缩且安全的网站。 如何让网站随应用所需灵活变动。 随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,亟需一个治理系统确保架构有条不紊的演进。 架构单一应用架构当网站流量很小时,只需一个应用,将 ...
MySQL:数据库原理
MySQL数据类型串串数据类型存储串。并有定长串与变长串两种类型。串值需要在引号内(单引号最好)。 定长串:接受长度固定的字符串,长度在建表时指定。(处理定长列速度很快): CHAR:1-255个字符定长串,默认长度为1。 变长串:存储可变长度的文本。有些变长数据类型具有最大的定长,有些完全变长 ...
JavaBase:流
流提出问题集合是Java中的重要API,但是集合操作却远远算不上完美。 很多业务逻辑都涉及到类似数据库的操作,例如对菜品按类别进行分组。利用SQL可以声明式地进行这些操作,但是在集合当中,我们只能用迭代器进行操作。 要处理大量元素时,为了提高性能需要并行处理,使用多核架构,但是并行比迭代器还要复杂 ...
Redis:独立功能的实现
主从复制7-5 主从模式: 主、从节点都可以挂从节点。 最终一致性。 广播模式: 全量同步: 传递RDB文件&restore命令重建kv。 传递在RDB dump过程中的写入数据。 部分同步: 根据offset传递积压缓存中的部分数据。 基础Redis中用户可以通过执行SL ...
Redis:单机数据库的实现
数据库 Redis服务器的数据库实现: 服务器保存数据库的方法。 客户端切换数据库的方法。 数据库保存键值对的方法。 数据库的增删改查的实现方法。 服务器保存键的过期时间的方法。 服务器自动删除过期键的方法。 Redis2.8数据库通知功能的实现。 服务器中的数据库Redis服务器将所有数据库 ...
MySQL:InnoDB-锁与事务
锁讨论InnoDB如何实现事务的隔离性的。 最大程度地利用数据库的并发访问 确保每个用户能以一致的方式读取和修改数据 将介绍InnoDB存储引擎对表中的数据的锁定,同时分析InnoDB存储引擎会以怎样的粒度锁定数据。 人们认为行级锁的一个神话:人们认为行级锁总会增加开销。实际上,只有当实现本身会 ...
Java并发:JUC-Lock
Lock当内置加锁机制不适用时,作为一种可选的高级功能 Lock ReentrantLock Condition ReadWriteLock LockSupport 概述Lock提供了一种无条件的、可轮询的、定时的以及可中断的锁获取操作,所有加锁和解锁的方法都是显式的。在Lock的实现中必须 ...
Java并发:JMM-并发机制的原理
并发编程volatile当声明共享变量为volatile后,对这个变量的读/写将会很特别。JMM堆volatile专门定义了一些特殊的访问规则。如果一个字段被声明成volatile,Java线程内存模型确保所有线程看到这个变量的值是一致的。 概述 轻量级synchronized 在使用恰当情况下,比 ...
Elasticsearch:概述
Elasticsearch应用适用性 不适合用在那些数据价值不高、对写入性能有要求、数据量大而成本受限的场景中。 缺陷 字段类型无法修改。在需要添加新数据与新字段的时候,如果elasticSearch进行搜索是可能需要重新修改格式。之前的数据需要重新同步,对数据的管理有很多困难。一旦数据格式出现改 ...
计算机操作系统:协程
协程生产者消费者模式1.定义了一个生产者类,一个消费者类。 2.生产者类循环100次,向同步队列当中插入数据。 3.消费者循环监听同步队列,当队列有数据时拉取数据。 4.如果队列满了(达到5个元素),生产者阻塞。 5.如果队列空了,消费者阻塞。 该生产者/消费者模式,但是却并不是一个高性能的实现。为 ...