最近面试遇到的一些问题
投了tx后台开发、运营开发岗(总共两个部门6次面试),最后收到运营开发的offer,职位是AIOps,具体是哪个部门就不透露了。
腾讯面试风格较为基础,着重考察C++/OS/计网/数据结构/算法/数据库。
C++
- 32位系统和64位系统,指针size大小
- 这个很简单,一个4byte一个8byte
- C++代码在内存中分为几个区
- 5个区,堆、栈、全局/静态变量区、自由变量区、常量区
- 关于堆和自由变量区更深入的讨论,可以看:https://cloud.tencent.com/developer/article/1155154
- 数组名和指针有什么区别
- 虽然数组名传参的时候会变成指针,但这两个东西区别很大
- 数组名取地址得到的是数组名所指向元素的地址。对指针取地址得到的是指针变量自身的地址
- 数组名是常量指针,指针是一个变量
- 对数组名使用sizeof时,得到的是数组的size,对指针sizeof得到的是指针的大小
- 对数组名取地址+1和对指针取地址+1的行为不同
- 函数堆栈是如何进行切换的
- 这个问题比较深,建议自行百度
- extern "C"的作用是什么
- 显式地告诉c++编译器,接下来的内容使用c语言的标准进行编译
- C++ STL用过哪些
- 开放性问题
- vector底层是什么
- 数组,还有三个指针维护
- list底层是什么
- 双向循环链表
OS
- 什么叫系统调用
- 所谓系统调用就是用户在程序中调用操作系统所提供的一些子功能,系统调用可以被看做特殊的公共子程序。系统中的各种共享资源都由操作系统统一掌管,因此在用户程序中,凡是与资源有关的操作(如存储分配、进行I/0传输以及管理文件等),都必须通过系统调用方式向操作系统提出服务请求,并由操作系统代为完成。
- 什么叫临界区
- 每个进程中访问临界资源的那段程序称为临界区(临界资源是一次仅允许一个进程使用的共享资源)。每次只准许一个进程进入临界区,进入后不允许其他进程进入。
- 什么叫中断
- 中断是指程序执行过程中,遇到急需处理的事件时,暂时中止CPU上现行程序的运行,转去执行相应的事件处理程序,待处理完成后再返回程序被中断处或调度其他程序执行的过程。
- 32位系统一个进程最多可以开多大内存
- 4GB
- 什么是虚拟内存
- 这个说起来就很长了……
- 什么是死锁
- 举个例子说清楚就行
- 什么是实时系统/可抢占式系统
- 实时操作系统(RTOS)是指当外界事件或数据产生时,能够接受并以足够快的速度予以处理,其处理的结果又能在规定的时间之内来控制生产过程或对处理系统做出快速响应,调度一切可利用的资源完成实时任务,并控制所有实时任务协调一致运行的操作系统。提供及时响应和高可靠性是其主要特点。
- 系统同样是把处理机分配给优先权最高的进程,使之执行。但在其执行期间,只要又出现了另一个其优先权更高的进程,进程调度程序就立即停止当前进程(原优先权最高的进程)的执行,重新将处理机分配给新到的优先权最高的进程。因此,在采用这种调度算法时,是每当系统中出现一个新的就绪进程i 时,就将其优先权Pi与正在执行的进程j 的优先权Pj进行比较。如果Pi≤Pj,原进程Pj便继续执行;但如果是Pi>Pj,则立即停止Pj的执行,做进程切换,使i 进程投入执行。显然,这种抢占式的优先权调度算法能更好地满足紧迫作业的要求,故而常用于要求比较严格的实时系统中,以及对性能要求较高的批处理和分时系统中。
- 平时用windows多还是linux多,linux用过什么命令
- 开放性问题
计网
- 计算机网络5层结构、每层作用及其协议
- 背就完事
- 子网掩码的作用
- 分割子网
- 如果两台主机,一种情况是都在同一子网内,一种情况是不在同一子网内,两种情况下主机之间应如何通信
- 前者可以直接通信,后者走网关
- TCP靠什么实现可靠数据传输
- 重点题。
- 序号同步、确认机制、流量控制、拥塞控制(慢启动、拥塞控制、快恢复、快重传)、数据校验
- 如果用UDP,如何实现可靠数据传输
- 向TCP看齐
- TTL是什么
- 数据包生存时间
- http协议知道吗,是哪一层的
- 应用层
- http状态码有哪些
- 100/200/301/302/304/404/500/502……
- TCP和UDP的区别
- TCP是有连接的,而UDP无连接
- TCP是流式传输,会有粘包问题,UDP面向报文传输
- TCP只能一对一,UDP可以多播可以广播
- TCP首部开销大,UDP首部开销小
- TCP保证数据可靠交付(即不丢失、无损坏、按序到达),UDP不保证
数据结构
- 树了解吗,讲讲红黑树
- 红黑树基本规则,插入5种情况,删除6种情况
- 红黑树最大优势在于删除操作是O(1)的,只需要最多不超过3次旋转。而平衡树删除的复杂度是O(logn)的
算法
- 腾讯的算法题都很弱智,随便去leetcode练练就行
- 给定两棵二叉树,判断这两棵二叉树叶子节点是否相同
- 删除双向链表的某个节点
- 1e10个数,范围都在[0,2^32),去重排序
- 用位图就行
- 有哪些nlogn的排序算法,都说一下
- 快排效率如何,什么时候会被卡到n^2,怎么避免这种情况
- 当数组原本就有序的时候就会卡到O(n^2),解决方案是随机选择轴值
- https://leetcode-cn.com/problems/lian-xu-zi-shu-zu-de-zui-da-he-lcof/
- 一开始面试官说这是dp的时候都没反应过来,觉得这不就是维护一下变量嘛……后来发现原来这就是一维dp
- https://www.luogu.com.cn/problem/P1434
- 记忆化搜索
- 有个函数rand,这个函数0.4概率返回0,0.6概率返回1,要你利用这个函数去实现新函数,使得返回0和1的概率都是0.5,禁止使用其他随机函数
- 很简单,调用rand两次,记两次的结果为a和b,如果a==b,则再调用一次自己;如果a==1、b==0,返回1;反之返回0
数据库
- 用过哪些数据库
- 索引的作用、基于什么数据结构实现,B+树比B树优秀在哪
- 什么是隔离级别,隔离级别解决了什么问题,什么是不可重复读
- 非关系型数据库什么时候会用到,举个例子
编译原理
- 说说编译过程
- 预处理、编译、汇编、连接
- 如何用.o文件生成二进制文件
其他
- 主要开发语言是什么
- 在学校平时做什么