myVue2

https://rumenz.com/examples/vue.js/js-vue-template-style.html

vue-mvvm框架和其他框架(jquery)的区别:
一个model+view+viewModel框架
区别:vue数据驱动,通过数据来显示视图层而不是节点操作。
场景:数据操作比较多的场景,更加便捷

vue-loader是什么?使用它的用途有哪些?
解析.vue文件的一个加载器,跟template/js/style转换成js模块。

用途:js可以写es6、style样式可以scss或less、template可以加jade等

怎么认识vuex
vuex可以理解为一种开发模式或框架。比如PHP有thinkphp,java有spring等。通过状态(数据源)集中管理驱动组件的变化(好比spring的IOC容器对bean进行集中管理)。

应用级的状态集中放在store中; 改变状态的方式是提交mutations,这是个同步的事物; 异步逻辑应该封装在action中。

git在工作中的用处:
编辑和代码提交

# 为git初始化一个代码库
git init
 
# 将目录的所有文件提交到暂存区
git add .
 
# 提交暂存区到代码仓库区,并添加提交信息
git commit -m "commit message"

分支处理,查看状态信息,同步远程仓库,撤销

数组去重的方法 https://www.cnblogs.com/luxiaoxing/p/7498248.html
1,es6中的set方法,类似于数组,成员的值都是唯一的

var arr = [1, 2, 3, 2, 1, 3];
console.log(new Set(arr))//打印结果:Set(3) {1, 2, 3}

2,使用filter过滤器去重

var arr = [1, 2, 3, 1, 2, 3];
console.log(arr.filter((v, i, arr) => arr.indexOf(v) === i))//打印结果:(3) [1, 2, 3]

3,遍历数组法
新建一个数组,遍历传入的数组,值不在新数组中就加入到该新数组;
注意:判断值是否在数组中可以用indexOf是ES5 方法,IE9以下不支持,需兼容低版本浏览器。
indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置

function unique(array) {
       var n = []; //一个新的临时数组 
        //遍历当前数组 
        for (var i = 0; i < array.length; i++) {
            if (n.indexOf(array[i]) == -1) n.push(array[i]);
            //如果当前数组的第i已经保存进了临时数组,那么跳过, 
            //否则把当前项push到临时数组里面 
        }
        return n;
    }
 console.log(unique([1, 2, 3, 1, 2, 3])) //打印结果:(3) [1, 2, 3]

4,利用splice()方法直接在原数组进行操作。
双层循环,外层循环元素,内层循环时比较值。
值相同时,则删去这个值。
注意:删除元素之后,需要将数组的长度也减1。
5,数组递归去重

Array.prototype.unique = function () {
    var arr = this,
        len = arr.length;
    arr.sort(function (a, b) { //对数组进行排序才能方便比较
        return a - b;
    })

    function loop(index) {
        if (index >= 1) {
            if (arr[index] === arr[index - 1]) {
                arr.splice(index, 1);
            }
            loop(index - 1); //递归loop函数进行去重
        }
    }
    loop(len - 1);
    return arr;
};
var a = [1, 2, 3, 1, 2, 3];
var b = a.unique();
console.log(b); //打印结果:(3) [1, 2, 3]

对vue状态层的理解----------未解决
vue中的路由模式 哈希原理—看笔记
vue中的传值方式
https://www.jianshu.com/p/0fb563e04f61
父子,子父,兄弟,
缓存,
路由传值
1.父组件push使用this.¥router.push
2.在子组件中获取参数的时候是this.¥route.params

三次握手和四次挥手 https://blog.csdn.net/qq_38950316/article/details/81087809
三次握手—
第一次握手:建立连接时,客户端发送syn包(syn=x)到服务器,并进入SYN_SENT状态,等待服务器确认;SYN:同步序列编号
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=x+1),同时自己也发送一个SYN包(syn=y),即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=y+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手。
在这里插入图片描述

四次挥手---------
一,客户端进程发出连接释放报文,并且停止发送数据。释放数据报文首部。,FIN=1,其序列号为seq=u,此时,客户端进入FIN-WAIT-1(终止等待1)状态。 TCP规定,FIN报文段即使不携带数据,也要消耗一个序号。
二,服务器收到连接释放报文,发出确认报文。ACK=1,ack=u+1,并且带上自己的序列号seq=v,此时,服务端就进入了CLOSE-WAIT(关闭等待)状态。TCP服务器通知高层的应用进程,客户端向服务器的方向就释放了,这时候处于半关闭状态,即客户端已经没有数据要发送了,但是服务器若发送数据,客户端依然要接受。这个状态还要持续一段时间,也就是整个CLOSE-WAIT状态持续的时间。
三,客户端收到服务器的确认请求后,此时,客户端就进入FIN-WAIT-2(终止等待2)状态,等待服务器发送连接释放报文(在这之前还需要接受服务器发送的最后的数据)。
四,服务器将最后的数据发送完毕后,就向客户端发送连接释放报文,FIN=1,ack=u+1,由于在半关闭状态,服务器很可能又发送了一些数据,假定此时的序列号为seq=w,此时,服务器就进入了LAST-ACK(最后确认)状态,等待客户端的确认
五,客户端收到服务器的连接释放报文后,必须发出确认,ACK=1,ack=w+1,而自己的序列号是seq=u+1,此时,客户端就进入了TIME-WAIT(时间等待)状态。注意此时TCP连接还没有释放,必须经过2∗∗MSL(最长报文段寿命)的时间后,当客户端撤销相应的TCB后,才进入CLOSED状态。
六,服务器只要收到了客户端发出的确认,立即进入CLOSED状态。同样,撤销TCB后,就结束了这次的TCP连接。可以看到,服务器结束TCP连接的时间要比客户端早一些。
在这里插入图片描述
**【问题1】为什么连接的时候是三次握手,关闭的时候却是四次握手?

答:因为当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。但是关闭连接时,当Server端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端,“你发的FIN报文我收到了”。只有等到我Server端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送。故需要四步握手。

【问题2】为什么TIME_WAIT状态需要经过2MSL(最大报文段生存时间)才能返回到CLOSE状态?

答:虽然按道理,四个报文都发送完毕,我们可以直接进入CLOSE状态了,但是我们必须假象网络是不可靠的,有可以最后一个ACK丢失。所以TIME_WAIT状态就是用来重发可能丢失的ACK报文。在Client发送出最后的ACK回复,但该ACK可能丢失。Server如果没有收到ACK,将不断重复发送FIN片段。所以Client不能立即关闭,它必须确认Server接收到了该ACK。Client会在发送出ACK之后进入到TIME_WAIT状态。Client会设置一个计时器,等待2MSL的时间。如果在该时间内再次收到FIN,那么Client会重发ACK并再次等待2MSL。所谓的2MSL是两倍的MSL(Maximum Segment Lifetime)。MSL指一个片段在网络中最大的存活时间,2MSL就是一个发送和一个回复所需的最大时间。如果直到2MSL,Client都没有再次收到FIN,那么Client推断ACK已经被成功接收,则结束TCP连接。

【问题3】为什么不能用两次握手进行连接?

答:3次握手完成两个重要的功能,既要双方做好发送数据的准备工作(双方都知道彼此已准备好),也要允许双方就初始序列号进行协商,这个序列号在握手过程中被发送和确认。

   现在把三次握手改成仅需要两次握手,死锁是可能发生的。作为例子,考虑计算机S和C之间的通信,假定C给S发送一个连接请求分组,S收到了这个分组,并发 送了确认应答分组。按照两次握手的协定,S认为连接已经成功地建立了,可以开始发送数据分组。可是,C在S的应答分组在传输中被丢失的情况下,将不知道S 是否已准备好,不知道S建立什么样的序列号,C甚至怀疑S是否收到自己的连接请求分组。在这种情况下,C认为连接还未建立成功,将忽略S发来的任何数据分 组,只等待连接确认应答分组。而S在发出的分组超时后,重复发送同样的分组。这样就形成了死锁。

【问题4】如果已经建立了连接,但是客户端突然出现故障了怎么办?
TCP还设有一个保活计时器,显然,客户端如果出现故障,服务器不能一直等下去,白白浪费资源。服务器每收到一次客户端的请求后都会重新复位这个计时器,时间通常是设置为2小时,若两小时还没有收到客户端的任何数据,服务器就会发送一个探测报文段,以后每隔75秒钟发送一次。若一连发送10个探测报文仍然没反应,服务器就认为客户端出了故障,接着就关闭连接。

html中容器垂直水平居中的方式
<全部都是子绝父相—>-----------下面几个设置有position:absolute的,父级全部都是relative
1,用弹性盒子display:flex来实现子元素的垂直水平居中

 .wrap {
            display: flex;
            justify-content: center;
            /* justify-content: center;设置子元素位于弹性盒的中间 */
            align-items: center;
            /* align-items: center;设置盒子在交叉轴居中 */
            width: 400px;
            height: 400px;
            background-color: red;
        }
        
        .box {
            width: 200px;
            height: 200px;
            background-color: yellowgreen;
        }
————————————————

2,margin:auto+设置绝对定位定位上下左右为0

 .wrap2 .box{
            position: absolute;
            left: 0;
            top: 0;
            right: 0;
            bottom: 0;
            margin: auto;

            width: 300px;
            height: 200px;
            background: yellow;
        }
————————————————

3,用margin负边距和定位

.wrap1 .box{
            position: absolute;
            left: 50%;
            top: 50%;
            margin-left: -100px;
            /* -100px相当于向左移动100px */
            margin-top: -50px;

            width: 200px;
            height: 100px;
            background: yellow;
        }
————————————————

3,transform: translate

 .wrap3 .box{
            position: absolute;
            left: 50%;
            top: 50%;
            transform: translate(-50%,-50%);
        }
————————————————

4,用display:table-cell属性

 .wrap {
            width: 500px;
            height: 500px;
            background-color: red;
            display: table-cell;
            vertical-align: middle;
            text-align: center;
        }
        
        .box1 {
            width: 200px;
            height: 200px;
            display: inline-block;
            vertical-align: middle;
            background-color: yellow;
        }
————————————————

6,计算固定宽高

 .wrap {
            width: 600px;
            height: 600px;
            background-color: red;
            border: 1px solid transparent;
            /* 由于涉及到父子关系的外边距塌陷,所以给父盒子设置1px的透明边框来阻止塌陷 */
        }
        
        .box {
            width: 200px;
            height: 200px;
            background-color: blue;
            margin: 200px auto;
            父盒子高600px,
            子盒子高200px,
            600-200=400px,
            400/2=200px,子盒子上外边距200px,下外边距200px,
            所以 margin: 200px auto;
            给子盒子上下外边距设置200,左右自适应,也就是居中。
        }
————————————————

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值