hashmap的数据结构

存储结构 hashmap在jdk1.8之前采用数组加链表的方式存储,根据key的hash计算存储在数组中的位置,因为hash可能重复,当hash值重复时,则在该数组元素下卦一个链表,jdk1.8以后,默认当链表长度大于8时,会在该链表下挂一个红黑树。 如何计算hash 使用数据的hash值与数组长度进行按位与运行 hash(data) & …

git拉取远程分支基本过程

Step 1: 首先查看当前分支 git branch Step 2: 拉取远程分支代码到本地的一个临时分支 git fetch origin main:tmp 注: git中的 origin 只是远程仓库地址的别名,也可替换为其真正的地址。使用 git remote -v 查看。 一般来说 对于不会用的命令,在其后面加上 –help 即可打开文档,翻到文档 …

DNS与CDN相关联系与实现

背景: Client 1 与 business server 3 及DNS A在地理位置上相较于其他更近。 dns缓存均未命中。 Local DNS 默认实现了 edns 协议。(路由查询会携带源client的ip地址) a.com 域名配置为了 NS 记录方式。 过程解析: Client 1 向local dns(即本机设置的dns服务器,本例中为 …

ArrayList扩容

向ArrayList中添加元素时,若数组容量小于添加元素后长度,则创建一个新的数组,数组长度为原长度的 3/2 倍,然后将旧的数组内容复制到新的数组 // 注释:>> 1 的意思是除2,<< 1的意思是乘2,位计算效率会更高 //参见JDK1.8.0_121 ArrayList.java:255 int newCapacity = oldCapacity + …

《Redis开发与运维》笔记

为什么单线程还能那么快 纯内存访问,Redis将所有数据放在内存中,内存的响应时长大 约为100纳秒,这是Redis达到每秒万级别访问的重要基础。 非阻塞I/O,Redis使用epoll作为I/O多路复用技术的实现,再加上 Redis自身的事件处理模型将epoll中的连接、读写、关闭都转换为事件,不 在网络I/O上浪费过多的时间。 对于字符串类型键,执行 …

Lambda表达式相关的Consumer、Function、Predicate与Supplier的区别

这是参考地址,在此基础上做了整理 区别总览 名称 参数 返回值 实例 Consumer 有 无 Iterable上的forEach方法 Function 有 有 Optional的map方法 Predicate 有 有(bool) Optional的filter方法 Supplier 无 有 懒加载、惰性求值、Stream的generate(静态) 详细解释 …

(git) origin main VS origin/main

首先要知道的是,本地实际上有两个版本库,一个是你本地正在使用的版本库,另一个是远程版本库的副本(默认使用origin作为远程仓库的别名,可以使用 git remote -v 查看) 所以 git fetch 的作用就是同步远程版本库,否则,即使远程版本库修改了,你不主动fetch的话,本地远程版本库的副本还是原来的样子 而本地的远程版本库副本的分支名就是 …

python -m

长话短说 简单来说,-m 参数的作用有两个: 简化运行方式,你可以直接运行在sys.path下的模块而不需要指定具体路径(如果直接用python pkgpath则要指明具体路径) 它会将当前执行的目录也加入到sys.path,这样即使在代码中使用相对或绝对路径 import package_path 也是可以运行的(否则就只能引用sys.path中的 …

linux的du和df命令

du 查看文件或文件夹磁盘占用情况,类似于windows下文件属性 df 查看分区占用情况,类似于查看“我的电脑” du -a 表示统计所有文件和文件夹,否则只统计文件夹 -d num 表示统计文件夹最大深度,不指定则递归统计所有文件夹及其子文件夹。 df df是查看分区使用情况,不指定目录就返回所有分区,指定目录则返回该目录所在分区情况

python中的yield

使用方式 def counter(): print('counter start...') for i in range(): a = yield i print(f'a is {a}') counter() # <generator object counter at 0x000001E7DA8B09E0> counter() # <generator …