随笔分类 - 工作面试
摘要:1. 给定一个单词a,如果通过交换单词中字母的顺序可以得到另外的单词b,那么定义b是a的兄弟单词,例如单词army和mary互为兄弟单词。现在给定一个字典,用户输入一个单词,如何根据字典找出这个单词有哪些兄弟单词?要求时间和空间效率尽可能的高。【2012年百度实习生招聘笔试题】思路一:使用trie树。在字典树的前缀中再存储一个vector结构的容器:Cpp代码structword{vectorbrother;//用于保存每个单词的兄弟单词word*next[26];//字典树中每个节点代表一个字符,并指向下一个字符};如上述数据结构所示,字典树的建立是在预处理阶段完成的,首先根据字典中的单词来
阅读全文
摘要:1、海量数据分布在100台电脑中,想个办法高校统计出这批数据的TOP10。方案1:s在每台电脑上求出TOP10,可以采用包含10个元素的堆完成(TOP10小,用最大堆,TOP10大,用最小堆)。比如求TOP10大,我们首先取前10个元素调整成最小堆,如果发现,然后扫描后面的数据,并与堆顶元素比较,如果比堆顶元素大,那么用该元素替换堆顶,然后再调整为最小堆。最后堆中的元素就是TOP10大。2、 1000万字符串,其中有些是重复的,需要把重复的全部去掉,保留没有重复的字符串。请怎么设计和实现?方案1:这题用trie树比较合适,hash_map也应该能行。3、一个文本文件,找出前10个经常出现的词,
阅读全文
摘要:题目介绍:输入为不断地数字流,实时显示出当前已经输入的数字序列的中位数解答:求中位数的方法很多,对于大数据量最经典是桶的计数方法,但是对于这个问题不适用,因为数据是不断变化的可以用最大堆和最小堆来解答这个问题:1.假设当前的中位数为m,其中最大堆维护的是=m的数字序列,但是两个堆都不包含m2.当新的数字到达时,比如为a,将a与m进行比较,若a=2 ,则将m加入到元素个数少的堆中,然后从元素个数多的堆将根节点赋值到m,最后重建两个最大堆和最小堆,返回到2转:http://yaronspace.cn/blog/index.php/archives/1306
阅读全文
摘要:树是一种比较重要的数据结构,尤其是二叉树。二叉树是一种特殊的树,在二叉树中每个节点最多有两个子节点,一般称为左子节点和右子节点(或左孩子和右孩子),并且二叉树的子树有左右之分,其次序不能任意颠倒。二叉树是递归定义的,因此,与二叉树有关的题目基本都可以用递归思想解决,当然有些题目非递归解法也应该掌握,如非递归遍历节点等等。本文努力对二叉树相关题目做一个较全的整理总结,希望对找工作的同学有所帮助。二叉树节点定义如下:struct BinaryTreeNode{ int m_nValue; BinaryTreeNode* m_pLeft; BinaryTreeNode* m_pRight;};...
阅读全文
摘要:链表是最基本的数据结构,面试官也常常用链表来考察面试者的基本能力,而且链表相关的操作相对而言比较简单,也适合考察写代码的能力。链表的操作也离不开指针,指针又很容易导致出错。综合多方面的原因,链表题目在面试中占据着很重要的地位。本文对链表相关的面试题做了较为全面的整理,希望能对找工作的同学有所帮助。链表结点声明如下:structListNode{ int m_nKey; ListNode * m_pNext;};详细解答1.求单链表中结点的个数这是最最基本的了,应该能够迅速写出正确的代码,注意检查链表是否为空。时间复杂度为O(n)。参考代码如下:[cpp] view plaincopypri..
阅读全文
摘要:本文内容:20个最常见的JAVA面试问题(附答案)13个单例模式JAVA面试问题(附答案)说说JVM和垃圾收集是如何工作的(附答案)说说如何避免JAVA线程死锁(附答案)Java中HashSet和HashMap的区别(附答案)Java面试中和Collection有关的10个问题(附答案)Java面试中和Spring相关的10个问题(附答案)30个C/C++/Java面试中的常见算法问题Stackoverflow中回复超过20的算法问题面试攻略微软面试技术题(附答案)20个最常见的JAVA面试问题(附答案)1. What is immutable object? Can you write im
阅读全文
摘要:基础篇:操作系统、计算机网络、设计模式一:操作系统1. 进程的有哪几种状态,状态转换图,及导致转换的事件。2. 进程与线程的区别。3. 进程通信的几种方式。4. 线程同步几种方式。(一定要会写生产者、消费者问题,完全消化理解)5. 线程的实现方式. (也就是用户线程与内核线程的区别)6. 用户态和核心态的区别。7. 用户栈和内核栈的区别。8. 内存池、进程池、线程池。(c++程序员必须掌握)9. 死锁的概念,导致死锁的原因.10. 导致死锁的四个必要条件。11. 处理死锁的四个方式。12. 预防死锁的方法、避免死锁的方法。13. 进程调度算法。(周转时间 =程序结束时间 -- 开始服务时间、带
阅读全文
摘要:1:tcp和udp的区别2:流量控制和拥塞控制的实现机制3:滑动窗口的实现机制4:多线程如何同步。5:进程间通讯的方式有哪些,各有什么优缺点6:tcp连接建立的时候3次握手的具体过程,以及其中的每一步是为什么7:tcp断开连接的具体过程,其中每一步是为什么那么做8:tcp建立连接和断开连接的各种过程中的状态转换细节9:epool与select的区别10:epool中et和lt的区别与实现原理11:写一个server程序需要注意哪些问题12:项目中遇到的难题,你是如何解决的3. 网络编程的一般步骤对于TCP连接:1.服务器端1)创建套接字create;2)绑定端口号bind;3)监听连接list
阅读全文
摘要:【一】 时间受限大部分的面试题,都是对时间复杂度有所要求的,如果有涉及,“最快”一类的字样,毫无疑问,先上时空原理,用空间来换时间。Hash,大数组,一些辅助性的空间,都是首选。在我的面试经历中,有无数次用到过Hash和大数组的。不过,通常这不会是面试官想听的唯一解法,他们紧接着十有八九是会说“如果只有xxxx空间呢?”。说此类方法只是为自己争取更多的时间,并且体现思考的完整性,简而言之,装B用。。。 eg1.1:求一个char(8bit)中,二进制1的个数,越快越好。 -- 《编程之美》 eg1.2:有一个整数数组A[N],让你不用除法,求另一个数组B[N],其中B[i] = A[0]*A[
阅读全文
摘要:1、快速找出一个数组中的最大数、第二大数。 思路:如果当前元素大于最大数 max,则让第二大数等于原来的最大数 max,再把当前元素的值赋给 max。如果当前的元素大于等于第二大数secondMax的值而小于最大数max的值,则要把当前元素的值赋给 secondMax。[cpp] view plaincopyprint?voidGetSecondMaxNumber(int*arr,intn){inti,max,second_max;max=arr[0];second_max=0x80000000;for(i=1;imax){second_max=max;max=arr[i];}else{if(
阅读全文
摘要:题目:把n个骰子扔在地上,所有骰子朝上一面的点数之和为S。输入n,打印出S的所有可能的值出现的概率。分析:玩过麻将的都知道,骰子一共6个面,每个面上都有一个点数,对应的数字是1到6之间的一个数字。所以,n个骰子的点数和的最小值为n,最大值为6n。因此,一个直观的思路就是定义一个长度为6n-n的数组,和为S的点数出现的次数保存到数组第S-n个元素里。另外,我们还知道n个骰子的所有点数的排列数6^n。一旦我们统计出每一点数出现的次数之后,因此只要把每一点数出现的次数除以n^6,就得到了对应的概率。该思路的关键就是统计每一点数出现的次数。要求出n个骰子的点数和,我们可以先把n个骰子分为两堆:第一堆只
阅读全文
摘要:1-1000放在含有1001个元素的数组中,只有唯一的一个元素值重复,其它均只出现一次.每个数组元素只能访问一次,设计一个算法,将它找出来;不用辅助存储空间,能否设计一个算法实现?(1) 方法一:(当N为比较大时警惕溢出)将1001个元素相加减去1,2,3,……1000数列的和,得到的差即为重复的元素。 1 int Find(int* a) 2 3 { 4 5 int i; 6 7 for (i = 0;i<=1000;i++) 8 9 a[1000] += a[i]; 10 11 a[100...
阅读全文
摘要:引子: 我们平时总会有一个电话本记录所有朋友的电话,但是,如果有朋友经常联系,那些朋友的电话号码不用翻电话本我们也能记住,但是,如果长时间没有联系了,要再次联系那位朋友的时候,我们又不得不求助电话本,但是,通过电话本查找还是很费时间的。但是,我们大脑能够记住的东西是一定的,我们只能记住自己最熟悉的,而长时间不熟悉的自然就忘记了。 其实,计算机也用到了同样的一个概念,我们用缓存来存放以前读取的数据,而不是直接丢掉,这样,再次读取的时候,可以直接在缓存里面取,而不用再重新查找一遍,这样系统的反应能力会有很大提高。但是,当我们读取的个数特别大的时候,我们不可能把所有已经读取的数据都放在缓存里,毕竟内
阅读全文
摘要:如何设计一个LRU Cache?Google和百度的面试题都出现了设计一个Cache的题目,什么是Cache,如何设计简单的Cache,通过搜集资料,本文给出个总结。通常的问题描述可以是这样:Question:[1] Design a layer in front of a system which cache the last n requests and the responses to them from the system.在一个系统之上设计一个Cache,缓存最近的n个请求以及系统的响应。what data structure would you use to implement
阅读全文
摘要:求一个二叉树中任意两个节点间的最大距离,两个节点的距离的定义是这两个节点间边的个数,比如某个孩子节点和父节点间的距离是1,和相邻兄弟节点间的距离是2,优化时间空间复杂度。一种是:经过根节点,此时只需要求出左右子树的最大深度就可以另一种:不经过根节点,此时需要递归求解左右子树,然后比较左右子树中最大距离,求大者 1 #include "stdio.h" 2 #include"stdlib.h" 3 struct NODE 4 { 5 NODE* pLeft; // 左子树 6 NODE* pRight; ...
阅读全文
摘要:二叉查找树按照二叉树进行组织。二叉查找树关键字的存储方式总是满足二叉查找树性质:设x为二查查找树种一个节点。如果y是x的左子树中的一个节点,那么key[x] >= key[y]。如果y是x的右子树的一个节点,那么key[x] data)16 {17 if (k data)18 {19 p = p->lchild;20 }21 else22 p = p->rchild;23 }24 return p;25 }26 27 Tree Tree_Minmum(T...
阅读全文
摘要:问题给定一棵二叉树,判定该二叉树是否是二叉搜索树(Binary Search Tree)?解法1:暴力搜索首先说明一下二叉树和二叉搜索树的区别。二叉树指这样的树结构,它的每个结点的孩子数目最多为2个;二叉搜索树是一种二叉树,但是它有附加的一些约束条件,这些约束条件必须对每个结点都成立:结点node的左子树所有结点的值都小于node的值。结点node的右子树所有结点的值都大于node的值。结点node的左右子树同样都必须是二叉搜索树。该问题在面试中也许经常问到,考察的是对二叉搜索树定义的理解。初看这个问题,也许会想这样来实现:假定当前结点值为k。对于二叉树中每个结点,判断其左孩子的值是否小于k,
阅读全文
摘要:单例模式(Singleton)1.介绍:也叫单子模式,是一种常用的软件设计模式。在应用这个模式时,单例对象的类必须保证只有一个实例存在。许多时候整个系统只需要拥有一个的全局对象,这样有利于我们协调系统整体的行为。比如在某个服务器程序中,该服务器的配置信息存放在一个文件中,这些配置数据由一个单例对象统一读取,然后服务进程中的其他对象再通过这个单例对象获取这些配置信息。这种方式简化了在复杂环境下的配置管理。 2.实现单例模式的思路是:一个类能返回对象一个引用(永远是同一个)和一个获得该实例的方法(必须是静态方法,通常使用getInstance这个名称);当我们调用这个方法时,如果类持有的引用不为空
阅读全文
摘要:[来源]:腾讯2013实习生笔试 给定一个数组a[N],我们希望构造数组b [N],其中b[j]=a[0]*a[1]…a[N-1] / a[j],在构造过程中,不允许使用除法:要求O(1)空间复杂度和O(n)的时间复杂度;除遍历计数器与a[N] b[N]外,不可使用新的变量(包括栈临时变量、堆空间和全局静态变量等)解析:设b[0]=1由b[i]=b[i-1]*a[i-1]可得b[1] = a[0]b[2] = a[0]a[1]…b[i] = a[0]a[1]a[2]…a[i-1]…b[n-1] = a[0]a[1]…a[n-2]那么再通过b[0]这个变量来迭代出1, a[n-1], a[n-2
阅读全文
摘要:【试题描述】 将二叉搜索树转换为双向链表对于二叉搜索树,可以将其转换为双向链表,其中,节点的左子树指针在链表中指向前一个节点,右子树指针在链表中指向后一个节点。思路一:采用递归思想,对于二叉搜索树,将左、右子树分别转换为双向链表,左子树转换所得链表的头结点即整个树的头结点,左子树转换所得链表的尾节点与根节点相邻;右子树转换所得链表的尾节点即整个树的尾节点,右子树转换所得链表的头结点与根节点相邻。 1 private static Node last; 2 public static Node treeToList(Node tree) 3 { 4 Nod...
阅读全文

浙公网安备 33010602011771号