自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 SYN Flood应如何应对

1 什么是SYN Flood攻击  在TCP三次握手时,服务器接收客户端的SYN请求,操作系统将为该请求分配一个TCP(Transmission Control Block),服务器返回一个SYN/ACK请求,并将处于SYN_RCVD状态(半开连接状态)。  从以上过程可以看到,如果恶意的向某个服务器端口发送大量的SYN包,则可以使服务器打开大量的半开连接,分配TCB,从而消耗大量的服务器

2016-07-29 15:04:21 730

转载 海量数据处理面试题总结

教你如何迅速秒杀掉:99%的海量数据处理面试题本文经过大量细致的优化后,收录于我的新书《编程之法》第六章中,新书目前已上架京东/当当/亚马逊  作者:July出处:结构之法算法之道blog:http://blog.csdn.net/v_july_v/article/details/7382693 前言   一般而言,标题含有“秒杀”,

2016-07-29 15:04:18 6852

原创 BFS、DFS与选课问题

1选课问题  Leetcode上有这样一道题:有代号0,1,2……n-1的n门课程。其中选择某些课程需要另一些课程作为前提条件。用一组pair来表示这些条件:[1,0],[1,2],表示如果要选修课程1,必须先选修课程0和课程2。问是否可能把这n门课程都选修一遍。  这个问题看起来相当复杂。难点在于,一门课程可能需要多门课程作为前提条件,这样就很难找到一条可以不重复地遍历所有课程的方法。

2016-07-29 15:04:15 836

原创 进程的调度

进程调度方式    进程调度方式是指当某一处进程正在处理机上执行时,若有某个更为重要或紧迫的进程需要处理,即有优先权更高的进程进入就绪队列,此时应如何分配处理机。    通常有以下两种进程调度方式:    (1)非剥夺调度方式(非抢占方式):实现简单,系统开销小,适用于大多数的批处理系统,但它不能用于分时系统和大多数的实时系统。    (2)剥夺调度方式(抢占方式):要遵循

2016-07-29 15:04:12 1109

原创 stringstream操纵string小总结

1 split字符串  之前在用C#写代码的时候,用过split函数,可以把一个字符串根据某个分隔符分成若干个字符串数组。在用C++操纵字符串的时候,我一直使用很笨的遍历的方法。为此,我问候过很多次C++标准委员会。直到某一天,我做了一个处理绝对路径的题目。  首先,我要把‘/’作为分隔符,把输入字符串split一下。下面是我的代码:  string inputString("/h

2016-07-29 15:04:10 414

原创 坑!坑!坑!防不胜防的unsigned int的运算

我很早之前就知道,unsigned int与int运算的时候,int会被转化为unsigned int来进行运算。一直觉得定这条规则的人是极度反人类的,虽说unsigned int可以表示更大的正值,但毕竟我们不太会把unsinged想像成一个负数,而一个负的int数可能在无意间就变成了最大的正数。  所以,我对这个问题很慎重。小心翼翼地,一直没怎么出过错。直到有一天。第一回合  那是

2016-07-29 15:04:07 2363 1

原创 Linux的文件权限

1 文件权限的表示  (1)字母表示法  Linux中所有文件(普通文件、目录文件、字符特殊文件、块特殊文件、管道或FIFO、符号链接、套接字)都有9个权限,如下图所示:  -rw-rw-r--就是文件a的权限了。首先最左边的-表示了文件类型,如果是目录的话,就是d;接下来的三位rw-表示了a的用户(Andy)权限、再接下来的三位rw-表示了a的组(Andy)权限,最后三位代表了其

2016-07-29 15:04:05 967

原创 【转】初识CGI

一.基本原理CGI:通用网关接口(Common Gateway Interface)是一个Web服务器主机提供信息服务的标准接口。通过CGI接口,Web服务器就能够获取客户端提交的信息,转交给服务器端的CGI程序进行处理,最后返回结果给客户端。组成CGI通信系统的是两部分:一部分是html页面,就是在用户端浏览器上显示的页面。另一部分则是运行在服务器上的Cgi程序。它们之间的通讯方式如

2016-07-29 15:04:02 1252

原创 git与github安装、配置、pull、push

操作系统是Ubuntu 16.04 LTS 64bit1 安装git  (1)安装sudo apt-get install git-core  (2)一些全局变量的初始化  在本地建立一个文件夹,然后做一些全局变量的初始化git config --global user.name 用户名或者用户IDgit config --global user.ema

2016-07-29 15:03:59 699

转载 Linux下的Makefile

Makefile 介绍———————make命令执行时,需要一个 Makefile 文件,以告诉make命令需要怎么样的去编译和链接程序。首先,我们用一个示例来说明Makefile的书写规则。以便给大家一个感兴认识。这个示例来源于GNU的make使用手册,在这个示例中,我们的工程有8个C文件,和3个头文件,我们要写一个Makefile来告诉make命令如何编译和链接这几个文件。我们的规则是:1)如

2016-07-29 15:03:57 591

原创 I/O多路复用——epoll函数

1 select的低效率  select/poll函数效率比较低,主要有以下两个原因:  (1)调用select函数后需要对所有文件描述符进行循环查找  (2)每次调用select函数时都需要向该函数传递监视对象信息  在这两个原因中,第二个原因是主要原因:每次调用select函数时,应用程序都要将所有文件描述符传递给操作系统,这给程序带来很大的负担。在高并发的环境下,无论怎样优化

2016-07-29 15:03:54 328

原创 I/O多路复用——select函数与poll函数

1 区别  同:(1)机制类似,本质上没有多大差别,管理多个描述符也是进行轮询,根据描述符的状态进行处理。(2)包含大量文件描述符的数组被整体复制于用户态和内核的地址空间之间,而不论这些文件描述符是否就绪,它的开销随着文件描述符数量的增加而线性增大。  异:poll没有最大文件描述符数量的限制。2 select函数原型  该函数准许进程指示内核等待多个事件中的任何一个发送,并只在有

2016-07-29 15:03:52 457

原创 windows下MySQL 5.7+ 解压缩版安装配置方法

方法来自伟大的互联网。1.去官网下载.zip格式的MySQL Server的压缩包,根据需要选择x86或x64版。注意:下载是需要注册账户并登录的。2.解压缩至你想要的位置。3.复制解压目录下my-dafault.ini至bin目录下,重命名为my.ini。并添加以下内容(路径要根据自己的情况修改呀)。没有data目录不要紧,下一步处理这个事情。[mysql]# 设置mys

2016-07-29 15:03:49 367

原创 socket服务器开发中的SO_REUSEADDR选项与让人心烦的TIME_WAIT

1 发现问题    我在开发一个socket服务器程序并反复调试的时候,发现了一个让人无比心烦的情况:每次kill掉该服务器进程并重新启动的时候,都会出现bind错误:error:98,Address already in use。然而再kill掉该进程,再次重新启动的时候,就bind成功了。真让人摸不着头脑。难道一定要尝试两次才显得真诚?这不科学!  我的第一反应是kill进程的时候,并

2016-07-29 15:03:47 2150

原创 new与malloc的区别

看起来,它们的不同只是new比malloc用起来更方便而已。仅仅是这样吗?不是吗?  1 来源不同:    1)new/delete是C++中的操作符,而malloc/free是C中的标准库函数,需要库文件支持。为了保证程序的可读性和正确性,new与delete、malloc与free要配对使用;    2)可重载自定义:重载new/delete操作符,可实现在申请内存的时候自定义分配

2016-07-29 15:03:44 430

原创 C++ STL 迭代器失效问题

之前看《C++ Primier》的时候,也解到在顺序型窗口里insert/erase会涉及到迭代器失效的问题,并没有深究。今天写程序的时候遇到了这个问题。1 莫名其妙的Erase    最初我的程序是酱紫的,别说话,我知道这样是有问题的,可这样是最直观的想法 int arr[]={0,1,2,3,4,5,6,7,8,9,10};   vectorint> a(arr,arr+s

2016-07-29 15:03:42 7002

原创 面向对象编程要点

1 面向对象与面向过程的本质区别  从思想来讲,面向过程强调的是做了一件什么事情,强调这个过程以及做的方法;而面向对象强调的是对象,也就是谁做了一件事情,这件事情是此对象的一个属性,使用者只需要知道这个对象可以做这个事情,不需要知道具体它是怎么样一个过程。2 三要素  (1)封装:把过程和数据包围起来,对数据的访问只能通过已定义的接口。  (2)继承:一种联结类的层次模型,允许、鼓

2016-07-29 15:03:39 598

原创 Stack与Heap的区别

申明:这里所说的栈和堆是程序内存管理中的栈和堆,而不是数据结构里的栈和堆。  (1)保存的内容不同:栈里保存的是局部变量,而堆里保存的是动态申请的变量。  (2)栈里的内存系统自动申请和释放,程序执行出申请的区域,内存就会自动释放,而栈里的内存需要手动地申请和释放(malloc/free、new/delete)。如果不及时释放会造成内存泄漏(Memory Leak)现象的发生。  (3

2016-07-29 15:03:36 862

原创 IPv4中IP地址分类

分三个部分进行讲述:  1 五类IP  2 特殊用途的IP  3 私有IP 1 五类IP  IPV4简单粗暴地把IP地址分为五类。分类方法如下图所示:也就是说,分为以下几类:A: 0.0.0.0-127.255.255,其中段0和127不可用B: 128.0.0.0-191.255.255.255C: 192.0.0.0-223.255.255.255

2016-07-29 15:03:34 2495

原创 在浏览器中输入网站域名并按下回车

主要有以下几个部分:1 DNS解析,获取Web服务器IP2 建立TCP连接3 向Web服务器发送HTTP请求4 Web服务器收到请求并处理5 Web服务器返回响应6 浏览器对响应解码,并显示数据7 页面显示完成后,浏览器发送异步请求8 关闭TCP连接下面详细过程:1 DNS解析,获取Web服务器IP  请求方按照以下顺序进行DNS解析:  (1)浏览

2016-07-29 15:03:31 3080 1

原创 C++中的常量折叠

先看例子:#include using namespace std; int main() { const int a = 10; int * p = (int *)(&a); *p = 20; cout"a = "", *p = "endl; return 0; }   输出:a = 10, *p

2016-07-29 15:03:29 329

原创 C++ 构造函数中调用虚函数

我们知道:C++中的多态使得可以根据对象的真实类型(动态类型)调用不同的虚函数。这种调用都是对象已经构建完成的情况。那如果在构造函数中调用虚函数,会怎么样呢?有这么一段代码:class A{public: A ():m_iVal(0){test();} virtual void func() { std::cout‘ ’;} void test(){

2016-07-29 15:03:27 2287

原创 C++ 中引用与指针的区别

1.引用只是变量的一个别名,并不占用内存空间,而指针是一个变量,里面保存着被指向的变量在内存中的地址;2 引用只能在定义时被初始化一次,之后不可变,而指针可变;3 引用没有 const,指针有 const;4 引用使用时无需解引用(*),指针需要解引用;5 “sizeof 引用”得到的是所指向的变量(对象)的大小,而“sizeof 指针”得到的是指针本身(所指向的变量或对象的地址)

2016-07-29 15:03:24 270

原创 C++中static用法总结

1用于局部变量  C++中局部变量有三种:  (1)auto:此关键词常常省略。auto type a 常常简写为type a。    如:      int a=auto int a    存储在内存的栈中,只在此局部区域有定义,程序执行过此局部区域自动释放。  (2)static:有以下特点:    (1)声明在局部区域,第一次执行时定义,以后就不再定义;   

2016-07-29 15:03:22 369

原创 C++中const用法总结

1修饰变量/指针  注意以下几种修饰的区别:    (1)const int * a;    (2)int const *a;    (3)int * const b;    (4)int const* const c;  其中前两种指a是一个指向const int变量的指针;(3)b是一个const型的指向int变量的指针;(4)c是一个const型的指向const in

2016-07-29 15:03:19 349

原创 数据库概念要点

1 数据库模型  层次模型,网状模型,关系模型。 2 关系型数据库的设计范式  共有6种:1-5范式+BCNF。要求不高的况下只需要满足1-3范式即可:  (1)第一范式:关系模式R的每一个关系r的属性都是不可分割的数据项,那么称R是第一范式的模式。  (2)第二范式:关系模式R满足第一范式,且每个非主属性完全函数依赖于候选键(或主键)  (3)第三范式:关系模式R满足第二

2016-07-29 15:03:17 546

原创 进程/线程要点

进程与PCB    进程:进程是程序的一次执行过程,是系统进行资源分配和调度的一个独立单位。    进程实体(进程映像):由程序段、相关数据段和PCB三部分构成。进程是动态的,进程实体是静态的。    PCB(进程控制块):系统利用PCB来描述进程的基本情况和运行状态,进而控制和管理进程;所谓创建进程,实际上是创建进程映像中的PCB;PCB是进程存在的唯一标志。进程

2016-07-29 15:03:14 414

原创 HTTP/HTTPs要点

Http(超文本传输协议)是一个属于应用层的面向对象的协议。主要特点:   (1)支持客户/服务器模式。   (2)简单快速: 客户向服务器请求服务时, 只需传送请求方法和路径。 请求方法常用的有GET、 HEAD、POST。 每种方法规定了客户与服务器联系的类型不同。 由于HTTP协议简单, 使得HTTP服务器的程序规模小,因而通信速度很快。   (3)灵活: HTTP允

2016-07-29 15:03:11 375

原创 TCP/IP 要点

TCP和UDP的区别 TCPUDP是否连接面向连接面向非连接应用场合可靠的不可靠的速度慢    快传送数据字节流数据报      TCP如何保证可靠性:7点    (1)数据被分割成最适合发送的数据块    (2)每一个被发送的数据

2016-07-29 15:03:09 319

原创 C++中派生类对象的内存布局

主要从三个方面来讲:  1 单一继承  2 多重继承  3 虚拟继承1 单一继承(1)派生类完全拥有基类的内存布局,并保证其完整性。  派生类可以看作是完整的基类的Object再加上派生类自己的Object。如果基类中没有虚成员函数,那么派生类与具有相同功能的非派生类将不带来任何性能上的差异。另外,一定要保证基类的完整性。实际内存布局由编译器自己决定,VS里,把虚指针放在最

2016-07-29 15:03:06 2387

原创 32位机与64位机数据大小

32位编译器:       char :1个字节      char*(即指针变量): 4个字节(32位的寻址空间是2^32, 即32个bit,也就是4个字节。同理64位编译器)      short int : 2个字节      int:  4个字节      unsigned int : 4个字节      float:  4个字节      double:

2016-07-29 15:03:04 381

原创 C++中的多态与虚函数的内部实现

1、什么是多态2、几个相关概念3、几个简单的例子4、运行时多态以及虚函数的内部实现

2016-01-13 14:59:04 566

原创 构造函数、析构函数、虚析构函数、纯虚析构函数要点总结

1、派生类的构造函数、析构函数默认会调用基类的构造函数、析构函数。顺序:基类构造、派生类构造;派生类析构,基类析构。例:class Base{public: Base() { cout << "Base:Constructing" << endl; } ~Base() { cout << "Base: Destructing!" << endl;

2016-01-12 11:56:17 716

空空如也

空空如也

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

TA关注的人

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