自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 优化查询步骤总结

慢查询调优。1.索引本身:有无对应索引,联合索引的所有列是否能都被用到,字符串索引是否满足最左,联合索引是否区分度高的在前,索引是不是太多了影响插入,能否能用索引本身不用实际去聚簇索引取数据;2.实际查询方案:数据库会根据数据库的现状调整方案,比如对于特别小的表数据库可能直接扫表而非用索引,所以有时候需要explain看实际查询方案是否按自己的想的做;3.查询优化:例如前公司的最佳实践...

2019-05-01 20:07:41 2439

原创 redis实际使用场景举例

1.string存session,session存用户基本信息,登录时间、用户名、vtypes、utypes;反正和需要独立过期时间关联的key都可以用string,比如mongo的“函数锁”,比如通用弹窗需要确定之前是否弹过,mongo本身缺乏事务类似select for update的支持,所以会用到一个redis锁来判断当前是否已经有弹窗需求在执行;2.hash表有公共前缀,又没...

2019-05-01 19:57:38 3194

原创 深究更改进程名(一)

1.需求如nginx这种,父进程可以fork出多个子进程,程序在同一台机器上运行多次产生多个进程,多个进程使用不同的conf从而监听不同的端口。这样,在ps和top时,会有区分父子进程名的需求而不是都叫nginx;对于多个nginx的父进程希望知道进程的具体任务,这可以用conf区分。就像nginx实际处理一样:nginx: master process /usr/local/ngin

2017-07-16 20:13:31 3182

原创 压缩数据减少网络交互量举例

背景:服务器给移动客户端传数据,每份数据有32位id+4bit属性值,有足够理由相信这些id以某种“聚簇”形式存在。比如(为了不写出具体实际场景,举个矬例子)服务器传给客户端某某学校几个班学生的身份证号和班号,这些学生都是老乡,出生时间接近,所以身份证数字差距不太大,班号也是最多16个班。c++代码,这里都写到一个cpp里面了,本来加密和解密至少应该写在两个cpp,从略。#incl

2017-07-13 22:39:05 501

原创 任务调度程序

题目:一个XXX系统,有多个数据来源,需要每个一段时间去数据提供方拉取数据,每次拉取有个超时上限,如果超时kill掉并且记录到日志。因为拉取数据的需求经常变,并且每个数据源变的需求都不一样,所以拉取操作希望能用脚本语言比如php实现,而调度进程>无要求。解:调度进程用c++,php脚本接收两个参数超时时间和任务号,php脚本用sleep模拟拉取数据和处理数据操作。c++调度程序:#in

2017-07-13 15:48:50 596

原创 实时公交到站数计算

题目:XX市实时公交项目,能得到该市的公交车每一次报站信息,比如“下一站到五道口站,请下车的乘客做好准备”,需要得到线路上每个站点的下两辆车到站情况。抽象:131路公交车有19站,有编号为1 2 3 4,四辆公交车,四辆车下一个站点分别是2 4 6 8。那么对于1号站点,前面没有公交车,就输出-1,-1表示没有接下来的两辆车。而3号站点,因为前面只有一个1号公交车(马上到2号站台),所以输

2017-07-12 16:17:33 2151 1

原创 nginx源码学习4——重写共享内存锁类

先贴代码,细节以后有必要再加。mytool_lock_base.h:#ifndef MYTOOL_LOCK_BASE_H#define MYTOOL_LOCKS_BASE_H#include #include #include namespace mytool{/* GCC 4.1 builtin atomic operations */typedef volatile

2017-07-09 23:31:18 391

原创 一个小例子试图解释多态和虚函数表

直接上代码吧:#include class Base{ public: //没用到,是为了让类有实体大小 int num = 10; virtual void print() const {printf("in Base\n");}};class Derived : public Base{ public:

2017-07-05 22:09:53 219

原创 工作中mysql相关问题罗列(一)

之前工作和mysql强相关,在进一步了解mysql以后,觉得数据库很牛,水很深。不只是因为数据库对我来说是黑盒,更因为数据库对我来说很难成为白盒。一直一来有稍微不爽就看源码的习惯,但mysql源码,呵呵,算法、结构设计甚至代码量和其他很多经典源码都不是一个量级的。以我现在的能力,写关于mysql的博客不过就是堆砌事实,提出疑问,逐步找答案罢了。千里之行始于足下,就从本文开始,先列举工作中的问题

2017-07-05 17:03:43 386

原创 nginx源码学习3——定时器c++实现

本文是这一系列的第三篇,用到了前两篇的内容:nginx内存池:http://blog.csdn.net/liu3daniel/article/details/73381205nginx红黑树封装:http://blog.csdn.net/liu3daniel/article/details/73649577还是老规矩,先是头文件,之后cpp,最后不完全测试。mytool_t

2017-07-03 18:29:51 465

原创 epoll vs select———— epoll内核源码理解

和上一篇select的比,这篇不敢叫赏析了,因为select有几篇优秀的文章并且代码复杂度简单一些,epoll也不是麻烦太多,但是可参考的文章没见到能讲清的。一、感性认识进一家餐馆,里面大厨众多,各个菜系的都有。你先点了一大批菜囊括了百大菜系,之后想的是哪个菜先上先吃。select(无限时等版本):1.先给每个厨师关照一下,“师傅,我是123号桌的,您有菜了麻烦叫一声”;(

2017-07-01 11:04:22 339

原创 epoll vs select———— select内核源码赏析

作为老生常谈的epoll和select,每次面试说道网络编程一边会出现在tcp/ip状态图之后,网上的标准答案也很多,但是本文希望能从内核源码来提升一下逼格,同时自己在扒nginx源码,epoll作为其最核心的函数,深入了解也有帮助的。先来看select源码,网上其实有不少解析了,很多很优秀但是因为是大牛所以不太容易理解,这篇一是自己备忘,二是希望自己能讲清楚点:一、位置在fs

2017-06-29 01:07:23 823

原创 守护进程学习————两次fork细节、deamon()函数

一、守护进程和daemonize()函数这一小节是自己的理解,无干货,下一节有干货。守护进程查wikipedia的定义:In multitasking computer operating systems, a daemon is a computer program that runs as a background process, rather than being under th

2017-06-25 15:02:57 920

原创 nginx源码学习2——扒、封装红黑树代码

说明:1.nginx红黑树除了是个通用结构体,还是定时器实现的载体,进一步学习定时器代码需要了解红黑树用法;2.nginx红黑树基本上只提供了一个初始化红黑树、增、删节点,查找最小节点四种操作,其实对nginx也够了;3.nginx红黑树细节暴露比较多,节点要自己malloc自己构造,插入操作的第一步(旋转前)要自己实现(尽管各种实现的不同处都只是在key相同时提供比较大小的方法),节

2017-06-23 16:29:07 300

原创 网络编程调参学习————三次握手中的接收缓存和通告窗口

一、查资料        在我的机器上,cat /proc/sys/net/core/rmem_default,输出212992;cat /proc/sys/net/core/rmem_max,212992;        cat /proc/sys/net/ipv4/tcp_mem,输出23343   31127   46686。        cat /proc/sys/n

2017-06-21 23:03:54 930

原创 nginx源码学习1——扒内存池代码

学nginx源码有一段时间了,如果学习曲线是看——调——写,那么这一次走到第二步了。nginx源码有不少可取之处,事件驱动模型、读conf方法、父子进程通信、顺序处理module、conf层级配置、内存池等。其中,内存池算是比较清晰和其它模块依赖较少的。就扒下来了,把依赖相关处给改了,加了注释和一个打印函数,写了一个不完善的测试程序。希望本文作为一个开始,后面坚定地走下去。myto

2017-06-17 15:48:44 1602

原创 string实现

目标:1.string接口纯虚函数类StringInterface;2.我的ubuntu上string实现重写(但不包括写时复制);3.一种支持小字符串优化的实现;4.基于StringInterface的多态测试case集合;6.多场景性能分析。当前时间不太够,只差不多完成了1\2,先放到博客备忘,之后补上。string_interface.h//#defi

2017-06-16 00:46:54 307

原创 volatile实例

volatile实例一、volatile的汇编解释main.c:#include int a = 100;void main(){ while(a == 100){} printf("finally...\n");}优化要开得比较高,gcc -O2 -S main.c得到    cmpl    $100, a //先比较a和100    j

2017-06-14 17:56:52 491

原创 gcc 动态链接库某些细节

gcc 动态链接库某些细节一、生成生成网上文章很多,这里大体写下。有三个文件mytool.h、mytool.c、test.c,其中test.c:#include #include #include "mytool.h"int main(){ const char *src = "hahaha nihao"; char *dst = (char *)mall

2017-06-14 14:52:39 440

原创 bootp dhclient NetworkManager dbus dnsmasq resolvconf avahi关系厘清(持续更新)

在前一篇里面,其实只通过剖析代码确定了glibc通过resolv.conf来访问本地域名服务,resolvconf通过读取某路径下的文件把带nameserver的行写入resolv.conf两件事。接下来在继续追域名服务dnsmasq过程中就不断遇到新概念,比如题目中的6个,本文目标就是抽丝剥茧地厘清六者的关系,让自己在每个面试中都能讲这个讲半小时。1.dhclient和bootp  

2017-06-13 10:16:42 1186 1

原创 linux网路工具、网络、网络编程、网络库、网络内核学习(一)

1.域名服务    1.首先家里是无线网,ifconfig(interface接口参数,好记),可以看到三个接口的参数,eth0以太网,lo0(loopback环回),wlan0看名字就是无线网啦。    inet 地址:192.168.1.110  广播:192.168.1.255  掩码:255.255.255.0。这是无线网的ip地址相关说明,其实有了掩码和inet ipv4地址就能

2017-06-04 12:53:06 786

原创 近期内存学习的几点心得

最近写代码对于内存分配这一方面遇到了一些现象,下面罗列下这些现象,小部分除了现象和推测还有解释。1.malloc分配内存结构    char *p = (char *)malloc(1);    printf("%d %d %u\n",*(int *)(p - 2 * sizeof(size_t)),*(int *)(p - sizeof(int)),(unsigned)p);  

2017-05-24 10:22:35 682

原创 读c++ primer有感--string源码中的模板编程示例

看string源码,第一个问题是传说中的模板编程,不过过会儿了解下后觉得但是处于读懂代码的目的的话,相应的模板编程的奇淫技巧也是能够被理解的。本文举例说明一下相关string源码中用到的技巧,当然,也希望通过对表象的解释对隐藏在其后的编译时多态能揭露一二。本文的例子在源码中多多少少都会找到些例子,不那么空兄来风。ps:知道点模板编程的东西,直接的一点好处是g++的时候面对一大陀不知所云的错

2017-05-09 16:15:01 344

原创 读c++ primer有感——stl性能leetcode刷题直观测试

用leetcode刷题对stl效率的感性认识。期望证实即使对stl(或某些c++特性)即使在不熟练的应用下也和裸写c没有性能代差(就是有差距也是小系数线性的),后面的文章会用string源码为例剖析下stl的实现细节和性能,而本文只是个简单的事实堆砌。ps:stl网上有不少说法,这里就取standard template library的本意,用模板实现的那部分容器算法迭代器和各种trait都

2017-05-08 10:46:36 1259

原创 读c++ primer有感----局部和全局变量,extern,static

一、全局和局部的可见范围1.首先全局是相对的,局部就是函数内或括号内可用,全局有文件内可见、库内可见、链接时可见这些“全局”的;    局部的例子:#includeint main(){    int i = 100;    for(int i = 0;i         std::cout    }    std::cout}两个i都是局部的。

2017-04-24 17:43:16 697

原创 读c++ primer有感 -- 左值和右值

一、变量和内存变量实际对应栈地址,例1:    int i = 5;    int j = i;直接g++不优化,主要的汇编代码对应三行:    movl    $5, 24(%esp) //栈顶地址+24字节的栈空间被赋值为25L,也就是i的地址    movl    24(%esp), %eax //i的地址对应内容(也就是5),拷贝到寄存器ax中    movl

2017-04-11 13:04:44 508

原创 读c++primer有感1---const

前言:c++关键字const,从字面意思上来说期望被const修饰的变量、对象、引用、类成员函数等拥有某种“保持不变”的特征、然而这些特征很多可以被破坏掉,甚至c++自身就提供破坏这些特征的手段。可以说const更类似于一种君子协定,比如函数设计者希望用户认为可以放心地使用函数,此时const X &obj保证不会让用户感知到obj前后变化;类设计者设计const成员函数告诉编译器可以让con

2017-04-06 16:41:08 551 1

空空如也

空空如也

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

TA关注的人

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