自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 深入理解计算机系统 2.2.2-2.2.3

2.2.2 无符号数的编码2.2.3 补码编码注意点:反码 原码大早上浪费了时间半小时时间打公式。教训

2022-03-09 09:35:35 116

原创 深入理解计算机系统 2.1.7-2.2.1

2.1.7 C语言中的位级运算按位布尔掩码运算!!!todo一道题2.1.8 C语言的逻辑运算结果只有0x01 和 0x00(1 和 0。true 和false)2.1.9 C语言中的移位运算 左移: 低位补零逻辑右移: 高位补0算术右移:高位补有效位2.2 整数表示2.2.1 整型整数类型范围: 无符号比有符号多一位2.2.2 无符号数的编码...

2022-02-28 10:54:06 334

原创 深入理解计算机系统 2.1.3-2.1.6

2.1.3 寻址和字节顺序上一节讲到字数据大小,也就是一个指针本身的大小。它用来寻址。面对跨域多字节的对象咋办?一个字节一个字节挨着存呗,地址存最小的那个(首地址)。(这也明白了前面说的,字节是最小的寻址单元)。谁在前谁在后?比如0x12 34 56,现存12 还是 56?这就是小端法和大端法。为啥要关注字节顺序?一个原因是,当使用强制类型转化的时候,大、小端法会导致结果不同。比如还是这个int型数据 0x12 34 56,它要占4个字节00 12 34 56 ,如果强制转化成char类型访问,大端法会

2022-02-26 23:01:23 272

原创 深入理解计算机系统-系列学习笔记 0222

2.1.2 字数据大小经常说64位、32位计算机,指的是什么?有什么区别?指的是:访问计算机的虚拟地址,需要用到指针,指针的长度就叫做字长(word size),w,它限制了能访问地址的范围 0~2的w次方-1。所以64位一共有2的64次方-1个地址区别:比如存储数据时,对于long类型数据,32位会分配8字节(32位)给他,64位的计算机会分配8字节(64个字节)来存储这个数据。上面说到指针可以存储数据的地址,前一个笔记说到字节是最小的寻址单元,(也就是说一个字节要占一个地址),那么对于跨字节(

2022-02-22 21:06:37 70

原创 深入理解计算机系统-系列学习笔记 0220

今天开始第二章(好像是第三遍开始看了。。。)大多数计算机使用8bit(1字节)作为最小的、可寻址的内存单位今天翻了两三个小时,终于在男朋友的提示下,把十进制、二、十六进制的转化明白了些我脑海里的核心问题,为啥给n进制的数x 乘以 n 就是在后面补个0?比如 10 * 10 = 100; 二进制 110 * 2 = 1100;用乘法分配律,比如110 * 2 等价于1002 + 10 * 2 + 02 == 1000 + 100 + 0 = 1110,就是每一位都向前进了一位,看起来就像是结尾补了个0

2022-02-20 22:36:38 108

原创 深入理解计算机系统-系列学习笔记 0202

前面学到 hello 执行需要借助键盘、磁盘、cpu、显示器等硬件设备,比如hello程序向显示器输出东西、shell从键盘读取输入,实际上,这些程序并没有直接访问硬件,而是借助操作系统(内心os:终于进入操作系统的内容了)。操作系统通过几个抽象概念,方便用户控制各种复杂的硬件进程一个处理器能同时执行1个进程的代码,通过上下文切换来支持多个并发进程线程:一个线程中至少包含一个线程(这个不太理解,后面12章应该会细讲)虚拟内存是对主存和IO设备的抽象,每个线程仿佛独自占用一个主存,这是因为他提

2022-02-02 16:50:46 254

原创 深入理解计算机系统-系列学习笔记 0127

补充一下几天前的笔记前几天学习到,执行hello程序时,hello程序被从磁盘复制到cpu再复制到显示器,:花了大量时间搬运数据,这对于执行程序是额外的开销,应该减少这个时间。怎么减少?提高搬运速度。提高哪里的搬运速度?提高搬运慢的地方的速度。哪里搬运慢?从磁盘到cpu慢为啥慢? 因为越大的存储介质,从里面找东西就越慢?运行的就慢?咋办?加个中间区域,把大块头中常用的东西先找出来存上,存成小块头没看懂的地方:高速缓存的局部性原理,也就是,访问局部的数据更快...

2022-01-30 19:57:01 355

原创 深入理解计算机系统-系列学习笔记 0126

今天把昨天没看完的翻译过程看了下,也就是把人类的语言(C程序)翻译成机器的语言(二进制,可执行目标程序)。翻译完了,机器就能读&执行了运行程序(读取、翻译)都包含哪些步骤?shell将用户输入 ./hello读取到寄存器再放内存中用户按enter 结束输入加载hello文件:从磁盘中复制hello文件到主存中cpu 执行把hello word字符串从主存复制到寄存器文件-复制到显示设备-到屏幕...

2022-01-26 09:49:24 187

原创 深入理解计算机系统-系列学习笔记 0125

今早赖床了,只是抓紧看了10分钟的书。我决定以后用费曼学习法,把学习到的东西写出来,提高学习效率,防止努力半天一无所获。问题1. hello.c 从创建到执行发生了什么?起点(昨天看的): hello.c 是个ASCII码编码的文本文件,本质上存储的是一堆010101。怎么转换的?一个字符由一个字节编码,一个字节有八个bit(最大255)。编译,*.c是给人看的,怎么转成机器能看懂的?1) 预编译:加载头文件 (#include <stdio.h>)2)转成汇编语言 (比如main 函

2022-01-25 11:16:19 499

原创 深入理解计算机系统-系列学习笔记0124

数月后的一个早上,我重拾《计算机操作系统》,继续啃这个难懂的大部头,一是去年已经学了两章不想半途而废,而是昨天看了许多自动驾驶的知识,感到需要扩充技术眼界,而不是局限在工作的业务中,一直在低端领域徘徊。希望这会是个好的开始,今年花3-5个月的时间看完这本书,每天在博客上记录所学。2022-1-24序言“模仿硬件仅用位操作完成复杂的运算”,感觉很厉害!“模仿tracker 和 hacker 去破解密码以及攻击自身的程序”,这才是真正的程序员!“实现简单但功能强大的Shell 和 Proxy”,哇

2022-01-24 09:24:56 1046

原创 学习npm

今日所得,npm run-script *(或者npm run *)实际上是开启了shell进程,执行命令。比如对于 “scripts”: {“link”: “eslint .”} ,npm run link 等价于 node ./node-modules/.bin/eslint . 。这是为啥呢?npm run link == node eslint .npm run 会自动在$PATH中添加./node-bodules/.bin 目录,因此 上述命令 == node ./node-modu

2021-12-02 21:27:06 206

原创 vue next-tick原理分析

1.爷爷组件操作孙组件的ref,用nextTick未获取到,用settimeout可以,因此对nextTick来做探究2.源码实现中,优先用promise->MO->setImedieate>setTimeout,为什么微任务优于宏任务?用户操作数据变更后(同步任务,eg,i++100次),vue会把所有同步任务结果算出(i=100),再在nextTick中更新DOM,而不是更新100次DOM网上说,浏览器先执行同步任务-微任务-UIrending,如果用宏任务来做nextTick,

2020-09-18 11:01:35 207

原创 浏览器渲染

问: 输入url到页面展示发生了什么?答:发生了5步DNS解析从本地-服务器根域名往下查,例如www.google.com,顺序是 .(根服务器) .com(.com服务器) .google.com(googlle.com服务器),解析到ip后存在本地。tip: dns缓存、DN负载均衡(dns返回就近的ip地址,CDN就是利用的这项重定向技术)TCP连接3次握手发送...

2019-12-29 09:50:22 68

原创 http缓存

面试被问到什么是http缓存,一脸茫然,所以查询并记录下来。1.产生原因想服务器重复发送请求时,网络上传来传去都是一份数据,造成浪费2.解决办法将内容缓存到本地磁盘或者缓存服务器中,加速访问且减轻源服务器负担3.具体操作response header中加入expires,浏览器在指定日期前访问本地(?)缓存即可;espires到期后再访问,请求头加入上次修改时间,服务器判断如果与内...

2019-12-25 11:14:54 109 1

原创 vue项目通过axios配置后台接口步骤

配置axiosvar axiosInstance = axios.create(config);//新建实例 config = { //配置参数 baseURL: headers: {Content-Type: x-www-form-urlencoded},//表格格式提交 transformRequest: [data=>{qs.stringify(data)...

2019-12-10 13:20:20 1233

原创 vue+webpack打包步骤

最简单的目录结构如下所示:新建demo文件夹,作为根目录;首先npm init ,生成package.json;局部安装webpack,这时package.json里会多一项配置;’安装webpack-dev-serve;————然后很快就可以启动webpack工程了————webpack就是个.js配置文件,也就是配置webpack.config.js依次配置入口(Entry)和出...

2019-12-05 17:17:43 593

原创 js设计模式-中介者模式(10)

问题场景很多对象之间关系复杂,牵一发动全身。解决思路引入中介者来通信,将网状结构变为一对多的结构。具体实现中介者和对象通信:1.中介者暴露接口,对象把自身传过去共中介者识别。2.使用订阅-发布模式优缺点优点: 使得对象之间解耦,提高代码复用性缺点:依赖中介者,它一旦挂了所有对象都挂,而他自身就是个复杂的难维护的对象。启发:只有对象之间的复杂耦合导致维护困难,且耦合度随项目呈...

2019-12-02 16:15:56 70

原创 js设计模式-享元模式(8)

问题场景大量相似对象导致性能下降解决思路将对象中公共属性(内部状态)提取出来作为共享对象创建并复用之,其他属性(外部状态)在运行时动态添加到共享对象,从而减少对象数量,以时间换空间。简单来说: 把10个人穿10条裤子换成1个人传子,减少了人的数量优化:(1) 一开始可能不需要共享对象——解决:用对象工厂。需要时才从工厂创建;(2)外部状态很多时,与共享对象的联系杂乱——解决:...

2019-11-28 11:28:43 109

原创 es6看不懂的地方

对象(Object)之所以没有默认部署 Iterator 接口,是因为对象的哪个属性先遍历,哪个属性后遍历是不确定的,需要开发者手动指定。本质上,遍历器是一种线性处理,对于任何非线性的数据结构,部署遍历器接口,就等于部署一种线性转换。不过,严格地说,对象部署遍历器接口并不是很必要,因为这时对象实际上被当作 Map 结构使用,ES5 没有 Map 结构,而 ES6 原生提供了用for in遍历对象...

2019-11-28 09:08:50 309

原创 js设计模式-模板方法模式(7)

问题场景平行的子类间有共同的重复的方法,和确定的执行顺序。解决思路将相同的方法上移到父类(抽象方法和具体方法),并用init模板方法来指定执行顺序,子类仅需各自实现抽象方法即可。对于特殊的方法,可用钩子方法在子类中指明。具体实现var PersonDay = function () {};PersonDay.prototype.eatBreakfirst = function()...

2019-11-26 10:09:04 84

原创 js设计模式-组合模式(6)

问题场景操作层层嵌套的数据结构解决思路提供叶对象和组合对象构成的树形结构,组合对象调用叶对象的同名接口,客户只需知道顶层对象即可遍历整个结构,且添加新对象后不用修改现有代码。具体实现var Folder = function (name) { this.name = name; this.files = []; this.parent = null;};Folder...

2019-11-25 16:21:46 83

原创 js设计模式-命令模式(5)

问题场景调用者和执行者彼此不了解,双方约定调用command.execute方法实现解耦解决思路将执行者具体实现优缺点

2019-11-18 11:31:16 62

原创 js设计模式-发布订阅模式(4)

问题场景A事件发生后,BCD等也会发生,还有可能有EF…等,采用回调函数会使得程序僵硬解决思路引入中介对象(E),A发生后通知E,E再通知BCD等(BCD先从Event订阅A,A发布后触发各自事件)具体实现var Event = (function(){ cache = [], listen = function(key, fn) { if(!cache[key]) { ...

2019-11-14 12:14:25 47

原创 js设计模式-代理模式(3)

问题场景预加载图片的,把预加载和设置图片src放在一个函数内部,导致低聚和高耦合;某操作(如点击同步服务器)频繁向服务器发送请求,实际无需这么频繁;存储函数计算结果,下次相同的参数调用直接返回缓存即可。解决思路提供一个代理对象,来减少/控制对实体对象的访问,包括保护代理和虚拟代理。具体实现var myImg = (function(){ var imgNode = documen...

2019-11-09 17:41:14 72

原创 js设计模式-策略模式(2)

问题场景根据条件不同有多种算法,需用许多if-else包括所有情况导致代码臃长解决思路保留不变的(接收客户参数,调用算法),封装变化的(算法的实现)。具体实现1.传统面向对象(略);2.js实现var Context = function(strategy){ Strategy[strategy](arguments);}var Strategy = { 's0': fu...

2019-11-04 11:35:02 69

原创 js设计模式-单例模式(1)

问题情境有些节点如登录浮窗,*且可以全局访问? *只需有一个实例即可,重复实例化多个比较耗资源解决思路实例化之前加个判断(flag),若创建过则直接返回当前实例。具体实现1.传统面向对象,用类的属性来保存instance Singleton.instance = null; Singleton.getInstance = function(){ if (!this.i...

2019-11-03 10:44:20 84

原创 js设计模式--状态模式(12)

问题场景状态不同,某个方法的具体操作不同。方法庞大,充斥if-else语句解决思路把状态从context中抽离出来。状态内部封装同一方法的不同行为,context把请求委托给状态对象具体操作 JavaScript无需创建状态类,也不需事先让一个对象持有另一个对象(传统面向对象,是互相引用,context和state互相持有对象实例),可直接调用相应的方法(对象字面量的属性或者...

2019-11-01 16:30:24 102

原创 js设计模式-装饰者模式(11)

存在的问题:给对象添加功能一般用继承,继承存在的问题:1、超类中添加的功能会影响所有的子类;2、破坏了封装性;3、有可能创建出大量子类解决思路:程序运行期间给对象增加职责(有点类似享元模式?)具体做法:包装器,obj.a方法,包装后成为obj.a =function(){ obj.a(); newfn() };动态织入:after before函数Function.protot...

2019-10-29 10:30:27 72

原创 js设计模式--职责链模式(9)

问题情境:充斥多层嵌套的分支,代码繁复解决思路把函数从大化小,每一层抽象成一个方法,方法间解耦。具体做法1.链表结构,每一层是一个节点,包含该层方法和指向下一层的指针。用两个函数分别指定下一层函数(函数1)和调用函数(函数2)。难点和精髓是,函数2(passRequest)是个递归函数,先调用this,若this无法解决则进入递归,并把下一级节点作为this传递进去。 Chain....

2019-10-28 10:47:55 59

原创 异步解决方案:回调函数

百度前端学院看到一段话: 异步JavaScript和XML这不是一个全新的技术,而是利用已有的js/css/xml等技术达到前端数据及时更新的效果.对用户而言,前端页面的刷新就是点击页面刷新按钮 或者F5实现页面内容的刷新。甚至有很多人不知道页面刷新这个概念…… 页面刷新的目的是让页面从新从服务器获取数据,通常是在页面长时间未更新数据,至于多长时间算长,没有定论,几分钟、半小时、n小时都可以说是...

2019-08-28 14:22:41 692

原创 js语言精粹-第四章函数

第四章函数调用方式 方法调用var myObject = { value: 0, increment: function (inc) { this.value += typeof inc === 'number' ? inc : 1 ; } }; myObjcet.increment();//这是调用object对象的属性,也就是的方法调用 document.write(myObj...

2019-08-27 16:57:50 147

空空如也

空空如也

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

TA关注的人

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