Keal's Blog

我的天空, 是雨是风

python数据结构的底层实现

知其然,还要知其所以然. 讲讲dict,list,set常见的容器的底层设计 Dict 查询平均复杂度O(1), 增删复杂度O(1) dict,又叫字典.在python3.6和以前版本中的实现和之后不太一样.简单来说: python3.6及之前是无序的 python3.7及之后是有序的 无序dict版本 底层:哈希列表, 列表里的元素都为(hash_value, k...

Clustered and distributed

集群 集群就是多个机器提供相同的服务. 这样就避免了单点故障,实现了服务的高可用. 不需要数据同步的集群-例如一个web服务集群,可以通过nginx做负载均衡. 这种也可以称为负载均衡集群 分布式 分布式就是不同的机器通过网络连接协调来提供服务,至于是每个机器提供相同的服务还是不同的服务不重要. 比如微服务架构.多个服务独立且通过RPC通信来实现对外的一个整体服务. 分布式集群 ...

A brief discussion of message queues

MQ(消息队列)算是项目经常会用到的一个中间件了,之类对MQ做个大致认识 MQ的作用 解耦: 将同步的任务改为异步通知 广播: 将消息发给所有关心此条消息的服务 错峰流控: 通过MQ来限制一段时间的最大并发量 MQ工作流程 先看MQ的基本工作流程,简化为生产者, MQ, 消费者的关系 producer->MQ->consumer->MQ->produce...

Inverted index

倒排索引常用于搜索引擎,文档搜索. ElasticSearch就使用了倒排索引来检索数据. 正向索引 要理解倒排索引,可以先看看正向索引是怎样的. 举个例子,文章里包含了许多的文字,你想找某个文字出现在哪些文章里. 那么按照遍历每个文章,查看文章中是否出现过关键字的查找就是正向索引.这个查找顺序是文章->文字的. 这就是正向索引(forward index) 缺点: 按照文字...

select, poll, epoll以及Linux下的IO模式

之前一直以为自己已经充分理解了select, poll, epoll,直到看到这样一个问题: 为什么 IO 多路复用要搭配非阻塞 IO? 自己琢磨的有点似是而非,所以重新好好复习下. 先从Linux下的IO模式说起吧. Linux IO模式 Unix网络编程这本书中有讲到5种IO模式: 阻塞 I/O(blocking IO) 非阻塞 I/O(nonblocking...

str,bytes,unicode in Python

python2到3里的编码问题算是常见问题了,发现很多文章有些讲的对但是缺少细节不容易明白,有些文章甚至讲的都不完全是对的.所以这篇文章如果能做到既对了,又能够细节充分让人一看就懂,还是很有意义的. bytes和unicode python里的bytes类型可以理解为最底层的’00001111’这样的数据流,当进行网络传输或者文件传输时,都是通过bytes类型传输. 应用读取bytes...

Thoughts on 996

996 每周早上9点上班,晚上9点下班, 一周工作6天, 被称作为996. 当下中国互联网公司职工的普遍上班模式. 漫谈一下996 996这两年来几乎成为一个大热词,从各大互联网公司慢慢发酵,到github的996.icu, 在到最近拼多多的多名员工猝死. 以及据说每月要求员工上班时长满300小时(已经不只是996了). 在各个平台引起了不少的讨论. 讲真,996从我的经历来看,既...

记一次python和数据库死锁问题的排查

背景故事 最近排查一个初步觉得是死锁的问题,之前在生产环境也是偶尔出现,排查过程中解决了此问题引起的另外的几个问题,可是死锁这个问题一直没有成功在本地环境复现, 并且代码中也未能找到可能产生死锁的点. 直到最近国外10几个生产环境也出现了这个类似的问题,因此这个问题突然重视起来.我也能专心排查这个问题. 业务场景 影院播放一个电影除了需要片源外,还需要一个叫kdm的文件, 此文件相当于...

Sqlalchemy add, flush and commit

Add 官方文档解释: Place an object in the Session. Its state will be persisted to the database on the next flush operation. Repeated calls to add() will be ignored. The opposite of add() is exp...

浅谈架构

为什么需要架构 网上有许多资料, 也有很多书籍提到这个. 个人总结大概是这样: 类似建筑的蓝图, 提供一个抽象的结构来检查是否能满足现在和未来的需求. 对开发来讲, 使模块清晰, 更方便的解决复杂的需求 对企业来讲, 更好的做风险管理和降低成本 常见架构 Software Architecture Patters 主要提到5种: 分层架构: 最常见,容易测试,...