1.高阶组件是什么?你设计这么一个水印组件,为什么用高阶组件。组件设计思路。
2.说一下水印组件的业务场景。如果有人要在控制台里通过删除dom的方式去除水印,怎么防范?(监听键盘事件F12禁止打开控制台假设用户在控制台中通过disable js来禁用js,监听事件无效了,又该怎么防范?(说了一下思路,比如点击disable js这个动作本身是可以监听到的,那么可以监听这个动作并且拦截,然后可以做一些自定义的操作,比如直接关闭掉页面)
3.Dvajs和umijs区别。
4.Dvajs中redux用处(展开聊聊状态管理的必要性和合理使用不滥用的思考)
5.React和redux是独立的,怎么关联起来使用(react-redux中的connect和provider作用)
6.react-redux的性能问题(?)
7.this指向问题(箭头函数定义时确定,普通函数执行时确定)
class Student {
constructor(name) {
this.name = 'Tom'
}
getInfo() {
return {
name: 'Jerry',
getName() {
return this.name
}
}
}
}
let s = new Student()
console.log(s.getInfo().getName()) // Jerry
// 如何打印出Tom,只能修改class中代码(箭头函数,展开说一下this指向的问题)
8.obj实例化,修改属性和重新实例化的指针问题
function changeObjProperty(o) {
o.siteUrl= 'http://a.com'
o = new Object()
o.siteUrl = 'http://b.com'
}
let s = new Object()
changeObjProperty(s)
console.log(s.siteUrl)
9.0.1 + 0.2 !== 0.3(精度丢失问题:IEEE 754。如何解决?比如按小数点拆分整数部分与小数部分,分别按位相加,注意进位处理。)
10.简述一下SPA与前端路由(扩展讲一下ajax -> pjax -> history api的pushState, popState, replaceState。浏览器url的出栈入栈与这些api的关系,路由映射管理与组件渲染。)
11.编码:
/*
实现一个randomString函数,返回一个数组,该数组内有一千个字符串,每串字符串为6位数0-9的随机验证码,不可重复。
*/
function randomString() {
const resArr = [];
const tempResMap = {}
for(let i = 0;i < 1000;i++) {
judgeCode(resArr, tempResMap)
}
return resArr;
}
function judgeCode(resArr, tempResMap) {
let code = renderCode()
if(tempResMap[code]) {
judgeCode(resArr, tempResMap)
}
tempResMap[code] = true
resArr.push(code)
return resArr
}
function renderCode() {
let temp = []
for(let i = 0 ;i < 6;i++) {
let single = parseInt(Math.random()*10)
temp.push(single)
}
return temp.join('')
}
console.log(randomString())
12.编码:
/*
实现一个sum函数,接收一个arr,累加arr的项,只能使用add方法,该方法接收两个数,模拟异步请求后端返回一个相加后的值
*/
function add(a,b) {
return Promise.resolve(a+b)
}
function sum(arr) {
// 思路可以二分,切成两部分beforeSum, afterSum。
}
/*
变种:如果后端设置了并发限制,一次不能请求超过三个,怎么办?
*/
感谢分享 赞一个
感谢分享 赞一个