目录

最新文章

Ubuntu 2022年12月31日

Ubuntu 18.04 作为示范机,U 盘装机软件 LinuxLive USB Creator

网络工具 2022年12月31日

net-tools 与 iproute2

net-tools 起源于BSD,自2001年起,Linux社区已经对其停止维护,net-tools通过 procfs(/proc) 和 ioctl 系统调用去访问和改变内核网络配置。

而iproute2旨在取代net-tools,并提供了一些新功能。一些Linux发行版已经停止支持net-tools,只支持iproute2。而iproute2则通过netlink套接字接口与内核通讯。

  • net-tools中工具的名字比较杂乱

  • iproute2则相对整齐和直观,基本是ip命令加后面的子命令

虽然取代意图很明显,但是这么多年过去了,net-tool依然还在被广泛使用,最好还是两套命令都掌握吧。

高效的命令行 2022年12月31日

使用命令行工作的一个总结。

OOP 2022年12月31日

JS不区分类和实例的概念,而是通过原型(prototype)来实现面向对象编程
原型是指当我们想要创建 xiaoming 这个具体的学生时,我们并没有一个 Student 类型可用。那怎么办?恰好有这么一个现成的对象:

基础 2022年12月31日

Number, 字符串, 布尔值, null, undefined, 数组, 对象

闭包 2022年12月31日

函数嵌套,闭包 :一个函数就是一个闭包,包里面可以访问包外面任意函数,变量,而包外面对包里面是不可访问的

文件系统 2022年6月30日

[TOC]

TCPIP详解 2022年4月30日

image-20220410020953043

上面这个图是非常好的一个示意图,抛开了分层,非常清晰的看到了协议之间的依赖关系。

趣谈网络协议 2022年4月30日

文章无缩略内容。

进程 2022年4月30日

文章无缩略内容。

网络层 2022年4月30日

文章无缩略内容。

链路层 2022年4月30日

通常包括操作系统中的设备驱动程序和计算机中对应的网络接口卡。它们一起处理与电缆(或其他任何传输媒介)的物理接口细节。

在两个网络实体之间提供数据链路通路的建立,维持和释放,提供物理地址寻址,数据成帧,流量控制,数据检错,重发等功能。

目前主要有两种链路

  • 点对点链路:链路一端只有一个发送方,另一端只有一个接收方

  • 广播链路/广播信道:能够让多个发送和接收节点,都连接到相同的 统一的 共享的广播信道上

三个基本问题: 封装成帧,透明传输,差错检测

  • 封装成帧 : 在一段数据的前后分别添加首部SOH 帧开始符和尾部EOT 帧结束符,这样就构成了一个帧。

  • 透明传输 : 在传输二进制文件时,数据有EOT帧结束符一样的编码,如何在接收端不解释为尾部呢?答案是在前面插入ESC字符,在接收端接收完数据后,再将ESC去除掉,这叫字节填充

  • 差错检测 : 比特在传输过程中,1可能变成0, 0也可能变成1,使用循环冗余检验CRC或者帧检验序列方法可以检测出来

在通信质量比较差的无线传输链路,数据连接层协议使用了帧编号,确认和重传机制,向上层提供可靠传输的服务,而在通信质量好的有线链路,则没有这些机制,而是交给上层 TCP 完成确认和重传

高性能服务器编程 2022年4月30日

文章无缩略内容。

16位CPU汇编语言 2022年3月31日

16 位 8086 CPU 的相关知识。

项目下载地址

64位CPU汇编语言 2022年3月31日

Linux下 64 位汇编语言学习记录。时至今日,汇编语言的重点已经不是编写汇编语言代码,而是看懂 GCC 编译器生成的汇编语言,本文正是以此为目标进行学习。

现代操作系统 2022年3月31日

本文是《现代操作系统》第 4 版的笔记。

计算机硬件 2022年3月31日

文章无缩略内容。

http 2022年3月31日

2 MIME type ,用于描述并标记 web 多媒体内容。
比如:html 格式文档由 text/html 标识,ASCII 文本由 text/plain 类型标识,gif :image/gif ,jpeg 标识:image/jpeg

3 URL 统一资源定位符:方案+服务器地址+ 某个具体资源
如:http://www.joes-hardware.com/specials/saw-blade.gif

4 http 方法

网页布局 2022年3月31日

  1. 使用outline:1px solid red;轮廓绘制在元素框之上,不影响元素大小和定位,被用来 debug

  2. 只有普通文档流中块元素的垂直外边距才会发生外边距叠加。行内框,浮动框和绝对定位框之间的外边距不会叠加。

  3. inline元素在一行上水平排列,只能设置行高,水平边框,水平padding,水平margin

  4. inline-block也可以在一行上水平排列, 并且可以设置width,height,margin,padding

从上往下 可见内容为

css面试 2022年3月31日

如何理解 CSS 的盒子模型?

每个 HTML 元素都是长方形盒子。
(1)盒子模型有两种:IE 盒子模型、标准 W3C 盒子模型;IE 的 content 部分包含了 border 和 pading。
(2)标准 W3C 盒模型包含:内容(content)、填充(padding)、边界(margin)、边框(border)。

link 和@import 的区别?

(1)link 属于 XHTML 标签,而@import 是 CSS 提供的。
(2)页面被加载时,link 会同时被加载,而@import 引用的 CSS 会等到页面被加载完再加载。
(3)import 只在 IE 5 以上才能识别,而 link 是 XHTML 标签,无兼容问题。
(4)link 方式的样式权重高于@import 的权重。
(5)使用 dom 控制样式时的差别。当使用 javascript 控制 dom 去改变样式的时候,只能使用 link 标签,因为@import 不是 dom 可以控制的。

CSS 选择符有哪些?哪些属性可以继承?优先级算法如何计算?CSS 3 新增伪类有哪些?

id 选择器(# myid)
类选择器(.myclassname)
标签选择器(div、h1、p)
相邻选择器(h1 + p)
子选择器(ul < li)
后代选择器(li a)
通配符选择器( * )
属性选择器(a[rel = "external"])
伪类选择器(a: hover, li: nth - child)
可继承: font-size font-family color, UL LI DL DD DT;
不可继承 :border padding margin width height ;
优先级就近原则,样式定义最近者为准,载入样式以最后载入的定位为准。
优先级为:
!important > id > class > tag
important 比 内联优先级高
CSS3 新增伪类举例:
p:first-of-type 选择属于其父元素的首个<p>元素的每个<p>元素。
p:last-of-type 选择属于其父元素的最后<p>元素的每个<p>元素。
p:only-of-type 选择属于其父元素唯一的<p>元素的每个<p>元素。
p:only-child 选择属于其父元素的唯一子元素的每个<p>元素。
p:nth-child(2) 选择属于其父元素的第二个子元素的每个<p>元素。
:enabled、:disabled 控制表单控件的禁用状态。
:checked 单选框或复选框被选中。

用纯 CSS 创建一个三角形的原理是什么?

html面试 2022年3月31日

文章无缩略内容。

scss 2022年3月31日

使用预编译器Sass来生成CSSSassruby编写的一个工具包,使用gem安装。

常见样式 2022年3月31日

transform: rotate(20deg); /* 旋转 */
transform: skew(45deg); /* 扭曲 skewX(x) skewY(y) */
transform: scale(1.5, 0.5); /* 放大与缩小 */
transform: translate(50px, 100px); /* 元素移动 */

概念基础 2022年3月31日

  • 引入别的 css 脚本

网页加载顺序 2022年3月31日

本文是HTML CSS JS的加载流程相关知识的笔记。

网页文字 2022年3月31日

文章无缩略内容。

规范书写 2022年3月31日

  • 谨慎添加新的选择符规则,尤其不可滥用 id,尽可能继承和复用已有样式

  • 选择符、属性、值均用小写(格式的颜色值除外),缩写的选择符名称须说明缩写前的全称,例如 .cl -> Clearfix

  • 勿使用冗余低效的 CSS 写法,例如:ul li a span{... }

  • 慎用 !important

  • 建议使用具有语义化的 classname 或 id

  • 避免使用兼容性不好的滤镜

  • 开发过程中的未定事项,须用 [!] 标出,以便于后续讨论整理。

  • 注释格式,统一使用双斜杠加*。

  • 上下模块之间的间距统一使用下一个模块的 margin-top 来实现,好处是:如果没有下一个模块也不会多出一段空隙。

  • 具有特定意义的请勿直接占用

配色表 2022年3月31日

  • 香港地铁每个站点,都有自己的主题色,一共 87 种颜色。有人将它做成 CSS 配色表,挺好看的。

537f5932ly1g0qv58wlajj215g0hpdft.jpg

JS 2022年3月31日

目前基于 ECMAScript 5.1 版本。

JSON 2022年3月31日

JSONJS 子集,字符集必须是UTF-8,字符串规定必须用""Object的键也必须用""

cookie-js 2022年3月31日

文章无缩略内容。

jquery 2022年3月31日

一个专业的操作DOM的库。

js对象类型检测 2022年3月31日

文章无缩略内容。

js模块化 2022年3月31日

文章无缩略内容。

上传文件 2022年3月31日

文章无缩略内容。

事件处理 2022年3月31日

  • HTML 事件处理程序

  • DOM 0 级 事件处理程序

对于同一个 dom 节点而言,只能注册一个,后边注册的同种事件会覆盖之前注册的

  • DOM 2 级 事件处理程序

内置对象 2022年3月31日

文章无缩略内容。

函数 2022年3月31日

  • 普通 函数声明 会被前置

对象 2022年3月31日

JavaScript的对象是一组由键-值组成的无序集合

正则 2022年3月31日

  • 直接给出字符,就是精确匹配

  • 匹配符

RUSTful 2022年3月31日

http://www.ruanyifeng.com/blog/2011/09/restful 理解 RESTful 架构

http://www.ruanyifeng.com/blog/2014/05/restful_api.html RESTful API 设计指南

http://blog.jobbole.com/41233/ RESTful API 设计最佳实践

http://zhidao.baidu.com/link?url=JQb2EL4xhkjfqPzWUDL-iK5-S9Xb3WKE_GjIi-HlHMU4eY-JTCLkXCDb0ZupQXaG7aQJdwwZT90ck2UShEjvXd2jzcPzEgZScRkRt1CUMau webservice 和 restful 的区别

api接口设计 2022年3月31日

最好的方法是限定几个可以访问 api 的域名,其他域名全部拒绝。
但是Access-Control-Allow-Origin只能设置一个值,所以要多端共用,只有header("Access-Control-Allow-Origin:*");

web优化 2022年3月31日

动静分离

所谓的动静分离,就是将 Web 应用程序中静态和动态的内容分别放在不同的 Web 服务器上,有针对性的处理动态和静态内容,从而达到性能的提升。我们知道如果一个 HTML 有多个域名请求数据文件会提高
Tomcat 服务器在处理静态和并发问题上比较弱,所以事先动静分离的方式一般会用 Apache+Tomcat、Nginx+Tomcat 等。

以 Apache+Tomcat 为例,其运行机理是:页面请求首先给 Apache,然后 Apache 分析请求信息是静态还是动态,静态则本机处理,动态则交给 Tomcat 做处理这其实是负载均衡的雏形,这样的实现不用让开发人员做任何特殊开发,一个<img src="demo.jpg">交给服务器即可,至于这个文件是从 Apache 还是从 Tomcat 取得,开发人员完全无需关注。

HTTP 持久连接

持久连接(Keep-Alive)也叫做长连接,它是一种 TCP 的连接方式,连接会被浏览器和服务器所缓存,在下次连接同一服务器时,缓存的连接被重新使用。HTTP 无状态性表示了它不属于长连接,但 HTTP/1.1 提供了对长连接的支持(不过这必须依赖浏览器和服务器双方均支持长连接功能才行),最常见的 HTTP 长连接例子是“断点下载”。
浏览器在请求的头部添加 Connection:Keep-Alive,以此告诉服务器“我支持长连接,你支持的话就和我建立长连接吧”,而倘若服务器的确支持长连接,那么就在响应头部添加“Connection:Keep-Alive”,从而告诉浏览器“我的确也支持,那我们建立长连接吧”。服务器还可以通过 Keep-Alive:timeout=..., max=...的头部告诉浏览器长连接失效时间。
配置长连接通常是要服务器支持设置,有测试数据显示,使用长连接和不使用长连接的性能对比,对于 Tomcat 配置的 maxKeepAliveRequests 为 50 来说,效率竟然提升了将近 5 倍。

GZIP 压缩技术

xss 2022年3月31日

  • 将 HTML 标签里的 中括号 ,单引号,引号 之类的特殊字符进行实体字符转换编码

数字签名算法RSA 2022年3月31日

一、概述
1、数字签名算法可以看做是一个带有密钥的消息摘要算法,并且这个密钥包括了公钥和私钥。他是非对称加密算法和消息摘要算法的结合体
2、数字签名算法是公钥基础设施(PKI),以及许多网络安全机制的基础
3、数字签名算法有抗否认的作用
4、遵循“私钥签名,公钥验证”规则
5、常见的数字签名算法有 RSA/DSA/ECDSA
6、java6 支持实现了 DSA 算法、部分 RSA 算法需要 bouncycastle 支持,最牛的 ECDSA 算法(微软用来做操作系统序列号的那个)完全需要 Bouncycastle 支持
二、模型分析
1、甲方构造密钥对(公钥+私钥),公布公钥给乙方
2、甲方使用私钥对数据进行签名,然后将“签名+数据” 发送给乙方
3、乙方使用公钥+数字签名 验证数据

发送报文时,发送方由报文文本计算生成报文摘要,然后用自己的私钥对这个摘要进行加密,这个加密后的摘要将作为报文的数字签名和报文一起发送给接收方。接收到报文之后,接收方使用发送方的公钥对报文附加的数字签名进行解密,然后由接收到的原始报文计算出报文摘要,如果两个摘要相同,那么接收方就能确定该数字签名是发送方的。

数字签名的原理  在具体工作时,首先发送方对信息施以数学变换,所得的信息与原信息惟一对应;在接收方进行逆变换,得到原始信息。只要数学变换方法优良,变换后的信息在传输中就具有很强的安全性,很难被破译、篡改。这一个过程称为加密,对应的反变换过程称为解密。  现在有两类不同的加密技术,一类是对称加密,双方具有共享的密钥,只有在双方都知道密钥的情况下才能使用,通常应用于孤立的环境之中,比如在使用自动取款机(ATM)时,用户需要输入用户识别号码(PIN),银行确认这个号码后,双方在获得密码的基础上进行交易,如果用户数目过多,超过了可以管理的范围时,这种机制并不可靠。  另一类是非对称加密,也称为公开密钥加密,密钥是由公开密钥和私有密钥组成的密钥对,用私有密钥进行加密,利用公开密钥可以进行解密,但是由于公开密钥无法推算出私有密钥,所以公开的密钥并不会损害私有密钥的安全,公开密钥无须保密,可以公开传播,而私有密钥必须保密,丢失时需要报告鉴定中心及数据库。
数字签名的功能  数字签名可以解决否认、伪造、篡改及冒充等问题。具体要求:发送者事后不能否认发送的报文签名、接收者能够核实发送者发送的报文签名、接收者不能伪造发送者的报文签名、接收者不能对发送者的报文进行部分篡改、网络中的某一用户不能冒充另一用户作为发送者或接收者。数字签名的应用范围十分广泛,在保障电子数据交换(EDI)的安全性上是一个突破性的进展,凡是需要对用户的身份进行判断的情况都可以使用数字签名,比如加密信件、商务信函、定货购买系统、远程金融交易、自动模式处理等等。
数字签名的算法  数字签名的算法很多, 应用最为广泛的三种是: Hash 签名、DSS 签名和 RSA 签名。   1. Hash 签名   Hash 签名不属于强计算密集型算法,应用较广泛。它可以降低串口服务器资源的消耗,减轻中央服务器的负荷。Hash 的主要局限是接收方必须持有用户密钥的副本以检验签名, 因为双方都知道生成签名的密钥,较容易攻破,存在伪造签名的可能。   2. DSS 和 RSA 签名   DSS 和 RSA 采用了公钥算法,不存在 Hash 的局限性。RSA 是最流行的一种加密标准,许多产品的内核中都有 RSA 的软件和类库。早在 Web 飞速发展之前, RSA 数据安全公司就负责数字签名软件与 Macintosh 操作系统的集成,在 Apple 的协作软件 PowerTalk 上还增加了签名拖放功能,用户只要把需要加密的数据拖到相应的图标上,就完成了电子形式的数字签名。与 DSS 不同,RSA 既可以用来加密数据,也可以用于身份认证。和 Hash 签名相比,在公钥系统中,由于生成签名的密钥只存储于用户的计算机中,安全系数大一些。
数字签名的实施  实现数字签名有很多方法,目前采用较多的是非对称加密技术和对称加密技术。虽然这两种技术实施步骤不尽相同,但大体的工作程序是一样的。用户首先可以下载或者购买数字签名软件,然后安装在个人电脑上。在产生密钥对后,软件自动向外界传送公开密钥。由于公共密钥的存储需要,所以需要建立一个鉴定中心(CA)完成个人信息及其密钥的确定工作。鉴定中心是一个政府参与管理的第三方成员,以便保证信息的安全和集中管理。用户在获取公开密钥时,首先向鉴定中心请求数字确认,鉴定中心确认用户身份后,发出数字确认,同时鉴定中心向数据库发送确认信息。然后用户使用私有密钥对所传信息签名,保证信息的完整性、真实性,也使发送方无法否认信息的发送,之后发向接收方;接收方接收到信息后,使用公开密钥确认数字签名,进入数据库检查用户确认信息的状况和可信度;最后数据库向接收方返回用户确认状态信息。不过,在使用这种技术时,签名者必须注意保护好私有密钥,因为它是公开密钥体系安全的重要基础。如果密钥丢失,应该立即报告鉴定中心取消认证,将其列入确认取消列表之中。其次,鉴定中心必须能够迅速确认用户的身份及其密钥的关系。一旦接收到用户请求,鉴定中心要立即认证信息的安全性并返回信息。

cmake 2022年3月31日

本文记录了cmake的用法。

CSAPP 2022年3月31日

  • 第一部分: 1 ~ 6 , 帮助我理解了程序和硬件之间的交互关系。

  • 第二部分: 7 ~ 9 , 帮助我理解了程序和操作系统之间的交互关系。

  • 第三部分: 10 ~12 , 帮助我理解了与I/O设备以及其他程序通信,理解了网络服务程序和并发程序。

Linux系统原理 2022年3月31日

单内核设计:内核从整体上作为一个单独的大过程来实现,运行在一个单独的地址空间上,内核以单个二进制文件的形式存放于磁盘中.因为所有内核服务都在这样一个大内核地址空间上运行,所以通信可以直接调用函数来实现。linux 就是一个单内核设计。

本文记录的是我学习到的Linux本身的一些原理性的知识,它的构成与实现。

image-20210320185347876

进程管理

负责创建、结束进程,管理内核的活动,如软件中断、tasklet等,管理进程间通信,如消息(message)、管道(pipe)等,实现进程调度(schedule)。进程调度是进程管理的重要任务,它处理所有活动的、等待被执行的和被阻塞(blocking)的进程调度,使所有应用和进程合理地共享处理器的运行时间。

内存管理

内存是系统最主要的资源之一,计算机的性能在很大程度上与其所配备的内存有关。Linux内核内存管理的主要功能就是给进程分配地址空间,该地址空间只允许本进程自己访问。

文件系统

在Linux操作系统中,文件系统是整个系统的中枢。Linux与其他操作系统不同,几乎所有的操作都基于文件系统接口的处理,如设备驱动程序可以按文件方式访问设备,通过/proc文件系统可以访问Linux内核的数据和参数,这两个功能在调试时非常有效。

设备驱动程序

在所有的操作系统中,设备驱动程序都是硬件的抽象,通过它可以访问硬件。Linux可以用模块(模块)的方式实现设备驱动程序,提供了在系统运行时动态加载和卸载设备驱动程序的途径。

网络子系统

在Linux中所有的网络操作是由操作系统管理的。这是因为网络操作不能分配给某个进程完成。在处理收到的网络数据包时,数据包的接收是异步事件。接收数据包任务必须在进程处理这些数据包前先收集齐所有的网络包、标识数据,然后向上层传送,这就是为什么由内核的网络子系统负责处理数据包,而不是由某个进程和网络接口来处理。

Unixlinux编程实践 2022年3月31日

文章无缩略内容。

linux系统编程 2022年3月31日

文章无缩略内容。

线程 2022年3月31日

游戏服务端开发面试 2022年3月31日

传输层 2022年3月31日

应用层 2022年3月31日

C 2022年3月31日

GDB调试器 2022年3月31日

运行环境 2022年3月31日

配置 2022年3月31日

CDN 2022年3月31日

K8s和jenkins 2022年3月31日

K8s实战 2022年3月31日

微服务设计 2022年3月31日

curl 2022年2月28日

git 2022年2月28日

Channel 2021年11月30日

调试 2021年11月30日

Prometheus 2021年11月30日

Linux的C 2021年11月30日

Go 2021年11月30日

微软c编程 2021年11月30日

mongo客户端命令 2021年11月30日

Primer 2021年11月30日

概述 2021年11月30日

语言的设计与演化 2021年11月30日

Erlang教程 2021年11月30日

Make构建工具 2021年11月30日

从C到汇编 2021年11月30日

概述 2021年11月30日

SHELL 2021年11月30日

游戏服务器开发框架 2021年11月30日

自顶向下 2021年11月30日

erlang 2021年11月30日

文本处理 2021年9月30日

大象UML 2021年9月30日

语言导学 2021年9月30日

Go函数 2021年9月30日

Go标准库 2021年9月30日

启动外部程序 2021年9月30日

分布式网站 2021年9月30日

面向容错性架构 2021年9月30日

MySQL节点 2021年9月30日

Fcitx输入法 2021年9月30日

编码 2021年9月30日

ssh 2021年8月31日

读取用户输入 2021年6月30日

Go语言 2021年6月30日

设计模式 2021年6月30日

补码 2021年6月30日

netwox 2021年3月31日

https 2021年3月31日

高可用 2021年3月31日

wireshark 2021年3月31日

32位CPU汇编语言 2021年3月31日

物理层 2021年3月31日

CentOS 2021年3月31日

link 2021年3月31日

gpg 2021年3月31日

Docker技术栈 2021年3月31日

PHP7.2操作MongoDB 2021年3月31日

VirtualBox 2021年3月31日

KMS 2021年2月28日

Linux的使用 2021年2月28日

Ansible 2021年2月28日

Rsync 2021年2月28日

MySQL或MariaDB管理 2021年2月28日

Lua脚本 2021年2月28日

事务 2021年2月28日

RabbitMQ 2021年2月28日

正则表达式 2021年2月28日

nginx 2021年2月28日

SRE 2021年1月31日

ab并发测试工具 2021年1月31日

PHP节点 2021年1月31日

生产环境部署redis 2021年1月31日

Apache 2021年1月31日

OS 2021年1月31日

单词 2021年1月31日

生产环境 2020年12月31日

Effective 2020年12月31日

任务队列和发布订阅 2020年12月31日

编程学习路径 2020年12月31日

codekissyoung 2020年12月31日

镜像队列 2020年12月31日

AutoTools 2020年12月31日

PostgreSQL 2020年12月31日

SQL 2020年12月31日

TiDB 2020年12月31日

Code-review 2020年12月31日

程序员的思维修炼 2020年12月31日

给产品经理讲技术 2020年12月31日

架构文章 2020年12月31日

大话数据结构 2020年12月31日

红黑树 2020年12月31日

BeyondCompare 2020年11月30日

语言比较 2020年11月30日

语言设计 2020年11月30日

深入理解构建系统 2020年11月30日

测试与文档 2020年10月31日

类型系统 2020年9月30日

概述 2020年8月31日

Nginx节点 2020年8月31日

优化 2020年7月31日

如何实现一个数据库 2020年7月31日

数据库设计 2020年7月31日

排序 2020年7月31日

Accelerated 2020年7月31日

单链表 2020年6月30日

Schemer语言 2020年5月31日

CPP_PrimerPlus 2020年3月31日

STL 2020年3月31日

MongoDB安全 2020年3月31日

Redis-Sentinel 2020年3月31日

数据类型 2020年3月31日

GoMicro 2020年3月31日

MySQL使用军规 2020年3月31日

MySQL技术内幕 2020年3月31日

SQLite 2020年3月31日

SQL注入攻击与防御 2020年3月31日

mysqlserver 2020年3月31日

phpmyadmin 2020年3月31日

事务 2020年3月31日

深入理解SQL 2020年3月31日

索引 2020年3月31日

书籍推荐 2020年3月31日

Game Server 2020年3月31日

服务端架构整理 2020年3月31日

概述 2020年3月31日

网络游戏服务器开发框架 2020年3月31日

AVL树 2020年3月31日

B+树 2020年3月31日

B树 2020年3月31日

字符串 2020年3月31日

散列 2020年3月31日

数列 2020年3月31日

算法 2020年3月31日

算法竞赛入门经典 2020年3月31日

跳表 2020年3月31日