每天3道面试题 12/29

2016-12-30 14:38 阅读 235 次 评论 0 条

内存池、进程池、线程池(C++程序员必须掌握)

自定义内存池的思想通过这个"池"字表露无疑,应用程序可以通过系统的内存分配调用预先一次性申请适当大小的内存作为一个内存池,之后应用程序自己对内存的分配和释放则可以通过这个内存池来完成。只有当内存池大小需要动态扩展时,才需要再调用系统的内存分配函数,其他时间对内存的一切操作都在应用程序的掌控之中。应用程序自定义的内存池根据不同的适用场景又有不同的类型。

从线程安全的角度来分:内存池可以分为单线程内存池和多线程内存池。单线程内存池整个生命周期只被一个线程使用,因而不需要考虑互斥访问的问题;多线程内存池有可能被多个线程共享,因此则需要在每次分配和释放内存时加锁。相对而言,单线程内存池性能更高,而多线程内存池适用范围更广。

从内存池可分配内存单元大小来分:可以分为固定内存池和可变内存池。所谓固定内存池是指应用程序每次从内存池中分配出来的内存单元大小事先已经确定,是固定不变的;而可变内存池则每次分配的内存单元大小可以按需变化,应用范围更广,而性能比固定内存池要低。

有10筐苹果,每筐里有10个,每筐里苹果的重量都是一样的,其中9筐每个苹果的重量都是1斤,另一筐中每个苹果的重量都是0.9斤,但是外表完全一样,用眼看或者用手摸无法分辨。现在要你用一台普通的大秤一次把这筐重量轻的找出来。

答案十筐苹果分别编上从1-10的序号,从第1筐里拿一个;第二筐里拿2个;第三筐拿三个.一直拿到第9筐.如果称出的数是整数,那么剩下的第十筐就是最轻的.如果称出有余数,比如余六两,那么10减6等于4,第4筐就是最轻的,依次类推.很容易地找出最轻的那一筐.

逻辑推断:判断下列10个字母中,每一个字母都代表一个阿拉伯数字,0-9中的一个,已知D = 5,请在5分钟内判断其余9个字母代表的数字。

      DONALD

+    GERALD

-----------------------

      ROBERT

答案T = 0   G = 1   O = 2   B = 3    A = 4   D = 5   N = 6   R = 7    L = 8   E = 9  。分析 因为D等于5,所以T = 0; 2L + 1  = R,说明R是奇数, 又因为D = 5,D+G = R,所以R等于7或9;因为O+E =O,所以E = 0,或E = 9,因为T = 0,所以E = 9,R = 7,G = 1;因为2L+1 = R,所以L = 3或者L = 8,因为E = 9,2A+1 = E,所以A = 4,L = 8;还有2,3,6未知,因为N+7 = B或者N+7-10=B,所以B = 3,N = 6,O = 2.

版权声明:本文著作权归原作者所有,欢迎分享本文,谢谢支持!
转载请注明:每天3道面试题 12/29 | 术与道的分享
分类:剑指Offer 标签:,
1024do.com导航_术与道导航平台

发表评论


表情