记4_17面试知识整理
1.谈谈你对Redux的理解?
Redux就是将整个应用状态存到一个称为store的地方,里面保存着一个状态树(tree store),组件可以通过派发(dispatch)行为(action)给store,而不是直接通知其它组件,组件里面通过订阅store中的state来刷新自己的视图。
redux的三大原则:
1、唯一数据源。 2、保持只读状态。 3、数据改变只能通过纯函数执行
redux理解:https://www.cnblogs.com/pan-share/p/7604307.html
react-redux理解:https://www.jianshu.com/p/1a2f3db4af61
2.讲一下开发中遇到的问题?
EX:页面高度塌陷(解决方法)
3.定位元素 (position) 几个值,相对于谁定位
position: static (默认)
position: relative(相对定位) 相对于父级内position:relative进行定位,如果父级没有,则相当于整个文档进行定位
position: absolute(绝对定位) 通常是相对于父级positon: relative进行定位;
position: fixed(绝对定位)相对于浏览器视图进行定位
4.闭包(好处和坏处以及用途)
了解闭包就要了解函数作用域相关知识,首先函数外部可以访问全局变量,但是无法访问函数内部变量,使用闭包就可以在函数内部访问函数内部变量。(在函数内部声明变量的时候,要用var声明,否则就是全局变量)
闭包好处。1可以读取函数内部变量、2可以将变量保存在内存中,不会再函数调用后就被回收。
闭包坏处。滥用闭包可能会导致ie内存泄漏。所以不用的时候要传null
5.jsDOM操作
| write() | 写入内容到文档 |
| getElementById() | 通过id查找 |
| getElementByClass() | 通过类名查找 |
| getElementByTagName() | 通过标签名查找 |
| get/setAttribute('key', 'value') | 获取或设置属性名 |
创建DOM
| document.creatElement() | 创建节点 |
| document.creatTextNode() | 创建文本节点 |
| document.appendChild() | 添加节点 |
| document.removeChild() | 删除节点 |
| document.replaceChild() | 替换节点 |
6.事件冒泡,阻止,事件委托
冒泡就是从小到大事件依次触发。阻止方法是e.stopPropagation(),IE则是使用e.cancelBubble = true
事件委托就是将子组件事件委托给父组件。不必给每个子组件添加相同的事件。
7.js事件
onclick,onMove, onMouseMove, onMouseEnter, onChange, onSelect。。。
8.replace方法
replace() 方法用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串。
replace(str1, str2) // 把匹配到的str1换成str2;
第一个参数是正则时,则进行正则的匹配。
第二个参数如果是函数,则对匹配到的字符串传入函数进行处理。
9.正则
http://www.runoob.com/regexp/regexp-metachar.html
10.数组方法
Arr.indexOf(str) 返回str出现位置,没有则为-1;
Arr.slice() 数组切割,返回一个新数组,一个参数时,从开始位置到结束。两个参数,从开始位置,到结束下标(不包括结束下标);
Arr.push() / Arr.pop() 向数组添加/删除最后一位。(空数组pop会返回undefined)
Arr.shift()/Arr.unshift() 向数组第一位添加/删除元素。
Arr.sort() 数组简单排序。
Arr.reverse()数组翻转
Arr.splice(a,b,c)从数组a开始删b个,再添加c;
Arr.connect(a,b) 数组链接,没有改变原数组,返回一个新的数组。
Arr.join() 将数组链接起来进行修改。
11.promise
翻译:Promise对象用于异步操作,它表示一个尚未完成且预计在未来完成的异步操作。
有三种状态(pending, fulfiled, rejected)执行中,成功,失败
里面两个参数 resolve 函数的作用:在异步操作成功时调用,并将异步操作的结果,作为参数传递出去; 对应.then()
reject 函数的作用:在异步操作失败时调用,并将异步操作报出的错误,作为参数传递出去; 对应.catch()
地址:https://www.cnblogs.com/ainyi/p/8665272.html
12. 跨域
项目开发中跨域
JSONP原理
JSONP的最基本的原理是:动态添加一个<script>标签,而script标签的src属性是没有跨域的限制的。这样说来,这种跨域方式其实与ajax XmlHttpRequest协议无关了。
这样其实"jQuery AJAX跨域问题"就成了个伪命题,jquery $.ajax方法名有误导人之嫌。
如果设为dataType: 'jsonp',这个$.ajax方法就和ajax XmlHttpRequest没什么关系了,取而代之的则是JSONP协议。JSONP是一个非官方的协议,它允许在服务器端集成Script tags返回至客户端,通过javascript callback的形式实现跨域访问。
JSONP即JSON with Padding。由于同源策略的限制,XmlHttpRequest只允许请求当前源(域名、协议、端口)的资源。如果要进行跨域请求, 我们可以通过使用html的script标记来进行跨域请求,并在响应中返回要执行的script代码,其中可以直接使用JSON 传递javascript对象。 这种跨域的通讯方式称为JSONP。
原文地址:https://www.cnblogs.com/nuoyiamy/p/5445895.html
后台开通跨域限制:
普通跨域请求:只服务端设置Access-Control-Allow-Origin即可,前端无须设置
Iframe解决跨域;
优点:
1.程序调入静态页面比较方便;
2.页面和程序分离;
缺点:
1.页面加载比较慢。
2.会阻塞window事件。onload事件在iframe执行完毕后才触发。
13.Http状态码
200 请求已成功,请求所希望的响应头或数据体将随此响应返回。
301 被请求的资源已永久移动到新位置。
302 请求的资源现在临时从不同的 URI 响应请求。
400 1、语义有误,当前请求无法被服务器理解。2、请求参数有误。
401 当前请求需要用户验证。
403 服务器已经理解请求,但是拒绝执行它。
404 请求失败,请求所希望得到的资源未被在服务器上发现。
500 服务器遇到了一个未曾预料的状况,无法完成对请求的处理,会在程序码出错时出现。
501 服务器不支持当前请求所需要的某个功能。无法识别请求的方法。
502 作为网关或者代理工作的服务器尝试执行请求时,从上游服务器接收到无效的响应。
503 由于临时的服务器维护或者过载,服务器当前无法处理请求。
14. less和sass区别
都是基于css的高级语言,其中sass是运行在服务端,需要ruby的环境支持。
sass支持条件语句,less不支持。
变量符号不同,less是@,sass是$;
less有Bootstrap的UI库,里面部分源码就是less写的。
15.webpack 一些常用loader
less, image, css(style-loader、css-loader), 字体(file-loader)
16.antd中常用的组件
tree,输入框,iput,多行文本框(textarea),文件上传(upload), 表格(table), 弹窗(module), 按钮(button)。。。
17.排序方面。
冒泡排序
var bubbleSort = function(arr) { for (var i = 0, len = arr.length; i < len - 1; i++) { for (var j = i + 1; j < len; j++) { if (arr[i] > arr[j]) { var temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } } } return arr;};var quickSort = function(arr) { if (arr.length <= 1) { return arr; } var pivotIndex = Math.floor(arr.length / 2); var pivot = arr.splice(pivotIndex, 1)[0]; var left = []; var right = []; for (var i = 0; i < arr.length; i++) { if (arr[i] < pivot) { left.push(arr[i]); } else { right.push(arr[i]); } } return quickSort(left).concat([pivot], quickSort(right));}; 18:数组去重
// 最简单数组去重法
* 新建一新数组,遍历传入数组,值不在新数组就push进该新数组中
* IE8以下不支持数组的indexOf方法
function uniq(array){
var temp = []; //一个新的临时数组
for(var i = 0; i < array.length; i++){
if(temp.indexOf(array[i]) == -1){
temp.push(array[i]);
}
}
return temp;
}
var aa = [1,2,2,4,9,6,7,5,2,3,5,6,5];
console.log(uniq(aa));
ES6 new Set();
原文地址 : https://segmentfault.com/a/1190000016418021

浙公网安备 33010602011771号