自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 levelDB之内存碎片和Arena

什么是内存碎片?在内存单元100的起始地址到内存单元200之间,一共申请了100块1字节的区域,但是释放的时候,先释放了内存地址为基数的单元,如释放101、103…而偶数单元不释放,释放50次后,虽然还有50字节的内存是空余的,但是如果下次要申请2字节的内存单元,是无法在100到200之间申请到的,因为这个区域没有连续的2字节空间,这就是内存碎片。内存碎片分为两种:内部碎片和外部碎片(...

2019-11-06 01:15:04 284

原创 深入理解C++11读书笔记(一)

C++11相对于C++98/03显著增强的特点:通过内存模型、线程、原子操作等来支持本地并行编程 通过统一初始化表达式、auto、declytype、移动语义来统一对泛型编程的支持 通过constexpr、POD(概念)等更好的支持系统编程 通过内联命名空间、继承构造函数和右值引用等、以更好的支持库的构建新标准的诞生1、宏__cplusplus使用(参考https://blog...

2019-08-15 00:11:16 306

原创 python.cookbook读书笔记之文本篇(一)

前言:在一行的末尾使用反斜杠符号意味着下面一行仍是上面字符串的延续Big = "This is a long string\That prints two line."使用一对连续的三引用符将字符串圈起:Bigger = """This is an evenbigger string thatSpans thress lines."""使用这种符号文本将按...

2019-08-13 01:59:15 204

原创 LevelDB之LRUCaChe解析

背景:之前学过操作系统的都应该知道LRU Cache算法,即最近最少使用算法。算法的缘由是Cache的容量有限,不可能无限制的去存储数据,那么在容量用完又需要添加新的数据时,就需要在原cache当中选择一些数据清除掉,而我们选择的数据就是那些最近最少使用的数据(实际上在我看来,说是最久未使用算法更形象,因为该算法每次替换掉的就是一段时间内最久没有使用过的内容)技术实现:LRU一般的实现...

2019-08-08 22:47:13 919

原创 C#本质论之接口

先描述接口的概念C#并非只能通过继承使用多态性,也可以通过接口使用。和抽象类不同,接口不包含任何实现(C++并不会特意去区分抽象类和接口,实际上C++的接口就是通过抽象类实现,其并没有interface和abstract关键字)。接口的意义在于能够将实现细节和服务完全隔离开。举个例子:我们都知道插座可以供电,只要我们的插头能够插入插座就可以获得电力,也就是说,我们并不关心插座当中的电力是来自于核电...

2018-05-09 21:33:15 485

原创 Python Cookbook读书笔记

1.1每次处理一个字符解决方案:列表化(list)、for循环遍历、列表推导、map函数thelist = list(thestring)for c in thestring: do_something_with(c)result = [do_something_with(c) for c in thestring]results = map(do_something, thestring...

2018-04-26 21:09:32 276

原创 几何着色器

几何着色阶段位于顶点和像素着色阶段之间。当顶点着色器以顶点作为输入数据,几何着色器是以完整的图元(这里指的是三角形)作为输入数据。例如,如果我们绘制三角形列表,那么将在列表中为每个三角形T执行几何着色程序。注意,每个三角形的三个顶点都被输入到几何着色器中,而几何着色器输出一个完整的图元。其主要用于创建或者是销毁几何体。而且不仅仅可以将输入的图元(这里以三角形为例)作为整个图元输出出去,还可以将输入...

2018-04-25 01:01:24 667 1

原创 Python编程实战读书笔记之工厂方法模式(一)

如果子类的某个方法需要根据情况来决定用什么类去实例化相关对象,那么可以考虑工厂方法模式。打个比方,假如要绘制一个国际跳棋与国际象棋棋盘,如图所示:生成国际跳棋棋盘的棋子对象的方法代码如下:def populate_board(self): for x in range(0, 9, 2): for row in range(4): ...

2018-02-08 16:20:27 265

原创 Python编程实战读书笔记之建造者模式

建造者模式:建造者模式是创建型模式的一种,其适用于这样一种场景,由多个复杂的小对象创建为一个大对象,并且不同的大对象的内部小对象创建的步骤是一样的,不同的事其小对象创建的内部实现。也就是建造者模式适用于把复杂对象的各部分的细节和起创建流程相分离的场景(其内部创建流程一样,内部创建的小对象的具体实现是不一样的)。举个例子:假设创建一个表单,而表单的形式是不一样的,我们既可以用;HTML生成网

2018-02-07 13:54:40 219

原创 Leetcode: longest-consecutive-sequence

Given an unsorted array ofintegers, find the length of the longest consecutive elements sequence.For example,Given[100, 4, 200, 1, 3, 2],The longest consecutive elements sequence is[1, 2, 3, 4

2018-01-31 21:02:01 167

原创 Leetcode: sum-root-to-leaf-numbers

Given a binary tree containingdigits from0-9only, each root-to-leaf path could represent a number.An example is the root-to-leafpath1->2->3which represents the number123. Find the total sum of a

2018-01-31 21:01:35 164

原创 Leetcode: surrounded-regions

Given a 2D boardcontaining'X'and'O', capture all regions surrounded by'X'. A region is captured by flippingall'O's into'X's in that surrounded region . For example:After running your funct

2018-01-31 21:00:21 182

原创 Leetcode: palindrome-partitioning && palindrome-partitioning-ii

palindrome-partitioningGiven a string s, partition s such that every substring ofthe partition is a palindrome.Return the minimum cuts needed for a palindrome partitioning of s. For example, g

2018-01-15 21:40:29 169

原创 Leetcode: gas-station

There are N gas stations along a circular route, where the amountof gas at stationi isgas[i]. You have a car with an unlimited gas tank and it costscost[i]of gas totravel from stationi to its ne

2018-01-07 11:27:11 208

原创 Leetcode:Candy

Leetcode: candyThere are N children standing in a line. Each child is assigned arating value.You are giving candies to these children subjected to the followingrequirements:Each child must hav

2018-01-07 10:56:37 298

原创 Leetcode: single-number && single-number-ii

Given an array of integers, everyelement appears twice except for one. Find that single one.Note: Your algorithm should have a linear runtime complexity.Could you implement it without using extra

2018-01-07 10:47:35 145

原创 linux高性能服务器编程学习笔记九:信号

1、信号是由系统、用户或进程发送给目标进程的信息,以通知目标信息某个状态的改变或系统异常。Linux信号可由如下条件产生:(1)对于前台进程,可以输入某些特殊的终端字符来给它发送信号。(Ctrl+C给前台进程发送中断信号)(2)诸如越界访问或者浮点异常等系统异常(3)诸如alarm定时器到期引起SIGSLARM信号的系统状态变化(4)运行Kill命令或调用kill函数2、发送信

2017-12-18 20:16:44 241

原创 Leetcode: linked-list-cycle-ii

Leetcode: linked-list-cycle-iiGiven a linked list, return the node where the cycle begins. If there isno cycle, returnnull.Follow up:Can you solve it without using extra space?思路:

2017-12-18 20:08:51 224

原创 Leetcode: reorder-list

Leetcode: reorder-list Given a singly linked list L: L 0→L 1→…→L n-1→L n,reorder it to: L 0→L n→L 1→L n-1→L 2→L n-2→…You must do this in-place without alteringthe nodes' values.For exa

2017-12-18 20:08:10 187

原创 Leetcode: binary-tree-preorder-traversal(非递归版)

Leetcode: binary-tree-preorder-traversalGiven a binarytree, return the preorder traversal of itsnodes' values.思路:运用栈,根->左->右,先遍历左,那就需要先把右节点入栈,再将左节点入栈,这样出棧的时候,才能左节点先出,后出右节点。代码如下:vector preorder

2017-12-18 20:06:04 146

原创 Leetcode:binary-tree-postorder-traversal

Givena binary tree, return the postorder traversal of its nodes' values.后续遍历二叉树。递归思想:前遍历左子树,再遍历右子树,最后显示自身的值。代码如下: void postorder(TreeNode *root) { if(root != NULL) {

2017-12-14 13:37:16 152

原创 Leetcode:insertion-sort-list

Sort a linked list using insertion sort.提供两种思路,递归和非递归。递归思路:递归的对链表进行插入排序,递归直到链表末尾结束,然后进行插入排序。举个例子:4->6->5->7->2->3->null对其递归进行插入排序,那么会得到3->null。然后是2->3->null。然后当将7插入末尾链表的时候,对2->3->null进行遍历并比较

2017-12-14 11:50:14 134

原创 Leetcode: sort-list

Sorta linked list in O(n log n)time using constant space complexity.用O(nlogn)复杂度对链表进行排序,可以采用归并排序。那么需要对链表做如下操作:(1)将链表从中点划分为2个链表。(2)对左链表递归的进行归并排序(3)对右链表递归的进行归并排序(4)合并2个链表。举个例子:假如有一个链表为:4->

2017-12-14 10:37:51 133

原创 linux高性能服务器编程学习笔记八:I/O复用

1、I/O复用使得程序能够监听多个文件描述符,网络程序一般在下列情况使用I/O复用技术   1)客户端要同时处理多个socket。(非阻塞connect技术)   2)客户端程序既要处理用户输入又要进行网络连接。(聊天室技术)   3)TCP服务器要同时处理监听socket和连接socket。(I/O复用使用最多的场合)   4)服务器同时处理TCP请求和UDP请求。(回射服务器)

2017-12-13 20:18:01 228

原创 Leetcode:minimum-depth-of-binary-tree

Leetcode:minimum-depth-of-binary-treeGiven a binary tree, find its minimumdepth.The minimum depth is the number of nodes along the shortest path from theroot node down to the nearest leaf node.解

2017-12-13 20:01:27 141

原创 Leetcode: Max Points on a Line

Given n points on a 2D plane, find themaximum number of points that lie on the same straight line.(题意大概是找寻某一条直线,其上包含的点最多。)解决思路如下:(1)若点a与点b与点c在同一条直线上,那么它们的a和b,a和c所求的斜率是相等的。那么我们可以从第一个点s开始,以第一个点s为基

2017-12-13 19:04:18 159

原创 linux高性能服务器编程学习笔记七:高性能服务器程序框架

1、服务器一般可以解构为以下三个主要模块:(1)I/O处理单元。(四种I/O模型和两种高效事件处理模式)(2)逻辑单元。(两种高效并发方式以及高效的逻辑处理方式—有限状态机)(3)存储单元(服务器程序的可选模块,其本身与网络编程无关)2、服务器模型(1)C/S模型:由于资源(视频、新闻、软件等)都被数据提供者垄断,所以几乎所有的网络应用程序都很自然的采用C/S(客户端/服务器模

2017-12-08 17:47:57 315

原创 linux高性能服务器编程学习笔记六:linux服务器程序规范

除了网络通信外,服务器程序通常还必须考虑许多其它细节问题。这些细节面广而琐碎,基本上都是模版式的,一般称之为服务器程序规范。例如:1、linux服务器程序一般以后台进程形式运行,后台进程又称为守护进程(daemon)。它没有控制终端,因而不会意外的接收到用户的输入。守护进程的父进程通常都是init进程(进程ID为1)。守护进程的编写需要遵循一定的步骤:(1)创建子进程,关闭父进程,这样可以

2017-12-04 22:10:26 217

原创 linux高性能服务器编程学习笔记五:高级I/O函数

1、linux提供了一些高级I/O函数,在特定的情况下表现出优秀的性能。这些函数大致分为3类(1)用于创建文件描述符的函数,包括pipe、dup/dup2函数(2)用于读写数据的函数,包括readv/writev、sendfile、mmap/munmap、splice和tee函数(3)用于控制I/O行为和属性的函数,包括fcntl函数。2、pipe函数(intpipe(int fd

2017-12-02 15:44:16 202

原创 linux高性能服务器编程学习笔记四:HTTP协议相关格式

1、HTTP请求GET http://www.baidu.com/index.htmlHTTP/1.0(请求行)User-Agent: Wget/1.12 (linux-gnu)(头部字段)Host:www.baidu.com(头部字段)Connection:close(头部字段)(1)GET为请求方法,表示客户端以只读的方式申请服务器的资源。常见的方法见下表

2017-11-29 18:25:01 282

原创 linux高性能服务器编程学习笔记三:TCP协议详解

1、和IP协议相比,TCP协议处于传输层,更靠近应用层,因此在应用程序中具有更强的可操作性。2、一般来说,TCP主要处理端到端的通信,因此头部信息主要包括源端口号,目的端口号。TCP协议是面向连接、面向字节流和可靠传输的协议。因此头部还需要一些字段来管理TCP连接以及控制两个方向的数据流。3、TCP服务的特点:使用TCP协议通信必须先建立连接,然后才能开始数据的读写。并且通信双方都需要在内

2017-11-28 22:57:18 256

原创 汇编语言学习笔记二:访问内存的寄存器

1、通过前一篇章的学习,知道CS和IP寄存器的内容合成的物理地址指向的是执行指令的地址。而访问内存也需要知道内存的地址,内存地址也是由段地址和偏移地址组成,8086CPU中默认存放内存地址段地址的寄存器是DS寄存器,偏移地址则是由[n]表示,n表示偏移量。例子:MOVBX,1000H   //将1000H存放到BX寄存器当中MOVDS,BX      //将BX中的值(1000H)存放到段

2017-11-28 22:40:20 531

原创 汇编语言学习笔记一:CS和IP寄存器

1、CS是代码段寄存器,IP是指令指针寄存器(相当于偏移地址)。修改CS、IP的指令不同于修改通用的寄存器值的指令,修改通用寄存器的值可以用mov 指令(mav ax,123),mov指令被称为传送指令。修改CS、IP的指令是jmp指令。jmp指令被称为转移指令。(1)同时修改代码段寄存器和指令指针寄存器,形如jmp 段地址:偏移地址。jmp2AE3:3,执行后:CS=2AE3H,IP=0

2017-11-27 14:28:22 29820 1

原创 linux高性能服务器编程学习笔记二:IP协议详解

1、IP协议是TCP/IP协议族的核心协议。要理解IP协议应当从了解它的头部信息开始。网络层主要的作用是路由选址和转发。选址当然选的是IP地址,所以头部信息应当包括源IP地址和目的IP地址。要知道以太网帧数据的最大长度为1500字节,那么在网络层传递给数据链路层的时候就需要对IP数据包进行分片,那么IP头部信息应当有分片字段。为了多个分片的数据包能够重组,应当有唯一一个标识字段来确认多个分片的包同

2017-11-26 17:42:09 192

原创 linux高性能服务器编程学习笔记一:TCP/IP协议详解

1、TCP/IP协议族是一个四层协议系统,自底向上依次为数据链路层、网络层、传输层、应用层。2、数据链路层常用的协议有ARP协议。网络层常用的协议有ICMP协议和TP协议。传输层常用的协议有TCP协议和UDP协议。应用层常用的协议有ping、telnet、OSPF协议、DNS协议,其中ping直接使用网络层的ICMP协议,OSPF协议直接使用网络层的IP协议,telnet使用网络层的TCP协议

2017-11-25 21:23:05 288

空空如也

空空如也

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

TA关注的人

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