Redis——BitMap
1 基本命令Redis提供了SETBIT、GETBIT、BITCOUNT、BITOP四个常用命令用于处理二进制位数组。
SETBIT:为位数组指定偏移量上的二进制位设置值,偏移量从0开始计数,二进制位的值只能为0或1。返回原位置值。
GETBIT:获取指定偏移量上二进制位的值。
BITCOUNT:统计位数组中值为1的二进制位数量。
BITOP:对多个位数组进行按位与、或、异或运算。
2 源码分析2.1 数据结构
扩展:Redis 中的每个对象都是有一个 redisObject 结构表示的。
typedef struct redisObject {
// 类型
unsigned type:4;
// 编码
unsigned encoding:4;
unsigned lru:REDIS_LRU_BITS; /* lru time (relative to server.lruclock) */
// 引用计数
int refcount;
// 执行底层实现的数据结构的指针
void *ptr ...
Redis——SDS结构模型
1 数据结构 SDS(Simple Dynamic String,简单动态字符串),源码底层就是typedef char *sds;
Redis3.x SDS的数据结构定义
struct sdshdr {
//记录buf数组中已使用字节的数量
//等于SDS所保存字符串的长度
unsigned int len;
//记录buf数组中未使用字节的数量
unsigned int free;
//char数组,用于保存字符串
char buf[];
};
buf 尾部自动追加一个’\0’字符并不会计算在 SDS 的len中,这是为了遵循 C 字符串以空字符串结尾的惯例,使得 SDS 可以直接使用一部分string.h库中的函数,如strlen
2 数据优化2.1 数据结构优化在 Redis3.x 版本中不同长度的字符串占用的头部是相同的,如果某一字符串很短但是头部却占用了更多的空间造成空间浪费。所以SDS 分为三种级别的字符串:共有五种类型的SDS(长度小于1字节、1字节、2字节、4字节、8字节)
短字符串(长度小于32) ...
File与IO
1.java.io.File
关于相对路径:在Test方法中和main()中不同,Test中为当前Module,main()中为当前Project
关于renameTo():
public boolean renameTo(File dest)//把文件重命名为指定的文件路径
file1.renameTo(file2)
/*
重命名(移动文件)成功要求:
1.file1必须存在
2.file2必须不存在
3.file2的父目录必须存在
*/
关于删除delete():① Java中的删除不走回收站。② 要删除一个文件目录,请注意该文件目录内不能包含文件或者文件目录。
筛选文件FilenameFilter:
@Test
public void test3(){
File srcFile = new File("d:\\code");
File[] subFiles = srcFile.listFiles(new FilenameFilter() {
@Override
public boolean accept(File ...
Java关键字学习(更新中)
1.assert jdk1.4assert意为断言的意思,这个关键字可以判断布尔值的结果是否和预期的一样,如果一样就正常执行,否则会抛出AssertionError。
assert有两种用法:
(1)asset expression1;
(2)asset expression1 : expression2; // expression2允许我们自定义一个异常错误信息抛出。
注意,在运行的时候,正常情况下assert是不会生效的,因为运行时assert是关闭的,想要使用,必须在VM启动参数中开启:
-enableassertions 或者 -ea
即使assert能够精简的判断一些case,并不推荐在生产环境中使用,因为在运行时默认是关闭assert的,因为开启assert校验,也会损耗一定的性能,并且如果在关键部分的校验使用了assert验证,但是忘记开启assert功能,那么肯定会造成重大的失误,所以一般都是在测试类里面使用的比较多。
那么,既然没法在生产环境中使用assert功能,那么有没有替代的assert的组件?
替代assert的组件(1)在spring环境中,可 ...
进程、线程复习篇
1.进程与线程
进程是执行程序的一次执行过程,是一个动态的概念,是系统分配资源的基本单位
一个进程可以包含若干个线程,线程是CPU调度和执行的单位
程序是指令、数据及其组织形式的描述,进程是程序的实体。
每个线程有自己独立的虚拟机栈、程序计数器
多个线程共享同一个进程中的结构:方法区、堆
单核CPU和多核CPU的理解:
单核CPU,其实是一种假的多线程,因为在一个时间单元内,也只能执行一个线程 的任务。例如:虽然有多车道,但是收费站只有一个工作人员在收费,只有收了费 才能通过,那么CPU就好比收费人员。如果有某个人不想交钱,那么收费人员可以 把他“挂起”(晾着他,等他想通了,准备好了钱,再去收费)。但是因为CPU时 间单元特别短,因此感觉不出来。
多核才能更好的发挥多线程的效率。(现在的服务器都是多核的)
Java应用程序至少3个线程:
main()主线程
gc()垃圾回收线程(典型的守护线程,如果JVM中只有守护线程,那么将退出)
异常处理线程
并行与并发:
并行:多个CPU同时执行多个任务。多个人做多件事。
并发:一个CPU(采用时间片)同时执行多个任务。一个人做多件事 ...
计算机网络大作业
【第一题】:通过比较ISO七层模型、模型、和课堂上介绍的五层模型比较计算机网络体系结构,请画出三种体系结构的示意图,并分别描述、比较各层的功能和支持的协议。答:三种体系结构的示意图及对应简要功能如下图所示:
七层模型每层相对应的网络协议如下表所示:
ISO七层协议模型
对应的协议
应用层
HTTP,TFTP,FTP,NFS,WAIS,SMTP,IMAP
表示层
Telnet,Rlogin,SNMP,Gopher
会话层
SMTP,DNS
传输层
TCP,UDP
网络层
IP,ICMP,ARP,IGMP
数据链路层
PPP,MAC,TDMA,ARP,CSMA
物理层
大量IEEE协议
ISO模型的应用层功能为:为计算机用户提供应用接口,也为用户直接提供各种网络服务,是最靠近用户的一层。
ISO模型的表示层功能为:提供各种用于应用层数据的编码和转换功能,确保一个系统的应用层发送的数据能被另一个系统的应用层识别,此外还可以进行数据压缩和加密。
ISO模型的会话层功能为:负责建立、管理和终止表示层实体之间的通信会话。该层的通信由不同设备中的应用程序之间 ...
第六章、应用层
第六章、应用层Application Layer
编程在不同的端系统上运行通过网络基础设施提供的服务,应用进程彼此通信如Web: Web 服务器软件与浏览器软件通信
网络核心中没有应用层软件网络核心没有应用层功能网络应用只在端系统上存在,快速网络应用开发和部署
5.1 Principles of network applications应用层协议原理网络应用的体系结构
客户-服务器模式(C/S:client/server)
服务器:
一直运行的主机
固定(permanent)的IP地址和周知的端口号(约定)
扩展性:服务器场(server farms for scaling)
数据中心进行
扩展性差
客户端:
主动与服务器通信
与互联网有间歇性的连接
可能是动态IP 地址
不直接与其它客户端通信
对等模式(P2P:Peer To Peer)
(几乎)没有一直运行的服务器
任意(arbitrary)端系统之间可以进行通信
参与的主机间歇性连接且可以改变IP 地址
每一个节点既是客户端又是服务器
自扩展性-新peer节点带来新的服务能力,当然也带来新 ...
第四章、传输层
第四章、传输层4.1 transport-layer services在不同主机上运行的应用进程之间提供逻辑通信(logical communication)在终端系统中运行的传输协议
发送端:将应用消息分成段(segments),传递到网络层
接收端rcv side:将段重新组合成消息,传递到应用层
多个传输协议可用于应用
互联网:TCP和UDP
Transport vs. network layer
网络层:主机之间的逻辑通信
传输层:进程之间的逻辑通信(processes)
从通信和信息处理的角度看,运输层向它上面的应用层提供通信服务,它属于面向通信部分的最高层,同时也是用户功能中的最低层。当网络的边缘部分中的两个主机使用网络的核心部分的功能进行端到端的通信时,只有位于网络边缘部分的主机的协议栈才有运输层,而网络核心部分中的路由器在转发分组时都只用到下三层的功能。两个主机进行通信实际上就是两个主机中的应用进程互相通信。应用进程之间的通信又称为端到端的通信。
运输层的一个很重要的功能就是复用和分用。应用层不同进程的报文通过不同的端口向下交到运输层,再往下就共用网络层提供的 ...
第三章、网络层
第三章、网络层这章很重要!!要好好学尼
3.1介绍网络层在主机和路由器实现,交换机无网络层的关键功能
转发forwarding
路由routing(选路)
网络层分为
数据平面data plane
本地的,每个路由都提供的功能
决定如何将路由器输入端口的数据报转发到输出端口
转发功能(通过判断到达数据报的头部就可以决定)
控制平面control plane
network-wide logic网络范围的逻辑
决定数据报如何选择从哪个端口输出能到达目标主机
两个控制平面实现方法
传统路由算法(每个路由器配置自己的算法)eg.Dijkstra算法
software-defined networking (SDN)全网实现,将硬件软件网络软件化(数据平面与控制平面分离
网络服务模式Network service model
单个数据报(individual datagrams)的服务
保证安全
保证不太慢less than 40 msec delay
数据报流(a flow of datagrams)的服务
有序的数据报传输
保证最小流量带宽
对数据包间距更 ...
第二章、链路层和局域网
第二章、链路层和局域网2.1介绍和链路层的服务术语
datagram数据报
communication link链路
communication link链路
routing algorithm路由算法
链路层服务
Framing, link access: 帧的封装和链路的访问
将数据包封装成帧,加上头部和尾部encapsulate datagram into frame, adding header, trailer
信道访问channel access if shared medium
链路层寻址(帧的头部使用的mac地址,用于识别源和目的)“MAC” addresses used in frame headers to identify source, dest
Reliable delivery between adjacent nodes相邻节点间的可靠传输
至少要保证不错,很少用在低位错误链路(光纤fiber、双绞线twisted pair)
第三章学习如何实现
Flow Control: 流量控制
相邻发送节点和接受节点之间的步调
Error Det ...