摘要:
1. 给你一个长度为N的链表。N很大,但你不知道N有多大。你的任务是从这N个元素中随机取出k个元素。你只能遍历这个链表一次。你的算法必须保证取出的元素恰好有k个,且它们是完全随机的(出现概率均等)。 解:先选中前k个,从第k+1个元素到最后一个元素为止,以k/i(i=k+1, k+2,...,N)的概率选中第i个元素,并且随机替换掉一个原先选中的元素,这样遍历一次得到k个元素,可以保证完全随机选取。这个算法叫做蓄水池抽样,在某门课上听到的,证明起来也不是很复杂。 证:最后一个元素选中概率=K/N,倒数第2个元素选中概率=(K/N-1)*(1-(K/N)*(1/K))=K/N,以此类推……2. 阅读全文
摘要:
C++代码,发现异常没那么简单,使用须谨慎。翻阅了《Effective C++》 《More Effective C++》《Inside The C++ Object Model》的相关章节,大概弄明白了一些东东,总结在本文。本文不是总结普适的C++异常机制,还没有这个内力哈! 主要是结合构造函数和析构函数,来总结异常对他俩的影响。构造函数和析构函数本来就很折磨脑筋,再叠加上异常机制,确实比较复杂。异常与析构函数本节内容较少,因此先说。构造函数放到下一节讨论。绝对不要将异常抛出析构函数这一条在《Effective C++》 《More Effective C++》中均被作为独立章节讲解,可见其 阅读全文
摘要:
问的问题很多,以下是脑中还有印象的面试题。一面:为什么应聘测试开发的职位?介绍下你的keyvalue存储项目。这个项目有什么改进的思路,如何做?分布式!window进程间通信的方式WPF有什么缺点编程题:如何判断一个数组的前K大的数假设client与server的应用程序进行通信时发生故障了(原来没有问题,现在不能通信了),而client打开浏览器可以正常访问互联网,你是如何采取方法,最快找出问题的所在为什么要选嵌入式开发这个职位?看好它的前景曝露出的问题:在不了解面试官需求的情况下,多问几个为什么。二面:你给自己的C++水平打多少分(满分10分),为什么虚析构函数可能抛出异常吗?如果不可以, 阅读全文