队列
队列最大的特点就是先进先出,主要的两个操作是入队和出队。跟栈一样,它既可以用数组来实现,也可以用链表来实现。用数组实现的叫顺序队列,用链表实现的叫链式队列。
队列最大的特点就是先进先出,主要的两个操作是入队和出队。跟栈一样,它既可以用数组来实现,也可以用链表来实现。用数组实现的叫顺序队列,用链表实现的叫链式队列。
栈是一种“操作受限”的线性表,只允许在一端插入和删除数据。 后进者先出,先进者后出,这就是典型的“栈”结构。
当某个数据集合只涉及在一端插入和删除数据,并且满足后进先出、先进后出的特性,我们就应该首选“栈”这种数据结构。
实际上,栈既可以用数组来实现,也可以用链表来实现。用数组实现的栈,我们叫作顺序栈,用链表实现的栈,我们叫作链式栈。
数组需要一块连续的内存空间来存储,对内存的要求比较高。
链表不需要一块连续的内存空间来存储,它通过“指针”将一组零散的内存块串联起来使用
三种最常见的链表结构:单链表、双向链表和循环链表
我们都知道,数据结构和算法本身解决的是“快”和“省”的问题,即如何让代码运行得更快,如何让代码更省存储空间。所以,执行效率是算法一个非常重要的考量指标。那如何来衡量你编写的算法代码的执行效率呢?这里就要用到我们今天要讲的内容:时间、空间复杂度分析。
你是否曾跟我一样,因为看不懂数据结构和算法,而一度怀疑是自己太笨?实际上,很多人在第一次接触这门课时,都会有这种感觉,觉得数据结构和算法很抽象,晦涩难懂,宛如天书其实真正的原因是你没有找到好的学习方法,没有抓住学习的重点。实际上,数据结构和算法的东西并不多,常用的、基础的知识点更是屈指可数。只要掌握了正确的学习方法,学起来并没有看上去那么难,更不需要什么高智商、厚底子
由于主流浏览器都只支持 HTTP/2 Over TLS,也就是说当前 HTTP/2 网站都使用了 HTTPS,数据传输都经过了 SSL 加密。
所以默认情况下,Wireshark 抓到的包是这样的,SSL 层之上的协议细节完全看不到
最近在开发调试微信小程序,开发完成后用自己的安卓手机查看体验版时,打开 fiddler 抓包代理工具,发现小程序获取列表失败并报 request:fail-202:net:ERR_CERT_AUTHORITY_INVALID 错误,可是关闭 fiddler 后有能正常浏览。
1.dmg 文件安装
2.App Store 安装(卸载方法与 dmg 文件安装一致)
3.pkg 安装包安装
4.Homebrew 等包管理器安装
在开发工作中难免会出现 bug,一般项目都是测试检查通过后就可以发线上,可是在线上仍旧会出现各种意料之外或者未测试到的问题,这个时候有的用户会向客服反馈说哪里哪里有问题,这是一种被动的错误上报方式,毕竟不是所有的用户都会上报问题,更多的则是出现问题后直接离开我们的 APP。所以异常监控这块就显得越来越重要。
这里推荐直接去官网下载 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/ 根据页面提示完成操作
想要抓取手机上 H5 页面可按照一下步骤:
想要抓取 https 报文,必先安装证书,如果是想抓取 mac 浏览器访问的 https 页面,mac 得安装证书,同理如果是想抓取手机访问 https 页面,手机得安装证书
此时 mac 上访问的 https 页面在 charles 上能看到网络请求了
在用 charles 抓包请求时会看到有很多请求并不是自己想要的,这时候我们需要学会过滤出自己想要的请求。
过滤方法有三种
在主界面的中部的 Filter 栏中输入需要过滤出来的关键字
菜单栏选择 “Proxy”->”Recording Settings”,在弹出的窗口中选择 Include 栏,再点击“Add”,在弹出的窗口中输入需要监控的协议,主机地址,端口号等信息,来添加一个项目。如下图所示:
在想过滤的网络请求上右击,选择 “Focus”,之后在 Filter 一栏勾选上 Focussed 一项,如下图所示:
选择 Proxy->Throtting Setting,打开后如下图设置
选中要修改的请求,右击选择 Map Local 在 Edit Mapping 弹窗中选择一个本地文件(自己修改后的请求)作为请求的响应内容
因为某些系统硬编码使得 localhost 的流量不走系统代理,导致 charles 无法代理 localhost
解决方法
第一步: 修改 host 将 127.0.0.1 指向localhost.charlesproxy.com
第二步:在浏览器中请求 localhost.charlesproxy.com:8080
以上这三步就可以在 charles 中捕获到 localhost 中的请求了,方便后面修改请求的响应内容
这里使用 8080 端口是因为我本地开启的服务就是在 8080 端口上
参考文章:
原文链接: https://jesse121.github.io/blog/page/3/index.html
版权声明: 转载请注明出处.
一直在用 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
最近在看《Node.js 调试指南》的时候遇到有意思的几道题,是关于 setTimeout, promise.then, process.nextTick, setImmediate 的执行顺序。今天抽空记录下这道题的分析过程及背后的原理与知识点。
在开发过程中我们一般都会用到git管理代码,在git commit提交代码时我们一般对git commit message随便写点简单的描述,可是随着项目参与人数的增多,发现提交的commit记录越来越杂乱,不便查阅,在网上找了下解决方案,总结一下方便在公司项目中运用。
bind()方法创建一个新的函数,在 bind()被调用时,这个新函数的 this 被 bind 的第一个参数指定,其余的参数将作为新函数的参数供调用时使用。
bind()方法底层实现
最近在做一个H5上传图片并压缩的项目,其过程主要是先将图片上传通过readAsDataURL获取上传图片base64编码,然后根据高宽比将图片画到canvas上实现压缩,在通过toDataURL获取压缩后的图片。点击可查看demo在该过程中用到base64编码,于是就想弄清楚base64编码原理,才有了这篇博客。
在前端开发中总少不了列表项,对于列表项序号,射鸡师一般会列出个1,2,3…序号。在不了解css计数器属性之前,我一般会用精灵图,用类名来区分序列号图片。这样做尽管可以达到目的,但是很不方便,开发过程耗时较长而且维护修改起来较困难。用css counter配合伪类的content完美的解决了这个问题,这里详细介绍下css counter属性
最近我们公司的官网由原来的http1.1已升级到http2,而我们前端开发对http2还是一片懵懂,更不知道为何换成了这个,故此补充了下http2的相关知识。
工作中经常需要在服务器上来做一下实验,亲自动手看看效果是否与理论描述的相同。用docker可以很方便的配置所需要的环境,以下内容记录了如何用docker配置一个nginx服务器
Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。
Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
容器是完全使用沙箱机制,相互之间不会有任何接口,更重要的是容器性能开销极低。
当在访问数据库取得搜索结果的时候,在开始访问数据库之后,数据库返回结果之前,存在一段等待时间。
在传统的单线程处理机制中,在执行了访问数据库的代码之后,整个线程都将暂停下来,等待数据库返回查询结果之后才能继续执行后面的代码。这是 I/O 型阻塞
node.js 中在执行了访问数据库的代码之后将立即执行其后面的代码段,把数据库返回的结果的处理代码放在回调函数中。这是非阻塞型 I/O 机制