腾讯运营开发岗一面面经
2021.4.1
自我介绍
blablabla···
项目
一上来就问项目是我没想到的
- 介绍一下最熟悉项目
- 介绍一下传统架构、集群架构、分布式架构的区别
- 集群架构中,负载均衡怎么找到空闲服务器
- 分布式架构中,分布式模块之间怎么通信
网络
- TCP/UDP
- TCP三次握手,四次挥手
- TCP拥塞控制
- HTTP消息格式
- TCP是面向流的,TCP报文如何解析成HTTP报文
- HTTP报文可以通过换行符来界定边界,但是如果数据中本来就有换行符应该怎么办?(Content-Length)
- 在编程中有没有用过流文件、流输入输出等
C++
- 解释一下面向对象
- const关键字(const *)
- 内联函数的优缺点
- 宏函数和内联函数的比较
数据库
- 项目中用了哪些数据库的知识
- 三范式
- 索引
- 事务(好像没问,忘记了···)
OS
- 进程和线程
- 用过线程函数吗(pthread)
- 虚拟内存
- 页面调度的过程
- 页面(缓存)置换算法
- O(1)实现LRU(附代码):
#include<bits/stdc++.h>
using namespace std;
class LRU{
private:
int maxNum;
unordered_map<int,list<pair<int,int>>::iterator> mapLRU;
list<pair<int,int>> listLRU;
public:
Cache(int maxnum){
maxNum=maxnum;
mapLRU.clear();
listLRU.clear();
}
int get(int key){
unordered_map<int,list<pair<int,int>>::iterator>::iterator it=mapLRU.find(key);//找key
if(it==mapLRU.end()){//不存在
return -1;
}
else{
int value=it->second->second;
listLRU.erase(it->second);//删除
pair<int,int> tp=make_pair(key,value);
listLRU.push_front(tp);
mapLRU[key]=listLRU.begin();
return value;
}
}
void set(int key,int value){
unordered_map<int,list<pair<int,int>>::iterator>::iterator it=mapLRU.find(key);
if(it==mapLRU.end())//不存在,要写入
{
pair<int,int> np=make_pair(key,value);
if(listLRU.size()==maxNum){//超出
//删除尾元素
int dk=listLRU.back().first;
listLRU.pop_back();
// unordered_map<int,list<pair<int,int>>::iterator>::iterator dit=mapLRU.find(dk);
// mapLRU.erase(dit);
mapLRU.erase(dk);
}
listLRU.push_front(np);
mapLRU[key]=listLRU.begin();
}
else{//存在替换
listLRU.erase(it->second);
pair<int,int> tp=make_pair(key,value);
listLRU.push_front(tp);
mapLRU[key]=listLRU.begin();
}
}
};
int main(){
LRU lru;
lru.Cache(3);
lru.set(1,1);
lru.set(2,2);
lru.set(3,3);
cout<<lru.get(1)<<endl;
cout<<lru.get(2)<<endl;
lru.set(4,4);
cout<<lru.get(3)<<endl;
cout<<lru.get(4)<<endl;
return 0;
}
Gossip
- 平时如何分配自己的时间
- 有什么想问的