自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 服务器端网络编程之 IO 模型

引言      从 T 跳槽到 A 之后,我的编程语言也从 C++ 转为 了 Java。在 T 做的偏服务器端开发,而在 A 更偏向于业务开发。上周在 A 公司组内做了一个《服务器端高性能网络编程》的分享,我讶异于组内的十个人竟然没有一个人做过直接基于 TCP/IP 协议的开发,更多的是 Web 后台的业务开发。连 Java 最强大的网络库 Netty,用过的人也只有一个。但也不难理解---A...

2019-02-22 00:26:55 159

原创 高性能服务端网络编程模型

引言上一篇文章《服务器端网络编程之 IO 模型》中讲到服务器端高性能网络编程的核心在于架构,而架构的核心在于进程-线程模型的选择。本文将主要介绍传统的和目前流行的进程-线程模型,在讲进程-线程程模型之前需要先介绍一种设计模式: Reactor 模式,不明白的看这里《设计模式详解》,文中有一句话对 Reactor 模式总结的很好,引用下。Reactor 模式首先是事件驱动的,有一个或多个并发...

2018-12-23 12:19:38 211

原创 SpringBoot 下 mybatis 的缓存

背景:说起 mybatis,作为 Java 程序员应该是无人不知,它是常用的数据库访问框架。与 Spring 和 Struts 组成了 Java Web 开发的三剑客--- SSM。当然随着 Spring Boot 的发展,现在越来越多的企业采用的是 SpringBoot + mybatis 的模式开发,我们公司也不例外。而 mybatis 对于我也仅仅停留在会用而已,没想过怎么去了解它,更不...

2019-03-02 13:14:29 3634

原创 Java 中的按值传递

Java 中只有按值传递    "Java 中只有按值传递",初看到这几个字有点不敢相信,无数次通过函数改变过对象,无数次跟同事说 Java 在传对象的时候是按引用传递。后来细细想想,之所以以为 Java 传对象是按引用传递是因为其中有很多概念都没理清楚,与 C++ 中的搞混了。从 C++ 转 Java 的时候将 C++ 中的知识点映射到 Java 没错,这有利于 C++ 转 Java 的人更...

2019-02-17 22:05:00 1177 1

原创 数据结构之图(图的基本操作)

由于图的基本操作的代码较多,我放到这一章来写。图可以用两种方法来存储,但是本人偏爱链表的表示方法,所以以下代码也都是是基于邻接链表的存储方式。 1 /* 2 以下存储结构参考严蔚敏版数据结构,不懂的可以翻阅查看 3 */ 4 const int UNDIGRAPH = 0;    //无向图 5 const int DIGRAPH = 1;    //有向图

2014-04-08 13:23:26 1287

原创 数据结构之图(图的简介)

图的定义:  一个图G = (V,E)由顶点(vertex)集 V 合边(edge)集 E 组成。每条边(v,w)就是一个点对,其中v,w ∈ V。有时也把边称作弧。如果点对是有序的,那么图就叫做有向图。顶点 v 和 w 领接边 (v,w) ∈ E。在一个具有边(v,w)从而具有边(w,v)的无向图,w和v邻接那v和w也邻接。图的基本术语:阶(Order):图G中顶集V的大小称作图

2014-04-08 13:23:24 730

原创 数据结构树之红黑树

红黑树简介:  红黑树是一棵二叉搜索树,它在每个结点上增加了一个存储位来表示结点的颜色,可以是RED 或 BLACK。通过对任何一条根到叶子的简单路径上各个结点的颜色进行约束,红黑树确保没有一条路径回避其他路径长处2倍,因而是近似平衡的。  树的每个结点包含 5 个属性:color,key,left,right和p。如果一个结点没有子结点或者父结点,则该结点相应的指针属性的值为NULL。我

2014-04-08 13:23:22 487

原创 图解数据结构树之AVL树

AVL树(平衡二叉树):  AVL树本质上是一颗二叉查找树,但是它又具有以下特点:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。在AVL树中任何节点的两个子树的高度最大差别为一,所以它也被称为平衡二叉树。下面是平衡二叉树和非平衡二叉树对比的例图:  平衡因子(bf):结点的左子树的深度减去右子树的深度,那么显然-1AVL树的作用: 

2014-04-08 13:23:20 892

原创 排序算法之选择排序

选择排序算法简介:   选择排序是一种简单直观的排序算法。它的工作原理如下。首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。  选择排序的主要优点与数据移动有关。如果某个元素位于正确的最终位置上,则它不会被移动。选择排序每次交换一对元素,它们当中至少有一个将被移到其

2014-04-08 13:23:18 583

原创 数据结构树之二分查找树

二叉查找树(Binary Search Tree),也称有序二叉树(ordered binary tree),排序二叉树(sorted binary tree),是指一棵空树或者具有下列性质的二叉树:若任意节点的左子树不空,则左子树上所有结点的值均小于它的根结点的值;任意节点的右子树不空,则右子树上所有结点的值均大于它的根结点的值;任意节点的左、右子树也分别为二叉查找树。没有键

2014-04-08 13:23:16 7834

原创 数据结构树之二叉树

二叉树的定义:  是一颗空树或者具有以下性质  1.结点最多只有两个孩子,且有左右之分。不能交换左右孩子  2.结点点的左子树和右子树也是二叉树。例图        二叉树的基本形态: 二叉树中的术语:  1).结点度:节点所拥有的字数的个数成为该节点的度,在二叉树中度的取值只能是0,1,2.  2).叶节点:度为0的节点成为叶结点或终端结点。  3

2014-04-08 13:23:14 496

原创 排序算法之希尔排序

希尔排序算法简介:  希尔排序属于插入类排序,是将整个无序列分割成若干小的子序列分别进行插入排序。  排序过程:先取一个正整数d1希尔排序算法思想:  先取一个小于n的整数d1作为第一个增量,把文件的全部记录分组。所有距离为d1的倍数的记录放在同一个组中。先在各组内进行直接插入排序;然后,取第二个增量d2  该方法实质上是一种分组插入方法希尔排序算法模拟:(参考严蔚

2014-04-08 13:23:11 474

原创 排序算法之插入排序

插入排序算法简介:    有一个已经有序的数据序列,要求在这个已经排好的数据序列中插入一个数,但要求插入后此数据序列仍然有序,这个时候就要用到一种新的排序方法——插入排序法,插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,算法适用于少量数据的排序,时间复杂度为O(n^2)。是稳定的排序方法。插入算法把要排序的数组分成两部分:第一部分包含了这个

2014-04-08 13:23:09 393

原创 排序算法值快速排序

快速排序算法:  快速排序(Quicksort)是对冒泡排序的一种改进。由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。快速排序思想:   设要排序的数组是A[0]……A[

2014-04-08 13:23:07 387

原创 排序算法之堆排序

前言:今天我来介绍下堆排序,在写堆排序代码之前,我们要知道堆的概念!  堆的定义:n个关键字序列Kl,K2,…,Kn称为(Heap),当且仅当该序列满足如下性质(简称为堆性质):  (1)ki=号。//k(i)相当于二叉树的非叶子结点,K(2i)则是左子节点,k(2i+1)是右子节点若将此序列所存储的向量R[1..n]看做是一棵完全二叉树的存储结构,则堆实质上是满足如下性质的完全二叉树

2014-04-08 13:23:05 404

原创 排序算法之归并排序

归并排序  归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。值得注意的是归并排序是一种稳定的排序方法。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。比较  归并排序是稳定的排序.即相等的元素的顺序不会改变.如输入记录

2014-04-08 13:23:03 411

原创 排序算法之冒泡排序

参考:http://baike.baidu.com/view/254413.htm算法原理  冒泡排序算法的运作如下:比较相邻的元素。如果第一个比第二个大,就交换他们两个。对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。针对所有的元素重复以上的步骤,除了最后一个。持续每

2014-04-08 13:23:01 429

原创 面试试题

第一题:通过键盘输入一串小写字母(a~z)组成的字符串。请编写一个字符串压缩程序,将字符串中连续出席的重复字母进行压缩,并输出压缩后的字符串。  压缩规则:     1、仅压缩连续重复出现的字符。比如字符串"abcbc"由于无连续重复字符,压缩后的字符串还是"abcbc"。     2、压缩字段的格式为"字符重复的次数+字符"。例如:字符串"xxxyyyyyyz"压缩后就成为"3x6yz"。

2014-04-08 13:22:59 450

原创 C++学习之容器的摸索

初学容器,容易犯错的地方1.vector,list和deque都是顺序容器。其中vector和deque都可以通过下标访问,而list不能2. 容器的begin和end操作  c.begin()返回一个迭代器,它指向容器c的第一个元素  c.end()返回一个迭代器,它指向容器c的最后一个元素的  c.rbegin()返回一个逆序迭代器,它指向容器c的最后一个元素  c.r

2014-04-08 13:22:57 485

原创 C++ primer读书笔记 chapter3 标准库类型

除第二章介绍的是C++的基本类型,本章将大致介绍一下C++定义的内容丰富的抽象数据库类型标准库。着重介绍一下sting、vector和bitset。3.2标准库string类型  1.string类型支持几个构造函数。构造函数是一个特殊成员函数,定义如何初始化该类型的对象,以下是string类型常用的构造函数。当没有明确指定对象初始化式时,系统将调用默认构造函数几种初始化string对

2014-04-08 13:22:55 387

原创 C++ Primer 随笔 Chapter 2 变量和基本类型

2.1C++内置类型C++ 算术类型类型含义最小存储空间(随机器不同而不同)bool布尔型---char字符型8位wchar_t宽字符型 16位short短整型16位int整型32位long长整型64位float单精度浮点型6位有效数字

2014-04-08 13:22:53 419

原创 比较全面的gdb调试命令 (转载)

转自http://blog.csdn.net/dadalan/article/details/3758025用GDB调试程序 GDB是一个强大的命令行调试工具。大家知道命令行的强大就是在于,其可以形成执行序列,形成脚本。UNIX下的软件全是命令行的,这给程序开发提代供了极大的便利,命令行软件的优势在于,它们可以非常容易的集成在一起,使用几个简单的已有工具的命令,就可以做出一个非常强大的功能。

2014-04-08 13:22:51 409

原创 open和fopen的区别(转)

转载自:http://www.cnblogs.com/joeblackzqq/archive/2011/04/11/2013010.htmlopen和fopen的区别:1.缓冲文件系统缓冲文件系统的特点是:在内存开辟一个“缓冲区”,为程序中的每一个文件使用,当执行读文件的操作时,从磁盘文件将数据先读入内存“缓冲区”, 装满后再从内存“缓冲区”依此读入接收的变量。执行写文件的操作时,

2014-04-08 13:22:48 549

原创 来了

我又重新回来了!oh,yeah!

2014-04-08 13:22:46 436

原创 Function语义学之member function

之前我们讲过编译器会对 nonmember functions 进行怎样的扩充和该写,今天我们来讲一下 member functions 函数调用方式一、Nonstatic Member Functions(非静态成员函数)  C++的设计准则之一就是:nonstatic member function 至少必须和 nonmember function 有相同的效率。也就是说如果们要在以下

2014-04-08 13:22:44 466

原创 TCP/IP学习(四)TCP缓冲区大小及限制(转)

链接来自:http://blog.csdn.net/ysu108/article/details/7764461这个问题在前面有的部分已经涉及,这里在重新总结下。主要参考UNIX网络编程。(1)数据报大小IPv4的数据报最大大小是65535字节,包括IPv4首部。因为首部中说明大小的字段为16位。IPv6的数据报最大大小是65575字节,包括40字节的IPv6首部。同样是展16位,

2014-04-08 13:22:42 1140

原创 TCP连接的建立和终止

一、TCP 的建立  TCP 通过三次握手建立连接,具体步骤如下:  (1). 服务器通过一系列的动作(socket、bind、listen)来准备接受外来的连接,被称为被动打开。  (2). 客户端通过一系列的动作(socket、connect)进行连接到服务器(要保证服务器已经被动打开了)。connect 动作会使客户 TCP 发送一个 SYN(我想和你(服务器)同步) 分节,它告

2014-04-08 13:22:40 304

原创 Data 语义学(2)

四、"继承"与 Data Member  (1). 只有继承没有多态  先来看个例子     1 #include 2 3 using namespace std; 4 5 class A 6 { 7 public: 8 // 9 private:10 int val;11 char c1;12

2014-04-08 13:22:38 348

原创 Data 语义学(1)

一、Data Member 的绑定(The binding of Data Member) 1 extern float x; 2 3 class Point3d 4 { 5 public: 6 Point3d( float, float, float); 7 float X() const { return x; } 8 void

2014-04-08 13:22:36 366

原创 一个类到底有多大?

我们知道一个int型、char型或一个结构体,我们都能大致的知道他的大小,那么一个类的大小你能否知道呢?下面看一个例子 #include 2 3 using namespace std; 4 5 /*struct st 6 { 7 char ch; 8 int in; 9 }; 10 */ 11 class X

2014-04-08 13:22:34 426

原创 构造函数语义学之程序转化语义学(2)

在 构造函数语义学之程序转化语义学(1) 中编译器做了一些优化,有时他还会给你的程序更多的优化:  (1) 在使用者层面做优化  如果程序员顶一个计算用的 constructor:    X bar( const T &y, const T &z )    {      X xx;      // ...以 y 和 z 来处理 xx      return xx; 

2014-04-08 13:22:32 307

原创 构造函数语义学之程序转化语义学(1)

大家知道初始化与赋值是有区别的,那么有哪几种初始化的方式呢?有以下三种情况://这句话可能有问题,回头修改!  (1).明确的初始化操作(Explicit Initialization)  (2).参数的初始化(Argument Initialization)  (3).返回值的初始化(Explicit Initialization)  先来看(1)---明确的初始化操作,这种比较

2014-04-08 13:22:30 337

原创 构造函数语义学之Copy Constructor构建操作(2)

二、详述条件 3 和 4  那么好,我又要问大家了,条件1 和 2比较容易理解。因为member object或 base class 含有copy constructor。那么member object所在的class或者base class的derived class需要合成一个nontrivial copy constructor来调用他的member constructor 或 bas

2014-04-08 13:22:28 420

原创 构造函数语义学之Copy Constructor构建操作(1)

一、Copy Constructor的构建操作  就像default constructor一样,如果class没有申明一个copy constructor,就会隐含的声明或隐含的定义一个。生成的copy constructor也分为trivial和nontrivial两种。只有nontrivial的实体才会被合成于程序之中。决定一个copy constructor是否为trivial的标准在

2014-04-08 13:22:25 438

原创 构造函数语义学之Default Constructor构建操作

一、Default Constructor的构建操作  首先大家要走出两个误区:    1).任何class如果没有定义default constructor,就会被合成一个来。    2).便以其合成出来的default constructor 会明确设定“class”内每一个data member的默认值。  那么在什么情况下,编译器才会合成一个 default constru

2014-04-08 13:22:23 349

原创 c++子类继承父类的覆盖问题

废话少说,先看一段代码!1 #include 2 #include string>3 using namespace std;4 5 class A6 {7 public:8 int val;9 };10 class B:public A11 {12 public:13 int val;14 };15 int main()16 {

2014-04-08 13:22:21 502

原创 C++中自己理解的一些细节哈

对于大牛来说,我写的可能很低级哈,留给自己看,以后遇到的都慢慢补充哈!^^1.每一个类定义结束后,不要忘了在类的结束符"}"后面加上一个";"哦!2.构造函数和析构函数肯定是不能只申明而不定义的,因为这个两个函数无论如何都会被调用。其他成员函数倒是可以只申明而不定义---只要你不调用它!3.一个类会隐含的提供构造函数、构造函数、复制构造函数、赋值函数、析构函数!4.一个空类或结构体

2014-04-08 13:22:19 340

原创 学习C++所需看的书和顺序

初学:《C++ 编程思想》《C++ Primer》《The C++ Programming Language》提高:《C++ 的发展与演化》《深度探索C++ 事物模型》进阶:《Effectie C++》/ 《More Effective C++》《C++ 沉思录》泛型编程:《STL源码剖析》《C++ 涉及心思为---泛型编程与设计模式之应用》《C++

2014-04-08 13:22:17 903

原创 C++中强制变换之const_cast

今天学习了一下C++中的强制转换,看了const_cast,我发现了这个转换关键字的奇怪之处,于是把它记录一下,废话不说,先看一个程序: 1 #include 2 3 using namespace std; 4 5 int main() 6 { 7 const int val = 5; 8 int test =5; 9 //i

2014-04-08 13:22:15 298

原创 Effective c++ 第一章 让自己习惯C++

条款 01:c++是一个语言联邦而不是一种单一的语言,  它包括:    1、C语言:没有模版、没有异常、没有重载……    2、Object-Oriented C++:class、析构函数、构造函数、封装、继承、多态、虚函数、动态绑定……    3、Template c++:唯template适用    4、STL:容器、迭代器、算法以及函数对象  总结:而我现在会了一点

2014-04-08 13:22:11 310

空空如也

空空如也

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

TA关注的人

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