滴滴出行 工程框架与算法 秋储实习生面试
2121.6.22 一面 至今没有二面的通知 凉凉!
自我介绍 没问C++基础 没问数据库
聊项目(以下都是项目里的内容 大概40min 全程1h
进程 线程 的区别 优缺点 TCP/IP UDP各自的优缺点 可靠传输 流量控制 拥塞控制 三次握手 四次挥手 为什么不两次握手 time_wait过多会对系统有什么影响
为什么都用进程 不考虑在一个进程下开辟三个线程?
网络通信模型 7层 socket通信
信号量机制的原子性 信号量加 减 恢复 三个过程是如何体现原子性的
共享内存
锁机制 问我的项目里遇到网络通信问题 是如何解决的 开辟两个进程进行单独处理
建立socket通信进行数据包传输时 如果上一个数据包还没来得及接收 下一个就发送了 怎么处理
多进程并发问题 问做过并发相关的开发嘛 如何处理多进程并发执行的问题 如死锁 介绍了死锁 产生死锁的情况 和如何避免死锁
对于项目中的设备为什么选择在局域网下进行 而不是将两部分集成到一个设备上
问我以后的职业规划
做题 20min
Leetcode 25 k个一组反转链表 困难
输入:1-2-3-4-5-6-7-8
输出:3-2-1-6-5-4-7-8
不太会 直接写了最简单的反转链表
然后说了一下刚才那个题的思路
补充一下代码实现:
struct ListNode
{
int val;
ListNode* next;
ListNode(int x):val(x),next(NULL){}
};
class Solution
{
public:
ListNode* reverseKGroup(ListNode* head, int k)
{
ListNode* last = head;//创建一个指针指向每组的第一个节点
for (int i = 0; i < k; i++)//首先遍历这一组的k个节点 查看是不是够k个
{
if (last == NULL)return head;//不够k个直接返回头节点
last = last->next;
}
ListNode* pre = head;//创建pre指针指向头节点
ListNode* cur = head->next;//创建cur指针指向头节点的下一个节点
for (int i = 0; i < k - 1; i++)//对第一组的k个节点进行反转
{
ListNode* temp = cur->next;
cur->next = pre;
pre = cur;
cur = temp;
}
ListNode* next = reverseKGroup(cur, k);//递归进行下一组的反转
head->next = next;
return pre;
}
};
反问
感悟:
滴滴面试体验也是很不错的 面试官是个挺年轻的哥哥 感觉交流起来也没啥障碍 脾气也蛮好的 各种引导 很有耐心
面试内容真的分企业 参加字节两面 项目都没怎么聊 滴滴上来就直接聊项目 就在项目里深挖 问的很详细 必须得好好准备
比较而言 滴滴得一面比字节一面有难度 也是自己对项目的一些细节没了解透吧
继续面 继续干!!



