Origin of Ray

一起探索互联网的秘密

基本概念

在计算机科学中,分治法是一种很重要的算法。字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。这个技巧是很多高效算法的基础,如排序算法(快速排序,归并排序),傅立叶变换(快速傅立叶变换)……

阅读全文 »

谈起VPN我们很多人的第一反应都是翻墙,这其实也是VPN一个比较有名的原因。VPN其实会为你直接分配一个外网的IP,只是这个IP只在这条专线的另一头的代理服务器上有效,VPN的优点和用法并不在于翻墙,而是数据的加密,而且由于其流量特征明显,它用来翻墙的表现其实也不是很好。SS等代理则是帮你进行请求的转发,前提是你能找到一台在墙内能访问的服务器,并且该服务器愿意帮你转发流量。我们就从翻墙开始讲VPN到底是什么。它和代理有什么区别。

阅读全文 »

Token是什么

究竟什么才算是Token,我一直没有找到比较好的定义,但是回过头来看一下它的翻译,才明白,原来名字就是定义了,Token就是令牌。

那么什么是令牌呢?

阅读全文 »

HTTPS协议是HTTP + SSL/TLS组合而成的,而HTTP是用来从万维网服务器获取信息的协议,所以我们就从万维网开始讲起。

万维网与HTTP

万维网(WWW)并非某种特殊的计算机网络。万维网是一个大规模的,联机式的信息储藏所,英文简称web。万维网用链接的方式可以非常方便地从互联网上的一个站点访问另一个站点。

每一个万维网站点都存放了许多文档。在这些文档中有一些地方的文字是用特殊方式显示的,当我们鼠标移动到这些地方的时候,鼠标的箭头就变成了一只手的形状,这就表明这里有一个链接。如果我们点击这些链接,我们就可以从这个文档链接到可能相隔很远的另一个文档。

正是由于互联网的出现,使得互联网从少数计算机专家使用变成了普通百姓也能使用。

我们平时从浏览器打开网页就是从万维网服务器获取信息,使用的是HTTP协议。但是我们去玩LOL的时候,客户端与服务器之间的交流就可以不是HTTP协议了。

万维网是一个分布式的超媒体,他是超文本系统的扩展、所谓的超文本就是指包含连接向其他文档的链接的文本。一个超文本由多个信息源链接而成,而这些信息分布在世界各地。

万维网的客户端程序就是浏览器,万维网文档存储的主机就是万维网服务器,运行万维网服务器程序。客户程序向服务器程序发送请求,服务器程序就向客户端程序发送客户所需的万维网文档。在浏览器中显示的万维网文档就称为页面。

阅读全文 »

特点

  • TCP是面向连接的运输层协议。也就是说,应用程序在使用TCP连接之前,必须建立TCP连接。数据传输完毕之后,必须释放TCP连接。
  • 每一条TCP连接只能有两个端点,每个TCP连接都是点对点的。
  • TCP提供可靠交付服务,也就是说数据是无差错,不丢失,不重复,按照顺序到达。
  • TCP提供全双工通信,允许通信双方在任何时候都能够发送数据,TCP双方都设有发送缓存和接收缓存,用来临时存放双方通信的数据。
  • 面向字节流。TCP中的**“流”指的是流入到进程或从进程流出的字节序列**。面向字节流的含义是:虽然应用程序和TCP交互是一次一个数据块,但是TCP把应用程序交下来的数据仅仅看成是一连串无结构的字节流。TCP并不知道所传送的字节流的含义,也不保证接收方收到的数据块大小与发送方的数据块大小有什么对应关系,有可能发送发10个数据块的数据在接收方被整理成4个数据块交付给上层。
阅读全文 »

OAuth的中文名称是开放式授权协议,这个名字大家仔细品,它是一个授权协议,任何实现这个协议的网站都可以在用户同意的条件下给某些在自己这里注册的应用授予对应用户在本网站某些资源的权限,而这个权限一般用token来表示。

阅读全文 »

原理

快慢指针

双指针技巧再分为两类,一类是「快慢指针」,一类是「左右指针」。前者解决主要解决链表中的问题,比如典型的判定链表中是否包含环;后者主要解决数组(或者字符串)中的问题,比如二分查找。

阅读全文 »

原理

二分查找并不简单,Knuth 大佬(发明 KMP 算法的那位)都说二分查找:思路很简单,细节是魔鬼。很多人喜欢拿整型溢出的 bug 说事儿,但是二分查找真正的坑根本就不是那个细节问题,而是在于到底要给 mid 加一还是减一,while 里到底用 <= 还是 <

你要是没有正确理解这些细节,写二分肯定就是玄学编程,有没有 bug 只能靠菩萨保佑。

阅读全文 »

原理

滑动窗口算法的思路是这样:

1、我们在字符串 S 中使用双指针中的左右指针技巧,初始化 left = right = 0,把索引闭区间 [left, right] 称为一个「窗口」。

2、我们先不断地增加 right 指针扩大窗口 [left, right],直到窗口中的字符串符合要求(包含了 T 中的所有字符)。

3、此时,我们停止增加 right,转而不断增加 left 指针缩小窗口 [left, right],直到窗口中的字符串不再符合要求(不包含 T 中的所有字符了)。同时,每次增加 left,我们都要更新一轮结果。

4、重复第 2 和第 3 步,直到 right 到达字符串 S 的尽头。

阅读全文 »
0%