自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

冷山不生云

但愿长醉不复醒。

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

原创 项目中大量if...else...优化策略

项目中大量if...else..优化策略。网上关于这种优化的大都是java代码,所以特地记录一下我的想法,填补一下C++代码的空缺。Python来处理这个也类似,基本把map换成dict就行了。

2019-12-28 19:54:51 761 3

原创 Elasticsearch multi-index join实践

本文介绍的Elasticsearch join方案采用python实现,用到了python的第三方库pandas。本文介绍的join方案是一种通用的方法,不依赖于特定的ES版本。

2019-12-07 14:51:10 1899

原创 Modern C++的应用,实现golang中的defer

modern C++ 实现 golang 中的 defer 语法。实现的过程用到了:lambda表达式、std::move、std::forward、右值引用、宏连接等比较绕一点的语法,没有了解过的读者可以先去了解一下这些语法。

2019-11-17 00:54:08 465

原创 突发奇想~

做项目的过程中,突发奇想的一类死循环代码~

2019-11-14 19:23:02 296 2

原创 django1.11x + postgresql9.4实现一个评论系统的demo

django1.11 + postgresql9.4实现一个评论系统的demo。这个项目本身很简陋,只是为了练习django和postgresql的交互实现的一个完整的数据流。

2019-10-04 23:00:16 360

原创 django第一个项目127.0.0.1:8000不能访问解决方案

虚拟机 + centos7 + django1.11x创建的第一个项目无法访问127.0.0.1:8000的一些解决思路。

2019-10-04 16:56:33 8531

原创 supervisor 简明使用

supervisor简明使用简单介绍​ supervisor是用Python开发的一套通用的进程管理程序,能将一个普通的命令行进程变为后台daemon,并监控进程状态,异常退出时能自动重启。它是通过 fork/exec 的方式把这些被管理的进程当作supervisor的子进程来启动,这样只要在supervisor的配置文件中,把要管理的进程的可执行文件的路径写进去即可。也实现当子进程...

2019-09-29 10:07:28 287

原创 MySQL常用日期函数使用笔记

在一个项目中对这块用的还挺多的,记录一下MySQL常用日期函数的使用情景。

2019-09-19 09:38:55 333

原创 一个统计文件夹代码行数的工具

本工具的作用在于统计指定文件夹内,指定类型代码的行数。目前只支持Linux平台。作者:aideny

2019-09-18 11:21:36 742

原创 聊一聊布隆过滤器(Bloom filter)

一个网站要添加URL黑名单,需要把包含20亿条URL的黑名单存储到计算机上,怎么存?怎么快速判断浏览器输入的url是否在黑名单中?

2019-09-16 16:56:17 454

原创 记一次对“缓冲区溢出漏洞”的攻击实验

记录一次对“缓冲区溢出漏洞”进行攻击的实验。通过这个实验,可以加深对函数调用底层原理(栈帧结构)以及缓冲区溢出危害的理解。进行这个实验之前,读者最好先了解一下函数的栈帧结构以及X86-64汇编语言基本语法。

2019-08-24 16:07:47 847

原创 Python2.7.5生成验证码

开发网站登陆 / 注册页面的时候往往需要实现验证码模块用于反爬虫机制,这里介绍用python2来来实现生成验证码的功能。这里用到了graphic-verification-code库,这个库依赖于PIL库。

2019-08-17 16:57:16 203

原创 关于X86-64汇编中几条指令的解答笔记

这是一段C语言代码:long test(long x, long y){ long val = 8 * x; if (y > 0) { if (x < y) val = y - x; else val = x & y; } else if (y <= -2) { ...

2019-08-10 16:48:40 4454 2

原创 Nginx root路径修改后无法生效解决方案

记一次解决“Nginx 修改root路径后无法生效”的问题解决历程。在使用Nginx搭建一个静态网站的时候,想要通过让Nginx转发某个请求到后台的指定静态文件,最初修改的Nginx的部分配置如下:server { listen 80; server_name localhost; location / { root html; index index.html; }...

2019-08-08 16:13:31 13626 2

原创 Nginx使用指南之安装

一、pcre 和 pcre-devel安装PCRE(Perl Compatible Regular Expressions) 是一个Perl库,包括 perl 兼容的正则表达式库。nginx 的 http 模块使用 pcre 来解析正则表达式,所以需要在 linux 上安装 pcre 库,pcre-devel 是使用 pcre 开发的一个二次开发库。nginx也需要此库。命令:sudo yum...

2019-08-01 15:55:21 850 4

原创 从零开发一个简单的搜索引擎-索引模块第一部分

注:本模块会大量用到protobuf库、cppjieba库,不了解的读者可以先去简单了解一下这两个库怎么使用,这里就不赘述了。一、对Boost官网网页的预处理注:这个过程用什么语言处理都可以由于Boost官网的数据都是以网页的形式呈现的,但是制作索引的时候直接对网页进行操作就比较麻烦,所以这个阶段就是对Boost官网的网页数据先做一个预处理,将它变成制作索引的时候容易处理的形式。...

2019-07-31 22:31:49 1094

原创 从零开发一个简单的搜索引擎-公共模块

为了让项目尽可能的解耦和,把项目中大多数模块都用到的自定义功能函数以及和模块具体业务无关的函数以 header-only的形式封装成一个头文件,其他模块需要使用这些函数,直接包含这个头文件即可。这个头文件也算是可以自成半个模块吧。注:这半个模块是在开发其他模块的过程中不断添加代码的,在这里博主将这个模块最终所包含的函数这里全部列举出来,方便读者理解。一、字符串1. 字符串的无损切割...

2019-07-30 20:02:11 295

原创 从零开发一个简单的搜索引擎-综述

简述搜索引擎是一个技术含金量非常高的话题,本着学习和提高的目的,在一个前辈的指点下,之前开发了一个对接Boost官网的站内搜索引擎,在学习和开发的过程中我的收获很大,了解和掌握了很多技术细节,也复习了以前学过但是不是非常熟悉的一些知识。打算把开发的整个过程做一个详细的总结,期间穿插个人对搜索引擎相关技术的总结和理解。说明项目中会用到的第三方库:cppjiebactemplategfl...

2019-07-30 18:02:52 530

原创 C++ emplace_back和push_back性能比较

概述从理论上说,右值引用版的emplace_back要比左值引用版的push_back更快一些,因为前者会调用参数的移动构造函数,而后者会调用参数的拷贝构造函数。熟悉这两种构造函数的读者自然明白移动构造函数不需要重新分配内存空间,所以要比拷贝构造函数耗时更少。实践一直只是从理论上知道以上的观点,但是并没有实际验证,刚好一个最近回顾以前的一个项目的时候看到了push_back,所以打算写一段代...

2019-07-22 01:42:38 2961

原创 gflags简明使用指南

一、gflags简单介绍gflags是google开源的一套命令行参数解析工具。通常在项目开发中会有一种需求:可以在代码运行的时候指定某些代码中某些参数的值如果没有显式指定,这些参数可以使用默认的值比如:服务器编程中需要用到IP和端口号。但是这两个变量有时候在具体使用程序的时候才会有具体的值,如果不用gflags可以这么写://test.cc#include <iostrea...

2019-07-16 14:08:49 1157

原创 cache-主存机制和虚存-主存机制的异同分析

一、相同点1.1 出发点相同二者都是为了提高存储系统的性能价格比而构造的分层存储体系,都力图使存储系统的性能接近高速存储器,而价格和容量接近低速存储器。1.2 原理相同都利用了CSAPP著名的局部性原理,把最近常用的信息块从相对慢速的大容量存储器调入相对高速而小容量的存储器。二、不同点2.1 侧重点不同cache的出现主要是为了解决主存与CPU的速度差异问题;虚存的出现主要是为了...

2019-07-13 23:30:05 1707

原创 线程相关笔记

注意:本篇文章不是系统的线程知识讲解,更多的是一些实用的线程常识和个人的笔记总结。如果读者想要获取更系统的OS线程知识讲解,那么本篇文章并不能很好的对你带来帮助,请移步至更详细系统的OS线程相关教程。一、简介线程,有时又被称为轻量级进程,是程序执行流的最小单元。一个标准的线程由线程ID、当前指令指针(PC)、寄存器集合和堆栈组成。通常意义上,一个进程由一个到多个线程组成,各个线程之间共享...

2019-07-09 12:41:12 146

原创 进程五态模型简明理解

进程的基本状态是:运行态,就绪态,阻塞态。如果把创建和结束加上,就可以组成五态模型。一、五种状态转换图状态图说明:就绪状态 -> 运行状态:根据系统的调度算法,处于就绪状态的进程获取到处理机资源(分派的时间片)运行状态 -> 就绪状态:处于运行状态的进程用完了系统分配给它的执行时间片,需要让出处理机在可剥夺的OS中,当有更高优先级的进程就绪,调度算法会让更...

2019-07-06 00:37:33 6528

原创 两个线程打印不同类型的字母

一、题目描述:两个线程分别打印26个英文字母的元音字母和辅音字母,分别按照字母序输出。二、解题思路:(1) 如果要求输出一行感觉看代码都可以看明白了…(2)如果要求输出两行由于线程之间共享全局变量,所以可以将26个字母保存到一个全局数组中,并且保存当前访问到数组元素的下标。然后再创建两个数组分别保存元音字母和辅音字母,不同的线程添加不同类型的字母到对应的字母表中,最后遍历打印元音字母表...

2019-06-28 23:59:48 301

原创 红黑树笔记

红黑树的五条性质:树中的每个结点颜色不是红的,就是黑的;根结点的颜色是黑的;所有为 NULL 的叶子结点的颜色是黑的;如果此结点是红的,那么它的两个孩子结点全部都是黑的;对于每个结点,从该结点到到该结点所有子孙结点的所有路径上包含有相同数目的黑结点;插入操作当创建一个红黑树或者向已有红黑树中插入新的数据时,只需要按部就班地执行以下 3 步:由于红黑树本身是一棵二叉查找树,...

2019-06-25 09:28:31 189

转载 如果ESTABLISHED队列满了,可是有连接需要从SYN队列转移

转载至:https://blog.csdn.net/yangbodong22011/article/details/60468820由于标题长度有限制,我把想要描述的问题再次描述下:内核通常会为每一个LISTEN状态的Socket维护两个队列:accept队列: listen()函数第二个参数BACKLOG指定,表示已完成连接的队列,等待被accept函数取走。SYN队列:由/pro...

2019-06-23 10:50:56 495 1

转载 深入探索 Linux listen() 函数 backlog 的含义

转载至:https://blog.csdn.net/yangbodong22011/article/details/603997281:listen()回顾以及问题引入listen()函数是网络编程中用来使服务器端开始监听端口的系统调用,首先来回顾下listen()函数的定义: 有关于第二个参数含义的问题网上有好几种说法,我总结了下主要有这么3种:Kernel会为LISTEN状态...

2019-06-23 10:44:33 270

原创 使用C++封装一个socket通信框架

封装一组socket常用通信操作,header only 风格。#pragma once#include <unistd.h>#include <string>#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>#include <f...

2019-06-22 23:56:14 755

原创 Linux下IO多路复用

文章目录一、IO多路复用处理数据报文二、select1. 简介2. 函数原型2.1 参数说明2.2 fd_set结构说明2.3 timeval结构说明2.4 返回值说明3. 就绪条件3.1 读就绪3.2 写就绪4. 函数使用5. 函数特点6. 函数缺点三、poll1. 函数原型1.1 参数说明1.2 pollfd结构说明1.3 返回值说明2. 就绪条件3. 函数使用4. 优点5. 缺点四、epol...

2019-06-21 21:04:02 851

原创 Epoll的惊群效应

什么是惊群效应?​ 在多线程或者多进程环境中使用Epoll来处理事件,每个线程 / 进程都同时监听着socket,那么当socket中的某个事件就绪后或者添加新的事件进去,操作系统就不知道应该将哪个线程 / 进程唤醒来处理此次事件,所以操作系统的处理方法就是同时唤醒多个线程 / 进程,可是此时必定只有一个线程/进程能够获得处理此次事件的权利,那么其他没有竞争到处理权限的线程 / 进程就会失败,错...

2019-06-20 21:38:40 1299

原创 如何在10亿数中找出前1000大/小的数?

一、内存空间足够大分治法随机选一个数flag,然后对整个数组进行分割,会得到两部分,前一部分的数都大于flag,后一部分的数都小于flag。示例:如果说前一部分总数大于1000个,那就继续在前一部分进行分割。如果前一部分的数小于1000个,那就在后一部分再进行分割,寻找剩下的数。利用分治法,对左边或者右边进行循环分割,直到找够Top 1000。时间复杂度 :O(N)计算过程 :我们...

2019-06-01 20:03:24 908

原创 三种数据结构的设计理念笔记

红黑树二叉排序树:左孩子节点比父节点小,右孩子节点比父节点大,并且左右子树都是二叉排序树。二叉排序树缺陷:在极端情况下,比如插入的序列是有序的,那么二叉排序树就会退化成单支树(链表)。解决方案:优化成平衡树(AVL树,红黑树),在插入的同时调整这棵树,让节点分布尽可能地均匀。之所以要平衡,是因为树的查找性能取决于树的高度,而平衡树就是在降低树的高度。B树B树是一种多路搜索树,它的每个节点...

2019-05-30 12:04:57 318

原创 求最小接近斐波那契数的距离

今天在做一个算法题的时候,遇到了一个奇怪的bug,在这里记录一下,这个bug由这个算法题引入。题目描述:给定一个数,求这个数和上一个或者下一个斐波那契数列中数的距离。例如:输入10,10的上一个斐波那契数是8,下一个斐波那契数是13,由于10和8离的最近,所以输出的距离就是2input:10ouput:2格式要求:输入一个数,数的范围(1~1000000)输出一个整数...

2019-05-27 22:01:07 1144

原创 记C/C++获取文件大小的几种方法

以下操作需要包含头文件<fstream> | <string>size_t GetFileSize(const std::string& file_name){ std::ifstream in(file_name.c_str()); in.seekg(0, std::ios::end); size_t size = in.tellg(); in.cl...

2019-05-25 11:25:48 12130

原创 那些让我惊艳的文字

记录一下这些年来收藏的那些让我一见钟情的文字。PS:没有写出处的,大概是我忘了,也懒得去查了。行路难,不在水,不在山,只在人情反覆间!(白居易《太行路》)西风吹老洞庭波,一夜湘君白发多。醉后不知天在水,满船清梦枕星河。(《题龙阳县青草湖》唐温如)若逢新雪初霁,满月当空,下面平铺着皓影,上面流转着亮银,而你含笑地向我步来,月色与雪色之间,你是第三种绝色。《绝色》余光...

2019-05-14 18:02:10 1909 2

原创 内存分配和对象构造分离使用

文章目录前言allocator 类前言new有一些灵活性上的局限,其中一方面表现在它将内存分配和对象构造组合在了一起。类似的,delete将对象析构和内存释放组合到了一起。这样会给我们在特定情况下带来一些不必要的浪费,同时带来性能上不必要的消耗。举个例子:std::string* const p = new std::string[n];std::string s;std::strin...

2019-05-14 15:25:26 466 2

原创 Boost库安装及使用记录

Boost库是为C++语言标准库提供扩展的一些C++程序库的总称。文章目录一、前言Linux下安装Boost库二、Boost algorithm字符串切分字符大小写转换字符替换一、前言如果想要在项目中使用Boost库,首先要在开发环境安装Boost库。这里提供Linux Centos7.2开发环境下安装 Boost1.67 的方法。Linux下安装Boost库​ 1. 到官网下载需...

2019-05-12 11:15:02 339

原创 C语言实现二进制运算器

设计思路先将输入的两个二进制数转换成十进制,然后再进行相应的运算,最后将结果转换成二进制的形式打印。运行逻辑示意图函数调用示意图源码:#include <stdio.h>#include <string.h>#include <stdlib.h>#define BINARY_SIZE 32typedef enum{ false = 0,...

2019-04-26 23:02:44 6774 1

原创 STL常用算法总结(持续更新)

STL中的谓词是什么?​ STL中的谓词是一个可调用的对象,其返回结果是一个能用作条件的值。标准库算法所使用的谓词分为两类:一元谓词(意味着它们有一个参数)和 二元谓词(意味着它们有两个参数)。接受谓词参数的算法对输入序列中的元素调用谓词。因此,元素类型必须能转换为谓词的参数类型。建议:本文中很多地方用到了Lambda表达式,如果不清楚的读者可以参考:C++可调用对象文章目录一、排序1....

2019-04-21 14:49:40 501

原创 C++可调用对象详解

文章目录一、函数二、函数指针三、重载了函数调用运算符的类四、Lambda表达式(C++11)1.参数2.捕获列表2.1值捕获2.2引用捕获2.3隐式捕获2.4混合捕获3.返回值类型4.深度理解4.1 Lambda是函数对象4.1 表示Lambda捕获行为的类5.应用场景对于一个对象或者表达式,如果可以对其使用调用运算符,即。如果a是一个可调用的表达式,则我们可以编写 a(args) ,其中 a...

2019-04-21 13:59:16 1152 1

vim快捷使用手册

关于vim这款强大的编辑器的常见使用方法,支持快速上手。

2018-09-11

笔记本选购指南

推荐计算机小白看看这篇文档,这样就不容易被某些电脑城的销售人员忽悠了

2018-05-22

程序员编程艺术

讲述了一些经典编程的技巧,面试前看完这本书会有很大的帮助

2018-05-22

空空如也

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

TA关注的人

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