算法

快排

快排是最常见的排序方法之一,这次用 JS 手动实现一下。

快排是典型的“分而治之”,分治法的基本思想是:将原问题分解为若干个规模更小但结构与原问题相似的子问题。递归地解这些子问题,然后将这些子问题的解组合为原问题的解。

利用分治法可将快速排序的分为三步:

  1. 在数据集之中,选择一个元素作为”基准”(pivot)。
  2. 所有小于”基准”的元素,都移到”基准”的左边;所有大于”基准”的元素,都移到”基准”的右边。这个操作称为分区 (partition) 操作,分区操作结束后,基准元素所处的位置就是最终排序后它的位置。
  3. 对”基准”左边和右边的两个子集,不断重复第一步和第二步,直到所有子集只剩下一个元素为止。 ```javascript function jsQuickSort(array) { if (array.length <= 1) {
    1. return array;
    } const pivotIndex = Math.floor(array.length / 2); const pivot = array.splice(pivotIndex, 1)[0]; //从数组中取出我们的”基准”元素 const left = [], right = []; array.forEach(item => {
    1. if (item < pivot) { //left 存放比 pivot 小的元素
    2. left.push(item);
    3. } else { //right 存放大于或等于 pivot 的元素
    4. right.push(item);
    5. }
    }); //至此,我们将数组分成了left和right两个部分 return jsQuickSort(left).concat(pivot, jsQuickSort(right)); //分而治之 }

const arr = [98, 42, 25, 54, 15, 3, 25, 72, 41, 10, 121]; console.log(jsQuickSort(arr)); //输出:[ 3, 10, 15, 25, 25, 41, 42, 54, 72, 98, 121 ]

  1. <a name="F3Q9O"></a>
  2. ### 二叉树
  3. <a name="9932551c"></a>
  4. ## 内存
  5. <a name="ufIiu"></a>
  6. ## react
  7. <a name="1sHC2"></a>
  8. ### state和props相同与区别
  9. props:<br />  <br />  props是一个从外部传进组件的参数,由于React具有单向数据流的特性,所以他的主要作用是从父组件向子组件中传递数据,它是不可改变的,如果想要改变它,只能通过外部组件传入新的props来重新渲染子组件,否则子组件的props和展示形式不会改变,props除了可以传字符串,数字,还可以传递对象,数组甚至是回调函数<br />  <br />state:<br />  <br />  state主要作用是用于组件保存,控制及修改自己的状态,它只能在constructor中初始化,state是可以被改变的,state放改动的一些属性,比如点击选中,再点击取消,类似这种属性就放入带state中,注意:没有state的叫做无状态组件,多用props少用state,多写无状态组件,注意:修改state的值时,必须通过调用[setState](http://zzsffx.1358tv.com/)方法,当我们调用this.setState方法时,React会更新组件的数据状态,并且重新调用render方法<br />  <br />下面来列举一下两者的异同:<br />  <br />  不同点:1.props不可以在组件内部修改,但state可以在组件内部修改<br />  <br />  2.可以从父组件修改自组件的props,而不能从父组件修改自组件的state<br />  <br />  相同点:1.props和state都是导出[HTML](http://www.nmgutop.com/)的原始数据。<br />  <br />  2.props和state都是确定性的,如果我们写的组件为同一props和state的组合生成了不同的输出,那木我们肯定在哪里做错了<br />  <br />  3.props和state都会触发渲染更新<br />  <br />  4.props和[state](http://yaoqikj.com/)都是纯JS对象(用typeof来判断,结果都是object)<br />  <br />  5.可以从父组件得到初始值props和[state](http://www.xianggjtop.com/)的初始值
  10. <a name="kjGAX"></a>
  11. ### link和a的区别
  12. 从最终渲染的DOM来看,这两者都是链接,都是a标签,区别是: Link标签是react-router里实现路由跳转的链接,一般配合Route使用,react-router接下了其默认的链接跳转行为,区别于传统的页面跳转,Link标签的"跳转"行为只会触发相匹配的Route对应的页面内容更新,而不会刷新整个页面
  13. > Link标签做的三件事情:
  14. > - 1.有onclick那就执行onclick
  15. > - 2.click的时候阻止a标签默认事件
  16. > - 3.根据跳转href(即使是to),用history(web前端路由两种方式之一,history&hash)跳转,此时只是链接变了,并没有刷新页面
  17. 而[标签就是普通的超链接了,用于从当前页面跳转到href指向的里一个页面(非锚点情况)]()<br />
  18. <a name="bff685f6"></a>
  19. ### [a标签默认事件禁掉之后做了什么才实现了跳转?]()

let domArr=document.getElementByTagName(‘a’); […domArr].forEach(item=>{ item.addEventListener(‘click’,function(){ location.href=this.href }) }) ```

元素居中

localstorage 设置过期

usereffect

问webpack搭建脚手架

redux的使用和原理

简单说说promise

简单说下hook