自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 过滤器与拦截器

过滤器与拦截器的区别1、拦截器是基于java的反射机制的,而过滤器是基于函数回调。2、拦截器不依赖与servlet容器,过滤器依赖与servlet容器。3、拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用。4、拦截器可以访问action上下文、值栈里的对象,而过滤器不能访问。5、在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调...

2018-11-29 11:45:29 239

原创 Spring MVC学习

走在C++转Java的道路上。。。。。。你看生活的真相里,有数不清的残酷,也有说得出的幸福,我们都是平凡世界里的英雄,有期待,有理想,有伸手可及的远方,也有遥不可及的梦想…送给还在坚持走开发的小伙伴们!Spring的模型-视图-控制器(MVC)框架是围绕一个DispatcherServlet来设计的,这个Servlet会把请求分发给各个处理器,并支持可配置的处理器映射、视图渲染、本地化、时区与...

2018-11-09 18:04:22 266

原创 秋招面经总结

今天迎来了西安的第一场雪,随着雪花的到来那段痛并快乐着的日子渐渐的也不再被想起,没错,那就是秋招!经过秋招,我尝尽了求职的酸甜苦辣~-~那真是一个难忘的经历!在这期间,拿到过offer,也被拒过,也拒offer,经历过无数次失败,最终还是圆满结束!具体的就不说了,感兴趣的可以私聊下面给出我的秋招面经总结,希望可以帮助有需要的小伙伴找到心仪的工作!·项目用到线程池 为什么要用线程池优

2017-11-19 21:36:01 564 2

原创 死锁产生的原因以及解决方法

死锁:当一组进程中的所有进程都在等待一个事件(等待请求事件的释放),而只有这组进程中的其它阻塞的进程才可以触发该事件。这时就称这组进程发生死锁。死锁产生的原因:(1)因为系统资源不足(2)进程运行推进的顺序不合适(3)资源分配不当死锁产生的条件:(1)互斥:一次只有一个进程可以使用一个资源。其它进程不能访问已分配给其它进程的资源。(2)占有且等待:当一个

2017-09-13 23:03:43 1255

原创 libevent源码剖析

你的项目为什么使用libevent网络库呢??咳咳~~本篇对libevent进行简单剖析~首先说几点libevent的显著亮点: **1、事件驱动,高性能; 2、轻量级,专注于网络;不如ACE那么臃肿庞大; 3、源代码相当精炼、易读; 4、跨平台,支持windows、linux、*BSD和Mac Os; 5、支持多种I/O多路复用技术,epoll、poll、dev/poll、select和

2017-09-13 21:35:59 990

原创 new/malloc和delete/free的区别

new/malloc和delete/free都可用于申请动态内存和释放内存 ~~一、new/malloc和delete/free的区别?1、malloc与free是C++/C 语言的标准库函数,malloc/free需要库文件支持,而new/delete 是C++的运算符,不需要库文件支持2、C++中new/delete能调用构造函数和析构函数,而malloc/

2017-09-13 19:38:45 548

原创 进程间通信

进程间的通讯方式有:管道、消息队列、信号量、共享内存管道管道是一种半双工的通信方式,数据只能单向流动;管道在内存中存取数据,磁盘上只保留管道的信息,故管道的大小恒为0。管道的实质是一个内核缓冲区,进程以先进先出的方式从缓冲区存取数据:管道一端的进程顺序地将进程数据写入缓冲区,另一端的进程则顺序地读取数据,该缓冲区可以看做一个循环队列,读和写的位置都是自动增加的,一个

2017-09-07 22:36:48 252

原创 进程和线程的区别

面试中被问到几率最大的问题就是进程和线程的区别,本篇就聊聊关于进程和线程的事情吧一、定义进程:一个正在执行中的程序,或者一个正在计算机上执行的程序实例。进程是系统进行资源分配和调度的基本单位。进程四要素:1、可供执行的程序2、专用的系统堆栈空间3、在内核中的task_struct数据结构(户口),记录着进程所占的各项资源3、独立的用户空间线程

2017-09-06 15:57:56 346

原创 服务器模型——C/S模型和P2P模型

呦呦切克闹,煎饼果子来一套本篇学习两种服务器模型~~TCP/IP协议在设计和实现上并没有客户端和服务器的概念,在通信过程中所有机器都是对等的。但由于资源都被数据提供者所垄断,所以几乎所有的网络应用程序都很自然地采用了下图所示的C/S(客户端/服务器)模型。(1)C/S(客户端/服务器)模型:所有客户端都通过访问服务器来获取所需的资源。C/S模型的逻辑很简单。服务器启

2017-09-03 21:26:08 7479

原创 为什么epoll比select和poll更高效

常见的面试问题之一就是为什么epoll比select和poll高效?本篇就来总结一下它们三者之间的区别~~一、select、poll、epoll三者的特点及区别(1)select系统调用select创建了3个文件描述符集(fd_set)并拷贝到内核中,分别监听读、写、异常动作。这里收到单个进程所能打开的fd的限制,默认为1024.采用轮询方式,遍历所有的fd,最后返回一个文件描

2017-09-03 17:18:52 3155 2

原创 select源码剖析

我左看右看,上看下看,一不小心看懂了select→_→现在就让它现出原形~*int select(int nfds,fd_set *readfds,fd_set *writefds,fd_set *exceptfds,struct timeval *timeout)1)nfds参数指定被监听的文件描述符的总数。它通常被设置为select监听的所有的文件描述符中的最大值加1。因为文件描述符是从0开始计

2017-09-02 21:51:43 432

原创 poll源码剖析

下雨天最适合剖源码了→_→**老套路,在看源码之前,先来看看poll源码中的重要数据结构。。。struct poll_wqueues { poll_table pt;//实质上只有一个函数指针 struct poll_table_page * table;//记录poll_table_entry结构的第一个元素的地址 int error;};struct poll_tab

2017-09-02 15:23:40 410

原创 超文本传送协议HTTP

我们每天使用的http到底是什么呢?本篇就学习一下超文本传送协议HTTP~-~1、HTTP协议的特点:(1)HTTP是面向事务的应用层协议,它是万维网上能够可靠地交换文件(包括文本、声音、图像等各种多媒体文件)的重要基础。(2)HTTP协议是无连接的。HTTP使用了面向连接的TCP作为运输层协议,保证了数据的可靠传输。HTPP不必考虑数据在传输过程中被丢弃又怎样被重传。(3)HTT

2017-08-26 23:04:35 1250

原创 网络层协议——IP协议

1、IP协议的特点:无状态、无连接、不可靠无状态:指IP通信双方不同步传输数据的状态信息,因此所有IP数据报的发送、传输和接收都是相互独立、没有上下文关系的。无连接:指IP通信双方都不长久的维持对方的任何信息。不可靠:指IP协议不能保证IP数据报准确地到达接收端,它只承诺尽最大努力。2、IPv4头部结构4位版本号:指定IP协议的版本。对IPv4来说,其值

2017-08-24 16:59:34 597

原创 TCP拥塞控制——快重传和快恢复

**上一篇总结了慢开始和拥塞避免,本篇就来学习下快重传和快恢复吧~-~1、快重传快重传算法首先要求接收方每收到一个失序的报文段就立即发出重复确认(为的是使发送方及早的知道有报文段没有到达对方)而不要等到自己发送数据时才捎带确认。快重传算法规定,发送方只要一连收到三个重复确认就应当立即重传对方尚未收到的报文段,而不必继续等待为其设置的重传计时器到期。

2017-08-23 14:55:27 18647 5

原创 TCP拥塞控制——慢开始和拥塞避免

本篇开始详细讲解TCP拥塞控制的方法——慢开始和拥塞避免~~1、慢开始发送方维持一个叫做拥塞窗口cwnd的状态变量。拥塞窗口的大小取决于网络的拥塞程度,并且动态地在变化。发送方让自己的发送窗口等于拥塞窗口。如果还考虑接收方的接受能力,那么发送窗口还可能小于拥塞窗口。发送方控制拥塞窗口的原则是:只要网络没有出现拥塞,拥塞窗口就在增大一些,以便把更多的分组发送出去。但只要网

2017-08-23 14:13:32 13357 2

原创 TCP的拥塞控制原理

面试中经常会被问到,如何解决网络拥塞问题?那么首先需要知道什么是拥塞以及拥塞控制的原理~-~**1、拥塞:在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络的性能就会变坏,这种情况就叫做拥塞。2、拥塞控制:提高网络利用率,降低丢包率,并保证网络资源对每条数据流的公平性。3、拥塞控制与流量控制的关系拥塞控制是为了防止过

2017-08-23 00:52:57 1212

原创 TCP的流量控制

一般来说。我们总是希望数据传输的更快一些。但如果发送发把数据发送的过快,接收方就可能来不及接收,这就会造成数据的丢失。因此,需要利用滑动窗口实现流量控制~-~**流量控制:让发送方发送速率不要太快,要让接收方来得及接收 利用滑动窗口实现流量控制,告诉对方下一次我能接收的最大数据长度发送方的发送窗口不能超过接收方给出的接收窗口的数值。TCP的窗口单位是

2017-08-23 00:13:51 421

原创 TCP可靠传输——滑动窗口

TCP是如何保证可靠传输的?来看看滑动窗口~-~1、什么是滑动窗口?TCP的滑动窗口是以字节为单位的。现假定A收到了B发来的确认报文段,其中窗口是20字节,而确认号是31.根据这两个数据,A构造出了自己的发送窗口发送方A的发送窗口表示:在没有收到B的确认的情况下,A可以连续把窗口内的数据都发送出去。凡是已经发送过的数据,在未收到确认之前都必须暂时保留,以便在

2017-08-22 23:08:28 1609

原创 传输层协议——UDP协议

用户数据报协议UDP:UDP在传送数据之前不需要先建立连接。远地主机的运输层在收到UDP报文后,不需要给出任何确认。1、UDP的特点:(1)UDP是无连接的。即发送数据之前不需要建立连接(当然,发送数据结束时也没有连接可释放),因此减少了开销和发送数据之前的时延。(2)UDP使用尽最大努力交付,即不保证可靠交付,因此主机不需要维持复杂的连接状态表。(3)UDP是面向报文的。对应

2017-08-20 23:11:43 769

原创 传输层协议——TCP协议

1、TCP服务的特点:面向连接、字节流、【面向连接】使用tcp协议通信的双方必须先建立连接,然后才能开始数据的读写。双方都需要为该连接分配必要的内核资源,以管理连接的状态和连接上数据的传输。tcp连接时全双工的,即双方的数据读写可以通过一个连接进行。完成数据交换之后,通信双方都必须断开连接以释放系统资源。 tcp协议的这种连接是一对一的,所以基于广播和多播的应用程序

2017-08-20 21:26:54 1016

原创 网络基础知识回顾

本篇参考谢希仁老师的《计算机网络》对网络基础知识简单总结*~*1、计算机网络结构划分分层可以带来哪些好处?(1)各层之间是独立的。某一层并不需要知道它的下一层是如何实现的,而仅仅需要知道该层通过层间的接口(即界面)所提供的服务。由于每一层只实现一种相对独立的功能,因而可将一个难以处理的复杂问题分解为若干个比较容易处理的较小问题。(2)灵活性好。当任何一层发生变化时,只要层次接口关系

2017-08-20 19:15:16 244

原创 TCP三次握手和四次挥手总结

TCP我来了→_→*1、TCP服务的特点:面向连接、字节流、可靠传输使用tcp协议通信的双方必须先建立连接,然后才能开始数据的读写。双方都需要为该连接分配必要的内核资源,以管理连接的状态和连接上数据的传输。tcp连接时全双工的,即双方的数据读写可以通过一个连接进行。完成数据交换之后,通信双方都必须断开连接以释放系统资源。 tcp协议的这种连接是一对一的,所以基于广播和多播的应用程序

2017-08-20 14:05:52 483 1

原创 多进程和多线程的选择

多线程和多进程的对比我们按照多个不同的维度,来看看多线程和多进程的对比(注:因为是感性的比较,因此都是相对的,不是说一个好得不得了,另外一个差的无法忍受)。 对比维度多进程多线程总结数据共享、同步数据共享复杂,需要用IPC;数据是分开的,同步简单因为共享进程数据,数据共享简单,但也是因为这个

2017-08-15 17:26:16 228

原创 线程池及适用场合

1、为什么需要线程池?目前的大多数网络服务器,包括Web服务器、Email服务器以及数据库服务器等都具有一个共同点,就是单位时间内必须处理数目巨大的连接请求,但处理时间却相对较短。传统多线程方案中我们采用的服务器模型则是一旦接受到请求之后,即创建一个新的线程,由该线程执行任务。任务执行完毕后,线程退出,这就是是“即时创建,即时销毁”的策略。尽管与创建进程相比,创建线程的时间已经大大的缩短,

2017-08-15 17:21:49 590

原创 如何用程序确认当前系统的存储模式(大端模式、小端模式)

如何用程序确认当前系统的存储模式?这也是面试中常被问道的问题,首先需要了解什么是大端模式,什么是小端模式?大端模式(Big_endian):字数据的高字节存储在低地址中,而字数据的低字节则存放 在高地址中。 小端模式(Little_endian):字数据的高字节存储在高地址中,而字数据的低字节则存放 在低地址中。 请写一个 C 函数,若处理器是 Big_endian

2017-08-12 22:47:28 365

原创 C语言中你不知道的事——柔性数组

也许你从来没有听说过柔性数组(flexible array)这个概念,但是它确实是存在的。 C99 中,结构中的后一个元素允许是未知大小的数组,这就叫做柔性数组成员,但结 构中的柔性数组成员前面必须至少一个其他成员。柔性数组成员允许结构中包含一个大小可 变的数组。sizeof 返回的这种结构大小不包括柔性数组的内存。包含柔性数组成员的结构用 malloc ()函数进行内存的动态分配,并且分配的

2017-08-12 22:35:41 465

原创 易变的关键字----volatile

volatile 关键字和 const 一样是一种类型修饰符,用它修饰的变量表示可以被某些编译器 未知的因素更改,比如操作系统、硬件或者其它线程等。遇到这个关键字声明的变量,编 译器对访问该变量的代码就不再进行优化,从而可以提供对特殊地址的稳定访问。先看看下面的例子:inti=10;intj = i;//(1)语句intk = i;//(2)语句这时候编译器对代码进行优化,因为

2017-08-12 22:24:17 555

原创 epoll源码剖析

在看源码之前呢,非常有必要知道epoll的核心数据结构有哪些,一张图让你更容易看懂重要的数据结构~~(跟着图片走,让你不至于在epoll的源码里绕圈加懵圈→_→ Let’s go!) /** * 代表一个打开的文件。由内核在open时创建。当文件的所有实例都被关闭后,才释放该结构。 */struct file { /** * 用于通用文件对象链表的指针。 *

2017-08-10 22:57:35 317

原创 设计模式——观察者监听者模式

**基于map的观察者监听者设计模式 《1》回调函数 《2》MVC框架**(如下图所示) 观察者通过搜索得到都有谁对这个事件感兴趣,就告诉那些对该事件感兴趣的监听者去处理该事件,很明显一个事件和对该事件感兴趣的监听者是键值映射关系,故使用map. 版本一:监听者和观察者在同一个线程中#include <iostream>#include <memory>#include <map>

2017-08-09 19:06:38 566

原创 智能指针的交叉引用

关于智能指针的交叉引用以及解决方法~~智能指针的交叉引用会导致什么问题呢??首先,先来看以下一段代码……class B;class A{public: shared_ptr<B> _pb;};class B{public: shared_ptr<A> _pa;};int main(){ shared_ptr<A> pa(new A); shared

2017-08-09 15:40:41 1083 1

原创 设计模式———单例模式

如何实现一个类只能实例化一个对象? 单例模式,是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中一个类只有一个实例。即一个类只有一个对象实例显然单例模式的要点有三个;一是某个类只能有一个实例;二是它必须自行创建这个实例;三是它必须自行向整个系统提供这个实例。 从具体实现角度来说,就是以下三点:一是单例模式的类只提供私有的构造函数,二是类定义中含有一

2017-08-04 22:35:04 352

原创 8皇后问题————暴力解决

8后问题要求在一个8*8格的棋盘上放置8个皇后,使得他们彼此不受攻击。按照国际象棋的规则,一个皇后可以攻击与之处在同一行或同一列或同一斜线上的其他任何棋子。因此,8后问题等价于要求在一个8*8的棋盘上放置8个皇后,使得任何2个皇后不能被放在同一行或同一列或同一斜线上。int Queen8(){ int count = 0; for(int q1=0;q1<8;q1++) {

2017-08-04 17:17:17 1318

原创 把一个任意数转成radix进制数,radix(1-36)

//字符串反转函数void ReverseStr(char *str)//"abc"->"cba"{ char *p = str; char *q = str; while(*q != '\0') { q++; } //*q == '\0' char tmp; for(q--;p<q;p++,q--)//p!=q

2017-08-04 15:13:44 706

原创 epoll系统调用的API

在linux的网络编程中,很长的时间都在使用select来做事件触发。在linux新的内核中,有了一种替换它的机制,就是epoll。        相比于select,epoll最大的好处在于它不会随着监听fd数目的增长而降低效率。因为在内核中的select实现中,它是采用轮询来处理的,轮询的fd数目越多,自然耗时越多。并且,在linux/posix_types.h头文件有这样的声明:#d

2017-08-04 13:35:57 482

原创 static和const关键字的作用

static:1、修饰普通变量,修改变量的存储区域和生命周期,使变量存储在静态区,在main函数运行前就分配了空间,如果有初始值就用初始值初始化它,如果没有初始值系统用默认值来初始化它;2、修饰普通函数,表明函数的作用范围,仅在定义该函数的文件内才能使用。在多人开发项目时,为了防止与他人命名函数重名,可以将函数定位为static;3、修饰成员变量,修饰成员变量使所有的对象只保存一个该变

2017-08-04 13:09:09 280

原创 g++和gcc的区别

gcc/g++在执行编译工作的时候,总共需要4步1.预处理,生成.i的文件[预处理器cpp]2.将预处理后的文件转换成汇编语言,生成文件.s[编译器egcs]3.有汇编变为目标代码(机器代码)生成.o的文件[汇编器as]4.连接目标代码,生成可执行程序[链接器ld]gcc和g++都是GNU(一个组织)的编译器。1、对于.c后缀的文件,gcc把它当做是C程序;g++当做是C+

2017-08-02 23:17:42 469

原创 求{1,2,3}序列的全排列

博主从来都不多说废话,直接上代码!!!#include<iostream>using namespace std;template<class Type>void Swap(Type &a,Type &b)//交换函数{ Type c = a; a = b; b = c;}void Perm(int *ar,int k,int m){ if(k == m)

2017-08-02 18:31:49 1014

原创 求{1,2,3}的子集————回溯法(递归与非递归)

求ar[]={1,2,3}的子集序列,小伙伴们可以先自己尝试解一下~~#include<iostream>using namespace std;//用回溯法搜索子集树void fun(int *ar,int *br,int n)//非递归{ int k = 0; br[k] = -1; while(k >= 0) { br[k]+=1;

2017-08-02 18:12:30 1248

原创 n后问题————回溯法求解(递归与非递归)

N后问题要求在一个n*n格的棋盘上放置n个皇后,使得他们彼此不受攻击。按照国际象棋的规则,一个皇后可以攻击与之处在同一行或同一列或同一斜线上的其他任何棋子。因此,n后问题等价于要求在一个n*n的棋盘上放置n个皇后,使得任何2个皇后不能被放在同一行或同一列或同一斜线上。用回溯法解n后问题时,可以用一颗完全n叉树来表示其解空间。用可行性约束函数Place可剪去不满足行、列和斜线约束的子树。*#inclu

2017-08-02 17:11:12 1205

空空如也

空空如也

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

TA关注的人

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