随笔分类 -  面试题

摘要:本来搜一道面试题,找到叫九度题库的地方,发现里面的题目都比较基础,很适合当面试题来练习。于是,闲得蛋疼,把所有题目给爬下来了,并整理成markdown格式,然后export成pdf,方便大家离线阅读。写下抓下来的方法:1、把列表页先wget下,然后抽取链接(用grep处理就好了,如cat problemset* | grep 'problem.php?pid=' | egrep -v 'obj'> urls.txt)2、然后...(毫无技术可言,纯属娱乐)# -*- coding:utf-8 -*-import sysimport osdown_cnt = 阅读全文
posted @ 2013-10-20 09:12 糖拌咸鱼 阅读(1749) 评论(3) 推荐(0)
摘要:CrackCode Interview 书籍链接地址/* * Chapter 1 * Question: Implement an algorithm to determine if a string has all unique characters. * What if you can not use addtional data structures? * 实现一个算法用于判断一个字符串所包含的所有字符是各不相同的。 * 尽量不使用额外空间 */#include<iostream>using namespace std;/* * 假设为ASCII编码,字符数值范围为0~255 阅读全文
posted @ 2013-03-24 19:35 糖拌咸鱼 阅读(779) 评论(0) 推荐(0)
摘要:Q:STL中set底层实现方式?为什么不用hash?A: 第一个问题:set底层实现方式为RB树(即红黑树)。 第二个问题: 首先set,不像map那样是key-value对,它的key与value是相同的。关于set有两种说法,第一个是STL中的set,用的是红黑树;第二个是hash_set,底层用得是hash table。红黑树与hash table最大的不同是,红黑树是有序结构,而hash table不是。但不是说set就不能用hash,如果只是判断set中的元素是否存在,那么hash显然更合适,因为set 的访问操作时间复杂度是log(N)的,而使用hash底层实现的hash_se.. 阅读全文
posted @ 2013-03-04 22:10 糖拌咸鱼 阅读(9106) 评论(0) 推荐(0)
摘要:Q:一个很长的数据流,这个数据流中有R个逗号,那么要等概率的获取一个逗号的偏移量,即获取一个逗号偏移量的概率为1/R。该如何做?A:遇到第一个逗号,以概率1取其偏移量;遇到第二个逗号,以概率1/2替换已选择的偏移量;遇到第三个逗号时,以概率1/3替换已选择的偏移量。。。依次类推到R个逗号时,以概率1/R替换已选择的偏移量。简单证明: 设遇到第n个逗号时,替换已选择偏移量的概率为1/n,那么当数据流全部读取结束之后,仍然选择第n个逗号的概率的算法是: 不管前n-1个逗号的选择情况,第n个逗号一定替换,n+1到R一定不替换,即 1/n * (1 - 1/(n+1)) *(1 - 1/(n+2).. 阅读全文
posted @ 2013-03-03 22:04 糖拌咸鱼 阅读(448) 评论(0) 推荐(0)
摘要:题目:输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。要求不能创建任何新的结点,只调整指针的指向。 10 / \ 6 14/ \ / \4 8 12 16转换成双向链表4=6=8=10=12=14=16分析:一想到二叉查找树,要求产出一个sorted的链表,自然联想到前序遍历。在对当前节点处理的时候,进行链接操作。Solution:#includeusing namespace std;struct BSTreeNode { int m_nValue; BSTreeNode * m_pLeft; BSTreeNode * m_pRig... 阅读全文
posted @ 2013-02-16 21:16 糖拌咸鱼 阅读(273) 评论(0) 推荐(0)
摘要:#include<iostream>#include<stack>using namespace std;class myQueue{private: stack<int> s1, s2; int psize;public: myQueue(){psize=0;} void push(int v) { s1.push(v); psize++; } int pop() { if (s2.size()<=0) { while(!s1.empty()) { s2.push(s1.top()); s1.pop(); } } int res = s2.top() 阅读全文
posted @ 2012-03-23 17:01 糖拌咸鱼 阅读(274) 评论(0) 推荐(0)
摘要:一面不写了,基础、简单。直接上二面吧:题目1: 在淘宝实习,做的是什么? 使用什么技术? PS:后来他总结了下,他认为我其实就是调用第三方API写code。 我想也的确是这样的。所以说,不去核心部门,接触的永远都是表层的东西,很难深入。题目2: 一个按钮,连续点击10次,会产生10个event,这些event在底层是用什么数据结构存放的? 怎么测试10个event在内部是串行执行的,还是并行执行的?题目3: linux下网络编程中,请设计一个read函数,里面可以调用阻塞的read()系统函数,怎么设计这个新的read函数,使得不会出现超时阻塞的情况,需要使用linux下那些机制和系统函数。题 阅读全文
posted @ 2011-11-23 16:53 糖拌咸鱼 阅读(9188) 评论(4) 推荐(3)
摘要:二分查找常用来查找指定有序集合中元素的位置,思路和代码都比较简单,所以大家都很熟练。二分查找貌似很多公司在面试或笔试的时候都会多少涉及到,经常会让你在纸上直接写代码,所以平常只知道原理而从来不自己写的人,可能不会太快写出来,或是代码有点小漏洞,所以经常敲敲常见的数据结构和代码还是很必要的。很多问题,只要涉及到有序的数据结构,就可以往二分查找的思路上靠。 下面的代码,可能不是很完善,仅供参考。经典二分查找的代码,在有序数组里面查找是否存在某个元素,如果存在,则返回相应元素所在索引号:int Find(int arr[], int key,int length){ assert(arr!=... 阅读全文
posted @ 2011-04-11 22:26 糖拌咸鱼 阅读(4420) 评论(0) 推荐(0)
摘要:问题:有一个单链表,其中可能有一个环,也就是某个节点的next指向的是链表中在它之前的节点,这样的链表的尾部形成一环。1、如何判断一个链表是否存在环?2、如果链表存在环,如何找到环的入口点?问题1分析:设置两个指针fast和slow,初始值都指向头指针,slow每次前进一步,fast每次前进两步。如果存在环,则fast必先进入环,而slow后进入环,两个指针必定相遇,当然,fast先到达尾部为NULL,则为无环链表。证明:两个指针fast和slow,fast一次递增两步,slow一次递增一步。如果有环的话两者必然重合,反之亦然。因为fast每次走2步,而slow每次走一步,所以它们之间的差距是 阅读全文
posted @ 2011-04-03 14:06 糖拌咸鱼 阅读(772) 评论(2) 推荐(0)
摘要:编程之美上的题目。问题1:给定一棵二叉树,要求按分层遍历该二叉树,即从上到下按层次访问该二叉树(每一行将单输出一行),每一层要求访问的顺序为从左向右,并将节点依次编号。问题2:写一个函数,打印二叉树中某层次的节点(从左向右),其中根结点为第1层。#include<iostream>#include<queue>using namespace std;struct Tnode{ Tnode * leftChild; Tnode * rightChild; int value; Tnode():leftChild(NULL),rightChild(NULL) { value 阅读全文
posted @ 2011-03-31 22:41 糖拌咸鱼 阅读(906) 评论(0) 推荐(0)
摘要:题目:输入一个链表的头结点,反转该链表,并返回反转后链表的头结点。代码如下:#include<iostream>using namespace std;struct Node{ int value; Node * link; Node() { value=0; link=NULL; }};//返回反向链表的头结点Node* Reserve(Node * head){ Node * pre,*next; pre=head; head=head->link; pre->link=NULL; while(head!=NULL) { next=head->link; he 阅读全文
posted @ 2011-03-09 16:21 糖拌咸鱼 阅读(446) 评论(1) 推荐(0)
摘要:题目:定义字符串的左旋转操作:把字符串前面的若干个字符移动到字符串的尾部。如把字符串abcdef左旋转2位得到字符串cdefab。请实现字符串左旋转的函数。要求时间对长度为n的字符串操作的复杂度为O(n),辅助内存为O(1)。思路:将字符串看做AB两部分,将A反转,再将B反转,最后将反转后的A+反转后的B一起反转就OK了。#include<iostream>#include<assert.h>using namespace std;const int MAX=100;//反转从start到end的字符串svoid Reversal(int start,int end,c 阅读全文
posted @ 2011-03-09 15:50 糖拌咸鱼 阅读(435) 评论(0) 推荐(0)
摘要:题目:一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。分析:这是一道很新颖的关于位运算的面试题。首先我们考虑这个问题的一个简单版本:一个数组里除了一个数字之外,其他的数字都出现了两次。请写程序找出这个只出现一次的数字。这个题目的突破口在哪里?题目为什么要强调有一个数字出现一次,其他的出现两次?我们想到了异或运算的性质:任何一个数字异或它自己都等于0。也就是说,如果我们从头到尾依次异或数组中的每一个数字,那么最终的结果刚好是那个只出现依次的数字,因为那些出现两次的数字全部在异或中抵消掉了。有了上面简单问题 阅读全文
posted @ 2011-03-09 13:54 糖拌咸鱼 阅读(1388) 评论(5) 推荐(0)
摘要:题目1:写一个函数,求两个整数的之和,要求在函数体内不得使用+、-、×、÷。思路:模拟二进制加法,先加不进位得A,然后算进位得B,然后(B<<1)+A即得到两个数之和。A可以由两个数的^得到,B可以有A&B得到。int plus(int num1,int num2){ if(num2==0) return num1; return plus(num1^num2,(num1&num2)<<1);}题目:求1+2+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字以及条件判断语句(A?B:C)思 阅读全文
posted @ 2011-03-08 10:47 糖拌咸鱼 阅读(1676) 评论(1) 推荐(0)
摘要:最近一直在准备面试,因为要实习了,然后我就纠结了,不知道自己到底处在一个什么样的水平,到底应该选择怎样的实习单位。但是,不管怎么样,还是多看看题吧,感觉面试题还是挺好玩的。最近又在看《编程之美》,感觉有些收获,其实编程真的可以很美,呵呵。题目:我们把只包含因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含因子7。习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第1500个丑数。 看过《编程之美》的人,应该都知道书上的解题思路,它总是先从最容易想到的解决方法入手,然后再一直追问,有没有更好的解决方法。我觉得这个解决问题的思路非常好,任何问题都要一 阅读全文
posted @ 2011-03-07 23:17 糖拌咸鱼 阅读(3962) 评论(0) 推荐(0)