博客
关于我
面试题演练
阅读量:240 次
发布时间:2019-03-01

本文共 2220 字,大约阅读时间需要 7 分钟。

腾讯TEG后台开发

项目select poll epoll区别以及各自的应用场景

select和poll都是IO多路复用函数,但它们的实现方式和适用场景有所不同。select基于轮询,适用于跨平台的IO事件处理,而epoll则基于Linux内核的红黑树结构,性能更高,效率更优。epoll的适用场景包括网络服务器、实时数据处理等场景,而select则在跨平台和简单场景下表现更好。

shared_ptr的线程安全机制通过引用计数实现,确保多线程环境下指针的归属和释放。原子操作的原理是利用底层的单原子操作,确保在多线程环境下操作的原子性。

STL迭代器失效通常发生在使用容器的插入或擦除操作时,特别是当使用迭代器进行这些操作时,迭代器可能失效。因此,应获取返回的迭代器并重新获取有效迭代器进行操作。

虚继承的实现原理是通过虚函数表和虚函数表指针,解决多继承下的菱形继承问题。虚继承允许类继承多个基类而不引起二义性。

memory order内存序和lock-free、wait-free内存访问是内存访问顺序的不同概念。lock-free内存访问是指在不加锁的情况下,多线程环境下保证内存操作的原子性和有序性;wait-free则是指在不等待的情况下,保证内存操作的串行性。

MySQL中的InnoDB和MyISAM区别主要在于存储结构和事务支持上。InnoDB采用共享式表结构,支持事务,行锁实现通过锁记录器管理。而MyISAM采用分块存储,行锁实现通过记录锁位。行锁的实现原理通常基于记录锁或共享锁机制。

Redis可以做很多事情,比如做一个高性能的缓存系统、支持键值存储、集群和主从复制、发布订阅等。MySQL的Buffer Pool主要用于缓存数据页,类似于Redis的内存缓存。

三次握手和四次挥手是TCP协议中的关键过程。三次握手确保数据传输的可靠性,四次挥手确保数据发送确认和资源释放。

处理粘包时,可以通过设置数据包结构体的统一消息头,包含消息长度信息,然后根据长度拆分数据包进行处理。

实现double pow(double a, int n)时,需要注意double和int的取值范围,避免溢出。可以通过分治法优化时间复杂度到O(logN)。

内存池是一种分配内存的优化方式,通过预先申请内存块并管理内存池,提高内存分配的效率。

vector的动态数组实现通常采用动态数组扩展,扩容时常设置为原有大小的两倍以减少频繁分配的开销。deque的实现通常需要没有连续的内存空间,通过链表或者其他结构来实现。

多态的实现原理是通过虚函数表和虚函数表指针,实现多个派生类共享同一段虚函数表。

成员初始化列表可以用于初始化父类成员,但要注意C++11及以上版本的特定规则。

vector resize和reserve是修改内存的方式,resize改变大小并调整元素,reserve则只预留空间。vector的reverse操作可以通过标准库函数实现。

Linux IO模型中,同步IO包括阻塞IO和同步IO,异步IO包括非阻塞IO和多路复用IO。select和epoll都是异步IO模型。

实现栈可以用数组模拟,常用的方法是尾减法。二叉树中序遍历可以递归或非递归实现。

epoll的底层实现主要依赖于Linux内核的红黑树结构,了解红黑树的实现细节有助于更好地理解epoll的性能优势。

桶排序是一种简单且有效的排序算法,适合键的范围有限的情况。

多线程完全队列可以通过互斥锁和条件等机制实现,并发读写可以通过适当的信号量和同步机制来处理。

单链表排序的时间复杂度通常为O(n^2),推导时需要分析最坏情况下的操作次数。

判断二叉树是否为二叉搜索树可以通过检查每个节点的子节点是否满足条件,或者通过中序遍历检查是否为升序。

调试core文件需要加载core文件并使用gdb或其他工具分析。调试多线程程序需要检查所有线程,包括主线程和子线程。内存泄漏调试可以使用valgrind工具。

Python了解吗?分布式系统和Hadoop HDFS了解吗?Paxos算法的流程包括提案、选举、写入等步骤。

阿里云C++研发

反转单向链表经典算法题,常用双指针法或栈模拟法。malloc和new区别在于分配方式和管理,free和delete都是释放内存。内存泄漏会导致程序崩溃,影响其他进程。

水平触发和边缘触发的区别在于触发条件,边缘触发通常关联到数据接近上限或下限。野指针产生于不释放内存,可能导致段错误,但悬空指针不一定会段错误,具体取决于操作系统的实现。

多线程与单线程区别在于并发执行,多线程不一定比单线程快,依赖任务类型。汇编和虚拟化了解吗?服务器阻塞IO常用select模型,Apache早期使用轮询IO。

TCP和UDP区别在于连接性和无连接性,拥塞控制通过动态调整窗口大小实现,丢包时阈值减半以缓解网络拥塞。

二面全程项目问答,连接分发方式包括同步和异步,互斥锁和读写MySQL可能导致上下文切换,边缘触发关联到数据接近限值。读过哪些开源代码?技术话题不畅,面试结束。

三面科研经历,项目介绍,多线程内存布局,线程栈调整方法,花生壳内网穿透原理,ARP表建立过程,TCP保活与心跳包,纳格算法,虚拟化和汇编了解吗,职业规划。

从面试问题来看,技术栈偏底层,可能不符合,最后被回绝。阿里云面试没有套路,技术要求偏底层,难以展开。

转载地址:http://hwrv.baihongyu.com/

你可能感兴趣的文章
NIFI大数据进阶_FlowFile拓扑_对FlowFile内容和属性的修改删除添加_介绍和描述_以及实际操作---大数据之Nifi工作笔记0023
查看>>
NIFI大数据进阶_NIFI的模板和组的使用-介绍和实际操作_创建组_嵌套组_模板创建下载_导入---大数据之Nifi工作笔记0022
查看>>
NIFI大数据进阶_NIFI监控的强大功能介绍_处理器面板_进程组面板_summary监控_data_provenance事件源---大数据之Nifi工作笔记0025
查看>>
NIFI大数据进阶_内嵌ZK模式集群1_搭建过程说明---大数据之Nifi工作笔记0015
查看>>
NIFI大数据进阶_外部ZK模式集群1_实际操作搭建NIFI外部ZK模式集群---大数据之Nifi工作笔记0017
查看>>
NIFI大数据进阶_离线同步MySql数据到HDFS_01_实际操作---大数据之Nifi工作笔记0029
查看>>
NIFI大数据进阶_离线同步MySql数据到HDFS_02_实际操作_splitjson处理器_puthdfs处理器_querydatabasetable处理器---大数据之Nifi工作笔记0030
查看>>
NIFI大数据进阶_连接与关系_设置数据流负载均衡_设置背压_设置展现弯曲_介绍以及实际操作---大数据之Nifi工作笔记0027
查看>>
NIFI数据库同步_多表_特定表同时同步_实际操作_MySqlToMysql_可推广到其他数据库_Postgresql_Hbase_SqlServer等----大数据之Nifi工作笔记0053
查看>>
NIFI汉化_替换logo_二次开发_Idea编译NIFI最新源码_详细过程记录_全解析_Maven编译NIFI避坑指南001---大数据之Nifi工作笔记0068
查看>>
NIFI集群_内存溢出_CPU占用100%修复_GC overhead limit exceeded_NIFI: out of memory error ---大数据之Nifi工作笔记0017
查看>>
NIFI集群_队列Queue中数据无法清空_清除队列数据报错_无法删除queue_解决_集群中机器交替重启删除---大数据之Nifi工作笔记0061
查看>>
NIH发布包含10600张CT图像数据库 为AI算法测试铺路
查看>>
Nim教程【十二】
查看>>
Nim游戏
查看>>
NIO ByteBuffer实现原理
查看>>
Nio ByteBuffer组件读写指针切换原理与常用方法
查看>>
NIO Selector实现原理
查看>>
nio 中channel和buffer的基本使用
查看>>
NIO三大组件基础知识
查看>>