ShiningDan的博客


  • 首页

  • 摄影

  • 编程

  • 标签

  • 搜索
close
ShiningDan的博客

TCP 的流量控制与拥塞控制

发表于 2017-03-15 | 分类于 coding | | 阅读次数

本文是 TCP 的可靠传输原理、流量控制与拥塞控制的笔记。

注意,连续ARQ协议实现的是分组层面的滑动窗口,

TCP 和 UDP 之间的区别:

  1. TCP 是面向连接的传输层协议,应用程序在使用 TCP 协议之前,必须先建立 TCP 连接,传输数据完后,需要释放 TCP 连接。UDP 是无连接的,发送数据之前不需要建立连接,因此减少了开销和发送数据的时延。
  2. 每一条 TCP 连接只能有两个端点,所以 TCP 连接是点对点的。UDP 支持一对一,一对多,多对一和多对多的相互通信
  3. TCP 提供可靠交互的服务,通过 TCP 连接传送的数据,无差错,不丢失,不重复,按序到达。UDP 使用尽最大努力交付,即不保证交付可靠。
  4. TCP 是面向字节流的,TCP 把应用程序交下来的数据看成仅仅是一连串无结构的字节流,TCP 不关心把多长的报文发送到缓存中,而是根据对方给出的窗口和网络拥塞程度来决定一个报文段应包含多少个字节。UDP 是面向报文的,UDP 对应用层交下来的报文既不合并也不拆分,一次交付一个完整的报文。
  5. TCP 有拥塞控制,UDP 没有拥塞控制,很多实时应用(IP电话,视频会议等),要求主机恒定速率发送数据,并且允许在拥塞的时候丢失数据,所以很适合 UDP。
  6. UDP 首部开销小,只有8个字节。TCP 首部 20 个字节。
  7. TCP 提供全双工通信,允许通信双方在任何时候发送数据,TCP 连接两端都有发送缓存和接收缓存。
阅读全文 »
ShiningDan的博客

Node.js 包教不会笔记

发表于 2017-03-12 | 分类于 coding | | 阅读次数

本文是笔者在学习《Node.js 包教不包会》 – by alsotang 中的例子的笔记。

  • superagent 是个 http 方面的库,可以发起 get 或 post 请求。
  • cheerio 大家可以理解成一个 Node.js 版的 jquery,用来从网页中以 css selector 取数据,使用方式跟 jquery 一样一样的。
  • eventproxy 管理到底异步操作是否完成,完成之后,它会自动调用你提供的处理函数,并将抓取到的数据当参数传过来。
  • async 当你需要去多个源(一般是小于 10 个)汇总数据的时候,用 eventproxy 方便;当你需要用到队列,需要控制并发数,或者你喜欢函数式编程思维时,使用 async。
  • mocha 测试框架
  • should 断言库
  • istanbul 测试率覆盖工具
  • chai 全栈的断言库
  • phantomjs headless 浏览器
  • supertest专门用来配合 express (准确来说是所有兼容 connect 的 web 框架)进行集成测试的。
  • benchmark 可以用来测试 JavaScript 语句执行所需要的时间
  • 《线上部署:heroku》:如何使用 Paas 部署个人展示项目
  • 《持续集成平台:travis》:使用 travis 可以创建一个空白的环境,针对不同的 node 版本测试整个项目的运行情况。
  • cookie-parser express 中操作cookie
  • express-session express 中操作 session
  • q Node.js 中 Promise 的实现
  • connect Node.js 中用来实现服务器处理中间件
  • express Node.js 中实现服务器处理的中间件,是 Connect 的升级版,还封装了很多对象来方便业务逻辑处理。
阅读全文 »
ShiningDan的博客

Node.js 基础总结

发表于 2017-03-07 | 分类于 coding | | 阅读次数

本笔记是学习七天学会NodeJS 的个人总结。

NodeJS基础

JS是脚本语言,脚本语言都需要一个解析器才能运行。对于写在HTML页面里的JS,浏览器充当了解析器的角色。而对于需要独立运行的JS,NodeJS就是一个解析器。

每一种解析器都是一个运行环境,不但允许JS定义各种数据结构,进行各种计算,还允许JS使用运行环境提供的内置对象和方法做一些事情。例如运行在浏览器中的JS的用途是操作DOM,浏览器就提供了document之类的内置对象。而运行在NodeJS中的JS的用途是操作磁盘文件或搭建HTTP服务器,NodeJS就相应提供了fs、http等内置对象。

NodeJS最大的卖点——事件机制和异步IO

阅读全文 »
ShiningDan的博客

Node.js入门

发表于 2017-03-05 | 分类于 coding | | 阅读次数

本笔记记录着学习 Node 入门 这本书的练习步骤以及一些总结

实现功能

  • 用户可以通过浏览器使用我们的应用。
  • 当用户请求http://domain/start时,可以看到一个欢迎页面,页面上有一个文件上传的表单。
  • 用户可以选择一个图片并提交表单,随后文件将被上传到http://domain/upload,该页面完成上传后会把图片显示在页面上。
阅读全文 »
ShiningDan的博客

SQL入门

发表于 2017-03-03 | 分类于 coding | | 阅读次数

本文总结了一些 SQL 操作的基本介绍

SQL 简介

SQL 是用于访问和处理数据库的标准的计算机语言。

SQL 对大小写不敏感!

可以把 SQL 分为两个部分:数据操作语言 (DML) 和 数据定义语言 (DDL)。

查询和更新指令构成了 SQL 的 DML 部分:

  • SELECT - 从数据库表中获取数据
  • UPDATE - 更新数据库表中的数据
  • DELETE - 从数据库表中删除数据
  • INSERT INTO - 向数据库表中插入数据

SQL 的数据定义语言 (DDL) 部分使我们有能力创建或删除表格。我们也可以定义索引(键),规定表之间的链接,以及施加表间的约束。

  • CREATE DATABASE - 创建新数据库
  • ALTER DATABASE - 修改数据库
  • CREATE TABLE - 创建新表
  • ALTER TABLE - 变更(改变)数据库表
  • DROP TABLE - 删除表
  • CREATE INDEX - 创建索引(搜索键)
  • DROP INDEX - 删除索引
阅读全文 »
ShiningDan的博客

排序算法入门

发表于 2017-03-02 | 分类于 coding | | 阅读次数

最近又整理了一下常用的排序算法,并且都用 JavaScript 实现了一次。

参考链接:

八大排序算法
常见排序算法小结
JS中可能用得到的全部的排序算法

排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。

常用的内部排序如下:

不同的算法效果总结:

阅读全文 »
ShiningDan的博客

React Router入门

发表于 2017-03-01 | 分类于 coding | | 阅读次数

本文是根据React学习资源汇总这个文章中提及的文章阅读后的总结,仅供个人学习使用,更清楚详细的介绍可以根据链接阅读原贴。

React Router 使用教程
React Router 中文文档

React Router 保持 UI 与 URL 同步。它拥有简单的 API 与强大的功能例如代码缓冲加载、动态路由匹配、以及建立正确的位置过渡处理。你第一个念头想到的应该是 URL,而不是事后再想起。

阅读全文 »
ShiningDan的博客

网页组件制作之瀑布流效果

发表于 2017-03-01 | 分类于 coding | | 阅读次数

在该笔记中将学到列表展示中倒计时效果的方法与展示效果

本系列的是参考慕课网 vivian老师的视频,仅供个人查阅使用,具体讲解推荐参考视频。

显示效果如下:

阅读全文 »
ShiningDan的博客

LeetCode Linked List 题集

发表于 2017-02-22 | 分类于 coding | | 阅读次数

下面所记录的是我在刷 LeetCode Array 相关的题目自己的解法。

21. Merge Two Sorted Lists

Merge two sorted linked lists and return it as a new list. The new list should be made by splicing together the nodes of the first two lists.

JavaScript Solution

递归方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
/**
* Definition for singly-linked list.
* function ListNode(val) {
* this.val = val;
* this.next = null;
* }
*/
/**
* @param {ListNode} l1
* @param {ListNode} l2
* @return {ListNode}
*/
var mergeTwoLists = function(l1, l2) {
if (l1 === null) return l2;
if (l2 === null) return l1;

if (l1.val < l2.val) {
l1.next = mergeTwoLists(l1.next, l2);
return l1;
} else {
l2.next = mergeTwoLists(l2.next, l1);
return l2;
}
};

Java Solution

迭代方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
public class Solution {
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
if (l1 == null) return l2;
if (l2 == null) return l1;

ListNode lEnd = new ListNode(0);
ListNode lStart = lEnd;
while (l1 != null && l2 != null) {
if (l1.val < l2.val) {
lEnd.next = l1;
l1 = l1.next;
} else {
lEnd.next = l2;
l2 = l2.next;
}
lEnd = lEnd.next;
}
lEnd.next = (l1 == null) ? l2 : l1;
return lStart.next;
}
}
阅读全文 »
ShiningDan的博客

使用 React 和 Webpack 创建画廊应用

发表于 2017-02-16 | 分类于 coding | | 阅读次数

本文是在学习 React 的时候,自己用来做练习的Demo,在 React实战–打造画廊应用 也有一篇使用 React 打造画廊应用的Demo,但是本文没有参考他的实现,有兴趣的同学可以去这个视频学习对比。

本文在前端设计方面,是学习慕课网 Lyn的视频。如果在设计方面有问题,建议参考原视频。

项目最终效果:

项目下载方法:

这个小项目的 Demo 我已经传到网上去了,可以在 github 上进行下载。具体步骤如下:

安装方法是:

1
2
3
4
5
https://github.com/ShiningDan/react-gallery.git
cd react-gallery/
npm install
npm run build
npm run start

就可以在 http://localhost:8080/index.html 上看到项目的展示效果。

阅读全文 »
1…8910…13
ShiningDan

ShiningDan

129 日志
1 分类
111 标签
© 2020 ShiningDan