当前位置: 首页 > ops >正文

字节跳动-后台开发岗 面经

字节跳动一面

  • 算法题:手写 LeetCode 146.LRU缓存
  • 项目介绍,如何设计实现的?
  • 场景题:字节的用户账号功能,量级很大(几十万几百万的请求量),注册的时候会写db,单用户每天可能编辑,通过uid去获取用户信息的接口,用缓存去提高访问速率,并且保证数据库和缓存的数据是一致的。参考:如何保障 MySQL 和 Redis 的数据一致性?- 缓存双删策略:先删除Redis,再写 MySQL,再删除 Redis
    • kafka的写入是有序的,那么消费者的消费可以保证有序吗?
    • 系统的容灾手段,异地容灾原理是什么?
  • MySQL的主从同步机制有哪些?异步复制、半同步复制、全同步复制 ???(这里我不确定是不是这个答案)
    • MySQL主从的切换机制,主从同步原理,使用mysqlbinlog工具解析binlog,根据时间点去找同步位点position
  • TCP中的sync攻击原理,如何定位,如何解决?
    • 危害:占满半连接队列;服务端每次重发时都要轮询比较未完成连接队列,占用服务端资源
    • 定位:netstat -anp | grep SYN_RCVD,且大多数的服务端连接状态都是SYN_RCVD
    • 解决:过滤网关防护、增加半连接队列大小及延长超时时间、黑名单(攻击量小)
  • TCP报文头结构,如何基于udp来实现tcp,就是udp需要加入哪些头部字段来实现tcp的功能?
    • 需要以下字段:32位序号(序号重组)、32位确认序号(ack)、16位滑动窗口大小(流量控制)、6位标识位、16位紧急指针
    • 补充:tcp在udp的基础上多了哪些机制:序号重组、超时重传、拥塞控制、流量控制

首先要知道tcp头部有哪些字段:
在这里插入图片描述
其次是udp头部有哪些字段:
在这里插入图片描述

16位源端口号和目的端口号:标识了发送方和接收方的进程标识;

  • 32位序号:表示数据报文的编号。应用层要发送一段应用数据,当传送到传输层后,如果应用数据大小超过MSS(最大报文段长度)时,就会对应用层数据字节流从头到尾按顺序进行编号,然后再切分为一个个MSS大小的TCP报文段,每个报文段的序号字段就是该分段的第一个字节的序号
  • 32位确认序号:表示希望对端发送的下一个报文段的序号。由于TCP是一种全双工的通讯协议,即发送方既发送数据也可能接收对端发送的数据,如源主机发送0-1000编号的字节段给目的主机,这时目的主机就会发送一个响应报文且确认序号为1001,表示希望收到下一个报文段编号为1001的数据,它和序号字段共同保证了TCP报文的可靠性;
  • 4位首部长度:表示TCP报文首部的长度,该字段以4字节为单位。TCP首部的长度是可变的,在特殊情况下选项字段会有值,也计入首部长度,但一般情况下选项都会为空,这样首部长度就是20个字节,因此该字段的数值就为5,用4位二进制表示就是0101;
  • 6位保留位:未用到,可能以后TCP版本升级会被征用;
  • 6位标志位:其中SYN用于TCP连接的建立,FIN用于连接的关闭,RST是重新连接,ACK表示对发送方数据的确认,和确认序号结合使用;PSH标识⽴刻将数据交给上层处理;URG标识数据中需要被上层处理的紧急数据,而紧急数据部分是通过紧急指针字段来标识哪一段属于紧急数据;
  • 16位滑动窗口大小:用于标识自己能接受的最大报文数,用于控制TCP连接的数据流量
  • 16位校验和字段:用于接收端验证数据包的准确性,防止中途被篡改,这也是保证了TCP的可靠性
  • 客户端上报到服务端的信息(比如mac地址)被黑客抓包拦截并绕过篡改,如何避免?
  • https加密原理及过程?https是如何防止中间人劫持的(如果服务端在向客户端下发CA证书时,被黑客替换成了自己恶意的CA证书,就形成了中间人攻击了)?
  • 参考:HTTPS原理和防范中间人攻击
  • 这里插一个我想了很久的但其实答案很简单的问题:既然证书是公开的,如果要发起中间人攻击,我在官网上下载一份证书作为我的服务器证书,那客户端肯定会认同这个证书是合法的,如何避免这种证书冒用的情况?
      其实这就是非加密对称中公私钥的用处,虽然中间人可以得到证书,但私钥是无法获取的,一份公钥是不可能推算出其对应的私钥,中间人即使拿到证书也无法伪装成合法服务端,因为无法对客户端传入的加密数据进行解密。
  • 两亿个数,500M内存,返回其中最小的数(利用位图),可参考文章:利用bitmap处理海量数据问题:43亿QQ号所占内存大小为什么是512M?40亿个QQ号如何去重?
    • 200000000/8/1024/1024 = 23.84M
http://www.xdnf.cn/news/11373.html

相关文章:

  • Model、Map、ModelAndView、HttpServletRequest区别
  • 更好的Java虚拟机Zing: 更好的性能,无停顿,更快的启动
  • 腾讯云 AI 代码助手保姆级使用教程
  • Sql-server 2008的安装
  • fdsfds
  • Git克隆操作
  • 【抓包工具】HttpWatch(功能详细介绍)
  • PulseAudio 设计和实现浅析
  • APB协议解读及历代协议对比
  • System.currentTimeMillis()用法以及计算方式
  • 医学案例|配对样本t检验
  • Java IO流操作(FileInputStream、ByteArrayInputStream、ObjectInputStream)
  • flash 小游戏大全
  • Android studio ListView应用设计
  • Linux修改文件名的三种方法分享
  • 虚拟局域网技术
  • LT9211 单路LVDS转双路LVDS,成熟方案,提供技术支持
  • jQuery-ui插件datepicker的参数使用详解
  • 请你记住这3款国产软件,免费又实用,它们值得收藏
  • 数据结构--抽象数据类型三元组Triplet的表示和实现
  • 网络安全行业名词_失陷主机(1)
  • DBeaver工具-虚谷数据库各级备份恢复
  • 宝塔 Linux centos Workerman换域名步骤
  • Java基础知识自学指南(一)Java快速入门
  • gentoo基本安装过程
  • 51单片机之逻辑运算指令ANL、ORL、XRL等
  • Android开发基础——ListView
  • 73种网页常用js代码
  • ico图标和制作网站(比特虫)
  • 太阳 仰角和方位角(Elevation and Azimuth)