0%

hash冲突

在使用hash表时肯定会遇到hash冲突的情况(看你设计的hashCode如何,设计的好,冲突就少一些)

但是冲突再少也会存在冲突,那就需要有处理冲突的方法,下面列出来一些处理hash冲突的方法

开放定址法

一旦发生冲突,就去寻找下一个空的散列地址(按照某种规则去找另一个空地址),只要散列表足够大,总能找到空位

阅读全文 »

Git中文路径转义问题

之前在提交博客的时候是直接在终端上使用git进行提交的,没有使用可视化工具,因为可能会同时改了好几个博客,而我在提交的时候通常都是分类提交,在使用git status时看一下有哪些改动,发现中文路径自动转义,导致我在分别add和commit的时候不方便

Git中文路径问题

可以使用来进行配置,默认为true

1
git config core.quotepath false

SCIP解决LP问题

SCIP(Sloving Constraint Interger Programs)是一款非常成熟的整数规划求解框架。

其支持多种文件格式,就以LP文件格式为例

求解 x1 + 2 x2 + 3 x3 + x4的最大值

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Maximize
obj: x1 + 2 x2 + 3 x3 + x4 #目标函数
Subject To #约束条件
c1: - x1 + x2 + x3 + 10 x4 <= 20
c2: x1 - 3 x2 + x3 <= 30
c3: x2 - 3.5 x4 = 0
Bounds #变量的边界
0 <= x1 <= 40
2 <= x4 <= 3
General #定义变量,General表示整型变量,binary表示二进制型
x1
x2
x3
x4
End

命令行输入scip进入SCIP命令行

使用read读取lp文件(自己编写的lp问题)

1
SCIP> read "/Users/zhanghe/Desktop/user/scip/test_scip.lp"

使用optimize求解lp问题

1
SCIP> optimize

使用display solution展示求解答案

1
2
3
4
5
6
7
8
SCIP> display solution

objective value: 111
x1 29 (obj:1)
x2 7 (obj:2)
x3 22 (obj:3)
x4 2 (obj:1)

ziplist实现

注意:我使用的版本是6.0.10,不同版本可能略有差别

ziplist又叫做压缩列表,使用一段连续的内存来存储数据的数据结构,redis为了节约内存而开发的,可以节省内存空间,其并不是以某种压缩算法来进行压缩存储数据,而是表示一组连续的内存空间使用

ziplist结构

1
<zlbytes> <zltail> <zllen> <entry> <entry> ... <entry> <zlend>
  • zlbytes 32位,4个字节 ziplist总字节数
  • zltail 32位,4个字节 压缩列表表尾距离起始位置有多少字节,通过该偏移量,无需遍历整个列表就可以确定表尾节点的地址
  • zllen 16位,2个字节 记录压缩列表节点数量,由于是16位,最大值为65535,超过的话需要遍历整个ziplist才可以知道
  • entry 存储的各个节点
  • zlend 8位,1个字节 表示ziplist结尾的特殊值
阅读全文 »

Git底层剖析

Git中有四个文件很重要,HEAD文件、index文件,objects目录以及refs目录。

  • HEAD文件标识当前被检出的分支
  • index文件保存暂存区信息
  • objects目录存储所有数据内容
  • refs目录存储指向分支的提交对象的指针

objects目录内容

之前的文章中有说过本地库是存在.git目录下的objects文件夹中,而且文件夹名为commit_id的前两位,文件名为commit_id的另外38位,那这里边记录的是什么呢,记录的是commit对象

Git底层有三种类型的对象

  • commit 提交对象,记录版本提交时间、版本作者、版本序列等
  • tree 树对象,记录目录结构
  • blob 数据对象,记录文件的真实内容
阅读全文 »