2019 字节跳动 秋招面试

一面:

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数据包+时间戳/序列号,组装数据时检查)

2.打开一个网页请求资源,TCP连接不止一条

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;
}

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值