应届生求职招聘论坛

标题: 淘宝一面面经(C/C++工程师) [打印本页]

作者: 乱世梦红颜    时间: 2010-10-15 16:27
标题: 淘宝一面面经(C/C++工程师)
一面

自我介绍

项目提问:简单地说一下项目职责,项目完成的工作和使用的技术


(算法熟不熟?还行...

求序列的第N个数:1, 2, 3, 4, 5, 6, 8, 9, 10, 12, 15, 16...,其中每个数的因子都是2, 3, 5

答了个暴力破解法,计数0,然后从1开始递增遍历自然数序列,判断该数是否符合因子要求,是的话计数加1,否则继续遍历自然数序列,直到计数为N,返回自然数序列中遍历到的数。其中,关键在于判断因子要求,最后也没特别好的思路,面试官就说这题先过了(出师不利啊)。


(排序熟不熟?还行...

20亿个数如何排序?

答了个基于基数排序的分解法,又问我有没有更快的方法。暂时没有思路,面试官就说这个比较难,就先过了(俩题貌似都挂了,诶)。


CC++开发经验)

define和内联函数的区别?

答了define只是在预编译的时候进行语句替换,而内联函数进行的是函数调用替换。多说了句,内联函数效率一般比较高,然后面试官就问那为什么效率比非内联的高?答:没有函数调用的开销。问:那函数调用有什么开销?答:函数调用需要有函数栈的创建、函数参数的入栈和清空。问:那是不是内联函数就没有函数调用的开销了?答:如果内联函数中调用了其他函数的话应该就有了吧(已经没啥底气了,各种追问...)。


CC++struct的区别?

这个比较简单,没怎么说面试官就过了。


STL熟不熟?还行...

vector是如何实现的?

答:用数组模拟实现,设有当前最大容量,如果超过就重新分配内存,把旧的数据拷贝过去。问:那如果vector空间不够了,是怎么个重新分配?答:根据最大容量的递增步长重新分配(貌似不是这层意思)。


(设计模式熟不熟?也还行...

平时编程过程中用到了哪些设计模式?

答:常用到的是工厂模式(其实,这个答的非常失败,应该多列几个,而这个我其实没怎么实际写过代码)...问:工厂模式有什么好处?答:可以把创建对象的工作都交给工厂完成,实现了创建对象的接口封装。问:还有其他什么模式?答:最常用的适配器模式,还有STL中的迭代器模式...(没答完,就继续了)


(网络编程熟不熟?不熟,只是了解过Socket编程...


说说多进程和多线程的区别?

答:您是说进程和线程的区别吗?问:不是,这样吧,你说说Linux中进程间通信有几种方式?答:可以用套接字通信,还有信号量(其实一开始就想到共享内存啥的,愣是没敢说,回来才知道原来还有好多方式,诸如管道、消息队列还有信号等等...,诶,杯具)。


如何预防死锁?

答:死锁产生的情况是等待资源a的进程A占用了资源b,而等待资源b的进程占用了资源a,造成死锁。预防死锁的一种方法是让每个执行的进程如果不能获得所有可用资源并运行,则放弃已有资源(貌似还有好多方法,暂时都想不起来了...


Linux下和WindowsC++开发的区别?

答:本身在Linux下只是熟悉了下开发环境,没有实际的编程经验,但是,个人觉得如果熟悉EclipseIDE,差别不会很大(这个回答的也很失败...)。


最后,面试官来了句,你Linux下的C++开发经验不多,那我就没有什么好继续问的了,就先到这吧,谢谢哈。我就知道被鄙视了...然后面试官到前台的时候又说了声谢谢...于是,一面就挂了。


作者: yixun522    时间: 2010-10-15 16:45
慰安下。
作者: 伱給旳依赖    时间: 2010-10-15 21:58
我看已经回答的很不错了,比我强多了
作者: 没有出现    时间: 2010-10-15 23:59
菜鸟,看不太懂,不发表意见了。
作者: 求职软工    时间: 2010-10-16 10:57
看来真的要好好准备了
作者: fwirns    时间: 2010-10-16 18:10
楼主你回答的已经很不错了
作者: Magic_Yun    时间: 2011-3-16 19:19
前100:
1 2 3 4 5 6 8 9 10 12 15 16 18 20 24 25 27 30 32 36 40 45 48 50 54 60 64 72 75 80 81 90 96 100 108 120 125 128 135 144 150 160 162 180 192 200 216 225 240 243 250 256 270 288 300 320 324 360 375 384 400 405 432 450 480 486 500 512 540 576 600 625 640 648 675 720 729 750 768 800 810 864 900 960 972 1000 1024 1080 1125 1152 1200 1215 1250 1280 1296 1350 1440 1458 1500 1536

#include <stdio.h>
#include <stdlib.h>
#define MAX 10005
int list[MAX] = {0};
int MinNext(int *a, int *b, int *c)
{
int min = list[*a]*2;
if(min > list[*b]*3)min = list[*b]*3;
if(min > list[*c]*5)min = list[*c]*5;
if(min == list[*a]*2)(*a)++;
if(min == list[*b]*3)(*b)++;
if(min == list[*c]*5)(*c)++;
return min;
}
int main()
{
list[0] = 1;
int k = 1,i;
int Point_Two = 0, Point_Three = 0, Point_Five = 0;

while(k < 100)
{
  list[k++] = MinNext(&Point_Two, &Point_Three, &Point_Five);
}

for(i = 0; i < k; i++)printf("%d ", list[i]);

return 0;
}


作者: wangfeng2500    时间: 2011-7-21 12:34
一直在Linux下用C、网络和多线程,C++就只知道语法了,能去应聘么?
作者: lantian198607    时间: 2011-9-3 17:09
dddddddddddddd
作者: fhqidx    时间: 2012-9-11 00:22
要会的东西很多啊
作者: yhaizhi    时间: 2013-9-23 21:29
thanks





欢迎光临 应届生求职招聘论坛 (https://bbs.yingjiesheng.com/) Powered by Discuz! X3.2