美团暑期offer
说话语气要平和,放慢速度
下午3点钟预约面试时间:
1.晚上8点有时间么? 有
2.有女朋友么?
3.什么时候能来北京?
美团基础平台部
晚上8点(1个小时)
1.自我介绍
2.介绍一下项目(套路:主要是把自己学过的知识得到运用)
3.多进程和多线程的区别
4.说一下STL源码中的map实现(红黑树的五点要求)
5.读过什么书
6.TCP的三次握手,四次挥手,为什么3次握手,4次握手?
7.说一下学过的设计模式? 状态机模式,简单工厂,策率模式,享元模式,模板模式,
8.说一下select和epoll的不同?
epoll的红黑树和回调机制要说一下,内核态和用户态的拷贝,实现百万句柄的控制
9.写两道题目吧(题目答案见下文)
10.new和malloc的区别
11.知道nginx服务器么
12.说一下c++多态? 函数多态 类多态:静态多态:模板静态多态
动态多态:virtual,virtual的不好
13.Linux进程间通信的方式?套接字,fifo,消息队列,共享内存(最快),信号,信号量
14,说一下使用过的数据结构? 说一下排序?快排,归并,堆排的实现(维护堆)
15.今天给你offer,7月1号能来么,能实习多长时间,有女朋友么?还有几个offer? 我们这里主要做的美团网搜索处理,事明天再约
在线编程题目 [1]翻转链表(递归和非递归的方式) struct Node { int nValue;
Node *pNext; }; Node *ReverseList(Node *pHead) { if(pHead ==
NULL) { return NULL; }
Node *pRrev = NULL; Node *temp = pHead; Node *pNext = NULL;
while(temp != NULL) { pNext =
temp->pNext; if(pNext == NULL)
{ pHead = temp;
ptemp->pNext = pPrev; break;
} temp->pNext = pPrev; pPrev = temp;
temp = pNext; } return pHead; } [2]重洗memove函数(经典题目)
//主要是地址覆盖问题,原地址src和目标地址dest,防止地址重叠 void *my_move(void *dest, void *src,
int count) { if(dest == NULL || src == NULL) {
return NULL; } if(dest < src) {
char *p = (char *)dest; char *q = (char *)src;
while(count--) { *p++ = *q++;
} } else { char *p =
(char*)dest + count; char *q = (char*)src + count;
while(count--) { *p = *q;
p--; q--; } }
return dest; }
美团2面:(时间1小时)
1.自我介绍
2.你的学习成绩怎么样?(60分飘过的怎么说)
3.你最早什么时候接触到编程?
4.在线coding,编写线程池(20分钟),主要是看代码的逻辑性,和规整度(好久不写代码了,不展示丑陋的代码了)
5.快排,堆排,归并的应用场景
6.模板多态和virtual多态的区别
7.了解过开源的东西么?
8.项目给你,怎么让团队进行处理
9.了解shell么,可能最后还是去不了北京
10.进程间通信的方式,线程间通信,用到过什么锁?
11.实习时间
12.又是等待了
如果你没有收到面试电话,只能说明你的简历不够好,你的项目不够好 说话注意语速
面试就是面试官能理解你所说的,以及你能输出的知识,他也懂。[不要吹牛,其实他什么都懂,在他眼中,你就是渣的和狗一样]
把自己学过的知识,用到项目中 发展中了解的东西:
1.Linux内核源码
2.服务器大并发的架构(分布式存储,负载均衡等等技术,redis,nosql,mem***d)
3.数据库的问题?(基础:范式[隔离性等级的使用场景,脏读,幻读,不可重复读],事务,myisam引擎,innodb引擎的区别和使用,数据库连接池,
读写分离,数据库分区[分库分表],数据库的优化[索引优化,sql语句优化等等])
---------------------------------------------------------
1.new的详细使用方法[看effective c++中new那一章],malloc应该按照内存分配算法分配到堆区的地址
2.模板的深入了解[看effective c++中模板那一章, STL源码剖析前三章 ,反复读一下]
3.面试算法书[
项目介绍(后台开发可能会问到项目业务)
一. 1.数据拷贝---->缓存来解决,例如数据库中的数据在内存中缓存
2.环境切换---->理性的创建线程:是否需要多线程,需要线程池?
[1]单核服务器:采用状态机的编程效率最佳
[2]多核服务器:线程能够充分发挥多核服务器的性能,也要注意线程间切换开销
[3]线程池:拥有若干个线程,线程的个数不是越多越好,越多会增加系统的开销,太少会降低并发量
[4]多进程模型,多线程模型,I/O复用,套接字的阻塞和非阻塞,同步和异步
[5]设计服务器的线程处理方式,通过cpu核数设置线程的个数,任务(I/O密集型任务,计算密集型任务)
3.内存分配---->内存池,减少向操作系统中申请内存
[1]项目中用到数据集和类的简易内存池(方便外界管理数据,维护数据的安全性) [2]内存泄露问题处理
4.锁竞争------>通过逻辑尽量减少锁的使用 [1]无锁数据结构(环形模板循环队列,除去线程读写数据锁)
[2]RAII机制管理锁资源,防止死锁发生(effective c++资源管理那张有讲解)
(c++还有两个RTTI机制,PIMPL模式解决文件 包含问题,RAII智能指针)
二.项目优化