1.JavaScript中有哪些数据类型?
基本类型主要为以下6种:
- Number
- String
- Boolean
- Undefined
- null
- symbol
复杂类型统称为
Object,包括下面三种: - Object
- Array
- Function
2.浏览器是如何对 HTML5 的离线储存资源进行管理和加载?
html5离线存储有两种:
1、localstorage(本地存储),通常用于静态资源(静态页面)的缓存;
2、Application Cache(应用程序缓存),通常用于AJAX请求缓存,存储非关键性AJAX数据。
在线时,浏览器发现html头部有mainfest属性,它会请求mainfest文件,如果是第一次访问页面,那么浏览器就会根据mainfest文件的内容下载相应的资源并且进行离线存储,如果已经访问过页面并且资源已经进行离线存储了,浏览器就会使用离线的资源加载页面,然后浏览器就会对比新的mainfest文件与旧的mainfest文件,如果文件没有发生改变,就不进行任何操作,如果发了改变,就会重新下载文件中的资源并进行离线存储。
离线时,浏览器会直接使用离线存储的资源。
3.cookie、local Storage、Session Storage的区别?
Cookie,类型为「小型文本文件」,指某些网站为了辨别用户身份而储存在用户本地终端上的数据。是为了解决HTTP无状态导致的问题。- 作为一段一般不超过 4KB 的小型文本数据,它由一个名称(Name)、一个值(Value)和其它几个用于控制
cookie有效期、安全性、使用范围的可选属性组成。 - 但是
cookie在每次请求中都会被发送,如果不使用HTTPS并对其加密,其保存的信息很容易被窃取,导致安全风险。举个例子,在一些使用cookie保持登录态的网站上,如果cookie被窃取,他人很容易利用你的cookie来假扮成你登录网站
- 生命周期:持久化的本地存储,除非主动删除数据,否则数据是永远不会过期的
- 存储的信息在同一域中是共享的
- 当本页操作(新增、修改、删除)了
localStorage的时候,本页面不会触发storage事件,但是别的页面会触发storage事件。 - 大小:5M(跟浏览器厂商有关系)
localStorage本质上是对字符串的读取,如果存储内容多的话会消耗内存空间,会导致页面变卡- 受同源策略的限制
localStorage也不是完美的,它有两个缺点:无法像Cookie一样设置过期时间, 只能存入字符串,无法直接存对象
sessionStorage和 localStorage使用方法基本一致,唯一不同的是生命周期,一旦页面(会话)关闭,sessionStorage 将会删除数据
4. js中如何创建对象的?
这个博主总结挺好,推荐 JS创建对象的几种方法 - 掘金 (juejin.cn)
5.get和post请求区别
GET 用于获取信息,是无副作用的,是幂等的,且可缓存
POST 用于修改[服务器]上的数据,有副作用,非幂等,不可缓存
最直观的区别就是GET把参数包含在URL中,POST通过request body传递参数。
GET和POST本质上就是TCP链接,并无差别。但是由于HTTP的规定和浏览器/服务器的限制,导致他们在应用过程中体现出一些不同。
GET和POST还有一个重大区别,简单的说:
GET产生一个TCP数据包;POST产生两个TCP数据包。
总的来说:对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。
6.在加载一个网页时,如果特别慢可能会是什么原因
前端页面卡顿的原因有很多,从渲染机制和运行上可以分为两大类,分别是:
- 渲染不及时,页面掉帧
- 网页内存占用过高,运行卡顿
两种类型又可细分如下:
渲染不及时,页面掉帧
长时间占用js线程
页面回流和重绘较多
资源加载阻塞
内存过大导致的页面卡顿
内存泄漏导致内存过大
- 意外的全局变量引起的内存泄漏
- 闭包引起的内存泄漏
- 被遗忘的定时器
- 循环引用
- DOM删除时没有解绑事件
- 没有清理的DOM元素引用
dom节点或事件占用内存过大
7.有哪些性能优化的方法?
前端必知-性能优化的七大手段 - 掘金 (juejin.cn)
8.了解一些常见的网络攻击吗?介绍一下他们以及他们有哪些防御措施
- XSS
XSS,Cross-site script,跨站脚本攻击。是一种网站应用程序的安全漏洞攻击,是代码注入的一种。它允许恶意用户将代码注入到网页上,其他用户在观看网页时就会受到影响。这类攻击通常包含了HTML以及用户端脚本语言。
它可以分为两类:反射型和持久型。
- 反射型XSS攻击场景:用户点击嵌入恶意脚本的链接,攻击者可以获取用户的cookie信息或密码等重要信息,进行恶性操作。
解决:开启cookie的HttpOnly属性,禁止JavaScript脚本读取cookie信息。 - 持久型XSS攻击场景:攻击者提交含有恶意脚本的请求(通常使用
<script>标签),此脚本被保存在数据库中。用户再次浏览页面,包含恶意脚本的页面会自动执行脚本,从而达到攻击效果。这种攻击常见于论坛,博客等应用中。
解决:前端提交请求时,转义<为<,转义>为>;或者后台存储数据时进行特殊字符转义。
建议后台处理,因为攻击者可以绕过前端页面,直接模拟请求,提交恶意
- SQL注入
攻击者在HTTP请求中注入恶意SQL命令,例如,drop table users,服务器用请求参数构造数据库SQL命令时,恶意SQL被执行。
解决:后台处理,例如,使用预编译语句PreparedStatement进行预处理。
- CSRF
CSRF,Cross-site request forgery,跨站请求伪造。这种方式是利用浏览器的cookie或服务器的session策略,盗取用户信息,模拟用户向第三方网站发送恶意请求。
CSRF比XSS更具危险性。想要深入理解CSRF的攻击特性我们有必要了解一下网站session的工作原理。
我们知道http请求是无状态的,也就是说每次http请求都是独立的无关之前的操作的,但是每次http请求都会将本域下的所有cookie作为http请求头的一部分发送给服务端,所以服务端就根据请求中的cookie存放的sessionid去session对象中找到该用户数据。
9.跨域问题都有哪些解决方案
cloud.tencent.com/developer/a…
10、var let和const区别
11、有没有自己做过组件
12、vue组件通信
13、前端性能优化
14、和缓存相关的状态码
HTTP之缓存状态码是200还是304 - web开发 - 亿速云 (yisu.com)
16.三次握手四次挥手
16.vuex
每一个 Vuex 应用的核心就是 store(仓库)。“store”基本上就是一个容器,它包含着你的应用中大部分的状态 (state) 。Vuex 和单纯的全局对象有以下两点不同:
- Vuex 的状态存储是响应式的。当 Vue 组件从 store 中读取状态的时候,若 store 中的状态发生变化,那么相应的组件也会相应地得到高效更新。
- 你不能直接改变 store 中的状态。改变 store 中的状态的唯一途径就是显式地提交 (commit) mutation。这样使得我们可以方便地跟踪每一个状态的变化,从而让我们能够实现一些工具帮助我们更好地了解我们的应用。
17.三栏布局如何实现
实现三栏布局中间自适应的布局方式有:
- 两边使用 float,中间使用 margin
- 两边使用 absolute,中间使用 margin
- 两边使用 float 和负 margin
- display: table 实现
- flex实现
- grid网格布局
18.状态码熟悉吗
http状态码的作用是服务器告诉客户端当前请求响应的状态,通过状态码就能判断和分析服务器的运行状态。
- 1 表示消息
- 2 表示成功
- 3 表示重定向
- 4 表示请求错误
- 5 表示服务器错误
下面给出一些状态码的适用场景:
- 100:客户端在发送POST数据给服务器前,征询服务器情况,看服务器是否处理POST的数据,如果不处理,客户端则不上传POST数据,如果处理,则POST上传数据。常用于POST大数据传输
- 206:一般用来做断点续传,或者是视频文件等大文件的加载
- 301:永久重定向会缓存。新域名替换旧域名,旧的域名不再使用时,用户访问旧域名时用301就重定向到新的域名
- 302:临时重定向不会缓存,常用 于未登陆的用户访问用户中心重定向到登录页面
- 304:协商缓存,告诉客户端有缓存,直接使用缓存中的数据,返回页面的只有头部信息,是没有内容部分
- 400:参数有误,请求无法被服务器识别
- 403:告诉客户端进制访问该站点或者资源,如在外网环境下,然后访问只有内网IP才能访问的时候则返回
- 404:服务器找不到资源时,或者服务器拒绝请求又不想说明理由时
- 503:服务器停机维护时,主动用503响应请求或 nginx 设置限速,超过限速,会返回503
- 504:网关超时
19.从输入url地址到页面渲染完成经历了什么过程
简单的分析,从输入 URL到回车后发生的行为如下:
- URL解析
- DNS 查询
- TCP 连接
- HTTP 请求
- 响应请求
- 页面渲染
20.vue中实现对数据的监听(computed watch是否存在缓存中)
computed本质是一个惰性求值的观察者computed watcher。其内部通过this.dirty属性标记计算属性是否需要重新求值。
- 当 computed 的依赖状态发生改变时,就会通知这个惰性的 watcher,
computed watcher通过this.dep.subs.length判断有没有订阅者, - 有的话,会重新计算,然后对比新旧值,如果变化了,会重新渲染。 (Vue 想确保不仅仅是计算属性依赖的值发生变化,而是当计算属性
最终计算的值发生变化时才会触发渲染 watcher重新渲染,本质上是一种优化。) - 没有的话,仅仅把
this.dirty = true(当计算属性依赖于其他数据时,属性并不会立即重新计算,只有之后其他地方需要读取属性的时候,它才会真正计算,即具备 lazy(懒计算)特性。)
watch没有缓存性,更多的是观察的作用,可以监听某些数据执行回调。当我们需要深度监听对象中的属性时,可以打开deep:true选项,这样便会对对象中的每一项进行监听。这样会带来性能问题,优化的话可以使用字符串形式监听
注意:Watcher : 观察者对象 , 实例分为
渲染 watcher(render watcher),计算属性 watcher(computed watcher),侦听器 watcher(user watcher)三种
21.Linux有没有学过
22.webpack怎么把组件抽离出来
23.对称加密/非对称加密/哈希加密
对称加密算法: 也叫私钥加密算法,其特征是收信方和发信方使用相同的密钥,即加密密钥和解密密钥是相同或等价的。
非对称加密算法: 也叫公钥加密算法。其特征是收信方和发信方使用的密钥互不相同,而且几乎不可能从加密密钥推导解密密钥。
散列算法(签名算法)有:MD5、SHA1、HMAC
用途:主要用于验证,防止信息被修。具体用途如:文件校验、数字签名、鉴权协议
MD5:MD5是一种不可逆的加密算法,目前是最牢靠的加密算法之一,尚没有能够逆运算的程序被开发出来,它对应任何字符串都可以加密成一段唯一的固定长度的代码。
24.了解过java吗?
我回答:了解javase的基础知识,javaee和javaweb学过一点但是忘记了。
25.异步处理的方法
26.axios的用法
axios 是一个轻量的 HTTP客户端,基于 XMLHttpRequest 服务来执行 HTTP 请求,支持丰富的配置,支持 Promise,支持浏览器端和 Node.js 端。
axios框架全称(ajax – I/O – system):
-
基于
promise用于浏览器和node.js的http客户端,因此可以使用Promise API -
不是一种新技术,本质上还是对原生XMLHttpRequest的封装,可用于浏览器和nodejs的HTTP客户端,只不过它是基于Promise的,符合最新的ES规范。具备以下特点:
-
在浏览器中创建XMLHttpRequest请求
-
在node.js中发送http请求
-
支持Promise API
-
拦截请求和响应
-
转换请求和响应数据
-
取消要求
-
自动转换JSON数据
-
客户端支持防止CSRF/XSRF(跨域请求伪造)
www.php.cn/vuejs/49817…