字节(客户端)

在9月23日上午收到字节教育的感谢信后,下午立刻被抖音捞,字节的大池子我真的爱
之前在面试中屡屡受挫,让我很怀疑自己,甚至都想放弃这次机会,但为了不让自己后悔,在朋友们的鼓励下,还是鼓足勇气去面了。
一面 9.28 50min

  • 自我介绍
  • 项目相关
    1、客户端之间怎么连接?
    2、每个连接都是开不同的端口吗?
    3、连接是基于TCP还是UDP?
  • TCP怎么保证传输可靠性?
  • TCP三次握手、四次挥手
  • HTTP是一种什么样的协议?
  • HTTPS/HTTP区别
  • HTTPS具体怎么实现的?
  • HTTP的报文格式
  • HTTP的请求头部有哪些典型信息?
  • 用户代理信息放在哪里?
  • 程序被编译成可执行文件的过程
  • 链接的过程?主要做了什么?
  • 汇编之后的文件为什么不可执行?
  • 内存空间分配
  • 字符数组
    int main()
    {
    char a[]="abcde";
    return 0;
    }
    a存放在哪里?
    “abcde”放在哪里?
    sizeof(a)=6
    a[1]='a';允许吗?
  • 什么是虚拟内存
  • 博弈论/必胜态/必败态
    200个球,两个人拿,每人每次拿1-5颗,如果轮到拿时,没有球,则输。我先拿,有办法保证我赢吗?
    我赢,保证最后一次拿的在1-5之间;则上一轮剩给你的6个,则我一定会赢;再上上一轮,剩给你12个,则我一定会赢...每次剩给你的是6的倍数,则我一定赢。则第一次我应该拿4颗,剩给你196颗。
  • 手撕:每k个元素翻转单向链表
    如:1 2 4 6 5 7 9 8 1 5,每3个元素翻转
    得:4 2 1 7 5 6 9 8 1 5
    #include <iostream>
    using namespace std;
    struct ListNode
    {
      int val;
      ListNode* next;
      ListNode(int x):val(x),next(NULL) {}
    };
    void swap(ListNode* node1,ListNode* node2)
    {
      int temp=node1->val;
      node1->val=node2->val;
      node2->val=temp;
    }
    void myreverse1(ListNode* head,int k)
    {
      ListNode* temp=head;
      for(int i=0;i<k-1;++i)
      {
          temp=temp->next;
          if(temp==NULL) return;
      }
      swap(head,temp);
    }
    ListNode* myreverse(ListNode* head,int k)
    {
      if(k==0 || k==1 || head==nullptr) return head;
      ListNode* temp=head;
      for(int i=0;i<k-1;++i)
      {
          temp=temp->next;
          if(temp==NULL) return head;
      }
      swap(head,temp);
      myreverse(temp->next,k);
      temp=head->next;
      while((k-1)>0)
      {
          k=k-2;
          myreverse1(temp,k);
          temp=temp->next;
      }
      return head;
    }
    int main() {
      ListNode* head=new ListNode(1);
      ListNode* l2=new ListNode(2);
      head->next=l2;
      ListNode* l3=new ListNode(4);
      l2->next=l3;
      ListNode* l4=new ListNode(6);
      l3->next=l4;
      ListNode* l5=new ListNode(5);
      l4->next=l5;
      ListNode* l6=new ListNode(7);
      l5->next=l6;
      ListNode* l7=new ListNode(9);
      l6->next=l7;
      ListNode* l8=new ListNode(8);
      l7->next=l8;
      ListNode* l9=new ListNode(1);
      l8->next=l9;
      ListNode* l10=new ListNode(5);
      l9->next=l10;
      ListNode* newhead=myreverse(head,3);
      for(auto node=newhead;node!=nullptr;node=node->next)
      {
          cout<<node->val<<" ";
      }
      return 0;
    }

二面 9.29 55min
第一眼看到以为是个严肃的大哥,没想到,并不是......

  • 自我介绍(大哥说感觉我就像背书一样......可能中午刚睡醒,语速比较慢......)
  • 项目相关
    1、智能小车的循迹怎么做的?
    2、困难点在哪里?
    3、火炮身管的核心点是什么?
    二维图片特征提取转换成三维的坐标
    4、仪器需要放在固定位置吗?
    在炮管中是动态变化的
    5、网络这方面为什么用第三方库?
    6、第三方库主要做了什么事情?
    负责连接管理等事情
    7、协议有帮助处理吗?
    TCP是流式的,比如,发送一个hello,显示hello;发送hello world,显示hello world,怎么拆分这两个包?
    自带编解码器
    8、自己会设计类似这样吗?
    9、比如0x00开头,0x00结尾,发送的内容是0x00,怎么处理?
    怎么判断开头和结尾?或者怎么判断0x00是结束还是发送的内容?
    TCP协议报文的前几个字符是做什么用的?
    TCP是怎么发送数据包的?做到有序?
  • 多线程和多进程有什么区别?
  • 一个任务单线程也可以完成,为什么要用多线程?什么情况下用多线程?
    并发,不同线程同时完成不同的操作
  • 多线程快还是单线程快?
  • 计算密集型任务,单线程快还是多线程快?
    单线程
    如果是双核计算机?
  • 锁的原理?怎么实现的?
    怎么做到把两个线程锁起来?体内原理看过吗?(我:???大哥:这个是课本上有的)
  • 结构体
    struct my
    {
    char a;
    short b;
    char c;
    int d;
    char arr[3];
    };
    单字节对齐占多少字节?1+2+1+4+3=11
    4字节对齐:1(1)+2+1(3)+4+3+(1)=16(按小的补齐)
  • 为什么要字节对齐?
  • 什么情况下读两次?为什么读两次?
    回答的点不对。。。
  • TCP/HTTP的区别
  • HTTP/HTTPS区别
  • SSL握手过程
  • 非对称交换的作用是什么?
  • 如果把所有的通信包都拦截下来,可不可以破解他的密钥?
  • 客户端怎么知道里面的内容的(好像是说怎么知道公钥的)?
  • 如果已经拿到公钥,也可以解密吗?怎么保密?
    不可以(然而我说可以。。。)抓到所有的包,也解不开里面所有的内容
  • 数据库用过吗?
  • 有100万人抛硬币,正面为上的时候,记录+1,停止抛;反面为上,记录+1,继续抛,直到出现正面为止。正面和反面记录的比值大概是多少?
    1:1 硬币正反出现的概率是一样的,跟你抛多少次,怎么抛是没有关系的。
  • 手撕:实现一个支持 push, pop操作,并能在常数时间内检索到最大元素的栈
    #include <bits/stdc++.h>
    using namespace std;
    class MaxStack
    {
      public:
      MaxStack() {}
      void push(int x)
      {
          s1.push(x);
          if(s2.empty() || x>=s2.top())
              s2.push(x);
      }
      void pop()
      {
          if(s1.top()==s2.top())
              s2.pop();
          s1.pop();
      }
      int top()
      {
          return s1.top();
      }
      int getmax()
      {
          return s2.top();
      }
      private:
      stack<int> s1,s2;
    };
    int main() {
      MaxStack m;
      m.push(1);
      m.push(7);
      m.push(2);
      int maxx=m.getmax();
      m.pop();
      int i=m.top();
      cout<<"max: "<<maxx<<endl;
      cout<<"top: "<<i<<endl;
      return 0;
    }
  • 智力题(果然,该来的还是会来)
    8个长一样的球,有1个比别的重,最少用天平称几次能找到这个重的球?
    两次。
    第一次取6个,各3个放在两边;
    一边重:取重的中的2个,再称一次;
    一样重:重的在剩下的3个里。
    然后再称一次。
  • 反问
    业务:抖音上游:剪映、轻颜、FACEU

三面 10.13 35min

  • 自我介绍
  • 项目相关
    1、身管膛线是什么样的设备
    2、光是怎么打出来的?相机得到的是什么样的图像?
    3、用到什么样的图像处理?
    4、位置是怎么确定的?
    5、之前学过图像处理吗?
  • 怎么判断一个点在矩形里?
  • 电赛参与的是哪个项目?
  • C++内存管理
  • 数据库用过吗?
  • 聊天服务器带图形用户界面吗?
  • 非阻塞复用的模式是怎么实现的?
  • 手撕:从第一个字符串中去掉第二个字符串中包含的字符
  • 哈希表的实现:哈希函数
  • 进程间通信方式?用过哪个?
  • 用过UDP协议吗?
  • TCP和UDP区别
  • TCP怎么保障可靠性?
  • 自己擅长的点?
  • 可以来实习吗?
  • 反问:业务和加强的方面
    影像产品
    要加强基础
    面完感觉凉透了,面试过程中,可以明显感觉到面试官对我不感兴趣。。。
    心里还是会有些难过,准备了很久,等到今天才面试,但结果却很差劲。可能就是没有缘分吧,我和面试官的重点不是一个重点。我知道自己还有很多不足,但一次面试不能说明什么问题,继续努力就好。
    这可能是这次秋招中最后的一次面试,我也没有遗憾,没有放弃任何一次面试的机会,虽然中间会想要放弃,但还是硬着头皮给自己勇气,坚持了下来。
    路还要继续走,前方一片光明,加油啊,姑娘。
全部评论

相关推荐

点赞 评论 收藏
转发
1 6 评论
分享
牛客网
牛客企业服务