您现在的位置是:网站首页> 内容页

百度云面试总结

  • 公海710 线路
  • 2019-04-14
  • 287人已阅读
简介百度云面试总结在这个面试体验感很不舒服有压力面试的感觉总结起来人家对我的项目一点不感兴趣面后台的岗位都会很难现场笔试题树的和为k的所有路径树的先序遍历注意到条件问我的性格优缺点

百度云面试总结

在这个面试体验感很不舒服 有压力面试的感觉总结起来人家对我的项目一点不感兴趣 面后台的岗位都会很难

现场笔试题

树的和为k的所有路径树的先序遍历 注意到条件问我的性格 优缺点Nginx hash 红黑树 AVL树 B+ B-树重新总结一下hash 红黑树 AVL树 B+树 B-树线程通信机制:条件变量条件变量的实现线程条件变量原理分析条件变量本质上是一个全局可访问的flag,所以,线程在调用pthread_cond_wait之前必须先调用pthread_mutex_lock对条件变量加互斥锁pthead_cond_wait函数首先检测当前条件变量的值,如果条件变量为真,线程直接从pthread_cond_wait函数返回,继续执行下面的代码如果为假,那么线程不具备工作的条件,必须等待,为了不浪费CPU资源,pthread_cond_wait函数让线程进入了休眠状态为了不阻塞其他线程,让其他线程也可以访问条件变量,pthread_cond_wait函数又释放了互斥锁但此时进入休眠状态的线程依然位于pthread_cond_wait函数内,执行过程在pthread_cond_wait函数处阻塞当线程工作的条件具备时,pthread_cond_signal函数负责将条件变量修改为真,同时发信号通知等待的线程因等待条件变量而进入休眠状态的线程将在pthread_cond_wait函数内被信号唤醒在pthread_cond_wait函数中 先释放锁 再睡眠 再加锁 再对条件变量进行检验线程被唤醒的同时重新获取了互斥锁,并再次对条件变量检测,发现条件变量为真,线程具备了工作的条件pthread_cond_wait函数从阻塞(线程休眠)状态返回,然后线程继续执行下面的代码线程在完成对全局资源的访问后,释放互斥锁条件变量机子是将全局标记、线程信号、线程休眠、加锁解锁结合在一起 主要包含在pthread_cond_wait函数内 包括:检测条件变量 为真从函数中返回 继续执行下一步 为假则:设置线程等待条件(变量变为真的)信号让线程进入休眠状态释放互斥锁接收到条件(变量变为真的)信号后 则:唤醒休眠的线程重新获取互斥锁重新检验条件变量 为假 则继续执行步骤1 为真则从函数内返回pthread_cond_signal函数的主要工作是负责修改条件变量的值和发送信号提醒等待线程条件变量变成了真值条件变量和互斥量结合使用 互斥锁保护的是两种资源: 条件变量和线程需要访问的全局资源;因为线程在pthread_cond_wait函数内被唤醒后,重新获取了互斥锁,然后才能检测条件变量,条件变量为真,从函数返回后,并没有申请获取其他的互斥锁,就继续对全局资源访问,并在完成访问后只释放了一次互斥锁;共享内存怎么加锁shm_ptr是共享内存映射得来的虚拟地址 用映射的虚拟地址来保存互斥量用信号量来完成互斥的效果文件记录锁自己实现一个原子的自旋锁使用无所结构生产者-消费者模型中的队列,可以使用无锁队列来实现包括共享线程锁、文件锁、使用无锁结构被问得怀疑人生gdb调试 core dump文件epoll机制怎么实现事件回调的通过epoll_ctl向红黑树添加要被监测的事件时 会向内核注册回调函数 当事件活跃的时候会触发中断函数 调用回调函数 然后把该活跃的事件添加到双向链表中C++11的四种智能指针 有缺点auto_ptr 已经被C++11弃用了shared_ptrweak_ptrunique_ptr 是为了取代auto_ptr的产物unique_ptr是一个独享所有权的智能指针 它提供了严格意义上的所有权拥有它指向的对象无法进行复制构造 无法进行复制赋值操作 即无法使两个unique_ptr指向同一个对象 但是可以进行移动构造和移动赋值操作保存指向对象的指针 当它本身被删除释放的时候 会使用给定的删除器释放它指向的对象unique_ptr 可以实现如下功能:
    为动态申请的内存提供异常安全讲动态申请的内存所有权传递给某函数从某个函数返回动态申请内存的所有权在容器中保存指针auto_ptr 应该具有的功能
迭代器什么时候才会失效STL各种容器迭代器失效的时机标准STL序列容器:vector、string、deque和list标准STL关联容器:set、multiset、map和multimap。非标准序列容器slist和ropeslist是一个单向链表,rope本质上是一个重型字符串非标准关联容器hash_set、hash_multiset、hash_map和hash_multimap几种标准非STL容器,包括数组、bitset、valarray、stack、queue和priority_queue值得注意的是,数组可以和STL算法配合,因为指针可以当作数组的迭代器使用vector:
    当插入(push_back)一个元素后,end操作返回的迭代器肯定失效。当插入(push_back)一个元素后,capacity返回值与没有插入元素之前相比有改变,则需要重新加载整个容器,此时first和end操作返回的迭代器都会失效。当进行删除操作(erase,pop_back)后,指向删除点的迭代器全部失效;指向删除点后面的元素的迭代器也将全部失效。
deque迭代器的失效情况:
    在deque容器首部或者尾部插入元素不会使得任何迭代器失效。在其首部或尾部删除元素则只会使指向被删除元素的迭代器失效。在deque容器的任何其他位置的插入和删除操作将使指向该容器元素的所有迭代器失效。
List/set/map
    删除时,指向该删除节点的迭代器失效
STL中迭代器失效详解vector重新申请内存迭代器就会失效fork() waitfork()还有好多都忘得差不多了 (~衰~)

文章评论

Top