基础

简述

JVM 全称Java Virtual Machine,翻译为中文”Java 虚拟机”。本文中的JVM 主要指的是Oracle 公司的HotSpotVM,版本是Java 8。
Java虚拟机主要分为五大模块:

  • 类装载器子系统。
  • 运行时数据区。
  • 执行引擎。
  • 本地方法接口。
  • 垃圾收集模块。
Read more »

B-Tree

结构特征

为了描述B-Tree ,首先定义一条数据记录为一个**二元组[key, data]**,key 为记录的键值,对于不同数据记录,key 是互不相同的,data 为数据记录除key 外的数据。
那么B-Tree 是满足下列条件的数据结构:

  • d 为大于1的一个正整数,称为B-Tree 的度。
  • h 为一个正整数,称为B-Tree 的高度。
  • 每个非叶子节点由n-1 个key 和n 个指针组成,其中d<=n<=2d 。
  • 每个叶子节点最少包含一个key 和两个指针,最多包含2d-1 个key 和2d 个指针,叶节点的指针均为null 。
  • 所有叶节点具有相同的深度,等于树高h 。
  • key 和指针互相间隔,节点两端是指针。
  • 一个节点中的key 从左到右非递减排列
  • 所有节点组成树结构。
  • 每个指针要么为null,要么指向另外一个节点。
  • 如果某个指针在节点node 最左边且不为null ,则其指向节点的所有key小于v(key1) ,其中v(key1) 为node 的第一个key 的值。
  • 如果某个指针在节点node 最右边且不为null ,则其指向节点的所有key大于v(keym) ,其中v(keym) 为node 的最后一个key 的值。
  • 如果某个指针在节点node 的左右相邻key 分别是keyi 和keyi+1 且不为null ,则其指向节点的所有key 小于v(keyi+1) 且大于v(keyi) 。
Read more »

位操作实现乘除法

数 a 向右移一位,相当于将 a 除以 2;
数 a 向左移一位,相当于将 a 乘以 2

1
2
3
int a = 2;
a >> 1; // 1
a << 1; // 4
Read more »

简介

Nginx 是一个web 服务器和方向代理服务器,用于HTTP、HTTPS、SMTP、POP3 和IMAP 协议。
Nginx 是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru 站点开发的,第一个公开版本0.1.0 发布于2004 年10 月4 日。

Nginx 使用可扩展的事件驱动架构,而不是更传统的过程驱动架构。
Nginx 开发的目标是实现10倍以上的性能,优化服务器资源的使用,同时也能够扩展和支持网站的动态增长。

因此,Nginx 成为最知名的模块化、事件驱动、异步、单线程Web 服务器和Web 代理之一。

Read more »

基础

简介

MySQL 是最流行的关系型数据库管理系统,在WEB 应用方面MySQL 是最好的RDBMS(Relational Database Management System:关系数据库管理系统)应用软件之一。
数据库(Database)是按照数据结构来组织、存储和管理数据的仓库。
每个数据库都有一个或多个不同的API 用于创建、访问、管理、搜索和复制所保存的数据。
也可以将数据存储在文件中,但是在文件中读写数据速度相对较慢。
所以,现在使用关系型数据库管理系统(RDBMS)来存储和管理的大数据量。所谓的关系型数据库,是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。
RDBMS 即关系数据库管理系统(Relational Database Management System)的特点:

  • 数据以表格的形式出现。
  • 每行为各种记录名称。
  • 每列为记录名称所对应的数据域。
  • 许多的行和列组成一张表单。
  • 若干的表单组成database 。
Read more »

自定义favicon

favicon.ico 是浏览器选项卡左上角的图标,可以放在静态资源路径下或者类路径下,静态资源路径下的favicon.ico 优先级高于类路径下的favicon.ico。
可以使用在线转换网站https://jinaconvert.com/cn/convert-to-ico.php 将一张普通图片转为.ico 图片,转换成功后,将文件重命名为favicon.ico ,然后复制到 resources/static 目录下。
1.jpg
最后启动项目,就可以在浏览器选项卡中看到效果了。
2.jpg

Read more »

简介

介绍

REmote DIctionary Server(Redis) 是一个由Salvatore Sanfilippo 写的key-value 存储系统。
Redis 是一个开源的使用ANSI C 语言编写、遵守BSD 协议、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库,并提供多种语言的API 。
它通常被称为数据结构服务器,因为值value 可以是字符串(String)、哈希(Hash)、列表(list)、集合(sets)和有序集合(sorted sets) 等类型。

Read more »

问题

1
2
3
File "sms.py", line 8
SyntaxError: Non-UTF-8 code starting with '\xe6' in file sms.py on line 8, but no encoding declared;
see http://python.org/dev/peps/pep-0263/ for details
Read more »

分布式锁简介

分布式锁的实现有哪些?

  • Memcached 分布式锁
    利用Memcached 的add 命令。此命令是原子性操作,只有在key 不存在的情况下,才能add 成功,也就意味着线程得到了锁。
  • Redis 分布式锁
    和Memcached 的方式类似,利用Redis 的setnx 命令。此命令同样是原子性操作,只有在key 不存在的情况下,才能set 成功。(setnx命令并不完善,后续会介绍替代方案)
  • Zookeeper 分布式锁
    利用Zookeeper 的顺序临时节点,来实现分布式锁和等待队列。Zookeeper 设计的初衷,就是为了实现分布式锁服务的。
  • Chubby
    Google 公司实现的粗粒度分布式锁服务,底层利用了Paxos 一致性算法
Read more »