一面:
1.TCP与UDP的区别,及应用场景
2.基于UDP实现可靠性传输
3.进程调度算法
4.static的作用
5.输入url后发生了什么
6.简述什么是http协议
7.cookie中包含什么信息
————————————————————————————————————————
1.定义返回最大值的宏(注意()因为参数可能是表达式)
2.给定有序数组,在某个节点进行翻转,形成类似4 5 6 1 2 3 的数组,求中位数。
O(n):遍历出中间峰值节点,直接输出中位数节点即可
O(logn):二分查找峰值节点位置,利用原数组的有序性,翻转后中间点二分出现两种情况:(我们理解以峰值节点为界,分为左区间,右区间)
1)中间节点小于区间最左节点,说明中间节点在右区间,大于最左节点,当前位置为左区间
2)二分缩小范围得到中间节点位置。
确定峰值节点位置输出中位数。
补充:凸型曲线可以用三分解决峰值点定位。
二面:
1.简述TCP相对于UDP的优势,UDP可靠性传输(应用层:UDP数据包+时间戳/序列号,组装数据时检查)
3.互斥锁A与自旋锁B存在资源竞争时(A需要B的资源,B需要A的资源)会发生什么?
4.讲讲自己接触的KV数据库设计方式,B/B+在存储中起到的作用,2-3树的更新数据具体变化。
———————————————————————————————————————————
两位数的素数,若有一位相同两数存在一条边,求任意两点的全部路径。
(这个题真**。打印输出的数据量太大,牛客网直接给我超时。。)
数据量为2^n:以11-31为例:11可以转为13 17 19每个数又可以转为多个数,类似构成了多叉树不断增重,一层层的爆炸式增长,叶子节点为目标点(31)。
1.素数筛。
2.vector建立邻接矩阵/链式前向星建立邻接表存图
3.dfs遍历
附low码:
#include <bits/stdc++.h>
using namespace std;
int prime[105];
vector<int>Prime;
vector<int>Map[105];
vector<int>path;
int vis[105];
void dfs(int x,int y){
if(x == y){
int len=path.size();
for(int i=0;i<len;i++){
printf("%d ",path[i]);
}
printf("\n");
return;
}
int len = Map[x].size();
for(int i=0;i<len;i++){
if(vis[Map[x][i]] == 0){
vis[Map[x][i]]=1;
path.push_back(Map[x][i]);
dfs(Map[x][i],y);
vis[Map[x][i]]=0;
path.pop_back();
}
}
return;
}
int main()
{
memset(prime,0,sizeof prime);
for(int i=2; i<100; i++)
{
if (prime[i] == 0)
{
printf("%d ",i);
if(i>10)
Prime.push_back(i);
for(int j=i+i; j<100; j+=i)
{
prime[j]=1;
}
}
}
int len = Prime.size();
printf("%d\n",len);
for(int i=1;i<len;i++){
for(int j=0;j<i;j++){
if(Prime[i]%10 == Prime[j]%10 || Prime[i]/10 == Prime[j]/10){
Map[Prime[i]].push_back(Prime[j]);
Map[Prime[j]].push_back(Prime[i]);
}
}
}
int x,y;
scanf("%d %d",&x,&y);
memset(vis,0,sizeof vis);
vis[x]=1;
path.push_back(x);
dfs(x,y);
path.pop_back();
vis[x]=0;
}