自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

suyinfan的博客

默默地码

  • 博客(62)
  • 资源 (2)
  • 收藏
  • 关注

原创 设计模式-单例模式中的double-check

单例模式中的double-check单例模式一般有两种模式:饿汉模式和懒汉模式1.饿汉模式:程序启动的时候,由主线程创建一个对象实例。2.懒汉模式: 程序启动的时候,不创建对象(NULL),如果有两个线程先后执行if(NULL == ms_Singleton)获取对象,那么将创建两份实例。要解决该问题,需要上锁。经典的单例模式代码如下:template <typename T&g...

2019-04-13 10:21:08 581

原创 设计模式-组合模式

组合模式定义UML类图代码定义组合模式:允许你讲对象组合成树形结构来表现“整体/部分”层次结构。组合能让客户以一致的方式处理个别对象以及组合对象。UML类图上图中各个部分组成如下:Component:抽象基类,定义了组合对象(叶子或者组合)的接口。leaf:Leaf是叶子结点,即不含子组件的结点。Composite:是含有子组件的派生类Client: Component的对象的使...

2019-04-11 22:01:02 170

原创 设计模式-外观模式

外观模式定义UML类图结果图最少知识原则:优点缺点定义外观模式提供了一个统一的接口,用来访问子系统种的一群接口。外观定义了一个高层接口,让子系统更容易使用。有时候我们创建一个接口简化而统一的类,用来包装子系统种的一个或多个复杂的类。它允许我们让客户和子系统之间避免紧耦合。UML类图上图中各个部分组成如下:外观角色类(Facade):客户端可以调用这个角色的方法。此角色知晓相关的(一...

2019-03-23 19:09:00 220

原创 设计模式-适配器模式

适配器模式定义代码结果实现要点:使用场景:定义将一个类的接口,转换成客户期望的另一个接口。适配器让原本接口不兼容的类可以合作无间。适配器模式分为对象适配器和类 适配器两种。UML图如下所示:代码Adapter.h#ifndef _ADAPTER_H_#define _ADAPTER_H_#include <memory>#include <iostream&...

2019-03-21 22:41:35 163

原创 Python中参数是引用传递,还是值传递

目前在使用python做开发,有一个多月了,但是对python的引用传递和值传递,理解的不是很清楚,前几天做一个单子,其中将一个参数作为初始化值传递给一个接口,结果出了bug。问题主要是这样的,客户端做一个界面,界面上面有三个框,主要是将候选字拖到里面,那么在服务端每个人都对应这样一个框,也就是需要保存这个三个框的状态,需要持久化数据。调用的接口的定义如下:class MyCounter(...

2018-09-17 18:40:56 6362

原创 Dijkstra算法

图中从某个源点到其余各个顶点的最短路径,可以采用Dijkstra算法求解,具体思想就是对于图中n个顶点,从顶点v开始求解其到其余顶点vi的最短路径,首先引进一个辅助向量D,它的每个分量D[i]表示当前所找到的从v到vi的路径长度,同时如果存在一个集合S,表示每次找到vi都会加入到集合S中,再次求解n-1个顶点,可以借用S中的顶点作为跳板得到vi的最短路径.代码如下:#include &amp;amp;lt...

2018-07-10 00:01:31 324

原创 设计模式-Builder模式

定义建造模式标准定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示解释Builder模式属于创建性模式,它就是将产品的内部表象和产品的生成过程开来,从而使一个建造过程生成具有不同的内部表象的产品对象。建造模式使得产品内部表象可以独立的变化,客户不必知道产品内部组成的细节。建造模式可以强制实行一种分步骤进行的建造过程。建造模式就是解决这类问题的一种思想方法——...

2018-07-08 21:38:02 237

原创 18年7月5日

1、linux下查看可执行文件大小的命令 ls -lh 文件名 du -h 文件名需要记下的一个数据,可以后面用到435M ScenesServer254M SessionServer2、继承的优缺点优点1、新的实现很容易,因为大部分是继承而来的 2、很容易修改和扩展已有的实现 缺点1、打破了封装,因为基类向子类暴露了实现细节,高耦合。 2、白盒重用,因为基类...

2018-07-07 10:50:15 212

转载 关于pragma pack,__attribute__(packed)

转自https://blog.csdn.net/zhangxiong2532/article/details/50826917 程序编译器对结构的存储的特殊处理确实提高CPU存储变量的速度,但是有时候也带来了一些麻烦,我们也屏 蔽掉变量默认的对齐方式,自己可以设定变量的对齐方式。例如我们设置结构体的对齐方式:struct student{ int age; char c...

2018-06-29 15:47:01 959

原创 C++进程虚拟内存模型

看到一些博客,关于C++进程内存模型,感觉好多都是错的,这里稍微总结下,便于以后查阅1.C进程虚拟内存模型栈,堆,初始化数据段(初始化的全局和静态变量),初始化数据段(又称bbs,未初始化的全局变量和静态变量),文本段(包含了进程运行的程序机器语言指令,具有只读性),见下图:2.C++进程虚拟内存模型栈,堆(malloc(好几个函数,见linux/Unix系统编程手册)申请和fre...

2018-06-16 23:59:01 2611

转载 网易游戏开发面试题

转自https://blog.csdn.net/u014800094/article/details/60964332

2018-06-16 13:17:08 8370

原创 斐波那契数列简单递归和动态规划的实现

一、简单递归的实现int f1(int n){ if (n == 0) { return 0; } if (n == 1) { return 1; } return f(n - 1) + f(n - 2);}但是,这个函数去执行的时候,会发现非常的慢。那是什么原因呢? 我们仔细观察一下,每一次递归...

2018-06-10 11:57:22 998

原创 swap函数不借助临时变量的几种求法

最近看到swap的几种求法,所以总结下,便于以后查阅,其实思想差不多,都没有用到临时变量,“这种方式并没有性能上的优势,它仅仅是一个智力游戏”[深入理解计算机系统]void swap1(int &amp;a, int &amp;b){ a = a + b; b = a - b; a = a - b;}void swap2(int &amp;a, int &amp...

2018-06-09 23:22:03 311

转载 C++ 虚函数表 存在哪

转自这里写链接内容 C++通过虚函数实现多态。那么虚函数表具体保存在哪?是每一个对象都有虚函数表,还是每一类有虚函数表?让我们通过代码分析一下。代码运行在Windows平台,使用Visual Studio2010编译。 虚函数基础知识C++中,一个类存在虚函数,那么编译器就会为这个类生成一个虚函数表,在虚函数表里存放的是这个类所有虚函数的地址。当生成类对象的时候,编译器会自动的将类对象的前...

2018-06-09 17:28:00 2391 1

原创 环形无锁队列

先贴代码,后面再分析#include &amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;iostream&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;#include &amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;pthread.h&amp;amp;amp;amp;amp;amp

2018-05-11 01:26:06 4075 3

原创 IO多路复用之select函数详解

select优点1)select()的可移植性更好,在某些Unix系统上不支持poll() 2)select() 对于超时值提供了更好的精度:微秒,而poll是毫秒。select缺点 1) 单个进程可监视的fd数量被限制。 2) 每次调用select,都需要把fd集合从用户态拷贝到内核态,这个开销在fd很多时会很大 同时每次调用select都需要在内核遍历传递进来的所有fd,...

2018-05-04 22:57:54 618

原创 memcpy内存重叠的解决及其实现

void * memcpy(void * destination, const void * source, size_t num);当源字节串和目标字节串重叠是,bcopy能够正确处理,但是memcpy的操作结果不得而知,这种情况必须改用ANSI C的memmove函数[网络编程]。故该函数实现过程中要考虑src 和dst是否有重叠的情况。 内存重叠:拷贝的目的地址在源地址范围内。所谓内存...

2018-05-01 22:18:24 5165

原创 两个线程轮流对一个全局变量执行加1操作并且打印

两个线程轮流对一个全局变量执行加1操作并且打印最近在看多线程编程,想起以前有个电话面试出的题目,今天就写了下,主要是利用互斥变量和条件变量,主线程先执行,然后通知子线程执行,轮流执行++操作,并且打印,代码如下:#include &lt;stdio.h&gt;#include &lt;stdlib.h&gt;#include &lt;pthread.h&gt;using nam...

2018-04-30 23:12:01 4415

原创 僵尸进程与孤儿进程

1.僵尸进程在父进程执行wait()之前,其子进程就已终止, 即使子进程终止,系统也允许父进程在以后的某个时刻去执行wait(),以确定子进程是如何终止。内核通过将子进程转为僵尸进程,以释放其占用的系统资源,供其他进程使用,该进程唯一保留的是系统PCB中的一条记录,其中包含了子进程的ID,终止状态,和资源使用的数据。当父进程再次调用wait(),内核进程表中将删除该记录,如果父进程终止,ini...

2018-04-06 14:00:02 125

转载 c++继承和组合的区别

转自:https://blog.csdn.net/caoyan_12727/article/details/52337297类的组合和继承一样,是软件重用的重要方式。组合和继承都是有效地利用已有类的资源。但二者的概念和用法不同。通过继承建立了派生类与基类的关系,它是一种 “是(is a)”的关系,如“白猫是猫”,“黑人是人”,派生类是基类的具体化实现,是基类中的一 种。通过组合建立了成员类与组合类...

2018-03-22 22:00:39 229

原创 eclipse+cygwin设置c++11编译环境

1、设置环境变量Project->Properties->C++ General->Pahts and Symbols->Symbols(选项卡)2、Project->Properties->C/C++ Build > Settings > GCC C++ Compiler > Miscellaneous > other flages ,在原来的基础上添

2017-11-26 11:07:19 903

原创 set容器的一些用法

set集合容器:实现了红黑树的平衡二叉检索树的数据结构,插入元素时,它会自动调整二叉树的排列,把元素放到适当的位置,以保证每个子树根节点键值大于左子树所有节点的键值,小于右子树所有节点的键值;另外,还得保证根节点左子树的高度与右子树高度相等。平衡二叉检索树使用中序遍历算法,检索效率高于vector、deque和list等容器,另外使用中序遍历可将键值按照从小到大遍历出来。构造set集合主要目的是为了

2017-10-27 18:30:41 426

转载 new操作符不分配内存,只调用构造函数

问题:c++中的new操作符 通常完成两个工作 分配内存及调用相应的构造出世核函数。1)如何让new操作符不分配内存,只调用构造函数?2) 这样的用法有什么用?解答:(要求new显式调用构造函数,但不分配内存。)题目要求不能生成内存 还要调用构造函数 说明这个类里面没有对内部操作 但可以对外部操作 比如static的数摘录:如果我是用new分配对象的

2017-10-21 14:38:56 459

原创 unary_function和binay_function

一、unary_function详解unary_function可以作为一个一元函数对象的基类,它只定义了参数和返回值的类型,本身并不重载()操作符,这个任务应该交由派生类去完成。其定义如下:template <class Arg, Class Result>struct unary_function{ typedef Arg argument_type; typedef Res

2017-09-09 18:52:16 611

原创 SecureCRT的使用过程中遇到的问题

安装安装就不做过多的介绍使用1、改背景,将背景改为黑色Options->General ->Default Session->Terminal下面将Terminal的候选框改为linux,并且勾选ANSI Color,然后重新连接即可。2、改字体类型和大小Options->General ->Default Session->Terminal->Appearance,然后根据自己的喜好更改字体。3、

2017-09-07 19:48:35 948

转载 关于头文件中的 static inline函数

转自: http://blog.csdn.net/huanghui167/article/details/41346663头文件中常见static inline函数,于是思考有可能遇到的问题,如头文件经常会被包含会不会产生很多副本?网上说法不一。于是自己验证。经过arm-none-eabi-gcc下测试后得出结论。    inline 关键字实际上仅是建议内联并不强制内联,gcc中

2017-09-07 10:44:05 361

原创 使用Ctags进行代码阅读

下载和安装方法我这里使用的源码下载,下载地址如下http://ctags.sourceforge.net/安装步骤如下: 1)然后进入源代码根目录执行./configure, 2)然后执行make, 3)编译成功后执行make install。常用命令列表: 命令 意思 ctags –R * ($ 为Linux系统Shell提示符) $ vi –

2017-09-05 20:21:11 422

原创 ubuntu下安装mysql方法

ubuntu下安装mysql方法之前百度的方法都是censtOS总是出现一些错误,其实有比较简单的安装方法。 首先在 mint和Ubuntu下需要安装依赖库:sudo apt-get install libaio1 安装 mysqlsudo apt-get install mysql-serversudo apt-get install mysql-clientsudo apt-get in

2017-09-05 12:21:29 491

转载 浅析C语言的非局部跳转:setjmp和longjmp

转自:http://www.cnblogs.com/lienhua34/archive/2012/04/22/2464859.htmlC语言中有一个goto语句,其可以结合标号实现函数内部的任意跳转(通常情况下,很多人都建议不要使用goto语句,因为采用goto语句后,代码维护工作量加大)。另外,C语言标准中还提供一种非局部跳转“no-local goto”,其通过标准库C标准库 < setjmp.

2017-09-02 16:32:43 241

转载 欢迎使用Markdown编辑器写博客

欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦:Markdown和扩展Markdown简洁的语法代码块高亮图片链接和图片上传LaTex数学公式UML序列图和流程图离线写博客导入导出Markdown文件丰富的快捷键快捷键加粗 Ctrl + B 斜体 Ctrl + I 引用 Ctrl

2017-09-02 16:20:10 223

转载 linux网络编程中INADDR_ANY的含义

转自:http://blog.csdn.net/scottly1/article/details/24416007INADDR_ANY选项 网络编程中常用到bind函数,需要绑定IP地址,这时可以设置INADDR_ANY INADDR_ANY就是指定地址为0.0.0.0的地址,这个地址事实上表示不确定地址,或“所有地址”、“任意地址”。也就是表示本机的所有IP,因为有

2017-08-24 10:03:20 256

原创 采用eclipse+cygwin生成的.exe文件点击一闪而过的问题

出现这个问题很奇怪,因为eclipse上点击执行按钮,程序是可以跑起来的,而点击Debug目录下的.exe文件却不行,然后开始注释代码逐一排查,返现是读取配置文件的路径问题,这里我写成了linux下的路径,所以cygwin是可以识别,因此eclipse可以跑起来。生成的.exe读取还是以windows路径,所以读取不到路径,故一闪而过。

2017-08-22 09:42:51 799

原创 一种采用指针的指针的方式的建立链表的方法

最近在看posix多线程程序设计,第四章中流水线的例子中,建立链表的方法比较独特,之前没看到过,还是自己代码写得少。例子如下代码int pipe_index;stage_t **link = &pipe->head, *new_stage, *stage;int status; status = pthread_mutex_init (&pipe->mutex, NULL);

2017-08-21 22:08:13 325

原创 将整型ip转为点分十进制

通过将ip地址以整型16进制打出来,可以得到一些信息,比如192.168.251.10为C0A8FB0A,它的Uint32是-1062667510;可以采用移位等方式将整型ip转换为点分十进制字串具体实现程序如下:/* * main.cpp * * Created on: 2017年8月21日 * Author: */#include #include #i

2017-08-21 10:32:01 5005

原创 C++中std::stringstream类型对象如何清除

由于需要循环向流中写入数据,以此来拼成一个需要的字串,且需要多次使用。在这里的需求下,自己想当然的以为是该类中也有clear()的成员函数,结果发现,并不行,也无法清除其中的已经存的数据,造成了字串拼接过多的错误,解决方法如下:1、是在使用的地方定义一个作用域比较短的局部变量,拼接完了,然后发送给客户端,然后系统自动释放其内存,下次使用再定义;2、可以定义一个作用域较大区域,或者定

2017-08-19 20:52:19 849

原创 条件变量虚假唤醒

Linux中帮助中提到的:在多核处理器下,pthread_cond_signal可能会激活多于一个线程(阻塞在条件变量上的线程)。 On a multi-processor, it may be impossible for an implementation of pthread_cond_signal() to avoid the unblocking of more than one t

2017-08-19 12:02:26 522

原创 linux下使用udpsocket时遇到的问题

linux下udpsocket的使用关于数据报socket的使用,很多博客都有,由于事先已知了客户端的ip字串,不想服务端使用通过recvfrom时保存下来的struct sockaddr_in*类型ip,想通过之前ip字串来让服务器给客户端发送数据,发现出现了,仔细研究后发现是发送数据给客户端时,使用了之前的服务器绑定的端口,这是不对的,客户端的端口是系统随机分配的,必须要使用之前获取客户端

2017-08-17 23:41:42 1205

原创 将C++的std::string类型变量赋值给char类型数组

解决方法如下: char buf[2048];std::string sendMsg;strcpy(buf,sendMsg.c_str());

2017-08-14 16:43:48 15311

原创 利用jsoncpp接口来实现json字串的序列化与反序列化的C++封装类

利用jsoncpp接口来实现json字串的序列化与反序列化的C++封装类最近在使用jsoncpp的库,json的概念就不多说了,这里主要是解决利用jsoncpp库提供的接口来实现满足较多类型的的json字串序列化和反序列化的封装类,通过学习之前的文章,其地址如下http://blog.csdn.net/tragicguy/article/details/9150569http://

2017-08-13 15:10:14 4225 4

原创 将十进制ip地址转化为字符串点分十进制ip地址

将十进制ip地址转化为字符串点分十进制ip地址在使用linux下udp的socket时,发现服务端不需要连接客户端,并且 ,每次接收数据时,都需要预先定义一个变量来保存发送数据端(客户端)ip地址,其中系统调用里面的ip地址是一个入参:#include ssize_t recvfrom(int sockfd, void *buff, size_t lenght, int flags,

2017-08-11 22:49:48 4889

Git基础课程.pdf

Git的入门教程,可以学下,由浅入深的学习资料,很好的资料

2019-08-04

OCP effects in Optimality Theory.pdf

OCP Effects in Optimality Theory,Scott Myers的经典书籍

2019-08-04

空空如也

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

TA关注的人

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