12月13号-12月18号:排序算法、VUE生命周期详解、关于断点续传和秒传上传、js图片懒加载实现、微信分享链接变成了网址形式问题、Boostate

一、排序算法

1.冒泡排序
性能差,每一次遍历 都从后往前进行比较, 相邻的两两比较大小,小的向前浮动 时间复杂度 O(n2)

function bubbleSort(target) {
  let temp = null
  for (let i = 0; i < target.length - 1; i++) {
    for (let j = target.length - 1; j > i; j--) {
            if (target[j] < target[j - 1]) {
              temp = target[j]
                target[j] = target[j - 1]
                target[j - 1] = temp
              }
        }
        console.log(`${i + 1} 次排序`)
      }

  return target
}
console.log(bubbleSort([23, 32, 5, 72, 12, 1]))

2.插入排序
1.拿第二个数跟前面的数对比,比前面小就交互一下,依次类推
https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/48ae60ce7afa462e84efca1a042a7fc2~tplv-k3u1fbpfcp-watermark.awebp

Array.prototype.insert = function () {
  console.log(this.length);
  for (let i = 1; i < this.length; i++) {
    let j = i
    while (j > 0) {
      let temp = this[j]
      if (temp < this[j - 1]) {
        temp = this[j - 1]
        this[j - 1] = this[j]
        this[j] = temp
      }
      j = j - 1
    }
  }
}

let arr = [5, 4, 3, 1, 2]
arr.insert()

3.归并排序
排序一个数组,我们先把数组从中间分成前后两部分,然后对前后两部分分别排序,再将排好序的两部分合并在一起,这样整个数组就都有序了。
归并排序采用的是分治思想。
分治,顾名思义,就是分而治之,将一个大问题分解成小的子问题来解决。小的子问题解决了,大问题也就解决了。
在这里插入图片描述

const mergeSort = arr => {
  //采用自上而下的递归方法
  const len = arr.length;
  if (len < 2) {
    return arr;
  }
  // length >> 1 和 Math.floor(len / 2) 等价
  let middle = Math.floor(len / 2),
  left = arr.slice(0, middle),
  right = arr.slice(middle); // 拆分为两个子数组
  return merge(mergeSort(left), mergeSort(right));
};
  
  const merge = (left, right) => {
    const result = [];
    
    while (left.length && right.length) {
    // 注意: 判断的条件是小于或等于,如果只是小于,那么排序将不稳定.
      if (left[0] <= right[0]) {
        result.push(left.shift());
      } else {
        result.push(right.shift());
      }
    }
    
    while (left.length) result.push(left.shift());
    
    while (right.length) result.push(right.shift());
    
    return result;
};
console.log('mergeSort([34,3,123,22])',mergeSort([34,3,123,22]));

4.快速排序
快速排序的特点就是快,而且效率高
在这里插入图片描述

let quickSort = (arr) => {
  if (arr.length < 2) return arr;
  let pointV = arr[arr.length - 1];
  let left = arr.filter(
    (v, i) => v <= pointV && i !== arr.length - 1
  );
  let right = arr.filter((v, i) => v > pointV);
  return [
    ...quickSort(left),
    pointV,
    ...quickSort(right)
  ];
};

二、VUE生命周期详解

初始化过程:设置数据监听、编译模板、将实例挂载到 DOM
beforeCreate:实例刚在内存中创建出来,还没有初始化 data和 methods,只包含一些自带额生命周期函数
created: 实例已经在内存中创建完成,此时data和methods已经创建完成
beforeMount: 此时已经完成了模版的编译,只是还没有渲染到界面中去
mounted: 模版已经渲染到了浏览器,创建阶段结束,即将进入运行阶段

更新数据:
beforeUpdate: 界面中的数据还是旧的,但是data数据已经更新,
updated: 页面重新渲染完毕,页面中的数据和data保持一致

销毁过程:
beforeDestroy: 执行该方法的时候,Vue的生命周期已经进入销毁阶段,但是实例上的各种数据还出于可用状态
destroyed: 组件已经全部销毁,Vue实例已经被销毁,Vue中的任何数据都不可用
在这里插入图片描述

三、计算属性 vs 方法 vs 侦听属性

设计它们的初衷是用于简单运算的,在模板中放入太多的逻辑会让模板过重且难以维护,
1.计算属性缓存 vs 方法
计算属性是基于它们的响应式依赖进行缓存的,这就意味着只要 依赖 还没有发生改变,多次访问 计算属性会立即返回之前的计算结果,而不必再次执行函数。
2.计算属性 vs 侦听属性
1.计算属性是用这个属性名并依赖发生改变了才重新计算,侦听属性是侦听的某个依赖,有保留新旧值,当需要在数据变化时执行异步或开销较大的操作时,这个方式是最有用的;依赖值可以是多个,属性只能是一个;
2.有点很重要的区别是:计算属性不能执行异步任务,计算属性必须同步执行。也就是说计算属性不能向服务器请求或者执行异步任务。如果遇到异步任务,就交给侦听属性。watch也可以检测computed属性;
3.Computed是多对一,或一对一;watch是一对多或一对一。

四、vue-router导航

1.导航被触发。
2.在失活的组件里调用 beforeRouteLeave 守卫。
3.调用全局的 beforeEach 守卫。
4.在重用的组件里调用 beforeRouteUpdate 守卫 (2.2+)。
5.在路由配置里调用 beforeEnter。
6.解析异步路由组件。
7.在被激活的组件里调用 beforeRouteEnter。
8.调用全局的 beforeResolve 守卫 (2.5+)。
9.导航被确认。
10.调用全局的 afterEach 钩子。
11.触发 DOM 更新。
12.调用 beforeRouteEnter 守卫中传给 next 的回调函数,创建好的组件实例会作为回调函数的参数传入。

五、关于上传

1.断点续传,前端实现
把上传的文件切割,点击上传各个切割的文件流,可以点暂停,可以恢复上传

2.秒传
对于上传过的文件,不上传,通过后台接口查询是否上传。

六、关于css继承

3.css样式哪些是可以继承
· 所有元素默认继承:visibility、cursor
· 文本属性默认继承:letter-spacing、word-spacing、white-space、line-height、color、font、 font-family、font-size、font-style、font-variant、font-weight、text-indent、text-align、text-shadow、text-transform、direction
· 列表元素默认继承:list-style、list-style-type、list-style-position、list-style-image
· 表格元素默认继承:border-collapse

七、HTTPS

1.解析速度快:服务器解析 HTTP1.1 的请求时,必须不断地读入字节,直到遇到分隔符 CRLF 为止。而解析 HTTP2 的请求就不用这么麻烦,因为 HTTP2 是基于帧的协议,每个帧都有表示帧长度的字段。
2.多路复用:HTTP1.1 如果要同时发起多个请求,就得建立多个 TCP 连接,因为一个 TCP 连接同时只能处理一个 HTTP1.1 的请求。
在 HTTP2 上,多个请求可以共用一个 TCP 连接,这称为多路复用。同一个请求和响应用一个流来表示,并有唯一的流 ID 来标识。
多个请求和响应在 TCP 连接中可以乱序发送,到达目的地后再通过流 ID 重新组建。

google-devtool看板翻译
· Queueing: 在请求队列中的时间。
· Stalled: 从TCP 连接建立完成,到真正可以传输数据之间的时间差,此时间包括代理协商时间。
· Proxy negotiation: 与代理服务器连接进行协商所花费的时间。
· DNS Lookup: 执行DNS查找所花费的时间,页面上的每个不同的域都需要进行DNS查找。
· Initial Connection / Connecting: 建立连接所花费的时间,包括TCP握手/重试和协商SSL。
· SSL: 完成SSL握手所花费的时间。
· Request sent: 发出网络请求所花费的时间,通常为一毫秒的时间。
· Waiting(TFFB): TFFB 是发出页面请求到接收到应答数据第一个字节的时间。
· Content Download: 接收响应数据所花费的时间。

八、Defer和async的区别

在这里插入图片描述

九、图片懒加载

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <title>图片懒加载</title>
  <style type="text/css"></style>

  <style>
    *{
      padding: 0;
      margin: 0;
    }
    .box3 {
      height: 1000px;
      width: 500;
      background-color: aqua;
    }
    .box1 {
      height: 1000px;
      width: 500;
      background-color: royalblue;
    }
  </style>
  <script>		
		window.myCallback = (res)=>{			//这里为上一步定义的全局函数
    		console.log(111111111111,res)
    }
    
	</script>
  <script >
       	myCallback({					
            name:'ahreal',
            age:18
        }) 
  </script>
</head>

<body>
  <div style="height:5000px">
    <div class="box1"></div>
    <div class="box1"></div>
    <div class="box1"></div>
    <img 
      class="box3" 
      src="https://alifile.hqjy.com/hq/classfile/2021-12-15/1265e235-6c30-4d0e-bde1-c19225356a37ggDe1keqiSADrzO1F-3PTBsAAAAAAAAAAQ.png"
      alt='https://alifile.hqjy.com/web/hqjyWeb/default.png'
       />
    <div class="box1"></div>
    <div class="box1"></div>

  </div>
  <script type="text/javascript">
    function isInViewPortOfOne (el) {
      // viewPortHeight 兼容所有浏览器写法
      const viewPortHeight = window.innerHeight || document.documentElement.clientHeight
      const offsetTop = el.offsetTop
      console.log('offsetTop',offsetTop);
      const scrollTop = document.documentElement.scrollTop
      const top = offsetTop - scrollTop
      // 滚动数量加视口高度-元素距离顶部高度
      if (scrollTop+viewPortHeight-offsetTop) {
        el.src = el.alt
      }
    }
    function debounce(fun,layout) {
      let timer 
      return function(arg) {
        clearTimeout(timer)
        timer = setTimeout(()=>{
          fun(arg)
        },layout)
      }
    }
    window.onload = function() {
      let el = document.getElementsByClassName('box3')[0]
      console.log('el',el);
      let handleScroll = debounce(isInViewPortOfOne,100)
      document.onscroll = function() {
        handleScroll(el)
      }
    }
  </script>
</body>

</html>

十、微信SDK分享给好友、朋友圈不显示卡片、只显示链接了?

https://mp.weixin.qq.com/s/7zxqex8DuuWj8cFfDhz2bw
https://developers.weixin.qq.com/community/develop/doc/0008c8eea54600acfa1d4548e51000在这里插入图片描述
在这里插入图片描述
目前分享有卡片的方法:
1.公众号菜单进入

2.气泡链接进入

3.先收藏url到微信,从微信收藏中进入

十二、Boostate
boostrate分css样式、组建、插件
插件需要引入jq,boostrate.js和boostrate.css
文档链接:https://www.bootcss.com/
注意:内容少的可以做响应式;电商类的,东西太多,不行,建议做pc和h5两个端

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值