2020某大佬字节一面的题目解答

  • 1. 解释Unicode编码是什么?

Unicode是一种字符编码方案,为每种语言中的每个字符都设定了统一的二进制编码,以实现跨语言、跨平台进行文本转换、处理的要求。

延伸:Unicode和UTF-8的区别:

Unicode是一种字符集。

UTF-8是一种编码规则(以8位为一个编码单位的可变长单位编码)。

  • 2. 断点续传的原理?(指通过什么协议实现?)

断点续传是一种结合本地存储和网络存储的技术,主要用来解决网络失效是的视频丢失问题。

原理:1.在http的请求上和一般的下载有所不同

所谓断点续传,就是从文件已经下载的地方开始下载,所以浏览器在传给Web服务器时候要多加一条信息    --“从哪里开始”

在HTTP的请求中--Header中的--Range属性是定意思下载区域。

例如:某HTTP请求:表示从2000070字节开始传送。

延伸:FTP实现断点续传:

FTP中用get命令拿数据的时候在文件名后面加上要获取的起始位置。

FTP实现断点续传的三个条件:

1.需要FTP服务器支持该功能。

2.支持断点粗穿的下载工具软件。

3.FTP服务器的文件要与下载到硬盘的文件名相同。

 

  • 3.HTTP1.1中pipeline扮演的角色?

对同一个域的多个资源的get请求可以合并在一个socket连接中执行。

延伸(具体化):什么是Pipeline?

通常,HTTP请求是按顺序发出的,只有在完全接收到当前请求的响应之后才会发出下一个请求。根据网络延迟和带宽限制,在服务器看到下一个请求之前,这可能会导致显著的延迟。HTTP/1.1允许多个HTTP请求一起写入一个套接字,而不需要等待相应的响应。然后,请求者等待响应按照请求的顺序到达。对请求进行pipeline操作可以显著提高页面加载时间,特别是在高延迟连接上。pipeline还可以显著减少TCP/IP包的数量。典型的MSS(最大段大小)范围在536到1460字节之间,可以将几个HTTP请求打包到一个TCP/IP包中。减少加载页面所需的包的数量对整个互联网都有好处,因为包的减少自然减少了IP路由器和网络的负担。符合HTTP/1.1标准的服务器需要支持pipeline。这并不意味着需要服务器对响应进行pipeline处理,而是要求服务器在客户端选择pipeline处理请求时不会失败。这显然有可能引入一种新的传播式bug,因为其他流行的web浏览器都没有实现pipeline。

 

  • 4. TCP滑动窗口解决了什么问题?为什么会有滑动窗口出现?滑动窗口出现前网络是如何传输的?滑动窗口基本原理?什么是头阻塞?

解决问题

滑动窗口协议是传输层进行流量控制的一种措施,接收方通过通知发送方自己的窗口大小,从而控制发送方的发送速度,从而达到防止发送方发送速度过快而导致自己被淹没的目的,并且滑动窗口分为接收窗口和发送窗口。TCP的滑动窗口的可靠性是建立在“确认重传”基础上的。发送窗口只有收到对方对于本段发送窗口内字节的ACK确认,才会移动发送窗口的左边界。接受窗口只有在前面所有的段都确认的情况下才会移动左边界。当在前面还有字节未接受但收到后面字节的情况下,窗口不会移动,并不对后续字节确认。以此确保对方会对这些数据重传。

引入滑动窗口的原因及引入前网络如何传输:

  • 在以前,TCP在发送数据的过程中, 以1个段为单位,每发送一个段进行一次确认应答的处理。这样的传输方式有一个缺点,就是包的往返时间越长通信性能就越低。这就是停止等待协议。
  • 为解决这个问题,TCP 引入了窗口这个概念。确认应答不再是以每个分段,而是以更大的单位进行确认,转发时间将会被大幅地缩短。也就是说,发送端主机,在发送了一个段以后不必要一直等待确认应答,而是继续发送。

滑动窗口协议的基本原理就是:

  • 在任意时刻,发送方都维持了一个连续的允许发送的帧的序号,称为发送窗口。

  • 同时,接收方也维持了一个连续的允许接收的帧的序号,称为接收窗口。

  • 发送窗口和接收窗口的序号的上下界不一定要一样,甚至大小也可以不同。不同的滑动窗口协议窗口大小一般不同。

  • 发送方窗口内的序列号代表了那些已经被发送,但是还没有被确认的帧,或者是那些可以被发送的帧。

头阻塞:

TCP头阻塞:TCP数据包是有序传输,中间一个数据包丢失会等待该数据包重传,造成后面的数据包阻塞。

延伸:HTTP头阻塞?

https://www.cnblogs.com/mengff/p/12724641.html

 

  • 5. 进程间通信

进程间通信(IPC,InterProcess Communication)是指在不同进程之间传播或交换信息。

IPC的方式通常有管道(包括无名管道和命名管道)、消息队列、信号量、共享存储、Socket、Streams等。其中 Socket和Streams支持不同主机上的两个进程IPC。

详细:https://www.cnblogs.com/zgq0/p/8780893.html

 

  • 6.Linux统计字符串在文本出现次数的命令,Linux中的sort命令?

统计字符串在文本出现次数的三种命令:

1.单个字符串(可不加引号)

grep -o targetStr filename | wc -l

多个字符串(加引号)

grep -o targetStr_1\|targetStr_2\|targetStr_3…… filename | wc -l

2.awk

awk -v RS="@#$j" '{print gsub(/targetStr/,"&")}' filename

3.awk

awk  '{s+=gsub(/targetStr/,"&")}END{print s}' filename

https://blog.csdn.net/qq544649790/article/details/84202976?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-4.not_use_machine_learn_pai&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-4.not_use_machine_learn_pai

Linux 中sort命令:

用于将文本文件内容以行为单位加以排序

参  数:
  -b   忽略每行前面开始出的空格字符。
  -c   检查文件是否已经按照顺序排序。
  -d   排序时,处理英文字母、数字及空格字符外,忽略其他的字符。
  -f   排序时,将小写字母视为大写字母。
  -i   排序时,除了040至176之间的ASCII字符外,忽略其他的字符。
  -m   将几个排序好的文件进行合并。
  -M   将前面3个字母依照月份的缩写进行排序。
  -n   依照数值的大小排序。
  -o<输出文件>   将排序后的结果存入指定的文件。
  -r   以相反的顺序来排序。
  -t<分隔字符>   指定排序时所用的栏位分隔字符。
  +<起始栏位>-<结束栏位>   以指定的栏位来排序,范围由起始栏位到结束栏位的前一栏位。
  --help   显示帮助。
  --version   显示版本信息
  • 7. GitHub中merge 和 rebase的区别?

merge操作会生成一个新的节点,之前的提交分开显示。而rebase操作不会生成新的节点,是将两个分支融合成一个线性的提交。

  • 8.什么是幻读,什么是不可重复读,RR隔离级别会不会出现幻读,各个隔离级别分别可以解决什么问题?

幻读:

一个事务在前后两次查询同一个范围的时候,第二次读取到了其他事务新插入的行。

(解决:在 MySQL InnoDB 中,Repeatable Read 隔离级别不存在幻读问题,对于快照读,InnoDB 使用 MVCC 解决幻读,对于当前读,InnoDB 通过 gap locks 或 next-key locks 解决幻读。)

不可重复读:

在一个事务中多次读取同一个数据时,结果出现不一致。   (解决:在 MySQL InnoDB 中,Repeatable Read 隔离级别使用 MVCC 来解决不可重复读问题。)

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值