自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

现从事游戏开发领域 | 团队项目be_with开发进行中 web方向感兴趣者私 ——We can do all things.

【工科交流社区】,现有成员来自斯坦福/北大/东大/浙大/nus/西交etc。 有意加入者私

  • 博客(54)
  • 问答 (5)
  • 收藏
  • 关注

原创 C++学习---继承(is-a)与组合(has-a)

写在前面:C++程序开发中,设计孤立的类比较容易,设计相互关联的类却比较难,这其中会涉及到两个概念,一个是继承(Inheritance),一个是组合(Composition)。因为二者有一定的相似性,往往令程序员混淆不清。类的组合和继承一样,是软件重用的重要方式。组合和继承都是有效地利用已有类的资源。但二者的概念和用法不同。继承若在逻辑上B 是一种A (is a kind of),则允许B ...

2019-01-19 21:55:19 2013

原创 C++学习---菱形继承问题详解

写在前面:何为菱形继承?B和C从A中继承,而D多重继承于B,C。那就意味着D中会有A中的两个拷贝。因为成员函数不体现在类的内存大小上,所以实际上可以看到的情况是D的内存分布中含有2组A的成员变量。菱形继承存在的问题:class A{public: A():a(1){}; void printA(){cout<<a<<endl;} int

2019-01-19 21:33:12 3511 2

原创 多路转接之---实现select版本的简单TCP服务器

2、select函数原型该函数准许进程指示内核等待多个事件中的任何一个发送,并只在有一个或多个事件发生或经历一段指定的时间后才唤醒。函数原型如下:#include <sys/select.h>#include <sys/time.h>int select(int maxfdp1,fd_set *readset,fd_set *writeset,fd_set *ex...

2019-01-18 21:12:40 271

原创 套接字编程---accept()相关详解

先看一下accept的使用: int new_sockfd; struct sockaddr_in cli_addr; len = sizeof(struct sockaddr_in); //int accept(int sockfd, struct sockaddr *addr, // socklen...

2019-01-18 20:52:51 954

原创 带你区分---return()和exit()和_exit()

写在前面:有段时间浏览别人的程序的时候,发现有的地方会用return()退出,有的地方却用exit()/exit()退出,心里对两者的区分也是模棱两可。所以今天就将这两个家伙拎出来看一看(~ ̄▽ ̄)~(~ ̄▽ ̄)~return()return 表示把程序流程从被调函数转向主调函数并把表达式的值带回主调函数,实现函数值的返回,返回时可附带一个返回值,由return后面的参数指定。return...

2019-01-18 19:48:22 2874 1

转载 errno --详解

写在前面:当linux中的 api函数发生异常时,一般会将errno变量(需include errno.h)赋一个整数值,不同的值表示不同的含义,可以通过查看该值推测出错的原因,在实际编程中用这一招解决了不少原本看来莫名其妙的问题。但是errno是一个数字,代表的具体含义还要到errno.h中去阅读宏定义,而每次查阅是一件很繁琐的事情。有下面几种方法可以方便的得到错误信息(1)void per...

2019-01-18 19:31:58 20387

原创 AI---人工智能学习

写在前面:人工智能主要研究如何让机器像人一样能够感知、获取知识、储存知识、推理思考、学习、行动等能力,并最终创建拟人、类人、或超越人的智能系统。1.涉及领域2.学习方法3.发展前景涉及领域人工智能是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学,是计算机科学的一个分支,其研究的主要内容包括深度学习、自然语言处理、计算机视觉、智能机器人、自动程序设...

2019-01-17 23:32:15 1749

转载 套接字编程---套接字描述符背后的秘密

1.套接字概念回顾(1)套接字是一个标识符;(2)套接字是一个结构;(3)套接字是一个包含标识、数据和操作的复合体,是服务访问点。我们已经知道,一个套接字描述符s实际上是一个整形数据,在winsock.h头文件中,SOCKET是这样被定义的:1.typedef unsigned int u_int;2.typedef u_int SOCKET;但是,我们不得不提出一个问题,简简单单...

2019-01-17 20:44:56 1524

原创 Linux--- 简单实现 MyCopy

直接上代码:include <stdio.h>#include <stdlib.h>#include <string.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <errno.h>#define B

2019-01-17 00:20:05 1078

原创 C/C++中的 void 和 void*

写在前面:开门见山,大家看下面这个例子: unsigned char err; unsigned char f; unsigned char a(unsigned char i, void *j){ if(j==(void*)0) return 0; *(unsigned char*)j=1; return 1;}void * 就是无类型指针类型,j仅仅...

2019-01-16 23:43:50 4732 1

原创 c++学习之---文件读写的新写法

写在前面:在看C++编程思想中,每个练习基本都是使用ofstream,ifstream,fstream,以前粗略知道其用法和含义,在看了几位大牛的博文后,进行整理和总结:#include <fstream> ofstream //文件写操作 内存写入存储设备 ifstream //文件读操作,存储设备读区到内存中 fstream ...

2019-01-16 22:47:38 242

原创 汇总:Linux下文件操作接口

写在前面:文件描述符:对于内核而言,所有打开的文件都通过文件描述符引用。文件描述符是一个非负整数。当打开一个现有文件或创建一个新文件时,内核向进程返回一个文件描述符。当读或写一个文件时,使用open或creat返回的文件描述符标识该文件,将其作为参数传递给read或write。 按照惯例,UNIX系统shell使用文件描述符0与进程的标准输入相关联,文件描述符1与标准输出相关联,文件描述符2与...

2019-01-16 21:46:45 2504

原创 汇总:C语言文件操作接口实例解析

写在前面计算机文件是以计算机硬盘为载体存储在计算机上的信息集合,是存储在某种长期储存设备上的一段数据流。在C语言中用一个指针变量指向一个文件,这个指针称为文件指针。通过文件指针就可对它所指的文件进行各种操作,C语言规定该文件指针类型为FILE型。FILE文件指针结构体定义:typedef struct{ short level; // 缓冲区“满”或“空”的程...

2019-01-16 20:43:40 3055

原创 Linux下多个进程可以同时打开同一个文件吗?文件描述符与打开文件的关系?

一:结论1.两个进程中分别产生生成两个独立的fd2.两个进程可以任意对文件进行读写操作,操作系统并不保证写的原子性3.进程可以通过系统调用对文件加锁,从而实现对文件内容的保护4.任何一个进程删除该文件时,另外一个进程不会立即出现读写失败5.两个进程可以分别读取文件的不同部分而不会相互影响6.一个进程对文件长度和内容的修改另外一个进程可以立即感知二:文件描述符与打开文件的关系?内核...

2019-01-15 13:03:23 10632

原创 Linux--深度认识"fork"函数

写在前面看似功能很简单的fork()函数,乱七八糟的东西实则有一大堆。这几天为了真正搞懂它的原理真的是让人几乎崩溃… ̄□ ̄|| 所以在这里做以总结。举个例子:#include <unistd.h> #include <stdio.h>

2019-01-15 12:38:34 333

原创 c++学习之---友元

写在前面:1.为什么要用友元及其缺点2.友元函数3.友元类一、为什么要用友元和其缺点?—采用类的机制后实现了数据的隐藏与封装,类的数据成员一般定义为私有成员,成员函数一般定义为公有的,依此提供类与外界间的通信接口。有时候,其他类或者函数要访问该类的非公有成员,可以令其他类或者函数成为它的友元(friend)来实现。这样做提高了程序的运行效率,但同时也坏了类的封装性和隐藏性,使得非成员函...

2019-01-14 12:01:01 454

原创 计算机网络---Cookies和session 详解

一、cookie:在网站中,http请求是无状态的。也就是说即使第一次和服务器连接后并且登录成功后,第二次请求服务器依然不能知道当前请求是哪个用户。cookie的出现就是为了解决这个问题,第一次登录后服务器返回一些数据(cookie)给浏览器,然后浏览器保存在本地,当该用户发送第二次请求的时候,就会自动的把上次请求存储的cookie数据自动的携带给服务器,服务器通过浏览器携带的数据就能判断当前...

2019-01-14 11:44:42 820

原创 http---深度了解GET和POST方法的区别

写在前面:GET和POST是HTTP请求的两种基本方法,要说它们的区别,接触过WEB开发的人都能说出一二。最直观的区别就是GET把参数包含在URL中,POST通过request body传递参数。你可能自己写过无数个GET和POST请求,或者已经看过很多权威网站总结出的他们的区别,你非常清楚知道什么时候该用什么。当你在面试中被问到这个问题,你的内心充满了自信和喜悦。你轻轻松松的给出了一个...

2019-01-14 11:23:04 1877

原创 应用层协议---HTTP协议简单认识

写在前面OS七层参考模型:物理层链路层网络层传输层会话层表示层应用层TCP/IP五层参考模型:物理:光电信号的传输,以太网协议,集电器链路:相邻设备之间的数据帧传输,以太网协议,交换机网络 :地址管理和路由选择传输 :端与端之间的数据传输,TCP/UDP应用:应用程序的沟通;http/ftp/ssh本文以TCP/IP五层参考模型为基础,介绍相关层的知名协议:应用层...

2019-01-14 11:15:35 7790 1

原创 计算机网络---TCP序列号和确认号

写在前面:在网络分析中,读懂TCP序列号和确认号在的变化趋势,可以帮助我们 学习TCP协议以及排查通讯故障,如通过查看序列号和确认号可以确定数据传输是否乱序。1. 序列号和确认号的简介及作用TCP 协议工作在OSI的传输层,是一种可靠的面向连接的数据流协议,TCP之所以可靠,是因为它保证了传送数据包的顺序。顺序是用一个序列号来保证的。响应包 内也包括一个序列号,表示接收方准备好这个序列号...

2019-01-14 10:54:55 4913

原创 计算机网络---UDP和TCP详解

写在前面本文主要是分析了TCP/IP五层模型中的传输层的关键协议—UDP和TCP。在网络的学习中,也比较重要。1.TCPTCP协议格式TCP连接管理机制(三次握手和四次挥手;;SYN泛洪攻击;TIME-WAIT时间)TCP相关机制2.UDPUDP协议格式UDP特点UDP注意事项基于UDP的应用层协议3.TCP和UDP的区分点:粘包问题TCP分段与IP分片面向字节流和...

2019-01-14 10:34:36 11938

原创 C语言:带你区分strcpy和memcpy

strcpystrcpy是一种C语言的标准库函数,strcpy把含有’\0’结束符的字符串复制到另一个地址空间,返回值的类型为char*.strcpy的实现代码char * strcpy(char * strDest,const char * strSrc) {if ((NULL==strDest) || (NULL==strSrc)) //[1]throw "Invalid ...

2019-01-13 00:24:38 293

原创 C++拷贝方式学习---浅拷贝,深拷贝,写时拷贝

写在前面大家先看下边这几行代码:int main(){ int *p1=new int[10]; int *p2=p1; delete []p1; delete []p2;}运行程序,我们发现程序无法运行。通过查看内存,我们发现两个指针指向同一块内存空间。这就是我们所说的浅拷贝。浅拷贝:也称位拷贝,编译器只是直接将指针的值拷贝过来,结果多个对象共用同...

2019-01-12 23:45:33 2305

原创 c++学习---“类型萃取”

写在前面c++类型萃取一般用于模板中,当我们定义一个模板函数后,需要知道模板类型形参并加以运用时就可以用类型萃取。比如我们需要在函数中进行拷贝,通常我们可以用内置函数memcpy或者自己写一个for循环来进行拷贝。template<class T>void copy(T*src, T*des,int size){ if(typetrait<T>::is_po...

2019-01-12 23:05:07 406

原创 C++学习之“智能指针”

智能指针【本节目标】1.为什么需要智能指针2.智能指针的使用及原理3.各种版本的智能指针了解及实现auto_ptr: c++ 98 管理权转移 公司严格禁止使用它unique_ptr: c++11 简单粗暴的防拷贝scoped_ptr: boost库 防拷贝 推荐使用shared_ptr: c++11 共享、引用计数 推荐 (重点)weak_ptr: c++11 解...

2019-01-12 14:29:08 2722

原创 C++学习之 “异常”

写在前面1.C语言传统的处理错误的方式2.C++异常概念3.异常的用法4.异常的优缺点1.C语言传统的处理错误的方式传统的错误处理机制:终止程序,如assert,缺陷:用户难以接受。如发生内存错误,除0错误时就会终止程序。返回错误码,缺陷:需要程序员自己去查找对应的错误。如系统的很多库的接口函数都是通过把错误码放到errno中,表示错误C 标准库中setjmp和longjmp...

2019-01-12 14:04:42 521

原创 5分钟带你了解“子网掩码”

https://baijiahao.baidu.com/s?id=1606474671793061553&wfr=spider&for=pc

2019-01-06 21:49:20 818

原创 30S了解DNS解析流程

https://baijiahao.baidu.com/s?id=1611569241041462703&wfr=spider&for=pc

2019-01-06 21:47:43 243

原创 C/C++二维数组的相关总结(扩展:三维数组)

写在前面:今天为什么要把“二维数组”这个概念重新拎出来说一说呢。原因是这样的:前几天在用c++写银行家算法的时候,resource类的成员变量有二维数组,开始写的是默认初始化的方式,类似于这种:class A{ ... privated: arr[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};}结果报错。所以就想重新写个成员函数用来初始化二维...

2019-01-06 15:42:26 2865

原创 Linux:动静态库的详解及生成

写在前面:什么是“库” ?语言编程时,通常要建立一些用户函数。如果这些函数具有通用性,一般的方法是将它们作成头文件,当需要时用“#include”命令将其包含到源程序之中,以提高编程效率。但在特定的程序中一般仅使用这些函数的一部分,若用上述方法包含所有函数,编译器在编译的时候会把所有包含进的函数都进行编译,这无疑会使源程序变得庞大而难于理解,并会影响执行效率。建立用户目标模块库(lib文件)可...

2019-01-06 14:14:09 291

原创 C++:如何只在堆/栈上创建类的对象

1.只能在堆上创建对象构造函数私有化将类的构造函数私有,拷贝构造声明成私有。防止别人调用拷贝在栈上生成对象。提供一个静态的成员函数,在该静态成员函数中完成堆对象的创建。class heap_only{ static heap_only* get_instance() { return new heap_only; } priivate: //c...

2019-01-06 13:54:41 1419 1

原创 C++:类的静态成员变量及静态成员函数

写在前面:        对象与对象之间的成员变量是相互独立的。要想共用数据,则需要使用静态成员和静态方法 只要在类中声明静态成员变量,即使不定义对象,也可以为静态成员变量分配空间,进而可以使用静态成员变量。(因为静态成员变量在对象

2019-01-05 01:08:25 2531

原创 C++内嵌类

内嵌类有两种类型:内联(inner)类和静态内嵌(static nested)类。1.内联类:内联类可以访问定义在外围类(enclosing class)中的实例变量。静态内嵌类不可以。看下面这段代码:#include <iostream>#include <mutex>#include <thread>u

2019-01-05 00:09:50 5189 1

原创 递归和“尾递归”的那点事

·递归递归,就是在运行的过程中调用自己。1,.构成递归需具备的条件:子问题须与原始问题为同样的事,且更为简单;不能无限制地调用本身,须有个出口,化简为非递归状况处理。在数学和计算机科学中,递归指由一种(或多种)简单的基本情况定义的一类对象或方法,并规定其他所有情况都能被还原为其基本情况。2.工作原理:栈又称堆栈,存放程序的局部变量(不包括静态局部变量,static变量存在静态区)...

2019-01-04 16:06:53 286

原创 C语言---"栈帧"总结

写在前面:栈帧也叫过程活动记录,是编译器用来实现过程/函数调用的一种数据结构。从逻辑上讲,栈帧就是一个函数执行的环境:函数参数、函数的局部变量、函数执行完后返回到哪里等等。大概翻了翻,网上对于“栈帧”这块的知识总结也都大同小异,根据程序调试的汇编代码一步步分析,看的人脑袋疼。所以在这里我简明扼要。在之前的“内存管理”中,我们分享了C语言的内存分布,认识了“堆栈”。堆栈中一般保存局部变量...

2019-01-04 15:41:02 521

原创 算法篇——斐波那契数列第N项的多种解决方式:递归,非递归,尾递归

1 2 递归算法的时间复杂度:递归的总次数*每次递归的数量。 3 4 递归算法的空间复杂度:递归的深度*每次递归创建变量的个数。 5 6 //fib的三种实现方式 7 8 9 #include<stdio.h> 10 11 //递归的方式 12 int fib_1(int n) 13 { 14 if (n&l...

2019-01-04 15:06:02 3256

原创 算法篇——银行家算法

#include "string.h"#include "iostream"using namespace std;#define FALSE 0#define TRUE 1#define W 10#define R 20//声明全局变量int M ; //总进程数int N ; //资源种类int ALL_RESOURCE[3] ;//各种资源的数目总和int MAX[...

2019-01-04 13:53:32 1333 1

原创 VS2013 百度云资源以及密钥

https://pan.baidu.com/s/1eu3XycWO8fWItmkFeYNv9w提取码:dy9r密钥:BWG7X-J98B3-W34RT-33B3R-JVYW9

2019-01-04 01:19:18 15423 1

原创 Linux虚拟机安装教程-Centos 6.5 百度云资源

链接:https://pan.baidu.com/share/init?surl=o8FTpRc 密码:bwme

2019-01-04 00:57:56 1729

原创 数据结构---单链表(不带头结点)的相关操作

链表节点定义:typedef struct SListNode{ int data ; struct SListNode* next ;}SListNode ;封装了一个指向链表节点指针的结构体,通过这个结构体变量进行单链表的调用。typedef struct SList{ struct SListNode* first ;}SList ;代码如下://SList.h...

2019-01-04 00:34:52 3044 2

空空如也

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

TA关注的人

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