04 2015 档案
摘要:Given a range [m, n] where 0 >1; n=n>>1; ++count; } return m<<count; }};
阅读全文
摘要:Remove all elements from a linked list of integers that have valueval.ExampleGiven:1 --> 2 --> 6 --> 3 --> 4 --> 5 --> 6,val= 6Return:1 --> 2 --> 3 --...
阅读全文
摘要:题目描述:Write an algorithm to determine if a number is "happy".A happy number is a number defined by the following process: Starting with any positive in...
阅读全文
摘要:其中介绍了虚拟内存的机制以及mmap系统调用的实现。mmap允许直接将设备内存映射到用户进程的地址空间中。物理内存的管理,包括缓存的分配及回收,请页机制,交换空间等。1)交换模块(swap)这个模块负责控制内存内容的换入换出,它通过替换机制,使得物理内存的页框(RAM页)中保留有效的逻辑页,即从主存...
阅读全文
摘要:内核逻辑地址和内核虚拟地址的区别**********************************************************************1)凡是通过MMU页表访问的地址都叫虚拟地址,而一旦启用了MMU,那CPU发出的所有地址都是虚拟地址内核用到的地址范围是3G-4...
阅读全文
摘要:关于虚拟内存有三点需要注意:4G的进程地址空间被人为的分为两个部分--用户空间与内核空间。用户空间从0到3G(0xc0000000),内核空间占据3G到4G。用户进程通常情况下只能访问用户空间的虚拟地址,不能访问内核空间的虚拟地址。例外情况只有用户进程进行系统调用(代表用户进程在内核态执行)等时刻可...
阅读全文
摘要:kmalloc()和vmalloc()介绍kmalloc()用于申请较小的、连续的物理内存1. 以字节为单位进行分配,在中2. void *kmalloc(size_t size, int flags) 分配的内存物理地址上连续,虚拟地址上自然连续3. gfp_mask标志:什么时候使用哪种标志?如...
阅读全文
摘要:在支持MMU的32位处理器平台上,Linux系统中的物理存储空间和虚拟存储空间的地址范围分别都是从0x00000000到0xFFFFFFFF,共4GB,但物理存储空间与虚拟存储空间布局完全不同。Linux运行在虚拟存储空间,并负责把系统中实际存在的远小于4GB的物理内存根据不同需求映射到整个4GB的...
阅读全文
摘要:高端内存是指物理地址大于 896M 的内存。对于这样的内存,无法在“内核直接映射空间”进行映射。为什么? 因为“内核直接映射空间”最多只能从 3G 到 4G,只能直接映射 1G 物理内存,对于大于 1G 的物理内存,无能为力。 实际上,“内核直接映射空间”也达不到 1G, 还得留点线性空间给“内...
阅读全文
摘要:内核中用于临界区保护下的互斥机制,它包括自旋锁、原子操作和信号量,三者保证了对临界资源访问的互斥型。1.1 内核中的互斥机制1.1.1 自旋锁自旋锁用在多个CPU系统中。当一个线程在一个CPU上正使用资源,而另一个线程在另一个CPU上正忙等待这个资源的时候,就会用到自旋锁来保护临界资源。在单处理器系...
阅读全文
摘要:1 .1 进程结构每个进程都具有自己的属性,用一个task_struct数据结构来表示,它包含了进程的详细信息,主要有进程标识符(PID)、进程所占的内存区域、相关文件描述符、安全信息、进程环境、信号处理、资源安排、同步处理状态几个方面。数组task包含指向系统中所有task_struct结构的指针...
阅读全文
摘要:我们知道,水王问题:有N个数,其中有一个数出现超过一半,要求在线性时间求出这个数。那么,我的问题是,加强版水王:有N个数,其中有一个数刚好出现一半次数,要求在线性时间内求出这个数。因为,很明显,如果是刚好出现一半的话,如此例: 0,1,2,1 :方案一:根据上面的例子,最后我们可能会输出不是符合条件...
阅读全文
摘要:1 使用从大到小的优先队列保存最小的K个数,每次取出K个数之后的其余数和堆顶元素比较,如果比堆顶元素小,则将堆顶元素删除,将该元素插入void topK(int arr[],int n,int k){ if(k>n) return; priority_queue q; ...
阅读全文
摘要:Description:Count the number of prime numbers less than a non-negative number,nHint:The number n could be in the order of 100,000 to 5,000,000.C++实现代码...
阅读全文
摘要:并发编程如果逻辑控制流在实际上重叠,那么它们就是并发的,这种常见的现象称为并发,出现在计算机系统的许多不同层面上。应用级并发在其他情况下也是很有用的:访问慢速I/O设备。与人交互。通过推迟工作以降低延迟。服务多个网络客户端。在多核机器上进行并行计算。使用应用级并发的应用程序称为并发程序。现代操作系统...
阅读全文
摘要:一、UNIX I/O 在UNIX系统中有一个说法,一切皆文件。所有的I/O设备,如网络、磁盘都被模型化为文件,而所有的输入和输出都被当做对相应文件的读和写来执行。这种将设备映射为文件的方式,允许UNIX内核引出一个简单、低级的应用接口,称为UNIX I/O,这使得所有的输入和输出都能以一种统一且一致...
阅读全文
摘要:虚拟存储器虚拟存储器是硬件异常、硬件地址翻译、主存、磁盘文件和内核软件的完美交互,它为每个进程提供了一个大的、一致的和私有的地址空间。通过一个很清晰的机制,虚拟存储器提供了三个重要的能力:(1)它将主存看成是一个存储在磁盘上的地址空间的高速缓存,在主存中只保存活动区域,并根据需要在磁盘和主存之间来回...
阅读全文
摘要:linux内存管理---虚拟地址、逻辑地址、线性地址、物理地址的区别(一)这篇文章中介绍了四个名词的概念,下面针对四个地址的转换进行分析CPU将一个虚拟内存空间中的地址转换为物理地址,需要进行两步(如下图):首先,将给定一个逻辑地址(其实是段内偏移量,这个一定要理解!!!),CPU要利用其段式内存管...
阅读全文
摘要:分析linux内存管理机制,离不了上述几个概念,在介绍上述几个概念之前,先从《深入理解linux内核》这本书中摘抄几段关于上述名词的解释:一、《深入理解linux内核》的解释逻辑地址(Logical Address) 包含在机器语言指令中用来指定一个操作数或一条指令的地址(有点深奥)。这种寻址方式...
阅读全文
摘要:1 思路:自己实现一个栈,其中成员为标准库中的栈,一个存放全部的元素,一个存放最小元素,一个存放最大元素。使用自己实现的栈来实现一个求最大值最小值的队列,其中包含两个成员,一个作为出队的栈,一个作为入队的栈。2 C++实现代码:#include#include#includeusing namesp...
阅读全文
摘要:一、题目概述:有一个没有排序,元素个数为2N的正整数数组。要求把它分割为元素个数为N的两个数组,并使两个子数组的和最接近。假设数组A[1..2N]所有元素的和是SUM。模仿动态规划解0-1背包问题的策略,令S(k, i)表示前k个元素中任意i个元素的和的集合。显然:S(k, 1) = {A[i] |...
阅读全文
摘要:上一篇文章分析了互联网的总体构思,从下至上,每一层协议的设计思想。这是从设计者的角度看问题,今天我想切换到用户的角度,看看用户是如何从上至下,与这些协议互动的。==============================================================互联网协议入门(...
阅读全文
摘要:我们每天使用互联网,你是否想过,它是如何实现的?全世界几十亿台电脑,连接在一起,两两通信。上海的某一块网卡送出信号,洛杉矶的另一块网卡居然就收到了,两者实际上根本不知道对方的物理位置,你不觉得这是很神奇的事情吗?互联网的核心是一系列协议,总称为”互联网协议”(Internet Protocol Su...
阅读全文
摘要:题目你有10亿个url,每个url对应一个非常大的网页。你怎么检测重复的网页?解答网页大,数量多,要把它们载入内存是不现实的。 因此我们需要一个更简短的方式来表示这些网页。而hash表正是干这事的。 我们将网页内容做哈希,而不是url,这里不同url可能对应相同的网页内容。将每个网页转换为一个哈希值...
阅读全文
摘要:题目有一个数组,里面的数在1到N之间,N最大为32000.数组中可能有重复的元素(即有的元素 存在2份),你并不知道N是多少。给你4KB的内存,你怎么把数组中重复的元素打印出来。解答我们有4KB的内存,一共有4 * 210* 8位,大于32000,所以我们可以用Bit Map 来做这道题目。题目很简...
阅读全文
摘要:题目给你一个文件,里面包含40亿个整数,写一个算法找出该文件中不包含的一个整数, 假设你有1GB内存可用。如果你只有10MB的内存呢?解答我们先来做个算术题,40亿个整数大概有多大?40 * 10^8 * 4B = 16GB (大约值,因为不是按照2的幂来做单位换算)这个明显无法一次性装入内存中。但...
阅读全文
摘要:题目给你一个排好序的并且穿插有空字符串的字符串数组,写一个函数找到给定字符串的位置。例子:在字符串数组 [“at”, “”, “”, “”, “ball”, “”, “”, “car”, “”,“”, “dad”, “”, “”] 中找到”ball”,返回下标4.例子:在字符串数组 [“at”, “...
阅读全文
摘要:题目写一个函数对字符串数组排序,使得所有的变位词都相邻。解答首先,要弄清楚什么是变位词。变位词就是组成的字母相同,但顺序不一样的单词。 比如说:live和evil就是一对变位词。OK,那么这道题目的意思就很清楚了, 它并不要求我们将字符串数组中的字符串按字典序排序,否则我们直接调用STL中的sort...
阅读全文
摘要:题目原文:写程序交换一个整数二进制表示中的奇数位和偶数位,用尽可能少的代码实现。 (比如,第0位和第1位交换,第2位和第3位交换…)解答这道题目比较简单。分别将这个整数的奇数位和偶数位提取出来,然后移位取或即可。代码如下:int swap_bits(int x){ return ((x & 0...
阅读全文
摘要:题目给定一个字符串类型(string)表示的小数,打印出它的二进制表示。 如果这个数无法精确地表示为二进制形式,输出”ERROR”。解答整数部分通过不断地对2取余然后除以2来得到其二进制表示, 或是不断地和1按位与然后除以2得到其二进制表示。 小数部分则通过不断地乘以2然后与1比较来得到其二进制表示...
阅读全文
摘要:题目设计算法并写出代码移除字符串中重复的字符,不能使用额外的缓存空间。注意: 可以使用额外的一个或两个变量,但不允许额外再开一个数组拷贝。进一步地,为你的程序写测试用例。解答这道题目其实是要你就地(in place)将字符串中重复字符移除。你可以向面试官问清楚, 不能使用额外的一份数组拷贝是指根本就...
阅读全文
摘要:版权所有,转载请注明出处,谢谢!http://blog.csdn.net/silangquan/article/details/18655795 连续两次面试都问到了红黑树,关键两次都没有答好,这次就完整地来学习整理一下。没有学习过红黑树的同学请参考:> Chapter 13 Red-Black T...
阅读全文
摘要:提要 今天要整理的知识点是C++中有关虚的一切。 包括:虚函数,纯虚函数,虚基类,虚继承...1.什么是虚函数,有什么作用?在基类用virtual声明成员函数为虚函数。这样就可以在派生类中重新定义此函数,为它赋予新的功能,并能方便地被调用。在类外定义虚函数时,不必再加virtual。该函数就...
阅读全文
摘要:语言相关什么是displacement new?placement new是重载operator new的一个标准、全局的版本,它不能被自定义的版本代替(不像普通的operator new和operator delete能够被替换成用户自定义的版本)。它的原型如下:void *operator ne...
阅读全文
摘要:1、HR:你希望通过这份工作获得什么?1)、自杀式回答:我希望自己为之工作的企业能够重视质量,而且会给做得好的员工予以奖励。我希望通过这份工作锻炼自己,提升自己的能力,能让公司更加重视我。a、“我希望通过这份工作锻炼自己,提升自己的能力。”同学,公司又不是学校,是希望你过来干活的,学习的目的也是更好...
阅读全文
摘要:节约系统内存和CPUhttp://www.csdn.net/article/2015-02-12/2823952Web系统大规模并发——电商秒杀与抢购http://www.csdn.net/article/2014-11-28/2822858(曾经阿里电话面试和腾讯的后台开发都说过的问题,记住记住)...
阅读全文
摘要:一、概述 我们看到上面的TCP客户同时处理两个输入:标准输入和TCP套接字。我们遇到的问题就是在客户阻塞于(标准输入上的)fgets调用期间,服务器进程会被杀死。服务器TCP虽然正确地给客户TCP发送一个FIN,但是既然客户进程阻塞于从标准输入读入的过程,它将看不到这个ROF,知道从套接字读时...
阅读全文
摘要:1.C语言的函数malloc和free(1)函数malloc和free在头文件中的原型及参数 void * malloc(size_t size)动态配置内存,大小有size决定,返回值成功时为任意类型指针,失败时为NULL。void free(void *ptr)释放动态申请的内存空间,调用f...
阅读全文
摘要:关于C/C++中结构体变量占用内存大小的问题,之前一直以为把这个问题搞清楚了,今天看到一道题,发现之前的想法完全是错误的。这道题是这样的:在32位机器上,下面的代码中class A{public: int i; union U { char buff[13];...
阅读全文
摘要:1uptimeuptime 命令可以用来查看服务器已经运行了多久,当前登录的用户有多少。2 toptop命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器.3 psps命令用来列出系统中当前运行的那些进程。ps命令列出的是当前那些进程的快...
阅读全文
摘要:switch在判断分支时,没有判断所有的可能性,而是用一个静态表来解决这个问题,所以速度要比if-else快。但是,switch对较复杂的表达式进行判断,所以当我们需要判断一些简单数值时,用switch较好。下面是转载的内容,我看说的很有道理switch和if-else相比,由于使用了Binary ...
阅读全文
摘要:1.引言计算机网络中的带宽、交换结点中的缓存和处理机等,都是网络的资源。在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络的性能就会变坏。这种情况就叫做拥塞。拥塞控制就是防止过多的数据注入网络中,这样可以使网络中的路由器或链路不致过载。拥塞控制是一个全局性的过程,和流量控制不同...
阅读全文
摘要:最近研究mysql源码,各种锁,各种互斥,好在我去年认真学了《unix环境高级编程》, 虽然已经忘得差不多了,但是学过始终是学过,拿起来也快。写这篇文章的目的就是总结linux 下多线程编程,作为日后的参考资料。本文将介绍linux系统下多线程编程中,线程同步的各种方法。包括:互斥量(mutex)读...
阅读全文
摘要:1. 介绍本文介绍智能指针的使用。智能指针是c++ 中管理资源的一种方式,用智能指针管理资源,不必担心资源泄露,将c++ 程序员 从指针和内存管理中解脱出来,再者,这也是c++发展的趋势(这话不是我说的,见《Effective c++》和《c++实践编程》),应该认真学习一下。智能指针中,最有名的应...
阅读全文
摘要:本文乃作者学习《C++标准程序库》的学习笔记,首先介绍了仿函数(函数对象)和函数适配器(配接器)的概念,然后列出STL中所有的仿函数,以及函数适配器,并摘录了几个例子演示仿函数和函数适配器的用法,最后讨论了仿函数的组合,以及实现方法。1.仿函数是什么东西?《C++标准程序库》里对仿函数的解释是:仿函...
阅读全文
摘要:STL中,sort的默认排序为less,也就是说从小到大排序;priority_queue默认是less,也就说大顶堆;map默认是less,也就说用迭代器迭代的时候默认是小的排在前面;set默认是less,也就是说用迭代器迭代的时候是从小到大排序的。1、sort#include #include ...
阅读全文
摘要:You are a professional robber planning to rob houses along a street. Each house has a certain amount of money stashed, the only constraint stopping yo...
阅读全文
摘要:好久没有刷leetcode了,要继续了。。今天第一题。Given a binary tree, imagine yourself standing on therightside of it, return the values of the nodes you can see ordered fr...
阅读全文
摘要:sort()函数是C++中的排序函数其头文件为:#include头文件;qsort()是C中的排序函数,其头文件为:#include qsort()----六类qsort排序方法 qsort函数很好用,但有时不太会用比如按结构体一级排序、二级排序、字符...
阅读全文
摘要:算法的思路是:从头到尾遍历文件,从文件中读取遍历到的每一个单词。把遍历到的单词放到hash_map中,并统计这个单词出现的次数。遍历hash_map,将遍历到的单词的出现次数放到优先级队列中。当优先级队列的元素个数超过k个时就把元素级别最低的那个元素从队列中取出,这样始终保持队列的元素是k个。遍历完...
阅读全文
摘要:0 堆内存的在计算机内存中的形式根据《TheC Programming language》推测得到堆内存,图中的Heap区域即为堆内存块(Heap区域的数目不代表计算机堆内存的真实数目)。[1]堆内存不连续。只有标识为Heap的才是堆内存。[2] 在malloc()/free()看来,每个Heap所...
阅读全文
摘要:解决TCP网络传输“粘包”问题当前在网络传输应用中,广泛采用的是TCP/IP通信协议及其标准的socket应用开发编程接口(API)。TCP/IP传输层有两个并列的协议:TCP和UDP。其中TCP(transport control protocol,传输控制协议)是面向连接的,提供高可靠性服务。U...
阅读全文
摘要:许多程序会大量使用字符串。对于不同的字符串,我们希望能够有办法判断其相似程序。我们定义一套操作方法来把两个不相同的字符串变得相同,具体的操作方法为: 1.修改一个字符(如把“a”替换为“b”); 2.增加一个字符(如把“abdd”变为“aebdd”); 3.删除一个字符(如把“travelli...
阅读全文
摘要:我们试着降低此问题的复杂度。因为上述思路一再进行查找的时候,总是重复地循环,效率不高。那么怎么简化呢?先来看看这些序列:w0,w1,w2,w3,q0,w4,w5,q1,w6,w7,w8,q0,w9,q1 问题在于,如何一次把所有的关键词都扫描到,并且不遗漏。扫描肯定是无法避免的,但是如何把两次扫描...
阅读全文
摘要:今天,我们再来研究另一个相关的问题。有些时候,除了找到关键词,我们还希望找到与原文章相似的其他文章。比如,"Google新闻"在主新闻下方,还提供多条相似的新闻。为了找出相似的文章,需要用到"余弦相似性"(cosine similiarity)。下面,我举一个例子来说明,什么是"余弦相似性"。为了简...
阅读全文
摘要:这个标题看上去好像很复杂,其实我要谈的是一个很简单的问题。有一篇很长的文章,我要用计算机提取它的关键词(Automatic Keyphrase extraction),完全不加以人工干预,请问怎样才能正确做到?这个问题涉及到数据挖掘、文本处理、信息检索等很多计算机前沿领域,但是出乎意料的是,有一个非...
阅读全文
摘要:tencent2012 笔试题附加题问题描述: 例如手机朋友网有 n 个服务器,为了方便用户的访问会在服务器上缓存数据,因此用户每次访问的时候最好能保持同一台服务器。已有的做法是根据 ServerIPIndex[QQNUM%n]得到请求的服务器,这种方法很方便将用户分到不同的服务器上去。但是如果一台...
阅读全文
摘要:问题起源于编程珠玑Column 12中的题目10,其描述如下: How could you select one of n objects at random, where you see the objects sequentially but you do not know the value...
阅读全文
摘要:Linux进程间通信——使用数据报套接字前一篇文章,Linux进程间通信——使用流套接字介绍了一些有关socket(套接字)的一些基本内容,并讲解了流套接字的使用,这篇文章将会给大家讲讲,数据报套接字的使用。一、简单回顾——什么是数据报套接字socket,即套接字是一种通信机制,凭借这种机制,客户/...
阅读全文
摘要:Linux进程间通信——使用流套接字前面说到的进程间的通信,所通信的进程都是在同一台计算机上的,而使用socket进行通信的进程可以是同一台计算机的进程,也是可以是通过网络连接起来的不同计算机上的进程。通常我们使用socket进行网络编程,这里将会简单地讲述如何使用socket进行简单的网络编程。一...
阅读全文