自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 基于开源模型对文本和音频进行情感分析

基于开源模型对文本和音频进行情感分析

2024-02-22 10:00:15 1386

原创 授权码模式单点登录主要流程

2023-11-29 09:28:00 457

原创 Kafka 主要技术原理

kafka关键技术点介绍

2022-12-30 12:14:47 528

原创 INNODB关键技术原理概览以及MYSQL常用规范

基于INNODB的MYSQL关键技术原理概览以及常用规范

2022-09-08 15:41:44 569

原创 总结数据库分/分表常见的几种路由规则

数据库分库分表常用路由策略

2022-07-11 10:03:28 1864

原创 ElasticSearch计算文本相似度的算法总结

TF-IDF算法,向量空间模型,布尔模型;

2022-05-18 09:59:45 5388

原创 MYSQL MVCC总结

MYSQL MVCC总结

2022-04-26 15:30:38 893

原创 MYSQL执行计划的一些总结

MYSQL执行计划关键字段总结

2022-03-30 14:59:45 804

原创 定制化开发Redis缓存系统

骑士特权基础架构建设之自研定制化开发Redis缓存系统

2021-11-29 17:29:20 672 1

原创 骑士特权基础架构建设

项目背景 重构做了很多,大部分情况是推翻重来,成本相当高,对于大部分小公司来说是不值得这样做的;在业务层面通过微改造,比如读写分离,拆服务和拆缓存等就可以满足当前的业务增长需求;老项目采用springcloud开源框架实现服务的治理,在项目启动阶段,为了快速上线,我们倾向使用开源框架搭建系统,快速满足业务需求;这种框架,对于绝大部分程序员来说只会用,一旦出了问题是非常被动的;随着业务的发展,量级上到一个档次之后,我们需要考虑系统的可维护性,信息安全和稳定性;在某种程度上需要升级底层架构确保服...

2021-07-27 16:56:58 1912 1

原创 技术知识点汇总

技术相关基础知识的积累和沉淀

2021-07-05 14:16:25 772

原创 常见的几种IO模型介绍

概览从底层到上层来看,IO主要分为两个阶段,第一个阶段为数据准备(等待)阶段,第二个阶段为数据拷贝阶段;第一阶段,从网卡上接收数据,第二个阶段将数据从kernel拷贝到用户态缓存;IO模型阻塞模型:应用程序调用系统调用,比如recvfrom,一直等到第一阶段和第二阶段都ok了才返回; 非阻塞模型:应用程序调用系统调用,比如recvfrom,非阻塞的,第一阶段没准备好,返回errorno=EWOULDBLOCK; 信号驱动模型:应用程序调用系统调用sigaction,注册SIGIO信号,当第一阶段

2021-05-10 13:56:38 202

原创 操作系统零拷贝详解

概念在没有cpu干预的情况下,执行的一个存储区向另外一个存储区拷贝任务;可以减少总线周期和内存带宽;普通I/O实现(4次用户态到内核态切换+4次拷贝) 应用程序调用系统调用read,进行第一次用户态到内核态上线文切换; 将磁盘文件加载到kernel buffer,进行第一次拷贝; 将kernel buffer的数据拷贝到用户态的user buffer中,进行第二次拷贝; read系统调用返回,进行第二次用户态到内核态上线文切换; 用户态应用程序调用write系统调用,进行第三次用户态

2021-05-07 10:17:02 222

原创 行文本文件实时分析器,流量统计数据采集

介绍因项目需要,最近采用inotify和IO多路复用技术,实现了一个轻量级的实时行文本文件内容提取的程序,主要目的是用来监控网关nginx的Access Log,并且对Access Log在本地进行实时解析,字段提取和上报的功能。该程序占用内存较小,在10k左右,最多占用1个核的资源,提供采样上报,全量/增量分析文本以及特定字段内容过滤等功能。该程序可以通过自定义connector插件将本地提取...

2019-12-04 21:24:34 394

原创 花生日记基础架构建设

简要介绍在工程中,我们采用protobuf V3和SpringBoot搭建服务化体系,我们需要一个基于protobuf协议的辅助工具提升效率。我们提供服务级别和方法级别的文档注解,在工程编译期间产生文档数据,利用这些文档数据生成在线文档和接口测试界面,同时提供在线协议编辑器,编译工具,打包和上传SDK到repository等,同时将中台自动化测试用例挂在daily loadbuild的task中...

2019-10-09 13:47:45 668

原创 基于商品属性的相似度模型

2018-09-06 11:06:27 3013 3

原创 利用线性回归进行销售预测

2018-03-27 15:35:05 2895

原创 基于一阶马尔科夫链的凑单算法

2018-03-27 15:08:56 632

原创 NGINX 1.13.6内存管理源码分析

该文是针对NGINX 1.13.6这个版本进行分析

2017-12-27 12:29:23 493

原创 分布式本地缓存的一种实现

源代码 JavaSDK:https://github.com/gilbertwang1981/string_local_cache.gitC++ Agent:https://github.com/gilbertwang1981/binary_log_agent.gitC++公共库:https://github.com/gilbertwang1981/commonlib4...

2017-08-11 22:18:57 6506 1

原创 朴素贝叶斯分类算法

朴素贝叶斯算法的核心是,属性条件独立,求按照某个属性进行归类的条件概率最大值。

2017-03-25 10:24:11 611

原创 机器学习之分类决策树算法

2016-08-16 15:46:13 509

原创 机器学习之K近邻算法

2016-08-16 15:42:03 376

原创 MooseFS源码分析(三)

2015-07-04 16:58:56 1440 1

原创 MooseFS源码分析(二)

2015-07-04 16:56:51 1636

原创 MooseFS代码分析(一)

2015-07-04 16:52:42 1340

原创 分析linux共享内存的实现

Linux对共享内存的实现,在2.6采用了内存映射技术。对于内存共享,主要集中在三个内核函数,他们是do_shmat,sys_shmat和sys_shmdt。其中,sys_shmat调用了do_shmat最终实现了共享内存的attach。sys_shmdt实现了共享内存的detach和destroy。下面我主要对这三个函数的源码进行分析。在分析之前,首先介绍共享内存实现原理。 原理: 

2009-07-04 21:03:00 16109

原创 linux 2.6 互斥锁的实现-源码分析

看了看linux 2.6 kernel的源码,下面结合代码来分析一下在X86体系结构下,互斥锁的实现原理。代码分析1. 首先介绍一下互斥锁所使用的数据结构:struct mutex { 引用计数器 1: 所可以利用。  小于等于0:该锁已被获取,需要等待 atomic_t  count;  自旋锁类型,保证多cpu下,对等待队列访问是安全的。 spinlock_t  wait_lock; 

2009-07-02 21:51:00 10890 1

原创 GCC如何支持函数别名

通过使用以下关键字和语法,可以为函数申明别名。int __sctp_connectx(int fd, struct sockaddr *addrs, int addrcnt){ socklen_t addrs_size = __connectx_addrsize(addrs, addrcnt); if (addrs_size   return addrs_size; return se

2009-04-23 16:28:00 1563

原创 Linux AIO机制

Linux的I/O机制经历了一下几个阶段的演进:1. 同步阻塞I/O: 用户进程进行I/O操作,一直阻塞到I/O操作完成为止。2. 同步非阻塞I/O: 用户程序可以通过设置文件描述符的属性O_NONBLOCK,I/O操作可以立即返回,但是并不保证I/O操作成功。3. 异步事件阻塞I/O: 用户进程可以对I/O事件进行阻塞,但是I/O操作并不阻塞。通过select/poll/epoll等函数调用来达

2009-01-18 10:24:00 17715 4

原创 slab函数分析之free_block

下面分析一下slab对象回收的实现参数:1. slab对象所属的kmem_cache缓存2. slab对象数组3. 需要释放的对象数量4. 在NUMA环境下节点编号static void free_block(struct kmem_cache *cachep, void **objpp, int nr_objects,         int node){ int i; struct kme

2009-01-02 13:19:00 2137

原创 slab函数分析之cache_alloc_refill

当array cache中没有可用的object的时候,需要批量从slab缓存中申请对象,这个时候该函数被调用。下面分析一下这个函数。static void *cache_alloc_refill(struct kmem_cache *cachep, gfp_t flags){ int batchcount; struct kmem_list3 *l3; struct array_cache *a

2009-01-02 11:57:00 4723

原创 slab函数分析之cache_grow

当向Slab缓存中提出对象申请的请求时,首先是找到相应的kmem_cache,然后从相应的array cache中分配slab对象。当array cache中没有对象可以分配的时候,会批量向slab缓存中提出对象申请来填满array cache,然后再从array cache中取出一个对象分配出去。如果从slab缓存中分配对象的时候,发现kmem_list3中半满和空闲链表中都没有节点可以供分配:

2008-12-31 23:41:00 1871 1

原创 Slab对象的分配和回收kmem_bufctl_t的用法

在这里我介绍一下Slab对象的分配和回收kmem_bufctl_t的用法,首先要说明的一点是Slab缓存的内存布局,Slab缓存分为两部分,一部分是用于管理Slab对象,另一部分是Slab对象本身,针对这两部分内容,Slab缓存的内存布局大概有两种:1. Slab对象同管理Slab对象的缓存一起存放。2. 分开存放。对于管理区分成2部分,一部分是描述Slab的数据结构,struct slab。

2008-12-29 23:36:00 2636

原创 Slab函数分析之kmem_cache_create函数

该函数用于创建Slab缓存。参数介绍:name: 缓存名字size: 对象的大小align:对齐flag:Slab标志位ctor:对象构造函数dtor:对象析构函数struct kmem_cache *kmem_cache_create (const char *name, size_t size, size_t align, unsigned long flags, void (*ctor)

2008-12-28 14:13:00 13299

原创 Slab代码分析之calculate_slab_order

计算Slab的Order,即该Slab是由几个页面构成static inline size_t calculate_slab_order(struct kmem_cache *cachep,   size_t size, size_t align, unsigned long flags){ size_t left_over = 0; int gfporder;  首先从order为0开始尝试

2008-12-28 13:02:00 2364 1

原创 Slab对象数量计算函数

内核提供了计算一个Slab缓存的大小的函数,Slab缓存的内存布局分成以下两种:1. Slab缓存管理区在Slab内,即同对象存放在一起。2. Slab缓存管理区存放在单独的一片区域,即同对象分别存放。通过宏CFLGS_OFF_SLAB来区分。参数介绍:gfporder: Slab缓存大小为2^gfporder个页面buffer_size: 每个对象的大小align:对齐flags:CFLGS

2008-12-25 21:15:00 1371

原创 Linux kmalloc/kfree 源码解读

kmalloc/kfree用于划分和回收内核空间低区内存的方法。改组方法没有直接通过伙伴系统进行内存的划分,通过slab算法进行分配的。同时也为每个CPU提供一个阵列缓存,用于提高分配效率。下面对改组函数进行源码级的分析。内存分配static inline void *kmalloc(size_t size, gfp_t flags)1.         从Slab通用缓存中查找可用的

2008-12-16 20:21:00 9822

原创 Linux Buddy系统算法源码解析

在Linux引导起来之后,伙伴系统分配算法是和物理内存最底层的接口。所有内存分配函数,比如vmalloc/kmalloc最后都是通过伙伴算法对内存进行分配的。接下来我们将解读一下伙伴系统的分配和回收算法。伙伴系统模块提供了两个主要的接口给上层程序,他们是:1.         页面请求函数struct page * fastcall __alloc_pages(gfp_t gfp_ma

2008-12-14 22:12:00 6303

原创 Linux vmalloc/vfree函数实现解读

高端物理地址的分配采用vmalloc/vfree这组函数进行,什么是高端物理内存呢?我们知道Linux给内核预留了一部分虚拟地址空间,这部分虚拟地址如果能全部直接映射到物理地址空间就不存在高端内存。如果这部分内存有一部分不能直接映射到地址空间,那么这部分虚拟地址空间称为高端内存。因此,高端内存是虚拟地址空间中的概念。举个例子:如果你的物理内存为512M,那么就不存在高端内存的分配,如果你的物理地址

2008-12-14 11:38:00 1931

Kafak技术原理介绍

Kafak技术原理介绍

2024-02-24

INNODB关键技术原理以及MYSQL常用规范

技术分享

2022-10-20

空空如也

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

TA关注的人

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