BLCL的博客小馆

归档 · 全部📢📢📢 阿里云双十一,2核2G3M的服务器,99元一年,新老用户续费同享!!

首页

关于

归档

算法数据结构

最大堆的原理与实现

基本原理最大堆是一个二叉树,要求这个二叉树的父节点大于它的子节点,同时这个二叉树是一个完全二叉树,也就是说这个二叉树除了最底层之外的其它节点都应该被填满,最底层应该从左到右被填满。显然,最大堆的顶部节点的值是整个二叉树中最大的。我们使用数组来构建一个最大堆,使用数组构建一个二叉树最大堆存在如下性质。假设二叉树某节点在数组中的下标索引为index,则它的父节点在数组中的下标索引为parent = (index - 1) // 2,它的左子节点的下标索引为child_left = index * 2 + 1,右子节点的下标索引为child_right = index * 2 + 2。如果计算出来parent小于0或者child大于了数组最大值,就说明没有父节点或者子节点。代码实现接下来我们创建最大堆类,存储一..

更多

Vue 3 UI 组件库评测

Vue 3 UITS/JSSFC/JSXOptions/CompositionDesktop/Mobile/MPStyle特点缺点推荐Element PlusTSSFCCompositionDesktopscsssetup🌟🌟🌟🌟🌟Ant Design VueTSJSXCompositionDesktoplessReact🌟🌟🌟🌟🌟TDesignTSJSXCompositionDesktop/Mobile/MPlessReact/腾讯🌟🌟🌟🌟🌟Arco Design VueTSSFCCompositionDesktoplessReact/字节🌟🌟🌟🌟🌟Naive UITSJSXCompositionDesktopcss in js图森🌟🌟🌟🌟🌟NutUIT..

更多
loading..
分布式系统一致性哈希二分搜索

一日一技:二分偏左,二分搜索在分布式系统里面也有用?

相信大家都知道二分搜索,在一个有序的列表中,使用二分搜索,能够以O(logN)的时间复杂度快速确定目标是不是在列表中。二分搜索的代码非常简单,使用递归只需要几行代码就能搞定:12345678910111213def binary_search(sorted_list, target): """ sorted_list是单调递增的列表 """ if not sorted_list: return False mid = len(sorted_list) // 2 if target > sorted_list[mid]: return binary_search(sorted_list[mid + 1:], target) elif..

更多
loading..

Modern Unix

所谓工欲善其事,必先利其器,我相信很多程序员都喜欢 Unix 风格的命令行,而 Unix 历史久远, 很多 Unix 上的命令行工具都有了更加 Modern 的替代品,其中由 Rust/Go 编写的命令行工具,更成了这类工具的主流, 它们要么速度更快,要么更加“花里胡哨”。这篇文章打算介绍一些我正在使用的 Modern Unix 工具以及我的终端环境。 starship starship 是一个通用的终端提示符(prompt)自定义工具,由 Rust 编写,支持任何 shell,包括 Windows 上的 Powershell,用法很简单,有一点小要求就是你的终端需要支持 Nerd Font,我用 starship 定制了一个仿 ohmyzsh 的 ys 主题,预览效果如下: 我选择 starship ..

更多
分布式系统消息队列

Pulsar的介绍与安装

简介Apache Pulsar是一个分布式消息队列,它主要由以下三部分组成。组件作用Broker负责producer和consumer的请求还有消息的复制与分发,Broker无状态不存储数据Zookeeper存储元数据、集群配置,负责任务协调还有服务发现等Bookkeeper消息数据还有cursors数据的持久化存储,Bookkeeper的每一个存储节点叫做bookieproducer往Pulsar发送数据,consumer从Pulsar接受数据,consumer接收数据的过程叫做subscription(订阅)。Pulsar有四种订阅模式模式名模式独占(exclusive)一个subscription只能有一个consumer,如果多个consumer使用相同的subscription去订阅一个topi..

更多
loading..
PythonXPathlxml

一日一技:使用Python翻译HTML中的文本字符串

相信大家都用过浏览器的翻译网页功能,例如对于下图这个英文网页:一键翻译成中文以后是这样的:你可能会觉得这个功能很简单,不就是字符串替换吗?那你可以试一试把下面这个HTML片段中的标签下面的英文翻译成中文。其它标签中的不要改动:123<div><p>if you want to parse date and time, your could use <em>datetimeem>, by use this library, you can generate now time by one line code <span>datetime.datetime.now()span> this is so easy.p>div>在标签中的dat..

更多
loading..
Python正则表达式

一日一技:让你的正则表达式可读性提高一百倍

正则表达式这个东西,强大是强大,但写出来跟个表情符号一样。自己写的表达式,过一个月来看,自己都不记得是什么意思了。比如下面这个:1pattern = r"((?:\(\s*)?[A-Z]*H\d+[a-z]*(?:\s*\+\s*[A-Z]*H\d+[a-z]*)*(?:\s*[\):+])?)(.*?)(?=(?:\(\s*)?[A-Z]*H\d+[a-z]*(?:\s*\+\s*[A-Z]*H\d+[a-z]*)*(?:\s*[\):+])?(?![^\w\s])|$)"有没有什么办法提高正则表达式的可读性呢?我们知道,提高代码可读性的方法之一就是写注释,那么正则表达式能不能写注释呢?例如对于下面这个句子:1msg = '我叫青南,我的密码是:123kingname456,请注意保密。'我要提取其中的..

更多
后端软件设计

一日一技:Bug分析,假删除导致文章发布成功却打不开的问题

公司有一个内部博客,大家可以在上面创建自己的账号,然后写文章在全公司分享。昨天这个内部博客开通了API,因此我准备写一个Python程序,把自己公众号文章都搬运上去。然后我就发现这个API接口有一个bug。并且根据它的现象,猜到它问题出在哪里。我先来简单描述一下现象。假设我硬盘上现在有50个Markdown文件。现在我要把它发布到网站上。简化代码如下:1234567import globimport requestsfor path in glob.glob('blog/*.md'): with open(path) as f: article = f.read() requests.post('https://xxx.yyy.com/post?token=abcasdf', jso..

更多
loading..
Python

一日一技:如何让自己的工具函数在Python全局可用?

我们在开发Python项目的时候,经常会写一些工具函数。为了在项目里面多个.py文件中使用这个工具函数,就不得不在多个地方都导入它,非常麻烦。例如下面这个例子:在A.py和C.py文件都要使用clean_msg这个工具函数,那么他们就都要从util.py中导入clean_msg。这似乎理所当然。但今天我在看icecream/builtins.py源代码的时候,突然发现了一个高级用法,可以让我们使用工具函数的时候,就像使用Python的print函数一样,不用导入,而是直接使用。我们先来看看效果:大家注意A.py和C.py,我并没有导入clean_msg而是直接使用了这个函数。并且运行完全正常。关键原理就在入口文件main.py,被我框住的3行:1234import builtinsfrom util im..

更多
network

OSI七层网络参考模型 随笔

简介开放式系统互联模型(英语:Open System Interconnection Model,缩写:OSI;简称为OSI模型)是一种概念模型,由国际标准化组织提出,一个试图使各种计算机在世界范围内互连为网络的标准框架。定义于ISO/IEC 7498-1。该模型将通信系统中的数据流划分为七个层,从分布式应用程序数据的最高层表示到跨通信介质传输数据的物理实现。每个中间层为其上一层提供功能,其自身功能则由其下一层提供。功能的类别通过标准的通信协议在软件中实现。开放式系统互联模型的开发始于上世纪70年代后期,用以支持各种计算机联网方法的出现。在上世纪80年代,该模型成为国际标准化组织(ISO)开放系统互连小组的工作产品。作用承上启下,虚拟化上一层,向下一层提供服务。让每一层具有互连性、互操作性和应用的可移植性..

更多
1495051525379