自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

码农富哥

公众号:【码农富哥】,致力于分享服务端架构,算法,计算机基础(MySQL, Linux, TCP/IP, Python)原创干货,欢迎关注交流

  • 博客(74)
  • 收藏
  • 关注

原创 一文彻底学会Redis主从复制(高可用)

https://juejin.im/book/5afc2e5f6fb9a07a9b362527/section/5afc375b6fb9a07aca7a5ae8https://blog.wangzhipeng.top/2019/05/16/2019_05_16/https://www.cnblogs.com/kismetv/p/9236731.htmlhttps://zhuanlan.zhihu.com/p/55532249https://juejin.im/post/5b625b9be51d451

2020-06-27 11:29:57 543 1

原创 一文彻底搞懂MySQL基础:B树和B+树的区别

写在前面大家在面试的时候,肯定都会被问到MySql的知识,以下是面试场景:面试官:对于MySQL,你对他索引原理了解吗?我:了解面试官:MySQL的索引是用什么数据机构的?我:B+树面试官:为什么要用B+树,而不是B树?我:…面试官:用B+树作为MySql的索引结构,用什么好处?我:…B树和B+树是MySQL索引使用的数据结构,对于索引优化和原理理解都非常重要,下面我的写文章就是要把B树,B+树的神秘面纱揭开,让大家在面试的时候碰到这个知识点一往无前,不再成为你的知识盲点!欢迎关注公

2020-06-24 11:27:27 88187 50

原创 深入剖析Redis高可用系列:持久化 AOF和RDB

Redis高可用概述Redis持久化概述RDB持久化AOF持久化

2020-06-21 16:57:27 2130

原创 Redis高频面试题(来自字节跳动,腾讯,百度面试题总结)

Redis面试题概述Redis为什么这么快持久化原理什么是持久化持久化方式RDB和AOF的原理持久化方式RDB和AOF的优缺点和使用场景事务乐观锁与悲观锁的区别?管道PIPELINE的使用缓存穿透,缓存击穿,缓存雪崩解决方案键过期删除策略缓存淘汰算法: LRU 和 LFU线程模型Redis集群Redis使用场景概述Redis为什么这么快1、完全基于内存,绝大部分请求是纯粹的内存操作,非常快速。数据存在内存中,类似于 HashMap,HashMap 的优势就是查找和操作的时间复杂度都是O(1);2、数

2020-05-23 16:29:17 2792

原创 TCP协议可靠性是如何保证之 流量控制和拥塞控制

原创文章首发于公众号:「码农富哥」,致力于分享后端技术 (高并发架构, 中间件, Linux, TCP/IP, HTTP, MySQL, Redis), Python 等 原创干货 和 面试指南!TCP/IP协议是非常重要的一个知识点,也一直是面试的高频题,当面试官问你,能说说TCP协议是怎么保证可靠传输的吗,你能回答上吗?TCP 是一种提供可靠性交付的协议。也就是说,通过 TCP 连接...

2020-02-27 13:45:09 1909

原创 TCP协议可靠性是如何保证之滑动窗口,超时重发,序列号确认应答信号

原创文章首发于公众号:「码农富哥」,欢迎收藏和关注,如转载请注明出处!TCP 是一种提供可靠性交付的协议。也就是说,通过 TCP 连接传输的数据,无差错、不丢失、不重复、并且按序到达。但是在网络中相连两端之间的介质,是复杂的,并不确保数据的可靠性交付,那么 TCP 是怎么样解决问题的?TCP 是通过下面几个特性保证数据传输的可靠性:序列号和确认应答信号超时重发控制连接管理滑动...

2020-02-24 21:33:04 2004

原创 一文彻底搞懂 TCP三次握手、四次挥手过程及原理

原创文章出自公众号:「码农富哥」,如需转载请注明出处!文章如果对你有收获,可以收藏转发!另外可以关注我公众号**「码农富哥」**,我会持续输出数据库,架构,计算机基础的 原创 文章TCP 协议简述TCP 提供面向有连接的通信传输,面向有连接是指在传送数据之前必须先建立连接,数据传送完成后要释放连接。无论哪一方向另一方发送数据之前,都必须先在双方之间建立一条连接。在TCP/IP协议中,T...

2020-02-22 18:53:54 17279 2

原创 5分钟看懂系列:HTTP缓存机制详解

什么是HTTP缓存HTTP 缓存可以说是HTTP性能优化中简单高效的一种优化方式了,缓存是一种保存资源副本并在下次请求时直接使用该副本的技术,当 web 缓存发现请求的资源已经被存储,它会拦截请求,返回该资源的拷贝,而不会去源服务器重新下载。一个优秀的缓存策略可以缩短网页请求资源的距离,减少延迟,节省网络流量,并且由于缓存文件可以重复利用,降低网络负荷,提高客户端响应。所以,学会利用HTTP缓...

2020-02-10 14:17:33 1037

原创 推荐使用多年的这些高效的工具网站,每一个都值得收藏

编程实战练习牛客网 https://www.nowcoder.com/这里包含大量笔试面试真经,大量的各大互联网题库和面试真经交流,让你应对面试事半功倍。赛码网 https://www.acmcoder.com/index这里有很多名企公司,中小公司的面试题,还有在线考试,校招实习和社招的岗位推荐。leecode(中国区)https://leetcode-cn.com/problem...

2020-02-09 16:03:13 1481 1

原创 IO复用模型同步,异步,阻塞,非阻塞及实例详解

IO模型介绍常用的5种IO模型:blocking IOnonblocking IOIO multiplexingsignal driven IOasynchronous IO再说一下IO发生时涉及的对象和步骤:*对于一个network IO (这里我们以read举例),它会涉及到两个系统对象:*一个是调用这个IO的process (or thread)一个就是系统内核(kernel)...

2020-02-08 11:02:04 1061

原创 linux基础:日志定时轮询详解

logrotate介绍对于Linux系统安全来说,日志文件是极其重要的工具。日志文件包含了关于系统中发生的事件的有用信息,在排障过程中或者系统性能分析时经常被用到。当日志文件不断增长的时候,就需要定时切割,否则,写日志的速度和性能也会下降,更不便于我们归档,查询。所以便有了使用logrotate的时候 ,logrotate是个十分有用的工具,它可以自动对日志进行截断(或轮循)、压缩以及删除旧的日...

2020-02-07 21:15:15 1310

原创 Python 闭包和__call__详解及开发实践

背景最近在使用wtform做后台的表单验证时候,跟很多框架使用的方法一样,它是结合ORM的对象提供校验, wtform 默认提供了不少的校验器,但是有的字段需要自己编写一些业务相关的校验器。自定义的每个校验器的特点都是接受两个参数,form, field。所以我们自己自定义校验器,校验器都必须是可调用对象即可,即函数,对象方法,都可以的。比如function url_validate(form,...

2020-02-07 20:32:37 1105

原创 记一次Mysql线上事故之metadata锁详解

背景在项目的一次需求中,需要对一个表增加字段,然而在执行增加字段的sql语句时,卡住了很久都没提交到Mysql完成,而此时对外接口服务请求也卡住了,这时中断卡住的alter table 语句,服务慢慢恢复正常,如果不搞清楚这个问题的根源,不敢增加字段,因为会直接影响到服务排查通过show processlist 查看到在alter table语句执行卡住过程中,累计了大量状态为 Waiti...

2020-02-07 20:29:40 1101

原创 三分钟玩转堆排序原理及面试题(多图解释 Python实现)

堆基本概念堆排序是一个很重要的排序算法,它是高效率的排序算法,复杂度是O(nlogn),堆排序不仅是面试进场考的重点,而且在很多实践中的算法会用到它,比如经典的TopK算法、小顶堆用于实现优先级队列。堆排序是利用堆这种数据结构所设计的一种排序算法。堆实际上是一个完全二叉树结构。问:那么什么是完全二叉树呢?答:假设一个二叉树的深度为h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大...

2020-02-07 18:40:57 1137

原创 Python 线程池原理及实现

概述传统多线程方案会使用“即时创建, 即时销毁”的策略。尽管与创建进程相比,创建线程的时间已经大大的缩短,但是如果提交给线程的任务是执行时间较短,而且执行次数极其频繁,那么服务器将处于不停的创建线程,销毁线程的状态。一个线程的运行时间可以分为3部分:线程的启动时间、线程体的运行时间和线程的销毁时间。在多线程处理的情景中,如果线程不能被重用,就意味着每次创建都需要经过启动、销毁和运行3个...

2017-07-26 18:08:38 21173 2

原创 python nginx+uwsgi+WSGI 处理请求详解

请求从 Nginx 到 uwsgi 到 django 交互概览作为python web开发,我们首先要弄清楚,到底一个请求过来,发生了什么事,请求的传递是怎么样完成的,由nginx是怎么转发到uwsgi, uwsgi又是怎样把请求传给到我们的框架(django or falsk)由我们自己写的代码处理,返回数据给客户端的。因此我作了以下一个粗略的流程图:uwsgi 处理过程.png以下

2017-07-26 18:08:26 8750 2

原创 nginx入门必备收藏:nginx 正则表达式匹配详解

1、nginx配置基础1、正则表达式匹配~ 区分大小写匹配~* 不区分大小写匹配!~和!~*分别为区分大小写不匹配及不区分大小写不匹配^ 以什么开头的匹配$ 以什么结尾的匹配转义字符。可以转. * ?等* 代表任意字符2、文件及目录匹配-f和!-f用来判断是否存在文件-d和!-d用来判断是否存在目录-e和!-e用来判断是否存在文件或目录-x和!-

2013-06-20 16:38:37 105353 2

原创 面试官:说说UDP和TCP的区别及应用场景

原创文章出自公众号:「码农富哥」,如需转载请注明出处!文章如果对你有收获,可以收藏转发!另外可以关注我公众号「码农富哥」,我会持续输出Python,服务器端架构,计算机基础的 原创 文章TCP/IP 中有两个具有代表性的传输层协议,分别是 TCP 和 UDP。来看看传输层位于OSI七层协议和TCP/IP四层协议的位置:那么TCP和UDP的区别和使用场景分别是怎样的?我们用一个图来对...

2020-02-23 10:34:16 1892 1

原创 5分钟看懂系列:Python 线程池原理及实现

概述传统多线程方案会使用“即时创建, 即时销毁”的策略。尽管与创建进程相比,创建线程的时间已经大大的缩短,但是如果提交给线程的任务是执行时间较短,而且执行次数极其频繁,那么服务器将处于不停的创建线程,销毁线程的状态。一个线程的运行时间可以分为3部分:线程的启动时间、线程体的运行时间和线程的销毁时间。在多线程处理的情景中,如果线程不能被重用,就意味着每次创建都需要经过启动、销毁和运行3个过程。这...

2020-02-07 21:11:48 2125 2

原创 经典好文:一致性HASH算法详解,看不懂你打我

基本场景比如你有N个cache服务器(后面简称cache),那么如何将一个对象object映射到N个cache上呢,你很可能会采用类似下面的通用方法计算object的hash值,然后均匀的映射到到N个cache;求余算法: hash(object)%N一切都运行正常,再考虑如下的两种情况;1一个cache服务器m down掉了(在实际...

2020-02-07 20:52:01 967

原创 吐血整理 -- 10道精选 BAT 海量数据面试题,看完不虚了

前言大家想学习更多面试技巧,技术干货,可以加一下我的公众号:码农富哥(搜索coder2025)。面试题目经过对BAT常考的海量数据题的收集,整理出下面BAT的高频面试题,看完好好理解完,以后面试不会虚。以下是呕血整理, 先看看题目如何从大量的 URL 中找出相同的 URL?(百度)如何从大量数据中找出高频词?(百度)如何找出某一天访问百度网站最多的 IP?(百度)如何在大量的数据...

2020-01-31 15:31:43 306 1

原创 IO复用模型同步,异步,阻塞,非阻塞及实例详解

IO模型介绍常用的5种IO模型: blocking IO nonblocking IO IO multiplexing signal driven IO asynchronous IO再说一下IO发生时涉及的对象和步骤:对于一个network IO (这里我们以read举例),它会涉及到两个系统对象:一个是调用这个IO的process (or thread)

2017-07-26 18:08:35 710

原创 sql join 的on 和 where 区别

essay文章表跟essay_comment评论表的关联是 essay.id=essay_comment.essay_idSELECT e.id, e.app_id, e.deleted ,ec . * FROM `essay` eLEFT JOIN `essay_comment` ec ON e.id = ec.essay_idand e.deleted=0WHERE app_id

2017-07-26 18:08:32 430

原创 linux 日志定时轮询流程详解

logrotate介绍对于Linux系统安全来说,日志文件是极其重要的工具。日志文件包含了关于系统中发生的事件的有用信息,在排障过程中或者系统性能分析时经常被用到。当日志文件不断增长的时候,就需要定时切割,否则,写日志的速度和性能也会下降,更不便于我们归档,查询。所以便有了使用logrotate的时候 ,logrotate是个十分有用的工具,它可以自动对日志进行截断(或轮循)、压缩以及删除旧的日

2017-07-26 18:08:29 5042

原创 TIME_AWAIT大量出现及解决办法

TIME_WAIT状态一次无意中再群上看到有人讨论为什么循环connect socket发送信息,循环到一定程度就发送不了数据了,代码大致上时这样的import sockethost = '127.0.0.1'ip = 8888while True: sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock

2017-07-26 18:08:23 5474

原创 Python 多线程锁详解

线程锁 Lock多线程和多进程最大的不同在于,多进程中,同一个变量,各自有一份拷贝存在于每个进程中,互不影响,而多线程中,所有变量都由所有线程共享,所以,任何一个变量都可以被任何一个线程修改,因此,线程之间共享数据最大的危险在于多个线程同时改一个变量,把内容给改乱了。先看一个没有加锁的操作balance = 0def change_it_without_lock(n): globa

2017-07-26 18:08:20 1844

原创 正则表达式 特殊构造用法

问题: 查找不能有字符串abc的匹配正则表达式字符串结果r'a(?=bbb)'abbbar'abbb'abbbabbbpython 2.7 文档说明 https://docs.python.org/2/library/re.html(?=...)Matches if ... matches next, but doesn’t consume any o

2017-07-26 18:08:17 3455

原创 运维常用命令

redis模糊匹配批量删除键值redis-cli KEYS "pattern" | xargs redis-cli DEL查询日志访问次数排行tail access.log -n 20000|awk '{print $7}'|sort|uniq -dc|sort -n按文件扩展名grep字符串grep -r --include=\*.py User分析LOG日志游戏包下载次数c

2017-07-26 18:08:13 1729

原创 一致性HASH算法详解

基本场景比如你有 N 个 cache 服务器(后面简称 cache ),那么如何将一个对象 object 映射到 N 个 cache 上呢,你很可能会采用类似下面的通用方法计算 object 的 hash 值,然后均匀的映射到到 N 个 cache ;求余算法: hash(object)%N一切都运行正常,再考虑如下的两种情况;1 一个 cache 服务器 m down 掉了(在实际应用中必

2017-07-26 18:08:10 1425

原创 部署项目Nginx+Tornado+Supervisor

TornadoTornado 和现在的主流 Web 服务器框架(包括大多数 Python 的框架)有着明显的区别:它是非阻塞式服务器,而且速度相当快。得利于其 非阻塞的方式和对 epoll 的运用,Tornado 每秒可以处理数以千计的连接,这意味着对于实时 Web 服务来说,Tornado 是一个理想的 Web 框架。我们开发这个 Web 服务器的主要目的就是为了处理 FriendFeed 的

2017-07-26 18:08:08 2334

原创 python多线程编程: 使用互斥锁同步线程

#!/usr/bin/env python# -*- coding: utf-8 -*-import time, threading# 假定这是你的银行存款:balance = 0muxlock = threading.Lock()def change_it(n): # 先存后取,结果应该为0: global balance balance = balanc

2017-07-26 18:08:05 438

原创 Python 多线程|Queue队列|生产者消费者模式|

Queue队列Python中,队列是线程间最常用的交换数据的形式。Queue模块是提供队列操作的模块,虽然简单易用,但是不小心的话,还是会出现一些意外。Queue是线程安全的,自带锁,使用的时候,不用对队列加锁操作。1. 将一个值放入队列中 q.get()调用队列对象的get()方法从队头删除并返回一个项目。可选参数为block,默认为True。如果队列为空且block为True,ge

2017-07-26 18:08:02 2838

原创 Python 多线程抓取图片效率实验

Python 多线程抓取图片效率实验import requestsimport urlparseimport osimport timeimport threadingimport Queuepath = '/home/lidongwei/scrapy/owan_img_urls.txt'#path = '/home/lidongwei/scrapy/cc.txt'fetch_img_

2016-02-19 16:22:58 1131

原创 jquery 使用$.ajax 时获取原生XMLHttpRequest 对象

$('.screenshot_input').change(function (){ //获取file对象 即相当于可以直接post的$_FILES数据 var domFile = $(this)[0].files[0] var domForm = $('#testForm')[0] //将form对象直接作为参数 new Form

2014-01-10 18:18:55 13919 4

原创 HTML 5 FILE API

新建网页function selfile() { var pic = document.getElementsByTagName('input')[0].files[0]; console.log(pic); var debug = document.getElementById('debug'); var cont = ''; cont += '文

2013-12-23 16:20:04 809

原创 html 上传文件时 选中文件后自动开始上传

function upload(){ var element = document.getElementById("pic1"); if("\v"=="v") { element.onpropertychange = uploadHandle; } else {

2013-09-27 10:53:52 14371 3

原创 PHP 等比缩放 缩略图 类

/** * * *等比缩放 * @param unknown_type $srcImage 源图片路径 * @param unknown_type $toFile 目标图片路径 * @param unknown_type $maxWidth 最大宽 * @param unknown_type $maxHeight 最大高 * @param unknown_type

2013-08-26 17:04:53 1144

原创 nginx 配置说明 rewrite

项目配置:server {    listen 807;      server_name localhost;    root /data/web/myblog/web;    client_max_body_size 501m;     error_log /data/server/nginx/symfony2.error.log;    acces

2013-06-21 12:47:31 2776

原创 Nginx配置虚拟主机及对PHP的支持

在conf目录下面创建vhosts目录,并创建站点的配置文件,这里以examples.com.conf为例。代码如下复制代码[root@localhost ~]# cd /usr/local/nginx/[root@localhost nginx]# mkdir -p conf/vhosts[root@localhost nginx]# vim con

2013-06-20 16:39:59 6647

原创 nginx中的try_files指令解释

try_files 指令的官方介绍比较让人摸不着头脑,经网上一番总结查看,try_files最核心的功能是可以替代rewrite。 try_files语法: try_files file ... uri 或 try_files file ... = code默认值: 无作用域: server locatio

2013-06-20 16:26:35 21655 1

空空如也

空空如也

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

TA关注的人

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