【面经】百度——后台开发

1、分析一段代码,没有提示从什么角度要分析什么,只是分析点越多越好

a=0.1;
b=0.3;
if(3*a==b)
{a+=b;}
else{a=a+b;}

要分a和b是否为基本类型来分析,基本类型能编译过,如果不是基本类型则需要重载运算符。还问了a+=b;和a=a+b;有没有区别

2、有没有用过什么设计模式

3、分析代码的输出

#include
using namespace std;
class A{
public:
	A(){};
	~A(){cout<<"A"<

上机答案为:A,20

https://blog.csdn.net/fengxinlinux/article/details/72836199

注意:不同的父类用不同的虚函数表,但父类和子类是同一个虚函数表。

4、写一个头文件实现4个类:人,男人,女人,房子(human,man,woman,house)。man和woman是继承关系,男人有配偶女人,女人也有配偶男人,人有房子,房子有主人。可以写一个或者多个头文件,要求能编译通过,要写出include语句,写清楚各类之间的关系。

5、实现一个函数,输入为两个ip地址,判断是否在同一网段(第一节是否相同)

答:用string装参数,比较前面三个字符是否相同

问:还有没有更优化的方法?

6、实现一个类,类方法包括push(),pop(),max(),max()即找最大值。要求三者时间复杂度O(1)

参考:https://www.cnblogs.com/youxin/p/4371165.html

(1)空间换时间:另开一个栈smax保存当前最大值,即保持栈顶始终为当前最大值。每次push数据时与smax栈顶比较,数据<=栈顶就照常push,数据>栈顶就把数据也入栈到smax中。pop时与smax比较是否是当前最大值,如果是当前最大值则栈smax也要pop

(2)用一个变量保存当前最大数据max,数据栈中保存“差值”:push数据时,push(数据-max),比较数据与max,若数据>max则替换max为数据;pop数据时,若栈内数据为负,则pop(栈内数据+max),若栈内数据为正,则pop(max),同时用(max-栈内数据)替换max

7、内存栈和堆的区别

8、排序了解吗?什么是快排?冒泡呢?快排复杂度是多少?二者那个更快?为什么快排比冒泡快?冒泡能用分治思想吗?堆排序怎么实现?

9、常用哪些容器?

10、有没有什么想问我的?

因为当时觉得自己答得很不好,过不了了,已经放弃挣扎,脑子已经停止思考,所以就说没有什么想问的。后来在回来的车上才觉得应该问一下面试过程中没有解决的问题的,特别是那个用O(1)找max的算法。

最后他给了些建议:我们这边基本是从基础、算法、项目三个方面做考察,你的项目比较偏专业一点,但是对我们来说意义不大,因此建议你从前面两个方面加强。

走的时候把他的笔带走了,回去还的时候,他问了一句:有没有兴趣做测试开发?当时想都没想就说没学过测试,只是知道一点。然后他就无奈的笑了。我感觉他内心肯定觉得我没救了。

你可能感兴趣的:(C/C++)