自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(57)
  • 收藏
  • 关注

原创 14 -包和文件的关系

08 - 程序结构中初步的介绍了 go 语言和包的结构, 接下来我们将会更加详细的介绍包和文件之间的恩爱情仇一、包GO 语言当中的包和其他语言的库或者模块很类似,都是为了支持模块化、封装、单独编译和代码重用。package的使用原则:一个包的源代码在一个或者多个以 .go 为后缀名的源文件当中. 例如 包 gopl/ch2/tempconv对应的路径就是 $GOPATH/src/gop...

2019-01-15 20:08:00 501

原创 13 - 赋值与类型

我通常理解的最简单的表达式赋值,可以理解为 “x = 1”,但是在 C++ 当中我们还有左值引用和右值引用,但是在 go 语言当中,我们出了有普通赋值之外,还有多元赋值等。一、赋值x = 1 // 命名变量赋值*p = true // 通过指针间接赋值person.name = "bob" // 结构体字段赋值count[x] = count[x] * scale // 数组、...

2019-01-15 17:29:27 559

原创 12 - 变量的生命周期和变量逃逸

在 C/C++ 中我们每一个 "{ }"范围内,我们称之为一个作用域,在该作用域的范围内声明的变量仅仅只能在该范围有效,这就是变量的一个生命周期,而声明在全局的变量,那么其生命周期将会持续到整个程序的结束,但 go 语言中的局部变量和包一级别的变量也是如此,但是在 go 中会存在局部变量的逃逸当前作用范围。一、变量的声明周期变量的生命周期指的是在程序运行期间变量有效存在的时间间隔。对于在包一...

2019-01-14 16:26:54 1181

原创 11 - new() 和 make() 的恩爱情仇

在 go 语言当中有两个用于内存分配的内建函数 new() 和 make() 。但是对于初学者而言, 它们之间的区别容易让人模糊。 简单总结之间的区别就一句话,new 只分配内存, make 用于 slice,map,和channel 的初始化。一、new1. 理解 new在 C++ 当中 new 一片内存,将会调用构造函数进行初始化,但是在 go 中 new 一片内存只是将其设置为零值,...

2019-01-14 15:28:40 269

原创 10 - 指针和参数解析

在 C/C++ 当中可以通过指针申请堆栈空间,指向某个变量空间,可以说不会指针,就不会 C/C++, 然而在 go 中也用指针的用法,其和 C/C++ 类型一、指针1. 指针变量在 go 中, 一个变量对应了类型值的内存空间。一个指针的值是另一个变量的空间内存地址,那么通过指针,我们可以在不需要知道该变量的名字的情况下直接读或更新对应变量的值。如下:x := 1p := &x ...

2019-01-13 19:20:06 268 1

原创 08 - 程序结构

从第8节开始的接下来几章节,将会对 go 的程序结构方面的知识进行详解程序结构在 go 语言的运行程序当中,少不了类似于 C/C++ 的 main 函数的入口; 而在 go 语言当中,其程序运行的起来为 main 包, 而 main 函数是不可缺少的一部分:以下是一个完整的 go 程序结构分析如下:package main // 声明的 main 包, 它指明了当前 xx.go 文件属于某...

2019-01-13 15:49:38 185

原创 09 - 命名和声明

2019-01-13 15:08:56 237

原创 07 - 获取URL, 并发 goroutine和channel

Go 语言最大的特征之一,就是对并发编程的支持,接下来我们将简单理解一下并发一、goroutine 获取URL06 - 获取URL 中简单地获取了 http 的信息,接下来我们将会同时去获取所有的 URL ,所以这个程序的总执行时间不会超过执行时间最长的那一个任务,前面的 urlfetch 程序执行时间则是所有任务执行时间之和。 urlfetchall 程序只会打印获取的内容大小和经过的...

2019-01-11 16:51:09 301

原创 06 - 获取URL

Go 语言在 net 这个强大 package 的帮助下提供了一系列的 package 来做这件事情,使用这些包可以更简单地用网络收发信息,还可以建立更底层的网络连接,编写服务器程序。一、获取URL来源于 Linux 的 curl 命令的灵感,通过下面程序 urlfetch 将会获取对应的 url, 并且将其原文本打印出来相关源代码如下://Fetch prints the content...

2019-01-06 19:21:14 274

原创 05 - 查找重复行3 深一步了解go

前2节已经对 dup 做了深一步的解析, dup1 和 dup2都是以数据流的形式输入。理论上可以处理任意多行的输入数据,它是一步一步以数据流的方式读取数据。另外还可以一口气将数据全部读取到内存中,一次分割成多行,然后在处理一、 dup3运行路径:$GOPATH/src/gopl/ch1/dup/运行方式:go run dup3.go input.txtinput.txt里面的...

2019-01-05 20:03:09 264 3

原创 04 - 查找重复行2 深一步了解go

接上一节任务运行后续在上一节中 dup1 从标准输入当中获取数据,而在 dup2 当中我们读取标准输入或是使用os.Open打开各个具名文件,并操作它们。一、dup2运行路径:$GOPATH/src/gopl/ch1/dup运行方式$ go run dup2.go input.txt尝试了上述的运行方式,我们得到以下的运行结果 二、程序分析以下是程序从标准输入或者某个文件...

2019-01-05 16:13:38 231

原创 03 - 查找重复行1 深一步了解go

思路对文件做拷贝、打印、搜索、排序、统计或类似事情的程序都有一个差不多的程序结构:一个处理输入的循环,在每个元素上执行计算处理,在处理的同时或最后产生输出。接下来根据 Linux 的 uniq 命令,其寻找响铃的重复行,我们将会用 go 语言编写三个版本的 dup, 方便我们更加详细的详解 go 语言的结构例如:// 输入文件xiaomihelloworldxiaomihel...

2019-01-04 20:15:44 700 4

原创 02 - 理解项目结构中的包的文件

本片当中将带大家更加深一步了解go语言中的项目结构, 以及包和文件

2018-12-25 15:22:42 273

原创 01 - 欢迎来到go世界,Hello world

一、安装golang首先在学习狗语言之前,我要学会安装golang, 然后配置环境变量,仔细认真地学习golang的安装过程将会收获很多1. Yum安装CentOS: sudo yum install go2. 源代码安装go语言官网: https://golang.org/dl/在该网站中,找到对应的 Go 的安装包并且下载下来命令安装安装目录:/usr/local/...

2018-12-25 11:04:28 254

原创 vptr的初始化语义学

一、多继承下的调用研究根据上述的模型当中, 我们可以构建出其构造函数的调用顺序Point(x, y);Point3d(x, y, z);Vertex(x, y, z);Vertex3d(x, y, z);源代码:class Point{public: Point(float x = 0.0, float y = 0.0) :_x(x), _y(y){ size();

2017-10-26 15:47:22 420

原创 建造者模式

序言一个人如果活到了老死, 那么这个人的一生不定会经历这几个阶段:生、老、病、死。每个人的各个阶段都是不一样的, 没有两个人的一生的经历是一样的。 这个特例就是一个简单的建造者模式的叙述。   或许有的人还是不懂什么建造者模式, 那么请你继续向下面看看嘛建造者模式实际上是常用的设计模式。顾名思义,builder的意思是建造者或者建筑工人,谈到建造自然会想到楼房。楼房是千差万别的,楼

2017-10-09 15:16:02 399

原创 C++对象模型之 Copy Constructor的建构操作

2017-10-07 19:37:10 1146

原创 C++对象模型之Default Constructor的建构操作

序言:为了满足编译器的需要, 当类设计者没有显示的声明Default Constructor的时候, 编译器为满足编译程序的需要, 将会按照一定的规则自动生成Default Constructor。一、编译器自动合成Default Constructor的四种情况1、类的成员对象包含默认构造函数2、继承的基类有默认构造函数3、该类有虚函数, 需要初始化virtual funct

2017-10-07 19:36:35 1277

原创 工厂方法模式

前言:在上一篇文章当中, 我们对简单工厂模式进行了分析, 他的缺点就是当我们有新的产品类需要生产的时候, 我们将会改变工厂类中的业务逻辑, 那样会违反开闭原则, 具体详细分析请见简单工厂模式。如果用简单工厂模式, 去生产一系列的产品, 那么工厂类的业务逻辑将会更加繁重,产品类和工厂类之间的耦合度(可理解为工厂类与产品类之间的依赖程度)增加,将会严重的影响后期维护, 所以我们在这里又引入了一个新

2017-09-25 14:00:27 286

转载 虚函数与虚继承内存分析

虚函数与虚继承寻踪封装、继承、多态是面向对象语言的三大特性,熟悉C++的人对此应该不会有太多异议。C语言提供的struct,顶多算得上对数据的简单封装,而C++的引入把struct“升级”为class,使得面向对象的概念更加强大。继承机制解决了对象复用的问题,然而多重继承又会产生成员冲突的问题,虚继承在我看来更像是一种“不得已”的解决方案。多态让对象具有了运行时特性,并且它是软件设计复用的

2017-09-22 11:37:07 275

原创 简单工厂模式

一、简单工厂模式我的理解: 所谓工厂机器, 就是在厂长的指示的情况, 去生产能够为工厂创造利益的一些利益的产品, 在利益的驱使下, 工厂专门的高效地生产某一类型有利益的产品。那么同样我们在编写高效可维护代码的时候, 我们也可以通过照办工厂的生产模式去生产一系列高效可维护的代码。例如:以下是简单工厂模式的生活事例模型我的定义: 我们传递某个类型产品类的

2017-09-20 19:55:40 402

原创 Linux进程的共享文件

一、当我们运行一个进程的时候, 我们需要打开一个其他的文件, 但是那么问题就来了, 这个文件在二、三、

2017-09-18 19:09:06 652

原创 malloc函数和calloc函数的区别

一、内存分析(1)栈(stack):由编译器自动分配释放,存放函数的参数值、局部变量的值、返回地址等, 在可执行文件a.out中不存在分配栈区的空间。(2)堆(heap):一般有程序员自身调用(malloc,calloc函数)来分配空间, 通过free函数释放空间, 但可能会因为程序员的编程失误造成内存的泄漏,另外当程序结束的时候其动态申请的所有空间都将会由系统回收再利用。

2017-09-04 17:18:39 1966

原创 TCP的流量控制机制与滑动窗口

一、二、三、

2017-08-14 17:13:43 1879

原创 TCP之使用带外数据的客户/服务器

一、TCP带外数据* 带外数据, 我们有称之为经加速数据。通常其拥有比普通数据有更好的优先级。然而TCP没有真正的带外数据, 提供了我接下来讲解的紧急模式。如果我们调用send(sockfd, "a",1, MSG_OOB)函数,  TCP会吧这个数据放在缓冲区中的下一个可用位置, 并且将紧急指针移动到下一个可用位置。如果下图所示, 并且把带外数据标记为OOP从发送端的

2017-08-13 17:39:47 376

原创 TCP异常处理(accept返回前连接中止)与SO_LINGER选项

一、accept返回前终止分析问题一:因为accept是堵塞的, 并且等待来自客户端的连接, 但是, 如果在accept期间 , 如果因为系统调用中断了accept就会返回一个非致命的错误, 而此时有来自客户端进行TCP三路握手完成后, 而我们通过循环在此调用accept函数可以完成连接,。因为TCP的连接是在内核中完成的, 与accept函数的执行无关。问题二:如果我们在调用ac

2017-08-12 17:39:26 3143

原创 TCP连接异常分析与RST

2017-08-12 09:56:52 742

原创 TCP带外数据---紧急模式

2017-08-11 17:05:43 518

转载 多播地址基础

2017-08-10 16:32:58 8506

原创 广播中的信号引起的竞争状态

2017-08-10 13:18:03 282

原创 基于UDP的C/S多播回射服务器

2017-08-10 11:48:15 609 1

原创 信号驱动IO的UDP回射服务器

一、信号驱动IO的套接字*信号驱动IO进程执行步骤:1)、建立SIGIO的信号处理函数。2)、设置套接字的属主, 通常使用fcntl的F_SETOWN命令设置。3)、开启套接字的信号驱动IO, 通常使用fcntl的F_SETFL命令打开O_ASYNC标志完成。*UDP套接字的SIGIO信号的产生:1)、数据报到达套接字。2)、套接字上发生了异步错误(UDP已经连

2017-08-05 18:07:56 642

原创 基于UDP广播的回射服务器

2017-08-01 13:20:17 471

原创 多播套接字选项分析

一、IP_ADD_MEMBERSHIP、IPV6_JOIN_GROUP和MCAST_JOIN_GROUP二、IP_DROP_MEMBERSHIP、IPV6_LEAVE_GROUP和MCAST_LEAVE_GROUP三、IP_BLOCK_SOURCE和MCAST_BLOCK_SOURCE四、IP_UNBLOCK_SOURCE和MCAST_UNBLOCK_SOURC

2017-07-31 11:21:57 1864

原创 TCP非堵塞IO的connect连接处理模型

一、非堵塞connect版本当在非堵塞TCP套接字上, 我们调用connect函数会立刻返回EINPROGRESS, 不过此时TCP三路握手正在进行, 我们可以通过检查套接字的状态。*非堵塞connect有三个用途1)、我们可以把三路握手叠加到其他的处理上面。 因为在连接过程中花费1个RTT时间,在局域网或者广域网上的时间幅度偏差很大(几毫秒甚至几秒), 那么我们可以利用这些时

2017-07-29 14:52:33 411

原创 TCP四次挥手详解状态装换分析

一、TCP终止过程(四路挥手)1)、某个进程调用close函数,主动关闭。该端发送一个FIN分节,表示数据发送完毕。2)、接受到FIN分节的对端,被动关闭。3)、然后一段时间后。 对端也发送一个FIN分节4)、主动关闭端口,确定对端发送而来的FIN分节。如图所示。类似SYN一样, FIN分节也是占据1个字节的子序列空间。因此, 每个FIN的ACK确认号就是这个FIN的序

2017-07-28 19:10:52 486

原创 基于TCP的不同IO版本的时间性能分析

一、关于各种IO的执行情况分析涉及的IO类型:基本堵塞IO版本、select下堵塞IO版本、非堵塞IO版本、fork版本、线程化版本。服务器核心代码:dg_echo.c#include "unp.h"voidstr_echo(int sockfd){ ssize_t n; char buf[MAXLIN

2017-07-28 15:25:45 372

转载 在类的成员函数中调用delete this

在类的成员函数中能不能调用delete this?答案是肯定的,能调用,而且很多老一点的库都有这种代码。假设这个成员函数名字叫release,而delete this就在这个release方法中被调用,那么这个对象在调用release方法后,还能进行其他操作,如调用该对象的其他方法么?答案仍然是肯定 的,调用release之后还能调用其他的方法,但是有个前提:被调用的方法不涉及这个对象的数据成员和

2017-07-28 08:53:02 421

原创 fork条件下的套接字io模型分析

7

2017-07-27 16:13:25 497

原创 非堵塞IO的读与写的回射客户端对比分析

一、非堵塞读与写分析1、老版本1分析--- 基于tcp的堵塞io模型是read和write,结合起来处理的io模型,因为如果服务器没有数据过来,那么read将会一直堵塞下去。因为堵塞将会导致程序的效率不够高效。伪代码如下如实:while(fgets(buf, maxline,stdin) != NULL){ write(sockfd, buf, strlen(buf));

2017-07-27 11:43:56 494

空空如也

空空如也

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

TA关注的人

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