cosyer's Blog

Blog


  • 首页

  • 友链

  • 留言板

  • 归档

  • 关于

  • 搜索
10月
04
更新于
10月04
2020
JS

算法题练习

发表于 2020-04-23 | 热度 ℃
| 字数统计: 2,262 (字) | 阅读时长: 11 (分钟)

五大算法

  • 贪心算法:局部最优解法
  • 分治算法:分成多个小模块,与原问题性质相同
  • 动态规划:每个状态都是过去历史的一个总结
  • 回溯法:发现原先选择不优时,退回重新选择
  • 分支限界法:按广度优先策略搜索问题的解空间树,适合求解最优化问题

数据树

  • 二叉树: 最多只有两个子节点

    • 完全二叉树
      • 若设二叉树的深度为k,除第 k 层外,其它各层 (1~k-1) 的结点数都达到最大个数,第k 层所有的结点都连续集中在最左边
    • 满二叉树
      • 深度为 h, 有 n 个节点,且满足 n = 2^h - 1
    • 平衡二叉树
      • 它或者是一颗空树,或它的左子树和右子树的深度之差(平衡因子)的绝对值不超过1,且它的左子树和右子树都是一颗平衡二叉树
    • 最优二叉树(哈夫曼树)
      • 树的带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree)。哈夫曼树是带权路径长度最短的树,权值较大的结点离根较近。
  • 二叉查找树: 是一种特殊的二叉树,能有效地提高查找效率

    • 小值在左,大值在右
    • 节点 n 的所有左子树值小于 n,所有右子树值大于 n

binary-search-tree

  • 遍历节点
    • 前序遍历
      • 根节点
      • 访问左子节点,回到 1
      • 访问右子节点,回到 1
    • 中序遍历
      • 先访问到最左的子节点
      • 访问该节点的父节点
      • 访问该父节点的右子节点, 回到 1
    • 后序遍历
      • 先访问到最左的子节点
      • 访问相邻的右节点
      • 访问父节点, 回到 1

DLR–前序遍历(根在前,从左往右,一棵树的根永远在左子树前面,左子树又永远在右子树前面 )

dlr

LDR–中序遍历(根在中,从左往右,一棵树的左子树永远在根前面,根永远在右子树前面)

ldr

LRD–后序遍历(根在后,从左往右,一棵树的左子树永远在右子树前面,右子树永远在根前面)

lrd

  • 插入与删除节点

阅读全文 »
9月
13
更新于
9月13
2020
JS

详解 Cookie、 LocalStorage 与 SessionStorage

发表于 2018-06-23 | 热度 ℃
| 字数统计: 1,755 (字) | 阅读时长: 7 (分钟)

Cookie(属于文档对象模型DOM树根节点document)

Cookie 是小甜饼的意思。顾名思义,cookie 确实非常小,它的大小限制为4KB左右。它的主要用途有保存登录信息,比如你登录某个网站市场可以看到“记住密码”,这通常就是通过在 Cookie 中存入一段辨别用户身份的数据来实现的。

localStorage(属于浏览器对象模型BOM的对象window)

localStorage 是 HTML5 标准中新加入的技术,它并不是什么划时代的新东西。早在 IE 6 时代,就有一个叫 userData 的东西用于本地存储,而当时考虑到浏览器兼容性,更通用的方案是使用 Flash。而如今,localStorage 被大多数浏览器所支持,如果你的网站需要支持 IE6+,那以 userData 作为你的 polyfill 的方案是种不错的选择。

缺点:

  1. 存储容量限制,大部分浏览器应该最多5M。
  2. 仅支持字符串,如果是存对象还需要将使用JSON.stringify和JSON.parse方法互相转换,有些啰嗦。
  3. 读取都是同步的。大多数情况下,还挺好使的。但如果存储数据比较大,例如一张重要图片base64格式存储了,读取可能会有可感知的延迟时间。

sessionStorage

sessionStorage 与 localStorage 的接口类似,但保存数据的生命周期与 localStorage 不同。做过后端开发的同学应该知道 Session 这个词的意思,直译过来是“会话”。而 sessionStorage 是一个前端的概念,它只是可以将一部分数据在当前会话中保存下来,刷新页面数据依旧存在。但当页面关闭后,sessionStorage 中的数据就会被清空。


阅读全文 »
9月
13
更新于
9月13
2020
知识

Http请求概述

发表于 2018-08-14 | 热度 ℃
| 字数统计: 4,714 (字) | 阅读时长: 17 (分钟)

超文本传输协议(HTTP, HyperText Transfer Protocol)是一种无状态的协议,它位于OSI七层模型的传输层。HTTP客户端会根据需要构建合适的HTTP请求方法,而HTTP服务器会根据不同的HTTP请求方法做出不同的响应。


阅读全文 »
9月
13
更新于
9月13
2020
JS

Promise诞生记

发表于 2018-06-05 | 热度 ℃
| 字数统计: 3,070 (字) | 阅读时长: 14 (分钟)
Promise

前端近年的兴起,有大部分是因为 NodeJS 的诞生,而 NodeJS 是个适用于 异步IO 密集型的语言,一些基于 NodeJS 的框架,比如 KOA2、Adonis 就有大量的 async 和 await 语法,async的函数的返回值就是 Promise 对象,我们可以用 async 和 await 语法,写出优雅的异步代码,来替换难看且难维护的回调函数。

Promise 概念(JS的 Promise是未来事件的表示)

Promise是一种对异步操作的封装,主流的规范是Promise/A+。 Promise可以使得异步代码层次清晰,便于理解,且更加容易维护。 Promise 可以以成功结束:用行话说我们已经解决了resolved(fulfilled)。 但如果 Promise 出错,我们会说它处于拒绝(rejected )状态。 Promise 也有一个默认状态:每个新的 Promise 都以挂起(pending)状态开始。 Promise构造函数接受一个函数作为参数,该函数的两个参数分别是resolve和reject。它们是两个函数,由 JavaScript 引擎提供,不用自己部署。 生成实例时回执信作为参数的函数;
resolve函数的作用是,将Promise对象的状态从“未完成”变为“成功”(即从 pending 变为 fulfilled),在异步操作成功时调用,并将异步操作的结果,作为参数传递出去; reject函数的作用是,将Promise对象的状态从“未完成”变为“失败”(即从 pending 变为 rejected),在异步操作失败时调用,并将异步操作报出的错误,作为参数传递出去。


阅读全文 »
9月
08
更新于
9月08
2020
知识

正确设置网站title、keywords、description

发表于 2018-06-22 | 热度 ℃
| 字数统计: 1,519 (字) | 阅读时长: 5 (分钟)

阅读全文 »
9月
08
更新于
9月08
2020
JS

JavaScript整理总结

发表于 2018-06-21 | 热度 ℃
| 字数统计: 11,290 (字) | 阅读时长: 51 (分钟)

JS的相关知识点比较繁杂,特此开篇整理一波,方便回顾总结查阅。

  • 运行在宿主环境环境中,比如浏览器或node环境
  • 不用预编译,直接解释执行代码
  • 是弱类型语言,较为灵活
  • 与操作系统无关,跨平台的语言
  • 脚本语言,解释性语言

阅读全文 »
9月
08
更新于
9月08
2020
Node

关于node的那些事(进阶篇)

发表于 2020-07-02 | 热度 ℃
| 字数统计: 1,802 (字) | 阅读时长: 7 (分钟)

👨提问:注册路由时 app.get、app.use、app.all 的区别是什么?

app.use(path,callback)

app.use是express用来调用中间件的方法。中间件通常不处理请求和响应,一般只处理输入数据,并将其交给队列中的下一个处理程序,比如下面这个例子app.use (‘/user’),那么只要路径以 /user 开始即可匹配,如 /user/tree 就可以匹配。

app.all()

app.all 是路由中指代所有的请求方式,用作路由处理,匹配完整路径,在app.use之后可以理解为包含了app.get、app.post等的定义,比如app.all(‘/ user/tree’),能同时覆盖:get(‘/user/tree’) 、 post(‘/user/tree’)、 put(‘/user/tree’) ,不过相对于app.use()的前缀匹配,它则是匹配具体的路 由。

all完整匹配,use只匹配前缀


阅读全文 »
9月
08
更新于
9月08
2020
Node

关于node的那些事(基础篇)

发表于 2020-06-21 | 热度 ℃
| 字数统计: 2,191 (字) | 阅读时长: 9 (分钟)

👨提问:最近Deno很火,会不会替代node的替代品,学node是不是没有前途?

莫慌,Node依旧是社区热捧的服务器端 JavaScript 运行环境,Deno的出现其实本质上是完善现阶段的Node(新轮子),包括原生支持TS、安全性、支持ES Module浏览器模块、等特征。万变不离其宗,虽然有了Deno,将来可能就不需要 Node.js,但是新事物总是需要不断推演和考验后,所以这一点而言,Node短时间内很 难被替换,毕竟背后依附着强大社区的支撑。

node 如何获取命令行传来的参数?

process.argv。process是一个全局变量,它提供当前 Node.js 进程的有关信息,而process.argv 属性则返回一个数组,数组中的信息包括启动Node.js进程时的命令行参数。

  • process.argv[0] : 返回启动Node.js进程的可执行文件所在的绝对路径
  • process.argv[1] : 为当前执行的JavaScript文件路径
  • process.argv.splice(2) : 移除前两者后,剩余的元素为其他命令行参数(也就是我们自定义部分)
1
2
3
4
5
6
7
8
9
"script": {
"serve": "node test.js arg1 arg2 arg3"
}

// test.js
const arguments = process.argv.splice(2) // [arg1, arg2, arg3]

// 结合commander
commander.parse(process.argv)

阅读全文 »
9月
08
更新于
9月08
2020
知识

HTML中p标签中插入div标签会发生什么

发表于 2020-09-02 | 热度 ℃
| 字数统计: 116 (字) | 阅读时长: 1 (分钟)

面试遇到了问题:<p>中能不能插入<div>? 插入<div>会如何?

先直接实践下:

div1

我们可以看到,

把

分成了两段, 并且div外字段并不在

内。把div变成行内块级元素也不行。

div2

解答: 可以在HTML标准(https://www.w3.org/TR/html401/struct/text.html#h-9.3.1)中看到,

虽然是块级元素, 但是只能包含行内元素, 不能包含块级元素(包括

自己)

div3

over!

9月
08
更新于
9月08
2020
知识

浏览器兼容问题总结

发表于 2019-09-01 | 热度 ℃
| 字数统计: 1,061 (字) | 阅读时长: 4 (分钟)
  1. png24位的图片在iE6浏览器上出现背景,解决方案是做成PNG8.

  2. 浏览器默认的margin和padding不同。解决方案是加一个全局的*{margin:0;padding:0;}来统一

  3. IE6双边距bug:块属性标签float后,又有横行的margin情况下,在ie6显示margin比设置的大。

浮动ie产生的双倍距离 #box{ float:left; width:10px; margin:0 0 0 10px;}

这种情况之下IE会产生20px的距离,解决方案是在float的标签样式控制中加入 display:inline;将其转化为行内属性。(这个符号只有ie6会识别)

1
2
3
4
5
6
.bb{
background-color:red;/*所有识别*/
background-color:#00deff\9; /*IE6、7、8识别*/
+background-color:#a200ff;/*IE6、7识别*/
_background-color:#1e0bd1;/*IE6识别*/
}

阅读全文 »
1…345…16
陈宇(cosyer)

陈宇(cosyer)

不去做的话永远也做不到。

159 日志
10 分类
51 标签
RSS
GitHub Twitter E-Mail FB Page
推荐阅读
  • Callmesoul
  • JsTips
  • Personal Site
  • Resume
© 2021 陈宇(cosyer)
终于等到你(UV):   |   欢迎再来(PV):
Blog总字数: 312.5k字
苏ICP备17005342号-1