suyinfan的博客

默默地码

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

单例模式中的double-check 单例模式一般有两种模式:饿汉模式和懒汉模式 1.饿汉模式:程序启动的时候,由主线程创建一个对象实例。 2.懒汉模式: 程序启动的时候,不创建对象(NULL),如果有两个线程先后执行if(NULL == ms_Singleton)获取对象,那么将创建两份实例。...

2019-04-13 10:21:08

阅读数 30

评论数 0

设计模式-组合模式

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

2019-04-11 22:01:02

阅读数 28

评论数 0

设计模式-外观模式

外观模式定义UML类图结果图最少知识原则:优点缺点 定义 外观模式提供了一个统一的接口,用来访问子系统种的一群接口。外观定义了一个高层接口,让子系统更容易使用。 有时候我们创建一个接口简化而统一的类,用来包装子系统种的一个或多个复杂的类。它允许我们让客户和子系统之间避免紧耦合。 UML类图 上...

2019-03-23 19:09:00

阅读数 39

评论数 0

设计模式-适配器模式

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

2019-03-21 22:41:35

阅读数 34

评论数 0

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

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

2018-09-17 18:40:56

阅读数 1202

评论数 0

Dijkstra算法

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

2018-07-10 00:01:31

阅读数 72

评论数 0

设计模式-Builder模式

定义 建造模式标准定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示 解释 Builder模式属于创建性模式,它就是将产品的内部表象和产品的生成过程开来,从而使一个建造过程生成具有不同的内部表象的产品对象。建造模式使得产品内部表象可以独立的变化,客户不必知道产品内...

2018-07-08 21:38:02

阅读数 70

评论数 0

18年7月5日

1、linux下查看可执行文件大小的命令 ls -lh 文件名 du -h 文件名 需要记下的一个数据,可以后面用到 435M ScenesServer 254M SessionServer 2、继承的优缺点 优点 1、新的实现很容易,因为大部分是继承而来的 2、很容易修改和扩...

2018-07-07 10:50:15

阅读数 87

评论数 0

关于pragma pack,__attribute__(packed)

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

2018-06-29 15:47:01

阅读数 115

评论数 0

C++进程虚拟内存模型

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

2018-06-16 23:59:01

阅读数 581

评论数 0

网易游戏开发面试题

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

2018-06-16 13:17:08

阅读数 3015

评论数 0

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

一、简单递归的实现 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

阅读数 280

评论数 0

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

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

2018-06-09 23:22:03

阅读数 91

评论数 0

C++ 虚函数表 存在哪

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

2018-06-09 17:28:00

阅读数 122

评论数 0

环形无锁队列

先贴代码,后面再分析 #include <iostream&amp...

2018-05-11 01:26:06

阅读数 422

评论数 0

IO多路复用之select函数详解

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

2018-05-04 22:57:54

阅读数 106

评论数 0

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

void * memcpy(void * destination, const void * source, size_t num); 当源字节串和目标字节串重叠是,bcopy能够正确处理,但是memcpy的操作结果不得而知,这种情况必须改用ANSI C的memmove函数[网络编程]。故该函数...

2018-05-01 22:18:24

阅读数 852

评论数 0

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

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

2018-04-30 23:12:01

阅读数 804

评论数 0

僵尸进程与孤儿进程

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

2018-04-06 14:00:02

阅读数 47

评论数 0

c++继承和组合的区别

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

2018-03-22 22:00:39

阅读数 65

评论数 0

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