es6中的 Object.assign(对象的合并)
var obj1 = {
a: 1,
b: 2
}
var obj2 = {
b: 100,
c: 1000
}
var newObj = Object.assign(obj1, obj2) //有相同key 以第二个对象为准
console.log(newObj) //{a: 1, b: 100, c: 1000}
rpx单位是微信小程序中css的尺寸单位,rpx可以根据屏幕宽度进行自适应,已规定屏幕宽为750rpx。如在 iPhone6 上,屏幕宽度为375px,共有750个物理像素,则750rpx = 375px = 750物理像素,1rpx = 0.5px = 1物理像素。
这种JSON格式的字符串与js对象的转换适用于日常开发中深拷贝一些简单的对象
JSON.stringify() JSON.parse() ,但是这种方式存在弊端,会忽略值是undefined、symbol和函数的键以及其他问题
ES6的高阶函数:
1.filter是一个数据的过滤器,他的回调参数是布尔值,他的主要功能就是过滤数据,将过滤的数据存储起来
2.map参数是映射函数,他的回调是修改的数据,对数组中的数据进行修改,再将他们替换
3.reduce()函数是聚合函数。reduce中有两个参数,一个是回调函数,一个是初始值
let list=[1,5,7]
//es6的map
var keyList=list.map((item,index)=>{
item+=1;
return item
})
console.log(keyList); //[2, 6, 8]
console.log(list); //[1, 5, 7] 不会改变原数组
filter 、reduce、map三个高阶函数都不会改变原数组,定义一个变量接收返回值即可
//给定一个数组,找到数组中重复次数最多的数
function maxarrvalue(arr)
{
let maxnum=0
let res
arr.reduce((prevalue,curvalue)=>{
prevalue[curvalue] ? prevalue[curvalue]+=1:prevalue[curvalue]=1
if(prevalue[curvalue]>maxnum)
{
res=curvalue
}
return prevalue
},{})
return res
}
let value=maxarrvalue([2,4,5,2,4,2])
console.log(value);
//getTime() 方法可返回距 1970 年 1 月 1 日之间的毫秒数。
var d = new Date();
var n = d.getTime();
参数形式有以下5种:
new Date(“month dd,yyyy hh:mm:ss”);
new Date(“month dd,yyyy”);
new Date(yyyy,mth,dd,hh,mm,ss);
new Date(yyyy,mth,dd);
new Date(ms);
mth:用整数表示月份,从0-11(1月到12月)
dd:表示一个月中的第几天,从1到31
yyyy:四位数表示的年份
hh:小时数,从0(午夜)到23(晚11点)
mm:分钟数,从0到59的整数
ss:秒数,从0到59的整数
ms:毫秒数,为大于等于0的整数
new Date() 返回当日的日期和时间。
getDate() 从 Date 对象返回一个月中的某一天 (1 ~ 31)。
getDay() 从 Date 对象返回一周中的某一天 (0 ~ 6)。
getMonth() 从 Date 对象返回月份 (0 ~ 11)。(正常运算要+1)
getFullYear() 从 Date 对象以四位数字返回年份。
getHours() 返回 Date 对象的小时 (0 ~ 23)。(正常运算不要+1,实际就是0时到23时)
getMinutes() 返回 Date 对象的分钟 (0 ~ 59)。(正常运算不要+1,实际就是0~59)
getSeconds() 返回 Date 对象的秒数 (0 ~ 59)。(正常运算不要+1,实际就是0~59)
getMilliseconds() 返回 Date 对象的毫秒(0 ~ 999)。(正常运算不要+1,实际就是0~999)
getTime() 返回 1970 年 1 月 1 日至今的毫秒数。
设置一个月的某一天:
var d = new Date();
d.setDate(15);
d 输出结果:
Thu Sep 15 2022 17:33:32 GMT+0800 (GMT+08:00)
返回值:1970年1月1日午夜至调整过日期的毫秒数。在 ECMAScript 标准化之前,该方法什么都不返回。
// 计算当年还剩多少时间,输出为xx年还剩xx天xx分xx时xx秒
<body>
<div class="time"></div>
<script>
function time(){
var date=new Date()
var enddate=new Date(date.getFullYear(),11,31,23,59,59)
var millsecond=enddate.getTime()-date.getTime()
var sec=Math.floor(millsecond/1000)
//(模运算不是两边都取整再运算,而是原值)
var second=sec%60 //整数模肯定不会有小数余数,小数模肯定会有小数余数 //除法无论什么情况都可能会有小数值
var minuts=Math.floor(sec/60)%60 //Math.floor(sec/60%60)这两个运算结果相同,但这个
//运算不合常理,会有多余的计算,直接截取就行因为当前的单位下的多余的已经给了上面一个单位
var hourse=Math.floor(sec/60/60)%24
var day=Math.floor(sec/60/60/24)%30
var months=Math.floor(sec/60/60/24/30)%12
return date.getFullYear()+"还剩"+months+"月"+day+"天"+hourse+"时"+minuts+"分"+second+"秒"
}
var text=document.querySelector(".time")
text.innerHTML=time()
var intertime=setInterval(() => {
text.innerHTML=time()
}, 1000);
</script>
</body>
//switch没break,默认从匹配项执行到default
function name(i) {
let result=0
switch (i) {
case 1:
console.log(1);
result = result + i;
case 2:
console.log(2); //2
result = result + i * 2;
case 3:
console.log(3); //3
result = result + i * 3;
default:
console.log(4); //4
result = result + i * 4;
}
return result;
}
console.log(name(2)); //18
以上图为基础
①前序遍历的方式是:首先访问根节点,然后访问左子树,最后访问右子树。
前序遍历序列:F C A D B E H G M
②中序遍历的方式是:首先访问左子树,接着访问根结点,最后访问右子树。
中序遍历序列:A C B D F H E M G
③后序遍历的方式是:首先访问左子树,接着访问右子树,最后访问根结点。
后序遍历序列:A B D C H M G E F
c语言中:
int *p = &a + 1; // &a 就是数组的首地址,这个+1就只是单纯的加一个int型地址长度了,就是1个数组a的长度,用 &地址了再去加1就不是地址加1了,而是一个数组长度
*a //指数组首元素地址 *(a + 1) //指数组首元素第二个地址 既然是地址,打印值的时候要解引用
死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程
HTTP和HTTPS都需要在建立连接的基础上来进行数据传输,是基本操作
https是客户端与服务器进入加密通信,但完全是使用普通的 HTTP 协议,只不过用会话秘钥加密内容
HTTPS是建立在SSL/TCL协议之上,而SSL/TLS是建立在TCP协议之上。
所以HTTPS的建立过程为DNS(域名系统)->TCP ->SSL/TLS(证书)-> HTTP
HTTP的建立过程分DNS->TCP -> HTTP
当客户在浏览器中输入网址的并且按下回车,浏览器会在浏览器DNS缓存,本地DNS缓存,和Hosts中寻找对应的记录,如果没有获取到则会请求DNS服务来获取对应的ip
一个http请求,会进行三次握手建立tcp连接,关闭tcp连接需要4次挥手
三次握手(Three-way Handshake),是指建立一个 TCP 连接时,需要客户端和服务器总共发送3个包。
4次挥手(TCP 是双向的,所以需要在两个方向分别关闭,每个方向的关闭又需要请求和确认,所以一共就4次)
super(形参列表)必须声明在子类构造器的首行, 可以调用父类中声明的指定的构造器中的变量和方法(例如调用父亲的静态参数过来用)。
TCP/IP参考模型各层次的作用:
应用层 ——————————客户端在应用层发送HTTP请求
传输层 ——————————在传输层(TCP)加入端口号
网络层 ——————————在网络层(IP)加入IP地址
网络接口层 ————————网络接口层兼并了物理层和数据链路层,所以网络接口层既是传输数据的物理媒介,也可以为网络层提供一条准确无误的线路,同时在数据链路层加入MAC地址。
Node.js的Buffer类型对象在创建时内存不会分配到V8堆上,因为Buffer分配是Node在C++层面实现的,v8是浏览器引擎,但是他压根就没利用浏览器引擎
(cache:缓存,storage:存储)
常见浏览器缓存方法:http缓存(http缓存都是从第二次请求开始的)、WebSql(Web Sql数据库API在HTML5之前就已经存在了,并以独立规范的形式出现,它并不是HTML5标准)、indexDB(IndexedDB 是一个事务型数据库系统,是一种底层 API,用于在客户端存储大量的结构化数据,这种方式提供于更大的存储空间,使用上indexDB不仅仅是简单的键值对的写入存储,它是一种数据库的操作方式) 、cookies、localStorage、sessionStorage、application cache(通常用于静态资源(静态页面)的缓存,h5新特性)、cache Storage(缓存API)、flash缓存(基本不用)
详解参考该文章
DNS(域名系统)的作用是域名和IP地址的相互映射
DNS协议可以运行在UDP协议之上
DNS协议端口号为53
DNS缓存:当你第一次访问 163.com,DNS返回了正确的IP之后,系统就会将这个结果临时储存起来,这就是DNS缓存。并且它会为缓存设定一个失效时间 (例如N小时),在这N小时之内,当你再次访问这个网站时,系统就会直接从你电脑本地的DNS缓存中把结果交还给你,而不必再去询问DNS服务器,变相“加速”了网址的解析。当然,在超过N小时之后,系统会自动再次去询问DNS服务器获得新的结果
windows下不同的浏览器DNS缓存时间不同
macOS 下DNS缓存时间严格遵循DNS协议中的TTL
TCP协议通过使用连续ARQ协议和滑动窗口协议,来保证数据传输的正确性,从而提供可靠的传输
第一范式(1NF)强调的是列的原子性,即列不能够再分成其他几列。 1NF 很好辨别,但是 2NF 和 3NF 就容易搞混淆。
假定CSomething是一个类,执行下面这些语句之后,内存里创建了__6__个CSomething对象。
Csomething a();//没有创建对象,不是使用默认构造函数,而是定义了一个函数,
Csomething b(2);//使用一个参数的构造函数,创建了一个对象
Csomething c[3];//使用无参构造函数,创建了三个对象
Csomething &ra = b;//引用b,没有创建新对象
Csomething d = b;//使用拷贝构造函数,创建了一个新对象d
Csomething *pA = c;//创建指针,指向对象c,没有构造新对象
Csomething *p = new Csomething(4);//新建一个对象
线性(数据)结构是一个有序数据元素的集合。
常用的线性结构有:线性表,栈,队列,双队列,串(一维数组),单/双链表,字符串。
常见的非线性结构有:二维数组,多维数组,广义表,树(二叉树等),图
栈和队列其实是操作受限的线性表,在插入和删除时受到了一些限制。
之前的数组也罢,链表也罢,既可以在数组的头部插入和删除,也可以在数组的尾部插入和删除,甚至在任意位置都可以插入和删除。
栈只能从一端插入元素,也只能从这一端取出元素,先进后出,后进先出的线性数据结构。
队列先进先出的线性数据结构,元素从队尾添加到队列中,元素只能从队首出队列。
计算机内的传输是并行传输,通信线路上的传输是串行传输
并行传输:并行传输指的是数据以成组的方式,在多条并行信道上同时进行传输,是在传输中有多个数据位同时在设备之间进行的传输。
串行传输:使用一条数据线,将数据一位一位地依次传输,每一位数据占据一个固定的时间长度。特别适用于计算机与计算机、外设之间的远距离通信。
并行串行区别:
1、传输方式不同:一个是并行一个是串行
2、效率不同:并行传输效率高,一次可传输多个数据;串行传输一次可传输一个数据。
3、速度不同:这个要具体说一说,大多数情况下串行速度会快一些。
4、并行传输适用于短距离,串行适用于长距离。
5. 并行传输的基本单元是线程,串行传输的基本单元是进程
线程和进程的区别有:
1、定义不一样,进程是执行中的一段程序,而一个进程中执行中的每个任务即为一个线程。
2、一个线程只可以属于一个进程,但一个进程能包含多个线程。
3、线程无地址空间,它包括在进程的地址空间里。
4、线程的开销或代价比进程的小。
计算机中数据的存储单位:1、位(bit)是表示信息量的最小单位,只有0、1两种二进制状态;2、字节(Byte)是存储数据的基本单位;3、字(Word),两个字节称为一个字;4、KB;5、MB;6、GB;7、TB。
8 bit = 1 Byte / 1B 一字节
1024 B = 1 KB (KiloByte) 千字节
1024 KB = 1 MB (MegaByte) 兆字节
1024 MB = 1 GB (GigaByte) 吉字节
1024 GB = 1 TB (TeraByte) 太字节
基本储存单元:
位(bit):二进制数中的一个数位,可以是0或者1,是计算机中数据的最小单位。
字节(Byte,B):计算机中存储数据的基本单位,每8位组成一个字节。各种信息在计算机中存储、处理至少需要一个字节。例如,一个ASCII码用一个字节表示,一个汉字用两个字节表示。
字(Word):两个字节称为一个字。汉字的存储单位都是一个字。
扩展的存储单位:在计算机各种存储介质(例如内存、硬盘、光盘等)的存储容量表示中,用户所接触到的存储单位不是位、字节和字,而是KB、MB、GB等,但这不是新的存储单位,而是基于字节换算的。
网络拓扑结构是指把网络电缆等各种传输媒体的物理连接等物理布局特征,通过借用几何学中的点与线这两种最基本的图形元素描述,抽象地来讨论网络系统中各个端点相互连接的方法、形式与几何形状,可表示出网络服务器、工作站、网络设备的网络配置相互之间的连接。它的结构主要有总线型结构、星型结构、环型结构、树型结构、网状结构。