淘宝一面面经(C/C++工程师)

淘宝一面面经(C/C++工程师)
淘宝一面面经(C/C++工程师)一面自我介绍项目提问:简单地说一下项目职责,项目完成的工作和使用的技术(算法熟不熟?还行...)求序列的第N个数:1, 2, 3, 4, 5, 6, 8, 9, 10, 12, 15, 16...,其中每个数的因子都是2, 3, 5。答了个暴力破解法,计数0,然后从1开始递增遍历自然数序列,判断该数是否符合因子要求,是的话计数加1,否则继续遍历自然数序列,直到计数为N,返回自然数序列中遍历到的数。其中,关键在于判断因子要求,最后也没特别好的思路,面试官就说这题先过了(出师不利啊)。(排序熟不熟?还行...)20亿个数如何排序?答了个基于基数排序的分解法,又问我有没有更快的方法。暂时没有思路,面试官就说这个比较难,就先过了(俩题貌似都挂了,诶)。(C、C++开发经验)define和内联函数的区别?答了define只是在预编译的时候进行语句替换,而内联函数进行的是函数调用替换。多说了句,内联函数效率一般比较高,然后面试官就问那为什么效率比非内联的高?答:没有函数调用的开销。问:那函数调用有什么开销?答:函数调用需要有函数栈的创建、函数参数的入栈和清空。问:那是不是内联函数就没有函数调用的开销了?答:如果内联函数中调用了其他函数的话应该就有了吧(已经没啥底气了,各种追问...)。C和C++中struct的区别?这个比较简单,没怎么说面试官就过了。(STL熟不熟?还行...)vector是如何实现的.?答:用数组模拟实现,设有当前最大容量,如果超过就重新分配内存,把旧的数据拷贝过去。问:那如果vector空间不够了,是怎么个重新分配?答:根据最大容量的递增步长重新分配(貌似不是这层意思)。(设计模式熟不熟?也还行...)平时编程过程中用到了哪些设计模式?答:常用到的是工厂模式(其实,这个答的非常失败,应该多列几个,而这个我其实没怎么实际写过代码)...问:工厂模式有什么好处?答:可以把创建对象的工作都交给工厂完成,实现了创建对象的接口封装。问:还有其他什么模式?答:最常用的适配器模式,还有STL中的迭代器模式...(没答完,就继续了)(网络编程熟不熟?不熟,只是了解过Socket编程...)说说多进程和多线程的区别?答:您是说进程和线程的区别吗?问:不是,这样吧,你说说Linux中进程间通信有几种方式?答:可以用套接字通信,还有信号量(其实一开始就想到共享内存啥的,愣是没敢说,回来才知道原来还有好多方式,诸如管道、消息队列还有信号等等...,诶,杯具)。如何预防死锁?答:死锁产生的情况是等待资源a的进程A占用了资源b,而等待资源b的进程占用了资源a,造成死锁。预防死锁的一种方法是让每个执行的进程如果不能获得所有可用资源并运行,则放弃已有资源(貌似还有好多方法,暂时都想不起来了...)Linux下和Windows下C++开发的区别?答:本身在Linux下只是熟悉了下开发环境,没有实际的编程经验,但是,个人觉得如果熟悉Eclipse等IDE,差别不会很大(这个回答的也很失败...)。最后,面试官来了句,你Linux下的C++开发经验不多,那我就没有什么好继续问的了,就先到这吧,谢谢哈。我就知道被鄙视了...然后面试官到前台的时候又说了声谢谢...于是,一面就挂了。本文仅代表作者观点,与本站立场无关.