文 | 小林coding
出品 | 小林coding(ID:CodingLin )
已获得原公众号的授权转载
今天分享一位同学百度实习一面的面经,技术栈是 C++,由于项目没什么亮点,所以大部分内容都是在问 C++ 的问题,没怎么问项目问题。
new和malloc都是动态内存分配函数。其中,new是C++中的操作符,malloc是C语言中的函数。new会调用对象的构造函数,而malloc不会。使用new可以简化代码,并且更加类型安全。
补充:
new和malloc区别:
堆
补充:
new所申请的内存区域在C++中称为自由存储区。很多编译器的new/delete都是以malloc/free为基础来实现的,所以通常都是借由堆实现来实现自由存储,这时候就可以说new所申请的内存区域在堆上。
会抛出std::bad_alloc异常。
补充:
如果加上std::nothrow关键字,A* p = new (std::nothrow) A;,new 就不会抛出异常而是会返回空指针。
如果一个类有虚函数,就应该为其定义一个虚析构函数。这是因为在使用delete操作符释放一个指向派生类对象的基类指针时,如果基类的析构函数不是虚函数,那么只会调用基类的析构函数,而不会调用派生类的析构函数,这样就会导致内存泄漏和未定义行为的问题。通过将析构函数定义为虚函数,可以确保在释放派生类对象时,先调用派生类的析构函数,再调用基类的析构函数,从而避免内存泄漏和未定义行为的问题。
进程是程序在操作系统中的一次执行过程,它拥有独立的地址空间和系统资源。线程是进程中的一个执行单元,同一进程内的多个线程共享相同的地址空间和系统资源。
补充:
没用过
补充:
右值引用是C++11引入的特性,它是指对右值进行引用的一种方式。右值引用的作用主要有两个:
可以通过右值引用来实现移动语义。移动语义可以在不进行深拷贝的情况下,将对象的资源所有权从一个对象转移到另一个对象,从而提高代码的效率。
右值引用还可以用于完美转发。在函数模板中,通过使用右值引用类型的形参来接收参数,可以实现完美转发,即保持原参数的值类别(左值还是右值),将参数传递给另一个函数。
智能指针是C++中的一种特殊指针,它是一个对象,用来管理另一个指针所指向的对象的生命周期。智能指针可以自动地分配和释放内存,避免手动管理内存的麻烦和出错风险。
C++标准库提供了三种智能指针:
我自己是在在动态内存管理中,使用智能指针可以避免手动管理内存的麻烦和出错风险。
打断点定位然后做处理
后来思考对方应该是想让我回答这种处理措施⬇️
没关注
补充:
在C++中,如果一个类没有显式地定义「构造函数、析构函数、拷贝构造函数、赋值运算符重载函数」,那么编译器会自动生成这些函数,这些函数被称为缺省函数。
sort函数内部使用快速排序算法实现,它的时间复杂度为O(nlogn),是一种非常高效的排序算法。
但是仔细想想还可以继续回答⬇️
在实际实现中,sort函数还有一些优化,例如:
默认它的分布是比较随机的那种分布,然后快排在比较随机的分布上,表现的比较好,速度比较快
多线程锁是一种用来保护共享资源的机制。在多线程编程中,如果多个线程同时访问同一个共享资源,可能会发生竞态条件(Race Condition),导致程序的行为出现未定义的情况。为了避免这种情况的发生,可以使用多线程锁来保护共享资源。
多线程锁的基本思想是,在访问共享资源之前先获取锁,访问完成之后再释放锁。这样可以保证同一时刻只有一个线程可以访问共享资源,从而避免竞态条件的发生。
常见的多线程锁包括互斥锁、读写锁、条件变量等。其中,互斥锁用于保护共享资源的访问,读写锁用于在读多写少的情况下提高并发性能,条件变量用于线程之间的同步和通信。
在数据库中,事务(Transaction)是一组操作单元,这些操作单元要么全部执行成功,要么全部执行失败。事务是保证数据库一致性的重要机制之一,它可以将一系列的操作看作一个整体,从而保证数据库的完整性和正确性。
事务具有四个特性,即ACID:
MySQL是一种常见的关系型数据库,支持事务的机制。在MySQL中,事务可以
通过使用事务控制语句(Transaction Control Statements)来进行管理,包括以下三个语句:
在MySQL中,事务默认是关闭的,需要通过设置autocommit参数为0来启用事务。启用事务后,可以通过执行SQL语句来进行事务操作,
在TCP连接中,客户端和服务器之间会进行以下操作:
需要注意的是,在TCP连接中可能会出现丢包、拥塞等情况,需要进行相应的处理,例如重传丢失的数据包、调整发送窗口大小等。
表内指定的区间反转
部门业务;技术栈情况
感觉:
不足之处:
<END> 程序员专属T恤
商品直购链接 👇
推荐阅读:
文章引用微信公众号"脚本之家",如有侵权,请联系管理员删除!