阿里达摩院C++面经
岗位:C++
部门:达摩院
c++:
1. 介绍new、malloc和delete和free的区别?new和new[]的区别?
2. 在堆内存上,new如何在一个内存上,调用构造函数?
a. 答:placement new。如果你想在已经分配的内存中创建一个对象,使用new时行不通的。也就是说placement new允许你在一个已经分配好的内存中(栈或者堆中)构造一个新的对象。原型中void* p实际上就是指向一个已经分配好的内存缓冲区的的首地址。
3. 引用和指针的区别?
a. 答引用是指向固定对象的指针,不可以改变指向的对象;引用必须初始化,指针可以为空;
4. const的问题
a. const char* a 和 char const * a
b. char* const a;
c. const char* const a;
5. move和forward的区别?使用场景?此处forward应用场景没答好;
a. move:转移生命周期,右值引用;
b. forward:
6. shared_ptr有几种初始化方式?
a. make_shared和new:没答好
7. epoll树的原理?ET和LT区别?
8. 条件变量使用场景?为什么需要锁?
9. 编译方面:编译过程;模板展开在哪个阶段(答编译阶段)
10. 词法分析、语法分析的原理?
数据库:
1. 索引怎么实现?B+树。
2. 索引(二级索引):叶子节点存放什么数据?比如当查询a=3时,可能有很多行,叶子节点存放什么?答:应该存放行的索引,即主键的索引。二级索引。
3. 事务实现的原理,即隔离级别如何实现?
a. 串行化:锁整个表
b. 可重复读和读已提交:MVCC或者锁;
项目:
1. 共享内存的双buffer如何解决读和写的问题。对索引需要加锁;索引只指向新的数据块
2. . 技术难点亮点是什么?
a. 协程的原理
b. 共享内存数据分发系统。进程管理、往共享内存写数据。
c++:
1. 介绍new、malloc和delete和free的区别?new和new[]的区别?
2. 在堆内存上,new如何在一个内存上,调用构造函数?
a. 答:placement new。如果你想在已经分配的内存中创建一个对象,使用new时行不通的。也就是说placement new允许你在一个已经分配好的内存中(栈或者堆中)构造一个新的对象。原型中void* p实际上就是指向一个已经分配好的内存缓冲区的的首地址。
3. 引用和指针的区别?
a. 答引用是指向固定对象的指针,不可以改变指向的对象;引用必须初始化,指针可以为空;
4. const的问题
a. const char* a 和 char const * a
b. char* const a;
c. const char* const a;
5. move和forward的区别?使用场景?此处forward应用场景没答好;
a. move:转移生命周期,右值引用;
b. forward:
6. shared_ptr有几种初始化方式?
a. make_shared和new:没答好
7. epoll树的原理?ET和LT区别?
8. 条件变量使用场景?为什么需要锁?
9. 编译方面:编译过程;模板展开在哪个阶段(答编译阶段)
10. 词法分析、语法分析的原理?
数据库:
1. 索引怎么实现?B+树。
2. 索引(二级索引):叶子节点存放什么数据?比如当查询a=3时,可能有很多行,叶子节点存放什么?答:应该存放行的索引,即主键的索引。二级索引。
3. 事务实现的原理,即隔离级别如何实现?
a. 串行化:锁整个表
b. 可重复读和读已提交:MVCC或者锁;
项目:
1. 共享内存的双buffer如何解决读和写的问题。对索引需要加锁;索引只指向新的数据块
2. . 技术难点亮点是什么?
a. 协程的原理
b. 共享内存数据分发系统。进程管理、往共享内存写数据。
算法题
树的BFS
#阿里面试阿里巴巴##面经##阿里巴巴#树的BFS