今日头条三面面经
上周六面的头条,过程有点曲折,直接上面经
一面
讲一讲项目如何处理get和post
tcp接收窗口和拥塞窗口
什么时候会向对端传窗口大小
extern C的意义
假设rtt(数据从两端一来一回) 100ms,那么从输入一个http://url到得到网页要多少时间
https呢?
连续发送两次http请求,会得到两次结果吗?可能第二次比第一次快吗?
是否了解TCP包头阻塞?
服务器状态502 503 504什么问题,怎么排查
netstat具体查看什么问题
写题:多路归并(用了堆,在细节上有一些问题)
看代码中的问题:
class Foo
{
public:
Foo(){_p = new int();}
~Foo() {delete _p; _p = nullptr;}
private:
int* _p;
}
sql:三句查询,要求建立索引来优化查询
一些linux语句的作用:less more sed awk du df dd at tee crotab xargs
最近看了什么技术书籍
二面
linuxIO模型,区别在哪
线程独立拥有哪些资源
协程和线程有什么差别,优势呢?
get和post有什么差别
sendfile的优势在哪?
代码:随机播放100首歌(洗牌算法/这个我把自己绕进去了,洗一次直接输出就完了,我当时脑子短路了,洗一次播一首非要再洗一次来手动提升复杂度,最后没绕出去,然后换题了)
两个倒序数组找最第k大的(框架差不多,最后发现漏了一种情况,感觉还在想洗牌的事情)
因为二面代码花了很久,最后没写完,当时心态有点崩,但给了三面
三面
三面没有写代码,问了一个小时,面试官全程半启发半追问,感觉有点懵,我把上下文相关的问题空格分段了
C/C++内存问题有哪些,尽量说
free和delete在具体实现上的差异
free之后的指针使用有什么问题
缓冲区溢出如何避免,有哪些场景
如何检查/处理越界
野指针和悬空指针分别是什么
试图使用野指针有什么问题
内存上还有别的问题吗?
C++11用过什么特性
之前讲的内存问题有什么好的方法吗?
智能指针讲一下
shared_ptr讲一下,怎么实现的,unique_ptr呢?
是不是所有要用指针的地方都应该用智能指针,有什么问题和不足?(我答了两次寻址和额外空间)
这些缺陷,在不用shared_ptr的前提下有减少成本的策略吗?(跳过了)
include,头文件里面一般放了些什么
声明和实现要写在一起吗?是不是一定要分开写?
写在一起和分开对最后的代码有什么影响,怎么确认(这个我不会,面试官让我试着分析一下,结合include的行为来谈)
gdb怎么查看一个函数的地址?
你在Linux使用经常哪些指令
如何探查CPU负载情况
在什么时候CPU被认为是繁忙/空闲的?
看过哪些比较大的代码?(后面很多问题是从这来的)
服务器:
多线程服务器和nginx在工作方式有什么不一样的地方
nginx怎么处理请求
进程唤醒(惊群问题)的额外成本主要在哪?
nginx的负载均衡(我只答了那个worker的负载均衡)
为什么它要用多进程,优势在哪,劣势在哪
多线程怎么应付同样的问题,能够解决吗,讲一讲方案
你的方案有什么问题?
http了解多少?
http缓存机制了解吗?
长连接讲一下
如何实现长连接(保活)
带外数据如何使用?
你的这个方法有什么问题,可以直接兼容不同的浏览器吗?
了解nginx的解决方案吗?
redis
你对redis怎么理解的?
redis的总体结构
单线程的优势和缺点
redis的事件分发
讲一讲文件事件有哪些
client功能是怎么实现的
时间事件(serverCron函数)
serverCron做了什么
redis所有事情都只有一个单线程吗?
bgsave讲一下,为什么要fork一个进程来做
interrupt与signal有什么差别
interrupt的发起和接受者是谁
操作系统在interrupt中发挥了什么作用
signal呢,发起者又是谁,接收者呢?(这里答得有点混乱)
TCP
ack什么时候发送,丢失了会怎么样?
sack了解吗?
重传ack的时机只有ack超时吗?
重复报文被接收会发生什么?
拥塞窗口要不要把自己的大小发给接收方,意义何在?(这个问题一面也问了,没有答出来)
延迟ACK的意义在哪?
为什么不能每次都直接发大的窗口?
进程地址空间布局讲一下
BSS为什么要叫这个名字?(后来查了,block started by symbol)
static关键字有什么作用,如果用来修饰函数呢?
多个线程使用static数据会开启多个副本吗?
C++OO
多重继承怎么实现
虚拟继承怎么实现
对于函数寻址在时间成本上有什么差异?
对于继承体系很复杂的情况这个成本会被拉高吗?
最后有什么问题吗?
。。。
#字节跳动##面经##C++工程师##秋招#