- 博客(68)
- 资源 (18)
- 收藏
- 关注
原创 INADDR_ANY的含义
在一些socket通信的服务器程序中我们会看到在服务器bind IP地址和端口号时,我们不是bind明确的IP地址(如222.20.79.150),而是使用INADDR_ANY,这会让我们产生一个疑问,就是如果服务器程序不使用明确的IP地址,那么客户端该如何连接服务器呢? 下面对这个问题进行解答。 INARRD_ANY是用于多网卡的机器上的,多网卡就会有多个IP地址...
2019-06-27 12:53:01
2691
原创 visual studio 2017配置jsoncpp
1.下载jsoncpp下载链接为:http://sourceforge.net/projects/jsoncpp/2.编译静态库(1)打开sln 下载好源码以后使用visual studio打开文件夹jsoncpp-src-0.5.0\makefiles\vs71下的jsoncpp.sln。这里我使用的是visual studio2017(2)生成静态库 ...
2019-02-24 09:39:36
5444
6
原创 Go语言学习笔记(补充)格式化输出
动 词 功 能 %v 按值的本来值输出 %+v 在 %v 基础上,对结构体字段名和值进行展开 %#v 输出 Go 语言语法格式的值 %T 输出 Go 语言语法格式的类型和值 %%...
2019-01-24 11:16:46
548
原创 Go语言学习笔记(十)Go语言编译与工具
Go语言的工具链非常丰富,从获取源码、编译、文档、测试、性能分析,到源码格式化、源码提示、重构工具应有尽有。1.go build Go语言中使用go build命令将源码编译为可执行文件。(1)go build无参数编译 在main包所在目录下使用go build命令进行编译,生成当前目录名的可执行文件。(2)go build + 文件列表 ...
2019-01-24 09:33:22
397
原创 Go语言学习笔记(九)并发
并发指在同一时间内可以执行多个任务。 Go语言通过编译器运行时(runtime),从语言上支持了并发的特性。Go语言的并发通过goroutine特性完成。goroutine类似于线程,但是可以根据需要创建多个goroutine并发工作。goroutine是由Go语言的运行时调度完成的,而线程是由操作系统调度完成。1.goroutine(轻量级线程) ...
2019-01-23 17:44:15
446
原创 Go语言学习笔记(八)包(package)
Go语言的源码服用建立在包(package)基础之上。Go语言的入口main()函数所在的包叫main,main包想要引用别的代码,必须同样以包的方式进行引用。 Go语言的包与文件夹一一对应,所有与包相关的操作,必须依赖于工作目录GOPATH。1.GOPATH(1)使用命令行查看GOPATH信息zk@ubuntu:~/Go$ echo $GOPATH...
2019-01-21 22:03:12
257
原创 Go语言学习笔记(七)接口
Go语言中的接口作用类似于C++中的虚函数机制,可以提供一个统一调用的方式。 接口是双方约定的一种合作协议。接口实现者不需要关心接口会被怎样使用,调用者也不需要关心接口的实现细节。接口是一种类型,也是一种抽象结构,不会暴露所包含数据的格式、类型及结构。1.接口的定义 每个接口类型由多个方法组成。type 接口类型名 interfac...
2019-01-21 17:32:41
353
原创 Go语言学习笔记(六)方法和接收器
C++是一种面向对象的编程语言,我们可以为类提供成员变量和成员方法。而在Go中没有类的概念,但是也提供了类似的机制来表示,那就是方法。 Go语言中的方法(method)是一种作用于特定类型变量的函数。这种特定类型变量叫做接收器(receiver)。如果将特定类型理解为结构体或类,那接收器的概念就类似于其他语言中的this或者self. 在Go语言中,接收...
2019-01-20 11:19:21
2604
原创 Go语言学习笔记(五)Go语言结构体
Go语言的关键字type可以将各种基本类型定义为自定义类型,基本类型包括整型、字符串、布尔等。结构体是一种复合的基本类型,通过type定义为自定义类型后,使结构体更便于使用。1.结构体定义格式type 类型名 struct { 字段1 字段1类型 字段2 字段2类型 ......}类型名:标识自定义结构体的名称,在同一个包内不能重复st...
2019-01-19 11:44:43
457
原创 Go语言学习笔记(四)Go语言函数
Go语言的函数声明以func标识,后面紧接着函数名、参数列表、返回参数列表以及函数体。1.普通函数的声明形式func 函数名(参数列表) (返回参数列表){ //函数体}注意:在同一个包内,函数名不能相同参数列表中如果多个参数类型相同,则可放在一起声明。如func test(a, b int) {}同时声明a, b为int类型函数可以同时返回多个值...
2019-01-18 09:55:55
340
原创 Go语言学习笔记(三)Go语言流程控制
1.if-else(分支结构)a).格式1if 表达式1 { 分支1} else if 表达式2 { 分支2} else{ 分支3}b).格式2if 语句1; 条件表达式 { //to do}注意:a).左花括号{必须跟在if/else后面,不能另起一行2.for(循环结构)for 初始语句;条件表达式;结束语句{ ...
2019-01-17 19:57:22
216
原创 Go语言学习笔记(二)Go语言容器(array、slice、map、list)
1.数组 数组(array)是一段固定长度的连续内存区域。在go语言中,数组从声明时就确定,使用时可以修改数组成员,但是数组大小不可变化。a).数组的声明var 数组名 [元素数量]T注:元素数量必须是整型数值且在编译期就确定T可以是任意基本类型,包括T为数组本身,此时可以实现多维数组b).数组的初始化方式1:var str [3]stringstr[0]...
2019-01-17 16:45:00
597
1
原创 Go语言学习笔记(一)Go语言变量的声明和初始化
由于我以前是学的C/C++语言,所以在博客中会将Go与C/C++进行对比来学习: Go语言作为C语言家族的新派代表,在C语言的定义方法和类型上做了优化和调整,更加灵活易学。今天首先从最简单的变量声明开始进行学习:1.三种声明方式 普通变量的声明有三种方式,第一种和第二种通过关键字var来声明变量,第三种则靠编译器进行推断,分别如下:var ...
2019-01-17 10:50:59
591
原创 linux常用快捷键总结(shell快捷键和vim快捷键)
1.Shell命令行快捷键ctrl + a: 跳到命令行首ctrl + e:跳到命令行尾ctrl + u: 删除光标至命令行首的内容ctrl + k: 删除光标至命令行尾的内容ctrl + l: 清屏ctrl + r: 检索历史命令ctrl + i: 相当于tab键,补全命令ctrl + s: 使终端静止,让快速输出的屏幕停下来ctrl + q: 退出ctrl+s引起的静止...
2018-12-02 17:46:29
3332
原创 使用软链接解决/home挂载目录磁盘不足问题
我们有时候会碰到这样的事,一个服务器同时有多个人在使用,我们每个人都有一个用户名和密码,通过用户名和密码登录上服务器以后就直接使用,但是大家忽略了一个问题,就是我们的家目录挂载在哪个目录下,以及我们所挂载的目录容量是否足够大,如果容量太小应该怎么办,今天就是来解决这个问题的。1.问题描述 如下图,/dev/sda6挂载在/home目录下,即我们普通用户家目录下的数据都存...
2018-11-22 23:17:53
6240
原创 Linux下目录与文件的权限意义
我们知道Linux系统内文件的是那种身份(所有者、用户组合其他人),每种身份都有三种权限(rwx)。我们可以通过chown、chgrp和chmod三个命令来修改这些权限和属性。下面来分别详细介绍一下这三种权限对文件或目录的意义。1.权限对文件的重要性r(read):可读取此文件的实际内容,如入度文本文件的文字内容等。 w(write):可以编辑、新增或者修改该文件的内容...
2018-11-06 23:47:04
403
原创 TCP三次握手和网络编程函数的对应关系
1.客户端调用connect()函数,此时客户端会向服务端发送SYN2.服务端收到SYN后,会从listen()函数返回SYN+ACK3.客户端收到connect()函数的返回,之后向服务端发送最后一个ACK4.服务端收到最后一个ACK以后,将该连接请求从未完成连接队列放入已完成连接队列中,等待accept()从该队列中取出...
2018-10-14 12:11:11
1295
原创 listen()函数的backlog参数含义详解
#include <sys/socket.h>int listen(int sockfd, int backlog);sockfd是调用socket()函数的返回值,不用多解释。这里主要说明backlog参数的含义: 为了理解其中的backlog参数,我们必须认识到内核为任何一个给定的监听套接字维护两个队列: (1)未完成连接队列,每个...
2018-10-14 12:03:48
2446
4
原创 编译期多态和运行期多态
运行期多态(runtime polymorphism),也称为显式多态,是指类中成员函数是virtual,类将对这些函数表现出运行期多态,也就是说将于运行期根据基类指针或者引用的动态类型决定究竟调用哪一个函数。 编译期多态(cmpile-time polymorphisms),也称为隐式多态,是指以不同的template参数具现化function templates ...
2018-09-20 22:27:36
1302
原创 C++ string的最常用的用法总结
1.string的构造方法string s(cp);string s(cp, n);string s(s1);string s(s1, pos2);string s(s1, pos2, len2);2.substr()s.substr(pos, n):返回一个string,包含s中从pos开始的n个字符的拷贝。pos的默认值为0,n的默认值为 ...
2018-09-18 15:26:17
732
原创 网络编程教程(八)信号和定时器
一、信号1.信号 API(1)发送信号#include <sys/types.h>#include <signal.h>int kill(pid_t pid, int sig);函数功能: 向进程ID为pid的进程发送信号sig函数参数: pid:进程编号 sig:信号值返回值: 函数成功时返回0,失败则返回-1,并设...
2018-07-27 19:49:57
1085
原创 网络编程教程(七)I/O复用
I/O复用是一种I/O通知机制,使得程序同时监听多个文件描述符,从而提高程序的性能。一、I/O复用的使用场景 1.客户端程序要同时处理多个socket 2.客户端程序同时处理用户输入和网络连接 3.TCP服务器要同时处理监控socket和连接socket 4.服务器要同时处理TCP请求和UDP请求 ...
2018-07-26 23:07:43
270
原创 网络编程教程(六)Linux服务器编程框架
一、服务器编程框架模块 单个服务器程序 服务器机群 I/O处理单元 处理客户连接,读写网络数据 作为接入服务器,实现负载均衡 逻辑单元 业务进程或线程 逻辑服务器 网络存储单元 本地数据库 、文件或缓存 数据库服务器 请求队列 各单元之间的通信方式 各服务器之间的永久TCP连接 I/O处理...
2018-07-25 23:02:07
3223
原创 网络编程教程(五)高级I/O函数
本篇博客讨论和网络编程相关的几个高级I/O函数,分为以下三类: 用于创建文件描述符的函数,包括pipe、dup/dup2函数。 用于读写数据的函数,包括readv/writev、sendfile、mmap/munmap、splice和tee函数。 用于控制I/O行为和属性的函数,包括fcntl函数。一、用于创建文件描述符的函...
2018-07-23 22:21:46
363
原创 网络编程教程(四)Linux网络编程基础API
首先介绍Linux下整个的网络编程流程:一、socket地址API1.主机字节序和网络字节序 字节序分为大端字节序(big endian)和小端字节序(little endian)。大端字节序是指一个整数的搞我字节存储在内存的低地址处,低位字节存储在内存的高地址处。小端字节序则是整数的高位字节存储在内存的高地址处,而低位字节则存储在内存的低地址处。...
2018-07-22 22:18:09
284
原创 网络编程教程(三)TCP协议详解
一、TCP服务的特点1.面向连接的 使用TCP协议通信的双方必须先建立连接,然后才能通信。这里就涉及到对连接的理解,或者说这个连接对应到socket编程中又是什么?在进行TCP通信时,通信双方都必须在内核中为该连接分配一定的内核资源,用于记录和维持该连接的状态、连接上的数据发送情况和定时器等。2.可靠的 TCP协议通过超时重传和应答确认机制来保证数据...
2018-07-20 11:42:00
756
原创 网络编程教程(二)IP协议详解
一、IP服务特点1.无状态 无状态是指IP通信双方不同步传输数据的状态信息,因此所有IP数据报的发送、传输和接收都是相互独立的。这种服务的缺点是无法处理重复、乱序的IP数据包,而优点就是快速和高效。2.无连接 无连接是指IP通信双方都不长久地维持对方的任何信息。因此,上层协议每次发送数据的时候,都必须明确指定对方的IP地址。3.不可靠 不可靠是指IP协议不...
2018-07-01 16:07:14
391
原创 网络编程教程(一)TCP/IP协议族概述
TCP/IP协议族理论上是七层模型,在实际应用中是四层,下面介绍每一层的作用。1.数据链路层 数据链路层实现了网卡接口的网络驱动层序,以处理数据在物理媒介(比如以太网、令牌环网)上的传输。不同的物理网络具有不同的电器特性,网络驱动程序隐藏了这些细节,为上层协议提供了一个统一的接口。 数据链路层两个常用的协议是ARP协议和RARP协议。2.网络层 ...
2018-07-01 13:16:29
325
原创 C++ STL中set、multiset、hash_set、hash_multiset,map、multimap、hash_map和hash_multimap之间的区别
1.set和multiset的区别set和multiset两者的底层结构都是RB-tree,两者唯一的区别是使用的insert()函数不同,set中不允许存在重复的元素,所以底层使用的插入元素函数为insert_unique();而multiset中运行存在重复元素,所以底层使用的插入元素函数为insert_equal().2.map和multimap的区别 同set和multise...
2018-06-21 10:48:03
666
原创 设置xampp中的apache服务自启动教程(详细图解)
1.打开XAMPP Control Panel,然后点击下图中的config2.在出现的Configuration of Control Panel框中选择要自动的服务,然后保存退出,如下图:在下一次重新开机时就会自启动这些服务了。...
2018-06-11 16:58:53
5947
原创 Linux写时拷贝实现原理
传统的fork系统调用直接把所有资源复制给新创建的进程,这种实现过于简单并且效率低下。 写时拷贝指的是两个任务可以同时自由读取内存,但任意一个任务试图对内存进行修改时,内存就会复制一份提供给修改方单独使用,以免影响到其他的任务使用。 Linux的fork()使用写时拷贝页实现。写时拷贝是一种可以推迟甚至免除拷贝数据的技术。内核此时并不复制整个进程地址空间...
2018-06-08 10:28:38
1807
原创 Git常用命令总结
最近在学习Git的常用命令,希望能提高日常的工作效率,下面进行一个总结。 首先说说什么是git,什么是github。git是一个分布式的版本控制系统,简单易用,它的命令有很多,但是常用的只有下面十几个;那什么又是github呢,嗯,它就是传说中的“全球最大的同性交友平台”,开玩笑哈,github就是一个远程项目托管服务器,而且是免费的;当然这个免费也是由代价的,如果你...
2018-06-05 22:53:01
211
原创 深入浅出系统调用的原理
这里不进行系统调用源码的分析,因为那个太费时间了,而且很难在很快的时间里能够理解。但是我相信你看完下面的文章,你对系统调用的实现原理肯定有一个很深的理解。一、系统调用的介绍1.什么是系统调用 系统调用就是应用程序与系统内核之间的接口。通过系统调用访问系统资源。2.为什么需要系统调用 由于系统有限的资源可能被多个不同的应用程序同时访问可因此,如果不加以保护...
2018-06-03 14:58:20
4264
原创 exit()和_exit()两个函数的区别
exit()和_exit()这两个函数都是用于函数退出,但这两者有一些细微的差别,在exit()函数里会调用_exit()函数。下面来看看exit()的函数代码大概:void exit(int status){ while(_exit_funcs != NULL) { ... _exit_funcs = _exit_funcs-&g...
2018-06-02 10:13:28
21024
3
原创 在linxu中经常发生段错误(segment fault)的原因
我们在linux上写代码,并运行程序时,经常会碰到程序执行到一半发生“segment fault”的错误,一头雾水,而且对这类问题的排查也是相当麻烦的一件事。而且我在面试的过程中也被面试官问到过这个问题,所以了解发生这个问题的原因对于在linux开发的技术人员来说是很有必要的。 引起这个错误的典型情况是对非法指针解引用。当指针指向一个不允许读或写的内存地址,而程序却试...
2018-05-25 17:55:40
3298
原创 TCP 为什么是三次握手,而不是两次或四次?
TCP是一个全双工的通信,三次握手完成两个重要的功能,一是协调双方双方做好发送数据的准备工作(双方都知道彼此已准备好),确保双方都知道对方的存在;二是协调好双方的初始序列号,这个序列号在握手过程中被发送和确认。 首先我们来解释为什么不是两次握手,而是三次握手。我们以打电话为例,在打电话的过程中,双方为了确认自己说的话能被对方听见,需要向对方进行确认。下图这种情况就类似...
2018-05-22 16:59:01
3536
1
原创 数据结构之查找(面试专用)
本篇博客主要用于对查找方面的数据结构做一个简单的介绍,能满足面试的时候问的问题深度即可,所以不会给出代码实现。一、静态查找表 静态查找表主要满足一下两点: a.查找某个“特定的”数据元素是否在查找表中; b.检索某个“特定的”数据元素的各种属性。方法特点时间复杂度顺序查找逐个比较,等概率比较O(n)二分查找前提是序列有序O(logn)次优查...
2018-05-22 16:29:35
891
原创 数据结构之二叉排序树(C语言实现)
一、基本概念1.二叉排序树 二叉排序树(Binary sort tree,BST),又称为二叉查找树,或者是一棵空树;或者是具有下列性质的二叉树:(1)若它的左子树不为空,则左子树上所有节点的值均小于它的根节点的值;(2)若它的右子树不为空,则右子树上所有节点的值均大于它的根节点的值;(3)它的左、右子树也分别为二叉...
2018-05-21 23:35:10
71980
33
原创 深入浅出静态链接和动态链接
作为一名C/C++程序员,对于编译链接的过程要了然于胸。首先大概介绍一下,编译分为3步,首先对源文件进行预处理,这个过程主要是处理一些#号定义的命令或语句(如宏、#include、预编译指令#ifdef等),生成*.i文件;然后进行编译,这个过程主要是进行词法分析、语法分析和语义分析等,生成*.s的汇编文件;最后进行汇编,这个过程比较简单,就是将对应的汇编指令翻译成机器指令,生成可...
2018-05-06 09:24:48
92445
37
图解HTTP+彩色版
2018-05-21
Java核心技术 卷1
2018-05-10
Head First设计模式
2018-05-10
Java并发编程的艺术
2018-05-10
深入理解Java虚拟机
2018-05-10
HTTP权威指南.
2018-05-04
MySQL核心内幕
2018-05-04
算法导论中文版(高清)
2018-05-04
图解TCP/IP
2018-05-04
从哲学层次上看操作系统
2018-05-04
操作系统精髓与设计原理第5版(高清版) pdf
2018-05-03
深入理解计算机系统(原书第2版).pdf
2018-05-03
Linux高性能服务器编程.pdf
2018-05-03
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人