自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

魔幻世界

自留地。

  • 博客(113)
  • 资源 (4)
  • 收藏
  • 关注

原创 REDIS系列之五大对象原理

Redis并没有采用上文介绍的底层数据结构实现键值对数据库,而是基于底层数据结构实现一套对象系统,包括字符串对象、链表对象、哈希对象、集合对象、排序集合对象。而且,每个对象的底层实现至少存在两种,针对不同的应用场景可以选择不同的实现方式,从而提高效率。1.对象系统Redis是key-value数据库,每创建一个键值对就会创建两个对象,即一个键对象,一个值对象。Redis中默认键是字符串对象,值是re

2017-12-05 16:57:51 385

原创 REDIS系列之底层数据结构

Redis是一款优秀的key-value数据库,其中存储的键值对都是有对象(Object)组成,可以存储字符串对象、哈希对象、列表对象、集合对象、有序集合对象;由于C语言中没有相关对象的实现,Redis自身扩种底层的数据结构实现上述对象的存储,本文将对REDIS数据库底层的数据结构进行介绍。1. SDS字符串Redis并没有直接采用C语言中字符串表示(以空字符结尾的字符数据,一下简称C字符串),而是

2017-12-05 16:50:26 369

原创 从操作系统漫谈GOLang GPM模型

本文从操作系统谈起,简单介绍操作系统基本知识,引出进程、线程调度的基本原理和基本模型,然后从0到1设计Golang调度器,通过方案的逐步演进升级,可以了解到GPM模型设计理念。阅读本文会了解到线程模型、线程调度,并最终理解Golang为什么设计为GPM模型,并通过简要runtime代码分析,验证在GPM模型推演过程中各种问题设想以及解决方案。

2022-10-26 10:04:53 537 1

原创 一文读懂数据库分库分表

阅读此文你将了解:什么是分库分表以及为什么分库分表 如何分库分表 分库分表常见几种方式以及优缺点 如何选择分库分表的方式数据库常见优化方案对于后端程序员来说,绕不开数据库的使用与方案选型,那么随着业务规模的逐渐扩大,其对于存储的使用上也需要随之进行升级和优化。随着规模的扩大,数据库面临如下问题:读压力:并发QPS、索引不合理、SQL语句不合理、锁粒度 写压力:并发QPS、事务、锁粒度 物理性能:磁盘瓶颈、CPU瓶颈、内存瓶颈、IO瓶颈 其他:宕机、网络异常面对上述问题,常..

2022-04-15 12:21:23 11140 2

原创 Proto3序列化协议

Proto3序列化协议简介对于互联网应用来说,客户端-客户端、客户端-服务端之间需要数据的交互,其数据传输是二进制流的方式在互联网上传输,因为需要一种手段将数据对象编码为一种可以在网络上传输的二进制流,这个过程就叫做序列化。同样的,客户端在收到二进制流需要解码出数据,这个过程叫反序列。简单理解就是序列化就是按照某种编码方式将数据转换为二进制流以方便在网络上传输,同时这种编码方式是可逆的和可理解的。按照上述定义不难理解,json也是一种序列化的一种方式,将对象编码为字符串(二进制)进行传输。同样的p

2020-10-15 20:17:19 807

原创 REDIS系列之源码分析

核心数据结构redis用redisServer和redisClient结构体封装redis客户端和服务端的数据信息。在分析源码前先分析一下其数据结构中包含哪些信息。redisServerstruct redisServer { /* General */ char *configfile; /* Absolute config file path, or...

2019-08-12 18:18:54 479

原创 MySql系列之Innodb存储引擎

插件化存储引擎是MySQL特点,用户可以根据自己的需求使用不同的存储引擎,甚至通过抽象的API接口实现自己的存储引擎。innodb存储引擎支持行级锁以及事务特性,也是多种场合使用较多的存储引擎,本文将介绍innodb存储引擎。存储引擎简介mysql系统来说,存储引擎是真正实现数据的存储与读取操作的对象,数据库实例通过抽象API接口与存储引擎交互,存储引擎自定义实现数据的物理、逻辑组织形式以及索...

2019-08-09 16:28:33 321

原创 MySql系列之架构浅析

文章目录引言1.数据库架构2.MySQL目录结构3.InnoDB目录结构4.核心类库5.客户端与服务端交互MySQL是一个开放源代码的关系数据库管理系统。原开发者为瑞典的MySQL AB公司,最早是在2001年MySQL3.23进入到管理员的视野并在之后获得广泛的应用。 2008年MySQL公司被Sun公司收购并发布了首个收购之后的版本MySQL5.1,该版本引入分区、基于行复制以及plugi...

2019-08-07 18:14:52 237

原创 MySql源码分析

文章目录1.MySQL源码1. 主函数sql/mysqld.cc中,代码如下:2.监听连接: sql/mysqld.cc - handle_connections_sockets:3. 创建连接 sql/mysqld.cc create_new_thread/create_thread_to_handle_connection:4. 线程调度器thread_scheduler - create_...

2019-08-07 18:11:51 4598

原创 Linux下网络编程5种实现(源代码)

学习整理Linux网络编程5种服务器模型多线程、多进程、Select、Poll、Epoll实现源代码,注释较为详细,方便初学者学习。1.简单阻塞式客户端服务器实现:(如若链接打不开,复制网址到浏览器打开)源代码:http://download.csdn.net/detail/u013291818/98225252.多线程模型客户端服务器实现:源代码:http://down...

2019-08-07 18:11:44 2283

原创 NGINX系列之HTTP模块开发

上文介绍nginx请求11个阶段处理,本文将动手实操开发并注册一个HTTP模块,在实现ngx_http_hello_world_module模块的过程中,详细介绍其实现步骤。模块组成介绍模块定义模块名称 ngx_http_hello_world_module模块功能 功能相对简单,从Hello World开始,通过实现扩展HTTP模块ngx_http_hello_wor...

2018-07-28 13:38:32 1174

原创 NGINX系列之HTTP阶段分析

读取完请求头后,nginx进入请求的处理阶段。简单的情况下,客户端发送过的统一资源定位符(url)对应服务器上某一路径上的资源,web服务器需要做的仅仅是将url映射到本地文件系统的路径,然后读取相应文件并返回给客户端。但这仅仅是最初的互联网的需求,而如今互联网出现了各种各样复杂的需求,要求web服务器能够处理诸如安全及权限控制,多媒体内容和动态网页等等问题。这些复杂的需求导致web服务器不再是一...

2018-07-28 13:37:31 673

原创 NGINX系列之配置文件

nginx是一款高性能的服务器,其核心配置可配置,存储在nginx.conf文件中,本文简要介绍各参数的含义。######Nginx配置文件nginx.conf######nginx运行的用户名和用户组user root root;#nginx工作进程数,建议设置为等于CPU总核心数。worker_processes 8;#全局错误日志定义类型,[ debug | info...

2018-07-28 13:36:34 223

原创 NGINX系列之进程模型

在上一节中分析了nginx主流程,在mian函数中完成服务器的配置文件解析以及模块初始化工作后,根据系统设置进入单进程或者多进程模式,本文将分析nginx进程模型。进程模型简介在web服务中,随着用户基数增长,技术演进的趋势是提高系统的并发性和稳定性,一种方式是通过扩展机器的个数实现负载均衡,通过多台机器的量变引起质变,提高系统的并发性,显然这种方式资源利用率较低,成本较高;第二种方式...

2018-07-28 13:35:36 2912

原创 NGINX系列之事件模型

nginx在完成进程的创建后,主进程进入信号处理的循环中,不参与事件处理;worker进程则进入事件处理过程。nginx任何操作,包括定时任务、连接、读写等都可以定义为事件,事件具有的特点是被动特性,即发生才处理,避免因为轮训状态而导致的时间消耗。本章将介绍nginx的事件处理模型。事件模型简介定时器任务上一章节中提到nginx如何实现定时任务?如何确保定时任务的准确性? ...

2018-07-28 13:33:35 1554

原创 NGINX系列之MAIN函数

近期在系统学习Nginx相关源码,针对nginx进程模型、事件处理模型、配置以及扩展开发等诸多方面希望能够沉淀一些东西,故针对上述方面整理一系列博客,既然是源码分析,那就首先从main函数开始吧。核心数据结构全局变量cycle数据结构 ngx_cycle_s变量是nginx中贯穿始终的全局变量,其存储在系统运行过程中的所有信息,包括配置文件信息、模块信息、客户端连接、读写事件处理函...

2018-07-28 13:32:20 756

原创 NGINX系列之ngx_connection

上文介绍nginx事件模型,当用户发起请求时候,为便于对连接进行管理,服务端将用户的请求封装为一种数据结构ngx_connection_t,从而方便维护客户端各种请求信息以及连接生命周期的管理。数据结构struct ngx_connection_s { void *data; ngx_event_t *read; n...

2018-07-28 13:30:33 1024

原创 NGINX系列之内存池

Nginx内存池 ngx_pool_tNginx作为高性能到web服务器,自然需要满足高效的内存使用率和分配效率。 内存池满足上述两个要求,主要优点:统一内存管理,避免内存碎片化,提高系统到使用率(Nginx做内存对齐处理,牺牲一定到使用率换来寻址速率)避免多次向系统申请内存(涉及内核态和用户态转换),提高内存到分配效率;内存统一分配和销毁,避免内存泄露。数据结构 n...

2018-07-28 13:29:18 244

原创 Docker入门教程

遇见Docker容器学校期间接触到容器的概念,但一直未曾真正实践,看到名字就感觉望而生畏,在实习阶段真正接触到Docker容器的使用,惊叹于这一神来之笔!!太有用了!! 相信程序员经常遇到如下场景:测试员小A:Monkey,程序在我机器上运行不了....程序员:在我机器上正常啊...........无限撕逼中..............无限找BUG中....上述场...

2018-06-28 14:41:02 381

原创 NGINX源码分析系列之内存池ngx_pool_t源码分析

Nginx内存池 ngx_pool_tNginx作为高性能到web服务器,自然需要满足高效的内存使用率和分配效率。 内存池满足上述两个要求,主要优点:统一内存管理,避免内存碎片化,提高系统到使用率(Nginx做内存对齐处理,牺牲一定到使用率换来寻址速率)避免多次向系统申请内存(涉及内核态和用户态转换),提高内存到分配效率;内存统一分配和销毁,避免内存泄露。数据结构 ngx...

2018-06-21 11:02:45 179

原创 腾讯后端面试经验

终于等来腾讯的面试。4.3号 机试机试包括选择(30多)、简答(2题)、编程(2)。选择和简答编程分别一小时,选择题考的比较广,概率、Linux 、操作系统、网络等各个方面, 自我感觉比牛客网题有深度和难度,不是那种一看就知道结果的问题,而且都是多选题(这点比较坑), 从面试的整体过来来看,无论笔试还是面试腾讯都注重广度和深度,也就是技术实力。4.12接到13号面试的通知,...

2018-04-07 21:22:06 5781 3

原创 C++对象内存模型

最近看了《深入理解C++对象模型》,综合学习C++对象的内存布局,本文基于个人理解和程序测试绘制C++对象模型内存布局,如有错误,还请批评指正。1.前言首先,相较于C语言,C++语言并没有额外增加内存消耗(确切说,在没有虚函数情况下)。 对于一个C++类对象,每个对象有独立的数据成员(非static),但是内存中成员函数只有一份,该类的所有对象共享成员函数。static数据成员属...

2018-03-20 20:01:37 544

原创 负载均衡总结

最近在学习负载均衡原理,看了大量的文章和相关知识,有很大的收获,做一个简要总结,一来回顾自己所学的知识,二来对所看所学知识整理,供后来者参考借鉴,如有错误的地方,还请指出,学生阶段,考虑的内容尚有欠缺之处。1.什么是负载均衡负载均衡,英文名称为Load Balance,指由多台服务器以对称的方式组成一个服务器集合,每台服务器都具有等价的地位,都可以单独对外提供服务而无须其他服务...

2018-03-19 16:38:01 792

原创 数据库经典面试题

1.数据库完整性约束 实体完整性、参照完整性、用户自定义完整性2.存储过程、触发器、函数的区别 触发器与存储过程非常相似,触发器也是SQL语句集,两者唯一的区别是触发器不能用EXECUTE语句调用,而是在用户执行Transact-SQL语句时自动触发(激活)执行。触发器是在一个修改了指定表中的数据时执行的存储过程。通常通过创建触发器来强制实现不同表中的逻辑相关数据的...

2018-03-09 17:03:12 412

原创 Java经典面试题

1.HashMap和HashTable区别 1.HashMap继承于AbstractMap,而Hashtable继承于Dictionary;   2.线程安全不同。Hashtable的几乎所有函数都是同步的,即它是线程安全的,支持多线程。而HashMap的函数则是非同步的,它不是线程安全的。若要在多线程中使用HashMap,需要我们额外的进行同步处理;   3.null值。Hash...

2018-03-09 16:44:23 318

原创 Linux命令每日学之find

find命令是在指定目录下查找文件或者子目录。区别与grep的是 grep 是在文件中查找字符。如果不指定参数,find默认查找当前目录下文件和子目录。命令格式 find [参数] [目录] [文件名] 命令功能在指定目录查找满足条件的文件或者子目录。命令参数-name <文件名称>: 查找名称为指定名称的文件。 -iname <文件名称>: 查找名称为指定名称的文件(忽略大小写)。 -Btim

2017-12-22 20:13:30 297

原创 Linux命令每日学之grep

grep(global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来),grep命令是强大的正则表达式w文本搜索命令,其常常配合文本相关命令使用。 注意:ps命令只是显示瞬时的进程状态信息。区别与top命令,则是动态显示进程状态信息,即是实时刷新。命令格式 grep [参数] [正则表达式] [文件

2017-12-21 20:57:10 288

原创 Linux命令每日学之PS

ps(process status)命令是常用的linux命令,其用于显示系统当前运行的进程.用于查看进程状态,是否是僵尸进程,进程运行所处的状态,进程所占用的资源(CPU、时间)等。是必要掌握的命令。 注意:ps命令只是显示瞬时的进程状态信息。区别与top命令,则是动态显示进程状态信息,即是实时刷新。命令格式 ps [参数] 命令功能配合参数,显示当前运行进程的所有状态信息。命令参数-a

2017-12-20 19:34:39 228

原创 Linux命令每日学之Ping

Ping命令是常用的linux命令常用于测试两台机器之间是否网络畅通,其原理是通过ICMP报文实现。 注意:linux下的ping和windows下的ping稍有区别,linux下ping不会自动终止,需要按ctrl+c终止或者用参数-c指定要求完成的回应次数。命令格式 ping [参数] [主机名/IP] 命令功能ping 命令每秒发送一个数据报并且为每个接收到的响应打印一行输出。pin

2017-12-18 21:06:58 245

原创 卡尔曼算法精讲与C++实现

卡尔曼滤波器是一个“optimal recursive data processing algorithm(最优化自回归数据处理算法)”。对于解决很大部分的问题,他是最优,效率最高甚至是最有用的。他的广泛应用已经超过30年,包括机器人导航,控制,传感器数据融合甚至在军事方面的雷达系统以及导弹追踪等等。近年来更被应用于计算机图像处理,例如头脸识别,图像分割,图像边缘检测等等。

2017-12-05 17:07:32 3678 1

转载 REDIS源码解析

综述最近笔者阅读并研究redis源码,在redis客户端与服务器端交互这个内容点上,需要参考网上一些文章,但是遗憾的是发现大部分文章都断断续续的非系统性的,不能给读者此交互流程的整体把握。所以这里我尝试,站在源码的角度,将redis client/server 交互流程尽可能简单地展现给大家,同时也站在DBA的角度给出一些日常工作中注意事项。Redis client/server

2017-11-21 11:19:29 305

原创 分布式服务框架之功能模型

分布式服务框架 随着业务的扩展,应用规模不断扩大,系统内部巨无霸应用越来越多,常规的垂直应用架构无法应对复杂业务带来的各种挑战。通过将业务公告能力抽象成原子服务,对复杂应用进行水平拆分合垂直拆分,实现服务消费者和生产者的解耦,降低重复模块开发的人力成本和时间成本。 框架功能尽管不同的分布式框架实现细节略有差别,功能特性也不近相同,但是都具有以下基本特性。 服务订阅与发布 : 配置化

2017-10-26 11:27:17 462

原创 分布式服务框架之原理实现

RPC的全称为Remote Procedure Call, 他是一种进程间通信放hi,允许向调用本地方法一样调用远程服务,对于上层应用来说透明化,屏蔽服务调用过程。目前业界由许多开源框架,例如 Apache Thrift(Facebook开源)   Avro-RPC(Hadoop子项目)   Hessian(caucho提供的基于binary-

2017-10-26 11:07:01 492

原创 MySQL系列之源码浅析

源码才是王道。 真正的高手从来不是临场发挥,随机应变是外人看来的错觉。1. 主函数sql/mysqld.cc中,代码如下:int main(int argc, char **argv) //标准入口函数{ MY_INIT(argv[0]);//调用mysys/My_init.c->my_init(),初始化mysql内部的系统库 logger.init_base(); //

2017-10-12 15:16:25 6982 4

原创 MySQL系列之架构浅析

数据库架构MySQL目录结构InnoDB目录结构核心类库客户端与服务端交互> 真正的高手从来不是临场发挥,随机应变是外人看来的错觉。 MySQL是一个开放源代码的关系数据库管理系统。原开发者为瑞典的MySQL AB公司,最早是在2001年MySQL3.23进入到管理员的视野并在之后获得广泛的应用。 2008年MySQL公司被Sun公司收购并发布了首个收购之后的版本MySQL5

2017-10-12 11:28:47 940

转载 jps、jinfo、jstat、jstack、jmap、jconsole等命令简介

JDK提供了几个很实用的工具,如下:jinfo:观察运行中的java程序的运行环境参数:参数包括Java System属性和JVM命令行参数,java class path等信息。命令格式:jinfo 进程pidjps:用来显示本地的java进程,可以查看本地运行着几个java程序,并显示他们的进程号。命令格式:jps   或 jps 远程服务ip地址    (默认端口1099)jst

2017-09-17 08:41:59 606

原创 编程题集合

树:最近公共祖先节点 : http://blog.csdn.net/u013291818/article/details/72805504中缀表达式 :http://www.cnblogs.com/mygmh/archive/2012/10/06/2713362.html矩阵链乘法:http://blog.csdn.net/qq_18738333/article

2017-09-14 10:01:25 280

原创 数据库锁-行锁、页锁、表锁

页级:引擎 BDB。表级:引擎 MyISAM , 理解为锁住整个表,可以同时读,写不行行级:引擎 INNODB , 单独的一行记录加锁表级,直接锁定整张表,在你锁定期间,其它进程无法对该表进行写操作。如果你是写锁,则其它进程则读也不允许行级,,仅对指定的记录进行加锁,这样其它进程还是可以对同一个表中的其它记录进行操作。页级,表级锁速度快,但冲突多,行级冲突少,但速度慢。所以

2017-09-10 14:32:40 995

转载 系统优化思路

来自: 朱小厮的博客链接:http://blog.csdn.net/u013256816/article/details/51563564(点击尾部阅读原文前往)程序猿自媒体已获转载授权1、I/O优化1、增加缓存,减少磁盘的访问次数。2、优化磁盘的管理系统,设计最优的磁盘方式策略,以及磁盘的寻址策略,这是在底层操作系统层面考虑的。

2017-09-09 14:38:13 592

转载 数组字符串那些经典算法:最大子序列和,最长递增子序列,最长公共子串,最长公共子序列,字符串编辑距离,最长不重复子串,最长回文子串

0、前言        这一部分的内容原本是打算在之后的字符串或者数组专题里面写的,但看着目前火热进行的各家互联网公司笔试面试中,出现了其中的一两个内容,就随即将这些经典问题整理整理,单写一篇发上来了。这里争取覆盖面广一些,列举了7个最经典的问题,也会是之后大家笔试面试常见到的问题,而每个问题下都列举了几种思路,掌握这些经典问题的解题思路和算法相信对同类型问题的解答都能有帮助。

2017-09-08 08:21:28 480

一维二维Klaman滤波算法

Kalman滤波算法C代码实现,包括一维Klaman滤波算法和二维Kalman滤波算法

2017-05-02

Linux网络编程5种模型实现源代码

linux下网络编程5种模型Select,Poll,Epoll,多线程,多进程,实现源代码,注释较为详细,方便初学者学习

2017-04-22

阻塞式客户端服务器

阻塞式网络编程模型客户端服务器程序

2017-04-17

一维Kalman滤波器实现 C语言

C语言实现Kalman算法,简单易懂,注释详细,方便学习

2016-11-17

空空如也

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

TA关注的人

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