interview准备工作

怎么判断一个数组为连续数组,采用空间复杂度和时间负责度最小。 for一次就好了

折线图和饼图还有拓扑图组件开发

loadsh deepclone

克隆一个对象

==========================================

js 六种数据类型
number (基本类型——>引用类型)
string (基本类型——>引用类型)
boolean (基本类型——>引用类型)
undefined
null
Object (包装类型、引用类型)

eg:
var str = ‘string’;
console.log(str.length); //6 //str 是基本类型但是在.length 属性时,会去调用其引用类型上的方法。用完后就会把他销毁
str.t = 100;
console.log(str.t);// undefined

js 类型检查

typeof //适合判断基本类型 和 函数类型 number,boolean,string,function; typeof null === “object” 历史原因

instanceof // 判断一个对象常用, 这个是基于原型链的一个判断 obj instanceof Object 做操作数的原型链上是否有右操作数。在不同iframe和window间检测时失效。

Object.prototype.toString
Object.prototyoe.toString.apply(“1”) === “[object String]”
Object.prototyoe.toString.apply(1) === “[object Number]”
Object.prototyoe.toString.apply(true) === “[object Booleab]”
Object.prototyoe.toString.apply([]) === “[object Array]”
Object.prototyoe.toString.apply(function(){}) === “[object Function]”
Object.prototyoe.toString.apply(null) === “[object Null]”
Object.prototyoe.toString.apply(undefined) === “[object Undefined]”
注:IE6/7/8 Object.prototype.toString.apply(null) 返回 “[object Object]”

constructor
constructor是指向这个函数的构造器/构造函数。但是 这个指向是可以被改写的所以不靠谱

duck type (鸭子类型——根据这个需判断类型对象的特征)
eg: 需要判断一个数组,可以通过判断一些方法或者特征,比如push pop 等

环境搭建(一个项目的开发)

重置浏览器样式 normal.css reset.css
兼容移动端 采用rem; base.js //dpr 像素比
base.css 进行兼容各种情况
工具函数tools.js

bridge.js 桥梁 app和前端相互提供方法调用。

页面路由管理 vue-router keep-alive; query,params 两种方式拿传递过来的参数
ajax请求 axios;
组件传值 emit
页面传值 vuex

增强用户体验可以采用 Skeleton(基于Vuejs实现 Skeleton Loading 骨架图)

打包可以采用webpack, 压缩和混淆; //loader scss, 可以审核性能图

=======================

垂直水平居中:1 position: absolute; transform; 2 display: flex;

能拿到请求参数的位置: formData、地址栏Url、请求头header

##js
变量声明 函数声明 都会前置。

函数声明和函数表达式

事件循环机制 eventLoop

声明是无法确定,运行时才能确定。

1、原型和原型链 prototype (显示原型) prototype (隐式原型)
2、this 作用域 闭包
3、异步单线程

this 要在执行时才能确定值,定义时无法确认(“谁调指谁,没有谁调用时指window”)

arr.sort(); // 不行
arr.sort(function(n1, n2) {
return n1 - n2;
})

##es6
let 赋值过了的不能重复赋值 严格模式也可以做到这点
const 给常量赋值
结构赋值
String 和 Array Object Function新增了很多方法。

新增Symbol类型

Set Map

Generator生成器 yaild next
Class 继承
Module 模块化

箭头函数 的区别和作用 https://www.cnblogs.com/biubiuxixiya/p/8610594.html

promise then()
pending、fulfilled、rejected

数组如何去重 https://blog.csdn.net/longlc123/article/details/83792127

##设计模式 https://www.cnblogs.com/smlp/p/9776789.html
单例模式
观察者模式 // 一对多
命令模式 // 一对一
工厂模式

前端页面性能
(1) 加载优化 (减小请求资源大小,减少请求个数) 采用打包工具压缩, 采用模块化, 浏览器请求是有限制的如果同时向一个域名请求最多并行请求5个。可以将资源分开放置到不同域名服务器,如图片放到图片服务器,js css 也可分别放置到不同服务器。
(2) 运行优化 0、html上的优化(尽量采用语义化标签,尽量防止页面重排和重绘),1、css优化 选择器上的优化。能采用id选择的就不采用class选择,性能相差很大。3、减少请求采用缓存。

有ip地址 怎么把 资源下载下来? tcp/ip ???

前端安全

调试功能
全平台调试的Weinre 和Adobe Edge Inspect CC,国人自研的iOS专用工具MIHTool

兼容ie8 及一下:
bind
Object.prototype.toString.apply(null)

《项目经验》

(1).每次发送ajax请求前都会有一个option

答案:
查找原因是浏览器对简单跨域请求和复杂跨域请求的处理区别。

XMLHttpRequest会遵守同源策略(same-origin policy). 也即脚本只能访问相同协议/相同主机名/相同端口的资源, 如果要突破这个限制, 那就是所谓的跨域, 此时需要遵守CORS(Cross-Origin Resource Sharing)机制。

那么, 允许跨域, 不就是服务端设置Access-Control-Allow-Origin: *就可以了吗? 普通的请求才是这样子的, 除此之外, 还一种叫请求叫preflighted request。

preflighted request在发送真正的请求前, 会先发送一个方法为OPTIONS的预请求(preflight request), 用于试探服务端是否能接受真正的请求,如果options获得的回应是拒绝性质的,比如404\403\500等http状态,就会停止post、put等请求的发出。

那么, 什么情况下请求会变成preflighted request呢?

1、请求方法不是GET/HEAD/POST
2、POST请求的Content-Type并非application/x-www-form-urlencoded, multipart/form-data, 或text/plain
3、请求设置了自定义的header字段

你可能感兴趣的:(前端)