Createsequence's Blog

一个努力前进的程序猿


  • 首页

  • 标签

  • 分类

  • 归档

  • 搜索

《趣谈网络协议》读书笔记(二):局域网与交换机

发表于 2020-12-23 | 分类于 计算机网络
字数统计: 3.9k

概述

此文为极客时间趣谈网络协议第二模块“从第二层到第三层”中,第一和第二节的学习笔记。

主要内容包括局域网 LAN 的建立,以及局域网间如何通过交换机建立拓补结构。

一、如何建立一个局域网

局域网 LAN 的全称为 Local Area Network,它其实就是一个小型的计算机网络系统,当我们搭建一个局域网,我们需要考虑这四个问题:

  • 设备间要怎么互相发送数据?
  • 多个设备同时发送数据,那么发送顺序怎么安排?
  • 如果数据发生过程中出现错误怎么办?
  • 设备怎么知道数据是发送给自己的?

1.物理层连接网线

目前的网线一般有八根线组成,其中1,2起接收数据的作用,而3,6起发送数据的作用,我们将网线一端的1与3换位子,2与6换位子,然后将水晶头两端连接到电脑上,理论上两台电脑就具备了互相通信的物理基础(现在的电脑都具备自动适配的功能,理论上不换水晶头也不会有什么影响)。

当然,有了物理基础,我们还需要配置 IP 地址,子网掩码和默认网关,当配置好以后,两台电脑就会组成一个最小的局域网,即 LAN。

如果是多台设备,就需要一个交换机(相当于大学里头用的集线器)。多台设备连接到一个交换机上,当一个电脑发出数据的时候,Hub 会获取数据包并且广播给其他电脑。

阅读全文 »

《趣谈网络协议》读书笔记(一):网络分层,IP与MAC

发表于 2020-12-22 | 分类于 计算机网络
字数统计: 3.7k

概述

此文为极客时间趣谈网络协议第一模块“通信协议综述”的学习笔记。

主要内容包括数据包在如何在层间传输, IP 地址与 MAC 地址的介绍,IP 地址的设置与分配。

一、网络分层

1.数据包如何在层间流转

分层是一个复杂程序的必然趋势,因而复杂的网络协议就会有分层的要求。

以下图为例,下图描述了我们输入网址并回车后,整个大体的请求流程:

img

我们知道,按 TCP/IP 的四层模型,HTTP 协议属于应用层。假设用伪代码代表不同层级间对数据包的处理流程,当我们从应用层发起请求时:

  • 从应用层进入传输层。经过 send_tcp()的处理,会加上 TCP 头,里面有端口;
  • 从传输层进入网络层,经过 send_layer3()的处理,加上 IP 头;
  • 从网络层进入数据链路层,经过 send_layer()的处理,加上目标 MAC 或网关 MAC。
阅读全文 »

java集合源码分析(九):HashSet与TreeSet.md

发表于 2020-12-22 | 分类于 java集合容器
字数统计: 864

概述

HashSet 是 Set 接口下一个不允许重复但允许 null、无序并且线程不安全的集合。它基于 HashMap 实现。

从数据结构来说,他与 HashMap 相同,但是由于 HashSet 借助 HashMap 的 key 来存储数据,因而 HashMap 的 value 在 HashSet 中无意义。

HashMap的数据结构

这是关于 java 集合类源码的第九篇文章。往期文章:

  1. java集合源码分析(一):Collection 与 AbstractCollection
  2. java集合源码分析(二):List与AbstractList
  3. java集合源码分析(三):ArrayList
  4. java集合源码分析(四):LinkedList
  5. java集合源码分析(五):Map与AbstractMap
  6. java集合源码分析(六):HashMap
  7. java集合源码分析(七):LinkedHashMap
  8. java集合源码分析(八):Set与AbstractSet

一、数据结构

HashSet 基于 HashMap 实现,也就是说,HashSet 用于存储数据的容器实际上就是一个 HashMap 实例。(关于 HashMap 的数据结构,可以参考前文java集合源码分析(六):HashMap中的第一部分。)

HashSet 使用 HashMap 的 key 作为存储数据的位置,而 value 的位置使用一个默认的全局空对象填充。大部分方法通过直接包装调用 HashMap 的来实现,也就是说,我们可以把 HashSet 看成 HashMap 的一个大号包装器——或者说适配器类。

二、成员变量

阅读全文 »

java集合源码分析(八):Set与AbstractSet

发表于 2020-12-22 | 分类于 java集合容器
字数统计: 1.5k

概述

Set 接口是 Collection 接口下三大子接口之一。其下实现类都为元素不可重复的,不保证线程安全的集合。他有两个主要实现,即无序的 HashSet 与有序的 TreeSet。

Set 相对 List 集合与 Queue 集合不同之处在于,他的实现类需要依赖与 Map 集合的实现类密切相关。这体现在以下两点:

  • HashSet 实际依赖于 HashMap,他使用 HashMap 的 key 作为存储容器。TreeSet 同理,依赖于 TreeMap实现。
  • Map 集合中的 keySet 与 EntrySet 视图集合往往以实现了 Set 接口的内部类出现在 Map 的实现类中。
image-20201222152520801
image-20201222152520801

这是关于 java 集合类源码的第八篇文章。往期文章:

  1. java集合源码分析(一):Collection 与 AbstractCollection
  2. java集合源码分析(二):List与AbstractList
  3. java集合源码分析(三):ArrayList
  4. java集合源码分析(四):LinkedList
  5. java集合源码分析(五):Map与AbstractMap
  6. java集合源码分析(六):HashMap
  7. java集合源码分析(七):LinkedHashMap

一、Set 接口的类关系

1.父接口

Set 接口继承了 Collection 接口,而 Collection 接口又继承了 Iterable 接口,这表明 Set 集合具有 Collection 的通性,是一维的元素集合,并且可以使用迭代器或者 forEach() 迭代。

阅读全文 »

next5主题自定义摘要

发表于 2020-12-21 | 分类于 杂七乱八
字数统计: 680

概述

最近 next6 折腾了一段时间,最后还是回到了 next5,但是添加阅读全文按钮以后,默认的摘要生成不太方便,于是就把注意打到了 js 上。

这里整理一下 next5 生成摘要的方法。

一、yaml

这个是 hexo 自带的,通过直接在 yaml 里面配置

1
2
3
4
5
6
7
---
title: next5主题自定义摘要
date: 2020-12-21
tags: [杂七乱八]
categories: [杂七乱八]
description: 这里是一段摘要
---

不过加完以后, next 会默认在文章详情页面的发布信息下也生成摘要,个人觉得不是很美观。

二、文章截断

这个是 next 自带的,可以通过在文章中插入:

1
<!-- more -->
阅读全文 »

计算机网络基本知识

发表于 2020-12-21 | 分类于 计算机网络
字数统计: 1.1k

概述

本文为阅读《趣谈网络协议》之前需要了解的一些基本概念与知识,包括 OSI 七层模型与 TCP/IP 四层模型,不同层级的作用,不同层级之间的主要协议等。

一、为什么需要网络协议

网络协议为计算机网络中进行数据交换而建立的规则、标准或约定的集合。

例如,网络中一个微机用户和一个大型主机的操作员进行通信,由于这两个数据终端所用字符集不同,因此操作员所输入的命令彼此不认识。为了能进行通信,规定每个终端都要将各自字符集中的字符先变换为标准字符集的字符后,才进入网络传送,到达目的终端之后,再变换为该终端字符集的字符。

二、网络的分层模型

1.网络的分层模型

根据 OSI 提出的模型,计算机网络体系结构的通讯协议应当分为七层,而除了标准的 OSI七层模型以外,常见的网络层次划分还有 TCP/IP 四层协议以及 TCP/IP 五层协议,它们之间的关系如下:

image-20201223110909686

2.TCP/IP模型与OSI模型

阅读全文 »

java集合源码分析(七):LinkedHashMap

发表于 2020-12-21 | 分类于 java集合容器
字数统计: 3.1k

概述

LinkedHashMap 是 Map 接口下一个线程不安全的,允许 null 的,基于哈希表的实现。它是 HashMap 的子类, 由于引入了双向链表的数据结构,除了拥有 HashMap 的所有特征外,他还可以以双向链表的方式操作和访问,并且提供按插入顺序或访问顺序两种顺序访问方式。

由于结构的特殊性,通过 LinkedHashMap,我们可以非常便捷的实现一个基于 LRU 算法的缓存容器。

这是关于 java 集合类源码的第七篇文章。往期文章:

  1. java集合源码分析(一):Collection 与 AbstractCollection
  2. java集合源码分析(二):List与AbstractList
  3. java集合源码分析(三):ArrayList
  4. java集合源码分析(四):LinkedList
  5. java集合源码分析(五):Map与AbstractMap
  6. java集合源码分析(六):HashMap

一、LinkedHashMap 的数据结构

LinkedHashMap 是 HashMap 的子类,他的节点类 Entry 也继承了 HashMap 的节点类 Node 类。所以 LinkedHashMap 保留了 HashMap 的所有基本特征。

但是,不同的是,LinkedHashMap 在节点类 Entry 中增加了 after 和 before 两个指针用于指向前驱和后继节点,并且提供了头节点和尾节点的指针,也就是说,他实际上也可以认为是一条双向链表。

比如下图,依次按顺序插入三个节点:

image-20201221133625968
image-20201221133625968

实际上,从链表的角度来看,也可以理解为这样:

阅读全文 »

如何解决next5主题目录无法跳转的问题

发表于 2020-12-17 | 分类于 杂七乱八
字数统计: 769

概述

目前使用的 next 版本是 5.1.4 ,文章左侧的目录一直不能跳转也不能展开,按网上的办法一直没法解决,今天自己琢磨了一阵总算搞定了。

由于发现遇到这个问题的人不少,特此总结一下。

一般分为两种情况:渲染错误和超链接乱码。

一、渲染错误

1.问题描述

最典型的特征就是目录上的超链接为 undefined,或者点击的时候报错: Cannot read property 'replace' of null。

前一情况 GitHub 中已有相应的 Issues:根据 markdown 生成的 TOC 锚点的内容是 undefined

这个情况一般是 markdown-it 渲染出错,渲染时候把应该加在标题的锚点加到了标题内的 sapn 标签里,导致生成目录的时候获取不到对应的锚点。

比如原本 ##一级标题 应该是渲染成 <h2 id="一级标题">一级标题</h2>,然后生成目录的时候扫描所有 h2 标签获取 id 作为链接,但是实际上 marked-it 渲染出来的是这样的: <h2><span id="一级标题">一级标题</span></h2>

阅读全文 »

java集合源码分析(六):HashMap

发表于 2020-12-16 | 分类于 java集合容器
字数统计: 11.3k

概述

HashMap 是 Map 接口下一个线程不安全的,基于哈希表的实现类。由于他解决哈希冲突的方式是分离链表法,也就是拉链法,因此他的数据结构是数组+链表,在 JDK8 以后,当哈希冲突严重时,HashMap 的链表会在一定条件下转为红黑树以优化查询性能,因此在 JDK8 以后,他的数据结构是数组+链表+红黑树。

对于 HashMap ,作为集合容器,我们需要关注其数据的存储结构,迭代方式,能否存放空值;作为使用了数组作为底层结构的集合,我们还需要关注其扩容的实现;同时,针对哈希表的特性,我们还需要关注它如何通过哈希算法取模快速定位下标。

这是关于 java 集合类源码的第六篇文章。往期文章:

  1. java集合源码分析(一):Collection 与 AbstractCollection
  2. java集合源码分析(二):List与AbstractList
  3. java集合源码分析(三):ArrayList
  4. java集合源码分析(四):LinkedList
  5. java集合源码分析(五):Map与AbstractMap

一、HashMap 的数据结构

HashMap的数据结构

在 JDK8 之前,HashMap 的数据结构是数组+链表。在 JDK8 以后是数组 + 链表 + 红黑树。

在 HashMap 中,每一个 value 都被存储在一个 Node 或 TreeNode 实例中,容器中有一个 Node[] table 数组成员变量,数组中的每一格称为一个“桶”。当添加元素时,根据元素的 key 通过哈希值计算得到对应下标,将 Node 类的形式存入“桶”中。如果 table 容量不足时,就会发生扩容,同时对容器内部的元素进行重哈希。

当发生哈希冲突,也就是不同元素计算得到了相同的下标时,会将节点接到“桶”的中的第一个元素后,后续操作亦同,最后就会形成链表。

在 JDK8 以后,由于考虑到哈希冲突严重时,“桶”中的链表会影响查询效率,因此在一定条件下,链表元素多到一定程度,Node 就会转为 TreeNode,也就是把链表转为红黑树。

阅读全文 »

资源推荐:数据结构可视化网站

发表于 2020-12-15 | 分类于 资源推荐
字数统计: 129

最近偶然发现一个神奇的网站,来自美国南弗罗里达大学计算机科学系的一个在线的数据结构可视化的网站。

里面提供了各种数据结构与算法的动态演示,可以调整动画速度,或者根据输入的参数动态展示数据结构或者算法的整个变化过程。

比如这个红黑树的演示: Red/Black Tree

image-20201223170637182
image-20201223170637182

这里是完整的功能目录:Data Structure Visualizations

阅读全文 »
1234…10

99 日志
15 分类
22 标签
RSS
© 2022 Createsequence
主题 — NexT.Gemini v5.1.4
0%