自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(35)
  • 问答 (1)
  • 收藏
  • 关注

原创 如何测试概率性事件-二项分布置信区间

 前言日常开发测试可能会遇到这样一种情况,有一个接口或方法概率触发,那么需要多少次抽样,落在一个什么区间内,才能断定是否按照设定概率进行呢?本文将以二项分布作为研究手段,分两种情况求解此类问题的置信区间范围,并结合实际案例进行分析。 背景某一天,测试同学在验证一个接口时遇到了一个问题。该接口设定为50%概率触发,测试同学写了自动化脚本进行多次调用。但是问题来了,他并不知道应该调用多少次,然后落在一个什么区间内才算测试通过。极大的扩大样本容量,然后给一个模糊的范围边界确.

2021-01-04 17:11:34 15316 1

原创 详解go中的混合锁 - mutex

0 前言我们知道,多线程下为了确保数据不会出错,必须加锁后才能访问共享资源。常见的锁包括互斥锁、自旋锁、读写锁等等,往往需要通过系统内核来实现。然而协程的互斥锁实现原理完全不同,它并不与内核打交道,虽然不能跨线程工作,但却因为减少了用户态与内核态转换时所需的上下文切换环节,效率很高,是一个非常不错的选择。本文以golang为例,用flowchart作图结合代码的形式,讲解在golang中是如何使用用户态的代码将锁重新实现的。 1 前提知识点1.1 互斥锁与自旋锁我们常见的各种锁是有.

2020-11-07 12:37:55 22107

原创 从底层深入Go的基础模型 - interface

 0 interface是什么In Object-oriented programming, a protocol or interface is a common means for unrelated Object (computer science) to communicate with each other. These are definitions of Method (computer programming) and values which the objects agree u.

2020-11-02 21:48:52 23043 1

原创 (tip)谨慎使用defer修改返回值

golang在defer修改返回值时需要格外注意!如果未提前声明返回值的话,在defer中修改返回值是无效的操作。原因如下:package mainfunc test1() int { i := 1 defer func() { // 实际则是将局部变量i的地址指针传入,调用runtime.deferproc函数 i++ }() return i // 将i的值拷贝到调用栈的返回值上}func test2() int { i := 1 defer func(i in

2020-09-22 21:32:33 25166

原创 自顶向下解析raft一致性算法

0 前言raft算法是现在在分布式系统中广泛应用的一种共识性算法,网上可以找到许多介绍文章,但是却往往通篇都是进行了介绍,未能明确梳理逻辑,本文旨在自顶向下逐步拆解问题,清晰解释raft算法的主线。1 raft算法的来源(拜占庭将军问题)曾经的拜占庭国土辽阔,为了抵御来自各个方向的敌人,军队之间分隔很远,他们之间只能通过信使互相传递消息。一场新的战役即将爆发,有5支拜占庭军队要共同进退,5个将军都是平级的,他们要怎么达成一起进攻或者一起撤退的共识呢?最简单的办法就是投票,每个将军都派出信使将自己.

2020-09-10 19:43:56 22085

原创 使用pprof快速定位Go内存泄漏

什么是pprofpprof是Go的性能分析工具,在程序运行过程中,可以记录程序的运行信息,可以是CPU使用情况、内存使用情况、goroutine运行情况等,当需要性能调优或者定位Bug时候,这些记录的信息是相当重要。代码实现package mainimport ( "fmt" "net/http" _ "net/http/pprof" // 引入pprof,调用init方法)func main() { // 生产环境应仅在本地监听pprof go func() { ip :.

2020-09-04 13:46:38 25982

原创 从Go走进plan9汇编

前言:问:什么是plan9?答:plan9是一个很强的操作系统,但我们只需要学习它的汇编语法。问:为什么说golang开发者需要学习plan9汇编?答:因为golang的开发团队和bell实验室(开发了Unix的那个实验室)开发plan9操作系统的钢铁糙汉子开发团队是同一批人,他们非要用,咱也没办法。问:反编译之后玩Intel和AT&T不香吗?答:确实可以跳过plan9汇编(比如直接拿机器码反编译出intel汇编来看),但是会让阅读变得非常困难。并且在golang的基础方法中,使用了大.

2020-09-03 20:53:57 25171 5

原创 tcmalloc——为高并发场景而生的内存分配器

(Ps:全篇读完后再回头来看一下封面图)0.前言在我们写业务代码的过程中,业务代码与系统内核间的两层内存池往往容易被忽略,尤其是其中的C库内存池。当代码申请内存时,首先会到达应用层内存池,如果应用层内存池有足够的可用内存,就会直接返回给业务代码,否则,它会向更底层的 C 库内存池申请内存。PTmalloc, TCMalloc和JEMalloc都属于C库内存池。几乎所有程序都在使用 C 库内存池分配出的内存,比如java使用ptmalloc,golang使用tcmalloc等等。C 库内存池影响着系.

2020-08-28 00:28:46 22719

原创 王爽《汇编语言》实验10:show_str + dtoc

assume cs:codesgdatasg segment db 7 dup (0)datasg endscodesg segmentstart: mov ax, 12666 ; 转化的字符串 mov bx, datasg mov ds, bx mov si, 4 call dtoc mov dh, 8 ; 行号 mov dl, 3 ; 列号 mov cl, 00010010b ; 属性 mov ax,.

2020-05-28 18:04:03 22051

原创 王爽《汇编语言》实验10:子程序divdw

assume cs:codesgdatasg segment dd 0,0 ; 被除数, 结果datasg endscodesg segmentstart: mov ax, 4240h ; 被除数低位 mov dx, 000Fh ; 被除数高位 mov cx, 0Ah ; 除数 call divdw mov ax,4c00H int 21Hdivdw: ; x/n = int(h/n)*65536 + [rem(h/n)*6553.

2020-05-28 14:15:42 22104

原创 王爽《汇编语言》实验10:子程序show_str

assume cs:codesgdatasg segment db 'welcome to masm!',0datasg endscodesg segmentstart: mov dh, 8 ; 行号 mov dl, 3 ; 列号 mov cl, 2 ; 属性 mov ax, datasg mov ds, ax mov si, 0 call show_str mov ax, 4c00h int 21hshow_.

2020-05-28 00:44:35 20441

原创 sync.Pool设计分析

golang sync.Pool的数据模型在1.13中发生了比较大的改变,一方面是数据模型的重构,一方面是GC对sync.Pool池子影响的优化。1.数据模型:初始情况默认大小为8,能放8个item。因为是有限大小的FIFO,所以采取了最佳模型ring buffer来实现这个队列。(因为定长队列是用定长数组实现的,如果在头部push的话,需要后续所有内容往后迁移,复杂度为O(n),...

2020-04-09 14:12:45 20606

原创 后端笔试题及其解答

1.请基于 TCP/IP 五层网络模型描述下当我们在浏览器请求 https://pp.io 站点时,发生了哪些事情?答:TCP/IP五层模型分为应用层,传输层,网络层,数据链路层以及物理层。1.应用层负责应用程序之间的交流,这里使用应用层的http协议以及使用位于应用层与传输层之间的ssl/tls协议,请求https://pp.io。为数据加上http头(包含请求类型,http版本号,正文长...

2020-02-29 22:47:36 21120

原创 浏览器请求 https://xx.io 站点时,发生了哪些事情?

TCP/IP五层模型分为应用层,传输层,网络层,数据链路层以及物理层。1.应用层负责应用程序之间的交流,这里使用应用层的http协议以及使用位于应用层与传输层之间的ssl/tls协议,请求https ????/xx.io。为数据加上http头(包含请求类型,http版本号,正文长度等)。2.域名解析,包括:(1)浏览器缓存(2)本地hosts文件 (3)本地dns服务器(4)根dns服务器(5)顶...

2020-02-29 22:40:00 22038

原创 golang 归并排序,快速排序, 堆排序

归并排序func sortArray(nums []int) []int { if len(nums) <= 1 { return nums } partA := sortArray(nums[:len(nums)/2]) partB := sortArray(nums[len(nums)/2:]) temp := m...

2020-02-14 15:01:10 20299

原创 nginx-ingress传输大文件413错误

实测:正确写法apiVersion: extensions/v1beta1kind: Ingressmetadata: name: my-ingress annotations: nginx.org/client-max-body-size: "100m"网上与文档中都使用了nginx.ingress.kubernetes.io/proxy-body-size: "10...

2019-12-26 20:36:36 22182 4

原创 docker 如何干净高效删除none镜像

何为 dangling images,其实可以简单的理解为未被任何镜像引用的镜像。比如在你重新构建了镜像后,那些之前构建的且不再被引用的镜像层就变成了 dangling images网上常见的方法是(不推荐)docker rmi `docker image ls | grep '<none>' | awk '{print $3}'` || true其实docker已自带精简...

2019-12-25 11:29:36 21574

原创 kubernete从安装到搭建负载均衡集群

来源:https://lcylichenyi.github.io/kubernete/0.搭建环境镜像:ubuntu-18.04.3-live-server-amd64身份:root(重要)(有使用http代理和不代理两种选项,都可以走通,已测试)1.设置http代理【如不使用代理可跳过这一步】:1.1 curl代理配置vi ~/.curlrc# 加一行 proxy=http://...

2019-12-24 21:12:18 21092

原创 使用阿里云mongo数据库无法使用compass

使用compass会hostInfo is forbidden by cloud provider for security reason, you can run db.runCommand({listCommands: 1}) to get the supported command list这事因为阿里云不支持这条命令。compass登录需要。https://help.aliyun....

2019-12-05 11:20:36 20696

原创 nginx替mongodb做反向代理的坑

mongodb需要tcp 而nginx提供了http 所以会出错 需要在nginx.conf中增加如下配置stream { server { listen <your incoming Mongo TCP port>; proxy_connect_timeout 1s; proxy_timeout 3s; pr...

2019-09-03 21:37:18 24035

原创 vmware + centos7 如何安装Vmtools

先关闭虚拟机切换出去(一定要做哦)在安装VMware Tools时,需要修改指向VMware Tools所在(VMware Workstation\linux.iso),在这个路径下有个linux.iso文件,其中提供了linux操作系统平台需要的一些工具文件,当然包括VMware Tools安装文件。使用物理驱动器3.虚拟机设置选项卡虚拟机-安装vmtools安装好P...

2019-08-29 00:08:49 20759

原创 一个保险柜密码是三位数,对上其中两位就可以打开,最坏至少试多少次才能保证打开

一个保险柜密码是三位数,如123,这个密码锁产生了故障,对上其中两位就可以打开(如1X2,X23)。问最坏情况下,至少试多少次才能保证打开?1、正常算法:最坏情况就是 1000去掉28个能够打开的密码(999 - 0 + 1)- 3 * 10 - 2 = 972个【任选其中两位有3种情况,随后另外一位任意,则乘10,3位完全相同会出现3次,所以减2,剩一次。2、 计算机遍历:找出所...

2019-05-18 00:29:22 24029 1

原创 判断浏览器类型

const Browser = { // Firefox 1.0+ isFirefox: () => { return typeof InstallTrigger !== 'undefined' }, // Internet Explorer 6-11 isIE: () => { return navigator.userAgent.indexOf(...

2019-05-09 10:53:56 20169

原创 ruby gnuplot 卡顿解决方式

程序员的数学 线性代数3ruby mat_anim.rb | gnuplot 会很卡可以先 ruby mat_anim.rb > 1.plt然后双击打开文件就不卡了 =。=或者直接 http://www.ituring.com.cn/book/1239里面随书下载第一个 anime中index.html里也有动画...

2019-05-07 12:07:28 20482

原创 mocha+puppeteer使用done或返回promise的坑

以下第三条存在报错:Error: Timeout of 30000ms exceeded. For async tests and hooks, ensure “done()” is called; if returning a Promise, ensure it resolves.使用async时自动会返回一个resolved状态的promise 。不需要额外处理,使用done方法而如...

2019-04-20 10:21:00 21584

原创 app消息推送(ios/android)基础知识

手机推送会遇到存在两种情况:app在界面或后台运行(端内)app从后台被移除(端外)端内推送轮询:定时向服务器发送Ajax请求,服务器接到请求后马上返回响应信息并关闭连接。(适合小型) 【h5的新api web worker单独开一个新的线程很适合用于这个任务】长轮询:客户端向服务器发送Ajax请求,服务器接到请求后hold住连接,直到有新消息才返回响应信息并关闭连接,客户端处理...

2019-04-20 10:18:41 21172

原创 ES6读后总结

读阮一峰的ECMAScript 6 入门的读书笔记,原文链接为http://es6.ruanyifeng.com/#READMEES6let (块级作用域)let只在命令所在的代码块内有效for循环适合用letlet不会变量提升let存在暂时性死区(TDZ),在声明变量之前,该变量都是无法使用的(如let x= x就会报错)因为let的存在,typeof不再是一个百分百不会报...

2019-02-19 20:34:29 20403

原创 尾递归优化流程解析

尾递归优化流程解析function tco(f) { var value; var active = false; var accumulated = []; return function accumulator() { accumulated.push(arguments); if (!active) { active = true; ...

2019-02-11 16:02:29 20261

原创 5行代码实现人工智能

最短的代码实现人工智能//(狗头)哈哈哈&lt;!DOCTYPE html&gt;&lt;html lang="en"&gt;&lt;head&gt; &lt;meta charset="UTF-8"&gt; &lt;title&gt;Document&lt;/title&gt; &lt;link rel="stylesheet"

2019-02-08 18:44:10 24713

原创 react中返回表单组件的小坑

import React from 'react'export default class CmtListUpdateEvent extends React.Component { constructor(){ super() this.state = {} } render(){ return &lt;div&gt;&lt;input type="button" value="...

2019-02-07 00:03:35 20255

原创 getBoundingClientRect的兼容函数分析(arguments.callee的妙用)

getBoundingClientRect的兼容函数分析 function getBoundingClientRect(element) { if (typeof arguments.callee.offset != "number") { var scrollTop = document.documentElement.scrollTop ...

2019-01-08 16:06:53 20503

原创 jqurey 中$(function($){}) 中的形参$

这里总所周知在jquery中$(function(){})等效于$(‘document’).ready(function(){})在这里其实默认传入了一个实参即jquery对象。我在这运行了 $('document').ready(function(test){ console.log(test); })结果所以不如传入形参$ 。减少在函数中向上级寻找jquery对象。即...

2018-12-03 18:47:07 20824

原创 Jquery.ajax()中的参数type和method的区别

官方文档给出:type (default: ‘GET’)Type: StringAn alias for method. You should use type if you’re using versions of jQuery prior to 1.9.0.即type和method是一样。只不过是1.9.0版本出的method估计是让程序员更好记,更符合习惯吧。(个人也是认为meth...

2018-11-30 20:51:16 21862

原创 innerAudioContext的使用

因为官方文档中innerAudioContext直接复制使用可能会有问题,这里应该将const innerAudioContext = wx.createInnerAudioContext()放到Page外面。其他放到onLoad函数中。&lt;!-- audio.wxml --&gt;&lt;audio src="{{src}}" id="myAudio" &gt;&lt;/audio&g...

2018-09-21 22:47:30 31919

原创 分析Ajax 爬取今日头条街拍美图修改版(18/8/20)

崔庆才的网络爬虫实战中p247页上 分析Ajax爬取今日头条的代码会出现 BUG。以下代码为无BUG版。大致是补全了一下URL和加了一个IF条件防止出错。import osfrom _md5 import md5import multiprocessing.poolimport requestsimport urllib.parsedef get_page(offset): ...

2018-08-20 19:30:18 20240

空空如也

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

TA关注的人

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