自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

jfcat的专栏

热爱开发的每一天

  • 博客(105)
  • 资源 (3)
  • 收藏
  • 关注

翻译 RingBuffer document

The RingBuffer is a data structure where the data is stored in a ring-like structure. You can think of it as a circular array with a certain capacity. In this circular array, the oldest item gets overwritten in case a new item is written when the maximum c

2021-08-29 12:31:34 239

转载 对伪共享(false sharing)的解读

在并发编程过程中,我们大部分的焦点都放在如何控制共享变量的访问控制上(代码层面),但是很少人会关注系统硬件及 JVM 底层相关的影响因素。前段时间学习了一个牛X的高性能异步处理框架 Disruptor,它被誉为“最快的消息框架”,其 LMAX 架构能够在一个线程里每秒处理 6百万 订单!在讲到 Disruptor 为什么这么快时,接触到了一个概念——伪共享( false sharing ),其中提到:缓存行上的写竞争是运行在 SMP 系统中并行线程实现可伸缩性最重要的限制因素。由于从代码中很难看出是否会出现

2021-08-29 11:15:48 639

转载 epoll使用详解:epoll_create、epoll_ctl、epoll_wait、close

epoll - I/O event notification facility在linux的网络编程中,很长的时间都在使用select来做事件触发。在linux新的内核中,有了一种替换它的机制,就是epoll。相比于select,epoll最大的好处在于它不会随着监听fd数目的增长而降低效率。因为在内核中的select实现中,它是采用轮询来处理的,轮询的fd数目越多,自然耗时越多。并且,在linux/posix_types.h头文件有这样的声明:#define __FD_SETSIZE 1024...

2021-08-28 21:20:00 2343

转载 认识eventfd

什么是eventfdeventfd是Linux 2.6提供的一种系统调用,它可以用来实现事件通知。eventfd包含一个由内核维护的64位无符号整型计数器,创建eventfd时会返回一个文件描述符,进程可以通过对这个文件描述符进行read/write来读取/改变计数器的值,从而实现进程间通信。创建eventfdeventfd的创建是通过eventfd函数实现的,返回值即是该eventfd所对应的文件描述符,函数的原型如下所示: initval:创建...

2021-08-28 20:54:55 482

转载 epoll_create和epoll_create1

名字 epoll_create epoll_create1 - 创建epoll文件描述符摘要 #include <sys/epoll.h> int epoll_create(int size); int epoll_create1(int flags);描述 epoll_create() 创建一个新的epoll实例。从Linux 2.6.8开始,size参数被忽略,但必须大...

2021-08-28 20:41:14 734

原创 epoll中的各种参数

EPOLLIN The associated file is available for read(2) operations. 关联文件描述符的有效读操作EPOLLOUT The associated file is available for write(2) operations. 关联文件描述符的有效写操作EPOLLRDHUP (since Linux 2.6.17) Stream socket peer closed c...

2021-08-28 18:08:31 284

转载 如何保障消息中间件成功投递?

前言我们小伙伴应该都听说够消息中间件 MQ,如:RabbitMQ,RocketMQ,Kafka 等。引入中间件的好处可以起到抗高并发,削峰,业务解耦的作用。如上图:1)订单服务投递消息给 MQ 中间件2)物流服务监听 MQ 中间件消息,从而进行消费我们这篇文章讨论一下,如何保障订单服务把消息成功投递给 MQ 中间件,以 RabbitMQ 举例。分析问题小伙伴们对此会有些疑问,订单服务发起消息服务,返回成功不就成功了吗?如下面的伪代码上面代码中,一般发送消息就是这么写的

2021-08-28 11:32:52 147

转载 (转)Redis的持久化

前言Redis作为一款内存数据库,被广泛使用于缓存,分布式锁等场景,那么假如断电或者因其他因素导致Reids服务宕机,在重启之后数据会丢失吗?Redis 持久化机制Redis虽然是定义为一个内存数据库,但是也支持数据的持久化,在Redis中提供了两种持久化机制:RDB持久化和AOF持久化。RDB 持久化机制RDB全称为:Redis DataBase,是Redis当中默认的持久化方案。当触发持久化条件时,Redis默认会生成一个dump.rdb文件,Redis...

2021-08-28 11:22:13 79

转载 (转)Redis的事物机制

前言事务是关系型数据库的特征之一,那么作为Nosql的代表Redis中有事务吗?如果有,那么Redis当中的事务又是否具备关系型数据库的ACID四大特性呢?Redis 有事务吗这个答案可能会令很多人感到意外,Redis当中是存在“事务”的。这里我把Redis的事务带了引号,原因在后面分析。Redis当中的单个命令都是原子操作,但是如果我们需要把多个命令组合操作又需要保证数据的一致性时,就可以考试使用Redis提供的事务(或者使用前面介绍的Lua脚本)。Re...

2021-08-28 10:55:56 88

转载 (转)处理Redis缓存特殊情况的方法

前言当Redis用作缓存时,其目的就是为了减少数据库访问频率,降低数据库压力,但是假如我们某些数据并不存在于Redis当中,那么请求还是会直接到达数据库,而一旦在同一时间大量缓存失效或者一个不存在缓存的请求被恶意攻击访问,这些都会导致数据库压力骤增,这又该如何防止呢?缓存雪崩缓存雪崩指的是Redis当中的大量缓存在同一时间全部失效,而假如恰巧这一段时间同时又有大量请求被发起,那么就会造成请求直接访问到数据库,可能会把数据库冲垮。缓存雪崩一般形容的是缓存中没有而数据库中有的数据,而...

2021-08-28 10:36:03 136

转载 (转)内存耗尽后 Redis 会发生什么?

前言作为一台服务器来说,内存并不是无限的,所以总会存在内存耗尽的情况,那么当Redis服务器的内存耗尽后,如果继续执行请求命令,Redis会如何处理呢?内存回收使用Redis服务时,很多情况下某些键值对只会在特定的时间内有效,为了防止这种类型的数据一直占有内存,我们可以给键值对设置有效期。Redis中可以通过4个独立的命令来给一个键设置过期时间:expire key ttl:将key值的过期时间设置为ttl秒。 pexpire key ttl:将key值的过期时间...

2021-08-28 09:07:20 124

转载 (转)C语言柔性数组讲解

先来看一个示例#include<stdio.h>typedef struct _SoftArray{ int len; int array[];}SoftArray;int main(){ int len = 10; printf("The struct's size is %d\n",sizeof(SoftArray));}我们可以看出,_SoftArray结构体的大小是4,显然,在32位操作系统下一个int型变量大小刚好为4

2021-08-25 20:26:28 315

转载 (转)一致性哈希算法原理

一致性Hash算法背景  一致性哈希算法在1997年由麻省理工学院的Karger等人在解决分布式Cache中提出的,设计目标是为了解决因特网中的热点(Hot spot)问题,初衷和CARP十分类似。一致性哈希修正了CARP使用的简单哈希算法带来的问题,使得DHT可以在P2P环境中真正得到应用。  但现在一致性hash算法在分布式系统中也得到了广泛应用,研究过memcached缓存数据库的人都知道,memcached服务器端本身不提供分布式cache的一致性,而是由客户端来提供,具体在计算一致性has

2021-08-25 19:39:35 79

转载 (转)C/C++常用头文件及函数汇总

C/C++头文件一览#include <assert.h>    //设定插入点#include <ctype.h>    //字符处理#include <errno.h>    //定义错误码#include <float.h>    //浮点数处理#include <iso646.h> //对应各种运算符的宏#include <limits.h>    //定义各种数据类型最值的常量#includ...

2021-08-25 19:35:24 2082

转载 (转)golang 使用 iota

iota是什么我们来看golang源码的注释里面是怎么说的iota is a predeclared identifier representing the untyped integer ordinalnumber of the current const specification in a (usually parenthesized)const declaration. It is zero-indexed.大概就可以理解为,iota是一种预声明的标识符,表示了当前常量规范中未类型化的

2021-08-22 22:13:16 139

原创 消息队列中处理重复消息

为什么消息队列中会出现消息重复现象业务层面的消息重复我这里有个场景,比如用户进行关注,在手机上点了一下,由于网络延迟或产品实现问题,没有马上变成已关注 or 取消关注,导致用户下意识的多点了几下。网络层面的消息重复这个不经常发送但是可能出现,比如生产端producer在发送消息的时候发生了网络抖动,过了一段时间后又重发了这条消息。但是服务器端真实的收到了两条消息并记录到队列中。对于消息队列来说,只有在性能和重复性处理上进行取舍,由于重复不是一个频发的场景,消息队列为了实现高性能是允许重复消息的

2021-08-22 16:22:41 1289

原创 PHP变量类型底层设计实现

php变量类型设计实现基础知识每个类型的字节长度(x86-64体系)字节对齐联合PHP5的zval设计PHP5中_zval_struct(zval)结构使用zend内存池后zval结构的变化PHP7的Zval设计u1字段的含义u2中的字段信息PHP7的zval的内存占用情况基础知识每个类型的字节长度(x86-64体系)int 4字节char 1字节long 8字节pointer 8字节字节对齐struct test{ char a; int b; long c; void *d;

2021-08-22 11:39:26 188

原创 使用GitHub access token

前一段时间有收到邮件说github安全认证等级要提升,但是我个人没有当回事,今天突然发现不能使用git 提交了,才看到如下内容:详细到网页看了下,需要申请personal access token创建token命令行使用 git clone https://github.com/username/repo.gitUsername: your_usernamePassword: your_token实际上就是记住上面创建的token,然后再这里使用pull push等git命令的

2021-08-19 20:27:45 3071 1

转载 (转)超全整理!Linux性能分析工具汇总合集

出于对Linux操作系统的兴趣,以及对底层知识的强烈欲望,因此整理了这篇文章。本文也可以作为检验基础知识的指标,另外文章涵盖了一个系统的方方面面。如果没有完善的计算机系统知识,网络知识和操作系统知识,文档中的工具,是不可能完全掌握的,另外对系统性能分析和优化是一个长期的系列。本文档主要是结合Linux 大牛,Netflix 高级性能架构师 Brendan Gregg 更新 Linux 性能调优工具的博文,搜集Linux系统性能优化相关文章整理后的一篇综合性文章,主要是结合博文对涉及到的原理和性能测试

2021-08-19 16:54:07 565

原创 SELECT *对比SELECT COLUMNS查询分析

参考:https://use-the-index-luke.com/blog/2013-08/its-not-about-the-star-stupidhttps://weblogs.asp.net/jongalloway/the-real-reason-select-queries-are-bad-index-coverage

2021-08-17 05:24:00 909

转载 shell中find命令的脑图

在查命令时在网上看到的这幅图,感觉很方便。

2021-08-16 18:04:41 79

原创 PHP单例模式使用clone

我们来看下PHP单例模式是否能够clone,先上一段代码。<?phpclass Singleton { private static $object; private $name; private function __construct(string $name) { $this->name= $name; } public static function getInstance(string $name) { i

2021-08-16 07:20:45 201

原创 MySQL的事务

四种隔离级别READ UNCOMMITED (读未提交)在这个级别的事务中做的修改,即使没有提交,对其他事务也是可以看见的。事务可以读取未提交的数据,这被称为脏读(Dirty Read)。由于可能导致很多问题,实际应用中很少使用。READ COMMITED (读已提交)一个事物开始时只能看见已经提交的事物所做的修改。这个级别有时候也被叫做不可重复度(norepeatable read), 因为两次执行同样的查询操作,可能会得到不一样的结果。REPEATABLE READ (可重复读)这个级别解

2021-08-15 21:23:47 65

原创 PHP数组底层实现原理

需要实现的语义功能语义一: PHP数组是一个字典,存储着键值(keyvalue)对。通过键可以快速地找到对应的值,键可以是整型,也可以是字符串。语义二:PHP数组是有序的。这个有序指的是插入顺序,即遍历数组的时候,遍历元素的顺序应该和插入顺序一致,而不像普通字典一样是随机的PHP5的数组实现HashTableHashTable的结构定义:typedef struct _HashTable { uint nTableSize; uint nTableMask; uint nNumOfE

2021-08-15 16:30:16 968

原创 golang testing的基本使用

golang 的测试功能介绍测试功能基准测试内存测试并发测试测试功能如果你实现一个类方法 or 函数,就可以使用test程序测试功能是否正确。比如这样:add.gofunc Add(a int, b int) int { return a+b}func AddThree(a int, b int, c int) int { return a+b+c}有了简单的函数就可以编程测试用例测试文件要以add_test.go形式来命名func TestAdd(t *testing.T) {

2021-08-06 22:44:06 622

原创 golang pprof工具

pprof整理pprof整理pprof是什么pprof使用net/http/pprof的使用模拟并发情况分析pprof整理pprof是什么pprof是分析和显示性能相关数据的工具pprof读取profile.proto格式的分析抽样集合数据,同时创建报告来展现和帮助分析数据,它能创建包括文本和图型报告。profile.proto 是一个描述调用者和符号信息集合的protocol buffer。一个通常的使用是用来从统计分析数据中表现抽样调用栈集合。profile 可以被读取从一个本地文件,或者通

2021-07-26 10:58:08 350

原创 Netty网络框架

Netty网络框架core functionalities development stack on top of the core1.Rich Buffer Data StructureByteBuffer与ByteBuf 的比较You can define your own buffer type if necessary.Transparent zero copy is achieved by a built-in composite buffer type...

2021-07-25 18:12:00 100

原创 JVM知识整理2

JVM基础知识C++和JAVA对比需要理解的3个核心问题1、字节码文件是什么格式和含义?2、类加载器是怎么加载class文件并转化为对象的?3、虚拟机内存是怎么管理的?字节码文件是什么格式和含义?ByteCode是由单字节指令组成,理论上占有一个byte,就是256个操作码;指令分为四类1、栈操作指令、包括与局部变量交互的指令真实的计算机有基于栈的有基于寄存器的,jvm是基于栈的,需要基于栈的指令2、程...

2021-07-25 18:05:18 78

原创 JVM知识整理1

又一段时间没写文章了,把以前的总结文章拿出来JVM总结JVM是java的运行环境,从实现来说其模拟了硬件的一些,相当于在底层硬件和上层软件直接又抽象了一层,使软件实现与底层硬件解耦,极大的提升了开发效率。 JVM在内存结构上分为:线程栈 - 堆 - 非堆 - JVM自身 |- 栈帧 - 栈帧 - 栈帧线程执行过程中,一般会有多个方法组成调用栈,就会创建对应的栈帧。 栈帧中包括当前方法的原始类型局部变量,不包括类实例对象,对于类实例对象变量只存储其引用,类实例保存在堆中。堆的划分

2021-07-25 17:53:12 61

转载 (转)Netty开发调试设置定位内存泄漏

使用Netty写的网络代理最近几天总是报OOM,重启不用太久就报错,通过Netty的参数进行检查发现一些问题,在网上找到一些资料,下面这篇比较直接解决问题,转载如下:偶然一次再测试环境看到netty出现内存泄漏的日志,报错信息如下:LEAK: ByteBuf.release() was not called before it's garbage-collected. Enable advanced leak reporting to find out where the leak occurred

2021-07-17 18:19:58 1065

转载 (转)真刀真枪压测:基于TCPCopy的仿真压测方案

本文档适用人员:技术人员提纲:为什么要做仿真测试 TCPCopy是如何工作的 实作:仿真测试的拓扑 实作:操作步骤 可能会遇到的问题 ip_conntrack 少量丢包 离线重放 不提取7层信息 观测的性能指标0x00,为什么要做仿真测试线下的传统压力测试,难以模拟真实流量,尤其难以模拟正常流量混杂着各色异常流量。所以,线下压得好好的系统,上线后可能某天突然雪崩,说好能支撑 5 倍流量的系统重构,也许流量一翻倍就彻底挂了。但办法总比问题多。系统重构或重要变更

2021-07-17 08:58:51 248

转载 (转)红包随机算法&微信群红包随机算法

通过这篇文章算是把微信群红包的算法弄明白了1.前言因疫情影响,部门 2021 年会以线上直播的形式进行,通过微信小程序展开。为活跃年会氛围,年会直播间会有抢红包环节。因产品要求,红包金额要随机生成,所以这里涉及到指定红包总额、数量和最大最小值情况下如何生成红包金额。可以看出,红包随机金额生成的输入是一个四元组 <sum, num, min, max>,其中 sum 是红包总额,num 是红包数量,min 和 max 分别是红包最小最大值。所以这里可以抽象成如下算法:input:

2021-07-16 20:58:11 4365

转载 (转)软件工程能力漫谈

百度章老师讲软件工程能力的文章,内容写得很好,值得多看几遍。文章链接软件工程能力漫谈以下为全文:昨天下午,我在QCon以《软件工程能力漫谈》为题分享了关于工程能力的一些内容。现场的听众数量超出了我的想象,很高兴有这么多人关心“工程能力”这个话题。由于时间关系,这次的分享内容有些浓缩。感兴趣的读者可以阅读公众号内的其它相关文章。也欢迎大家联系我讨论这方面的问题。在本次分享中,我3次引用了《软件开发的201个原则》中的内容。预告一下,这本书的中译本预计将于2021年Q3由电子工...

2021-06-28 08:34:32 341

翻译 Redis的分布式锁

本文主要是对官方文档的理解安全性和活性保证安全性:相互排斥,在任何时间点,只有一个客户端可以获取锁 活性属性A:不会发生死锁。客户端总可以获取锁,即使已经获取锁的客户端崩溃了 or 进行了分区 活性属性B:失败容忍, 只要大多数Redis节点是正常运行,客户端就可以获取和释放锁为什么基于故障转移的实现是不够的?使用Redis来锁定资源最简单的方法是在一个实例中创建一个key,通常它被创建在限制的时间内存活,使用Redis expires 特色,因此实时上它将被释放。当客户端需要..

2021-06-24 16:02:20 88

原创 对Redis Cluster的理解

Redis Cluster的结构Redis Cluster解决Node失败问题Redis Cluster解决一致性问题

2021-06-18 15:03:05 84

原创 Redis的主从和集群设置

准备环境Redis主从高可用

2021-06-17 16:31:22 509

原创 Docker下使用Redis

下载Redis imagesudo docker run -itd --rm --name redis-test -p 6379:6379 redis

2021-06-15 15:52:33 248 1

转载 golang fmt包中的占位符

原文地址:https://www.cnblogs.com/qing123/articles/4353353.htmlgolang 的fmt 包实现了格式化I/O函数,类似于C的 printf 和 scanf。# 定义示例类型和变量type Human struct { Name string}var people = Human{Name:"zhangsan"}普通占位符占位符 说明 举例 ..

2021-06-09 15:21:21 104

原创 golang中的time包

时间的含义 wall clock monotonic clock

2021-06-03 11:33:41 487

原创 golang实现大数据量文件的排序

今天的主题围绕一段go代码展开,这段代码主要实现大数据量的文件排序功能,逻辑并不复杂但是实现过程有些问题做下记录随机数 类型转换 文件操作 priorityqueue优先级队列随机数的实现每种语言都有,go语言自然也不例外,官方提供了 math/rand 和crypto/rand ,从官方介绍来说crypto/rand 更多适合安全敏感的范围,这里就用math/rand就满足了。随机数随机数还要满足两个要求产生的结果每个都不一样 产生的数能满足一定的大小少量重复其实没有什么.

2021-06-02 21:38:13 1286

Linux常用命令全集.CHM

Linux常用命令全集,就是很多命令的集合文件,还比较详细,看看吧

2013-04-03

MongoDB权威指南

MongoDB 权威指南 中文 mongodb如何帮你管理通过web应用收集的海量数据呢?通过本书的权威解读,你会了解面向文档数据库的诸多优点,会发现mongodb如此稳定、性能优越甚至能够无限水平扩展背后的原因。 《mongodb权威指南》的两位作者来自开发并支持开源数据库mongodb的公司10gen。数据库开发人员可将此书作为参考指南,系统管理员可以从本书中找到高级配置技巧,其他用户可以了解一些基本概念和用例。你会发现,将数据组织成自包含的json风格的文档比组织成关系型数据库中的记录要容易得多。

2012-10-18

php 5 in practice

php 5 in practice

2007-10-10

空空如也

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

TA关注的人

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