自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(57)
  • 收藏
  • 关注

原创 ES6的新特性

1.块级作用域let/const2.Symbol/bigint3.Set/WeakSet4.Map/WeakMap5.WeakRef6.Promise7.async/await8.拓展操作符和解构赋值9.Reflect/Proxy10. 箭头函数11. 模板字符串12. class语法糖13. 模块(import / export )Object新增的API:Object.keys()Object.values()Object.entries()Object.isObje

2022-02-15 18:54:58 191

原创 for…in和for…of的区别

for…of 是ES6新增的遍历方式,允许遍历一个含有iterator接口的数据结构(数组、对象等)并且返回各项的值,和ES3中的for…in的区别如下for…of 遍历获取的是对象的键值,for…in 获取的是对象的键名;for… in 会遍历对象的整个原型链,性能非常差不推荐使用,而 for … of 只遍历当前对象不会遍历原型链;对于数组的遍历,for…in 会返回数组中所有可枚举的属性(包括原型链上可枚举的属性),for…of 只返回数组的下标对应的属性值;总结: for…in 循环主要是为

2022-02-12 16:43:39 583

原创 HTML5的新特性和CSS3的新特性

HTML5新特性:拖放(Drag and drop)API语义化标签(header、nav、footer、section、article、aside)音频、视频(audio、video)API画布(canvas)API地理定位(Geolocation)API本地离线存储(localStorage),即长期存储数据,浏览器关闭后数据不丢失会话存储(sessionStorage),即数据在浏览器关闭后自动删除表单控件(calender、date、time、url、email、search)新的

2022-01-13 21:28:49 217

原创 Canvas和SVG的区别

Canvas描述:通过Javascript来绘制2D图形。是逐像素进行渲染的。其位置发生改变,会重新进行绘制。SVG描述:一种使用XML描述的2D图形的语言SVG基于XML意味着,SVG DOM中的每个元素都是可用的,可以为某个元素附加Javascript事件处理器。在 SVG 中,每个被绘制的图形均被视为对象。如果 SVG 对象的属性发生变化,那么浏览器能够自动重现图形。比较Canvas:依赖分辨率不支持事件处理器弱的文本渲染能力能够以 .png 或 .jpg 格式保存结果图

2022-01-13 20:35:46 5504

原创 null和undefined区别

null表示"没有对象",即该处不应该有值。典型用法是:(1) 作为函数的参数,表示该函数的参数不是对象。(2) 作为对象原型链的终点。(3) 获取一个不存在的节点 document.getElementById(‘notExistElement’)undefined表示"缺少值",就是此处应该有一个值,但是还没有定义。典型用法是:(1)变量被声明了,但没有赋值时,就等于undefined。 var x;(2) 调用函数时,应该提供的参数没有提供,该参数等于

2022-01-06 15:16:13 111

原创 js通过原型继承写法, 使用原型工厂封装继承和对象工厂派生对象并实现继承

js原型继承的写法(通常):function User(name, age){this.name = name;this.age = age;}User.prototype.show = function(){console.log(this.name, this.age);}function Admin(…args){User.apply(this,args);}Admin.prototype = Object.create(User.prototype);Admin.protot

2022-01-05 23:22:31 631

原创 in 和 hasOwnProperty 的属性检测差异

in: 检测一个属性是否在对象上,还会检测属性是否在对象的原型链上;hasOwnProperty: 只会单纯地检测属性是否在对象上,不会去检测属性是否在对象地原型链上;

2022-01-05 00:01:51 245

原创 instanceof 和 isPrototypeOf

function A (){};let a = new A();a instanceof A : a对象的原型链上是否有A.prototype;let a = {};let b = {};Object.setPrototypeof(a, b);b.isPrototypeOf(a): b对象是否是a对象原型链上的一份子(对象);

2022-01-04 23:38:33 215

原创 什么是非抢占式和抢占式调度方式?抢占式调度方法和非抢占式调度方法有哪些?

非抢占式方式:在采用这种调度方式时,一旦把处理机分配给某进程后,就一直让它运行下去,决不会因为时钟中断或任何其它原因去抢占当前正在运行进程的处理机,直至该进程完成,或发生某事件而被阻塞时,才把处理机分配给其它进程。非抢占式调度方法有:先来先服务(每次调度是从就绪的进程队列中选择一个最先进入该队列的进程,为之分配处理机,使之投入运行。该进程一直运行到完成或发生某事件而阻塞后,进程调度程序才将处理机分配给其它进程),短作业优先,非抢占式优先级调度,高响应比优先调度算法抢占式方式:这种调度程序根据某种原则,去

2021-12-29 12:07:33 14505

原创 TCP 和 UDP 的主要特点

TCP协议的主要特点:1.TCP 是面向连接的,在传输数据的时候需要三次握手进行连接。四次挥手释放连接2TCP只支持单播,每一条 TCP 连接只能有两个端点,每一条 TCP 连接只能是点对点的(一对一)3.TCP是面向字节流的,应用程序与TCP交互是一次一个大小不等的数据块,发送方的TCP把应用进程交付下来的报文数据块,看成是无结构的字节流,它不保证接收方收到的数据块和发送方发送的数据块具有对应大小关系;4.TCP 提供全双工通信。TCP 允许通信双方的应用进程在任何时候都能发送数据。TCP 连接的

2021-12-28 23:14:56 6156

原创 怎么避免死锁?

1、判断“系统安全状态”法在进行系统资源分配之前,先计算此次资源分配的安全性。若此次分配不会导致系统进入不安全状态,则将资源分配给进程; 否则,让进程等待。所谓安全状态是指系统能按某种进程推进顺序(P1,P2,P3,…Pn)为每个进程Pi分配其所需资源,直至满足每个进程对资源的最大需求,使每个进程都顺利地完成。此时称(P1,P2,…,Pn)为安全序列。2、银行家算法1、申请的贷款额度不能超过银行现有的资金总额2、分批次向银行提款,但是贷款额度不能超过一开始最大需求量的总额3、暂时不能满足客户申请

2021-12-25 18:57:41 372

原创 死锁产生的必要条件

互斥条件:每个资源要么已经分配给⼀个进程,要么就是可⽤的,即在一段时间内某资源仅为一进程所占用。请求和保持条件:已经得到了某个资源的进程可以再请求新的资源,当进程因请求资源而阻塞时,对已获得的资源保持不放。不剥夺条件:进程已获得的资源在未使用完之前,不能剥夺,只能在使用完时由自己释放。环路等待条件:死锁发⽣时,系统中⼀定有由两个或两个以上的进程组成的⼀条环路,该环路中的每个进程都在等待着下⼀个进程所占有的资源。...

2021-12-25 16:24:59 169

原创 产生死锁的原因

可归结为如下两点:a. 竞争资源产生死锁中的竞争资源之一指的是竞争不可剥夺资源(例如:系统中只有一台打印机,可供进程P1使用,假定P1已占用了打印机,若P2继续要求打印机打印将阻塞、 系统中只有一台打印机R1和一台磁带机R2,可供进程P1和P2共享。假定PI已占用了打印机R1,P2已占用了磁带机R2,若P2继续要求打印机R1,P2将阻塞;P1若又要求磁带机,P1也将阻塞。于是,在P1和P2之间就形成了僵局,两个进程都在等待对方释放自己所需要的资源,但是它们又都因不能继续获得自己所需要的资源而不能继续推进

2021-12-25 16:17:48 447

原创 什么是死锁

如果⼀个进程集合中的每⼀个进程都在等待只能由该进程集合中的其他进程才能引发的事件,那么,该进程集合就是死锁;所谓死锁,是指多个进程在运行过程中因争夺资源而造成的一种僵局,当进程处于这种僵持状态时,若无外力作用,它们都将无法再向前推进。 因此我们举个例子来描述,如果此时有一个线程A,按照先锁a再获得锁b的的顺序获得锁,而在此同时又有另外一个线程B,按照先锁b再锁a的顺序获得锁;...

2021-12-25 15:49:53 115

原创 进程的调度算法

1、批处理系统中的调度(1)先来先服务:⾮抢占式的调度算法,按照请求的顺序进⾏调度。有利于⻓作业,但不利于短作业,因为短作业必须⼀直等待前⾯的⻓作业执⾏完毕才能执⾏,⽽⻓作业⼜需要执⾏很⻓时间,造成了短作业等待时间过⻓。(2)最短作业优先:⾮抢占式的调度算法,按估计运⾏时间最短的顺序进⾏调度。⻓作业有可能会饿死,处于⼀直等待短作业执⾏完毕的状态。因为如果⼀直有短作业到来,那么⻓作业永远得不到调度。(3)最短剩余时间优先:最短作业优先的抢占式版本,按剩余运⾏时间的顺序进⾏调度。当⼀个新的作业

2021-12-17 16:25:32 269

原创 进程间的通信方式有哪些?

进程间通信常见方式如下:管道FIFO消息队列信号量共享内存UNXI域套接字套接字(Socket)管道管道是一种古老的IPC通信形式。它的特点:1.它是半双工的,具有固定的读端和写端;2.它只能用于父子进程或者兄弟进程之间的进程的通信;3.它可以看成是一种特殊的文件,对于它的读写也可以使用普通的 read、write 等函数。但是它不是普通的文件,并不属于其他任何文件系统,并且只存在于内存中。命名管道FIFO 可以在无关的进程之间交换数据,与无名管道不同;FIFO 有路径名与之

2021-12-17 16:02:29 5955

原创 Android生成 getter 方法与 setter 方法

首先,配置Android Studio识别成员变量的m前缀。打开Android Studio首选项对话框(Mac用户选择Android Studio菜单,Windows用户选择File →Settings菜单)。依次展开Editor和Code Style选项,在Java选项下选择Code Generation选项页。在Naming表单的Field一行中,添加m作为前缀,如图2-3所示。然后添加s作为Static field的前缀。单击OK按钮完成。图是设置Java代码风格首选项刚才设置的前缀有.

2021-12-16 00:17:39 640

原创 TCP 如何保证有效性

一. 校验和:1、首先将检验和置零;2、然后将TCP伪首部部分,TCP首部部分,数据部分都划分成16位的一个个16进制数3、将这些数逐个相加,记得溢出的部分加到最低位上,这是循环加法:0xc0a8+ 0x0166+……+0x0402=0x9b494、最后将得到的结果取反,则可以得到检验和位0x64b6发送方:原码相加 ,并将高位叠加到低位,取反 ,得到反码求和结果,放入校验和接收方:将所有原码 相加,高位叠加, 如全为1,则正确发送的数据包的二进制相加然后取反,目的是检测数据在传输过程中的

2021-12-15 21:30:05 429

原创 IP地址分类

A类地址(1~126):网络号占前8位,以0开头,主机号占后24位。B类地址(128~191):网络号占前16位,以10开头,主机号占后16位。C类地址(192~223):网络号占前24位,以110开头,主机号占后8位。D类地址(224~239):以1110开头,保留位多播地址。E类地址(240~255):以1111开头,保留位今后使用。...

2021-12-15 20:12:34 858

原创 http状态码301和302详解及区别

官方的比较简洁的说明:301 redirect: 301 代表永久性转移(Permanently Moved)302 redirect: 302 代表暂时性转移(Temporarily Moved )ps:这里也顺带记住了两个比较相近的英语单词(permanently、temporarily),嘻哈!详细来说,301和302状态码都表示重定向,就是说浏览器在拿到服务器返回的这个状态码后会自动跳转到一个新的URL地址,这个地址可以从响应的Location首部中获取(用户看到的效果就是他输入的地址A

2021-12-13 20:08:25 14018

原创 进程与线程的区别?

(1)调度:进程是资源分配的最小单位,而线程是 CPU 调度的最小单位(2)并发性:不仅进程之间可以并发执行,同一个进程的多个线程之间也可并发执行(3)拥有资源:进程是拥有资源的一个独立单位,线程不拥有系统资源,但可以访问隶属于进程的资源.(4)系统开销:创建进程或撤销进程,系统都要为之分配或回收资源,操作系统开销远大于创建或撤销线程时的开销;(5)地址空间:不同进程地址空间相互独立,同一进程内的线程共享同一地址空间。一个进程的线程在另一个进程内是不可见的;...

2021-12-11 21:42:53 221

原创 什么是进程和线程

进程:1、用户角度: 进程是程序的一次动态执行过程;2、操作系统: 进程是系统进行资源分配和调度的一个独立单位,是系统中的并发执行的单位;每个进程都拥有独立的地址空间;一个进程可以拥有多个线程;一个进程无法访问另一个进程的变量和数据结构,如果想让一个进程访问另一个进程的资源,需要使用进程间通信,比如管道,文件,套接字等。线程:线程是进程的一个实体,也是 CPU 调度和分派的基本单位,它是比进程更小的能独立运行的基本单位,有时又被称为轻权进程或轻量级进程。...

2021-12-11 21:11:13 462

原创 什么是同步、异步、阻塞、非阻塞

同步是指:当程序1调用程序2时,程序1停下不动,直到程序2完成回到程序1来,程序1才继续执行下去。异步是指:当程序1调用程序2时,程序1继续执行自己的下一个动作,不受程序2的的影响。也可以说是程序2的结果是程序1主动去发现的,还是程序2通过通知或者回调来告诉程序1的阻塞:A调用B ,A一直等着B的返回,别的事情什么也不干,就是说当前线程会被挂起,即阻塞。非阻塞:A调用B,A不用一直等着B的返回,可以先去忙别的事情了,即B的调用结果没返回,也不会阻塞当前线程...

2021-12-11 20:36:19 1557

原创 POST和GET有哪些区别?各自应用场景?

区别:1.GET请求的数据是放在HTTP包头中的,也就是URL之后,通常是像下面这样定义格式的,而Post是把提交的数据放在HTTP正文中的;2.GET提交的数据比较少,最多1024B,而POST可以传送更多的数据;3.Post的安全性要比Get高,因为Get时,参数数据是明文传输的,而且使用GET的话,还可能造成Cross-site request forgery攻击。而POST数据则可以加密的,但GET的速度可能会快些;场景:GET 用于获取资源,查询数据,而 POST 用于传输实体主体,修改数

2021-12-11 17:51:08 3280

原创 HTTP1.0,1.1,2.0 的版本区别

http1.0短连接HTTP/1.0规定浏览器与服务器只保持短暂的连接,浏览器的每次请求都需要与服务器建立一个TCP连接,服务器完成请求处理后立即断开TCP连接。http1.1长连接(持久化连接)TCP连接默认不关闭,可以被多个请求复用管道机制同一个TCP连接里面,客户端可以同时发送多个请求。这样就进一步改进了HTTP协议的效率。有了持久连接和管道,大大的提升了HTTP的效率。但是服务端还是顺序执行的,效率还有提升的空间http2.0多路复用即在一个连接里,客户端和浏览器都可以同时发送

2021-12-11 17:29:18 1963 1

原创 TCP与UDP有哪些区别?

(1)首先,TCP和UDP是TCP/IP体系结构中的传输层中很主要的两个协议,UDP的全称是用户数据报协议,TCP的全称是传输控制协议(2)区别有五个方面①有无连接:使用UDP协议的通讯双方是随时可以进行数据传输的,无需建立连接,而TCP是面向连接服务的,在传输数据的时候需要三次握手进行连接。四次挥手释放连接②是否支持广播或多播UDP支持了广播、多播和单播的服务,而TCP只支持单播③报文是面向字节流或报文段UDP是面向应用报文,UDP对应用层交下来的报文,既不会拆分,也不会合并。TCP是面向

2021-12-10 17:11:37 8144

原创 TCP/IP协议 四次挥手

刚开始双方都处于 establised 状态,假如是客户端先发起关闭请求的,则:1、第一次挥手:客户端发送一个 FIN 报文,在报文里面FIN标志位置1,也会指定一个序列号。此时客户端处于FIN_WAIT1状态;2、第二次挥手:当服务端收到这报文之后,我就知道了客户端想要和我断开连接,但是此时服务端不一定能做好准备,因为当客户端发起断开连接的时候,对于服务端而言它极有可能有未发送完的的消息,它还要继续发送;所以此时服务端会发送 ACK 报文,且把客户端的序列号值 + 1 作为 ACK 报文的序列号值,表

2021-12-10 15:57:59 1178

原创 TCP/IP协议 三次握手

TCP/IP协议是传输层的一个面向连接的安全可靠的传输协议。刚开始客户端处于 closed 的状态,服务端处于 listen 状态;第一次握手是由客户端发起,客户端会向服务端发送一个SYN报文,报文里面SYN标志位是置1的,并指明客户端的初始化序列号。此时客户端处于SYN_Send状态;当服务端收到这个SYN 报文的时候就知道客户端要和我发起一个新的连接,于是服务端就向客户端发送一个自己的 SYN 报文作为应答,并且也是指定了自己的初始化序列号 ISN(s),同时会把客户端的 ISN + 1 作为 a

2021-12-09 17:53:25 1767

原创 OSI 的七层模型分别是?各自的功能是什么?

1.物理层 ,底层数据传输,比特流传输,也就是物理层把实际的二进制高低电平怎么从介质的一端传输到另一端,如网线,网卡标准;2.数据链路层:控制网络层和物理层之间的通信,定义数据的基本格式,如何传输,如何标识;如网卡MAC地址;数据链路层协议由很多种协议,解决各端链路之间的协议标准;每台路由器之间的链路使用的协议都有可能不一样,比如说以太网协议(适合广播型协议),帧中继协议,ppp协议(适用于点到点),802.11协议(适合无线网络),为了让整个网络的性能更加强大,可以在不同的链路段使用不同的协议;3.网

2021-12-09 16:27:07 2919

原创 a和&a有什么区别?

a和&a有什么区别?假设有这么一个数组int a[10]和 int (*p)[10] = &a用这两个例子来说明a和&a的区别1.a是数组名,它是数组首元素的地址, +1表示的是地址值加上一个int类型的字节大小,如果a的值是0x00000001,加1操作后变为0x00000005, 即 *(a + 1)= a[1]&a是数组的指针,其类型就是int (*)[10] (就是数组指针),其加上1时,系统会认为数组首地址加上整个数组的大小(10个int型变量),值为数组

2021-11-01 20:18:49 2601

原创 Android 与MVC 设计模式

应用对象分为模型、视图和控制器三类。Android应用基于模型视图控制器(Model-View-Controller,MVC)的架构模式进行设计。MVC设计模式表明,应用的任何对象,归根结底都属于模型对象、视图对象以及控制器对象中的一种。 模型对象存储着应用的数据和业务逻辑。模型类通常用来映射与一些事物应用相关的,如用户、商店里的商品、服务器上的图片或者一段电视节目,抑或GeoQuiz应用里的地理知识问题。模型对象不关心用户界面,它为存储和管理应用数据而生。Android应用里,模型类通...

2021-07-02 00:19:01 431

原创 学习Swift的笔记

刚刚看了一会Swift语言的文档, 感觉它很像JavaScript,因为有let ,var,只不过JavaScript的let 是表示局部变量,而Swift的let表示常量。还有Swift有类型定义,写法跟TypeScript的类型定义的写法一样。感觉编程语言有很多相同的地方。Swift有一些比较特殊的点记录在这里一下:1.如果你需要使用与 Swift 保留关键字相同的名称作为常量或者变量名,你可以使用反引号(`)将关键字包围的方式将其作为名字使用。2.// let >123 = "123"

2021-07-02 00:11:30 125

原创 Android 编译过程

在整个编译过程中,Android开发工具将资源文件、代码以及AndroidManifest.xml文件(包含应用的元数据)编译生成.apk文件。.apk文件要在模拟器上运行,还需以debug key签名。(分发.apk应用给用户时,应用必须以release key签名。更多有关编译过程的信息,可参考Android开发文档网页developer.android.com/tools/publishing/preparing.html。);我们看到的项目编译都是在Android Studio里执行的。编译功能已

2021-06-28 13:35:28 202

原创 express源码实现

先看一下目录结构:源码的实现是lib文件下的部分,1-get.js,2-middleware.js是用lib文件下实现的express例子附上该代码的Github仓库地址

2021-06-28 12:20:06 70

原创 koa源码实现

先看一下目录结构:源码的实现是lib文件下的部分,index.js是用lib文件下实现的koa,text.js是最核心的koa实现部分,即洋葱模型的实现部分,一步一步的升级实现而来的附上该代码的Github仓库地址:...

2021-06-28 12:07:25 114

原创 node.js实习面试题

Node.js实习一.JavaScript基础类型有什么?number,bool,string,null,undefined引用类型有什么?object,array,function基础类型与引用类型有什么区别?(1)基础类型是存在栈中,引用类型是存在栈和堆中;(2)基础类型的值的修改是直接栈中修改的,而引用类型的值的修改是修改堆中的对象的属性或者方法,或者重新赋值一个地址,地址指向新的堆内存;什么是Promise?Promise是一个类,里面有构造函数和then方法,支持链式异步回调

2021-06-28 11:47:07 111

原创 js用reduce方法实现map方法

Array.prototype._map = function (func, callbackThis) { let res = []; let CBThis = callbackThis || null; this.reduce(function (pre, after, index, arr) { res.push(func.call(CBThis, after, index, arr)); }, null); return res;};

2021-06-28 11:38:03 314

原创 js手写object.create方法

function create(pro) { function F() {} F.prototype = pro; return new F();}

2021-06-28 11:37:11 2106

原创 手写js的new方法

function New(fn, ...args) { let obj = Object.create(fn.prototype); let res = fn.apply(obj, args); return res instanceof Object ? res : obj;}测试代码:function Dog(name) { this.name = name;}Dog.prototype.sayName = function () { console.log(this.n

2021-06-28 11:32:30 141

原创 手写js的instanceof方法

function Instanceof(obj, pro) { obj = obj.__proto__; pro = pro.prototype; while (obj) { if (obj === pro) return true; obj = obj.__proto__; } return false;}console.log(Instanceof([], Function));

2021-06-28 11:28:51 189

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除