简述一下你对HTML语义化的理解?
行内元素有哪些?块级元素有哪些? 空(void)元素有那些?
a b span img input select strong
(强调的语气)div ul ol li dl dt dd h1 h2 h3 h4…p
页面导入样式时,使用link和@import有什么区别?
link
属于XHTML
标签,除了加载CSS
外,还能用于定义RSS
,定义rel
连接属性等作用;而@import
是CSS
提供的,只能用于加载CSS
link
会同时被加载,而@import
引用的CSS
会等到页面被加载完再加载import
是CSS2.1
提出的,只在IE5
以上才能被识别,而link
是XHTML
标签,无兼容问题介绍一下你对浏览器内核的理解?
主要分成两部分:渲染引擎(layout engineer
或Rendering Engine
)和JS
引擎
渲染引擎:负责取得网页的内容(HTML、XML、图像等等)、整理讯息(例如加入CSS等),以及计算网页的显示方式,然后会输出至显示器或打印机。浏览器的内核的不同对于网页的语法解释会有不同,所以渲染的效果也不相同。所有网页浏览器、电子邮件客户端以及其它需要编辑、显示网络内容的应用程序都需要内核
JS引擎则:解析和执行javascript来实现网页的动态效果
最开始渲染引擎和JS引擎并没有区分的很明确,后来JS引擎越来越独立,内核就倾向于只指渲染引擎
常见的浏览器内核有哪些?
Trident
内核:IE,MaxThon,TT,The World,360
,搜狗浏览器等。[又称MSHTML]Gecko
内核:Netscape6
及以上版本,FF,MozillaSuite/SeaMonkey
等Presto
内核:Opera7
及以上。 [Opera
内核原为:Presto,现为:Blink
;]Webkit
内核:Safari,Chrome
等。 [ Chrome
的Blink
(WebKit
的分支)]html5有哪些新特性、移除了那些元素?如何处理HTML5新标签的浏览器兼容问题?如何区分 HTML 和 HTML5?
HTML5 现在已经不是 SGML 的子集,主要是关于图像,位置,存储,多任务等功能的增加
移除的元素:
纯表现的元素:basefont,big,center,font, s,strike,tt,u
对可用性产生负面影响的元素:frame,frameset,noframes
支持HTML5新标签:
当然也可以直接使用成熟的框架、比如html5shim
请描述一下 cookies,sessionStorage 和 localStorage 的区别?
cookie是网站为了标示用户身份而储存在用户本地终端(Client Side)上的数据(通常经过加密)
cookie数据始终在同源的http请求中携带(即使不需要),记会在浏览器和服务器间来回传递
sessionStorage
和localStorage
不会自动把数据发给服务器,仅在本地保存
存储大小:
cookie
数据大小不能超过4ksessionStorage
和localStorage
虽然也有存储大小的限制,但比cookie大得多,可以达到5M或更大有期时间:
localStorage
存储持久数据,浏览器关闭后数据不丢失除非主动删除数据sessionStorage
数据在当前浏览器窗口关闭后自动删除cookie
设置的cookie
过期时间之前一直有效,即使窗口或浏览器关闭Label的作用是什么?是怎么用的?
如何实现浏览器内多个标签页之间的通信? (阿里)
前端需要注意哪些SEO
浏览器的渲染机制一般分为以下几个步骤
HTML
并构建 DOM
树。CSS
构建 CSSOM
树。DOM
与 CSSOM
合并成一个渲染树。GPU
绘制,合成图层,显示在屏幕上重绘(Repaint)和回流(Reflow)
回流必定会发生重绘,重绘不一定会引发回流。回流所需的成本比重绘高的多,改变深层次的节点很可能导致父节点的一系列回流
所以以下几个动作可能会导致性能问题:
减少重绘和回流
批量修改DOM
对于复杂动画效果,使用绝对定位让其脱离文档流
css3硬件加速(GPU加速)transform、opacity、filters这些动画不会引起回流重绘
display: none; 与 visibility: hidden; 的区别
display:none
;会让元素完全从渲染树中消失,渲染的时候不占据任何空间;visibility: hidden
;不会让元素从渲染树消失,渲染师元素继续占据空间,只是内容不可见display
通常会造成文档重排。修改visibility
属性只会造成本元素的重绘外边距折叠(collapsing margins)
margin
会合并成一个margin
,叫做外边距折叠。规则如下:
margin
会折叠inline-block
元素或绝对定位元素的margin
不会和垂直方向上的其他元素的margin折叠介绍一下标准的CSS的盒子模型?低版本IE的盒子模型有什么不同的?
CSS优先级算法如何计算?
!important > id > class > tag
important 比 内联优先级高position的值relative和absolute定位原点是?
absolute
fixed (老IE不支持)
relative
static
inherit
sticky
CSS3有哪些新特性?
transform:\scale(0.85,0.90)\ translate(0px,-30px)\ skew(-9deg,0deg)\Animation:
对BFC规范(块级格式化上下文:block formatting context)的理解?
css定义的权重
// 以下是权重的规则:标签的权重为1,class的权重为10,id的权重为100,以下/// 例子是演示各种定义的权重值:
/*权重为1*/
div{
}
/*权重为10*/
.class1{
}
/*权重为100*/
#id1{
}
/*权重为100+1=101*/
#id1 div{
}
/*权重为10+1=11*/
.class1 div{
}
/*权重为10+10+1=21*/
.class1 .class2 div{
}
// 如果权重相同,则最后定义的样式会起作用,但是应该避免这种情况出现
box-sizing 常用的属性有哪些?分别有什么作用?
css垂直居中的方法有哪些?
.vertical {
height: 100px;
line-height: 100px;
}
.container {
position: relative;
}
.vertical {
height: 300px; /*子元素高度*/
position: absolute;
top:50%; /*父元素高度50%*/
margin-top: -150px; /*自身高度一半*/
}
.vertical {
position: absolute;
top:50%; /*父元素高度50%*/
left:50%;
transform:translate(-50%, -50%);
}
.container {
display:flex;
justify-content: center; /*子元素水平居中*/
align-items: center; /*子元素垂直居中*/
}
在CSS样式中常使用 px、em 在表现上有什么区别?
解释下什么是浮动和它的工作原理?
浮动元素引起的问题?
列举几种清除浮动的方式?
介绍使用过的 CSS 预处理器?
CSS优化、提高性能的方法有哪些?
浏览器是怎样解析CSS选择器的?
抽离样式模块怎么写,说出思路?
元素竖向的百分比设定是相对于容器的高度吗?
什么是响应式设计?响应式设计的基本原理是什么?如何兼容低版本的IE?
$(window).resize(function () {
screenRespond();
});
screenRespond();
function screenRespond(){
var screenWidth = $(window).width();
if(screenWidth <= 1800){
$("body").attr("class", "w1800");
}
if(screenWidth <= 1400){
$("body").attr("class", "w1400");
}
if(screenWidth > 1800){
$("body").attr("class", "");
}
}
假设高度默认100px
,请写出三栏布局,其中左栏、右栏各为300px
,中间自适应。
flexbox
。移动开发里经常用到。方法1、浮动:
左侧设置左浮动,右侧设置右浮动即可,中间会自动地自适应。
方法2、绝对定位:
左侧设置为绝对定位,
left:0px
。右侧设置为绝对定位,right:0px
。中间设置为绝对定位,left
和right
都为300px
,即可。中间的宽度会自适应。
使用
article
标签作为容器,包裹左、中、右三个部分。
方法1 和方法2 的代码如下:
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Documenttitle>
<style>
html * {
padding: 0px;
margin: 0px;
}
.layout {
margin-bottom: 150px;
}
.layout article div { /*注意,这里是设置每个小块儿的高度为100px,而不是设置大容器的高度。大容器的高度要符合响应式*/
height: 100px;
}
/* 方法一 start */
.layout.float .left {
float: left;
width: 300px;
background: red;
}
.layout.float .right {
float: right;
width: 300px;
background: blue;
}
.layout.float .center {
background: green;
}
/* 方法一 end */
/* 方法二 start */
.layout.absolute .left-center-right {
position: relative;
}
.layout.absolute .left {
position: absolute;
left: 0;
width: 300px;
background: red;
}
/* 【重要】中间的区域,左侧定位300px,右侧定位为300px,即可完成。宽度会自使用 */
.layout.absolute .center {
position: absolute;
left: 300px;
right: 300px;
background: green;
}
.layout.absolute .right {
position: absolute;
right: 0;
width: 300px;
background: blue;
}
/* 方法二 end */
style>
head>
<body>
<section class="layout float">
<article class="left-right-center">
<div class="left">
我是 left
div>
<div class="right">
我是 right
div>
<div class="center">
浮动解决方案
我是 center
div>
article>
section>
<section class="layout absolute">
<article class="left-center-right">
<div class="left">
我是 left
div>
<div class="right">
我是 right
div>
<div class="center">
<h1>绝对定位解决方案h1>
我是 center
div>
article>
section>
body>
html>
效果如下:
方法3、flexbox布局
将左中右所在的容器设置为
display: flex
,设置两侧的宽度后,然后让中间的flex = 1
,即可。
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Documenttitle>
<style>
html * {
padding: 0;
margin: 0;
}
.layout article div {
height: 100px;
}
.left-center-right {
display: flex;
}
.layout.flex .left {
width: 300px;
background: red;
}
.layout.flex .center {
flex: 1;
background: green;
}
.layout.flex .right {
width: 300px;
background: blue;
}
style>
head>
<body>
<section class="layout flex">
<article class="left-center-right-">
<div class="left">
我是 left
div>
<div class="center">
<h1>flex布局解决方案h1>
我是 center
div>
<div class="right">
我是 right
div>
article>
section>
body>
html>
效果如下:
JavaScript的组成
JS的基本数据类型和引用数据类型
检测浏览器版本版本有哪些方式?
介绍JS有哪些内置对象?
如何最小化重绘(repaint)和回流(reflow)?
需要要对元素进行复杂的操作时,可以先隐藏(display:“none”),操作完成后再显示
需要创建多个DOM节点时,使用DocumentFragment创建完后一次性的加入document
缓存Layout属性值,如:var left = elem.offsetLeft; 这样,多次使用 left 只产生一次回流
尽量避免用table布局(table元素一旦触发回流就会导致table里所有的其它元素回流)
Javascript作用链域?
dom0 dom2 事件绑定区别
obox.onclick =function(){}
obox.addEventListener('click',function(){
},false) ; // 捕获 冒泡?
数据请求
(1) XHR
var xhr = new XMLHttpRequest();
xhr.open('get',"www.aaaa.com",true);//异步
xhr.send();
xhr.onreadystatechange = function(){
//readstate 4
// status 200-300
//200 成功 (有可能强缓存)
// 301 302
// 304 从缓存读取数据。(协商缓存)
// 404 not found
// 500 服务器错误。
}
xhr 可以取消?
xhr.abort();//终止请求。
(2) fetch (w3c)
fetch("url",
{method:"post",body:"",credencial:'include'})
.then(res=>res.json())
.then(res=>{console.log(res)})
// 兼容性问题
// 发出的请求,默认是不带cookie. credencial:'include'
(3) jsonp (解决跨域)
动态创建script src指向没有跨域限制, onload
后端返回的数据格式 一定是, test('["111","222","3333"]');
前端提前定义好 test这个方法,通过形参就拿到数据了。
jsonp 可以做get请求, 无法做post请求(缺点);
jsonp可以取消吗?不能
(4) 跨域?不符合同源策略 (协议 域名 端口号),浏览器阻止的。
cors (跨域资源共享) Access-Control-Allow-Origin:*
nginx
面向对象
(1)构造函数
function Test(name,age){
this.name = name;
this.age =age;
this.getName= function(){
return this.name;
}
}
// Test();
var obj = new Test("kerwin",100);
var obj2 =new Test("xiaoming",18)
(2)原型
//内存只有一份
Test.prototype.getName= function(){
}
//缺点是?
原型容易被覆盖
Array.prototype = {
}
(3)继承
//构造函数继承
function Test2(name,age,location){
// this.name =name;
// this.age =age;
// Test.call(this,name,age);
Test.apply(this,[name,age])
this.location = location;
}
var obj = new Test2();
//原型继承
Test2.prototype =Test.prototype
//Test2.prototype =new Test()
Test2.prototype.constructor =Test2;
//混合继承
(4)原型链
闭包
//1. 函数防抖(搜索查询)
window.onscroll = (function(){
var timer =null;
return function(){
console.log("scroll")
if(timer){
clearTimeout(timer);
}
timer = setTimeout(() => {
console.log("代码执行");
}, 500)
}
})()
// 2. 函数节流(onrize,onscroll)
window.onscroll = (function(){
var date = Date.now();
return function(){
if(Date.now()-date>1000){
date = Date.now();
console.log("代码执行")
}
}
})()
// 3. ul li
var oli = document.getElementsByTagName("li");
for(var i=0;i<oli.length;i++){
oli[i].onclick =(function(index){
return function(){
console.log(index)
}
})(i)
}
数组去重
var arr = [1,2,3,4,3,4];
var myset = new Set(arr);
var mya = Array.from(myset);
webpack babel-loader
1. let const
if(true){
let name ="kerwin"
}
const obj = {name:"kerwin"}
obj.name="xiaoming"
// obj = {name:"xioamng"}
// obj= 'dwadwa'
2. 箭头函数
this指向父作用域的this
3解构
let {type,payload} = data; // {type:"",payload:""}
4 … 展开合并
[...arr1,...arr2]
{...obj1,...obj2}
5.promise
//异步处理方案
1. 回调函数
2. Promise
3. generator 生成器 yield
4. async await
//解决回调地狱 ,嵌套金字塔
function test1(){
return new Promise((resolve,rejet)=>{
setTimeout(() => {
resolve("123")
}, 2000)
})
}
test1().then(res=>{
}).catch(error=>{
})
// pending reject fullfilled
axios.get("1.php").then(res=>{
return axios.get(2.php,{res})
}).then(res=>{
return axios.get(3.php)
}).then(res=>{
console.log(res.data)
}).catch(error=>{
console.log(error)
})
async await 写起来
async function test(){
var a = await axios.get(1);
var b= await axios.get(2,{a});
var c= await axios.get(3,{b})
console.log(c);
}
test()
//所有的异步都结束
Promise.all([axios.get(1),axios.get(2)]).then(res=>{
//loading隐藏
}).catch(error=>{
})
Promise.race([axios.get(1),axios.get(2)])
**6.class (语法糖 => 构造函数,babel-loader) **
class Person{
constructor(name,age) {
this.name = name;
this.age =age;
}
say=()=>{
}
}
class Test extends person{
constructor(name,age,location) {
super(name,age);
this.location = location;
}
compoenntDidMount(){
console.log("修改,会覆盖之前父类的生命周期")
}
say(){
}
}
7.模块化
import obj from "./a" ;
export default aaa;
import {test} from "./b" ;
export {test} ;
export var test =function(){}
AMD - 前端 异步加载 - 提前下载, 提前加载
CMD - 异步加载 - 提前下载 , 按需加载 -- 玉伯
CommonJs -同步加载(webpack)
require("./b")
=>module.exports
=>exports
ES6 - 模块化
//ES6 和 commonJS区别?
//ES6可以导入某几个接口 commonJS 导入整个文件
8.Set解构
不能重复的类似于数组的一个新的结构
9. 字符串模板
`aaaa${name}bbbb`
gulp&webpack
gulp -src=>pipe(scss翻译).pipe(css 合并).pipe(css压缩)=>dist
gulp -src=>pipe(模块化编译).pipe(js压缩)=>dist
流程化
webpack
模块化 默认支持的commonjs规范
所有js模块打包生成一个js文件
编译解析浏览器不能识别的语言 (scss ,.vue, jsx, ts, ES6)
配置?
入口
出口
devserver 启动 自动刷新,热更新, 反向代理
sourcemap-调试代码 .map (地图)
loaders: sass-loader css-loader file-loader babel-loader vue-loader postcss-loader
plugin: 压缩, 提取公共库
svn&git
svn 集中式代码管理
git 分布式代码管理
(1)git pull (同步,更新代码) => git fetch git merge
(2)git add . 暂存区
(3)git commit 提交到本地仓库。
(4)git push origin master:kerwin
代码冲突怎么解决?
两个人修改同一个文件造成
a.js 111111 => github(gitlab, gitee)
a.js 222222 =>失败,提示git pull ,自动合并失败。
手动合并(借助可视化工具 ,小乌龟)
>>>>>>>>>>>>>head>>>>>>>>>>>>>
>>>>>>>>>>>43fdea4wadwad>>>>>>>>
git add. git commit git push 远程仓库就是合并完的代码
git reset
git revert 生成一个新的log记录
jquery:
$.fn === $.prototype = jQuery.prototype
$.fn.kerwin = function(){this.attr("name","kerwin"); return this}
$(".box").kerwin().css().kerwin()
$.extend({
kerwin:function(){
}
})
$.kerwin();
prop vs attr?
$(".box").prop("disbaled",true)
$(".box").attr("myname",2222)
(1)所有同步任务在主线程上执行,形成一个执行栈
(2)主线程之外,还存在一个"任务队列"(task queue)。只要异步任务(setInterval,setTimeout,i/o...)有了结果,就在"任务队列"之中放置一个事件。
(3)一旦"执行栈"中的所有同步任务执行完毕,系统就会读取"任务队列",拿到队列的第一个任务,进入执行栈,开始执行。
(4)主线程不断重复上面的(3)。
主线程从"任务队列"中读取事件,这个过程是循环不断的,所以整个的这种运行机制又称为Event Loop(事件循环)
Promise的出现让问题变复杂了, 它跟setTimeout 优先级? 上面的事件循环解释不够用了。
console.log('script start')
setTimeout(function() {
console.log('timer over')
}, 0)
Promise.resolve().then(function() {
console.log('promise1')
}).then(function() {
console.log('promise2')
})
console.log('script end')
// script start
// script end
// promise1
// promise2
// timer over
所有任务分为宏任务(macrotask )和微任务(microtask ) 两种。
MacroTask(宏任务):* script全部代码、setTimeout、setInterval、I/O、UI Rendering。
MicroTask(微任务):* Process.nextTick(Node独有)、Promise...
在挂起任务时,JS 引擎会将所有任务按照类别分到这两个队列中,首先在 宏任务 的队列中取出第一个任务,执行完毕后取出 微任务 队列中的所有任务顺序执行;之后新的事件循环开始,取宏任务的第一个,周而复始,直至两个队列的任务都取完。
http状态码有那些?分别代表是什么意思?
[
100 Continue 继续,一般在发送post请求时,已发送了http header之后服务端将返回此信息,表示确认,之后发送具体参数信息
200 OK 正常返回信息
201 Created 请求成功并且服务器创建了新的资源
202 Accepted 服务器已接受请求,但尚未处理
301 Moved Permanently 请求的网页已永久移动到新位置。
302 Found 临时性重定向。
303 See Other 临时性重定向,且总是使用 GET 请求新的 URI。
304 Not Modified 自从上次请求后,请求的网页未修改过。
400 Bad Request 服务器无法理解请求的格式,客户端不应当尝试再次使用相同的内容发起请求。
401 Unauthorized 请求未授权。
403 Forbidden 禁止访问。
404 Not Found 找不到如何与 URI 相匹配的资源。
500 Internal Server Error 最常见的服务器端错误。
503 Service Unavailable 服务器端暂时无法处理请求(可能是过载或维护)。
]
一个页面从输入 URL 到页面加载显示完成,这个过程中都发生了什么?
说说TCP传输的三次握手四次挥手策略
为了准确无误地把数据送达目标处,TCP协议采用了三次握手策略。用TCP协议把数据包送出去后,TCP不会对传送 后的情况置之不理,它一定会向对方确认是否成功送达。握手过程中使用了TCP的标志:SYN和ACK
发送端首先发送一个带SYN标志的数据包给对方。接收端收到后,回传一个带有SYN/ACK标志的数据包以示传达确认信息。 最后,发送端再回传一个带ACK标志的数据包,代表“握手”结束。 若在握手过程中某个阶段莫名中断,TCP协议会再次以相同的顺序发送相同的数据包
断开一个TCP连接则需要“四次挥手”:
第一次挥手:主动关闭方发送一个FIN,用来关闭主动方到被动关闭方的数据传送,也就是主动关闭方告诉被动关闭方:我已经不 会再给你发数据了(当然,在fin包之前发送出去的数据,如果没有收到对应的ack确认报文,主动关闭方依然会重发这些数据),但是,此时主动关闭方还可 以接受数据
第二次挥手:被动关闭方收到FIN包后,发送一个ACK给对方,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号)
第三次挥手:被动关闭方发送一个FIN,用来关闭被动关闭方到主动关闭方的数据传送,也就是告诉主动关闭方,我的数据也发送完了,不会再给你发数据了
第四次挥手:主动关闭方收到FIN后,发送一个ACK给被动关闭方,确认序号为收到序号+1,至此,完成四次挥手
TCP和UDP的区别
TCP(Transmission Control Protocol,传输控制协议)是基于连接的协议,也就是说,在正式收发数据前,必须和对方建立可靠的连接。一个TCP连接必须要经过三次“对话”才能建立起来
UDP(User Data Protocol,用户数据报协议)是与TCP相对应的协议。它是面向非连接的协议,它不与对方建立连接,而是直接就把数据包发送过去! UDP适用于一次只传送少量数据、对可靠性要求不高的应用环境
HTTP和HTTPS
为什么HTTPS安全
一个页面从输入 URL 到页面加载显示完成,这个过程中都发生了什么?
CSRF
(Cross-site request forgery
):跨站请求伪造。
PS:中文名一定要记住。英文全称,如果记不住也拉倒。
用户是网站A的注册用户,且登录进去,于是网站A就给用户下发
cookie
。
从上图可以看出,要完成一次
CSRF
攻击,受害者必须满足两个必要的条件:
A
,并在本地生成Cookie
。(如果用户没有登录网站A
,那么网站B
在诱导的时候,请求网站A
的api
接口时,会提示你登录)A
的情况下,访问危险网站B
(其实是利用了网站A
的漏洞)。我们在讲
CSRF
时,一定要把上面的两点说清楚。
温馨提示一下,
cookie
保证了用户可以处于登录状态,但网站B
其实拿不到cookie
。
举个例子,前段时间里,微博网站有个
api
接口有漏洞,导致很多用户的粉丝暴增。
CSRF的防范措施
方法一、Token 验证:(用的最多)
token
;token
。token
不合法,那么服务器拒绝这个请求。方法二:隐藏令牌:
token
隐藏在 http
的 head
头中。方法二和方法一有点像,本质上没有太大区别,只是使用方式上有区别。
方法三、Referer 验证:
Referer
指的是页面请求来源。意思是,只接受本站的请求,服务器才做响应;如果不是,就拦截。
XSS
攻击的核心原理是:不需要你做任何的登录认证,它会通过合法的操作(比如在url
中输入、在评论框中输入),向你的页面注入脚本(可能是js
、hmtl
代码块等)。
最后导致的结果可能是:
Cookie
D-doss
攻击XSS的防范措施主要有三个:
1. 编码:
对用户输入的数据进行
HTML Entity
编码。
如上图所示,把字符转换成 转义字符。
Encode
的作用是将$var
等一些字符进行转化,使得浏览器在最终输出结果上是一样的。
比如说这段代码:
<script>alert(1)script>
若不进行任何处理,则浏览器会执行alert的js操作,实现XSS注入。
进行编码处理之后,L在浏览器中的显示结果就是
,实现了将``$var
作为纯文本进行输出,且不引起J
avaScript`的执行。
2、过滤:
onerror
可以自动触发攻击,还有onclick
等。(总而言是,过滤掉一些不安全的内容)Style
节点、Script
节点、Iframe
节点。(尤其是Script
节点,它可是支持跨域的呀,一定要移除)。3、校正
HTML Entity
进行解码。DOM Parse
转换,校正不配对的DOM
标签。备注:我们应该去了解一下
DOM Parse
这个概念,它的作用是把文本解析成DOM
结构。
比较常用的做法是,通过第一步的编码转成文本,然后第三步转成DOM
对象,然后经过第二步的过滤。
面试官还可能喜欢问二者的区别。
区别一:
CSRF
:需要用户先登录网站A
,获取 cookie
XSS
:不需要登录。区别二:(原理的区别)
CSRF
:是利用网站A
本身的漏洞,去请求网站A
的api
。XSS
:是向网站 A
注入 JS
代码,然后执行 JS
里的代码,篡改网站A
的内容。1. nodejs 创建静态服务器?
http.createServer((req,res)=>{writeHead,write,end}).listen(3000)
2. commonJS规范 vs ES6 模块化规范
> require导入, module.exports 导出
import 导入, export default 导出
区别:import {某个几个接口} from ‘antd’ //webpack (tree shaking 摇树优化)
var myview = require(“antd”) //导入整个接口
3. socket通信 聊天
websocket全双工, 双向通信 onopen onmessage onclose onerror
4. mongoDB 基本操作(增删改查)
5. express 进行项目构建
nodejs一个框架 (express, koa, egg)
6. token(jwt-json web token) 与 session配合cookie (登录,鉴权)
7. MV - mvc mvvm mvp*
vue 分别对应哪一部分?
m=>data状态数据
v=>vue模板
vm=>var vm = new Vue({el:"#box"})
8. vue数据绑定原理
9. vue - 过滤器
数据的格式化,vue.filter()),计算属性(模糊查询, 购物车金额计算),watch (监听路由改变) , 方法
**10.vue生命周期 **
11.vue指令有哪些
**12.vue单文件组件 **
13.slot使用场景 (插槽, 内容分发)
14.vue-cli脚手架 eslint
15.vue路由
16.vuex基本模块-state ,actions,mutations,getters
怎么理解?
workflow?
项目? 非父子通信, 状态快照(缓存数据)
store 内存, 一刷新页面没有
调试, devtools
17.git管理工具
git add., git commit , git push ,git pull(git fetch ,git merge) ,代码冲突, 手动合并
git reset --hard HEAD~10
git checkout -b dev
git merge dev
git 可视化 - vscode , webstorm , submit, 插件, 小乌龟 git ,souceTree
18.Nuxt.js 服务器渲染
首屏加载过慢,提供seo
首屏加载过慢 (路由懒加载)
<!-- import Foo from './Foo' -->
var Foo = ()=>import("./Foo") //webpack code split 代码分割
const router = new VueRouter({
routes: [
{ path: '/foo', component: Foo }
]
})
19 .React class组件, 函数式组件
class App extends Component{
state = {}
render (){
return <div>111</div>
}
}
function App(props){
return <div>111</div>
}
react 函数式组件 hooks (钩住函数组件的状态) , useState,useEffect
20.受控组件&非受控组件?
外部能控制组件内部状态 (属性)
tabbar
swiper
既能受控还能非受控
21.vdom(js对象 模拟dom节点)与diff (同层级对比,key, 同class , 合并操作)
count = 1
setState({count:this.state.count+1})
setState({count:this.state.count+1})
setState({
name:"xiaoming"
},()=>{
//更新到dom, new Swiper
// this.$nextTick Vue
})
setState((prevState)=>{
return {
count:prevState.count+1
}
})
setState((prevState)=>{
return {
count:prevState.count+1
}
})
多次setState
22.setState 之后?React数据更新原理?
23. React按钮绑定事件
<button onClick={()=>{
}}></button>
handleClilck(){
console.log(this)
}
handleClilck = ()=>{
console.log(this)
}
<button onClick={this.handleClick.bind(this)}></button>
事件与原生事件区别? react 是代理到document
24.Ref - (dom =>refdom节点, 组件=>ref组件对象)
ref父子通信
25. 生命周期
老的
新的
26.父子通信以及非父子通信 (context)
props 父传子 this.props.myname
callback 子传父 this.props.event()
27.Redux
redux原理: 订阅发布模式
list = [()=>{},()=>{}]
state = ""
发布
dispatch = function(){
state = reducer(prevstate)
for(var i in list){
list[i]()
}
}
监听
subscribe(()=>{})
异步?
middleWare - redux-thunk redux-promise redux-saga
flux VS react-redux VS redux
- flux 架构思想 15种 (facebook flux(vue 老太太 ), redux )
- redux (vue react, angular)
- react-redux(不用自己监听,connect() 容器组件,自己叫UI组件,Provider组件 )
react-redux原理
(1)高阶组件 HOC 高阶函数
(2) <Provider store={store}/>, context (非父子通信,provider comsumer)
28.Ant-Design
哪些组件? 准备几个
Button (size, type , disabled... )
29.immutable (结构共享)
30.Mobx
redux(普通js对象, state只读,单一store,纯函数) VS mobx(可观察对象,状态可以被修改,多个store. )
Vuex(直接修改状态,actions, get set拦截,学习成本低) VS Redux (不能直接修改状态, middlerware, 自己subsribe, 成本高。)
31.Hybrid开发
-混合 框架? h5plus ,openCamera
-谁打的包? ios android
-接口功能? 换头像 ,定位,摇一摇, 微信支付, 推送,
32.微信JSSDK
写一个网页 在微信种打开, 就可以访问微信提供原生接口硬件调用功能 (token, 签名, 安全域名)
33.小程序开发 wxml js wxss json
props:{
name:String
}
路由拦截=》无token =>登录=》用户名密码post=> 成功=>token存在本地(localstorage.setItem)
react 版本? 16
react-router 4 , 5 just component
vue 版本? 2.6
vue-cli 脚手架 3, 4
(1) 开发前期确定 好 数据格式, 数组或者对象 {list:[]}
(2) 确定请求方式 get post, 参数 page=1 &size=10
(3) 接口写好, 按照约定规则来传数据
page=2&limit=10
{
list:[
{
name:"
},
{
name:"
}
]
}
master dev test, kerwin ,xiaoming , fixedbug1(删掉) fixedbug2(删掉)
多人修改同一个文件导致, 手动合并
- 技术发展路线 ,技术栈
- 技术分享学习
- 什么通知结果?
生成的html代码,页面代码杂乱,代码冗余量较大,不利于后期的优化
https://free.modao.cc/app/ltnSwMXEFqjon7QtRssBgKkPXZmL3os#screen=s6A4B80F6FE1540952810987
UI? 前端?后端?