自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(124)
  • 资源 (1)
  • 收藏
  • 关注

原创 Linux同步技术之读写锁

互斥锁试图将想进入临界区的所有线程都阻塞住,但是有时候该临界区会涉及由这些线程共享的一个或多个数据的访问或更新,这时候我们就需要用到读写锁。系统读写锁的分配规则: (1)只要有没有线程持有给定的读写锁用于写,那么任意数量的线程可以持有该读写锁用于读。(系统规定写锁优先,但是可以更改为读锁优先) (2)仅当没有线程持有某个读写锁用于读或用于写时,才能分配该读写锁用于写。读写锁用于读称为共享锁,读写

2016-05-31 09:01:24 1689

原创 C++实现一个简单的红黑树(RB_TREE)

红黑树遵守的规则:一头(根)一脚(叶子节点)黑(黑色),黑同(从任意节点开始至根结点的黑色节点的个数相等)红不连(红色节点不能相连)以下是红黑树的插入和旋转函数的简易实现:#include <iostream>#include <assert.h>#include <string.h>using namespace std;typedef int Type;typedef enum{RED=0

2016-05-10 21:51:49 1883 1

转载 C语言中restrict关键字学习

简介:restrict是c99标准引入的,它只可以用于限定和约束指针,并表明指针是访问一个数据对象的唯一且初始的方式.即它告诉编译器,所有修改该指针所指向内存中内容的操作都必须通过该指针来修改,而不能通过其它途径(其它变量或指针)来修改;这样做的好处是,能帮助编译器进行更好的优化代码,生成更有效率的汇编代码.如 int *restrict ptr, ptr 指向的内存单元只能被 ptr 访问到,任何

2017-06-18 09:10:11 603

转载 c语言中__attribute__的意义

我们在进行定义数据结构计算数据结构大小的时候,或者进行网络通讯的socket发送数据的时候,都会遇到一个共同的问题:数据对齐问题。这个问题是硬件为提高访问数据的效率,引出的问题,这里就不具体说这样为什么可以提高数据的访问效率,有兴趣的人,网上都有。既然这个问题是实实在在存在的,并且软件发展了这么多年,也肯定有破解之道,下面就简单的介绍常见的3种方法:手动对齐,根据自己定义的数据结构,然后根据大小,

2017-06-16 17:38:10 694

转载 专访许鹏:谈C程序员修养及大型项目源码阅读与学习

转自http://blog.csdn.net/jim_cainiaoxiaolang/article/details/62435641?locationNum=2&fps=1 摘要:阅读源码是开源项目最好的学习方式,然而真正的执行起来却并不容易。这里我们为大家分享许鹏的源码阅读经验、C程序员的修养以及Spark和Storm源码走读博文。对许鹏的第一印象来源于其Bolg的粗读,最早时候更准确说应该是

2017-05-10 16:01:30 1492

转载 new 操作符和 new 操作的区别

转自http://blog.csdn.net/linuxarmsummary/article/details/40787143操作符(new operator) 和 new操作(operator new)的区别。 当你写这样的代码: string *ps = new string(“Memory Management”); 你使用的 new 是 new 操作符。这个操作符就象 sizeof 一

2017-03-23 13:41:23 1671

转载 linux lsof祥解

lsof简介lsof(list open files)是一个列出当前系统打开文件的工具。在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。所以如传输控制协议 (TCP) 和用户数据报协议 (UDP) 套接字等,系统在后台都为该应用程序分配了一个文件描述符,无论这个文件的本质如何,该文件描述符为应用程序与基础操作系统之间的交互提供了通用接口。因为

2017-01-10 10:15:17 336

原创 linux-awk中NF与$NF的区别

NF 表示的是浏览记录的域的个数 $NF 表示的最后一个Field(列),即输出最后一个字段的内容[root@localhost SHELL]# free -m | grep buffers\/-/+ buffers/cache: 1815 1859[root@localhost SHELL]# free -m | grep buffers\/ | awk '{p

2017-01-09 10:38:39 86845 4

原创 在shell中求长度的几种常见方式

<1> 使用$#直接求解 echo ${#变量名}[root@localhost SHELL]# TE=muyingshiguang[root@localhost SHELL]# echo ${#TE}14[root@localhost SHELL]# <2>使用管道符与wc的组合求解 echo $变量名 | wc -L[root@localhost SHELL]# echo

2017-01-09 09:48:22 2525

原创 shell变量的子串的删除/替换

${#string} 返回$string的长度${string:position} 在$string中,从$position位置之后开始提取子串${string:position:length} 在$string中,从$position位置之后开始提取$length长度的子串[root@localhost SHELL]# NAME="ni hao, ming tian"[root@local

2017-01-02 20:41:51 14813

原创 shell的特殊重要内置变量

《1》位置变量 $0 获取当前执行的shell脚本的文件名,如果执行脚本带路径,那么就包括脚本路径。 $n 获取当前执行shell的命令行的第n个参数,当n=0时表示脚本的文件名,如果n>9,用{}将其括起来,参数以空格隔开。 $# 获取当前执行的shell脚本后面接的参数的总个数。[root@localhost SHELL]# vim test.sh [root@

2017-01-02 11:30:06 558

原创 shell变量的分类及定义

shell变量的类型: shell变量分环境变量(全局变量)和普通变量(局部变量) 环境变量亦称为全局变量,可以在建立它们的shell及其派生出来的任意子进程shell中使用;环境变量又分为自定义环境变量和Bash内置的环境变量。 普通变量亦称为局部变量,只能在创建它们的shell函数或shell脚本中使用,一般由开发者用户创建。环境变量的作用:一般用于定义shell的运行

2017-01-01 22:10:20 9852

原创 shell脚本开发规范

<1>脚本第一行指定脚本解释器#!/bin/bash 或 #!/bin/sh<2>脚本开头加版本版权等信息 可以通过配置vim编辑器的配置文件,即修改~/.vimrc配置文件。<3>脚本中不用中文注释 <4>脚本以 .sh 为扩展名<5>脚本代码书写规范 a.成对的符号内容尽量一次性写出,防止遗漏。如{} , [], ' ' , " " b. [] 中括号两端要有空格[ ]

2016-12-31 12:25:40 1221 1

原创 查看linux系统的默认shell

方式一: 使用命令行:echo $SHELL [root@localhost Desktop]# echo $SHELL /bin/bash 由此可知系统默认的shell是bash方式二: 通过查看系统创建用户时使用的shell来查看: [root@localhost Desktop]# grep root /etc/passwd root:x:0:0:r

2016-12-31 11:49:25 17407 2

原创 shell脚本的建立与执行

脚本的开头(第一行): 规范的脚本在脚本的第一行会指出由哪个程序(解释器)来执行脚本中的内容 在linux bash的编程中一般为: #!/bin/bash 或 #!/bin/sh ‘#!’被称为幻数,用来指出执行脚本所用的解释器,并且此行必须用在第一行,若不是脚本第一行则其就是注释行 sh与bash的区别: [root@

2016-12-31 11:46:23 1840 1

原创 C++之指向成员的指针

指针是指指向一些内存地址的变量,可以是数据的地址,也可以是函数的地址。同样,C++的成员指针也遵从同样的概念。但是,C++的成员指针只能指向类内部的成员,并且在类内部是没有地址的; 因此,成员指针要求选择一个对象的同时间接引用成员指针。以下的例子可以说明如何建立和使用指向数据成员的指针:#include <iostream>using namespace std;class Data{publi

2016-12-26 19:02:09 468

原创 C++之拷贝构造函数

通过按值传递的方式传递一个对象时,就创立了一个新对象,函数体内的对象是由函数体外的原来存在的对象传递的。当编译器需要从现有的对象创建新对象时,可以通过定义自己的函数来实现,因为需要创建新的对象,因此这个函数应该是构造函数,并且传递给这个函数的单一参数必须是创立的对象的源对象,但是该对象不能以按值传递的方式传入构造函数,而是需要以引用的方式来传递,可以使用源对象的引用,这个就是拷贝构造函数拷贝构造函数

2016-12-25 20:10:48 221

转载 C语言指向多维数组的指针

转自http://blog.csdn.net/helloeveryon/article/details/51851188?locationNum=13&fps=1本小节以二维数组为例介绍多维数组的指针变量。 多维数组的地址 设有整型二维数组a[3][4]如下: 0 1 2 3 4 5 6 7 8 9 10 11 它的定义为: int a[3][

2016-12-25 13:54:22 605

转载 MySQL在大型网站的应用架构演变

写在最前: 本文主要描述在网站的不同的并发访问量级下,MySQL架构的演变。可扩展性架构的可扩展性往往和并发是息息相关,没有并发的增长,也就没有必要做高可扩展性的架构,这里对可扩展性进行简单介绍一下,常用的扩展手段有以下两种:Scale-up:纵向扩展,通过替换为更好的机器和资源来实现伸缩,提升服务能力 Scale-out:横向扩展, 通过加节点(机器)来实现伸缩,提升服务能力对于互联网

2016-12-19 16:10:31 259

转载 MySql从表结果集中随机取一条数据

转自http://blog.csdn.net/testcs_dn/article/details/10149293该功能的实现基于“mysql 查找结果中自动加序号列 ”博客文章地址:http://blog.csdn.NET/macwhirr123/article/details/7489484 Select * from (Select (@rowNo :=@rowNo+1) AS rown

2016-12-19 15:57:10 859

转载 c / c + + 调用mysql存储过程

转自http://blog.csdn.net/testcs_dn/article/details/19039953mysql5.0支持存储过程后,现在mysql6.0Alpha 版本也是可用的。6.0不仅支持大型数据库(如 oracle和如此的大多数功能(如存储过程、视图、触发器、作业等,并修复了这些功能存在的bug,6.0.1 版还支持windows 64 位 和表空间。 C/c + + 要访问

2016-12-19 15:51:50 581

转载 C++细节——static类成员使用注意

转自http://blog.csdn.net/iaccepted/article/details/6993196对于某一特定类类型的全体对象我们需要访问一个共同的变量,这个时候我们通常是在类的声明中声明一个静态变量即static变量。当然可以用一个全局变量来代替,但是用全局变量是一个很不好的习惯,重要的一点就是全局变量会破坏类的封装。然而类中static变量不像普通变量,它独立与该类的任意对象而存在

2016-12-10 11:48:32 283

转载 架构设计:系统存储(11)——MySQL主从方案业务连接透明化(上)

转自http://blog.csdn.net/yinwenjie/article/details/529808831、MySQL主从方案业务层的问题在之前的文章中,我们提到MySQL一主多从集群模式下,对上层业务系统的访问带来了一些问题。本编文章中我们将深入分析这个问题,并介绍如何对这个问题进行改进。MySQL一主多从集群对上层业务系统带来的主要问题是,上层业务系统需要自行控制本次MySQL数据操作

2016-12-10 11:21:36 283

转载 架构设计:系统存储(10)——MySQL简单主从方案及暴露的问题

转自http://blog.csdn.net/yinwenjie/article/details/529351401、概述从本篇文章开始我们将花一定的篇幅向读者介绍MySQL的各种服务集群的搭建方式。大致的讨论思路是从最简的MySQL主从方案开始介绍,通过这种方案的不足延伸出更复杂的集群方案,并介绍后者是如何针对这些不足进行改进的。MySQL的集群技术方案特别多,这几篇文章会选择一些典型的集群方案向

2016-12-10 11:11:30 292

转载 架构设计:系统存储(9)——MySQL数据库性能优化(5)

转自http://blog.csdn.net/yinwenjie/article/details/52757457=================================== (接上文《架构设计:系统存储(9)——MySQL数据库性能优化(5)》) 4-3-3-3、避免死锁的建议上一篇文章我们主要介绍了MySQL数据库中锁的基本原理、工作过程和产生死锁的原因。通过上一篇文章的介绍,可以

2016-12-10 10:56:45 344

转载 架构设计:系统存储(8)——MySQL数据库性能优化(4)

转自http://blog.csdn.net/yinwenjie/article/details/5273506================================ (接上文《架构设计:系统存储(7)——MySQL数据库性能优化(3)》) 4-3、InnoDB中的锁虽然锁机制是InnoDB引擎中为了保证事务性而自然存在的,在索引、表结构、配置参数一定的前提下,InnoDB引擎加锁过程

2016-12-10 10:42:55 424

转载 架构设计:系统存储(7)——MySQL数据库性能优化(3)

转自http://blog.csdn.net/yinwenjie/article/details/52515316接上文《架构设计:系统存储(6)——MySQL数据库性能优化(2)》) 4、影响SQL性能的要素MySQL数据库的性能不止受到性能参数和底层硬件条件的影响,在这两个条件一定的情况下,开发人员对SQL语句的优化能力更能影响MySQL数据库的性能。由于MySQL中不同数据库引擎对SQL语句

2016-12-10 10:18:53 346

转载 架构设计:系统存储(6)——MySQL数据库性能优化(2)

转自http://blog.csdn.net/yinwenjie/article/details/52515316============================== (接上文《架构设计:系统存储(5)——MySQL数据库性能优化(1)》) 3-3、突破I/O性能为了解决上一节中提到的I/O性能问题,本文这里基于之前介绍的块存储方案的知识,列出这个问题的几种解决方案。除了根据I/O吞吐量

2016-12-10 09:53:03 424

转载 架构设计:系统存储(5)——MySQL数据库性能优化(1)

转自http://blog.csdn.net/yinwenjie/article/details/52461398接上文:《架构设计:系统存储(4)——块存储方案(4)》 1、MySQL概述从本文开始我们将讨论建立在块存储方案之上的关系型数据库的性能优化方案和集群方案。关系型数据库的选型将以创业公司、互联网行业使用最广泛的MySQL数据为目标,但是MySQL的安装过程和基本使用方法等知识并不在我们

2016-12-10 09:44:43 428

转载 架构设计:系统存储(4)——块存储方案(4)

转自http://blog.csdn.net/yinwenjie/article/details/52430409================================ (接上文《架构设计:系统存储(3)——块存储方案(3)》) 6-2、Ext2和Ext3的区别在上文6-1小节中介绍的Ext文件系统结构主要适用于Ext2和Ext3文件系统,这两个版本的Ext文件系统在数据组织结构上基本

2016-12-10 09:39:07 314

转载 架构设计:系统存储(3)——块存储方案(3)

转自http://blog.csdn.net/yinwenjie/article/details/52190355(接上文《架构设计:系统存储(2)——块存储方案(2)》) 5-2、磁盘阵列设备目前磁盘阵列设备被广泛应用在从民用级计算到工业级计算的各个基础领域,本小节的内容就带各位读者进行一些概要性了解。集成在主板上的阵列控制器最廉价的,也是在民用级市场上最普遍的做法,是将阵列控制器直接集成在主

2016-12-10 09:32:32 669

转载 架构设计:系统存储(2)——块存储方案(2)

转自http://blog.csdn.net/yinwenjie/article/details/52248862接上文《架构设计:系统存储(1)——块存储方案(1)》 4-2、固态硬盘工作过程本小节我们要解决一个关键问题:既然机械硬盘和固态硬盘从工作原理、制作工艺、技术规范等多个方面都完全不一样,那为什么无论硬件层是使用机械硬盘还是固态硬盘操作系统却都可以进行识别,并在其上进行数据读写呢?这个问

2016-12-10 09:20:15 325

转载 架构设计:系统存储(1)——块存储方案(1)

转自http://blog.csdn.net/yinwenjie/article/details/52208294 1、概述在“系统存储”专题中,我们将按照“从上至下”的顺序向读者介绍整个“系统存储”体系。在这个专题中我们将至少介绍机械硬盘的主要结构、磁盘阵列的分类、操作系统的EXT文件系统、NAS文件共享存储方案、分布式文件系统重要技术点和分布式文件系统示例。最后如果有时间我们将自行设计一款分布

2016-12-10 08:49:40 357

原创 mysql中的常用聚集函数

mysql中的常用聚集函数如下:示例中使用的数据表内容如下:MariaDB [test]> select * from stu;+------+----------+-------+| id | name | class |+------+----------+-------+| 1 | xiaoming | 2 || 1 | liwen |

2016-12-08 10:44:28 1052

原创 mysql中where字句与having字句的区别

**where字句中不能使用聚集函数:count(), sum(), max(), avg()等; having字句中可以使用聚集函数**

2016-12-08 10:06:42 582

转载 数据段、代码段、堆栈段、BSS段的区别

5个数据段 进程(执行的程序)会占用一定数量的内存,它或是用来存放从磁盘载入的程序代码,或是存放取自用户输入的数据等等。不过进程对这些内存的管理方式因内存用途 不一而不尽相同,有些内存是事先静态分配和统一回收的,而有些却是按需要动态分配和回收的。对任何一个普通进程来讲,它都会涉及到5种不同的数据段。 Linux进程的五个段下面我们来简单归纳一下进程对应的内存空间中所包含的5种不同的

2016-10-02 16:43:14 737

转载 宏在C++中的替代解决方案

宏,在C语言中是个神的存在,能够玩出各种花样,也正因为此,才会给普通程序员造成不少的困扰。由于宏只在预编译阶段起作用,使得编译器无法检测其中的Bug,作为新时代的C++程序员,还是远离的好。C++为宏提供了一些替代的解决方案,嗯,是一些。常量定义#define NUM 100《EffectiveC++》的第一个条款,讨论的就是这个宏。由于宏是预编译程序来处理,所以NUM这个名字不会加入到符号表

2016-09-23 09:18:24 3590

转载 网络TCP建立连接为什么需要三次握手而结束要四次

举个打电话的例子:  A : 你好我是A,你听得到我在说话吗  B : 听到了,我是B,你听到我在说话吗  A : 嗯,听到了  建立连接,开始聊天!为什么TCP协议终止链接要四次?1、当主机A确认发送完数据且知道B已经接受完了,想要关闭发送数据口(当然确认信号还是可以发),就会发FIN给主机B。2、主机B收到A发送的FIN,表示收到了,就会发送ACK回复。3、但这是B可能还在发送数据,没有想要关闭

2016-09-18 09:13:28 250

转载 Linux下的top命令

转自http://www.cnblogs.com/fengyv/archive/2012/07/11/2585666.html Windows下的任务管理器虽然不好用(个人更喜欢Process Explorer些),但也算方便,可以方便的查看进程,CPU,内存…也可以很容易的结束进程 没有图形化界面下的Linux,也有命令可以实现Windows的任务管理器功能,这个命令就是”top”,用户可以使

2016-09-17 08:10:40 269

转载 Polymorphism in C(用C实现多态)

最近一直喜欢浏览国外网站,感觉收获很多,所以我跟苞谷说,看中文网站是无奇不有,看外文网站才知道世界之大.Polymorphism in C是我摘抄+修改+体会+翻译过来的好东东.有助于理解多态. 多态是什么?就是我们调用一个公共接口(相同函数名字)时,根据调用者的类型调用不同的函数,看过我之前写的C++向C的转化的人其实知道,函数名字相同只是我们肉眼看见的相同,编译器优化后,意味函数所属的clas

2016-09-13 08:19:39 449

线程与进程

进线程之间的区别,优缺点,关系等

2016-09-17

空空如也

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

TA关注的人

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