- 博客(40)
- 资源 (3)
- 收藏
- 关注
原创 Linux内存管理复习总结
首先来看一张图:这张图就是Linux分配内存的大致流程。下面我来总结一下。分页首先Linux是基于内存管理采用分页机制,内核代码中它将所有段基址都设置为0,Linux采用这样的方法直接避过了分段机制。仅仅用分段来控制用户态和用户态的访问权限。内核内存分配内核对于大块内存的分配基于伙伴算法,用来解决外部碎片的问题。伙伴算法最低分配的单位是一页。在物理内存的每个Zone中都有一个free_area[]数
2017-02-28 12:20:52 1127
原创 mmap内核源码分析
对于mmap函数,我之前的理解太单一了。这几天好好复习了一下以前学过的知识,重新对该函数有了新的认识。之前我的认识是,mmap是用来映射内存的,它映射的内存来自磁盘上文件。所以我以为malloc函数底层也映射文件内存。后来一直想不通。实际上,mmap函数再malloc底层实现中采用了匿名映射(就是这个匿名映射,我之前一直概念不清)。先说下malloc调用mmap一般的形式://原型//mmap(v
2017-02-27 22:47:35 3239 2
转载 Linux 2.6 中的页面回收与反向映射
引用网址:http://rritw.com/a/caozuoxitong/Linux/20110617/89155.html为什么要进行页面回收操作系统管理内存中的物理页面,同时也担任着内存分配的职责。应用程序可以通过内存分配函数向操作系统申请物理页面;在使用完这些物理页面之后,应用程序可以通过相应的内存释放函数释放这些物理页面。但是,对于内存中的某些物理页面来说,页面的使用者
2017-02-26 11:38:47 445
转载 Manacher算法总结
Manacher算法算法总结第三弹 manacher算法,前面讲了两个字符串相算法——kmp和拓展kmp,这次来还是来总结一个字符串算法,manacher算法,我习惯叫他 “马拉车”算法。相对于前面介绍的两个算法,Manacher算法的应用范围要狭窄得多,但是它的思想和拓展kmp算法有很多共通支出,所以在这里介绍一下。Manacher算法是查找一个字符串的最长回文子串的线性算法
2017-02-22 18:50:43 335
原创 55. Jump Game(贪心)
Given an array of non-negative integers, you are initially positioned at the first index of the array.Each element in the array represents your maximum jump length at that position.Determine if you are
2017-02-22 15:41:31 352
原创 111. Minimum Depth of Binary Tree
Given a binary tree, find its minimum depth.The minimum depth is the number of nodes along the shortest path from the root node down to the nearest leaf node.解法一:BFSclass Solution {public: int min
2017-02-22 12:24:41 299
原创 208. Implement Trie (Prefix Tree)--Trie树
Implement a trie with insert, search, and startsWith methods.Note:You may assume that all inputs are consist of lowercase letters a-z.我的解法如下:const int MAX_NODE = 26;struct TrieNode { long count;
2017-02-22 11:08:30 399
原创 51. N-Queens/52. N-Queens II
八皇后问题参考这张图片: 51The n-queens puzzle is the problem of placing n queens on an n×n chessboard such that no two queens attack each other.Given an integer n, return all distinct solutions to the n-queens p
2017-02-22 00:15:36 378
原创 24. Swap Nodes in Pairs
Given a linked list, swap every two adjacent nodes and return its head.For example,Given 1->2->3->4, you should return the list as 2->1->4->3.Your algorithm should use only constant space. You may not
2017-02-21 17:40:33 494
原创 147. Insertion Sort List(插入排序)
Sort a linked list using insertion sort.单链表的插入排序:class Solution {public: ListNode* insertionSortList(ListNode* head) { ListNode* new_head = NULL; while(head != NULL){ L
2017-02-21 16:52:51 390
原创 19. Remove Nth Node From End of List
Given a linked list, remove the nth node from the end of list and return its head.For example, Given linked list: 1->2->3->4->5, and n = 2. After removing the second node from the end, the linked l
2017-02-21 16:06:21 321
原创 92. Reverse Linked List II(链表局部逆序**)
Reverse a linked list from position m to n. Do it in-place and in one-pass.For example:Given 1->2->3->4->5->NULL, m = 2 and n = 4,return 1->4->3->2->5->NULL.此问题看似简单,实际很麻烦,如果不使用二级指针,那么如果链表仅有两项,并且要求m=1,
2017-02-21 15:32:51 488
原创 83. Remove Duplicates from Sorted List
Given a sorted linked list, delete all duplicates such that each element appear only once.For example,Given 1->1->2, return 1->2.Given 1->1->2->3->3, return 1->2->3.class Solution {public: ListN
2017-02-21 10:41:50 315
原创 82. Remove Duplicates from Sorted List II
Given a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct numbers from the original list.For example,Given 1->2->3->3->4->4->5, return 1->2->5.Given 1->1->1->2->
2017-02-20 23:45:01 412
原创 86. Partition List
Given a linked list and a value x, partition it such that all nodes less than x come before nodes greater than or equal to x.You should preserve the original relative order of the nodes in each of the
2017-02-20 21:49:04 283
原创 148. Sort List(快排、归并)
Sort a linked list in O(n log n) time using constant space complexity.首先给出快排解法:class Solution {public: ListNode *sortList(ListNode *head) { if(head == NULL) return NULL;
2017-02-20 20:34:33 463
原创 143. Reorder List(逆序一半再合成)
Given a singly linked list L: L0→L1→…→Ln-1→Ln,reorder it to: L0→Ln→L1→Ln-1→L2→Ln-2→…You must do this in-place without altering the nodes' values.For example,Given {1,2,3,4}, reorder it to {1,4,2,3}.S
2017-02-20 11:17:06 413
转载 epoll内核实现分析
注:之前写过两篇关于epoll实现的文章,但是感觉懂得了实现原理并不一定会使用,所以又决定写这一系列文章,希望能够对epoll有比较清楚的认识。是请大家转载务必注明出处,算是对我劳动成果的一点点尊重吧。另外,文中如果有不全面或者不正确的地方还请大家指出。也可以私信或者发邮件:lvyilong316@163.com1. ET模式实现分析1.1 ET和LT的实现区别 首先给出下面
2017-02-19 19:04:25 1778
原创 200. Number of Islands+130. Surrounded Regions(并查集/DFS)
首先看200题:Given a 2d grid map of '1's (land) and '0's (water), count the number of islands. An island is surrounded by water and is formed by connecting adjacent lands horizontally or vertically. You may
2017-02-10 20:42:50 523
原创 235.236:Lowest Common Ancestor of a Binary Search Tree/Tree(LCA问题)
连续两道LCA问题,一道是BST树的LCA求解,另外一道是普通二叉树的LCA求解。235:Total Accepted: 119152Total Submissions: 311598Difficulty: EasyContributors: AdminGiven a binary search tree (BST), find the lowest common ancestor (LCA
2017-02-10 20:33:16 286
原创 单源最短路径复习--Dijkstra算法和Floyd算法
昨天复习了一下单源最短路径问题,今天总结一下。解决单源最短路径问题,我们熟知的算法首先就是Dijkstra算法了。Dijkstra算法的核心就是贪心思想。我在以前的博客中也写过这个算法:图的拓扑排序、关键路径、最短路径算法 – C++实现,现在看以前的博客,我的代码思路还是很清晰的。Dijkstra算法可以求出某一点到其他所有点的最短路径,本文还将介绍一种可求出所有点对的最短路径的算法——Floyd
2017-02-09 12:06:32 1148
原创 多进程、共享内存的网络聊天室
好久没写网络聊天室了,去年暑假可以说写了一暑假,最近复习这些,又因为我一直偏向于多线程,就用多进程复习一下。下面给出昨天写的基于多进程、共享内存的网络聊天室代码。每个进程负责一个连接,多个进程之间仅共享读,不共享写,因此无需信号量来同步。分配的一段内存中,以数组的方式,分配给每个client一段buffer,每个clilent对应的buffer的索引就是connfd。当一个子进程收到客户端数据后,通
2017-02-08 12:14:30 2164 2
原创 信号量、消息队列、共享内存复习
信号量代码使用信号量实现父子进程间同步:#include <sys/sem.h>#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <sys/wait.h>union semun { int val; /* Value for SETVAL */ struct sem
2017-02-08 11:13:55 615
原创 网络编程定时器三:使用最小堆
前面讨论的定时方案都是以固定频率调用心搏函数tick,并在其中一次检测到期的定时器,然后执行到期定时器上的回调函数。设计定时器的另一中思路是,将所有定器超时时间最小的一个定时器的超时值作为心搏间隔。这样,一旦心搏函数tick执行,超时时间最小的定时器必然到期。我们就可以从剩余定时器中选出超时时间最小的一个,并将这个时间设为下一次心搏间隔。如此反复,就实现了较为精确的定时。最小堆适合这种解决方案,下面
2017-02-06 21:59:58 1439 1
原创 网络编程定时器二:使用时间轮
上次说到,基于排序链表的定时器存在一个问题:添加定时器的效率偏低。这次我们用时间轮来解决该问题。如图就是一个时间轮:在时间轮内,指针指向轮子上的一个槽。它以恒定的速率顺时针转动。没转动一步就指向下一个槽,每次转动称之为一个tick。一个滴答的时间称为时间轮的槽间隔si(slot interval),它实际上就是心搏时间。时间轮共有N个槽,因此它运转一周的时间是N*si。每个槽指向一个定时器链表,每条
2017-02-06 21:32:24 814
原创 123. Best Time to Buy and Sell Stock III(同小米风口的猪)
Say you have an array for which the ith element is the price of a given stock on day i.Design an algorithm to find the maximum profit. You may complete at most two transactions.Note:You may not engage
2017-02-06 10:42:50 282
原创 网络编程定时器一:使用升序链表
之前一直对定时器这块不熟,今天来练练手。首先我们来看实现定时器的第一种方式,升序链表。网络编程中应用层的定时器是很有必要的,这可以让服务端主动关闭时间很久的非活跃连接。另外一种解决方案是TCP的keepalive,但它只能检测真正的死连接,即客端主机断电,或者网线被拔掉这种情况。如果客端连接上,但什么都不做,keepalive是毫无办法的,它只能一定时间后不断的向客户端发送心跳包。定时器通常至少要包
2017-02-05 23:09:49 1881
原创 257. Binary Tree Paths(打印二叉树所有路径)
Given a binary tree, return all root-to-leaf paths.For example, given the following binary tree: 1 / \2 3 \ 5All root-to-leaf paths are:["1->2->5", "1->3"]首先我采用了dfs,但是我的方法有点麻烦。方法一:dfs/**
2017-02-05 15:11:25 769
原创 98. Validate Binary Search Tree(判断合法二叉搜索树)
Given a binary tree, determine if it is a valid binary search tree (BST).Assume a BST is defined as follows:The left subtree of a node contains only nodes with keys less than the node's key.The right
2017-02-05 11:57:19 1528
原创 347. Top K Frequent Elements
Given a non-empty array of integers, return the k most frequent elements.For example,Given [1,1,1,2,2,3] and k = 2, return [1,2].Note: You may assume k is always valid, 1 ≤ k ≤ number of unique elem
2017-02-05 09:46:51 245
原创 116. Populating Next Right Pointers in Each Node
Given a binary treestruct TreeLinkNode { TreeLinkNode *left; TreeLinkNode *right; TreeLinkNode *next;}Populate each next pointer to point to its next right node. If there is no next right node,
2017-02-05 09:00:42 324
原创 41. First Missing Positive(找到数组中未出现的最小正整数)
Total Accepted: 87074 Total Submissions: 348588 Difficulty: Hard Contributors: Admin Given an unsorted integer array, find the first missing positive integer. For example, Given [1,
2017-02-04 23:28:04 470
转载 Linux堆内存管理深入分析
Linux堆内存管理深入分析https://jaq.alibaba.com/community/art/show?articleid=315http://www.cnblogs.com/alisecurity/p/5520847.html0 前言近年来,漏洞挖掘越来越火,各种漏洞挖掘、利用的分析文章层出不穷。从大方向来看,主要有基于栈
2017-02-02 13:34:59 1388
原创 最近一段时间的总结
最近一段时间,我主要在牛客网刷题,所以大部分时间都没有写博客。不过我原本打算打过年那一天写个年终总结的,后来也没有写。寒假这段时间,我开始在学校呆了十几天,然后在这外面小宾馆包了一个月住着。实际上回家了两天,大年三十回的家,本来计划初一下午就来。结果家人一再说服我,我改成初二一大早才来的。原本我计划寒假不回家的,一直待在租的房子这里。不过我终究不舍得,原因有很多。过年前几天我奶奶还住院了,我妈也给我
2017-02-02 13:15:15 1538 2
原创 腾讯笔试题--微信红包
本来这题没什么难度,不值得我写博客的,谁知道一个失误花了半小时才做出来。写下来告诫自己不要再犯错。 春节期间小明使用微信收到很多个红包,非常开心。在查看领取红包记录时发现,某个红包金额出现的次数超过了红包总数的一半。请帮小明找到该红包金额。写出具体算法思路和代码实现,要求算法尽可能高效。 给定一个红包的金额数组gifts及它的大小n,请返回所求红包的金额。 若没有金额超过总数的一半,
2017-02-01 20:36:15 2899 2
转载 深入理解哈希表(JAVA和Redis哈希表实现)
有两个字典,分别存有 100 条数据和 10000 条数据,如果用一个不存在的 key 去查找数据,在哪个字典中速度更快?有些计算机常识的读者都会立刻回答: “一样快,底层都用了哈希表,查找的时间复杂度为 O(1)”。然而实际情况真的是这样么?答案是否定的,存在少部分情况两者速度不一致,本文首先对哈希表做一个简短的总结,然后思考 Java 和 Redis 中对哈希表的实现,最后
2017-02-01 16:17:45 3670
转载 谈谈面试--哈希表系列
前言: 我以前在百度的mentor, 在面试时特喜欢考察哈希表. 那时的我满是疑惑和不解, 觉得这东西很基础, 不就的分桶理念(以空间换时间)和散列函数选择吗? 最多再考察点冲突解决方案. 为何不考察类似跳跃表, LSM树等高级数据结构呢? 随着工程实践的积累, 慢慢发现了自己当初的肤浅. 面试的切入点, 最好是大家所熟悉的, 但又能从中深度挖掘/剖析和具有区分度的. 本文结合
2017-02-01 16:10:44 4830 1
原创 数据结构复习一:哈希表的总结
昨天复习了一下哈希表,今天来总结一下。哈希表概述哈希表,是根据关键码值(key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录。由于可以根据哈希函数直接得到对应位置,哈希表的查找时间复杂度为O(1)。这是一种以空间换时间的做法。通常哈希表的做法是采用数组实现,利用哈希函数把key转化成整形数字,然后将该数字对数组长度进行取余,取余结果当作数组的下标,将v
2017-02-01 16:06:26 2638
转载 memcached源码分析-----哈希表基本操作以及扩容过程
转载请注明出处:http://blog.csdn.net/luotuo44/article/details/42773231 温馨提示:本文用到了一些可以在启动memcached设置的全局变量。关于这些全局变量的含义可以参考《memcached启动参数详解》。对于这些全局变量,处理方式就像《如何阅读memcached源代码》所说的那样直接取其默认值。
2017-02-01 11:03:30 701
MySQL-python-1.2.5.win64-py2.7.exe
2016-09-20
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人