<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[oceanperfect的专栏]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/oceanperfect</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; oceanperfect]]></copyright><item><title><![CDATA[封装dpdk接口成静（动）态库（同源同宿、多通道队列收包），然后在C++应用中使用方法]]></title><link>https://blog.youkuaiyun.com/oceanperfect/article/details/75226855</link><guid>https://blog.youkuaiyun.com/oceanperfect/article/details/75226855</guid><author>oceanperfect</author><pubDate>Mon, 17 Jul 2017 14:27:26 +0800</pubDate><description><![CDATA[dpdk的接口全部都是C语言实现的，它的makefile模版也很简单，只需改变其宏就可以在生成可执行文件、静态库、动态库之间切换。本篇博文主要给出如果使用dpdk封装成静态库后，在C++应用程序中编译使用的方法。
一、封装dpdk抓包接口

源代码实现的功能：
1、可通过配置文件进行配置多个队列收取数据包，并且保证数据包的同源同宿（或者负载均衡，二者取其一，具体方法须修改网卡驱动程序）；]]></description><category></category></item><item><title><![CDATA[基于C++ STL利用CAS原子操作封装的无锁list]]></title><link>https://blog.youkuaiyun.com/oceanperfect/article/details/74940230</link><guid>https://blog.youkuaiyun.com/oceanperfect/article/details/74940230</guid><author>oceanperfect</author><pubDate>Tue, 11 Jul 2017 09:51:36 +0800</pubDate><description><![CDATA[在做高吞吐量的项目中，性能是必须考虑的一个重要因素。而数据同步则又是重中之重，常常需要使用到锁，但是锁的使用会造成性能下降。这个时候，CAS就大显身手了，关于CAS，这里就不再多说。直接贴我基于STL list的封装的无锁list，其他容器则类似。
文件1：lockfree_list.hpp

#ifndef LOCK_FREE_LIST_HPP
#define LOCK_FREE_LIST]]></description><category></category></item><item><title><![CDATA[基于boost库的线程安全queue]]></title><link>https://blog.youkuaiyun.com/oceanperfect/article/details/72911791</link><guid>https://blog.youkuaiyun.com/oceanperfect/article/details/72911791</guid><author>oceanperfect</author><pubDate>Thu, 08 Jun 2017 11:34:26 +0800</pubDate><description><![CDATA[STL的queue多线程下是不安全的，当然网上有很多无锁队列，如boost::lockfree::queue就是很好的东西。这里实现一个互斥锁的线程安全队列，基于STL的QUEUE。
/************************************************************************************************
	File Nam]]></description><category></category></item><item><title><![CDATA[IO基础入门之I/O多路复用技术]]></title><link>https://blog.youkuaiyun.com/oceanperfect/article/details/54290138</link><guid>https://blog.youkuaiyun.com/oceanperfect/article/details/54290138</guid><author>oceanperfect</author><pubDate>Mon, 09 Jan 2017 16:25:43 +0800</pubDate><description><![CDATA[在I/O编程过程中，当需要同时处理多个客户端接入请求时，可以利用多线程或者I/O多路复用技术进行处理。I/O多路复用技术通过把多个I/O的阻塞复用到同一个select的阻塞上，从而使得系统在单线程的情况下可以同时处理多个客户端请求。与传统的多线程/多进程模型比，I/O多路复用的最大优势是系统开销小，系统不需要创建新的额外进程或者线程，也不需要维护这些进程和线程的运行，降底了系统的维护工作量，节省了]]></description><category></category></item><item><title><![CDATA[C++采用内存映射方式高效率读写大数据]]></title><link>https://blog.youkuaiyun.com/oceanperfect/article/details/52192602</link><guid>https://blog.youkuaiyun.com/oceanperfect/article/details/52192602</guid><author>oceanperfect</author><pubDate>Fri, 12 Aug 2016 16:09:22 +0800</pubDate><description><![CDATA[在有时候，项目的数据量特别大，而且源源不断的到来，这个时候，利用传统的IO文件流写文件势必效率很低跟不上节奏。不妨采用内存映射方式来写文件，达到高效。
我们这里采用mmap这种内存映射方法：
一、mmap是一种内存映射文件的方法，即将一个文件或者其它对象映射到进程的地址空间，实现文件磁盘地址和进程虚拟地址空间中一段虚拟地址的一一对映关系。实现这样的映射关系后，进程就可以采用指针的方式读写操作这]]></description><category></category></item><item><title><![CDATA[CENTOS 6 通过YUM升级GCC到4.7/4.8]]></title><link>https://blog.youkuaiyun.com/oceanperfect/article/details/51887526</link><guid>https://blog.youkuaiyun.com/oceanperfect/article/details/51887526</guid><author>oceanperfect</author><pubDate>Tue, 12 Jul 2016 11:37:44 +0800</pubDate><description><![CDATA[第一阶段：升级到4.7

[root@01314.CN ~]# cd /etc/yum.repos.d
[root@01314.CN yum.repos.d]# wget http://people.centos.org/tru/devtools-1.1/devtools-1.1.repo 
[root@01314.CN yum.repos.d]# yum --enablerepo=testi]]></description><category></category></item><item><title><![CDATA[使用Git创建一个版本]]></title><link>https://blog.youkuaiyun.com/oceanperfect/article/details/51239990</link><guid>https://blog.youkuaiyun.com/oceanperfect/article/details/51239990</guid><author>oceanperfect</author><pubDate>Mon, 25 Apr 2016 09:52:27 +0800</pubDate><description><![CDATA[一、首先在Github中创建一个版本库

1、申请一个GitHub帐号；
2、创建一个版本库：

3、输入版本库名字，然后设置相关权限，如是否公开等，然后点击Create repository完成创建：

二、提交代码到版本库中
1、打开Git Shell，进入工程目录；
2、拷贝版本库的git文件到本地：git clone https://github.com/oceanper]]></description><category></category></item><item><title><![CDATA[android学习笔记（一）]]></title><link>https://blog.youkuaiyun.com/oceanperfect/article/details/51207666</link><guid>https://blog.youkuaiyun.com/oceanperfect/article/details/51207666</guid><author>oceanperfect</author><pubDate>Thu, 21 Apr 2016 11:52:21 +0800</pubDate><description><![CDATA[一、建立一个活动（activity）的一般步骤：
    创建一个类，比如FirstActivity.class,并重写onCreate(Bundle savedInstanceState);
    创建一个layout文件，为界面布局；

    在AndroidMainfest.xml中注册活动；


二、给按钮增加响应事件：
    在onCreate中：
    But]]></description><category></category></item><item><title><![CDATA[kali 环境下的arp中间人攻击]]></title><link>https://blog.youkuaiyun.com/oceanperfect/article/details/51189694</link><guid>https://blog.youkuaiyun.com/oceanperfect/article/details/51189694</guid><author>oceanperfect</author><pubDate>Tue, 19 Apr 2016 13:50:28 +0800</pubDate><description><![CDATA[apr攻击原理：ARP攻击就是通过伪造IP地址和MAC地址实现ARP欺骗，能够在网络中产生大量的ARP通信量使网络阻塞，攻击者只要持续不断的发出伪造的ARP响应包就能更改目标主机ARP缓存中的IP-MAC条目，造成网络中断或中间人攻击。
ARP攻击主要是存在于局域网网络中，局域网中若有一台计算机感染ARP木马，则感染该ARP木马的系统将会试图通过“ARP欺骗”手段截获所在网络内其它计算机的通信信]]></description><category></category></item><item><title><![CDATA[java学习笔记（三）]]></title><link>https://blog.youkuaiyun.com/oceanperfect/article/details/51189620</link><guid>https://blog.youkuaiyun.com/oceanperfect/article/details/51189620</guid><author>oceanperfect</author><pubDate>Tue, 19 Apr 2016 13:39:21 +0800</pubDate><description><![CDATA[一、java多态
1、多态是指同一个行为具有多个不同的表现形式或形态的能力；
2、多态性是对象多种表现形式的体现；
3、重写的方法能在运行时调用，不管编译的时候源代码中引用变量是什么数据类型；

二、java抽象类
1、抽象类是一个类中没有包含足够的信息来描绘一个具体的对象；
2、抽象类与普通类唯一的区别就是它不能实例化对象；
3、抽象类定义：public abstract cla]]></description><category></category></item><item><title><![CDATA[java学习笔记（二）]]></title><link>https://blog.youkuaiyun.com/oceanperfect/article/details/51187978</link><guid>https://blog.youkuaiyun.com/oceanperfect/article/details/51187978</guid><author>oceanperfect</author><pubDate>Tue, 19 Apr 2016 10:18:04 +0800</pubDate><description><![CDATA[一、java继承
1、继承：一个对象从另一个对象获取属性的过程；
2、java一个子类只能拥有一个父类，不同于C++支持多继承；
3、所有java的类均是由java.lang.Object类继承而来的，所以object是所有类的祖先类；
4、通过extends关键字可以申明一个类是继承另外一个类而来的，如：public class B extends A｛｝；
5、IS-A关系，如Dog]]></description><category></category></item><item><title><![CDATA[java学习笔记（一）]]></title><link>https://blog.youkuaiyun.com/oceanperfect/article/details/51181050</link><guid>https://blog.youkuaiyun.com/oceanperfect/article/details/51181050</guid><author>oceanperfect</author><pubDate>Mon, 18 Apr 2016 17:08:40 +0800</pubDate><description><![CDATA[一、java对象和类
1、java命名规则：
    源文件名：与类名保持一致，且首字母必须大写；
    类名：类名的首字母应该大写，形如MyFirstJavaClass;
    主方法入口：所有的java程序由public static void main(String[] args)开始；
2、java修饰符，主要有两类：
    可访问修饰符：default,public,p]]></description><category></category></item><item><title><![CDATA[CentOS 配置 samba服务器建立共享文件夹]]></title><link>https://blog.youkuaiyun.com/oceanperfect/article/details/51149995</link><guid>https://blog.youkuaiyun.com/oceanperfect/article/details/51149995</guid><author>oceanperfect</author><pubDate>Thu, 14 Apr 2016 11:11:20 +0800</pubDate><description><![CDATA[1、安装samba服务端和客户端；
yum install samba
2、设置共享目录的权限为777；
chmod 777 /home/work
3、修改samba配置文件；
vim /etc/samba/smb.conf
加入以下内容：
[work]
        path = /home/work
        public=yes
        writable]]></description><category></category></item><item><title><![CDATA[linux 静、动态库笔记]]></title><link>https://blog.youkuaiyun.com/oceanperfect/article/details/51135065</link><guid>https://blog.youkuaiyun.com/oceanperfect/article/details/51135065</guid><author>oceanperfect</author><pubDate>Tue, 12 Apr 2016 17:05:57 +0800</pubDate><description><![CDATA[一、静态库：
1、编译源文件生成中间文件：
    gcc -c cool.c
2、打包中间文件生成静态库：
    ar -r libcool.a cool.o
3、使用静态库，直接在编译的时候加上静态库的路径和名字，就可以直接被打包进可执行文件里了。
    gcc -o main main.c -L ./ libcool.a



二、动态库：
1、编译源文件生成中间文]]></description><category></category></item><item><title><![CDATA[C++静态库和动态库]]></title><link>https://blog.youkuaiyun.com/oceanperfect/article/details/51121524</link><guid>https://blog.youkuaiyun.com/oceanperfect/article/details/51121524</guid><author>oceanperfect</author><pubDate>Mon, 11 Apr 2016 14:36:15 +0800</pubDate><description><![CDATA[原文地址：http://www.cnblogs.com/skynet/p/3372855.html

C++静态库与动态库
这次分享的宗旨是——让大家学会创建与使用静态库、动态库，知道静态库与动态库的区别，知道使用的时候如何选择。这里不深入介绍静态库、动态库的底层格式，内存布局等，有兴趣的同学，推荐一本书《程序员的自我修养——链接、装载与库》。

什么是库

库是写好的现有的，成熟的]]></description><category></category></item><item><title><![CDATA[CentOS配置网卡——桥接模式]]></title><link>https://blog.youkuaiyun.com/oceanperfect/article/details/51097210</link><guid>https://blog.youkuaiyun.com/oceanperfect/article/details/51097210</guid><author>oceanperfect</author><pubDate>Fri, 08 Apr 2016 15:51:40 +0800</pubDate><description><![CDATA[1、选择网卡，点击VMware “编辑”——“虚拟网络编辑器”:


2、选择正确的网络适配器：

3、右击虚拟机，“设置”为桥接模式：

4、打开虚拟机，进入系统，进行系统里的网络设置：系统设置system --> 首选项preference--> 网络设置Network Connections，选择System eth0，点击Edit编辑：

5、设置完成后，打开终端，重启网]]></description><category></category></item><item><title><![CDATA[VS2010配置pthread库]]></title><link>https://blog.youkuaiyun.com/oceanperfect/article/details/51075469</link><guid>https://blog.youkuaiyun.com/oceanperfect/article/details/51075469</guid><author>oceanperfect</author><pubDate>Wed, 06 Apr 2016 15:47:00 +0800</pubDate><description><![CDATA[1、下载：http://sourceware.org/pthreads-win32/#download，下载.zip版本的；然后解压；
2、执行a.bat和b.bat两个脚本，注意a.bat放到库的目录下；
a.bat：

rem put this file to :D:\#win pthread\pthreads-w32-2-9-1-release\Pre-built.2


copy ]]></description><category></category></item><item><title><![CDATA[http的keep-alive和tcp的keepalive区别]]></title><link>https://blog.youkuaiyun.com/oceanperfect/article/details/51064574</link><guid>https://blog.youkuaiyun.com/oceanperfect/article/details/51064574</guid><author>oceanperfect</author><pubDate>Tue, 05 Apr 2016 14:33:48 +0800</pubDate><description><![CDATA[1、HTTP Keep-Alive
在http早期，每个http请求都要求打开一个tpc socket连接，并且使用一次之后就断开这个tcp连接。
使用keep-alive可以改善这种状态，即在一次TCP连接中可以持续发送多份数据而不会断开连接。通过使用keep-alive机制，可以减少tcp连接建立次数，也意味着可以减少TIME_WAIT状态连接，以此提高性能和提高httpd服务器的吞吐率(]]></description><category></category></item><item><title><![CDATA[一次完整的HTTP事务是怎样一个过程]]></title><link>https://blog.youkuaiyun.com/oceanperfect/article/details/51062723</link><guid>https://blog.youkuaiyun.com/oceanperfect/article/details/51062723</guid><author>oceanperfect</author><pubDate>Tue, 05 Apr 2016 10:14:40 +0800</pubDate><description><![CDATA[当我们在浏览器的地址栏输入 www.linux178.com ，然后回车，回车这一瞬间到看到页面到底发生了什么呢？




以下过程仅是个人理解：




域名解析 --> 发起TCP的3次握手 --> 建立TCP连接后发起http请求 --> 服务器响应http请求，浏览器得到html代码 --> 浏览器解析html代码，并请求html代码中的资源（如js、css、图片等） ]]></description><category></category></item><item><title><![CDATA[设计一个简单的socket通信协议]]></title><link>https://blog.youkuaiyun.com/oceanperfect/article/details/51062427</link><guid>https://blog.youkuaiyun.com/oceanperfect/article/details/51062427</guid><author>oceanperfect</author><pubDate>Tue, 05 Apr 2016 09:42:54 +0800</pubDate><description><![CDATA[为什么要设计一个协议呢？因为TCP协议是面向字节流的协议，面向字节流的协议是无边界的，也就是说一次发送操作并不一定就仅仅产生一个数据包，而有可能是多个，在接收端不一定一次接收就能完成所有数据的收操作。这样如果服务端和客户端没有通信协议，则客户端发送完数据之后，服务端不知道需要经过几次接受(receive)操作才能完成一次数据交换。
这个问题一般发生在客户端和服务端传送大批量数据时，如果数据之间没]]></description><category></category></item></channel></rss>