- 博客(74)
- 资源 (15)
- 收藏
- 关注
原创 vim 可视化模式(visual模式)
为了便于选取文本,VIM 引入了可视(Visual)模式。 可以使用以下三种模式:用 v 命令进入的字符可视化模式(Characterwise visual mode)。文本选择是以字符为单位的。用 V 命令进入的行可视化模式(Linewise visual mode)。文本选择是以行为单位的。用 ctrl-V 进入的块可视化模式(Blockwise visual mode)。可以选择一个...
2020-02-02 10:29:16
2378
转载 看懂UML类图
这里不会将UML的各种元素都提到,我只想讲讲类图中各个类之间的关系; 能看懂类图中各个类之间的线条、箭头代表什么意思后,也就足够应对 日常的工作和交流; 同时,我们应该能将类图所表达的含义和最终的代码对应起来; 有了这些知识,看后面章节的设计模式结构图就没有什么问题了;从一个示例开始请看以下这个类图,类之间的关系是我们需要关注的:车的类图结构为<<abstract>&g...
2019-08-11 11:08:28
315
转载 从IaaS到FaaS—— Serverless架构的前世今生
转自亚马逊AWS官方博客:https://aws.amazon.com/cn/blogs/china/iaas-faas-serverless/今天大多数公司在开发应用程序并将其部署在服务器上的时候,无论是选择公有云还是私有的数据中心,都需要提前了解究竟需要多少台服务器、多大容量的存储和数据库的功能等。并需要部署运行应用程序和依赖的软件到基础设施之上。假设我们不想在这些细节上花费精力,是否有...
2019-02-15 21:39:18
511
原创 Open vSwitch 出口流量QoS实现
Open vSwitch 出口流量QoS实现OVS中可以通过创建对应出端口的队列并配置队列最大/最小速率来实现qos操作。以下我们通过mininet中一个最简单的拓扑(一个交换机+两台主机,mininet的默认拓扑,直接运行sudo mn即可)来说明一下这个qos操作。 如图,交换机的s1-eth1(ofport=1)连接主机h1,s1-eth2(ofport=2)连接主机h2,h1...
2018-12-29 14:21:17
3780
2
原创 objdump 目标文件分析
objdump是用来查看目标文件或者可执行的目标文件的构成的gcc工具。1、常用参数说明-f:显示文件头信息-d:从objfile中反汇编那些特定指令机器码的section-D:反汇编所有section-h:显示目标文件各个section的头部摘要信息-x:显示所有可用的头信息,包括符号表、重定位入口。-x 等价于 -a -f -h -r -t 同时指定-i:显示对于 -b 或者 ...
2018-11-23 22:31:41
1694
原创 Linux 用ssh远程登录及scp传输文件
sshssh命令是openssh套件中的客户端连接工具,可以给予ssh加密协议实现安全的远程登录服务器。语法 scp (选项) 远程主机常用选项-1:强制使用ssh协议版本1-2:强制使用ssh协议版本2-4:强制使用IPv4地址-6:强制使用IPv6地址-A:开启认证代理连接转发功能-a:关闭认证代理连接转发功能-b:使用本机指定地址作为对应连接的源i...
2018-05-23 20:33:36
7428
1
原创 ubuntu 上安装使用SSH
1、chinese语言包安装先打开 System Settings –> Language Support(第一次打开有可能会提醒你 Language Support 没有安装完全什么的,点击授权安装就行)点击Install/Remove Languages…,选中Chinese(simplified),然后点击Apply 安装:2、ibus拼音输入法安装在终端中输入以下命
2018-05-11 10:05:37
7775
原创 Linux文件连接与ln命令
ln命令用来为文件创建连接,连接类型分为硬连接和符号连接两种,默认的连接类型是硬连接。如果要创建符号连接必须使用”-s”选项。要注意这个s代表的是“symbolic”而不是“soft”,虽然符号链接又被称为软连接,但这可能是为了与硬链接相对应。注意:符号链接文件不是一个独立的文件,它的许多属性依赖于源文件,所以给符号链接文件设置存取权限是没有意义的。语法 ln (选项) 源文件 目标文件常用选
2018-05-08 20:09:03
910
原创 C/C++ 中利用debug宏定义打开/关闭调试输出
debug宏作为调试开关在写程序时,为了调试,经常需要加一些输出语句,等调试完成又得注释掉,如果下次还需要调试还得解注释,十分费时费力,为了解决这个麻烦,可以定义一个debug宏作为调试输出的开关。如下面代码所示:#include <stdio.h>int main(void){ int i, sum; for (i = 1, sum = 0; i <= 5; i++) {
2018-05-06 20:26:00
24059
3
原创 C/C++ 可变参数宏与__VA_ARGS__ 宏
在GNU C中,从C99开始,宏可以接受可变数目的参数,就象可变参数函数一样。和函数一样,宏也用三个点…来表示可变参数__VA_ARGS__ 宏__VA_ARGS__ 宏用来表示可变参数的内容,简单来说就是将左边宏中 … 的内容原样抄写在右边__VA_ARGS__ 所在的位置。如下例代码:#include <stdio.h>#define debug(...) printf(__VA_ARGS_
2018-05-02 19:29:39
24003
1
转载 "error while loading shared libraries: xxx.so.x" 错误的原因和解决办法
一般我们在Linux下执行某些外部程序的时候可能会提示找不到共享库的错误, 比如:tmux: error while loading shared libraries: libevent-1.4.so.2: cannot open shared object file: No such file or directory原因一般有两个, 一个是操作系统里确实没有包含该共享库(lib*.so.*文件)
2018-04-30 13:47:06
772
原创 C/C++可变参数函数
可变参数的函数,即函数的参数个数和参数类型不完全确定的函数。这类函数最常见的就是printf、scanf函数。在C/C++中,为了通知编译器函数有可变参数,必须以三个点结束该函数的声明。例如://printf函数的声明 int printf(const char * _Format, ...); //scanf函数声明 int scanf(const char * _Format, ...
2018-04-28 19:17:46
1216
原创 cout 输出 uint8_t 整形值
在C++中我们一般用std::cout输出到屏幕,但如果直接用cout输出uint8_t类型的无符号整形数的话却不能得到我们想到的整形值,比如下例代码:#include <iostream>#include <stdint.h>int main(){ uint8_t a = 98; std::cout << a << std::endl; return 0;}我们希望输
2018-04-25 19:33:56
13683
原创 C语言字符串与C++string对象的相互转换
C语言中字符串以字符数组的形式存储,以’\0’结尾,而C++中引入了string类作为字符串类型,它们之间可以通过以下方法相互转换:C语言字符串=>C++string对象C++中,string类能够自动将C 语言字符串转换成string对象#include <iostream>#include <string>int main(){ const char *s = "Roger!";
2018-04-23 20:51:28
12280
原创 动态规划解二维多重背包问题
背包问题背包问题是一个很经典的算法问题,根据其复杂程度不同又可分为01背包问题、完全背包问题、多重背包问题、二维背包问题等等。本文讲一讲二维多重背包问题的动态规划解法。01背包问题有N件物品和一个容量为V的背包。第i件物品的体积是a[i],价值是w[i]。求解将哪些物品装入背包可使价值总和最大完全背包问题有N种物品和一个容量为V的背包,每种物品都有无限件可用。第i种物品...
2018-03-13 22:36:45
13925
2
原创 C++ 标准模板库STL中map用法介绍
本文所介绍的std::map用法基于C++11,std::map定义于头文件<map>中,其定义如下:template< class Key, class T, class Compare = std::less<Key>, class Allocator = std::allocator<std::pair<const K...
2018-02-12 17:10:25
3617
原创 C++ 标准模板库STL中set用法介绍
本文所介绍的std::set用法基于C++11,std::set定义于头文件<set>中,其定义如下:template< class Key, class Compare = std::less<Key>, class Allocator = std::allocator<Key>> class set;std::set 是...
2018-02-09 21:02:11
1680
原创 C++ 标准模板库STL中vector用法介绍
本文所介绍的std::vector用法基于C++11,std::vector定义于头文件<vector>中,其定义如下:template< class T, class Allocator = std::allocator<T>> class vector;其包含成员类型其成员函数如下:成员类型成员类型定义value_typeTallocato...
2018-02-09 20:49:00
992
转载 c/c++中的inf与nan
inf :infinity (linux) 等同于 #INF:infinity (windows) nan :not a number 等同于 #IND:indeterminate (windows) 注意:inf一般是因为得到的数值,超出浮点数的表示范围(溢出,即阶码部分超过其能表示的最大值);而nan一般是因为对浮点数进行了未定义的操作,如对-1开方。 nan==nan 结果是0或f
2018-01-23 19:01:21
40549
原创 leetcode689. Maximum Sum of 3 Non-Overlapping Subarrays
In a given array nums of positive integers, find three non-overlapping subarrays with maximum sum. Each subarray will be of size k, and we want to maximize the sum of all 3*k entries. Return the res
2018-01-14 21:32:16
356
原创 getchar()、EOF和Ctrl+Z
当初学c语言的时候,都知道EOF是文件结束符,end of file的意思,一般通过EOF来标识输入或文件的结束(终端输入的话windows系统中是Ctrl+Z键,linux系统是Ctrl+D键),如上面那段代码所示,以前一直以为是不断读入终端输入的字符,一直到读到^Z为止,但现在发现却不是这么简单。一个小例子#include #include int main(){
2017-12-14 22:38:50
2738
2
原创 c语言转义字符
今天遇到一道题: 有以下程序: void main(){ char a, b, c, *p; a=’\’; b=’\xbc’; c=’\0xab’; p=”\0127”; printf(“%c %c %c %c\n”, a, b, c, *p); } 编译时出现错误,以下叙述中正确的是() A. 程序中只有a=’\’;语句不正确
2017-12-11 22:07:48
29922
2
原创 ubuntu16.04 安装 eclipse
安装Java JDK安装eclipse需要先安装 Java JDK,具体可以看这篇Ubuntu 16.04安装Java JDK下载eclipse安装器前往eclipse官网(https://www.eclipse.org/downloads/),根据系统类型下载。解压并运行其中的eclipse-insttar xzvf eclipse-inst-linux64.tar.gzcd eclipse-i
2017-11-13 14:47:30
6599
原创 Ubuntu 16.04安装Java JDK8
Java JDK在linux系统有两个版本,一个开源版本Openjdk,还有一个oracle官方版本jdk,oracle JDK既可以通过添加ppa源命令行安装,也可以去官网下载jdk压缩包安装。下面分别记录一下这三种安装方式的步骤。安装openjdk1、更新软件包列表: sudo apt-get update2、安装openjdk-8-jdk: sudo apt-get install
2017-11-09 15:03:13
74451
8
原创 ubuntu 16.04 安装ibus中文输入法
1、chinese语言包安装先打开 System Settings –> Language Support(第一次打开有可能会提醒你 Language Support 没有安装完全什么的,点击授权安装就行)点击Install/Remove Languages…,选中Chinese(simplified),然后点击Apply 安装:2、ibus拼音输入法安装在终端中输入以下命令来安装ibus框架:
2017-11-07 16:19:23
3920
原创 Ubuntu 14.04 升级到 Ubuntu 16.04
1、检查系统更新运行ubuntu的更新管理器(Software Updater)检查更新:点击 Install Now 更新需要更新的内容:有时候可能需要重启才能完成更新:重启完后再运行系统更新器检查下更新:这样就可以了2、升级系统在终端输入以下命令: sudo update-manager -d它会自动查找最新可用版本,如下图:从上图可以看到,我使用的是14.04,目前可以升级到16.04,
2017-11-03 15:28:42
12839
3
原创 Linux 下修改socket接收缓冲区
在进行socket编程有时候可能需要修改下socket的接收缓冲区大小,这里可以使用 setsockopt 函数,但是如果需要修改的缓冲区很大(比如500MB),则还需要修改系统内核的TCP/IP参数,不然接收缓冲区大小会收到内核参数的限制,所以需要改两个地方。下面以把socket接收缓冲区修改为500MB说明一下要作的修改。1、修改内核TCP/IP参数在终端用sysctl命令修改socket最大缓
2017-10-19 19:16:58
10039
1
原创 Linux 内核运行参数修改——sysctl命令
sysctl命令被用于在内核运行时动态地修改内核的运行参数,可用的内核参数在目录/proc/sys中。它包含一些TCP/ip堆栈和虚拟内存系统的高级选项,用sysctl可以读取设置超过五百个系统变量。sysctl命令用法: sysctl [options] [variable[=value] …]常用选项: -n:打印时只打印值,不打印参数名称; -e:忽略未知关键字错误; -N:打印时只
2017-10-16 20:50:40
14798
原创 Linux下 getsockopt/setsockopt 函数使用说明
getsockopt, setsockopt - 获取或设置socket套接字相关的选项函数使用函数原型: int getsockopt(int sockfd, int level, int optname, void *optval, socklen_t *optlen); int setsockopt(int sockfd, int level, int optname, const voi
2017-10-11 12:46:04
3142
转载 vxlan 协议原理简介
1. vxlan 简介VXLAN 全称是 Virtual eXtensible Local Area Network,虚拟可扩展的局域网。它是一种 overlay 技术,通过三层的网络来搭建虚拟的二层网络。rfc7348 (参考资料1) 上的介绍是这样的: A framework for overlaying virtualized layer 2 networks over lay 3 net
2017-10-09 19:42:49
17426
转载 linux 网络虚拟化:network namespace 简介
network namespace 是实现网络虚拟化的重要功能,它能创建多个隔离的网络空间,它们有独自的网络栈信息。不管是虚拟机还是容器,运行的时候仿佛自己就在独立的网络中。这篇文章介绍 network namespace 的基本概念和用法,network namespace 是 linux 内核提供的功能,这篇文章借助 ip 命令来完成各种操作。ip 命令来自于 iproute2 安装包,一般系统
2017-10-05 22:56:03
13818
5
原创 malloc, calloc, realloc 使用及区别
堆空间malloc, calloc, realloc 函数分配的空间位于堆空间, C语言内存分布包括栈空间、堆空间、数据段(包括BSS段)、代码段。malloc函数原型: void* malloc (size_t size); 功能:请求系统动态分配size个字节的空间,如果分配成功则返回第一个字节的地址。 返回值:如果重新分配成功则返回指向被分配内存的指针,否则返回空指针。calloc函数原型
2017-10-01 21:34:53
514
原创 ubuntu16.04 安装Sublime Text 3
1、安装Sublime Text 3可以前往sublime text的官网download界面(http://www.sublimetext.com/3)进行下载,这里提供了mac、windows、linux系统的下载,如下图所示。 ubuntu系统可以直接点击linux的64bit、32bit tarball下载打包文件,解压后就可以得到一个免安装版本的sublime text 3,但免安装
2017-10-01 21:34:12
27758
转载 Sublime Text 3 快捷键汇总
Sublime Text 3常用快捷键 快捷键 作用 Ctrl+Shift+P 打开命令面板 Ctrl+/ 注释当前行 Ctrl+G 跳转到第几行 Ctrl+M 跳转到对应括号 Ctrl+R 前往 method Ctrl+F 查找内容 Ctrl+Shift+F 查找并替换 Ctrl+H 查找并替换 Alt+F3 选择所有相
2017-09-27 15:06:35
373
转载 Pthreads 多线程入门教程
Pthreads 是 IEEE(电子和电气工程师协会)委员会开发的一组线程接口,负责指定便携式操作系统接口(POSIX). Pthreads 中的 P 表示 POSIX,实际上,Pthreads 有时候也代表 POSIX 线程.前言本文档参考: https://computing.llnl.gov/tutorials/pthreads/POSIX 委员会定义了一系列基本功能和数据结构,希望能够被大量
2017-09-14 21:33:44
1029
原创 C/C++中的NULL与nullptr
C中的NULL在C语言中我们将NULL用作空指针之用,NULL在C语言中的定义如下:#define NULL ((void *)0)可以看到,C语言中NULL是一个void*指针,我们常用其来对指针变量进行初始化赋值或者作为返回类型为指针的函数的返回值(如函数执行失败时)等等。C++中的NULL在C++中,NULL的定义如下:/* Define NULL pointer value */#i
2017-09-09 15:23:40
5891
原创 eclipse 生成及使用C/C++静态库
生成静态库要在eclipse中生成一个静态库,需要先创建一个静态库项目,依次选择 File -> New -> C Project (或C++ Project),并在创建项目对话栏中选择 Static Library,如下图所示。创建静态库项目后,将源代码拷贝至项目文件夹下,刷新后直接build即可,在Debug文件夹下可以找到生成的静态库文件,如下图所示,libtestlib.a就是我们需要的静态
2017-09-08 22:48:52
8601
原创 ubuntu 14.04 截屏快捷键
在windows系统下我们一般都习惯用QQ的截屏功能,直接俺Ctrl+Alt+A快捷键即可截屏,在ubuntu系统中也有类似的快捷键可以实现这类截取特定部分屏幕的功能,我们可以打开“System Settings”(系统设置)中的“keyboards”(键盘),在“Shortcus”(快捷键)一栏底下的“Screenshots”(屏幕截图)里找到需要的快捷键。从上图中可以看到,截取全屏的快捷键是Pr
2017-09-08 21:49:00
22696
原创 cout格式化输出
在C语言中,我们一般用printf()函数来进行输出,通过输出字符串中的格式说明符(如%4.2d)可以很容易地格式化输出。而在C++中,为简便起见,往往不指定输出的格式,由系统根据数据的类型采取默认的格式,但有时也需要数据按我们指定的格式输出,比如以十六进制的形式输出一个整数等。有两种方法可以达到格式化输出的目的,一种是使用流对象的有关成员函数,还有一种是使用控制符方法,这两种方法殊途同归,它们的原
2017-09-03 19:12:16
9760
3
翻译 printf()输出格式
int printf ( const char * format, … )将格式化的数据打印到标准输出printf()函数将上述函数定义中format指向的C字符串写到标准输出。如果format中包含了格式说明符(以%开头的子序列),则format之后的附加参数将被格式化并插入到字符串中代替对应的说明符。参数1. format包含了要写入标准输出的文本的C字符串它可以可选地包含一些格式说明符
2017-09-02 23:25:55
13562
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人