腾讯 C++后台开发面经(牛客上的面经,找了答案记录下来)

LINUX

1.Linux进程调度算法
1)先来先服务
2)短作业优先
3)最短剩余时间
4)时间片轮转
5)最高响应比优先
6)公平共享调度
Linux进程调度算法

2.Linux进程地址空间分布
在这里插入图片描述
在这里插入图片描述

3.Linux内存管理方法
Linux内存管理
linux 内存管理初探

4.页面置换算法
1)最优页面置换算法(理想情况,实现不了)
2)先进先出算法
3)最近最久未使用算法(最优页面置换算法的近似):两种可能的实现方法(系统维护一个页面链表,设置一个活动页面堆栈)
4)时钟页面置换算法
5)二次机会法
6)最不常用算法
页面置换算法
时钟页面置换算法

5.逻辑地址和物理地址的转换
逻辑地址到物理地址的转换

6.在一台内存为2G的机器上,malloc(20G)会怎么样?new 20G呢?
1)首先,malloc和new申请的都是虚拟内存
2)malloc函数的实质,有一个将可用的内存块连接起来的链表,调用malloc的时候,会沿着链表找一个满足用户需求的内存块。然后将这个内存块一分为二,一块和用户所申请的内存大小相同,另一块返回到链表中。如果用户申请一个大的内存块,空闲链表上可能没有可以满足用户要求的片段,这个时候malloc函数就会请求延时,对链表上的内存进行整理。如果还是不可以的话, 内存申请失败,返回NULL
3)new的话,底层实现还是malloc,在分配失败的时候会抛出bad_alloc类型的异常

7.解释孤儿进程,僵死进程,惊群效应
1)孤儿进程:一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程。孤儿进程将被init进程(进程号为1)所收养,并由init进程对它们完成状态收集工作。
2)一个进程使用fork创建子进程,如果子进程退出,而父进程并没有调用wait或waitpid获取子进程的状态信息,那么子进程的进程描述符仍然保存在系统中。这种进程称之为僵死进程。
3)惊群现象就是多进程(多线程)在同时阻塞等待同一个事件的时候(休眠状态),如果等待的这个事件发生,那么他就会唤醒等待的所有进程(或者线程),但是最终却只可能有一个进程(线程)获得这个时间的“控制权”,对该事件进行处理,而其他进程(线程)获取“控制权”失败,只能重新进入休眠状态,这种现象和性能浪费就叫做惊群。
Linux惊群效应详解

计算机网络
1.SYN Flood攻击及防范方式
SYN Flood攻击原理与防范

2.HTTP常见状态码
1)200 OK
2)204 No Content:表示请求已成功处理,但是没有内容返回。一般用在只是客户端向服务器发送信息,而服务器不用向客户端返回什么信息的情况。
3)206 Partial Content:表示服务器已经完成了部分GET请求,响应报文中包含Content-Range指定范围的实体内容。
4)301 Moved Permanently:永久重定向,表示请求的资源已经永久的搬到了其他位置。
5)302 Found:临时重定向,表示请求的资源临时搬到了其他位置。
6)304 Not Modified:表示資源在由請求頭中的If-Modified-Since或If-None-Match參數指定的這一版本之後,未曾被修改。在這種情況下,由於客戶端仍然具有以前下載的副本,因此不需要重新傳輸資源。
7)400 Bad Request:表示请求报文存在语法错误或参数错误,服务器不理解。
8)403 Forbidden:表示对请求资源的访问被服务器拒绝了。
9)404 Not Found:表示服务器找不到你请求的资源
10)500 Internal Server Error:表示服务器执行请求的时候出错了
11)503 Service Unavailable:表示服务器超负载或正停机维护,无法处理请求

3.Libevent如何处理IO事件,信号事件,和定时事件
libevent事件处理流程
集成信号事件到事件主循环

数据结构
1.布隆过滤器
布隆过滤器

2.hash表解决冲突的方法
1)开放定址法
2)拉链法
3)再哈希法
解决哈希冲突的三种方法

3.红黑树性质
1)每个节点要么是黑色,要么是红色。
2)根节点是黑色。
3)每个叶子节点(NIL)是黑色。
4)每个红色结点的两个子结点一定都是黑色。
5)任意一结点到每个叶子结点的路径都包含数量相同的黑结点。
从5)可以推出:
5.1)如果一个结点存在黑子结点,那么该结点肯定有两个子结点

4.redis中的数据结构
1)string
2)list
3)hash
4)set
5)zset
图解redis五种数据结构底层实现
深入浅出Redis-redis底层数据结构(上)
深入浅出Redis-redis底层数据结构(下)

5.跳表插入删除过程
跳表──没听过但很犀利的数据结构

编程题
1.判断大小端,int的大端转小端
1)判断大小端:可以用指针转换或者联合的方式。
2)大端转小端:可以使用移位运算。
大端模式和小端模式转化

2.大数相加
大数加法

3.最长公共子序列LCS
动态规划 最长公共子序列 过程图解

4.最小编辑距离
算法题解:最小编辑距离(动态规划算法)

5.二叉树中两个节点的最近公共父节点
二叉树的最近公共祖先

6.数据流的中位数
获取数据流中的中位数

其他
1.B树和B+树的区别
区别有以下两点:
1)B+树中只有叶子节点会带有指向记录的指针(ROWID),而B树则所有节点都带有,在内部节点出现的索引项不会再出现在叶子节点中。
2)B+树中所有叶子节点都是通过指针连接在一起,而B树不会。

B+树的优点:
1)非叶子节点不会带上ROWID,这样,一个块中可以容纳更多的索引项,一是可以降低树的高度。二是一个内部节点可以定位更多的叶子节点。
2)叶子节点之间通过指针来连接,范围扫描将十分简单,而对于B树来说,则需要在叶子节点和内部节点不停的往返移动。

B树的优点:
对于在内部节点的数据,可直接得到,不必根据叶子节点来定位。

2.ACID
1)原子性(Atomicity):说的是一个事物内所有操作共同组成一个原子包,要么全部成功,要么全部失败。
2)一致性(Consistency):系统从一个正确的状态,迁移到另一个正确的状态。
3)隔离性(Isolation):事物可以有多个原子包的形式并发执行,但是,每个事物互不干扰。
4)持久性(Durability):当一个事物提交之后,数据库状态永远的发生了改变。
数据库事物的四大特性(ACID)
如何理解数据库事务中的一致性的概念

3.索引种类
mysql系列-索引的使用、原理和设计优化

4.explain关键字
mysql 中的explain关键字

5.智力题 楼层丢鸡蛋
一篇文章带你搞定经典面试题之扔鸡蛋问题

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值