随笔- 509  文章- 0  评论- 151  阅读- 22万 
04 2014 档案
Careercup - Facebook面试题 - 5110993575215104
摘要:2014-04-30 16:12题目链接原题:The beauty of a number X is the number of 1s in the binary representation of X. Two players are plaing a game. There is number ... 阅读全文
posted @ 2014-04-30 16:26 zhuli19901106 阅读(253) 评论(0) 推荐(0) 编辑
《Cracking the Coding Interview》——第18章:难题——题目13
摘要:2014-04-29 04:40题目:给定一个字母组成的矩阵,和一个包含一堆单词的词典。请从矩阵中找出一个最大的子矩阵,使得从左到右每一行,从上到下每一列组成的单词都包含在词典中。解法:O(n^3)级别的时间和空间进行动态规划。这道题目和第17章的最后一题很像,由于这题的时间复杂度实在是高,我动手写... 阅读全文
posted @ 2014-04-29 04:52 zhuli19901106 阅读(771) 评论(0) 推荐(0) 编辑
《Cracking the Coding Interview》——第18章:难题——题目12
摘要:2014-04-29 04:36题目:最大子数组和的二位扩展:最大子矩阵和。解法:一个维度上进行枚举,复杂度O(n^2);另一个维度执行最大子数组和算法,复杂度O(n)。总体时间复杂度为O(n^3),还需要O(n)额外空间。代码: 1 // 18.12 Given an n x n matrix, ... 阅读全文
posted @ 2014-04-29 04:40 zhuli19901106 阅读(248) 评论(0) 推荐(0) 编辑
《Cracking the Coding Interview》——第18章:难题——题目11
摘要:2014-04-29 04:30题目:给定一个由‘0’或者‘1’构成的二维数组,找出一个四条边全部由‘1’构成的正方形(矩形中间可以有‘0’),使得矩形面积最大。解法:用动态规划思想,记录二维数组每个元素向上下左右四个方向各有多少个连续的‘1’,然后用O(n^3)时间计算出满足条件的最大正方形。时间... 阅读全文
posted @ 2014-04-29 04:37 zhuli19901106 阅读(221) 评论(0) 推荐(0) 编辑
《Cracking the Coding Interview》——第18章:难题——题目10
摘要:2014-04-29 04:22题目:给定一堆长度都相等的单词,和起点、终点两个单词,请从这堆单词中寻找一条变换路径,把起点词变成终点词,要求每次变换只能改一个字母。解法:Leetcode中有Word Ladder,这题基本思路一致。代码: 1 // 18.10 Given a list of wo... 阅读全文
posted @ 2014-04-29 04:27 zhuli19901106 阅读(243) 评论(0) 推荐(0) 编辑
《Cracking the Coding Interview》——第18章:难题——题目9
摘要:2014-04-29 04:18题目:有一连串的数被读入,设计一个数据结构,能随时返回当前所有数的中位数。解法:用一个大顶堆,一个小顶堆将数分成数量最接近的两份,就能轻松得到中位数了。代码: 1 // 18.9 A stream of integers are passed to you, you... 阅读全文
posted @ 2014-04-29 04:22 zhuli19901106 阅读(203) 评论(0) 推荐(0) 编辑
《Cracking the Coding Interview》——第18章:难题——题目8
摘要:2014-04-29 03:10题目:给定一个长字符串S和一个词典T,进行多模式匹配,统计S中T单词出现的总个数。解法:这是要考察面试者能不能写个AC自动机吗?对面试题来说太难了吧?我不会,所以只写了个KMP用N次的方法。代码: 1 // 18.8 Given a list of words and... 阅读全文
posted @ 2014-04-29 03:14 zhuli19901106 阅读(216) 评论(0) 推荐(0) 编辑
《Cracking the Coding Interview》——第18章:难题——题目7
摘要:2014-04-29 03:05题目:给定一个词典,其中某些词可能能够通过词典里其他的词拼接而成。找出这样的组合词里最长的一个。解法:Leetcode上有Word Break这道题,和这题基本思路一致。代码: 1 // 18.7 Given a list of words, find out the... 阅读全文
posted @ 2014-04-29 03:10 zhuli19901106 阅读(212) 评论(0) 推荐(0) 编辑
《Cracking the Coding Interview》——第18章:难题——题目6
摘要:2014-04-29 02:27题目:找出10亿个数中最小的100万个数,假设内存可以装得下。解法1:内存可以装得下?可以用快速选择算法得到无序的结果。时间复杂度总体是O(n)级别,但是常系数不小。代码: 1 // 18.6 Find the smallest one million number... 阅读全文
posted @ 2014-04-29 03:05 zhuli19901106 阅读(248) 评论(0) 推荐(0) 编辑
《Cracking the Coding Interview》——第18章:难题——题目5
摘要:2014-04-29 01:51题目:你有一个文本文件,每行一个单词。给定两个单词,请找出这两个单词在文件中出现的其中一对位置,使得这两个位置的距离最短。解法:我的思路是建立倒排索引,计算出所有单词出现的所有位置。下面代码只给出了两个索引的处理方法。倒排索引一般以链表的形式出现,通过顺序扫描两个链表... 阅读全文
posted @ 2014-04-29 01:58 zhuli19901106 阅读(257) 评论(0) 推荐(0) 编辑
《Cracking the Coding Interview》——第18章:难题——题目4
摘要:2014-04-29 01:05题目:数数从0到n总共有多少个数字‘2’?解法:数位动态规划,可以O(log10(n))时间内解决。代码: 1 // 18.4 Count the number of 2s from 0 to n. 2 #include 3 using namespace std;... 阅读全文
posted @ 2014-04-29 01:36 zhuli19901106 阅读(199) 评论(0) 推荐(0) 编辑
《Cracking the Coding Interview》——第18章:难题——题目3
摘要:2014-04-29 01:02题目:从m个整数里随机选出n个整数,要求等概率。解法:和洗牌的算法类似,每次随机抽出一个数,抽n次即可。时间复杂度O(m * n),空间复杂度O(m)。代码: 1 // 18.3 pick m integers randomly from an array of n ... 阅读全文
posted @ 2014-04-29 01:05 zhuli19901106 阅读(229) 评论(0) 推荐(0) 编辑
《Cracking the Coding Interview》——第18章:难题——题目2
摘要:2014-04-29 00:59题目:设计一个洗牌算法,效率尽量快点,必须等概率。解法:每次随机抽一张牌出来,最后都抽完了,也就洗好了。时间复杂度O(n^2),请看代码。代码: 1 // 18.2 shuffle a deck of 52 cards, it must be perfect rand... 阅读全文
posted @ 2014-04-29 01:02 zhuli19901106 阅读(255) 评论(0) 推荐(0) 编辑
《Cracking the Coding Interview》——第18章:难题——题目1
摘要:2014-04-29 00:56题目:不用算数运算,完成加法。解法:那就位运算吧,用加法器的做法就可以了。代码: 1 // 18.1 add two numbers wihout using arithmetic operator. 2 #include 3 using namespace std... 阅读全文
posted @ 2014-04-29 00:59 zhuli19901106 阅读(303) 评论(0) 推荐(0) 编辑
《Cracking the Coding Interview》——第17章:普通题——题目14
摘要:2014-04-29 00:20题目:给定一个长字符串,和一个词典。如果允许你将长串分割成若干个片段,可能会存在某些片段在词典里查不到,有些则查得到。请设计算法进行分词,使得查不到的片段个数最少。解法:用空间换取时间的动态规划算法,首先用O(n^2)的时间判断每一个片段是否在字典里。这个过程其实可以... 阅读全文
posted @ 2014-04-29 00:29 zhuli19901106 阅读(411) 评论(0) 推荐(0) 编辑
《Cracking the Coding Interview》——第17章:普通题——题目13
摘要:2014-04-29 00:15题目:将二叉搜索树展开成一个双向链表,要求这个链表仍是有序的,而且不能另外分配对象,就地完成。解法:Leetcode上也有,递归解法。代码: 1 // 17.13 Flatten a binary search tree into a doubly linked li... 阅读全文
posted @ 2014-04-29 00:20 zhuli19901106 阅读(215) 评论(0) 推荐(0) 编辑
《Cracking the Coding Interview》——第17章:普通题——题目12
摘要:2014-04-29 00:04题目:给定一个整数数组,找出所有加起来为指定和的数对。解法1:可以用哈希表保存数组元素,做到O(n)时间的算法。代码: 1 // 17.12 Given an array of integers and target value, find all pairs in ... 阅读全文
posted @ 2014-04-29 00:11 zhuli19901106 阅读(225) 评论(0) 推荐(0) 编辑
《Cracking the Coding Interview》——第17章:普通题——题目11
摘要:2014-04-29 00:00题目:给定一个rand5()函数,能够返回0~4间的随机整数。要求实现rand7(),返回0~6之间的随机整数。该函数产生随机数必须概率相等。解法:自己想了半天没想出等概率的方法,最后参考答案了。答案思想实在巧妙:随机0~24间的数,然后把21~24丢弃,剩余的0~2... 阅读全文
posted @ 2014-04-29 00:04 zhuli19901106 阅读(172) 评论(0) 推荐(0) 编辑
《Cracking the Coding Interview》——第17章:普通题——题目10
摘要:2014-04-28 23:54题目:XML文件的冗余度很大,主要在于尖括号里的字段名。按照书上给定的方式进行压缩。解法:这题我居然忘做了,只写了一句话的注解。用python能够相对方便地实现,因为有直接的XML工具可以调用。书上的那种要求应该是符合前序遍历规则。代码:1 # 17.10 Parse... 阅读全文
posted @ 2014-04-28 23:59 zhuli19901106 阅读(161) 评论(0) 推荐(0) 编辑
《Cracking the Coding Interview》——第17章:普通题——题目9
摘要:2014-04-28 23:52题目:设计算法,找出一本书中某个单词的出现频率。解法:数就行了。代码: 1 // 17.9 Given a book, find out the occurrences of any given words in it. 2 // Answer: 3 // 1.... 阅读全文
posted @ 2014-04-28 23:53 zhuli19901106 阅读(164) 评论(0) 推荐(0) 编辑
《Cracking the Coding Interview》——第17章:普通题——题目8
摘要:2014-04-28 23:35题目:最大子数组和问题。解法:O(n)解法。代码: 1 // 17.8 Find the consecutive subarray with maximum sum in an array. 2 // O(n) online algorithm. 3 #include... 阅读全文
posted @ 2014-04-28 23:37 zhuli19901106 阅读(192) 评论(0) 推荐(0) 编辑
《Cracking the Coding Interview》——第17章:普通题——题目7
摘要:2014-04-28 23:28题目:给定一个数字,用英语把它读出来。解法:ZOJ上有相反的题目。如果我要用中文读书来呢?代码: 1 // 17.7 Read an integer in English. 2 #include 3 #include 4 using namespace s... 阅读全文
posted @ 2014-04-28 23:33 zhuli19901106 阅读(187) 评论(0) 推荐(0) 编辑
《Cracking the Coding Interview》——第17章:普通题——题目6
摘要:2014-04-28 22:49题目:给定一个整数数组。如果你将其中一个子数组排序,那么整个数组都变得有序。找出所有这样子数组里最短的一个。解法:线性时间,常数空间内可以解决,思想类似于动态规划。通过正反扫描两次,可以得出这个区间的两端。只要存在i a[j],那么这个区间[i, j]就必须被排序,... 阅读全文
posted @ 2014-04-28 23:28 zhuli19901106 阅读(234) 评论(0) 推荐(0) 编辑
《Cracking the Coding Interview》——第17章:普通题——题目5
摘要:2014-04-28 22:44题目:猜数字游戏。四个数字,每个都是0~9之间。你每猜一次,我都告诉你,有多少个位置和数字都对(全对),有多少个位置错数字对(半对)。比如“6309”,你猜“3701”,就有1全对,1半对。解法:依照题意写就可以了。代码: 1 // 17.5 I am the Mas... 阅读全文
posted @ 2014-04-28 22:49 zhuli19901106 阅读(198) 评论(0) 推荐(0) 编辑
《Cracking the Coding Interview》——第17章:普通题——题目4
摘要:2014-04-28 22:32题目:不用if语句或者比较运算符的情况下,实现max函数,返回两个数中更大的一个。解法:每当碰见这种无聊的“不用XXX,给我XXX”型的题目,我都默认处理的是int类型。最高位是符号位,用x - y的符号位来判断谁大谁小。请看下面代码,条件表达式配合异或运算能满足题目... 阅读全文
posted @ 2014-04-28 22:41 zhuli19901106 阅读(175) 评论(0) 推荐(0) 编辑
《Cracking the Coding Interview》——第17章:普通题——题目3
摘要:2014-04-28 22:18题目:计算N的阶乘尾巴上有多少个零?解法:计算5的个数即可,因为2 * 5 = 10,2的个数肯定比5多。计算5的个数可以在对数时间内搞定。代码: 1 // 17.3 Count how many zeros are there in n!? 2 // Count t... 阅读全文
posted @ 2014-04-28 22:22 zhuli19901106 阅读(172) 评论(0) 推荐(0) 编辑
《Cracking the Coding Interview》——第17章:普通题——题目2
摘要:2014-04-28 22:05题目:写个程序判断三连棋哪一方赢了。解法:三个相同的棋子连成一条横线,竖线或者对角线就判断为赢了。代码: 1 // 17.2 Write an algorithm to check if someone has won the tic-tac-toe game. 2 ... 阅读全文
posted @ 2014-04-28 22:15 zhuli19901106 阅读(266) 评论(0) 推荐(0) 编辑
《Cracking the Coding Interview》——第17章:普通题——题目1
摘要:2014-04-28 21:45题目:就地交换两个数,不使用额外的变量。解法:没说是整数,我姑且先当整数处理吧。就地交换可以用加法、乘法、异或完成,其中乘法和加法都存在溢出问题。三种方法都不能处理交换同一个数的情况,需要条件判断。代码: 1 // 17.1 Do a swapping in-plac... 阅读全文
posted @ 2014-04-28 22:05 zhuli19901106 阅读(252) 评论(0) 推荐(0) 编辑
《Cracking the Coding Interview》——第16章:线程与锁——题目6
摘要:2014-04-27 20:25题目:关于java中标有synchronized的成员方法?解法:这代表同一个对象实例的synchronized方法不能被多个线程同时调用。注意有这么多个地方都加粗了,如果这些条件有一个不满足的话,就是可以调用的。另外,如果此方法是静态成员方法, 那么总可以认为是“同... 阅读全文
posted @ 2014-04-27 20:31 zhuli19901106 阅读(222) 评论(0) 推荐(0) 编辑
《Cracking the Coding Interview》——第16章:线程与锁——题目5
摘要:2014-04-27 20:16题目:假设一个类Foo有三个公有的成员方法first()、second()、third()。请用锁的方法来控制调用行为,使得他们的执行循序总是遵从first、second、third的顺序。解法:你应该想到了用lock的方法类阻塞,不过这里面有个概念问题使得直接用Re... 阅读全文
posted @ 2014-04-27 20:25 zhuli19901106 阅读(201) 评论(0) 推荐(0) 编辑
《Cracking the Coding Interview》——第16章:线程与锁——题目4
摘要:2014-04-27 20:06题目:设计一个类,只有在不产生死锁的时候才分配资源。解法:不太清楚这个题是要分配何种资源,以何种形式?所以没能动手写个可运行的代码,只是闲扯了几句理论分析。代码: 1 // 16.4 Design a class which provides a lock only ... 阅读全文
posted @ 2014-04-27 20:16 zhuli19901106 阅读(190) 评论(0) 推荐(0) 编辑
《Cracking the Coding Interview》——第16章:线程与锁——题目3
摘要:2014-04-27 19:26题目:哲学家吃饭问题,死锁问题经典模型(专门用来黑哲学家的?)。解法:死锁四条件:1. 资源互斥。2. 请求保持。3. 非抢占。4. 循环等待。所以,某砖家拿起一只筷子后如果发现没有另一只了,就必须把手里这只筷子放下,这应该是通过破坏“请求保持”原则来防止死锁产生,请... 阅读全文
posted @ 2014-04-27 19:40 zhuli19901106 阅读(253) 评论(0) 推荐(0) 编辑
《Cracking the Coding Interview》——第16章:线程与锁——题目2
摘要:2014-04-27 19:14题目:如何测量上下文切换的时间?解法:首先,上下文切换是什么,一搜就知道。对于这么一个极短的时间,要测量的话,可以通过放大N倍的方法。比如:有A和B两件事,并且经常一起发生,每件只需要花几纳秒。如果你把A事件连续做几百万次,而B时间只做了几次,这样就能排除B事件对于测... 阅读全文
posted @ 2014-04-27 19:26 zhuli19901106 阅读(247) 评论(0) 推荐(0) 编辑
《Cracking the Coding Interview》——第16章:线程与锁——题目1
摘要:2014-04-27 19:09题目:线程和进程有什么区别?解法:理论题,操作系统教材上应该有很详细的解释。我回忆了一下,写了如下几点。代码: 1 // 16.1 What is the difference between process and thread? 2 Answer: 3 P... 阅读全文
posted @ 2014-04-27 19:14 zhuli19901106 阅读(225) 评论(0) 推荐(0) 编辑
《Cracking the Coding Interview》——第14章:Java——题目6
摘要:2014-04-26 19:11题目:设计一个循环数组,使其支持高效率的循环移位。并能够使用foreach的方式访问。解法:foreach不太清楚,循环移位我倒是实现了一个,用带有偏移量的数组实现。修改元素不一定能做到O(1)时间,但循环移位能在O(1)时间解决。不得不说,用不熟的语言写面试题,很难... 阅读全文
posted @ 2014-04-26 19:21 zhuli19901106 阅读(237) 评论(0) 推荐(0) 编辑
《Cracking the Coding Interview》——第14章:Java——题目5
摘要:2014-04-26 19:06题目:Java中的对象反射机制是什么?有鼠么用?解法:完全不了解,因为java编程经验太少,完全没用过。查了一些资料后,感觉反射机制是个强大并需要边用边体会的强大工具。能灵活处理各种动态类型下的问题。代码: 1 // 14.5 Tell me something ab... 阅读全文
posted @ 2014-04-26 19:11 zhuli19901106 阅读(186) 评论(0) 推荐(0) 编辑
《Cracking the Coding Interview》——第14章:Java——题目4
摘要:2014-04-26 19:02题目:解释下C++里模板和java里泛型的区别?解法:我很少用java,属于连语法都不过关的程度。所以这个题还真没法详细答,查了些资料以后写了以下几点。代码: 1 // 14.4 tell me about the differences between C++ te... 阅读全文
posted @ 2014-04-26 19:05 zhuli19901106 阅读(240) 评论(0) 推荐(0) 编辑
《Cracking the Coding Interview》——第14章:Java——题目3
摘要:2014-04-26 18:59题目:final、finally、finalize有什么区别?解法:烂大街之java语法题。此题被多少公司考过我不知道,反正我确实遇见过一次了。代码: 1 // 14.3 final, finally and finalize, what are they? 2 //... 阅读全文
posted @ 2014-04-26 19:02 zhuli19901106 阅读(250) 评论(0) 推荐(0) 编辑
《Cracking the Coding Interview》——第14章:Java——题目2
摘要:2014-04-26 18:44题目:在java的try-catch-finally语句块里,如果catch里面有return语句的话,finally还会被执行吗?解法:会。代码: 1 // 14.2 Will the code in finally {} be executed if there ... 阅读全文
posted @ 2014-04-26 18:59 zhuli19901106 阅读(263) 评论(0) 推荐(0) 编辑
《Cracking the Coding Interview》——第14章:Java——题目1
摘要:2014-04-26 18:20题目:从继承的角度,把构造函数设成private有什么意义?解法:就不能继承了。单体模式里也这么干,目的是为了不让使用者自主生成对象,进行限制。代码: 1 // 14.1 In terms of inheritance, what is the point of de... 阅读全文
posted @ 2014-04-26 18:32 zhuli19901106 阅读(341) 评论(0) 推荐(0) 编辑
《Cracking the Coding Interview》——第13章:C和C++——题目10
摘要:2014-04-25 20:47题目:分配一个二维数组,尽量减少malloc和free的使用次数,要求能用a[i][j]的方式访问数据。解法:有篇文章讲了六种new delete二维数组的方式,其中最后一种灰常高效。链接在此,解法六是巧妙的,不过里面的说法不对,而且还不标明转载原地址,可见这些技术网... 阅读全文
posted @ 2014-04-25 21:00 zhuli19901106 阅读(278) 评论(0) 推荐(0) 编辑
《Cracking the Coding Interview》——第13章:C和C++——题目9
摘要:2014-04-25 20:37题目:请设计一个字节对齐的malloc函数,配套上对应的free函数。要求这个函数分配出的内存块儿的首地址是某个值n的整数倍,n是2的整次幂,比如128、1024之类的。解法:默认的malloc分配的首地址是不确定的,所以我们需要多分配一些内存,才能保证其中至少有一个... 阅读全文
posted @ 2014-04-25 20:47 zhuli19901106 阅读(251) 评论(0) 推荐(0) 编辑
《Cracking the Coding Interview》——第13章:C和C++——题目8
摘要:2014-04-25 20:27题目:实现一个能够通过引用计数来实现自动回收数据的智能指针,用C++,不是java。解法:这题真心牛,我的第一反应是发呆,因为对引用计数的了解仅限于这个名词,完全没办法建立模型。之后仔细把题解读了两遍之后,照样敲了一遍代码。然后边调试边阅读才有了些理解。引用计数有四点... 阅读全文
posted @ 2014-04-25 20:35 zhuli19901106 阅读(193) 评论(0) 推荐(0) 编辑
《Cracking the Coding Interview》——第13章:C和C++——题目7
摘要:2014-04-25 20:18题目:给定一个Node结构体,其中包含数据成员和两个Node*指针指向其他两个Node结构(还不如直接说这是个图呢)。给你一个Node指针作为参数,请做一份深拷贝作为结果返回。解法:BFS搞定,需要检测重复节点以防止死循环,用一个哈希表可以做大。这样肯定只能找出一个完... 阅读全文
posted @ 2014-04-25 20:27 zhuli19901106 阅读(178) 评论(0) 推荐(0) 编辑
《Cracking the Coding Interview》——第13章:C和C++——题目6
摘要:2014-04-25 20:07题目:为什么基类的析构函数必须声明为虚函数?解法:不是必须,而是应该,这是种规范。对于基类中执行的一些动态资源分配,如果基类的析构函数不是虚函数,那么 派生类的析构函数在自动调用的时候,不会调用基类的析构函数,这样就会造成资源未释放引起的内存泄漏。代码: 1 // 1... 阅读全文
posted @ 2014-04-25 20:18 zhuli19901106 阅读(179) 评论(0) 推荐(0) 编辑
《Cracking the Coding Interview》——第13章:C和C++——题目5
摘要:2014-04-25 19:59题目:C的关键字volatile有什么用?解法:搞硬件设计的人好像更关注这个关键字。volatile本身是易变的意思,应该和persistent有反义词关系吧。说一个变量或是函数是易变的,就是说不知道会发生什么变化,所以不要编译器按规则进行优化处理,这就是我对此关键字... 阅读全文
posted @ 2014-04-25 20:07 zhuli19901106 阅读(193) 评论(0) 推荐(0) 编辑
《Cracking the Coding Interview》——第13章:C和C++——题目4
摘要:2014-04-25 19:50题目:深拷贝和浅拷贝有什么区别?如何应用?解法:深拷贝传值,浅拷贝传引用。java里对此做了限制,而C++里面用起来更自由。大结构不宜传值,因为拷贝过程效率低。代码: 1 // 13.4 What's deep copy and shallow copy? Expai... 阅读全文
posted @ 2014-04-25 19:58 zhuli19901106 阅读(171) 评论(0) 推荐(0) 编辑
《Cracking the Coding Interview》——第13章:C和C++——题目3
摘要:2014-04-25 19:42题目:C++中虚函数的工作原理?解法:虚函数表?细节呢?要是懂汇编我就能钻的再深点了。我试着写了点测大小、打印指针地址之类的代码,能起点管中窥豹的作用,从编译器的外部感受下虚函数表、虚函数指针的存在。代码: 1 // 13.3 How does virtual fun... 阅读全文
posted @ 2014-04-25 19:49 zhuli19901106 阅读(171) 评论(0) 推荐(0) 编辑
《Cracking the Coding Interview》——第13章:C和C++——题目2
摘要:2014-04-25 19:29题目:对比一下哈希表和STL中的map的区别,哈希表如何实现?如果数据规模比较小,可以用什么来代替哈希表?解法:哈希表可以理解为一堆桶,每个桶都有唯一的id,桶里可以存至少一个元素;而STL的map是一棵平衡二叉搜索树,每个节点存一个元素。还有很多细节要说,如果on-... 阅读全文
posted @ 2014-04-25 19:41 zhuli19901106 阅读(209) 评论(0) 推荐(0) 编辑
《Cracking the Coding Interview》——第13章:C和C++——题目1
摘要:2014-04-25 19:13题目:用C++写一个读取文件倒数K行的方法。解法:因为是要取倒数K行,所以我的思路是一行一行地读。过程中需要保存一个长度为K的链表,每次新读到一行都将表头节点移到表尾,如此滚动直到文件结束。最后表头节点中存的字符串就是倒数第K行,依次输出就是倒数K行了。不过当时做这题... 阅读全文
posted @ 2014-04-25 19:23 zhuli19901106 阅读(257) 评论(0) 推荐(0) 编辑
《Cracking the Coding Interview》——第12章:测试——题目6
摘要:2014-04-25 00:53题目:你要如何测试一个分布式银行系统的ATM机?解法:ATM是Automatic Teller Machine,取钱的。我想了半天,没找到什么很清晰的思路,也许是因为自己不常取款吧。看了书后解答之后,觉得也不算很靠谱的答案,所以认为这题比较扯淡了。代码:1 // 12... 阅读全文
posted @ 2014-04-25 00:57 zhuli19901106 阅读(184) 评论(0) 推荐(0) 编辑
《Cracking the Coding Interview》——第12章:测试——题目5·
摘要:2014-04-25 00:41题目:怎么测试一支笔?(Pen?您老说的是钢笔?)解法:这种简约而不简单的题目,实在是面试官最喜欢,面试者最头疼的类型了。面试官可以只花三秒,以一种灰常高贵冷艳的语气甩出这道题。然后头疼脑热的就是你了。怎么做呢?Brainstorming,找特征,分解问题,关联问题和... 阅读全文
posted @ 2014-04-25 00:50 zhuli19901106 阅读(193) 评论(0) 推荐(0) 编辑
《Cracking the Coding Interview》——第12章:测试——题目4
摘要:2014-04-25 00:35题目:没有专门的测试工具,你要如何对一个网页进行压力测试?解法:拼手速,拼电脑数量呗。快捷键+复制粘贴网址,狂搞一番。话说回来,有脚本语言的情况下,直接写个脚本来模拟大量的访问行为肯定是更合理的,手速再快比不过程序。没有工具时,应该想着如何制造工具,而不是赤手空拳去搞... 阅读全文
posted @ 2014-04-25 00:42 zhuli19901106 阅读(182) 评论(0) 推荐(0) 编辑
《Cracking the Coding Interview》——第12章:测试——题目3
摘要:2014-04-24 23:28题目:玩象棋游戏,你要设计一个bool型的方法来检测一个棋子能否移动到指定位置。解法:不同的棋子有不同的移动规则,那么应该采取棋子基类实现接口,各个棋子子类来实现的方式。棋子除了类型之外,还必须要记录当前位置,作为判断的依据。而要移到的位置,则作为参数传给方法。不过这... 阅读全文
posted @ 2014-04-25 00:34 zhuli19901106 阅读(185) 评论(0) 推荐(0) 编辑
《Cracking the Coding Interview》——第12章:测试——题目2
摘要:2014-04-24 23:15题目:你有一段程序,运行了十次每次都在不同的地方崩掉了。已知这段程序只用了标准C或C++库函数,请问有什么思路来找出问题所在。解法:1. 时间戳每次都不同。2. 随机变量每次都不同。3. 局部变量的初值,每次可能不同,不过就算没初始化,很多时候那个无效值其实也是固定的... 阅读全文
posted @ 2014-04-24 23:26 zhuli19901106 阅读(185) 评论(0) 推荐(0) 编辑
《Cracking the Coding Interview》——第12章:测试——题目1
摘要:2014-04-24 23:10题目:找出下面代码里的错误。解法:请看下面。代码: 1 // 12.1 What's wrong with the following code segment? 2 #include 3 using namespace std; 4 5 // unsigned ... 阅读全文
posted @ 2014-04-24 23:14 zhuli19901106 阅读(171) 评论(0) 推荐(0) 编辑
《Cracking the Coding Interview》——第10章:可扩展性和存储空间限制——题目7
摘要:2014-04-24 22:06题目:搜索引擎问题,如果有一列100台服务器的集群,用来响应查询请求,你要如何设计query分发和cache策略?解法:query分发可以用计算数字签名并对机器数取模来确定分发到的目标机器。当然这个和hash一样,会存在冲突和故障的情况,需要额外处理。至于cache策... 阅读全文
posted @ 2014-04-24 22:12 zhuli19901106 阅读(178) 评论(0) 推荐(0) 编辑
《Cracking the Coding Interview》——第10章:可扩展性和存储空间限制——题目6
摘要:2014-04-24 22:01题目:你有10亿条url,怎么检测其中时候有重复呢?解法:Hash,算签名,然后用K-V数据库保存数据查重。代码:1 // 10.6 You have 10 billion URLs, how would you do to detect duplicates in ... 阅读全文
posted @ 2014-04-24 22:04 zhuli19901106 阅读(154) 评论(0) 推荐(0) 编辑
《Cracking the Coding Interview》——第10章:可扩展性和存储空间限制——题目5
摘要:2014-04-24 21:52题目:如果你要设计一个网络爬虫,如何避免进入抓取死循环?解法:对网址做格式归一化,重复检测。设计一个碰撞率尽量低的签名算法,对每次抓取了的网址计算签名并保存入库。一个正常网站中的超链接会有大量有向的环路(没有环路就代表你无法通过点击链接的方式回到之前访问过的地方,这肯... 阅读全文
posted @ 2014-04-24 21:59 zhuli19901106 阅读(194) 评论(0) 推荐(0) 编辑
《Cracking the Coding Interview》——第10章:可扩展性和存储空间限制——题目4
摘要:2014-04-24 21:26题目:有一列数,范围全部在1~N之间,保证所有1~N之间的数字都会出现。如果你有4KB的内存,并且知道N最多是32000。请设计方法,找出N,并打印出所有有重复的数字。解法:既然是“重复”,那就可以用位向量了。再考察N的范围,4KB内存有32768个位,足以容下至多3... 阅读全文
posted @ 2014-04-24 21:51 zhuli19901106 阅读(146) 评论(0) 推荐(0) 编辑
《Cracking the Coding Interview》——第10章:可扩展性和存储空间限制——题目3
摘要:2014-04-24 21:06题目:假设你有40亿个不重复的非负整数存在一个文件里,1GB的内存。你要如何找出一个文件中不包含的整数呢?如果是10亿个整数,10MB内存又该如何?解法:前者内存充足,可以直接用一个位向量来标记整数的出现情况,然后顺序扫描找出第一个没出现过的数字。后者内存不足,可以把... 阅读全文
posted @ 2014-04-24 21:26 zhuli19901106 阅读(207) 评论(0) 推荐(0) 编辑
《Cracking the Coding Interview》——第10章:可扩展性和存储空间限制——题目2
摘要:2014-04-24 20:44题目:对于Facebook、Linkedin这样的社交网站,你要如何设计一个数据结构来表示用户之间的关系呢?比如两个用户互为2nd-degree connection。你要如何设计算法来找出他们之间的联系路径呢?解法:显然,社交网络的数据是平方级别的,因为任何人的联系... 阅读全文
posted @ 2014-04-24 21:06 zhuli19901106 阅读(182) 评论(0) 推荐(0) 编辑
《Cracking the Coding Interview》——第10章:可扩展性和存储空间限制——题目1
摘要:2014-04-24 00:38题目:加入你要设计一个服务,供至多1000个client查询每日股票的最高、最低、开盘、收盘价,请描述你要如何设计这个服务。解法:可以用SQL数据库组织,也可以用K-V数据库来提供更高性能。如果股票数量相对不大,还可以用XML文件组织数据。在百度里搜“BIDU”,或在... 阅读全文
posted @ 2014-04-24 05:04 zhuli19901106 阅读(186) 评论(0) 推荐(0) 编辑
《Cracking the Coding Interview》——第8章:面向对象设计——题目10
摘要:2014-04-24 00:05题目:用拉链法设计一个哈希表。解法:一个简单的哈希表,就看成一个数组就好了,每个元素是一个桶,用来放入元素。当有多个元素落入同一个桶的时候,就用链表把它们连起来。由元素值到哈希值的映射就是哈希函数了。代码: 1 // 8.10 Design a hash table... 阅读全文
posted @ 2014-04-24 00:15 zhuli19901106 阅读(269) 评论(0) 推荐(0) 编辑
《Cracking the Coding Interview》——第8章:面向对象设计——题目9
摘要:2014-04-23 23:57题目:如何设计一个内存文件系统,如果可以的话,附上一些代码示例。解法:很遗憾,对我来说不可以。完全没有相关经验,所以实在无从入手。这题目应该和工作经验相关吧?代码:1 // 8.9 How would you design an in-memory file syst... 阅读全文
posted @ 2014-04-24 00:05 zhuli19901106 阅读(165) 评论(0) 推荐(0) 编辑
《Cracking the Coding Interview》——第8章:面向对象设计——题目8
摘要:2014-04-23 23:49题目:有个棋牌游戏叫Othello,也叫Reversi。请看游戏规则。中文应该叫黑白棋吧,不常玩儿就是了。解法:既然这题的规则很清楚,也很清楚,我就写了一个命令行的程序来模拟玩游戏的过程。代码: 1 // 8.8 Othello game, the rule is ... 阅读全文
posted @ 2014-04-23 23:57 zhuli19901106 阅读(233) 评论(0) 推荐(0) 编辑
《Cracking the Coding Interview》——第8章:面向对象设计——题目7
摘要:2014-04-23 23:38题目:你要如何设计一个聊天服务器,有什么技术难点?解法:这是基于工作经验的面试题吗?否则,一个new grad碰上这种题目能打点草稿也就算不错了。代码: 1 // 8.7 Tell me what you would do if told to design the ... 阅读全文
posted @ 2014-04-23 23:43 zhuli19901106 阅读(173) 评论(0) 推荐(0) 编辑
《Cracking the Coding Interview》——第8章:面向对象设计——题目6
摘要:2014-04-23 22:57题目:实现一个数据结构来表示拼图游戏中的碎片。解法:一个拼图块儿有四条边,每边只有凹凸平三种情况,当两块碎片拼接的时候,分为四个方向进行,块儿上的图案肯定也是判断是否能拼接的依据之一。所以就有了以下的表示方法,又一题做得云里雾里。话说这种题目在面试时如果真遇到,得写到... 阅读全文
posted @ 2014-04-23 23:30 zhuli19901106 阅读(195) 评论(0) 推荐(0) 编辑
《Cracking the Coding Interview》——第8章:面向对象设计——题目5
摘要:2014-04-23 18:42题目:设计一个在线阅读系统的数据结构。解法:这题目太大了,我的个亲娘。显然你不可能一次加载一整本书,做到单页纸加载的粒度是很必要的。为了读书的连贯效果,预取个几页也很必要。代码: 1 // 8.5 Deign a class for an online book re... 阅读全文
posted @ 2014-04-23 19:11 zhuli19901106 阅读(189) 评论(0) 推荐(0) 编辑
《Cracking the Coding Interview》——第8章:面向对象设计——题目4
摘要:2014-04-23 18:17题目:设计一个停车位的类。解法:停车位,就要有停车、取车的功能了。另外我还加了一个工作线程用于计费,每秒给那些有车的车位加1块钱费用。代码: 1 // 8.4 Design a class to simulate the parking lot. 2 #include... 阅读全文
posted @ 2014-04-23 18:41 zhuli19901106 阅读(431) 评论(0) 推荐(0) 编辑
《Cracking the Coding Interview》——第8章:面向对象设计——题目3
摘要:2014-04-23 18:10题目:设计一个点唱机。解法:英文叫Musical Jukebox。这是点唱机么?卡拉OK么?这种题目实在是云里雾里,又没有交流的余地,我索性用一个vector来表示一首曲子吧。不过有一点是肯定的,点播行为和播放行为应该分不同线程操作,这样就不至于让机器一直卡在那儿等你... 阅读全文
posted @ 2014-04-23 18:17 zhuli19901106 阅读(282) 评论(0) 推荐(0) 编辑
《Cracking the Coding Interview》——第8章:面向对象设计——题目2
摘要:2014-04-23 17:45题目:假设有个呼叫中心,有接线员、经理、主管三种角色。如果接线员无法处理呼叫,就上传给经理;如果仍无法处理,则上传给主管。请用代码描述这一过程。解法:第一眼觉得这题肯定是在考察设计模式,很像exception的throw过程。对于我这种对设计模式一窍不通的人,这题还无... 阅读全文
posted @ 2014-04-23 18:09 zhuli19901106 阅读(281) 评论(0) 推荐(0) 编辑
《Cracking the Coding Interview》——第8章:面向对象设计——题目1
摘要:2014-04-23 17:32题目:请设计一个数据结构来模拟一副牌,你要如何用这副牌玩21点呢?解法:说实话,扑克牌的花样在于各种花色、顺子、连对、三带一、炸弹等等,如果能设计一个数据结构,让判断这些特征的代码变得很好写,那就能满足题意要求了。我只是勉强实现了几个基本功能,包括抽牌、洗牌、切牌,用... 阅读全文
posted @ 2014-04-23 17:44 zhuli19901106 阅读(371) 评论(0) 推荐(1) 编辑

点击右上角即可分享
微信分享提示