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

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<iostream>
using namespace std;
class A{
public:
	A(){};
	~A(){cout<<"A"<<endl;};
	virtual void fun(){};
	int a;
};
class B{
public:
	B(){};
	~B(){cout<<"B"<<endl;};
	virtual void fun(){};
	char b;
};
class C:public A,public B{
public:
	C(){};
	~C(){cout<<"C"<<endl;};
	virtual void fun(){};
	long c;
};
int main(){
	A* p=new C();
	delete p;
	cout<<sizeof(C)<<endl;
	return 0;
}

上机答案为: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的算法。

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值