本文最后更新于:2020年4月15日 晚上

其实我投简历投的后端开发岗,但是昨晚面试官联系到我问我可以转前端吗,说前端收到的简历太少了,我恰好最近半个月算是入了点前端的门也就答应了,然后今天面试官也直说了主要考查一些计算机基础知识……

记录一下,下面的内容并不是我的回答,是面试结束后查资料完善的,不过有些内容我个人都觉得有问题,选择性的参考学习吧~

并没有自我介绍。(我打了两三个小时的自我介绍草稿🤐)

一、计算机网络

😳 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树:空间数据库索引

参考链接:https://sohu.gg/S2cwGU3

三、操作系统

🥴 计算机存储的最小单位?

计算机数据存储的最小单位是字节Byte,数据传输的最小单位是比特bit。

🤪 RAM和ROM

  • RAM(Random Access Memory)

    随机存取存储器,也叫主存,是与 CPU 直接交换数据的内部存储器。它可以随时读写,而且速度很快,通常作为操作系统或其他正在运行中的程序的临时数据存储介质。RAM工作时可以随时从任何一个指定的地址写入(存入)或读出(取出)信息。它与 ROM 的最大区别是数据的易失性,即一旦断电所存储的数据将随之丢失。RAM 在计算机和数字系统中用来暂时存储程序、数据和中间结果。

  • ROM (Read Only Memory)

    只读存储器是一种半导体存储器,其特性是一旦存储数据就无法改变或删除,且内容不会因为电源关闭而消失。在电子或电脑系统中,通常用以存储不需经常变更的程序或数据。

🤣 机械硬盘和固态硬盘的区别?

  • 固态硬盘防震抗摔性好。机械硬盘都是磁碟型的,数据储存在磁碟扇区里;而固态硬盘是使用闪存颗粒制作而成。
  • 固态硬盘读写速度快。
  • 固态硬盘功耗低。
  • 固态硬盘重量轻。
  • 固态硬盘无噪音,而机械硬盘由于机械转动有噪音。
  • 机械硬盘相对于固态硬盘便宜。
  • 机械硬盘一般寿命更长,但由于其机械结构,使用过程中会磨损,所以寿命不一定长于固态硬盘。

百度百科:https://sohu.gg/ffWSA1m

😲 删除的数据是怎么找回的?原理是什么?

硬盘在保存文件时,一般会按照“簇”的形式将数据进行保存,至于保存的文件默认会记录在文件分配表中。而硬盘删除文件时,系统也不会把它所存储的文件全部清空,而是将之前在各个分配表中的“簇”标记为空显示。文件分配表里面还有哪个“簇”没有使用,后期所存储的数据也就会存入该簇中。所以在数据重新写入之前,这些删除的文件依然会存在之前所在的“簇”中,直到新数据的写入,覆盖原有数据。

视频讲解:https://www.bilibili.com/video/av17027659

🤕 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。

🙏🏻 入职后工作内容是什么?

🙏🏻 留用的机会怎样?

一般只要表现不差留用机会都很大。

🙏🏻 培训的情况怎么样?


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!

Leetcode 56.合并区间【C++】 上一篇
Leetcode 355.设计推特【C++】 下一篇