自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(29)
  • 资源 (1)
  • 收藏
  • 关注

原创 ElasticSearch倒排索引原理 数据的写入与查询过程

Elasticsearch在生产中充当的角色业务上,最早启用Elasticsearch(下称ES)是为了解决模糊查询的问题。具体业务场景为大量抓取回来的短视频内容、热门微博、公众号文章、小红书笔记、信息流新闻文章等,需要支持用户模糊查找,而随着每日新增的内容越来越多,这些信息已经积累到单个媒体数千万近亿的数量,因此依靠MySQL的模糊查询是无法满足性能上的要求,考虑引入对应的搜索引擎来解决,于是...

2019-08-26 21:34:16 1971

原创 Python数据类型——String

又隔了好久好久没有写博客,过完了春节元宵清明五一一大堆节日,今年就没了一半了,所以需要抓紧时间充实一下。

2019-05-18 22:23:25 418

原创 InnoDB——锁、事务和复制

锁数据库系统使用锁是为了支持对共享资源进行并发访问,提供数据的完整性和一致性。InnoDB存储引擎中的锁共享锁(S Lock),允许事务读一行数据排他锁(X Lock),允许事务删除或更新一行数据兼容性:S与S可以兼容X不与任何锁兼容InnoDB支持多粒度锁定,也就是允许行级和表级的锁同时存在。实现方式为通过意向锁(Intention Lock):如果需要对最细粒度进行加锁...

2019-12-16 21:16:23 183

原创 InnoDB——架构、日志、表和索引

前言写这篇博文是为了将自己学习完InnoDB的内容梳理一遍。InnoDB是个很复杂很庞大的存储引擎,其中的细节显然是不可能通过一篇文章或者笔记完整地描述出来的,所以这里主要目的是“补漏”,也就是将以前学习MySQL没有了解到的InnoDB“专属”的内容进行梳理和记录。学习的主要来源是姜承尧老师的《MySQL技术内幕——InnoDB存储引擎》一书,国内除了这本书以外,也鲜有对InnoDB进行详细...

2019-12-15 15:41:47 212

原创 Redis 6.0新特性——ACLs

Redis 6.0新特性介绍在2019年纽约的Redis Day上,Salvatore Sanfilippo(AKA Antirez)介绍了即将发布的Redis 6.0的新特性。以下是关于ACLs听译的内容。ACLs简介在过去的十年中,Redis都会有这样的问题:用户执行FLUSHALL,OK现在整个数据库就空了,或者执行DEBUG SEGFAULT,然后Redis的进程就crash退出了...

2019-11-24 19:55:32 1931

原创 理解AMQP协议和RabbitMQ的性能和可靠平衡

前言在之前的博客中,已经使用Pika包实践操作过RabbitMQ了,借用了几个不同的Exchange实现不同功能的生产-消费模式,但是对RabbitMQ的细节还缺乏更进一步的理解。今天从AMQP协议起更仔细地来看一下MQ背后的实现。AMQP协议RabbitMQ通过AMQP协议通信,这就类似于HTTP客户端和服务器进行通信一样。在AMQP中,客户端和服务器之间的通信数据是拆成帧(frame)...

2019-09-27 15:08:21 651

原创 Redis的ZSET的实现及结合源码的跳跃表结构分析

O(1)的skiplist成员查找?众所周知Redis中每种基本类型都有2种或以上的底层实现,一般谈到ZSET,我们会说它的实现是基于ziplist和skiplist的,这没有问题:当ZSET长度小于设定值(zset-max-ziplist-entries)或成员的长度小于设定值(zset-max-ziplist-value)时会使用ziplist的实现,否则使用skiplist实现但是...

2019-09-08 13:28:56 809 1

原创 RabbitMQ入门学习笔记

RabbitMQ简介RabbitMQ是个消息中间件。Producer:发送消息的程序称为生产者Queue:消息在RabbitMQ中存储在队列,队列上限由内存和磁盘决定。队列本质上讲就是一个大的消息缓冲区,多个生产者可以发消息到同一个队列,多个消费者可以从同一个队列获取消息。Consumer:等待接受消息的程序称为消费者Hello World官方教程使用Pika作为RabbitMQ的...

2019-09-07 12:30:48 210

原创 实现一个对Django Models数据进行模拟的Mock方案

问题在开发过程中,整个数据流向为:爬虫抓取数据->数据中端进行数据清洗->入库Web端定义的业务表由于整个流程比较长,而且由于爬虫开发的不稳定性以及数据统计的复杂度,完整的开发往往不能完全异步进行,因为最后面向业务的Web端需要等待清洗入库的数据进行测试。一般来说,如果Web端需要的业务数据比较简单,开发自测的时候都可以手动生成INSERT等SQL模拟假数据,但是如果业务复杂...

2019-09-01 10:40:24 843

原创 Python饿汉式和懒汉式单例模式的实现

# 饿汉式class Singleton(object): # 重写创建实例的__new__方法 def __new__(cls): # 如果类没有实例属性,进行实例化,否则返回实例 if not hasattr(cls, 'instance'): cls.instance = super(Singleton, cls)._...

2019-08-31 12:41:37 2366

原创 网络相关面试题及思考(HTTP类)

HTTP状态码,cookie字段,cookie一般存的是什么,session怎么存在的HTTP状态码1 信息状态码2 成功状态码200 OK204 No Content206 Partial Content 范围请求3 重定向状态码301 Moved Permanently 永久重定向302 Found 临时重定向303 See Other 与302类似,但希望以GET请...

2019-06-12 22:57:37 167

原创 网络相关面试题及思考(TCP/UDP类)

画出TCP的4次挥手过程,为什么需要四次,不能三次吗根据协议,当接收到对方的FIN包后,TCP需要发送ACK进行确认,但是不能将FIN与ACK一并发送,因为在发送FIN前需要将buffer区域的包先发送完毕之后才能够发送FIN包,此时对方仍可以继续发送ACK包,待全部包确认对方收到后才能发送FIN包,保证所有数据传输完整。解释一下TCP的TIME-WAIT,为什么取值为2MSL?在四次挥手中...

2019-06-10 21:55:47 432

原创 TCP协议

什么是TCP协议TCP协议即Transmission Control Protocol传输控制协议,主要用于提供可靠的通信传输,它是面向连接的、可靠的流协议。它的特点是具有顺序控制或重发控制机制、具备流量控制、拥塞控制、提高网络利用率。TCP协议的特点及实现TCP如何提高可靠性TCP通信中通过返回确认应答来提高可靠性。当发送端的数据到达接收主机时,接收主机需要返回确认的ACK(Positi...

2019-05-27 21:42:58 718

原创 Django单元测试类——TestCase与TransactionTestCase

TestCase与TransactionTestCase都是继承自SimpleTestCase,两者主要的区别在于:TestCase在测试开始时,判断当前连接的数据库是否支持事务特性,如支持,则开启事务操作;在测试结束时,同样判断是否支持事务特性,如支持,执行事务回滚,然后关闭所有链接。具体setUpClass与tearDownClass方法如下@classmethod def s...

2019-01-17 11:49:51 1621

原创 为什么InnoDB没有像MyISAM那样记录表的总行数

SELECT count(*) FROM table1;如果执行上述代码对于MyISAM:因为MySQL对该引擎的count有对应优化,精确的行数会被储存在存储引擎中,因此此类没有where条件的单表总行数查询会迅速返回结果。对于InnoDB:因为InnoDB的事务特性,在同一时刻表中的行数对于不同的事务而言是不一样的,因此count统计会计算对于当前事务而言可以统计到的行数,而不是...

2018-11-07 18:35:55 2437

原创 MySQL查询索引集合优化 / Index Merge

在查询时,MySQL有机会将利用不同索引查询得到的结果进行合并汇总得到最后结果。举例:SELECT * FROM table_1 WHERE column_1 = value_1 AND column_2 = value_2;假设table_1上存在索引idx_column1和idx_column2,原本相对合适的索引应该是idx_best = (column_1, column_2)的联合索...

2018-10-17 18:32:48 291

原创 [Todo] WebSocket in Python

What is WebSocketThis wire format for the data transfer part is described by the ABNF [RFC5234] given in detail in this section. (Note that, unlike in other sections of this document, the ABNF in th...

2018-10-11 15:08:49 237

翻译 [Todo] InnoDB存储引擎

https://dev.mysql.com/doc/refman/8.0/en/innodb-storage-engine.html

2018-09-25 19:16:43 130

原创 MySQL事务 - 自增ID的回滚以及Auto Increment在InnoDB的实现

CREATE TABLE auto_inc_test( id int auto_increment, test_id int, primary key id(id))ENGINE=InnoDB;mysql> start transaction;mysql> INSERT INTO auto_inc_test (test_id) values (1);mysql> INSE...

2018-08-15 19:36:42 3128

原创 [Todo]ElasticSearch多个关键词搜索的排序

ElasticSearch多关键词搜索举例,搜索框填入以下关键词: 韩国 美女假设每条数据包含1个数值,如count,包含1个文本值,如“这位是来自韩国的美女”想要的结果: 尽可能贴合搜索关键词的情况下(尽可能),结果按照count值倒序(必须)此处就产生一个优先级的问题,同时match韩国和美女两个关键词的数据的count比只match韩国或者美女的数据count值要...

2018-07-23 19:29:04 3492 2

原创 聚簇索引以及InnoDB和MyISAM的存储和查询结构

定义A clustered index is a special type of index that reorders the way records in the table are physically stored. Therefore table can have only one clustered index. The leaf nodes of a clustered inde...

2018-07-11 19:35:40 523

原创 MySQL覆盖索引和性能测试

覆盖索引:如果一个索引包含全部需要查询的字段,就称之为“覆盖索引”举例:索引(a,b)查询 SELECT a,b FROM table_1;索引包含了a,b字段,这两个字段又正好是以上查询所需的字段,因此索引(a,b)对这个查询而言是覆盖索引覆盖索引的优点索引条目通常远小于数据行大小,因此如果只需要读取索引,能够极大减少数据访问量某些引擎例如MyISAM在内存中只缓存...

2018-07-09 20:42:42 532

原创 Django debug工具debug_toolbar与跟踪ajax请求

Debug_Toolbarhttp://django-debug-toolbar.readthedocs.io/en/latest/installation.htmlTrack Ajax Requesthttps://github.com/djsutho/django-debug-toolbar-request-history安装debug_toolbar和django-deb...

2018-04-25 11:12:50 952

原创 python json.loads兼容单引号数据

Python的json模块解析单引号数据会报错,示例如下>>> import json>>> data = "{'field1': 0, 'field2': 'hehehehe', 'field3': 'hahaha'}">>> json.loads(data) Traceback (most recent call las...

2018-04-20 17:19:02 8334 2

原创 Django查询条件使用变量作为字段名

value = ‘value’ field = ‘field_name’ TestModel.objects.get(**{field:value }) 踩坑是因为项目中有数个表,每个表都有一个字段是外键字段,例如各表都有:CarField, BusField, TrainField, BikeField,每个表除了外键字段以外其他字段都相同现在想写一个共用的方法来修改表中一个特定字段...

2018-04-10 20:07:48 4804 7

原创 Ubuntu误卸载python 重启后桌面无显示修复

系统Ubuntu 16.04 卸载python3.6:sudo apt-get remove python3.6 sudo apt-get remove python3卸载过程一路Yes 最后卸载掉了桌面相关的依赖,导致重启后桌面除了壁纸以外无内容显示修复: ctrl+alt+F1进入console sudo apt-get install ubuntu-minimal ubuntu-sta

2018-04-08 15:43:33 6965 3

原创 Nginx和php,FastCGI和php-fpm

11月2日 Nginx和php之间是怎样进行交流的?FastCGIhttps://en.wikipedia.org/wiki/FastCGICGI是为外部应用和Web服务器提供接口的协议. CGI应用在不同进程中运行,它们在请求时创建,请求结束时关闭。这种一个请求对应一个进程的模型让CGI应用易于实现,但也降低了他的效率和可伸缩性。FastCGI用持续进程来处理多个请求。每次fork CGI会解析...

2017-11-07 22:03:37 332

原创 笔试题(数据库)

笔试中遇到的DB相关问题

2017-10-14 20:35:25 360

原创 笔试题(Linux)

一些笔试碰到不会的笔试题

2017-10-14 20:00:26 336

《Fluent Python》 原版书 流畅的Python 高清电子版PDF

英文原版书 / 影印版 Luciano Ramalho著,高清电子版,非扫描版 Fluent Python Clear, Concise, and Effective Programming (2015)

2019-06-20

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除