喔喔屋

断剑重铸之日


  • 首页

  • 标签

  • 分类

  • 归档

《汇编语言》

发表于 2019-06-01 | 分类于 知识点
字数统计: 2.3k | 阅读时长 ≈ 8

现在我们的生活离不开计算机,但是计算机是怎么识别用户的指令从而完成一系列的操作?通过这本书,可以大致理解计算机工作的基本原理,扩充自己的知识点。

基础知识

  1. 汇编指令(mov ax,bx)是机器指令(1000100111011000)的助记符,同机器指令一一对应,两者转换需要编译器。用高级语言描述(ax = bx)。
  2. 每一种CPU都有自己的汇编指令集。
  3. CPU可以直接使用的信息在存储器中存放。
  4. 在存储器中的指令和数据没有任何区别,都是二进制信息。
  5. 存储单元从零开始顺序编号。
  6. 一个存储单元可以存储8个bit,即8位二进制数。
  7. 1 Byte = 8 bit; 1 KB = 1024 Byte; 1 MB = 1024 KB; 1 GB = 1024 MB
  8. 每一个CPU芯片都有许多管脚,这些管脚和总线相连。也可以说,这些管脚引出总线。一个CPU可以引出3种总线的宽度标志了这个CPU的不同方面的性能:
    (1)地址总线的宽度决定的CPU的寻址能力
    (2)数据总线的宽度决定了CPU与其他器件进行数据传送时的一次数据传送量
    (3)控制总线的宽度决定了CPU对系统中其他器件的控制能力

    最终运行程序的是CPU,我们用汇编语言编程时,必须要从CPU的角度考虑问题。对CPU来讲,系统中的所有存储器中的存储单元都处于一个统一的逻辑存储器中,他的容量受CPU寻址能力的限制。这个逻辑存储器即是我们所说的内存地址空间。

阅读全文 »

校验密码不能出现6位以上的连续字符

发表于 2019-05-28 | 分类于 JavaScript
字数统计: 345 | 阅读时长 ≈ 1

需求: 实时校验用户输入的密码,如果出现连续的6位或以上的数字、字母,则给出提示,校验不通过。比如123456、456789、abcdef、ABCDEFG。

思路: 连续性可以通过字符的ASCII码是否相差1来判断。由于最低只要出现六位的连续字符就不予通过,所以我们只需判断密码中随机的六位连续字符,也就是说当用户输入的密码达到6位时,开始校验。

实现代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
let testData = '1234dsadsa' // 数据是随用户输入实时变化的
let len = testData.length
let flag = true // 是否通过校验
if (len > 5) { // 输入第六位时开始校验
flag = verification(len)

function verification(index) {
let reg = /^[0-9]*$/
let count = 0 // 记录连续字符出现的次数
for (let i = index - 5; i < index; i++) {
let current = reg.test(testData[i - 1]) ? testData[i - 1] : testData[i - 1].charCodeAt() // 字符如果为英文则转成ASCII码
let next = reg.test(testData[i]) ? testData[i] : testData[i].charCodeAt()
if (next - current === 1) { // 相差为1:升序
count += 1
}
}
if (count > 4) { // 有6位连续数
return false
} else if (count < 5 && index > 6) { // 输入大于6位且最后6位没有连续,继续校验倒数第二位到倒数第7位,以此类推到数据前6位
return verification(index - 1) // 递归
} else {
return true
}
}
}
console.log(flag)

《网络是怎样连接的》

发表于 2019-05-23 | 分类于 知识点
字数统计: 3.2k | 阅读时长 ≈ 11

通过这本书了解到客户端(浏览器)发出请求到服务器返回响应这一过程中发生了哪些事情,网络中各种设备怎么协调工作,最终达到用户的需求。

完整的请求过程如下:
浏览器(发送请求) –> TCP/IP协议 –> 网卡驱动 –> 集线器 –> 路由器 –> 接入网 –> 电话局 –> 网络运营商 –> (光纤、双绞线) –> 网络运营商 –> 电话局 –> 接入网 –> 防护墙 –> 缓存服务器 –> 网卡驱动 –> TCP/IP协议 –> 服务器程序

浏览器:

  1. 生成 HTTP 请求消息
    浏览器的第一步工作就是对输入的 URL 进行解析。URL开头表示访问数据源的机制,也就是协议(http或者ftp),“//”后面的字符串表示服务器的名称“www.baidu.com”, 接着表示数据源(文件)的路径名。

    a

    HTTP 中主要的头字段
    a
    a
    a

    1 条请求消息中只能写 1 个 URI。如果需要获取多个文件,必须对每个文件单独发送 1 条请求。

  2. 向 DNS 服务器查询 Web 服务器的 IP 地址
    Socket 库是用于调用网络功能的程序组件集合,提供查询 IP 地址的功能。根据域名查询 IP 地址时,浏览器会使用 Socket 库中的解析器。

  3. 全世界 DNS 服务器的接力
    DNS 服务器会从域名与 IP 地址的对照表中查找相应的记录,并返回 IP 地址。 客户端(www.baidu.com) –> 最近的DNS服务器 –> 根域 –> com –> baidu –> www, 可以通过缓存加快 DNS 服务器的响应

  4. 委托协议栈发送消息
    向操作系统内部的协议栈发出委托时,需要按照指定的顺序来调用 Socket 库中的程序组件。(1)创建套接字(创建套接字阶段)(2)将管道连接到服务器端的套接字上(连接阶段)(3)收发数据(通信阶段)(4)断开管道并删除套接字(断开阶段) 应用程序是通过“描述符”这一类似号码牌的东西来识别套接字的。描述符:应用程序用来识别套接字的机制;IP 地址和端口号:客户端和服务器之间用来识别对方套接字的机制

阅读全文 »

Vue.js项目seo解决方案--预渲染

发表于 2019-03-24 | 分类于 Vue.js
字数统计: 1k | 阅读时长 ≈ 3

公司基于Vue.js做的网站上线后,发现爬虫根本爬取不了网站的信息,导致网站排名很低并且提升不了,让我找找有什么方法可以解决。查询相关资料后,发现网站是vue单页面架构,客户端渲染,首屏加载慢,对seo特别不友好(爬虫只能爬到js信息)。要解决这个问题,目前知道两种方案:

  1. SSR(服务端渲染)–通过node.js做中间层,取服务端的数据渲染好页面之后再发送给浏览器,这样网络爬虫就能获取到网页信息。相关插件有Nuxt.js,但是这种方案项目必须重新架构,页面上一些钩子函数也需重新编写,花费时间人力比较长,被我pass掉。
  2. 预渲染–通过插件把vue单页面静态打包成html页面,这样浏览器访问的就是一个静态的html文件,开发成本低。只需要在项目webpack打包部署时配置相关信息,就能解决seo的问题。

阅读全文 »

《算法图解》

发表于 2019-02-12 | 分类于 知识点
字数统计: 1.6k | 阅读时长 ≈ 5
这几天看完了《算法图解》这本书,确实这是一本好的算法入门书。在此记录一些书中的知识点。
  1. 算法运行时间并不以秒为单位,用大O表示法表示,是从其增速的角度度量的。算法的速度指的并非时间, 而是操作数的增速。谈论算法的速度时, 我们说的是随着输入的增加, 其运行时间将以什么样的速度增加。大O表示法指出了最糟情况下的运行时间。比如把一张正方形的纸平均裁成16份,一种方式是算出每一份的大小,一份一份的裁,一共要操作16次。这种裁法用算法时间O(n)来表示,也称线性时间,另一种方法就是对折4次再裁就能得到均分的16份,这种操作数只需4次,用大O表示法O(log n ),也称对数时间。O(log n )比O(n )快, 当需要搜索的元素越多时, 前者比后者快得越多。
    (1) O (log2 n ), 也叫对数时间 , 这样的算法包括二分查找。
    (2) O (n ), 也叫线性时间 , 这样的算法包括简单查找。
    (3) O (n * log2 n ), 这样的算法包括快速排序——一种速度较快的排序算法。
    (4) O (n 2 ), 这样的算法包括选择排序——一种速度较慢的排序算法。
    (5) O (n !), 这样的算法包括旅行商问题的解决方案——一种非常慢的算法。
阅读全文 »
1…345…7
邱仁亮

邱仁亮

我才发现梦想与现实之间差别

31 日志
10 分类
17 标签
RSS
GitHub E-Mail
Links
  • 学习资源
  • Web前端导航
© 2018 — 2020 邱仁亮 | Site words total count: 41.5k