百度提前批C++一面

还没面完就知道自己要寄,但是还是分享出来希望有大佬出来帮忙解答一下,谢谢啦!

  1. C++多线程编程
  2. 多线程之间的数据同步方式
  3. 锁的种类和分别的作用(互斥锁、自旋锁、读写锁)
  4. vector和list的区别
  5. 虚函数和纯虚函数
  6. 继承和多态
  7. 两道编程:桶排序 字符串转float数组 int stof(string s,float *f)

中间面试官在黑板上手写了两个c++代码:

vector<int> v(4);
v[1]=1;
v[2]=2;
int *p=&v[3];
for(int i = 0;i<100;i++) v.push_back(i);
v[3]=300;
*p=400;
cout<<v[3]<<*p<<endl;

这段代码存在哪些问题,输出的结果是多少?

class A{
  public:
  void test(){
	delete this;
  }
}
①A a;
a.test();
②A *p = new A();
p->test();

分别会发生什么情况(应该是这么问的)

class B:public A{
  public:
  void test(){}
}
③A a;
a.test();
④A *p = new B();
p->test();

调用的分别是谁的test,为什么?如果在A的test前加上virtual呢?

#秋招##牛客在线求职答疑中心#
全部评论
那个Vector应该是扩容内存地址变了
7
送花
回复
分享
发布于 2023-08-19 13:58 北京
class A{ public: void test(){ delete this; } } ①A a; a.test(); ②A *p = new A(); p->test(); 这个是调用类的成员函数给this指针传参的不同。 第一个给this指针传参&a,但a不是new出来的对象,所以delete出错。 第二个给this指针传参p,p指向new出来的对象,所以delete正常。
3
送花
回复
分享
发布于 2023-08-19 15:01 河北
秋招专场
校招火热招聘中
官网直投
佬,桶排序咋写啊,LeetCode上有吗
点赞
送花
回复
分享
发布于 2023-08-19 19:07 山东
C++多线程编程: C++提供了多线程编程的支持,可以使用线程来同时执行多个任务,提高程序的并行性和性能。通过使用std::thread类或C++11提供的std::async和std::future等功能,可以创建和管理线程。 多线程之间的数据同步方式: 在多线程编程中,多个线程可以同时访问和修改共享的数据。为了保证数据的一致性和正确性,需要使用同步机制来限制并发访问。常用的数据同步方式有: - 互斥锁(Mutex):通过加锁和解锁来保证同一时间只有一个线程访问共享数据。 - 条件变量(Condition Variable):用于线程之间的通信和同步,等待某个条件变为真后再继续执行。 - 原子操作(Atomic Operation):提供了一种无锁的原子操作,保证了特定操作的原子性,避免了并发访问的竞争条件。 锁的种类和分别的作用: 在多线程编程中,锁(Lock)用于实现互斥访问共享资源,常见的锁包括: - 互斥锁(Mutex):通过加锁和解锁来保证临界区的互斥访问。 - 自旋锁(Spin Lock):在获取锁时不会放弃CPU时间片,而是一直自旋等待直到获取到锁。 - 读写锁(Read-Write Lock):适用于读多写少的场景,提供了共享读、独占写的锁机制。
点赞
送花
回复
分享
发布于 2023-08-20 10:51 浙江
vector和list的区别: vector和list是C++中的两种常用容器,它们之间的区别包括: - 数据存储方式:vector采用连续内存存储,而list采用链表存储。 - 插入和删除操作的效率:对于vector,插入和删除元素在其末尾的效率较高,但在其他位置则比较低效。而list插入和删除元素的效率都比较高,不受位置影响。 - 随机访问的效率:由于vector采用连续内存存储,所以可以通过下标进行随机访问,效率较高。而list只能通过迭代器进行顺序访问,不能进行随机访问。 - 内存分配和管理:vector需要预先分配一块连续的内存空间,而list可以动态地分配和释放节点。 虚函数和纯虚函数: 虚函数(Virtual Function)是在基类中声明的函数,可以在派生类中进行重写,通过基类指针或引用调用时根据对象的实际类型来确定具体调用的函数版本,实现多态性。虚函数需要通过基类的指针或引用来调用,因为动态绑定是在运行时确定的。 纯虚函数(Pure Virtual Function)是一个没有实现的虚函数,在基类中只有函数的声明,没有函数的定义。派生类必须实现纯虚函数,否则派生类也会成为抽象类。纯虚函数用于定义接口,强制派生类实现特定的函数,实现接口的统一性。 继承和多态: 继承(Inheritance)是面向对象编程中的一种机制,允许一个类(派生类)继承另一个类(基类)的属性和方法。继承可以建立类之间的层次关系,派生类可以继承基类的数据和方法,并可以添加自己的特性。 多态(Polymorphism)是实现面向对象编程中的一个重要概念,通过派生类对基类的虚函数进行重写,可以实现不同类型的对象对同一消息的不同响应。多态性可以提高代码的灵活性和可扩展性,通过基类的指针或引用调用虚函数时,根据对象的实际类型来确定调用的函数版本,实现多态行为。
点赞
送花
回复
分享
发布于 2023-08-20 10:51 浙江
明天面,马一下
点赞
送花
回复
分享
发布于 2023-08-21 11:10 重庆
佬是本科吗还是硕士
点赞
送花
回复
分享
发布于 2023-09-14 12:33 广东

相关推荐

7 55 评论
分享
牛客网
牛客企业服务