队列

队列

队列最大的特点就是先进先出,主要的两个操作是入队和出队。跟栈一样,它既可以用数组来实现,也可以用链表来实现。用数组实现的叫顺序队列,用链表实现的叫链式队列。

栈是一种“操作受限”的线性表,只允许在一端插入和删除数据。 后进者先出,先进者后出,这就是典型的“栈”结构。

当某个数据集合只涉及在一端插入和删除数据,并且满足后进先出、先进后出的特性,我们就应该首选“栈”这种数据结构。

实际上,栈既可以用数组来实现,也可以用链表来实现。用数组实现的栈,我们叫作顺序栈,用链表实现的栈,我们叫作链式栈。

链表

数组需要一块连续的内存空间来存储,对内存的要求比较高。
链表不需要一块连续的内存空间来存储,它通过“指针”将一组零散的内存块串联起来使用
三种最常见的链表结构:单链表、双向链表和循环链表

算法的时间复杂度与空间复杂度分析

我们都知道,数据结构和算法本身解决的是“快”和“省”的问题,即如何让代码运行得更快,如何让代码更省存储空间。所以,执行效率是算法一个非常重要的考量指标。那如何来衡量你编写的算法代码的执行效率呢?这里就要用到我们今天要讲的内容:时间、空间复杂度分析。

如何高效的学习数据结构与算法

你是否曾跟我一样,因为看不懂数据结构和算法,而一度怀疑是自己太笨?实际上,很多人在第一次接触这门课时,都会有这种感觉,觉得数据结构和算法很抽象,晦涩难懂,宛如天书其实真正的原因是你没有找到好的学习方法,没有抓住学习的重点。实际上,数据结构和算法的东西并不多,常用的、基础的知识点更是屈指可数。只要掌握了正确的学习方法,学起来并没有看上去那么难,更不需要什么高智商、厚底子

如何做好前端页面异常监控?

在开发工作中难免会出现 bug,一般项目都是测试检查通过后就可以发线上,可是在线上仍旧会出现各种意料之外或者未测试到的问题,这个时候有的用户会向客服反馈说哪里哪里有问题,这是一种被动的错误上报方式,毕竟不是所有的用户都会上报问题,更多的则是出现问题后直接离开我们的 APP。所以异常监控这块就显得越来越重要。

如何使用charles抓包H5页面内容

安装 charles

这里推荐直接去官网下载 https://www.charlesproxy.com/latest-release/download.do
根据自己的电脑选择合适的安装包,我这里选择 macOS dmg 格式安装包。安装好后直接运行,第一次是试用版

破解方法

考虑到自己经常使用这个抓包,就在网上搜了下破解方法
方法一:
Registered Name: https://zhile.io
License Key: 48891cf209c6d32bf4
直接用上面的注册码,点击 help->register Charles 输入上面提供的注册码,输完确定后重新启动 charles 即可
方法二:
访问https://www.zzzmode.com/mytools/charles/ 根据页面提示完成操作

抓取 http 报文

想要抓取手机上 H5 页面可按照一下步骤:

  1. 将手机和电脑连接在同一个网络上,电脑和手机连接同一 WIFI
  2. 在 Mac 上系统偏好设置->网络面板可查看到自己电脑的 ip
  3. 在手机连接上同一 WIFI 后,修改网络,设置代理,填写服务器主机名为第 2 步中查看到的自己电脑的 ip,服务器端口为 8888,点击保存
  4. 此时在手机上访问的 http 协议页面在 charles 上都能看到网络请求

抓取 https 报文

想要抓取 https 报文,必先安装证书,如果是想抓取 mac 浏览器访问的 https 页面,mac 得安装证书,同理如果是想抓取手机访问 https 页面,手机得安装证书

mac 上证书安装

  1. 点击 help -> SSL proxying -> install charles root certificate 密码授权
  2. 在弹出的添加证书窗口中,选择添加,可以看到在钥匙串访问窗口中,该证书已成功添加,但是此时该证书仍然不被信任
  3. 双击此证书,在弹出的 Charles Proxy CA 窗口中,点击信任按钮,使用此证书时,选择始终信任后关闭窗口,使用账号和密码授权后,即可看到此证书已经被信任了

此时 mac 上访问的 https 页面在 charles 上能看到网络请求了

手机上证书安装

  1. 手机和电脑连接同一网络后,用手机默认浏览器访问http://chls.pro/ssl 下载 pem 证书
  2. 安装证书,这里不同的手机安装证书方式不同,我这里已 huawei 手机为例 设置->安全和隐私 ->更多安全设置 -> 加密和凭据 -> 从存储设备安装 点击刚才下载的 pem 证书 即可安装完成。
    此时手机上访问的 https 页面也可以在 charles 上看到网络请求了

如何用 charles 过滤请求

在用 charles 抓包请求时会看到有很多请求并不是自己想要的,这时候我们需要学会过滤出自己想要的请求。
过滤方法有三种

  1. 在主界面的中部的 Filter 栏中输入需要过滤出来的关键字

  2. 菜单栏选择 “Proxy”->”Recording Settings”,在弹出的窗口中选择 Include 栏,再点击“Add”,在弹出的窗口中输入需要监控的协议,主机地址,端口号等信息,来添加一个项目。如下图所示:

  3. 在想过滤的网络请求上右击,选择 “Focus”,之后在 Filter 一栏勾选上 Focussed 一项,如下图所示:

charles 如何限制网速,模拟弱网环境

选择 Proxy->Throtting Setting,打开后如下图设置

charles 如何修改请求的响应内容

选中要修改的请求,右击选择 Map Local 在 Edit Mapping 弹窗中选择一个本地文件(自己修改后的请求)作为请求的响应内容

charles 如何代理 localhost

因为某些系统硬编码使得 localhost 的流量不走系统代理,导致 charles 无法代理 localhost
解决方法
第一步: 修改 host 将 127.0.0.1 指向localhost.charlesproxy.com
第二步:在浏览器中请求 localhost.charlesproxy.com:8080

以上这三步就可以在 charles 中捕获到 localhost 中的请求了,方便后面修改请求的响应内容

这里使用 8080 端口是因为我本地开启的服务就是在 8080 端口上

参考文章:

  1. Charles

hexo博客替换更高级的Markdown渲染器

一直在用 Hexo 写博客,感觉也挺方便的,但是用着用着就发现 hexo 的默认 markdown 渲染器太低级了,很多东西不支持。于是想着扩展下 markdown 渲染器,在网上搜了下解决办法,于是发现了hexo-renderer-markdown-it,安装使用方法就不介绍了在 github 上都有,今天主要介绍了扩展了那些功能,方便查阅直接使用。以下就是我安装使用的扩展

- markdown-it-attrs
- markdown-it-deflist
- markdown-it-emoji
- markdown-it-footnote
- markdown-it-ins
- markdown-it-mark
- markdown-it-sub
- markdown-it-sup
- markdown-it-checkbox
- markdown-it-container

规范Git Commit提交记录和版本发布记录

在开发过程中我们一般都会用到git管理代码,在git commit提交代码时我们一般对git commit message随便写点简单的描述,可是随着项目参与人数的增多,发现提交的commit记录越来越杂乱,不便查阅,在网上找了下解决方案,总结一下方便在公司项目中运用。

Base64编码原理及应用

最近在做一个H5上传图片并压缩的项目,其过程主要是先将图片上传通过readAsDataURL获取上传图片base64编码,然后根据高宽比将图片画到canvas上实现压缩,在通过toDataURL获取压缩后的图片。点击可查看demo在该过程中用到base64编码,于是就想弄清楚base64编码原理,才有了这篇博客。

CSS 计数器详解

在前端开发中总少不了列表项,对于列表项序号,射鸡师一般会列出个1,2,3…序号。在不了解css计数器属性之前,我一般会用精灵图,用类名来区分序列号图片。这样做尽管可以达到目的,但是很不方便,开发过程耗时较长而且维护修改起来较困难。用css counter配合伪类的content完美的解决了这个问题,这里详细介绍下css counter属性

为什么使用HTTP2?

最近我们公司的官网由原来的http1.1已升级到http2,而我们前端开发对http2还是一片懵懂,更不知道为何换成了这个,故此补充了下http2的相关知识。

Docker的安装与使用介绍

docker 是什么?

Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。
Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
容器是完全使用沙箱机制,相互之间不会有任何接口,更重要的是容器性能开销极低。

《Node.js权威指南》--读书笔记

第一章 node.js 介绍

非阻塞型 I/O 机制

当在访问数据库取得搜索结果的时候,在开始访问数据库之后,数据库返回结果之前,存在一段等待时间。
在传统的单线程处理机制中,在执行了访问数据库的代码之后,整个线程都将暂停下来,等待数据库返回查询结果之后才能继续执行后面的代码。这是 I/O 型阻塞
node.js 中在执行了访问数据库的代码之后将立即执行其后面的代码段,把数据库返回的结果的处理代码放在回调函数中。这是非阻塞型 I/O 机制