- 博客(22)
- 收藏
- 关注
原创 容器中的迭代器模式
Java 容器中的迭代器模式容器JavaJavaJava 中提供了两大类容器 CollectionCollectionCollection 和 MapMapMap,大致框架图如下:迭代器模式容器为我们提供了多种多样的保存对象的方式,对于容器的遍历,可能也会有多种方式,比如对于链表的遍历,可能希望容器类既可以提供从前往后的遍历,又可以提供从后往前的遍历,迭代器模式就是将集合对象的遍历操作从集合里面抽离出来,放到迭代器类里面,让两者职责更加单一。一个基本的迭代器接口如下所示:public inte
2022-04-14 15:05:27 284
原创 从ReentrantLock进入AQS
AQS 达到线程同步的方式,可总结为:1. 通过LockSupport.park() 阻塞线程,达到没获取到锁的功能2. 通过 CAS 进行原子性的更新队列的 head 和 tail3. 通过一个 voliate 的 state,达到标识锁的状态的目的
2022-04-11 21:09:03 227
原创 算法:那些年遇见的数组第 k 小
一个无序数组中的第 k 小堆整体思路,维护一个大根堆,遍历每个数的时候,判断它是不是比堆顶小,如果小的话,就删除堆顶的,并把当前值添加进去。最后堆顶即为第 k 小。总体时间复杂度为O(Nlogk)O(Nlogk)O(Nlogk),空间复杂度为O(k)O(k)O(k)// public static int findKthLargest(int[] nums, int k) {// if (nums == null || nums.length == 0 || k > nums.le
2022-04-05 15:03:42 234
原创 算法:可被三(五、七)整除的子序列最大和
可被三(五、七)整除的最大和题目描述1262. 可被三整除的最大和 - 力扣给出一个整数数组 nums, 找到其中可以被3 整除的最大子序列和。输入:nums = [3,6,5,1,8]输出:18解释:选出数字 3, 6, 1 和 8,它们的和是 18(可被 3 整除的最大和)。这个题目经常变,就是变成能被 6 整除,能被 7 整除这些。流程分析这乍一看是个0 1 背包问题,每个问题有选和不选两种可能性, 不过在01背包里面选了的话是影响了背包的容量。在这个题呢,选择了某个数之后
2022-03-31 19:34:14 283
原创 算法:二分plus前缀和思想的运用
在前缀和上进行二分题目描述:有一个数组,数组中的数字可以是红色或者蓝色。找到一个子数组,子数组内,红色的数乘积为x,蓝色的乘积为 y,并且 x 末尾 0 的数量和 y 末尾 0 的数量总和不小于 k,找到满足这样要求的子数组长度的最小值。输入示例:1 4 15 8 5BRRBB输出示例:4思路:看到 末尾 0 的个数,就要想到 质因子 2/5 的对数,因为 0 是由某个数乘 10 产生的。这个题又要求每个子数组内乘积末尾 0 的个数,为了加快查找速度,可以使用前缀数
2022-03-28 22:09:45 533
原创 实现容器跨主机通信
实现容器跨主机通信Docker 跨主机 Overlay 网络动手实验 · 风与云原生 前几天在两台虚拟机上面实现了容器的跨主机通信,今天进行梳理一下整个流程。原理目前跨主机容器的通信大部分使用的是 VXLAN 协议,即在三层网络之上,构建一个虚拟的二层网络。要构建这样一个虚拟网络,即在两个设备之间的传输双方约定好的信息格式,双方通过解析特定信息格式知道消息是发送给谁的,从而达到双方通信的目的,VXLAN 协议内部使用 UDP 来进行消息的传输。实验中,整个网络的架构是这样的:流程当在172.
2022-03-27 22:28:07 935
原创 面试官问我缓存一致性
面试官问我缓存一致性当面试官问到缓存一致性的时候,第一想到的总是强一致性,经过不断的查阅资料发现,有两种一致性方案,一种是最终一致性,一种是强一致性,重要是在一致性和性能之前做平衡,中间是一个模糊的灰色地带。所谓最终一致性即最后落到数据库上面的时候是正确的即可,可以牺牲一定的用户体验来提高用户的性能,比如用户看到的库存可能是几秒前的库存;所谓强一致性,即能查到的数据一定是最新的,保证这样的强一致性,也要承担更多的性能损失。查询操作如果仅对数据库有读操作的话,那么势必不用考虑缓存一致性,引入缓存加可以
2022-03-16 15:42:50 1132
原创 docker [An attempt was made to access a socket in a way forbidden by its access permissions] 解决方案
docker 启动容器报错:docker: Error response from daemon: Ports are not available: listen tcp 0.0.0.0:4449: bind: An attempt was made to access a socket in a way forbidden by its access permissions.但是通过netstat 查看也并没有发现4449端口被占用。之前也总是遇到这个问题,后面莫名奇妙又好了,今天终于在github
2022-03-12 20:56:53 3525
原创 Linux 中 DISPLAY 环境变量设置——本地显示 Linux 服务器GUI程序
Linux 中 DISPLAY 环境变量设置——本地显示 Linux 服务器 GUI程序
2022-01-07 12:03:29 21029 1
原创 Redis中的对象系统
Redis 基于上文提到的基本的数据结构,创建了对象系统,包括字符串对象、哈希对象、列表对象、集合对象和有序集合对象,Redis在执行指令的时候,可以根据对象类型判断对象是否可以执行该指令。使用对象系统,也可以根据不同的场景选择不同的数据结构,从而优化使用效率。
2021-12-12 16:04:04 933
原创 Redis 过期键的删除策略
Redis过期键的删除策略常见的对于过期键的删除策略有以下几种:定时删除在设置每个键的时候,设置一个timer,到期就删除该键优点:对内存有效,及时删除过期键缺点:对cpu不友好,当过期键多的时候,删除过期键这一行为会占用很多cpu惰性删除只在读取键时,对过期时间进行判断,如果过期就删除,不过期就返回该键。优点: 对CPU友好缺点:对内存不友好,对于过期的键,不能及时删除,很可能造成过期键堆积。定期删除前两种方式的折中,每隔一段时间执行一次过期键的删除策略,通过限制删除过期键的
2021-12-12 15:57:48 752
原创 Redis 中用到的底层数据结构
今天主要介绍一下Redis中用到的底层数据结构,其主要包含6种,分别为动态字符串、链表、跳跃表、压缩链表、字典、整数集合。动态字符串SDSint len; //代表实际长int free; // 代表 buf 中未使用的长度char[] buf; // 实际存储东西的地方优势:O(1) 时间获得长度减少修改字符串长度时,内存充分配次数可重用 C 里面部分关于字符串的函数链表链表节点的实现typedef struct listNode { ListNode *prev
2021-11-21 13:02:12 771
原创 MYSQL 中的表空间
MYSQL中的表空间MYSQL 的表空间可以理解为其存储在物理磁盘上的 表名.ibd 文件,MYSQL 为了管理方便,增加了很多概念,来一一了解一下。逻辑概念:Segment在 B+树的根页面的中,存储了两个 10 字节的字段,PAGE_BTR_SEG_LEAF,PAGE_BTR_SEG_TOP,这两个字段存储的为 Segment Header 结构,即段头,通过这个字段,可以在表空间中定位到一个 INODE ENTRY 的结构,每个 INODE ENTRY 结构对应一个段。段是什么呢?段是一个逻
2021-11-07 19:17:35 1664
原创 pyinstaller 打包python程序并加密
pyinstaller 打包python程序并加密参考文章:Pyinstaller各参数的意义 - 华为云 (huaweicloud.com)环境python3.7windows10为什么没有使用 py2exe 了,本质是想只打包成一个 exe 文件,但是按照网上的各种方法测试,都没有成功,只能转战 pyinstaller 了步骤首先,安装包:pip3 install pyinstaller打包具体使用到的命令:pyinstaller -F -c --key=qwertyuiop
2021-07-08 19:33:45 2994
原创 VirtualBox 中多个虚拟机组成局域网并连接公网
VirtualBox 中多个虚拟机组成局域网并连接公网达到目标多个虚拟机可组成局域网虚拟机可连接公网本文仅为达到目标,不对具体技术细节进行深究。实现路径虚拟机添加两块网卡,一块用于组建局域网,一块用于连接网络。具体实现虚拟机系统Ubuntu 18.04实现上网功能VirtualBox 要实现上网功能的话,只需添加一块连接方式为 “网络地址转换(NAT)”的网卡即可。在虚拟机系统中,输入ip addr即可看到网卡名称及对应ip地址,除了一张名为 lo 的网卡外,还可看到一
2021-07-05 20:22:50 2431
原创 python中Mongodb的Objectid 实现
python中Mongodb的Objectid 实现Mongodb 作为非关系型数据库,默认实现 了Objectid 作为索引,对数据进行排序。ojbectid 组成在 ObjectId 类中,说明了objectid 的组成:An ObjectId is a 12-byte unique identifier consisting of: - a 4-byte value representing the seconds since the Unix epoch, - a 5-byte
2021-04-27 10:39:08 1360 2
原创 UTC、RTC、UNIX时间戳、localtime 理解
UTC、RTC、UNIX时间戳、localtime 理解UTC 时间UTC是世界协调时间时,UTC 是现在全球通用的时间标准,全球各地都同意将各自的时间进行同步协调。UTC 时间是经过平均太阳时(以格林威治时间GMT为准)、地轴运动修正后的新时标以及以秒为单位的国际原子时所综合精算而成。 即每一个地方在同一时刻的UTC时间是相同的。可以在UTC 时间 网站上看到当前的UTC时间。同时为了统一各地的时间, 引入了时区的概念:从格林威治本初子午线起,经度每向东或者向西间隔15°,就划分一个时区,在这个
2021-04-16 21:34:53 12012 3
原创 索引理解
索引什么是索引索引在现实里面用的也比较多,比如安照书名的字母排序通过建立书籍的索引,就可以通过索引快速找到具体书名的书籍所在的位置。为什么需要索引可以加快查找的速度。如果一排书整整齐齐的放在那里,没有一个具体的顺序,那么要找到一本具体的书,就需要遍历整个书架,需要 O(N)O(N)O(N) 的时间复杂度,而如果按照书名字母顺序排序的画,那么就可以使用二分查找了,O(logN)O(logN)O(logN)的时间复杂度。索引结构常见的索引结构有红黑树(Java 中HashMap 使用)、B树、B+树
2021-04-11 10:52:02 99
原创 Linux 命令使用记录
Linux 命令使用xargs将其他命令的标准输出通过管道作为其他命令的命令参数,可以解决 “参数过长的问题”-p 在执行某个命令的时候询问是否进行-n 1 每次只处理一个参数,可以避免一次性删除过多的文件寻找文件中是否包含字符串grep 命令,从根目录开始查找所有扩展名为.log的文本文件,并找出包含”ERROR”的行find / -type f -name "\*.log" | xargs grep "ERROR"grep -rn "ERROR" * 貌似也可,只是不可以对要查找的
2021-04-11 10:37:50 118
原创 详解TCP的握手与分手
详解TCP的握手与分手为什么要TCP我们都知道,TCP 是可靠传输协议,也就是说,它的目的是为真正的数据传输提供服务,它在发送端与接收端建立一条虚拟的连接,来保证数据传输的可靠性,握手的目的就是为了建立一条虚拟的连接,分手就是为了把连接完全断开。情侣之间的TCP交流我们现在把TCP的发送方和接收方比作一对情侣,发送方就是女朋友吧,现在女朋友要向男朋友发送消息了,消息内容就是“别打游戏了,快陪我玩。”虚拟连接的建立他们之间采用TCP来发送消息,我们都知道,TCP 是全双工的,也就是说女朋友和男朋友
2021-04-03 19:52:16 355
原创 java 1.8 中 HashMap 中常用的位运算
HashMap 中常用的位运算1. 容量如何保持 2 的幂HashMap 中容量默认为16, 如果要指定其他值的话,也会扩容至大于他最接近他的幂。/** * Returns a power of two size for the given target capacity. */ static final int tableSizeFor(int cap) { int n = cap - 1; n |= n >>> 1;
2021-04-03 18:39:35 260
原创 yolo-fastest模型训练&树莓派部署物体检测模型
yolo-fastest模型训练&树莓派部署物体检测模型0. 文档介绍本文档分为以下几个部分:模型训练:使用基于 darknet 的 yolofastest 训练生成用于物体检测的模型arm 端模型推理:通过 ncnn 在 arm 端的优化,进行模型的推理python 调用:ncnn 未提供 python 版本,因此通过 pybind11 生成可用于python 调用的动态链接库建议顺序: 可先按照[arm端](#2. arm端模型推理环境搭建)进行操作,然后[模型训练](1. 模型
2020-11-02 17:25:10 5200 10
空空如也
BusJN 公交车数据集应用论文
2023-01-17
TA创建的收藏夹 TA关注的收藏夹
TA关注的人