自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(38)
  • 收藏
  • 关注

原创 高并发每日学习【2020-09-28】

问题:高并发带来的问题有哪些?答案:写入脏数据,服务器雪崩从而引发的单点故障,恶意的DDOS导致的带宽占用变高等问题:实现负载均衡的常见算法有哪些?答案:nginx负载均衡算法(1)round-robin:轮询,默认负载均衡算法,通过配合weight配置可以实现加权轮询;(2)ip_hash:根据客户IP进行负载均衡,相同IP将负载均衡到同一个上游服务器;(3)hash key [consistent]:对某一key进行哈希或使用一致性哈希算法进行负载均衡;(4)least_conn:最少连接

2020-09-28 14:28:53 252

原创 看这一篇IO多路复用面试专题就够了!最全面最详细的解答!

多路复用问题汇总BIO有什么缺陷?针对C10K这样的需求,NIO靠什么解决问题?多路复用操作系统函数select(…)工作原理?多路复用操作系统函数select(…)默认监听socket数量为什么是1024?多路复用操作系统函数select(…)第一遍O(N)未发现就绪socket,后续再有某个socket就绪后,select(…)如何感知的?是不停轮询么?多路复用操作系统函数poll(…) 和select(…)主要区别是什么?为什么会有epoll这个技术,它产生的背景是什么呢?epoll

2020-08-22 13:37:38 2109

转载 PHP7系列:词法分析入门-什么是NFA(不确定的有穷自动机)和DFA(确定的有穷自动机)(十)

NFA(不确定有穷自动机)首先我们来看一个问题:

2020-07-25 22:11:38 625

原创 PHP7系列:解释型语言也需要编译吗(九)

PHP代码的编译与执行首先我们来看看编译型语言与解释型语言的区别是什么。编译型语言源语言(C语言)首先编译器进行编译,如果编译错误就报出错误信息;如果编译通过则生成一个可执行的二进制文件(目标语言),可以直接在物理机上运行。解释型语言以PHP代码为例。PHP代码其实也需要经过编译器编译,因为是实时编译的,所以我们写的代码能直接看到结果。这个编译器是由PHP内核实现的,涉及到了词法与语法的分析。先把代码编译成opcodes,需要虚拟机才能执行运行的代码。所以这样看来PHP解释型语言也是需要编译的

2020-07-20 22:07:17 344

转载 什么是堆和栈

栈和堆栈:管程序如何运行的,程序如何执行,如何处理数据。(局部变量其实也是存在栈中的,引用数据类型在栈中存的是地址引用)堆:管数据存储的。(引用数据类型的存放,所以堆的空间是比较大的)生活理解栈的作用主管Java程序的运行,它保存方法的局部变量(8种基本数据类型、对象的引用地址)、部分中间的结果,并参与方法的调用和返回。我们先粗粒度感受一个栈的结构:每个线程都有自己的栈,栈中的数据都是以栈帧(stack Frame)的格式为基本单位进行存储的。(栈中保存的就是一个个栈帧)在这个线程上正在执行

2020-07-20 21:50:10 172

原创 PHP7系列:FastCGI协议详解(八)

URL请求的过程CGIFastCGI

2020-07-17 23:35:42 294

原创 PHP7系列:FPM的三种模式(七)

; Choose how the process manager will control the number of child processes.; Possible Values:; static - a fixed number (pm.max_children) of child processes;; dynamic - the number of child processes are set dynamically based on the; fo

2020-07-13 23:12:20 325

原创 PHP7系列:生命周期(六)

PHP的整个生命周期可以大致分为五个步骤:模块初始化阶段(php_module_startup)请求初始化阶段(php_request_startup)脚本执行阶段(php_execute_script)请求关闭阶段(php_request_shutdown)模块关闭阶段(php_module_shutdown)其中1和5不是每种模式下都要重复执行的。在cli模式下,脚本执行会完整经历5个步骤。而在Fast-CGI模式下,1只在启动时执行,每个请求处理时只经历2、3、4,在最终SAPI关闭

2020-07-12 00:01:10 162

原创 PHP7系列:内存管理(五)

malloc的实现PHP管理内存的核心函数:_emalloc和_efree。ZEND_API void* ZEND_FASTCALL _emalloc(size_t size ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC){#if ZEND_MM_CUSTOM if (UNEXPECTED(AG(mm_heap)->use_custom_heap)) { return _malloc_custom(size ZEND_FILE_LINE_RELAY_C

2020-07-07 14:03:25 231

原创 PHP7系列:核心数组的优化(四)

PHP源码中的数组PHP5的hashtable:typedef struct _hashtable { uint nTableSize; uint nTableMask; uint nNumOfElements; ulong nNextFreeElement; Bucket *pInternalPointer; Bucket *pListHead; Bucket *

2020-07-01 22:51:10 284

原创 PHP7系列:zend_string的优化与写时复制(三)

zend_stringPHP的zend_string结构:struct _zend_string { zend_refcounted_h gc; zend_ulong h; /* hash value 字符串对应的hash值*/ size_t len; char val[1];};会看到有一个zend_ulong h;的hash值。为什么要增加一个hash值呢?它的作用是啥?这是因为

2020-07-01 22:32:23 329 1

原创 PHP7系列:对zval的优化(三)

zval结构体PHP5的zval的定义:结构体的大小是(在64位系统)24个字节struct _zval_struct { union { long lval; double dval; struct { char *val; int len; } str; HashTable *ht; zend_object_va

2020-06-28 22:25:56 294

原创 PHP7系列:新特性(二)

PHP7的新特性太空船操作符 : <=>太空船操作符用于比较两个表达式 例如,当\$a小于、等于或大于\$b时它分别返回-1、0或1 echo 1 <=> 1; //0 echo 1 <=>2; //-1 echo 2 <=>1; //1类型声明declare(strict_types=1);//strict_type=1表示开始严格模式function sumOfInts(int ...$ints):int{ return

2020-06-27 11:38:41 182

原创 PHP7系列:编译安装(一)

PHP7的编译和安装编译和安装去官方网站下载最新版本的PHP源码。下载完之后解压: tar -zxvf php-7.4.7.tar.gz 可以通过下面的命令看看configure支持什么参数:cd php-7.x.x./configure -h #按需选择配置–prefix=PREFIX install architecture-independent files in PREFIX[/usr/local]–enable-fpm En

2020-06-27 10:15:20 175

原创 为什么ES的搜索效率对比数据库的正排索引更快呢?

倒排索引原理正排索引正排是以文档ID为关键字,表中记录文档中每个字的位置信息,查询时扫描表中每个文档中字的信息, 直到找出所有包含查询关键字的文档。倒排索引倒排表是以字或词作为关键字进行索引,表中关键字所对应的记录项记录了出现这个字或词的所有文档ID。正排索引是文档ID到关键字的映射,倒排索引是从关键字到文档ID的映射倒排索引的核心组成1、单词词典:记录所有文档的单词,一般都比较大。还会记录单词到倒排列表的关联信息。2、倒排列表:记录了单词对应的文档集合,由倒排索引项组成。倒排索引项包含

2020-06-21 16:59:21 2724

转载 疫情后跳槽,要考虑哪些要素?

今年的疫情,推迟了往年金3银4的跳槽时节。随着疫情的好转,不少互联网技术小伙伴可能在思考,要不要换工作。今天和大家聊聊互联网技术人换工作这个话题,楼主也面试过的不少候选人,站在面试官的角度,谈谈什么样的IT人会在面试中加分。一,想清楚“自己想要什么”最重要为什么要换工作是自己要想清楚的第一个问题,同时面试官也非常在意你换工作的动机。“离家太远,严重影响生活质量”“加班太多,压力太大”“技术氛围太差,学不到东西”“薪水太低,总不涨薪”“制度不公平,办公室太复杂”“业务

2020-06-10 14:38:12 241 2

原创 亿级流量网站架构核心技术(超时与重试机制)

代理层超时与重试如果应用不设置超时,则可能会导致请求响应慢,慢请求累积导致连锁反应,甚至造成应用雪崩。而有些中间件或者框架在超时后会进行重试(如设置超时重试两次),读服务天然适合重试,但写服务大多不能重试(如写订单,如果写服务是幂等的,则重试是允许的),重试次数太多会导致多倍请求流量,即模拟了DDoS攻击,后果可能是灾难,因此,务必设置合理的重试机制,并且应该和熔断、快速失败机制配合。Nginx相关超时设置Nginx主要有4类超时设置:客户端超时设置、DNS解析超时设置、代理超时设置,如果使用ngx_

2020-06-04 18:32:45 350

原创 亿级流量网站架构核心技术(降级特技)

降级预案在进行降级之前要对系统进行梳理,看看系统是不是可以丢卒保帅,从而梳理出哪些必须誓死保护,哪些可降级。可以参考日志级别设置预案:一般: 比如,有些服务偶尔因为网络抖动或者服务正在上线而超时,可以自动降级。警告: 有些服务在一段时间内成功率有波动(如在95~100%之间),可以自动降级或人工降级,并发送告警。错误: 比如,可用率低于90%,或者数据库连接池用完了,或者访问量突然猛增到系统能承受的最大阈值,此时,可以根据情况自动降级或者人工降级。严重错误: 比如,因为特殊原因数

2020-06-01 16:56:11 255

原创 亿级流量网站架构核心技术(限流技术详解)

限流一般开发高并发系统常见的限流有:限制总并发数(比如数据库连接池、线程池)、限制瞬时并发数(如Nginx的limit_conn模块,用来限制瞬时并发连接数)、限制时间窗口内的平均速率(如Guava的RateLimiter、Nginx的limit_req模块,用来限制每秒的平均速率),以及限制远程接口调用速率、限制MQ的消费速率等。另外,还可以根据网络连接数、网络流量、CPU或内存负载等来限流。限流算法令牌桶算法令牌桶算法,是一个存放固定容量令牌的桶,按照固定速率往桶里添加令牌:假设限制2r/s

2020-05-28 10:30:28 659

原创 亿级流量网站架构核心技术(负载均衡与反向代理)

负载均衡与反向代理在请求一个www.baidu.com网站时,浏览器首先会查询DNS服务器获取对应的IP,然后通过此IP访问对应的服务。DNS域名解析负载均衡的优点:将负载均衡的工作交给DNS,省去了网站管理维护负载均衡服务器的麻烦。技术实现比较灵活、方便,简单易行,成本低,使用于大多数TCP/IP应用。对于部署在服务器上的应用来说不需要进行任何的代码修改即可实现不同机器上的应用访问。同时许多DNS还支持基于地理位置的域名解析,即会将用户分配到离他最近的服务器上以提升体验。DNS域名解析的

2020-05-27 15:37:53 395

原创 RabbitMQ管理(四)

多租户与权限RabbitMQ可以创建虚拟主机(virtual host),vhost本质上是一个独立的小型RabbitMQ服务器,拥有自己的队列、交换器及绑定关系等,并且有自己独立的权限。vhsot是AMQP概念的基础,客户端在连接的时候必须定制一个vhost。RabbitMQ默认创建的vhost为“/”。rabbitmqctl add_vhost {vhost_name} 创建新的vhsotrabbitmqctl delete_vhost {vhost_name} 删除vhsot在创建一个用

2020-05-25 23:08:46 247

原创 RabbitMQ相关概念(三)

一、RabbitMQ的模型架构Producer:生产者,就是投递消息的一方。生产者创建消息,然后发布到RabbitMQ中。消息一般可以包含2个部分:消息体和标签(Label)。Consumer:消费者,就是接收消息的一方。消费者连接到RabbitMQ服务器,并订阅到队列上。当消费者消费一条消息时,只是消费消息的消息体(payload)。Broker:消息中间件的服务节点。一个RabbitMQ Broker可以简单地看作一个RabbitMQ服务节点,或者RabbitMQ服务实例。Queue:队

2020-05-19 23:01:18 1012

原创 RabbitMQ的安装及简单实用(二)

一、安装ErlangRabbitMQ是由Erlang语言编写的,所以在安装RabbitMQ之前需要安装Erlang。可以到Erlang官网根据自己的系统选择安装。因为我是APPLE电脑,所以直接运行 brew install erlang即可。Most OS package managers provide pre-built binary packages. You can also download the latest stable releases from Erlang Solution

2020-05-18 22:51:21 205 1

原创 什么是消息中间件?(一)

什么是消息中间件消息(Message)就是在各个应用间传送的数据。消息队列中间件(Message Queue Middleware,简称为MQ)是指利用高效可靠的消息传递机制进行与平台无关的数据交流,并基于数据通信来进行分布式系统的集成。通过提供消息传递和消息排队模型,它可以在分布式环境下扩展进程间的通信。消息中间件里的数据传递模式:点对点(P2P,Point-to-Point):生产者把消息发送到队列,消费者从队列中接收消息。发布订阅(Pub/Sub):向一个主题(topic)发布和订阅消息,

2020-05-16 17:04:50 567

原创 Redis面试系列:Redis Cluster如何通信?客户端怎么知道数据位于哪个节点?滴滴三面问到你怀疑人生(五)

前言如何保证Redis的高并发和高可用?Redis的哨兵原理能介绍一下么?一、Sentinel(哨兵)模式Sentinel(哨兵)是Redis的高可用性(high availability)解决方案:由一个或多个Sentinel实例(instance)组成的Sentinel系统(system)可以监视任意多个主服务器,以及这些主服务器属下的所有从服务器,并在被监视的主服务器进入下线状态时,自动将下线主服务器属下的某个从服务器升级为新的主服务器,然后由新的主服务器代替已下线的主服务器继续处理命令请求。

2020-05-13 23:36:17 2068 2

原创 Redis面试系列:过期策略和淘汰策略(五)

前言一开始总会把这两个问题搞混淆了。一句话简单解释一下:过期策略:已经过期的key删除方案。【定期删除和惰性过期】淘汰策略:内存不够用的时候的处理方案。【就是常说的LRU算法】一、过期策略redisDb结构的expires字典保存了数据库中所有键的过期时间,我们称这个字典为过期字典:过期字典的键是一个指针,这个指针指向键空间中的某个键对象(也即是某个数据库键)。过期字典的值是一个long long类型的整数,这个整数保存了键所指向的数据库键的过期时间——一个毫秒精度的UNIX时间戳。Re

2020-05-08 23:28:37 222

原创 Redis面试系列:聊一聊Redis的持久化和主从复制(四)

前言大家都可能会被问:Redis与Memcache的区别是什么?最容易记住的可能就是:Redis支持丰富的数据类型和Redis的持久化。Redis服务发生宕机后,在重启时还能进行数据恢复,这也是现在都使用Redis的原因吧。一、Redis持久化机制是什么?RDB持久化(默认)在Redis配置文件redis.conf默认配置了如下信息:#指定在多长时间内,有多少次更新操作,就将数据同步到...

2020-05-07 22:01:07 920

原创 Redis面试系列:跳跃表skiplist实现原理是什么?源码解析(三)

前言之前总是从网上去找跳跃表的实现原理,发现都很难理解,下面我会通过源码和画图分析让你一目了然。一、skiplist前面的文章说到了,zset的实现就有skiplist,我们来看一下zset的结构体:typedef struct zset { dict *dict; //字典存放value,以value为key zskiplist *zsl;} zset;你是否有疑...

2020-05-06 20:48:39 367

原创 Redis面试系列:Redis到底什么时候rehash?源码解析(二)

前言上一章把Redis基础类型介绍完了,更深的问题便会问:哈希表会有什么缺点?或者你了解hash吗?它是怎么解决冲突的?Redis渐进式rehash的原理是什么?下面就来深入的解析这些问题。一、字典字典是Redis中存在最广泛的一种数据结构不仅在哈希对象,集合对象和有序结合对象中都有使用,而且Redis所有的Key,Value都是存在db->dict这张字典中的。Redis 的字典...

2020-05-03 15:52:34 1119

原创 Redis面试系列:基础类型编码方式和应用场景(一)

前言面试中肯定会被问到一个问题:Redis有哪些基础类型,它们的应用场景是什么?或直接问:你实际项目中用到了哪些?下面会结合一些核心源码来讲解,还会讲一些细节点。一、基础类型核心的5个基础类型:string、list、hash、set、zset扩展:HyperLogLog、Geo、Pub/Sub、BloomFilter对象类型(type):字符串对象、列表对象、哈希对象、集合对象、有序...

2020-04-30 16:26:54 274

原创 MySQL面试系列:锁相关的知识点。看完这篇文章,可以吊打面试官(五)

前言前一章提到了解决幻读的问题是加锁的方式,那就聊一聊MySQL锁相关的知识点。锁在面试中问的概率不是很大,了解一下相关的概念就行。一、MySQL锁的分类怎么用乐观锁解决并发问题?面试可能会被问的问题。其中比较难理解的点是兼容性锁这块内容。核心需要要了解的是锁的几种模式。Inorb 支持多粒度锁(multiple granularity locking)它允许行级锁与表级锁共存,...

2020-04-29 09:43:52 1801 2

原创 MySQL面试系列:索引数据结构为什么不用B树、二叉树、哈希表?(四)

前言面试官:MySQL索引的存储结构是什么?面试者:是B+树。面试官:为什么不是B树、二叉树、哈希表?面试者:%……&(&……(懵逼中)面试官:MySQL有哪几种索引?面试者:主键索引、唯一索引、联合索引、普通索引。面试官:什么是聚簇索引、非聚簇索引、覆盖索引、索引下推、最左原则?面试者:%……&(&……(懵逼中)接下来我们就通过了解B+树去全面解...

2020-04-28 09:24:47 1935 1

原创 MySQL面试系列:MVCC是怎么实现的?(三)

前言上篇文章SQL查询语句是如何执行的提到了日志文件:binlog、redo log 、undo log,那接下来我们接着聊undo log怎么实现MVCC的。一、事务隔离级别了解MVCC前,还需要了解一个概念:隔离级别事务隔离级别脏读不可重复读幻读读未提交(read-uncommitted)是是是读已提交(read-committed)否是是...

2020-04-27 09:41:40 835

原创 MySQL面试系列:SQL语句在MySQL内部的执行流程是什么?(二)

一、SQL查询语句是如何执行的?平时在工作中,都是用框架去执行一条SQL语句,那有没有想过一条SQL在MySQL内部到底经历了哪些流程呢?首先我们来看一张MySQL的基本架构示意图:从这张图中可以清楚地看到 SQL 语句在 MySQL的各个功能模块中的执行过程。缓存模块在MySQL8.0废除Server 层包括连接器、查询缓存、分析器、优化器、执行器等,涵盖 MySQL 的大多数核...

2020-04-25 21:01:30 2057

原创 MySQL面试系列:序(一)

面试中问:select * from table where id = 10;这个条SQL语句在MySQL内部的执行过程是什么?binlog、undo log和redo log是在哪一步生成的?一条更新语句:update table set name = "张三" where id = 10;执行内部流程是怎么样的?有了binlog为什么还要有redo log?MySQL隔离级别是...

2020-04-25 14:46:38 358

转载 kafka 如何保证数据不丢失

一般我们在用到这种消息中件的时候,肯定会考虑要怎样才能保证数据不丢失,在面试中也会问到相关的问题。但凡遇到这种问题,是指3个方面的数据不丢失,即:producer consumer端数据不丢失 broker端数据不丢失下面我们分别从这三个方面来学习,kafka是如何保证数据不丢失的。一.producer生产端是如何保证数据不丢失的1.ack的配置策略acks = 0 ...

2020-04-11 21:36:10 426

转载 golang包time用法详解

在我们编程过程中,经常会用到与时间相关的各种务需求,下面来介绍 golang 中有关时间的一些基本用法,我们从 time 的几种 type 来开始介绍。时间可分为时间点与时间段,golang 也不例外,提供了以下两种基础类型时间点(Time)时间段(Duration)除此之外 golang 也提供了以下类型,做一些特定的业务时区(Location)TickerTimer(定...

2020-01-02 17:40:54 421

转载 百亿流量 API 网关设计与实践

第一部分:API 网关概述 分布式服务架构、微服务架构与 API 网关 什么是 API 网关(API Gateway) 分布式服务架构、微服务架构与 API 网关 API 网关的技术趋势 API 网关的定义、职能与关注点 API 网关的定义 API 网关的职能 API 网关的关注点 API ...

2019-07-19 11:28:04 1500

空空如也

空空如也

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

TA关注的人

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