自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Coder Liu的博客

Stay foolish, Stay hungry

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

原创 微信长按图片无法弹出识别二维码选项解决方案

改好了 兄弟们 忙了一天 终于识别二维码了1.首先页面中有两个二维码的兄弟别忙活了,一个页面中只可以识别其中一个二维码,两个的话需提示用户双击放大二维码进行二维码识别.2.网页内有一张图片进行二维码识别时长按没有反应这个就是我所遇到的问题。需要调到特别大才能识别,但是特别大就会影响到背景图片,就会有问题,在网上搜了一下结合自己的思路给大家一个解决方案,因需求而异解决思路首先要把这张

2016-07-21 09:31:36 133005

原创 Go 语言底层原理

文章目录数组与切片切片扩容函数传参MapMap底层数据结构key的访问map的遍历遍历的随机性遍历当中发生的扩容扩容扩容触发条件条件1-扩充条件2-压实接口底层结构ifaceeface接口类型是不是nil方法接收者Channel底层结构channel的发送策略channel的接收策略channel的关闭happend-before标准库ContextContext取消timerCtxreflectTypeValueunsafe底层结构修改私有成员变量GMP基础数据结构运行流程抢占sysmon作用P的限制设置

2021-04-26 14:45:34 2977

原创 NoSQL架构模式与MySQL对比

LSM树介绍[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZkLgweYF-1603354164905)(evernotecid://8BF4008B-52C0-484E-A4B5-8EBD45F20215/appyinxiangcom/13973009/ENNote/p466?hash=0cd06a312126bf95590861273367a4f6)]LSM 树(Log-Structured Merge Tree)牺牲了一定的读性能来换取写入数据的高性能,Hbase、

2020-10-22 16:11:37 316 1

原创 Linux-dig命令

本篇文章简单介绍了dig命令的使用,因为在实际的开发工作中,这个命令绝对需要熟练使用,并对其输出内容要有基本的了解.DNS记录说明DNS 记录的类型说明类型A记录: A记录是指定域名对应的IP地址。类型AAAA记录:该记录是将域名解析到一个指定的IPV6的IP上类型CNAME记录:通常称别名解析。可以将注册的不同域名都转到一个域名记录上,由这个域名记录统一解析管理,与A记录不同的是,CNAME别名记录设置的可以是一个域名的描述而不一定是IP地址类型NS记录 : 域名服务器记录,如果需要把子域.

2020-10-22 14:39:37 299

原创 TCP Nagle 与TCP Delayed ACK性能问题

简介Nagle算法Nagle算法的问题:在小包传输时可以合并发送,Nagle 算法,用于减少小包发送数量的一种优化算法,目的是为了提高实际带宽的利用率.Nagle算法定义:inhibit the sending of new TCP segments when new outgoing data arrives from the user if any previously transmitted data on the connection remains unacknowledged.伪码

2020-09-21 17:44:48 485

原创 架构设计-保持架构简洁性

开发当中要尽量避免,一些无限制的服务拆分,导致服务数量的庞大.架构要保持一个度,其中人力,服务边界,性能等等都要考虑到,本文记录一次,冗余架构拆分带来的性能损耗.架构模式介绍一个调度服务(C++)负责下发请求到对应的下游服务,获取对应的结果.由于下游服务是一个业务的整体,就加了一个网关的模块是基于PHP写的.#mermaid-svg-oH9X5mGL0kyENB8k .label{font-family:'trebuchet ms', verdana, arial;font-family:var(.

2020-08-26 20:14:29 300 1

原创 三种缓存策略分析:Cache aside,Read/Write through,Write Back

Cache aside旁路缓存,旁路缓存操作逻辑是查询缓存,如果不存在那么就读取数据库并更新到缓存当中.如果是更新数据库,那么操作完数据库后,删除缓存.注意旁路缓存,缓存中的内容是不做更新操作的,只有写入和删除操作.问题1.请求1查询不到缓存,查询数据库.请求2更新数据,删除缓存,请求1写入缓存.这时缓存当中的数据就是旧的数据.解决方法:给缓存的数据加一个过期的时间,尽可能减少过期缓存发生的概率.缓存的过期时间也不宜过短,过短导致缓存的作用减少.2.更新频繁的场景下会导致缓存频繁的被删除

2020-08-06 19:45:52 9954 1

原创 限流算法与设计思路

大家都知道目前的常规的限流算法有令牌桶和漏桶算法.今天就这些限流常见的算法给大家做一个详细的介绍与实现思路.固定窗口这个算法是最为简单的一个算法,Redis存储key和value,key是任意的,value代表一秒内请求的值,设置一个计时器每个一秒钟将限流的key设置为0.当有请求来临时执行incr key,key超出了一定值后进行限流.滑动窗口tcp就是使用的滑动窗口策略来限制发送的速率.但是tcp的滑动窗口是基于发送和接收的包的大小来限制发送的速率.我们根据其思想可以改为基于时间的滑动窗.

2020-07-28 09:28:47 248

原创 大数据量下的平均数求和:迭代法和归并法

我们在实际的开发中如果遇到很大数据量的求和,且累加和超过了uint64的存储范围.我们需要用到以下的解法进行求和.目前这种方式只适用于平均数在uint范围内,如果不在这个范围的考虑使用系统的函数库.迭代法迭代法是一种数学算法:{Xi}进行平均数计算,总数为t.将t换为c(t+1)为t+1个的平均数.理解:当均值计算到c(t)时,说明前t个数的均值为c(t).x-c(t)得出x和c(t)的差值使得t+1个数的均值为c(t)然后将差值除以t+1,那么c(t)+差值/(t+1)得到的就是t+.

2020-07-24 20:55:17 3239

原创 数据结构-二叉搜索树与AVL树

二叉搜索树二叉搜索树属于二叉树,具有如下的性质:1.节点的左子树不为空,那么左子树所有的节点的值都小于该节点的值2.节点的右子树不为空,那么右子树所有的节点的值都大于该节点的值.3.节点的左右子树都是二叉搜索树.[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-e2zyxSEF-1594085941066)(evernotecid://8BF4008B-52C0-484E-A4B5-8EBD45F20215/appyinxiangcom/13973009/ENResou

2020-07-07 09:40:47 492

原创 算法-Morris遍历二叉树

Morris遍历解决问题:在不使用栈不使用递归的情况下对二叉树按照先中后续方法进行遍历,空间复杂度为O(1),时间复杂度为O(n).解决问题思路1.初始化当前节点为current.2.当前节点不为空:(1)当前节点没有左孩子,currrent=current->right(2)当前节点有左孩子,找到当前左子树的最右节点mostRight:(a)如果最右节点的右孩子不是当前节点,那么mostRight的右孩子指向current,current向左移动.(b)否则current向右移动,m

2020-06-28 20:06:49 430

原创 BFPRT算法

BFPRT算法介绍BFPRT算法(中位数数组的中位数算法),是由五位发明者共同创建,主要解决TopK的问题在使用快速选择方法的最坏情况下的时间复杂度变为O(n^2)的问题,使得在最坏情况下仍为O(n).中心思想:将数组拆分成每个包含五个元素的数组,将每个数组进行排序选出中位数,这些选出中位数的数组调用BFPRT取得中位数,得出一个用于分区操作的划分值.得出的这个划分值就可以完美的避免在最坏的情况下时间为O(n^2)的情况.以下编码为了更好的理解.Top 0是指 第一小的数,以此类推.快速选择方法介绍

2020-06-17 09:59:22 280

原创 JS语言基础总结

标签推荐的写法首先介绍一下几个常见的属性.async 属性可以在标签当中直接添加async确保,改脚本是异步加载,但是切记不要在脚本执行DOM元素的操作.defer属性defer属性,只支持对外部链接的脚本进行操作.对内嵌的脚本不支持次操作.加入defer的目的是为了确保脚本在整个页面解析完成后执行,实际其运行机制执行的先后顺序并不确定,只包含一个defer脚本最佳.严格模式可以规避一些不安全的行为,如果我们想启用严格模式,那么需要将在脚本的头部或者是函数体内加入"use strict;"那么

2020-06-17 09:59:02 233

原创 《设计模式之禅》笔记

单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。符合单一职责原则。工厂方法模式定义一个用于创建对象的接口,让子类决定实例化那一个类。工厂方法时一个类的实例化延迟到其子类。工厂模式是典型的解耦框架。高层模块只需要知道产品的抽象类。其他的实现都不用关心,符合迪米特法则,符合依赖倒置原则只依赖产品的抽象,符合里氏替换原则,使用产品子类替换产品的父类。JDBC连接数据库从MySQL切换到Oracle需要改动的地方就是切换一下驱动的名称。抽象工厂模式为创建一组相关或相互依赖的

2020-06-02 09:37:03 283

原创 跳表

跳表是一种实现较为简单的数据结构理解起来并不复杂,而且增删改的效率要高于平衡二叉搜索树,不涉及到左右子树的旋转操作.实现逻辑跳表理解起来并不困难,我们先来看一张图.每一列看作是一个节点,它有着相同的值,最后一个节点为nil或者NULL,起始节点为头结点.图中最左侧是头结点,最后一个节点nil.数据结构是这样的:struct { int val; struct n...

2020-02-28 09:54:39 229

原创 你必须知道的——double转换int的问题

double转int类型会丢失精度,今天我们就回答为什么会丢失精度,以及最好的解决方案.

2019-08-21 18:17:12 21241 1

原创 Lua学习笔记-语法

前言Lua语言是一种嵌入式语言被广泛的用于各个领域,而且与C语言的兼容性比较好.Openresty当中就可以使用Lua进行快速开发.Redis可以借助Lua实现事务.以及各大游戏引擎有很多都支持Lua脚本.以此可见Lua使用范围是很广泛的.本篇将Lua语言和其它几种语言(PHP,JavaScript,Go,Shell,C)做对比,进行对比的记忆.Lua的语法风格和shell语言有些相似之处,...

2019-08-10 16:26:25 761

原创 Git基础以及内部原理简介

基础Git与SVN存储差异Git存储的文件不同于CVS,CVS存储的的是每个版本的变动内容以及变动文件,而Git存储的是基于每个文件的快照,对每个文件生成一个摘要值,如果值没有发生变化,那么在该版本不会存储该值。基于文件差异:基于文件快照:Git内部三种状态Git内部三种状态:已提交,已修改,已存储文件流转的三个工作目录文件流转的三个工作目录:暂存区域,Git的工作目录,本地仓...

2019-06-03 08:52:13 791

原创 PHP深入理解-内存管理

内存管理的主要目的:提高内存利用率,减少内存碎片,提高内存分配的速度.内存设计最大的可分配单元是chunk,大小为2MB.每个chunk分配了512个page,page的大小为4KB.zend的page_size与Linux一般的page_size大小相等.zend内部使用了mmap分配内存,不足一内存页的mmap强制以Linux的page_size进行对齐.mmap可以指定这块内存...

2019-01-13 11:19:16 846

原创 PHP深入理解-CLI与PHP-FPM

PHP-FPM模式相对于CLI比较复杂,因为PHP-FPM为常驻进程不断处理请求,因此二者只是在执行流程略有不同.PHP-FPM现在PHP广泛被使用的一种模式,用于解析FastCGI协议,执行相应的请求.PHP-FPM 三种模式staticFPM启动根据pm.max_children固定的woker进程数.dynamicFPM是启动的woker进程是变化:根据参数pm.start...

2019-01-06 11:14:19 5779 2

原创 PHP深入理解-PHP架构布局

本文基于《PHP 内核剖析》与 《PHP7底层设计与源码实现》所记笔记。对PHP内核的深入理解有助于我们对PHP的整体认识,对于业务层初期发展我们可以只了解基本语言的逻辑就可以写出符合业务的代码,但是随着业务的发展我们通过分析源码,编写扩展,深入了解PHP内部机制,帮助我们理解PHP内部实现逻辑,更好助力业务发展.执行流程解析为Token将语法转换为抽象语法树将语法树转换OpcodesS...

2018-12-16 15:40:10 13967

原创 IO模型分析

何为同步与异步在LNMP的生态当中我们基本上用到的是同步操作.例如PHP的file_get_contents函数就是一个典型的同步任务.而Node.js当中的回调模式是一个典型的异步模式如Promise.同步同步可以理解为:发送一个系统调用,并等待系统调用的返回.异步异步可以理解为:发送一个系统调用,不等待系统返回可以继续处理当前的任务,等待系统处理完毕的回调.不同的IO模型阻...

2018-11-27 14:22:28 215

原创 Go race condition以及解决方法

形成条件一般情况下是由于在没有加锁的情况下多个协程进行操作对同一个变量操作形成竞争条件.如果没有锁的情况会输出结果非1001.func main() { c := 1 g := sync.WaitGroup{} times := 1000 for i:=0 ; i< times; i++ { g.Add(1) go func() { c++ g.Done...

2018-11-02 15:15:56 2575

原创 MySQL深入学习笔记

本文是阅读《MySQL技术内幕-InnoDB存储引擎》第二版,《MySQL DBA修炼之道》,以及《MySQL王者晋级之路》所记录的笔记.InnoDB体系架构线程主线程(Master Thread):将缓冲池中的数据异步刷新到磁盘.IO线程(IO Thread):处理异步IO的请求以及回调.清理线程(Purge Thread):回收已经使用但并未分配的Undo页.页清理线程(Pa...

2018-10-18 19:01:25 2873 1

原创 MySQL事务与锁详解

事务事务支持ACID特性A原子性:所有操作要么都做要么都不做C一致性:事务将数据库从一种状态变为另一种状态一致性,保证数据库完整性约束,例如唯一索引约束等I隔离性:事务与事务之间是不可见的D持久性:事务一旦提交那么事务就是永久性的ANSI/ISO SQL标准定义了4中事务隔离级别:未提交读(read uncommitted),读提交(read committed),可重复读(repea...

2018-10-13 17:05:01 11472

原创 Docker:实战操作--Docker Compose

DockerCompose是用来定义以及运行多容器应用的工具.Docker官方推荐使用DockerCompose来构建开发环境的服务,不推荐在生产环境当中使用.当前微服务架构盛行,我们不可能为每个依赖的服务搭建一套环境,创建容器以及镜像.当我们迫切的需要一个工具解决我们开发环境的复杂性,达到一键运行的目的,因此DockerCompose就出现了.本文是接着上篇文章的例子进行操作,请最好阅...

2018-09-18 17:29:46 166

原创 Redis实战总结

数据结构数据结构是Redis的实体,承载着内部数据的存储,理解数据结构有利于我们对Redis存储进行优化,所以需要重点去理解.object encoding key查看键值类型的编码. 数据结构 内部编码 说明 string raw 小于39个字节字符串 int 8个字节长整型,只有当key为整型才会被存储 embstr...

2018-08-23 11:14:49 994

原创 Kubernetes核心概念介绍

Kubernetes是一个可轻便的,可拓展的开源平台,为管理容器与服务提供便利的配置以及自动化.现已有着很庞大以及快速增长的生态系统. Kubernetes还有一个重要的思想就是一切皆容器. k8s是kubernetes的简称,8代指是ubernete.关键概念node一个节点可以是VM虚拟机或者物理机,部署service运行pod.受Master组件管...

2018-07-27 09:08:18 763

原创 Docker:实战操作--Dockerfile

Dockerfile可以用来自动构建镜像,极大方便了环境构建,如果熟悉前端的同学可以把它抽象为webpack,fis构建工具.那么Dockerfile只是一个配置文件里边包含了许多已经定义好的执行指令.Docker build构建命令如下:sudo docker build -t test -f /test/Dockerfile /test/指令的格式#co...

2018-07-10 08:30:54 857

原创 Docker:实战操作--Docker Compose

DockerCompose是用来定义以及运行多容器应用的工具. Docker官方推荐使用DockerCompose来构建开发环境的服务,不推荐在生产环境当中使用. 当前微服务架构盛行,我们不可能为每个依赖的服务搭建一套环境,创建容器以及镜像.当我们迫切的需要一个工具解决我们开发环境的复杂性,达到一键运行的目的,因此DockerCompose就出现了. 本文是接着上篇文章的例子进行操作,请...

2018-07-01 16:57:59 1093

原创 Docker:实战操作--安装与基础操作

Docker出现已经有很长的时间了,期间版本也进行了很多的变化,不同的版本一些命令的差异,功能差异在开始之前我们需要额外注意Docker的版本号. 由于CentOS 6.X系统版本问题只能运行Docker 1.7,CentOS7以及以上的版本支持更高Docker版本. 读者可以采取升级系统版本的方式安装更高版本的Docker,但是这样做的话具有较高的风险,确保机器已经备份. ...

2018-07-01 16:54:34 809

原创 Kafka设计理念

前言Kafka的定位:分布式流平台. Kafka已经被广泛的用于商业生产活动,它的高性能与可靠性,保证了其消费生产的能力.关键概念事件流:无边界,有序,不可变,可重播. 流式处理:实时地处理一个或多个事件流.kafka支持批次处理(一组消息). kafka支持多种消息模式:JSON,XML等主题和分区:主题类似于数据库的表,可以分为若干个分区,分区可以分布在不同的服务...

2018-06-25 09:54:53 517

原创 RabbitMQ原理分析

RabbitMQ 简介基于AMQP协议实现,主要作用是解耦,冗余,扩展性(增大消息入队和处理的频率变得很容易),平滑峰值,可恢复性,送达保证(ACK机制 消费者消费消息后必须返回相应的ACK),顺序保证等.文章当中使用的RabbitMQ的版本是RabbitMQ 3.6.6.关键概念Exchange交换机启动RabbitMQ相关的服务,会默认创建一个不可以删除的Excha...

2018-06-01 10:09:36 2111

原创 Linux 内核升级步骤

由于现在需要使用docker,部分功能在低版本的linux不支持,如namesapce,cgroup等 因此需要升级内核.检查版本首先需要执行如下命令,查看当前的版本号.$ uname -srLinux 2.6.32-573.el6.x86_64指定ELRepoThe ELRepo Project focuses on hardware related pack...

2018-05-26 10:46:17 6949

原创 HyperLogLog in Redis

HyperLogLog 主要用于大量数据的一些统计以及合并工作. 本文主要简单的介绍一下HyperLogLog概念,以及简单介绍在Redis当中的实现.让我们从一个故事讲起抛硬币现在我们抛硬币,每组8次,将每次为正面的硬币记为正,否则记为反. 那么我可以得到,随机的记录如下:正正反正反正反正反正正反反正反正反正反正...就这样一致抛下去,最终我们会有很多不同...

2018-05-04 20:32:57 211

原创 Webpack 使用

简介webpakc的定位实际上是打包器.而不是任务执行器. 当然也可以配合grunt进行使用. webpack也提供了便捷的打包流程,项目构建,插件管理等等. 为了更好的构建项目从开发到生产都一一提供了解决方案. Vue官方也推荐使用的vue-loader也是基于webpack的. 因此这里简单介绍一下webpack的使用一些总结.更详细细致的内容可以到官网进行拓展.安装...

2018-04-18 19:08:00 2972

原创 Vue 总结

前言前些天刚完成了全栈的实践,基本上一个完成了主要的页面内容. 如果熟悉Vue对自己的技术栈有一定的提升,也提升了开发效率.Vue是基于MVVM的思想进行设计. 其实Vue也没啥难得,MVVM的理论早就开始盛行了,只是Vue的设计比较巧妙,赢得了开发者的喜爱. 通过一篇文章想对Vue的理解提升到一定的层次是不实际的,看是看不会的,计算机本来就是实践性很强的课程,希望大家最好去实战一下...

2018-04-14 17:39:16 478

原创 Nginx基础数据结构

本文是读《深入理解Nginx》的笔记. 版本是基于1.0.4 因为Nginx中的数据结构比较基础也比较重要,是了解nginx最最开始的根本. 按照书中的思路分为两种:一种是相对基础一些的数据结构,一种是相对高级的数据结构部分数据结构,未完基础数据结构ngx_int_tLinux平台下:typedef intptr_t ngx_int_t;typedef uint

2018-02-05 18:28:06 226

原创 ElasticSearch

前言elasticsearch提供了强大的API接口的支持 API接口具有RESTful特性索引文档index(相当于db) type(相当于mysql的表) id(唯一性,相当于一个主键的概念,可以自增也可以自定义值) 注意id默认为22位字母,称为UUID.PUT /{index}/{type}/{id}{ "field": "value", ...}返回{"_in

2017-12-24 10:52:37 414

原创 Go 语言小记

本文主要是读的笔记. 本文稍欠缺些整理.简介本节主要是对Go的一些主要内容进行基础的介绍语法特点变量类型的声明 类型放到变量名之后 函数可以返回多个变量 defer 可以延迟函数的调用(形成一个先进后出的defer栈) 存在指针类型,但没有指针运算 在定义变量时没有进行赋值,默认赋值为”零值”,数值类型默认为0,布尔类型默认为false字符串默认为空”” 支持类型推到 存在结构体 r

2017-11-05 15:59:54 1538

空空如也

空空如也

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

TA关注的人

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