深信服二面
用两个栈实现队列
// 你必须定义一个 `main()` 函数入口。
//前提已知:
struct Stack
{
int top; //栈顶指针
int stacksize;//栈的大小
int *s; //栈底指针
};
void InitStack(Stack *s);
void Push(Stack *s, int k);
int Pop(Stack *s);
int IsStackEmpty(Stack *s);
int IsStackFull(Stack *s);
void EnQueue(Stack *s1, Stack *s2, int k)
{
if (!IsStackFull(s1))
Push(s1, k);
}
int DeQueue(Stack *s1, Stack*s2)
{
int k = 0;
InitStack(s2);
while (!IsStackEmpty(s1))
{
Push(s2, Pop(s1));
}
if (!IsStackEmpty(s2))
k = Pos(s2);
return k;
}
当时考虑的还算快,2分钟就基本想到解决方案了,不过方案有点bug。
正确的方案是,入队,直接入栈s1,出队,先看栈s2是否为空,为空就将s1的元素依次出栈并压入s2,然后将s2的栈顶元素弹出即可。
TCP如何实现可靠传输
计算机网络——TCP如何做到可靠数据传输 - 特务依昂 - 博客园 (cnblogs.com)
基本上分3个点
- 校验和
- 超时重传
- 序列号、确认序列号
局部路径规划算法
主要是我自己说漏嘴了
局部路径规划算法,用到的采样的方案
分为5个步骤
- 采样,获取当前环境信息,和当前机器人位姿(速率、方向)
- 在加速度极限内,得到一个在一小段时间内可以到达速度集合
- 根据这个速度集合,计算出一小段时间内的移动路径
- 基于某种评价标准打分(距离目标点的距离、和障碍物的距离、和全局规划路径的距离等)
- 选择最优路径,将对应速度传给下位机