前端实习面试记录 | 11.8

157 阅读6分钟

可线上办公的公司,反馈相当快,感觉前端实习生要掌握的知识范围都问了一遍,前端三件套包括框架,计算机三大件等的。

有哪些块级标签和行内标签

块级标签:
p,ul,li,h1-h6,div,table,header,section,footer

行内标签:
a,i,span,img,label,input

如何实现本地存储

答了localStorage

  • cookie是网站为了标示用户身份而储存在用户本地终端(Client Side)上的数据(通常经过加密)

  • cookie数据始终在同源的http请求中携带(即使不需要),记会在浏览器和服务器间来回传递

  • sessionStoragelocalStorage不会自动把数据发给服务器,仅在本地保存

  • 存储大小:

    • cookie数据大小不能超过4k
    • sessionStoragelocalStorage虽然也有存储大小的限制,但比cookie大得多,可以达到5M或更大
  • 有期时间:

    • localStorage 存储持久数据,浏览器关闭后数据不丢失除非主动删除数据
    • sessionStorage 数据在当前浏览器窗口关闭后自动删除
    • cookie 设置的cookie过期时间之前一直有效,即使窗口或浏览器关闭

CSS的布局方式

float布局,postion布局,flex布局,grid布局

flex布局

image.png

css有哪些选择器

元素选择器:div
id选择器:#id
类选择器:.class
并集选择器:选择器1,选择器2
复合选择器:选择器1选择器2
通配选择器:*
后代元素选择器:祖先元素 后代元素
子元素选择器:父元素>子元素
伪类选择器::hover,:visited
属性选择器:根据元素中的属性或属性值来选取元素
兄弟选择器:选择器1+选择器2

选择器的权重

  • !important规则最重要,大于其它规则
  • 行内样式规则,加1000
  • 对于选择器中给定的各个ID属性值,加100
  • 对于选择器中给定的各个类属性、属性选择器或者伪类选择器,加10
  • 对于选择其中给定的各个元素标签选择器,加1
  • 如果权值一样,则按照样式规则的先后顺序来应用,顺序靠后的覆盖靠前的规则

闭包

  • 闭包就是能够读取其他函数内部变量的函数

  • 闭包是指有权访问另一个函数作用域中变量的函数,创建闭包的最常见的方式就是在一个函数内创建另一个函数,通过另一个函数访问这个函数的局部变量,利用闭包可以突破作用链域

  • 闭包的特性:

    • 函数内再嵌套函数
    • 内部函数可以引用外层的参数和变量
    • 参数和变量不会被垃圾回收机制回收

var , const , let的区别

  • var 声明的范围是函数作用域,let 和 const 声明的范围是块作用域

  • var 声明的变量会被提升到函数作用域的顶部,let 和 const 声明的变量不存在提升,且具有暂时性死区特征

  • var 允许在同一个作用域中重复声明同一个变量,let 和 const 不允许

  • 在全局作用域中使用 var 声明的变量会成为 window 对象的属性,let 和 const 声明的变量则不会

  • const 的行为与 let 基本相同,唯一 一个重要的区别是,使用 const 声明的变量必须进行初始化,且不能被修改

Vue中的key到底有什么用?

  • key是为Vue中的vnode标记的唯一id,通过这个key,我们的diff操作可以更准确、更快速
  • diff算法的过程中,先会进行新旧节点的首尾交叉对比,当无法匹配的时候会用新节点的key与旧节点进行比对,然后超出差异

computed和watch

  • computed:默认computed也是一个watcher具备缓存,只有当依赖的数据变化时才会计算, 当数据没有变化时, 它会读取缓存数据。如果一个数据依赖于其他数据,使用computed
  • watch:每次都需要执行函数。 watch 更适用于数据变化时的异步操作。如果需要在某个数据变化时做一些事情,使用watch。

vue的虚拟dom

所谓的 Virtual DOM 算法。包括几个步骤:

  1.用 JavaScript 对象结构表示 DOM 树的结构;然后用这个树构建一个真正的 DOM 树,插到文档当中;

  2.当状态变更的时候,重新构造一棵新的对象树。然后用新的树和旧的树进行比较,记录两棵树差异;

  3.把2所记录的差异应用到步骤1所构建的真正的DOM树上,视图就更新了。

  Virtual DOM 本质上就是在 JS 和 DOM 之间做了一个缓存。可以类比 CPU 和硬盘,既然硬盘这么慢,我们就在它们之间加个缓存。

  既然 DOM 这么慢,我们就在它们 JS 和 DOM 之间加个缓存。CPU(JS)只操作内存(Virtual DOM),最后的时候再把变更写入硬盘(DOM)。

  所谓的virtual dom,也就是虚拟节点。它通过js的Object对象模拟DOM中的节点,然后再通过特定的render方法将其渲染成真实的DOM节点 dom。diff 则是通过JS层面的计算,返回一个patch对象,即补丁对象,在通过特定的操作解析patch对象,完成页面的重新渲染。

TCP和UDP的区别

UDP协议是面向无连接的,不需要在正式传递数据之前先连接起双方,具有不可靠性:不保证有序且不丢失的将数据传递到对端,并且没有任何控制流量的算法。优点是:相比TCP更轻便高效

http和https的区别

  • http使用明文传输,https则是具有安全性的ssl加密传输协议
  • http不会验证通信放的身份,https会通过数字证书来验证身份
  • https可以保证数据的完整性,防止传输内容被中间人冒充或篡改
  • HTTP 页面响应速度比 HTTPS 快,主要是因为 HTTP 使用 TCP 三次握手建立连接,客户端和服务器需要交换 3 个包,而 HTTPS除了 TCP 的三个包,还要加上 ssl 握手需要的 9 个包,所共12 个包。
  • 除以上外,http和https使用的端口也不同,前者使用80端口,后者使用443端口

进程和线程的区别

进程是操作系统资源分配的最小单元。一个进程拥有的资源有⾃⼰的堆、栈、虚存空间(页表)、文件描述符等信息。 从编程的角度来理解进程,可以把它看作是⼀个类或一个 PCB
(Process Control Block)进程控制块的结构体。
进程是操作系统对一个正在运行的程序的一种抽象,可以把进程看作程序运行的一次运行过程。


线程是操作系统能够进行运算调度的最小单元。它被包含在进程中,是进程中实际运行的单位。一个进程中可以并发多个线程,每个线程执行不同的任务 。
虽然多进程也能实现并发编程,但是线程比进程**更轻量**。

诸如此类....