8 suyinfan

尚未进行身份认证

虽然技术还很差,但始终怀揣着梦想

等级
博文 62
排名 7w+

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

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

2019-04-13 10:21:08

设计模式-组合模式

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

2019-04-11 22:01:02

设计模式-外观模式

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

2019-03-23 19:09:00

设计模式-适配器模式

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

2019-03-21 22:41:35

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

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

2018-09-17 18:40:56

Dijkstra算法

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

2018-07-10 00:01:31

设计模式-Builder模式

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

2018-07-08 21:38:02

18年7月5日

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

2018-07-07 10:50:15

关于pragma pack,__attribute__(packed)

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

2018-06-29 15:47:01

C++进程虚拟内存模型

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

2018-06-16 23:59:01

网易游戏开发面试题

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

2018-06-16 13:17:08

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

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

2018-06-10 11:57:22

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

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

2018-06-09 23:22:03

C++ 虚函数表 存在哪

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

2018-06-09 17:28:00

环形无锁队列

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

2018-05-11 01:26:06

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

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

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

2018-05-01 22:18:24

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

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

2018-04-30 23:12:01

僵尸进程与孤儿进程

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

2018-04-06 14:00:02

c++继承和组合的区别

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

2018-03-22 22:00:39
奖章
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!