自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(37)
  • 资源 (12)
  • 收藏
  • 关注

原创 关于网络(同步、异步、阻塞、非阻塞,select/poll/epoll,rpc/msgqueue,tcpip常见面试题)

1、先浅谈同步和异步:同步和异步关注的是消息通信机制所谓同步,就是在发出一个”请求或者调用“时,在没有得到结果之前,这个"请求或者调用"就不返回。但是一旦调用返回,那就是肯定得到返回值所谓异步,"请求或者调用"发出之后,就直接返回了,不会有任何返回值,返回值由被调用者,通过状态、通知、回调函数等等方式来通知调用者沿用网上众多通俗例子之一:你打电话问书店老板有没有

2017-08-30 19:50:33 1069

原创 关于c++的class(继承、重载、隐藏)

关于继承1、关于成员函数重载重载:满足以下三点叫做重载在同一类中;在同一个范围中(如都在public中);函数名相同(返回值、参数均可以不同)例子:class A { public: void func (int i, int j) { std::cout << "func has two args: " << i

2017-08-28 23:59:21 663

原创 排序总览

排序是出镜率最高的面试题,基本上没有之一一、就排序说排序这一环节的目的,一方面是完全熟悉常用常考的排序,另一方面是对排序所涉及的相关的知识,如时间复杂度的感觉到理解、不同的数据结构、不同的算法思路、排序解决的问题、排序在实际问题中的用途,建立一个更全面的体系,毕竟不论是面试还是实际工作,所面对的问题远远不会是仅是会写排序。1.0、排序本身都有哪些排序:1、原地比较排序:

2017-08-27 21:20:38 298

原创 关于redis

一、干什么用的:1、用于kv存储:数据实际存储在内存里,比起mysql存在磁盘里,读写都更加快速优点:比起那些存在磁盘里的,读写肯定更快(确切的说应该是redis自身的读写操作特别快,但实际使用中,redis以另一进程存在,则如计入网络开销就不好说了,典型如rocksdb等进程内数据库而且还基于lsm-tree的另论,尤其对于写)缺点:数据存在内存里,内存能用多大呢,大规模的数据不宜存

2017-08-26 23:58:46 834

原创 Hash总览

一、原理1、定义:把任意长度的输入,通过散列算法,变换成固定长度的输出,该输出就是Hash值;             散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,即不可能从散列值来唯一的确定输入;             对不同的关键字可能得到同一散列地址,这种现象称冲突。     越优秀的hash算法越会使输入值尽可能得到不同的输出值,即越少的产

2017-08-26 20:21:09 337

原创 布隆过滤器

布隆过滤器:1、用途:本质相当于一个集合,用于快速判断一个元素是否在集合之内2、实现原理:2.1、自行准备若干hash函数2.2、准备一个足量的数组创建bitmap,足量与否根据hash值范围2.3、插入时:用所有hash函数对key取hash值,均插入bitmap2.4、判断时:用所有hash函数对key取hash值,判断bitmap是否均已set2.5、注意,已经插

2017-08-23 16:01:07 283

原创 LRUCache

LRUCache往往用于排列最近被”修改或访问过的热门的“数据,属缓存类目,是我个人认为链表系中,和跳表共同组成链表系的两个最大的实体其组成,就是一个双向链表,同时有一个hash表实现快速的由key找到对应节点,当有读取操作时,如果能够找到对应key的节点,不仅符合节点value,还会把该key对应节点放在链表头部位置,当修改或插入操作时,如hash表可以找到该key的节点即updat

2017-08-21 20:30:36 324

原创 bitmap用途

bitmap是压缩存储的一个重要手段,往往在海量数据处理问题中出现到。其基本原理:希望用每一位能代表一个数字,所以需要首先知道待处理数据的最大值,比如待处理的数据范围是0-1亿,那么申请一个数组,数组的大小为:1亿/32 + 1,最大值1亿会落在最后一个数组成员的第0位,0-1亿范围中的每个数字,根据其除以32的除数结果和余数,可知其落在哪个数组成员以及在该数组成员的哪一位,通过移位可以极快的

2017-08-21 17:49:23 2060

原创 打印普通二叉树最大搜索子树

点:二叉树边界技巧题意:一个任意的二叉树,可以不是二叉排序树,或者部分子树是二叉排序的,打印这个二叉树中符合二叉搜索树性质的子树中,节点最多的子树程序员代码面试指南面试题思路:二叉排序树的性质就是:父节点比左节点大,比右节点小。依赖这个性质思考:首先,这个适合后续遍历,因为后续遍历能得到左右子树的执行结果再去判断计算自己的结果,然后,随便画一个二叉树

2017-08-21 16:48:01 351

原创 二叉树打印节点和为某值的全部路径

点:深度遍历运用题意:如一个二叉树,求和为某节点值的全部路径。剑指offer面试题25思路:深度遍历中的前序遍历是先拿当前节点值,再接着遍历,显然这个是适合本题需求的题意要求能打印出全部的路径,这需要遍历过程中,能知道之前已经走过的路径,也就是需要将过往路径也递归入栈,所以,走前序遍历,入栈的除了当前的节点,还包括当前已经累加的和,当前走过的路径,当然还需要那个

2017-08-21 15:20:12 507

原创 二叉树按层遍历并按层打印和蛇形打印

点:技巧性问题题意:一个二叉树按层的遍历和按层打印常见面试题思路:二叉树按层遍历和打印有很多办法,无外乎各种方式做到按层暂存并暂存该层的下一层节点,这样不停的直到树结尾我的思路是用2个队列,队列1保存当前层节点,队列2保存当前层下一层的节点,从左节点的左子节点开始,这是对应有些面试题要求保证输出的顺序是从左至右,以及蛇形打印之类的题。1、按顺序从左到右打

2017-08-21 14:32:28 3829

原创 字符串左右旋

点:技巧性问题题意:如字符串1234567890,希望旋转为5678901234常见面试题思路:还是那句话,这类题,绝对是各种技巧去解决,递归、循环、双向相遇、快慢指针、各种其他技巧。。。。。具体到本题,直接交换的话实现起来甚至还非常麻烦,比如5不能和1交换,因为最后两个字符90怎么办,这种情况程序很难描述。最好的办法是1234能够和567890整体换位,而不是

2017-08-21 13:08:56 275

原创 海里数据topk

点:海量数据往往意味着不能按部就班的排序,因为很可能内存根本装不下无法做原地比较排序海量数据处理问题不限于topk问题的往往几个点:1、hash系:绝非把全部数据装入一个hashmap之类东西再去处理,而是重在巧用,如bitmap、bloomfilter2、线性排序系:空间换时间的方式表面看在海里数据时更糟糕,但桶排序的数据分布思想、基数排序的”基数“思想在处理某些海量数据问题时非常有

2017-08-20 22:21:42 449

原创 跳表

跳表,形象化的表述差不多可说是树形链表,普通单链表的增删查改的时间复杂度和所操作节点的位置有关,如下面的有序链表:1  5  6  8  10  13  15  18  23  25  28  31上面这个有序链表,如果查找节点23,需要从头节点1一步步的走到23,如果链表很长那么效率就很低。跳表则是一种层次化的有序单链表,可以认为一个跳表是由若干个有序单链表组成的,比如:

2017-08-20 21:23:33 373

原创 把奇/偶数(或某种特征的数)都放在数组左边问题

点:按某种维度去聚集问题,典型的数组按相遇问题搞题意:如数组[1,5,3,2,4,7,8,66,34,21,23,56,99],希望把全部的奇数集中在数组左边,偶数放右边,如[1,3,5,7,9,2,4,6,8,0]这样剑指offer面试题14思路:按某种维度去聚集问题,典型的数组按相遇问题搞。两个指针一个在头一个在尾,一个向前一个向后,不断一方把本方不符的和对方不符的

2017-08-20 17:19:02 458

原创 三个非比较排序(线性排序)

1、计数排序:条件:基本上仅用于数字排序,需要知道数据的上下限,而且最好从0开始这样实现起来比较方便些,需要[上限 - 下限]的空间复杂度,时间复杂度可以按教科书的认知是O(N),实际操作起来其实要随数据范围的变大而变大(O(N * 2) + O(范围长度)),如数据范围特别大从0-2^32,这样的话计数排序的时间复杂度也相当不小。结论:适合范围不太大的数据的排序,最好从0到正整数

2017-08-20 17:05:05 304

原创 数组最大连续乘积

点:近似于”最大连续子串之和“,只是”最大连续子串之和“的”增量下界“是0,即只需判断:dp中的上一状态的极值如果小于0那么就不要累加了,而乘积有负数的可能性。题意:如数组[-5,8,-13,0,12,9,-1,17],里边可以有任意正整数,即0、负整数、正整数,求最大连续乘积是多少。常见面试题思路:可以肯定的是,和”最大连续子串之和“一样,应使用动态归划。考虑乘法

2017-08-19 15:04:22 829

原创 消息id乱序接收但顺序发送问题

点:将问题抽象,对应到能完成功能的数据结构算法题意:如rpc server,rpcid是从1-N的正整数不重复,先后接收到rpcid为3、1、5、2、4、8、6、7的消息,即乱序接收,但它必须做到按顺序返回相应部分的返回,比如对于3、1、5、2、4、8、6、7的接收顺序,rpc server的返回顺序应该是1、2、3(接收到2时)和4、5(接收到4时)和6、7、8(接收到7时)

2017-08-18 22:25:15 1924

原创 寻找字符串里第一个只出现过一次的字符

点:灵活的思维题意:一个字符串如"abcbddeffg",其中的a、c、e、g都是只出现过一次的字符,而a是它们中最靠前的,找出这样的最靠前的只出现过一次的字符。剑指offer面试题35思路:可能都知道用hash的方式去找,但是如何找到第一个呢,其实并不难只是需要一个稍微灵活的思维1、遍历一次用hash获取每个字符出现的次数2、再从头遍历一次由hash数组找出第

2017-08-18 21:27:17 708

原创 寻找无序数组中的全部降序对

点:巧用归并排序思维题意:如数组[10,3,15,11,13,1,5,19,2,5,8,7,23,20],寻找其中全部的降序对,所谓降序对,就是数组中,某个位置靠前的数字比某个位置靠后的数字大,比如10在3的前面但是比3大,那么[10,3]就是一个降序对,目的就是寻找全部的降序对。剑指offer面试题36思路:非常直观的办法是,从第一个数开始,遍历其后面的数,相当于冒泡

2017-08-18 21:05:08 359

原创 归并排序

点:归并排序,二分的思想题意:归并排序思路:归并排序很可能不是直接的面试题,但它的思想会用于很多其他的面试题的思路。归并的思想:1、不断的二分,直到最终分为一组组单对单pk的时候(对于代码就是递归的二分,直到start==end),然后pk出大小,形成一个个的两元素的有序组合2、一个个的两元素的组合,再进行2v2的pk,形成有序的四元素组合,进而是更多元素的有序

2017-08-18 20:31:04 201

原创 两个相交的单向链表求交点

点:边界细心处理,栈运用题意:两个链表相交,求交点剑指offer面试题37思路:首先也说一下如何判断两个链表是否相交这是个普通常见题:看他们的尾节点是不是一个。    快速找交点,用栈,当然需要O(M+N)的空间复杂度,即两个栈分别保存两个链表的全部节点地址,既然是相交的,那么从相交节点到尾节点一直都会是同一个节点,利用栈特点,两个链表全部节点分别入栈后,两个栈同步

2017-08-18 15:27:24 525

原创 字符串的全排列

点:理解全排列,递归的运用题意:如字符串abcd,获取其全排列就是:abcd、abdc、acbd、acdb、adcb、adbc、     bacd、badc、bcad、bcda、bdca、bdac、     cbad、cbda、cabd、cadb、cdba、cdab、     dbca、dbac、dcba、dcab、dacb、dabc共24种剑指offer面试题28

2017-08-18 14:43:41 3000

原创 数组中连续子数组的和的最大和

点:动态归划题意:一个数组中,如[1,2,3,4,5],[1,2,3]、[3,4,5]、[1],都可以称之为其的连续子数组,即可以是一个元素,也可以是连续多个元素,必须要连续就行    这样的连续子数组,其元素之和就是其所有元素相加之和。求具有最大的元素之和的连续子数组是哪个。剑指offer面试题31思路:典型动态归划题,符合”子问题“、”极值条件“。

2017-08-18 12:41:11 377

原创 判断一个二叉树是否是AVL树

点:二叉树题意:判断一个二叉树是否是AVL树,即二叉树任意一个节点的左右子树深度之差不得大于1剑指offer面试题39引申思路:和算二叉树的深度一样,依然按后序,然后依次求深度,同时传入一个bool变量入函数栈,每个节点只要发现左右子树深度超过1,就可以说明已经不是avl树了。在剑指offer中还有一种更高效的解法,它虽然也依赖树的深度,但不是以算深度为主导

2017-08-18 11:18:25 3272

原创 二叉树的深度

点:二叉树题意:相当于二叉树的最高层数,如果只有一个节点则为1,否则为最低一层叶子节点所在层剑指offer面试题39思路:按后序遍历,不断递归获取左右子树直到叶子节点为止,按左右子树深度最高者代码“:#include #include template struct Node { T val; Node *lchild;

2017-08-18 10:19:55 190

原创 二叉树的镜像(反转)

点:二叉树题意:以前左节点改成右节点,以前右节点改成左节点剑指offer面试题19思路:就是左右孩子指针的交换代码:#include #include template struct Node { T val; Node *lchild; Node *rchild; Node(T _val):val(_val)

2017-08-18 10:16:08 331

原创 判断一个二叉树是否是另一个二叉树的子树

点:二叉树理解,递归的运用题意:如二叉树A,如下:                                                                                 16                                   7                                              

2017-08-17 20:30:47 2668

原创 两个有序链表合并

点:基本功题意:两个有序单向链表合并为一个新的链表剑指offer面试题17思路:基本功,条件要考虑周全。代码:#include template struct Node { int val; Node *next; Node(T _val):val(_val), next(nullptr) {}};template cl

2017-08-17 19:26:02 232

原创 单向链表逆序

点:基本功题意:单向链表逆序剑指offer面试题16思路:硬功夫    一定注意链表只有1个节点的情况,这种面试题专门在这种地方来恶心。代码:#include template struct Node { int val; Node *next; Node(T _val):val(_val), next(nullptr)

2017-08-17 18:56:23 331

原创 单向链表的倒数第k个节点

点:边界代码编写能力题意:一个单链表,获取其倒数第k个节点的值。注意链表最后一个节点是倒数第一个节点。剑指offer面试题15思路:两个链表指针初始指向头,第一个先走k步,然后第二个和第一个齐头走,当第一个走到最后一个节点时,第二个所在位置就是倒数第k个节点处。    注意:要考虑链表根本不足k个节点的情况。另外边界代码一定提前画清楚考虑清楚再去写。代码

2017-08-17 18:44:28 247

原创 有序数组的旋转数组的最小值

点:二分查找深度运用,抽象分析问题题意:如[0,1,2,3,4,5]是一个递增数组,[3,4,5,0,1,2]就是其一个旋转数组,即3、4、5旋转到了数组头部。注意包括[0,1,1,1,1,1]这也算是一个递增数组。    给定任意一个递增数组的旋转数组,求里边元素的最小值。剑指offer面试题8思路:直观的方式就是遍历,直到发现最小,或者不再递增。相当于O(N)。

2017-08-17 17:25:16 406

原创 两个栈实现一个队列

点:栈的运用题意:用两个栈实现一个队列的功能剑指offer面试题7思路:栈1用于不断的push入数据,当需要做队列的front、pop时,把栈1的数据全部挨个pop出来并push到栈2,这样数据的顺序,在栈2级实现了逆序,即和队列一致了。数据平时依然push到栈1,需要取时从栈2取,栈2为空了就把栈1再整体pop出来挨个推入栈2。代码:#include

2017-08-17 15:52:59 220

原创 由前序遍历和中序遍历创建二叉树

点:二叉树的理解,代码能力题意:由前序遍历序列和中序遍历的序列,创建对应的二叉树。    如前序序列:16, 7, 6, 3, 14, 12, 8, 15, 28, 23, 27, 41, 30, 29, 55    和中序序列:3, 6, 7, 8, 12, 14, 15, 16, 23, 27, 28, 29, 30, 41, 55思路:1、前序遍历序列的第一个元素

2017-08-17 15:36:29 595

原创 从尾到头打印单向链表

点:抽象问题简化问题题意:单链表,从尾到头打印如原始链表:0 1 2 3 45 6 7 8 9则应该打印:9 8 7 6 54 3 2 1 0思路:如果做链表逆序,会破坏原始链表。这是应该倒过来想。    递归、栈,是倒过来想的常用伎俩,是解决很多面试题的思路。    本题的方案就是:顺序遍历一次,把每个节点值依次入栈,可以显示用栈也

2017-08-17 12:43:16 290

原创 字符串替换空格

点:抽象问题简化问题题意:一个字符串,比如"  aaa  baea erwe dsa dsa f a ",替换其中的空格字符为"%20"。剑指offer面试题4思路:这个问题的点在于,如果正常从头到尾替换的话,每一个被替换空格,它后面的全部字符串都需要做整体移动    所以要设法想出,怎么能够减少字符串移动    非空格字符需要复制,是不能被减少的。空格可以无处

2017-08-17 12:28:58 430

原创 二维有序数组查找

点:逻辑思维。抽象问题并将问题分为子问题 题意:一个二维数组,每一行按行都是有序的,每一列按列也是有序的,如下图的二维数组,每一行每一列,都是升序排列如数组:1 2 8 9 102 4 912 17 4 7 1013 21 5 8 1115 23 7 13 1518 25这时需要找到某一数字,如何能够找到、高效的找到。

2017-08-17 11:52:11 966

linux用户进程内存映射

详解mmap、malloc在内核态的实现,原理是什么,有详细的描述和加的内核源码注释,可完全理解用户进程申请内存是怎么一回事

2013-08-28

linux进程创建详解

详细的描述linux系统调用fork、vfork、clone在内核中的实现,既有详细文字描述又有全部的源码加注释,有助于深入理解linux进程地址空间

2013-08-28

linux缺页异常详解

全面描述linux arm缺页异常的处理原理和处理方式,结合原理的解释描述以及全部相关的源码注释,深刻理解缺页异常

2013-08-28

linux arm的高端内存映射详解

以一个实际的linux的arm设备(不是什么2440!)描述了高端内存原理和源码注释详解,能够清楚的理解什么是高端内存,什么是vmalloc,什么是永久映射,什么是临时映射,需要注意什么,应用场合是怎样,在源码中的前龙后脉都有详细的注释和解释

2013-08-22

slab完全详解

目前有很多讲slab的文章,要么是纯讲原理画一堆图结合源码不深导致理解困难,要么是纯代码注释导致理解更困难,我在猛攻了一周时间后,细致总结一下slab,争取从原理到源码都能细致的理解到并立刻达到清楚的使用

2013-08-21

armlinux的bootmem分配器

详细描述armlinux启动阶段的bootmem分配器是怎么一回事,干什么的,中间被谁用过,最后被伙伴系统收编,结合函数和讲解,有价值

2013-08-12

linux内存页表创建

对linux内存页表创建的详细讲解,和本博客前面文章紧密联系,讲解了物理内存、硬件IO、中断是如何映射的,什么是内存,内存映射是怎么一回事,另有例子演示,适合正确理解概念的文章

2013-08-08

linux设备模型之sysfs使用

linux 设备模型的衍生产物sysfs的描述和用法,包括举例,初学者原创

2013-05-20

基于systemV的消息队列的多进程间CS通讯实现

花了近一周时间搞定的东东,多进程间通信实现,可编成动态库,挺实用的,望多交流指教!

2013-05-19

linux设备模型的I2C具体实现

疯狂研究I2C模型四五天,终于搞定后的心得,原创心得,全是手写,希望能共同交流!

2013-05-19

linux设备模型_____相关函数

本人经一段时间钻研linux设备模型、sysfs、I2C驱动后所写,初学者的原创心得,应该也适合初学者理解!

2013-05-19

linux设备模型____宏观印象

本人经一段时间钻研linux设备模型、sysfs、I2C驱动后所写,初学者的原创心得,应该也适合初学者理解!

2013-05-19

空空如也

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

TA关注的人

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