2020.04.15 美团点评一面【前端】
本文最后更新于:2023年2月8日 晚上
其实我投简历投的后端开发岗,但是昨晚面试官联系到我问我可以转前端吗,说前端收到的简历太少了,我恰好最近半个月算是入了点前端的门也就答应了,然后今天面试官也直说了主要考查一些计算机基础知识……
记录一下,下面的内容并不是我的回答,是面试结束后查资料完善的,不过有些内容我个人都觉得有问题,选择性的参考学习吧~
并没有自我介绍。(我打了两三个小时的自我介绍草稿🤐)
一、计算机网络
😳 TCP为什么三次握手?不是两次?
- 因为双方都需要确认对方收到了自己发送的序列号,确认过程最少要进行三次通信。
- 第一次握手:客户端发送网络包,服务端收到了。这样服务端就能得出结论:客户端的发送能力、服务端的接收能力是正常的。
- 第二次握手:服务端发包,客户端收到了。这样客户端就能得出结论:服务端的接收、发送能力,客户端的接收、发送能力是正常的。不过此时服务器并不能确认客户端的接收能力是否正常。
- 第三次握手:客户端发包,服务端收到了。这样服务端就能得出结论:客户端的接收、发送能力正常,服务器自己的发送、接收能力也正常。
- 为了防止已失效的连接请求报文段突然又传送到服务端,产生错误。(究其本质还是请求没有得到确认)
😅 拥塞控制?什么情况下会网络拥塞?
TCP 拥塞控制,指防止过多的数据注入网络,保证网络中的路由器或链路不过载。
😥 怎么实现拥塞控制?
我……我答成流量控制了……
慢开始、拥塞避免、快重传、快恢复
慢开始
拥塞窗口从 cwnd = 1开始指数增长,直到达到慢开始门限 ssthresh
拥塞避免
- 发送端拥塞窗口 cwnd 每经过一个往返时延 RTT 就增加一个 MSS 得大小,使 cwnd 按线性规律缓慢增长。(加法增大)
- 当出现一次超时(网络拥塞)时,令慢开始门限 ssthresh 等于当前 cwnd 的一半。(乘法减小)
快重传
当发送方连续收到3个重复的 ACK 报文时,直接重传对方尚未收到的报文段,不必等待那个报文段设置的重传计时器超时。
快恢复
发送方收到连续三个冗余 ACK 时,执行“乘法减小”算法,把慢开始门限设置为出现拥塞时发送方 cwnd 的一半。
🤐 了解 HTTPS 吗?HTTP 和 HTTPS 的区别?
不知道……还没学到……(🙃我为什么不答一句:HTTPS更安全)
HTTP 一般是明文传输,很容易被攻击者窃取重要信息,鉴于此,HTTPS 应运而生。HTTPS 的全称为 (Hyper Text Transfer Protocol over SecureSocket Layer),全称有点长,HTTPS 和 HTTP 有很大的不同在于 HTTPS 是以安全为目标的 HTTP 通道,在 HTTP 的基础上通过传输加密和身份认证保证了传输过程的安全性。HTTPS 在 HTTP 的基础上增加了 SSL 层,也就是说 HTTPS = HTTP + SSL。
二、数据结构
😉 数组、链表的区别
数组:一次性分配一整块连续的存储空间,可以通过索引直接取到任意元素。需要快速访问数据,较少插入或删除数据,或者大内存空间分配使用数组。
链表:通过指针链式连接,存储空间不连续,要找到某一个元素最好的情况是第一个节点就是该元素,最坏的情况需要遍历整个链表。频繁删除和插入元素使用链表。
😋 栈和队列的区别
- 栈:LIFO,先进后出。限制在栈顶插入元素和删除元素。
- 队列:FIFO,先进先出。限制在队尾插入元素,在队头删除元素。
什么场景可以用到队列?
计算机系统中各种资源的管理,消息缓冲器的管理和广度优先搜索遍历等
😑 堆有了解吗?
堆(heap)也被称为优先队列,队列中允许的操作是 先进先出(FIFO),在队尾插入元素,在队头取出元素。而堆也是一样,在堆底插入元素,在堆顶取出元素。二叉树的衍生,有最小堆最大堆的两个概念,将根节点最大的堆叫做最大堆或大根堆,根节点最小的堆叫做最小堆或小根堆。常见的堆有二叉堆、斐波那契堆等。
😕 树有哪些应用?
AVL树:平衡二叉树之一,应用相对其他数据结构比较少,windows对进程地址空间的管理用到了AVL
红黑树:平衡二叉树,广泛应用在C++STL中,比如map和set,Java的TreeMap
B和B+树:主要用在文件系统以及数据库中做索引等
Trie 树:用在统计和排序大量字符串中,一个典型应用是前缀匹配,比如下面这个很常见的场景,在我们输入时,搜索引擎会给予提示。还有比如IP选路,也是前缀匹配
R树:空间数据库索引
三、操作系统
🥴 计算机存储的最小单位?
计算机数据存储的最小单位是字节Byte,数据传输的最小单位是比特bit。
🤪 RAM和ROM
RAM(Random Access Memory)
随机存取存储器,也叫主存,是与 CPU 直接交换数据的内部存储器。它可以随时读写,而且速度很快,通常作为操作系统或其他正在运行中的程序的临时数据存储介质。RAM工作时可以随时从任何一个指定的地址写入(存入)或读出(取出)信息。它与 ROM 的最大区别是数据的易失性,即一旦断电所存储的数据将随之丢失。RAM 在计算机和数字系统中用来暂时存储程序、数据和中间结果。
ROM (Read Only Memory)
只读存储器是一种半导体存储器,其特性是一旦存储数据就无法改变或删除,且内容不会因为电源关闭而消失。在电子或电脑系统中,通常用以存储不需经常变更的程序或数据。
🤣 机械硬盘和固态硬盘的区别?
- 固态硬盘防震抗摔性好。机械硬盘都是磁碟型的,数据储存在磁碟扇区里;而固态硬盘是使用闪存颗粒制作而成。
- 固态硬盘读写速度快。
- 固态硬盘功耗低。
- 固态硬盘重量轻。
- 固态硬盘无噪音,而机械硬盘由于机械转动有噪音。
- 机械硬盘相对于固态硬盘便宜。
- 机械硬盘一般寿命更长,但由于其机械结构,使用过程中会磨损,所以寿命不一定长于固态硬盘。
😲 删除的数据是怎么找回的?原理是什么?
硬盘在保存文件时,一般会按照“簇”的形式将数据进行保存,至于保存的文件默认会记录在文件分配表中。而硬盘删除文件时,系统也不会把它所存储的文件全部清空,而是将之前在各个分配表中的“簇”标记为空显示。文件分配表里面还有哪个“簇”没有使用,后期所存储的数据也就会存入该簇中。所以在数据重新写入之前,这些删除的文件依然会存在之前所在的“簇”中,直到新数据的写入,覆盖原有数据。
🤕 CPU和GPU的区别?
CPU 内核比较少,而且是串行的,主要做一些常规的操作,如打开文档,打开程序,播放声音等一些有序的工作,擅长一些逻辑运算,有高速缓存,可以提高数据访问的速度。
GPU 则接受来自 CPU 的指令,有大量的内核,而且是并行计算的,所以能够完成大规模的数据运算。
😦 时钟频率和浮点率?
- 时钟频率:每秒运算的次数,通常所说的某某CPU是多少GHz的,而这个多少GHz就是“CPU的主频”。
- 浮点率:FLOPS,每秒浮点运算次数(亦称每秒峰值速度)是每秒所执行的浮点运算次数。
😝 一个汉字几个字节?
- 字节数:2;编码:GB2312
- 字节数:2;编码:GBK
- 字节数:3;编码:UTF-8
- 字节数:4;编码:UTF-16
🤫 Unicode和utf-8的区别?
- Unicode 是「字符集」,UTF-8 是「编码规则」,UTF-8 是 Unicode 的实现方式之一。
- Unicode 的出现是因为世界各地编码方式不一,为了解决不同编码格式导致的乱码问题;UTF-8 采用变长编码的方式,解决 Unicode 过于占用空间的问题。
四、Linux
😎 会使用Linux吗?
答:会使用,但是没有作为开发系统长期使用,有学习过。
😭 Linux和Windows内核上有哪些区别?
其实我觉得下面这些不是“内核”上的区别,似乎还过时了……
- Windows是商业软件,源码保密;Linux开源。
- Windows中安装软件主要是二进制形式;而Linux中一般是源码安装。
- Windows中创建进程使用 WIN32 API 的
CreateProcess
函数;Linux中使用fofk+execv
创建进程 - Windows中可执行文件格式为PE;Linux中为ELF。
- Windows内核有一套固定的 API 且向后兼容;而 Linux 没有固定的内核 API。
- 中断处理方式不同。
- Windows中有注册表这一概念;Linux中所有配置信息都是文件。
参考链接:http://www.wanfangdata.com.cn/details/detail.do?_type=perio&id=jsjywl201206041
五、我的提问
🙏🏻 如果入职会使用到怎样的技术栈?
TS。下来查了下,哦,TypeScript。
🙏🏻 入职后工作内容是什么?
🙏🏻 留用的机会怎样?
一般只要表现不差留用机会都很大。