记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));
 
};
原文地址:https://www.jb51.net/article/137788.htm
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


  


 

posted @ 2019-04-24 16:38  醉清风&雨  阅读(119)  评论(0)    收藏  举报