<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title>小憩一下</title>
		<link>https://sunyl.ink/</link>
		<description>Recent content on 小憩一下</description>
		<generator>Hugo</generator>
		<language>zh-hans</language>
		
		
		
		
			<lastBuildDate>Thu, 22 Sep 2022 10:56:03 +0000</lastBuildDate>
		
			<atom:link href="https://sunyl.ink/index.xml" rel="self" type="application/rss+xml" />
			<item>
				<title>归并排序 - Merge Sort</title>
				<link>https://sunyl.ink/post/merge-sort/</link>
				<pubDate>Thu, 22 Sep 2022 10:56:03 +0000</pubDate>
				<guid>https://sunyl.ink/post/merge-sort/</guid>
				<description>&lt;p&gt;『归并排序』基于分支算法实现，&lt;strong&gt;时间复杂度为：O(nlogn)&lt;/strong&gt;。一般有两种实现方式，一种是自顶向下的递归实现，但递归调用需要使用额外的栈空间，空间复杂度为 O(logn)；另一种是自底向上的时间方式，空间复杂度为常数级的 O(1)。&lt;/p&gt;&#xA;&lt;h2 id=&#34;nlogn-比-n2-快多少&#34;&gt;nlogn 比 n^2 快多少？&lt;/h2&gt;&#xA;&lt;p&gt;下面的表格中简单比较了在 10 ～ 10^5 数据量下，nlogn 和 n^2 分别耗费的时间：&lt;/p&gt;&#xA;&lt;table&gt;&#xA;&#x9;&lt;thead&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th&gt;&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th style=&#34;text-align: left&#34;&gt;n^2&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th style=&#34;text-align: left&#34;&gt;nlogn&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th&gt;faster&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&lt;/thead&gt;&#xA;&#x9;&lt;tbody&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;n = 10&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td style=&#34;text-align: left&#34;&gt;100&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td style=&#34;text-align: left&#34;&gt;33&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;3&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;n = 100&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td style=&#34;text-align: left&#34;&gt;1000&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td style=&#34;text-align: left&#34;&gt;664&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;15&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;n = 10^3&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td style=&#34;text-align: left&#34;&gt;10^6&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td style=&#34;text-align: left&#34;&gt;9966&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;100&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;n = 10^4&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td style=&#34;text-align: left&#34;&gt;10^8&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td style=&#34;text-align: left&#34;&gt;132877&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;753&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;n = 10^5&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td style=&#34;text-align: left&#34;&gt;10^10&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td style=&#34;text-align: left&#34;&gt;1660964&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;6020&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;p&gt;最后一列 faster 表示了 nlogn 比 n^2 快了多少倍。在 n = 10 时，nlogn 只比 n^2 快了 3 倍，在现代的计算机上，可能只是 1ms 和 3ms 的差别，我们可能根本感知不到。&lt;/p&gt;&#xA;&lt;p&gt;但随着 n 的数据量逐渐增大，nlogn 比 n^2 的优势会越来越大，当 n = 10^5 时，这个数据量还没那么大的时候，nlogn 已经比 n^2 快了近 6000 倍。这是什么概念呢？如果我们处理一个 10^5 左右数据量的数据集，用 nlogn 的算法处理需要花费一天，那么用 n^2 的算法就需要花费六千天。&lt;/p&gt;</description>
			</item>
			<item>
				<title>ICMP 与 Ping</title>
				<link>https://sunyl.ink/post/icmp-and-ping/</link>
				<pubDate>Tue, 20 Sep 2022 10:12:03 +0000</pubDate>
				<guid>https://sunyl.ink/post/icmp-and-ping/</guid>
				<description>&lt;blockquote&gt;&#xA;&lt;p&gt;🫠 无论是在宿舍还是办公室，或者是运维一个数据中心，总会遇到网络不通的问题。那台机器明明就在那里，你甚至可以通过机器的终端连上去看。它看着好好的，可是就是连不上去，究竟是哪里出了问题呢？&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;icmp-协议&#34;&gt;ICMP 协议&lt;/h2&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;😎 一般情况下，你可能会想到 &lt;code&gt;ping&lt;/code&gt; 一下，那你知道 &lt;code&gt;ping&lt;/code&gt; 是如何工作的么？&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;&lt;!-- raw HTML omitted --&gt;&lt;!-- raw HTML omitted --&gt;&lt;code&gt;ping&lt;/code&gt; 是基于 ICMP 协议工作的。ICMP 全称为 Internet Control Message Protocol，互联网控制报文协议。&lt;!-- raw HTML omitted --&gt;&lt;!-- raw HTML omitted --&gt;这里面的关键词是 “控制”，那具体是怎么 “控制” 的呢？&lt;/p&gt;&#xA;&lt;p&gt;网络包在异常复杂的网络环境中传输时，常常会遇到各种各样的问题。当遇到问题的时候，总不能 “死个不明不白”，要传出消息来，报告情况，这样才能调整传输策略。这就相当于我们经常看到的电视剧里，古代行军的时候，为将为帅者需要通过侦查兵、哨探或传令兵等人肉的方式来掌握情况，控制整个战局。&lt;/p&gt;&#xA;&lt;p&gt;&lt;!-- raw HTML omitted --&gt;ICMP 报文是封装在 IP 包里面的。因为传输指令的时候肯定需要源地址和目标地址。&lt;!-- raw HTML omitted --&gt;它本身非常简单，因为要做侦察兵，要轻装上阵，不能携带大量的物品。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://sunyl.ink/post/icmp-and-ping/assets/abc.png&#34; alt=&#34;abc-m600&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;ICMP 报文有很多的类型，不同的类型有不同的代码。&lt;!-- raw HTML omitted --&gt;&lt;!-- raw HTML omitted --&gt;最常用的类型是主动请求为 8，主动请求的应答为 0&lt;!-- raw HTML omitted --&gt;&lt;!-- raw HTML omitted --&gt;。&lt;/p&gt;</description>
			</item>
	</channel>
</rss>
