- 博客(39)
- 资源 (2)
- 收藏
- 关注
原创 MySQL 常用优化
1、为搜索字段建索引能加快查询速度2、避免 SELECT *从数据库里读出越多的数据,那么查询就会变得越慢。另如果你的数据库服务器和APP分离的话,这还会增加网络传输的负载。3、固定长度的表会更快尽量不要使用变长字段,如vchar等。没有固定对齐不利于索引查询。4、能使用枚举的,使用枚举替换文本字段。这样更新和查询都会更迅速。尤其不应使用varchar5、垂直分割把数据库中的表按列变成几张表的方法,这样可以降低表的复杂度和字段的数目,从而达到优化的目的...
2021-04-25 18:13:00
125
原创 C++右值引用和移动语义浅说
1、神马叫右值2、神马叫引用3、这就是右值引用4、神马叫移动语义5、右值引用和移动语义有神马用以及怎马用主要参考《深入理解C++11》
2018-06-12 09:26:04
435
原创 最小堆:C++定时器实现 仿boost
/******************************************************************************************************@author ghq@time 2018-4-2@topic 定时器1、定时分执行一次、循环执行2、单线程和多线程。主线程为单线程有多个定时器,如果每个定时器都用一个线程去实现,有些...
2018-04-03 08:42:40
1744
原创 QT5.7 Windows下发布release程序
在Windows发布release程序有两种方式:一、使用Qt自带工具windeployqt进行。具体步骤如下:1、把自己编译的exe,放入一个新的空文件夹中。我这里是在桌面新建了一个test。2、使用Qt5.7下的命令行3、由命令行进入上面所建立的文件夹,运行如下命令windelpoyqt ***.exe4、使用压缩工具打包即可。这样自动打包,包含的文件很
2017-11-23 14:15:26
5671
原创 设计模式 C++版:第二十三式 模板方法
定义一个操作中的算法骨架,而将一些步骤延迟到子类中。用一句听得懂的话说,就是把一个算法中不变的部分搬移到超类——父类中,把变的部分留给子类,通过接口重写的方式完成各自变化的部分。好处是,减少了代码的耦合,提高了复用。简单代码如下:#include using namespace std;class Father_Class{public: void template_meth
2017-10-13 22:51:08
276
原创 设计模式C++版:第二十二式访问者模式
访问者模式:表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变个元素的类前提下定义作用于这些元素的新操作。优点:就是把数据结构和操作分离。缺点:增加新的数据结构变得困难。代码示例如下:#pragma once#include #include using std::list;class Man;class Woman;//状态即操作class Act
2017-08-30 22:09:10
204
原创 设计模式C++版:第二十一式观察者模式
观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象,这个主题对象在状态发生变化时,会通知所有观察者对象,使他们能够自动更新自己。示例代码如下:#pragma once#include #include #include using std::string;using std::list;class Subject;//观察者接口class Ob
2017-08-30 21:45:21
227
原创 设计模式C++版:第二十式状态模式
直接上代码好了:#pragma once#include //前置声明class Work;class State{public: virtual void writeprogram(Work *w){} virtual ~State(){ }};//工作类class Work{public: Work(State* state) :m_hour(0)
2017-08-30 21:28:02
217
原创 设计模式C++版:第十九式解释器模式
解释器模式:给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该解释语言中的句子。比如配置文件,比如正则表达式,比如浏览器对HTML。当有一个语言需要解释执行,并且可将该语言中的句子表示为一个抽象语法树时,可以使用解释器模式。#pragma once #include#includeusing std::string;//文本类class Context
2017-08-27 21:21:46
266
原创 设计模式C++版:第十八式备忘录模式
备忘录模式:在不破坏封装性的前提下,捕获一个对象的内部状态,并在外部保存为以后恢复之前状态,存储信息。缺点如果数据较多,需要储存的节点也多的话,将会消耗大量内存。不过这也不是什么特别大的问题,如今个人计算机配置很少有低于8G或者16G内存的,而消耗大于8G或16G以上内存的程序相对来说还是比较少的。服务器就更可以随意配置了。#include #includeusing std::v
2017-08-25 08:39:29
235
原创 设计模式C++版:第十七式原型模式
原型其实就是从一个对象再创建另一个对象,且不需要知道细节。如果使用原型模式,要保持灵活性,接口应该尽量丰富例如:起始每个接口只影响一个属性,然后提供多个单一属性接口组合成的多属性接口。#include #include using std::string;using std::cout; using std::endl;/*因为所有的子类,即原型要使用到父类类型,Proto
2017-08-24 20:35:57
204
原创 设计模式C++版:第十六式享元模式
享元模式:运用共享技术,有效支持大量细粒度的对象。在享元对象内部且不会随环境改变而改变的部分,成为享元对象的内部状态。而随环境改变而改变的,不可以共享的状态称为外部状态。内部状态,存储在享元对象中;外部状态可以考虑由客户端对象存储和计算,在调用享元对象的时候,传递给享元对象。#pragma once#include #include using std::string;
2017-08-24 13:22:11
197
原创 设计模式C++版:第十五式职责链模式
职责链模式:使多个对象都有机会处理请求,从而便面请求发送者和接收者之间的耦合关系。将这个对象连成一条链,并沿着链条传递该请求,直到有一个对象处理它为止。类似状态模式。接收者和发送者都没有对方的明确信息,且链中的对象,自己也不知道链的结构。职责链可以简化对象的相互连接,仅保持一个后继者的引用,而不需保持须有接收者的引用。大大降低了耦合度。 需要注意的是,他和状态模式一样,有可能到了链的末端,请
2017-08-23 18:07:52
219
原创 设计模式C++版:第十四式命令模式
命令模式:将一个请求封装为一个对象,从而使你可用不同请求。对客户进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作。优点就是把一个请求操作的对象,和一个知道怎么一个操作的对象分隔开,不再是紧耦合。敏捷开发原则,不要为代码添加基于猜测的,实际不需要的功能。这也是编程中很重要的一个原则——KISS原则。#pragma once#include #include using std:
2017-08-23 17:34:54
258
原创 设计模式C++版:第十三式中介者模式
A:“我想租房,价位1500左右。”中介:“好的,我这边有房源。什么时候过来看看,价钱划算。”B:“我这边有闲置房间,想租出去,2000以上。”中介:“可以的,我这边有客户。价钱好商量。”中介---A:“房东B说了,低于2000不可以。”中介---B:“客户A说了,高于18000,就太高了,不想考虑。”......尽管讲一个系统分割成所需对象,通常可以增加其复用性。
2017-08-22 15:43:49
218
原创 怎么使用C语言实现一个简单的类
听到一哥们碰到一个面试题,说使用C模拟一个类。我们知道C中是没有类的概念的,那我们怎么使用C模拟类呢?其实我们的办法并不多,宏定义可能会是一个不错的选择,下面是简单的尝试。#define Struct_S \ int a;\ int b;\ int c struct S{ Struct_S;}; #define Struct_H \ Struct_S; \ float
2017-08-16 10:37:51
2467
原创 C++ 判断一个字符串是不是utf8或者GBK格式
在处理外部数据的时候,很可能因为数据格式不一样而导致乱码,甚至导致某些程序挂掉。鉴于对多数系统来说,使用是更被广泛使用的utf8,所以判断是不是utf8格式显得很重要了。下面是一个判断字符串是否为utf8的函数:bool is_str_utf8(const char* str){ unsigned int nBytes = 0;//UFT8可用1-6个字节编码,ASCII用一个字节
2017-06-19 10:08:32
14762
8
原创 Linux C++ 获取某一进程的CPU占用率以及内存占用情况
最近做监控相关东西的时候,需要获取某一进程CPU以及内存使用情况,就简单的写了一下,代码具体如下:#include #include #include #include #include #define VMRSS_LINE 17#define VMSIZE_LINE 13#define PROCESS_ITEM 14typedef struct { unsigned l
2017-05-02 11:10:58
22414
4
原创 batch批处理获取同名进程各自内存占用
@echo offrem 初始化数据set process_name=%1set CtpMsg[1].subid=1set CtpMsg[1].flag=0set CtpMsg[1].Size=0set CtpMsg[2].subid=2set CtpMsg[2].flag=0set CtpMsg[2].Size=0set Flag=0set Size=0set CtpNum
2017-04-28 10:53:04
2406
原创 设计模式C++版:第十二式桥接模式
#include using std::cout; using std::endl;/*合成、聚合复用原则:尽量使用合成聚合,尽量不要使用继承。*/class PhoneSoft{public: virtual void run(){ } virtual ~PhoneSoft(){ }};class GameSoft :public PhoneSoft{public
2017-01-08 18:53:51
230
原创 设计模式C++版:第十一式单例模式
单例模式,保证一个类仅有一个实例,并提供一个访问它的全局节点。需要注意,如果是多线程,可能会出现同时访问Singleton的情况,造成创建多个实例,为了防止出现这种情况,我们需要加锁。下面我们就简单模拟一个多线程情况下的单例模式,代码如下:#include #include #include class Singleton{public: static Singleton*
2017-01-08 10:53:06
271
原创 设计模式C++版:第十式外观模式
在开发阶段子系统会因为不断地重构变得越来越复杂,模式使用时会产生大量的小类,使用外观模式可以减少它们之间的依赖。外观模式,重点在于分层,层与层之间建立外观。这样两个不同的复杂层之间,使用简单的接口。其次、维护一个遗留系统时,提供一个外观,让新系统与外观交互,会使得接口简单清晰。#include class SubA{public: void methodA() { printf
2017-01-06 21:16:57
203
原创 设计模式C++版:第九式组合模式
组合模式:将对象组合成树形结构以表示部分和整体的关系。组合模式使得用户对单个对象和组合对象的使用具有一致性。优点:基本对象可以组合成更复杂的对象。任何用到基本对象的地方,都可以使用组合对象。示例代码:#include using std::string;#include using std::list;class CTest{public: CTest(string name)
2017-01-05 21:55:40
214
原创 远程登录让进程可靠运行,避免进程被杀死
我们经常会碰到这样的问题,用 telnet/ssh 登录了远程的 Linux 服务器,却由于网络的不稳定导致任务中途失败。如何让命令提交后不受本地关闭终端窗口/网络断开连接的干扰呢?下面是简单的方法:nohup ./kernel 标准输出和标准错误缺省会被重定向到 nohup.out 文件中。如果想使进程后台运行,可以这样 nohup ./kernel &
2016-12-22 14:46:55
1286
原创 设计模式C++版:第八式工厂方法模式
说实话,这是一个让我感到抗拒的模式,在实际中我从来没用过它。原因有两个,一它只是简单工厂的进一步推广在逻辑清晰度上,并不必简单工厂或者抽象工厂优异,二、一旦发生扩展行的改动立马会有大量的代码开发量,让人不自觉的产生抗拒。当然作为一种模式的介绍,我们还是要介绍它的。下面是关于她的简单定义和代码示例:创建一个用于创建对象的接口,让子类决定实例化哪一个子类,并把这种实例化延迟到它的子类。#i
2016-09-03 10:37:11
315
原创 设计模式C++版:第七式代理模式
开始代理模式以前我们先说一下什么是代理。这个词想必生活中听过见过的太多,比如经销商的烟酒代理,洗漱用品代理等,其实经销代理也就是我们常说的批发商,他们从厂家那里拿货,而后卖给实际用户。经销商的代理好处是什么,为什么厂家不直接卖给用户赚钱呢?比如说我们常用的笤帚什么的,一家厂家的用户全体是全国乃至全世界所有的用户,它不可能和数以百万乃至千万计中的每一个客户打交道。于是每个地区有一个批发商,批
2016-09-03 09:34:13
449
原创 设计模式C++版:第六式迭代器模式
迭代器模式?很奇怪的名字。我们在使用STL的时候,都用过迭代器,这么平常的一种东西也是一种模式?答案是肯定的。世界上很多看起来习以为常的东西其实一点也不平常,甚至很难深入的理解。我们经常使用迭代器,可是如果你问一下迭代器到底是什么,肯定有很多人不知道。在开始代码之前,我们先给出一个迭代器模式的定义好了:提供一种方法顺序访问一个聚合对象的各个元素,又不暴露该对象的内部表示。再简单一点,迭代器
2016-08-24 17:51:22
444
原创 python创建文件夹和文件
python中常使用文件和文件夹的创建和判断,简单记录以备后用。创建文件:fo = open("text.csv","w")创建文件夹:path = "../test"os.mkdir( path, 0755 );判断文件夹是否存在:os.path.exists("../test")
2016-08-22 16:07:57
15883
1
原创 设计模式C++版:第五式装饰者模式
装饰模式,就是动态地为已有功能添加更多功能的一种方式把每个要装饰的功能放在单独的类中,让他包装它所有装饰的对象。所以需要执行特殊行为时,客户代码就可以在运行时根据需要有选择、按顺序的使用装饰功能包装对象。这也是和建造者模式不同的地方。装饰者模式的优势是:可以简化核心类,把核心职责和装饰功能区分开。下面是简单示例:#include #include class Person{pu
2016-08-21 18:50:51
315
原创 设计模式C++版:第四式建造者模式
开始建造者模式之前,我们先提出使用建造者模式的使用场景——有一个复杂对象的需要构建,而且构建的过程是稳定的,这个时候我们可以考虑建造者模式。比如创建四边形,我们可以设定一个画图方式——顺时针画图。也就是说先画上面的一条边,再画右边的边,接着画下面的边,最后画左边的边。这个构造过程是稳定的。其实无论是顺时针还是逆时针或者是交叉画,一旦确定下来规则,整个构造过程就是稳定的了。当然你不能画三条边或者六条
2016-08-18 22:23:29
306
原创 设计模式C++版:第三式适配器模式
在生活中,我们对于适配器并不陌生,比如智能的稳压器,还有充电宝对安卓和苹果手机的转换接口,都是适配器的一种。适配器模式,是为了,将一个类的接口转换成希望的接口,优点是使得原本不兼容的接口,可以一起工作。具体示例如下(别想着赋值粘贴了,还是图片方式,自己动手敲一下,感觉绝对不同):
2016-08-16 19:31:56
345
原创 设计模式C++版:第二式抽象工厂
前面我们介绍过了简单工厂,如果我们还想提供更高一层的抽象,或者在业务需要时,我们需要为每一个简单的工厂提供一个抽象,那我们可以使用抽象工厂。而抽象工厂,也仅仅是对简单工厂的进一步抽象。这也在一定程度上说明了,面向对象编程的能力,其实就是抽象事物的能力。下面举个简单的示例进行说明:抽象工厂,优点在于使用一个具体的工厂十分容易。只需要改变具体的工厂,就可以使用不
2016-08-16 19:16:31
426
原创 设计模式C++版:第一式策略模式
定义了算法家族,分别封装提来,让它们之间可以互相替换,此模式让算法的变化,不会影响到使用算法的客户。具体示例如下:class CashSuper //抽象{public:virtual double acceptCash(double money) = 0;virtual ~CashSuper(){}};class Ca
2016-08-15 22:06:11
308
原创 设计模式C++版:第零式简单工厂
在前面介绍C++基础的时候,我们写了一个简单地计算类 http://blog.youkuaiyun.com/thedarkfairytale/article/details/51750971 。下面使用设计模式的简单工厂类实现一下:使用简单工厂模式后的代码,和之前简单的封装以后对比发现,之前的单一接口,都变成了一个运算类,这样的好处是,我们隔离了各种运算,如果我们修改加法,则不必和
2016-08-15 19:36:27
414
原创 为什么要学设计模式?非学不可吗?
所有言语从一个故事开始,而故事从一份人物简历开始。人物姓名:王小二出生年月:不详年纪:十七八亦或者二十来岁性格:热血、冲动、抱负远大梦想:渴望成为一枚武林高手,最好习得一身绝世神功,从此可以独步江湖,笑傲红尘,金钱满库,美女满怀现实:只是个会使点蛮力,在街头打架斗殴的屌丝。“我爱上了一个不该爱的人,我的心中都是悔恨。只要想想
2016-08-14 17:39:58
2701
原创 delete操作符干了啥
争论是由编写自己的容器开始的,其中说到了删除一个元素,到底该怎么做,怎样才算是pop_back了?年轻的老鸟说:只要容器使用者访问不到最后一个元素即可,简单的方法是,把最大元素个数减一,并禁止访问最后一个元素即可。作为半生瓜蛋子——半路出家的次新菜鸟,严重以为,必须重内存中删除,容器中的对象,才算pop_back。于是就把争议的问题引到了,delete上了。delete正的删除了内存了
2016-07-26 19:49:10
409
原创 一个简单的redis性能测试程序和性能测试结果
内存数据库中,redis性能是不错的了。对于它的性能测试,我们一般使用redis自带的工具benchmark进行。但有时用自带的测试,我们并不怎么觉得可靠,索性自己写个简单的程序,对比测一下。文件主要包括一个文件配置类,一个redis测试类,以及一个客户端。redis测试类如下:头文件:MyRedisTest.h#pragma once#include #include
2016-07-25 17:02:50
1553
原创 Redis服务端配置总结
1、redis 确保读到配置文件,使用下面方式启动服务器:#./redis-server/path/redis.conf 2、默认接受连接的端口#6379 3、最大listen 队列#tcp-backlog 511 4、连接地址方式,可以是一个或多个ip地址# bind 192.168.1.100 192.168.1.60# bind 192
2016-06-23 11:27:18
1594
原创 windows 7使用 不使用vs也可以编译程序——使用DOS和GCC编译运行程序
在Linux下使用gcc 编译程序,觉得很方便,是不是在Windows下也可以在不适用vs的情况下使用gcc呢?答案是肯定的。而且不用装虚拟机和Linux也可以使用。下面就给大家说说下面的具体操作。1、首先下载mingw-get-setup.exe。如下图:2、运行安装mingw-get-setup.exe。按提示,按个人需要安装即可。我只选择了C和C++编译。3、
2016-01-15 14:56:28
1845
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人