自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

转载 Linux 自旋锁

一.概述自旋锁是SMP架构中的一种low-level的同步机制。当线程A想要获取一把自旋锁而该锁又被其它线程锁持有时,线程A会在一个循环中自旋以检测锁是不是已经可用了。对于自选锁需要注意:由于自旋时不释放CPU,因而持有自旋锁的线程应该尽快释放自旋锁,否则等待该自旋锁的线程会一直在那里自旋,这就会浪费CPU时间。 持有自旋锁的线程在sleep之前应该释放自旋锁以便其它线程可以获得自旋锁...

2019-12-28 17:19:54 263

转载 HTTP协议——Get与Post的区别

Get 和 Post 是从客户端浏览器向服务器发送数据参数的 HTTP 方法。这些参数可以是表单的输入、搜索标签的查询等。每当网页需要响应给用户相应的响应,或者我们甚至将其称为用户交互网页,这些 HTTP 方法就扮演了一个重要的角色,为服务器提供用户特定的输入。但是你可能想知道为什么我们需要两个不同的方式来发送输入内容。为了回答这个问题,理解这些方法的工作原理是很重要的,这样你就可以更好的理解实际...

2019-12-26 17:00:47 116

原创 C++模板全特化与偏特化 partial specialization

class MyType{};/* 全特化和偏特化的作用就是可以根据具体的模板参数来决定实例化哪一个类 */template<class T, class T1> class MyIter {public: MyIter() { cout << "This is normal template." << endl; }};/*...

2019-12-26 14:11:21 254

原创 windows系统下使用关键段和事件内核对象实现读写锁

先做一点CreateEvent的实验:HANDLE _event;HANDLE _pthread;DWORD WINAPI thread(void* lparam){ SetEvent(_event); SetEvent(_event); return 0;}int main(int argc, char* argv[]){ _event = ::CreateEve...

2019-12-23 14:30:38 171

原创 Linux下的零拷贝函数splice简单测试实例

本测试实例是由splice构造的一个echo服务器。linux服务端代码:#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>#include <assert.h>#include <stdio.h>#include <unist...

2019-12-21 16:42:44 373

转载 C++ 11 相关的智能指针详解

本文介绍c++里面的四个智能指针: auto_ptr, shared_ptr, weak_ptr, unique_ptr 其中后三个是c++11支持,并且第一个已经被c++11弃用。为什么要使用智能指针:我们知道c++的内存管理是让很多人头疼的事,当我们写一个new语句时,一般就会立即把delete语句直接也写了,但是我们不能避免程序还未执行到delete时就跳转了或者在函数中没有执行到最后的...

2019-12-20 17:54:29 169

转载 C++虚函数和虚函数表原理

虚函数的地址存放于虚函数表之中。运行期多态就是通过虚函数和虚函数表实现的。类的对象内部会有指向类内部的虚表地址的指针。通过这个指针调用虚函数。虚函数的调用会被编译器转换为对虚函数表的访问:ptr->f(); //ptr代表this指针,f是虚函数*(ptr->vptr[1])(ptr);上述代码中,ptr代表一个this指针,ptr指向的vptr是类内部的虚表指...

2019-12-20 17:47:41 196

转载 C++11 智能指针详解

智能指针内容很多,重点是基本用法。#include <boost/shared_ptr.hpp>class CBase: public boost::enable_shared_from_this<CBase> {public: virtual void f(){}//必须有个虚函数才能向上向下转换。}typedef boost::shared_...

2019-12-20 17:30:24 194

转载 C++四种类型之间的转换

C风格的强制类型转换(Type Cast)很简单,不管什么类型的转换统统是: TYPE b = (TYPE)a。 C++风格的类型转换提供了4种类型转换操作符来应对不同场合的应用。const_cast,字面上理解就是去const属性。 static_cast,命名上理解是静态类型转换。如int转换成char。 dynamic_cast,命名上理解是动态类型转换。如子类和父类之间的多态类型转换。...

2019-12-20 17:21:25 218

原创 C++. 模板与分离编译

1.分离编译模式一个程序由若干个源文件共同实现,而每个源文件单独编译生成目标文件,最后将所有目标文件链接起来形成单一的可执行文件的过程称为分离编译模式。2.使用函数模板在链接时正确编译(vs2019)template_1.h#pragma once/* declare the template function */template<class T> T add...

2019-12-17 18:58:58 256

原创 leetcode刷题(八)

题目描述:最大子数组的和给定一个数组 array[1, 4, -5, 9, 8, 3, -6],在这个数字中有多个子数组,子数组和最大的应该是:[9, 8, 3],输出20,再比如数组为[1, -2, 3, 10, -4, 7, 2, -5],和最大的子数组为[3, 10, -4, 7, 2],输出18。/*动态规划的思想:1. 状态方程 : max(dp[i]) = getMa...

2019-12-17 16:52:46 153

转载 【Linux深入】epoll源码剖析

引入之前讲了select、poll、epoll的区别,由于许多应用中都用到了epoll,例如Netty、Redis等等,所以就来深入学习一下,现在我们就来剖析一下epoll的源码 我先来剖析理解epoll源码的基础:主要的数据结构,然后再来解析epoll主要的三个方法:epoll_create()、epoll_ctl()、epoll_wait()。主要的数据结构1.eventpoll...

2019-12-16 14:58:38 264

原创 原子操作 . 原理与底层实现

一.概述原子操作(atomic operation)指的是由多步操作组成的一个操作。如果该操作不能原子地执行,则要么执行完所有步骤,要么一步也不执行,不可能只执行所有步骤的一个子集。现代操作系统中,一般都提供了原子操作来实现一些同步操作,所谓原子操作,也就是一个独立而不可分割的操作。在单核环境中,一般的意义下原子操作中线程不会被切换,线程切换要么在原子操作之前,要么在原子操作完成之后。更广...

2019-12-13 19:40:15 5720

原创 高性能服务器需要考虑的一些常用优化设计

引自:《C++百万并发网络通信引擎架构与实现》:链接:https://pan.baidu.com/s/15vMndo2jAVZ67yIORQ8efw提取码:qfk7notice:please reverse the order.

2019-12-13 18:28:51 206

原创 算法练习. 海量数据的处理

问题总览:如何从大量的 URL 中找出相同的 URL?(百度) 如何从大量数据中找出高频词?(百度) 如何找出某一天访问百度网站最多的 IP?(百度) 如何在大量的数据中找出不重复的整数?(百度) 如何在大量的数据中判断一个数是否存在?(腾讯) 如何查询最热门的查询串?(腾讯) 如何统计不同电话号码的个数?(百度) 如何从 5 亿个数中找出中位数?(百度) 如何按照 query...

2019-12-13 10:38:59 255

原创 windows资源监视器中内存项(提交、工作集、可共享、专用)的含义及区别

各字段官方解释:提交:操作系统为进程保存的虚拟内存量; 工作集:进程当前正在使用的物理内存量; 可共享:进程当前使用的可与其他进程共享的物理内存量; 专用:进程当前使用的不能被其他进程共享的物理内存量;对各字段的分析:使用下面的代码进行测试#include<windows.h>#define UNIT_SIZE (1024 * 1024)int ma...

2019-12-12 19:08:58 10967 1

原创 TCP的异常释放和SO_LINGER套接字选项

1.TCP的异常关闭正常终止一个连接的方法是发送一个FIN报文。有时也称为有序释放,因为所有排队数据都发送完之后才发送FIN,正常情况下没有任何数据的丢失。但也可能发送一个复位报文段而不是FIN来释放一个连接。有时称这位异常释放(abortive release)。异常终止一个连接对应用程序来说有两个优点:丢弃任何待发送数据并立即发送复位报文段 RST的接收方会区分另一端执行的是异常...

2019-12-11 16:13:18 719

原创 Trie Tree字典树原理与实现 C++

字典树又称为前缀树或Trie树,是处理字符串常见的数据结构。本文数据结构严格采用下面图示的结构进行编码,其中节点(圆圈内)内的数字左右分别表示{经过此节点的串数,此节点作为终结点的串数}。所以将下图的字符串从左到又依次列出为:{a、a、ae、atfh、by、ca、cag、caf} 结构源码:/*@Author:z...

2019-12-11 14:22:57 246

原创 windows驱动开发资料(《windows驱动开发技术详解》)+源码

链接:https://pan.baidu.com/s/1db1sEsIMf3YWuxQ090ih_g提取码:m4lz

2019-12-11 09:21:05 1976

原创 Hadoop官网中文参考文档

Hadoop的中文参考文档:http://hadoop.apache.org/docs/r1.0.4/cn/hdfs_user_guide.html

2019-12-09 17:25:32 912

原创 B - 树原理复习及实现 C++

B树又叫平衡多路查找树。一棵m阶的B树的特性如下:树中每个结点最多含有m个孩子() 除根结点和叶子结点外,其它每个结点至少有个孩子 若根结点不是叶子结点(不是空树),则至少有2个孩子 所有叶子结点都出现在同一层,叶子结点不包含任何关键字信息(可以看做是外部接点或查询失败的接点,实际上这些结点不存在,指向这些结点的指针都为NULL) 每个非终端结点(最底层的非叶子节点)中包含有n个关键...

2019-12-07 17:47:16 270

转载 DPDK 全面分析

高性能网络技术随着云计算产业的异军突起,网络技术的不断创新,越来越多的网络设备基础架构逐步向基于通用处理器平台的架构方向融合,从传统的物理网络到虚拟网络,从扁平化的网络结构到基于 SDN 分层的网络结构,无不体现出这种创新与融合。这在使得网络变得更加可控制和成本更低的同时,也能够支持大规模用户或应用程序的性能需求,以及海量数据的处理。究其原因,其实是高性能网络编程技术随着网络架构的演进不断...

2019-12-07 15:20:19 302

原创 leetcode刷题(七)

给定一个只包括 '(',')','{','}','[',']'的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。#include<stack>//{}[]()//时间复杂度为o(n)空间复杂度为o(n)bool match(string matchstr)...

2019-12-07 13:15:15 109

转载 Dump文件的生成和使用

https://blog.csdn.net/lk142500/article/details/80563552

2019-12-06 19:39:18 330

原创 量子计算的基本原理论述

1.概述量子计算机,简单地说,它是一种可以实现量子计算的机器,是一种通过量子力学规律以实现数学和逻辑运算,处理和储存信息能力的系统。它以量子态为记忆单元和信息储存形式,以量子动力学演化为信息传递与加工基础的量子通讯与量子计算,在量子计算机中其硬件的各种元件的尺寸达到原子或分子的量级。量子计算机是一个物理系统,它能存储和处理关于量子力学变量的信息。如同传统计算机是通过集成电路中电路的通断来实...

2019-12-06 16:11:41 6655

原创 浮点数原理解析和相关问题分析(博文整理)

目录1.浮点数的原理简析1.1.存储格式1.2.原理1.3.分类1.3.1.有限数1.3.2.零1.3.3.弱规范数1.3.4.无穷大1.3.5.NaN1.4.特殊的数1.4.1.最小的正float有限数1.4.2.最大的float有限数1.4.3.最小的正float弱规范数1.4.4.FLT_EPSILON1.5.结语2.浮点数比较...

2019-12-04 15:02:46 336

原创 Some valuable open source projects

QNAT是360 OPS团队基于DPVS和DPDK项目创建的一个x86 NAT项目。github连接:https://github.com/Qihoo360/qnat微信开源的Paxos实现github链接:https://github.com/tencent-wechat/phxpaxos...

2019-12-04 12:08:02 122

原创 Linux 系统安全和用户管理权限相关知识总结

查看所有用户的用户和组相关信息:cat /etc/passwd各字段的含义:用户登录名:用户密码:账号ID:组ID:用户账户的文本描述:用户的HOME目录:用户默认shell查看指定用户的相关账户信息:cat /etc/passwd | grep root简洁命令:groups:查看当前登录用户的组内成员group test:查看test用户所在组以及...

2019-12-04 11:16:28 398

原创 windows线程局部存储(TLS)原理解析

动态TLSwindows系统中每个进程都有一组正在使用标志(in-use-flag),如图21-1所示。每个标志可以被设为FREE或着INUSE,表示改TLS元素是否正在被使用。Microsoft保证至少有TLS_MINIMUM_AVAILABLE = 64个位标志可供使用。在必要的时候可以配更多,最多可达1000多个!要使用动态TLS,我们必须先调用TlsAlloc:DWORD T...

2019-12-03 20:52:48 493

转载 Linux 虚拟地址到物理地址的转换

概念:虚拟地址和物理地址的概念CPU通过地址来访问内存中的单元,地址有虚拟地址和物理地址之分,如果CPU没有MMU(Memory Management Unit,内存管理单元),或者有MMU但没有启用,CPU核在取指令或访问内存时发出的地址将直接传到CPU芯片的外部地址引脚上,直接被内存芯片(以下称为物理内存,以便与虚拟内存区分)接收,这称为物理地址(Physical Address...

2019-12-03 19:00:40 509

原创 Linux下如何构建一个资源监视器(原理和方法)

对于Linux系统,各种关于系统内核的活动信息都可以在/proc/stat文件中找到,该文件记录了自系统第一次启动以来的所有内核的相关数据,下面对文件内容各字段做一点说明:这些数字指明了CPU执行不同的任务所消耗的时间(从系统启动开始累计到当前时刻)。时间单位是USER_HZ或jiffies(通常是百分之一秒)。这些数据列的含义如下,我们从左至右逐一认识:•user:正常的进程在用户...

2019-12-03 15:19:38 670

原创 Linux学习资源网(公社)

地址:https://linux.linuxidc.com/

2019-12-03 13:25:18 220

原创 Linux下一段获取cpu主频的程序处理正确吗?

源程序是这样的:#include <stdio.h>#include <errno.h>#include <sys/types.h>#include <unistd.h>#include <sys/stat.h>#include <fcntl.h>#include <stdlib.h>#in...

2019-12-02 18:28:47 299

原创 Hacker's Technique programme pdf+源码

目录2.网络扫描器开发2.1.一段端口检测程序代码2.2——2.4.ICMP echo扫描原理及实现2.5——2.6.ARP扫描2.7.TCP SYN扫描2.8.Winpcap驱动程序初始化2.9.ARP欺骗程序的实现方2.10.snmp协议扫描的实现方法3.提升、爆破和防范3.1.FTP暴力破解程序3.2.IMAP协议破解3.3.POP3协议...

2019-12-02 09:37:17 873 2

空空如也

空空如也

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

TA关注的人

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