TheBadZhang's Blog - thebadzhang
type: channel
link: http://www.tbz.io/index.php/author/1/
description: thebadzhang
items: 测试
items: 并查集
items: 凸包（Convex Hull）
items: 井字棋全解析
items: 线性代数的本质
items: URI URL URN
items: 《C++ Primer》5th 读书笔记
items: 《图解 HTTP》 读书笔记
items: 《51 单片机快速入门》读书笔记
items: 【转载】别像弱智一样提问

测试
type: item
date: 2025-11-08T16:40:02+00:00
description: 文件管理时出现问题，测试图片是否能够正常被访问

并查集
type: item
date: 2021-04-21T12:15:49+00:00

凸包（Convex Hull）
type: item
date: 2021-04-21T12:09:53+00:00

井字棋全解析
type: item
date: 2021-02-23T08:44:55+00:00
description: 井字棋全解析 此博客参考：[]() 0.0 井字棋看似简单，其实蕴含了很多的玩法，但是由于太过简单，导致玩起来都是，中间，中间，中间。少了无数变化，以至于只有和棋，鲜有输赢 |||| |-|-|-| |||| |||| 一个棋盘为 3x3 的布局，双方执黑白两棋，若棋三子相连，则赢。 由于棋盘的对称，所以第一步只有三种下法，其他都是对于这个棋位对称得到。 1.1 我们采用最常见的先手-中讲起 |||| |-|-|-| ||黑|| |||| 此时中心对称，对于白子，仅有两种走法，其余皆对称得到 第一种；边，无错此时白子必输 |||| |-|-|-| ||黑|| ||白|| 此时黑子有四种走法，两角，两边，但是走边必合 |||| |-|-|-| ||黑|| ||白|黑| 白子必须走左上角拦，棋局此时已定，黑子只要下在右上角即可双杀胜利 |白||| |-|-|-| ||黑|| ||白|黑| 若黑走上对角，类似，也直接可取胜 |||| |-|-|-| ||黑|黑| ||白|| |||| |-|-|-| |白|黑|黑| ||白|| 第二种：角 |||| |-|-|-| ||黑|| |||白| 2.1 |||| |-|-|-| |||| ||黑|| 3.1 |||| |-|-|-| |||| |黑|||

线性代数的本质
type: item
date: 2021-02-03T13:47:20+00:00
description: https://blog.csdn.net/a514371309/article/details/81604194 原文链接：https://www.cnblogs.com/TenosDoIt/p/3214096.html 从大学开始接触矩阵论和线性代数，记了很多公式，但是总感觉徘徊在线性代数的门外没有进去，感觉并没有接触到它的核心概念，不巧看到了这篇博客，顿时醍醐灌顶，豁然开朗，记录与此： 比如说，在全国一般工科院系教学中应用最广泛的同济线性代数教材（现在到了第四版），一上来就介绍逆序数这个古怪概念，然后用逆序数给出行列式的一个极不直观的定义，接着是一些简直犯傻的行列式性质和习题——把这行乘一个系数加到另一行上，再把那一列减过来，折腾得那叫一个热闹，可就是压根看不出这个东西有嘛用。 大多数像我一样资质平庸的学生到这里就有点犯晕：连这是个什么东西都模模糊糊的，就开始钻火圈表演了，这未免太无厘头了吧！于是开始有人逃课，更多的人开始抄作业。这下就中招了，因为其后的发展可以用一句峰回路转来形容，紧跟着这个无厘头的行列式的，是一个同样无厘头但是伟大的无以复加的家伙的出场——矩阵来了！多年之后，我才明白，当老师犯傻似地用中括号把一堆傻了吧叽的数括起来，并且不紧不慢地说：“这个东西叫做矩阵”的时候，我的数学生涯掀开了何等悲壮辛酸、惨绝人寰的一幕！自那以后，在几乎所有跟“学问”二字稍微沾点边的东西里，矩阵这个家伙从不缺席。对于我这个没能一次搞定线性代数的笨蛋来说，矩阵老大的不请自来每每搞得我灰头土脸，头破血流。长期以来，我在阅读中一见矩阵，就如同阿Q见到了假洋鬼子，揉揉额角就绕道走。 事实上，我并不是特例。一般工科学生初学线性代数，通常都会感到困难。这种情形在国内外皆然。瑞典数学家Lars Garding在其名著Encounter withMathematics中说：“如果不熟悉线性代数的概念，要去学习自然科学，现在看来就和文盲差不多。然而“按照现行的国际标准，线性代数是通过公理化来表述的，它是第二代数学模型，这就带来了教学上的困难。”事实上，当我们开始学习线性代数的时候，不知不觉就进入了“第二代数学模型”的范畴当中，这意味着数学的表述方式和抽象性有了一次全面的进化，对于从小一直在“第一代数学模型”，即以实用为导向的、具体的数学模型中学习的我们来说，在没有并明确告知的情况下进行如此剧烈的paradigm shift，不感到困难才是奇怪的。 大部分工科学生，往往是在学习了一些后继课程，如数值分析、数学规划、矩阵论之后，才逐渐能够理解和熟练运用线性代数。即便如此，不少人即使能够很熟练地以线性代数为工具进行科研和应用工作，但对于很多这门课程的初学者提出的、看上去是很基础（Base）的问题却并不清楚。比如说： 1、矩阵究竟是什么东西？ 2、向量可以被认为是具有n个相互独立的性质（维度）的对象的表示，矩阵又是什么呢？ 3、我们如果认为矩阵是一组列（行）向量组成的新的复合向量的展开式，那么为什么这种展开式具有如此广泛的应用？特别是，为什么偏偏二维的展开式如此有用？ 4、如果矩阵中每一个元素又是一个向量，那么我们再展开一次，变成三维的立方阵，是不是更有用？ 5、矩阵的乘法规则究竟为什么这样规定？为什么这样一种怪异的乘法规则却能够在实践中发挥如此巨大的功效？很多看上去似乎是完全不相关的问题，最后竟然都归结到矩阵的乘法，这难道不是很奇妙的事情？难道在矩阵乘法那看上去莫名其妙的规则下面，包含着世界的某些本质规律？如果是的话，这些本质规律是什么？ 6、行列式究竟是一个什么东西？为什么会有如此怪异的计算规则？行列式与其对应方阵本质上是什么关系？为什么只有方阵才有对应的行列式，而一般矩阵就没有（不要觉得这个问题很蠢，如果必要，针对mxn矩阵定义行列式不是做不到的，之所以不做，是因为没有这个必要，但是为什么没有这个必要）？而且，行列式的计算规则，看上去跟矩阵的任何计算规则都没有直观的联系，为什么又在很多方面决定了矩阵的性质？难道这一切仅是巧合？ 7、矩阵为什么可以分块计算？分块计算这件事情看上去是那么随意，为什么竟是可行的？ 8、对于矩阵转置运算AT，有(AB)T=BTAT，对于矩阵求逆运算A-1，有(AB)-1=B-1A-1。两个看上去完全没有什么关系的运算，为什么有着类似的性质？这仅仅是巧合吗？ 9、为什么说P−1AP得到的矩阵与A矩阵“相似”？这里的“相似”是什么意思？ 10、特征值和特征向量的本质是什么？它们定义就让人很惊讶，因为Ax=λx，一个诺大的矩阵的效应，竟然不过相当于一个小小的数λ，确实有点奇妙。但何至于用“特征”甚至“本征”来界定？它们刻划的究竟是什么？ 这样的一类问题，经常让使用线性代数已经很多年的人都感到为难。就好像大人面对小孩子的刨根问底，最…

URI URL URN
type: item
date: 2021-02-03T13:46:06+00:00
description: 曾经我天真的以为URI和URL是一样的，只是不同叫法而已，然后某一天有人告诉我这两个不一样，so我发现是时候好好研究一下这两个概念了。 URI：Uniform Resource Identifier，统一资源标识符 URL：Uniform Resource Location统一资源定位符 它们有什么关系 URI是一个用于标识互联网资源名称的字符串。 该种标识允许用户对网络（Network）中（一般指万维网）的资源通过特定的协议进行交互操作。URI的最常见的形式是统一资源定位符（URL），经常指定为非正式的网址。更罕见的用法是统一资源名称（URN），其目的是通过提供一种途径。用于在特定的命名空间资源的标识，以补充网址。 通俗地说，URL和URN是URI的子集，URI属于URL更高层次的抽象，一种字符串文本标准。 三者关系如下图： 图示 有什么区别 上面虽然大概介绍了这两者的区别，不过感觉还是有些模糊，下面着重研究区别。 首先，URI，是统一资源标识符，用来唯一的标识一个资源。而URL是统一资源定位器，它是一种具体的URI，即URL可以用来标识一个资源，而且还指明了如何locate这个资源。而URN，统一资源命名，是通过名字来标识资源，比如mailto:java-net@java.sun.com。也就是说，URI是以一种抽象的，高层次概念定义统一资源标识，而URL和URN则是具体的资源标识的方式。URL和URN都是一种URI； URL是URI的一种（通过那个图就看的出来吧）。但也不是所有的URI都是URL哦，就好像蝴蝶都会飞，但会飞的可不都是蝴蝶啊！ 让URI能成为URL的当然就是那个“访问机制”，“网络位置”。e.g. http:// or ftp://.。URN是唯一标识的一部分，就是一个特殊的名字。 下面就来看看例子吧，当来也是来自权威的RFC： ftp://ftp.is.co.za/rfc/rfc1808.txt (also a URL because of the protocol) http://www.ietf.org/rfc/rfc2396.txt (also a URL because of the protocol) ldap://[2001:db8::7]/c=GB?objectClass?one (also a URL because of the protocol) mailto:John.Doe@example.com (also a URL because of the protocol) news:comp.infosystems.www.servers.unix (also a URL because of the protocol) tel:+1-816-555-1212 telnet://192.0.2.16:80/ (also a URL because of the protocol) urn:oasis:names:specification:docbook:dtd:xml:4.1.2 这些全都是URI, 其中有些是URL. 哪些? 就是那些提供了访问机制的. 各自的组成 URI Web上可用的每种资源如HTML文档、图像、视频片段、程序等都是一个来URI来定位的； URI一般由三部组成 ①访问资源的命名机制 ②存放资源的主机（Host）名 ③资源自身的名称，由路径表示，着重强调于资源。 URL URL是Internet上用来描述信息资源的字符串，主要用在各种WWW客户程序和服务（Services）器程序上，特别是著名的Mosaic。 采用URL可以用一种统一的格式来描述各种信息资源，包括文件、服务器的地址和目录等。 URL一般由三部组成 ①协议(或称为服务方式) ②存有该资源的主机IP地址(有时也包括端口号) ③主机资源的具体地址。如目录和文件名等 现在，你明白了了吗，欢迎提出意见和补充哦 作者：daixinye 链接：https://www.zhihu.com/question/21950864/answer/154309494 来源：知乎 著作权归作者所有。商业转载请联系作者获得授权，非商业转载请注明出处。 统一资源标志符URI就是在某一规则下能把一个资源独一无二地标识出来。拿人做例子，假设这个世界上所有人的名字都不能重复，那么名字就是URI的一个实例，通过名字这个字符串就可以标识出唯一的一个人。现实当中名字当然是会重复的，所以身份证号才是URI，通过身份证号能让我们能且仅能确定一个人。那统一资源定位符URL是什么呢。也拿人做例子然后跟HTTP的URL做类比，就可以有：动物住址协议://地球/中国/浙江省/杭州市/西湖区/某大学/14号宿舍楼/525号寝/张三.人可以看到，这个字符…

《C++ Primer》5th 读书笔记
type: item
date: 2021-02-03T13:46:00+00:00
description: 《C++ Primer》5th 读书笔记 虽然说是这本书的笔记，但是还是会引入一些书外面的概念和新版标准的部分内容 对于不属于这本书的特殊的地方我会额外加以标注 [TOC] 第 1 章 开始 C++ 超级基础（Base）， 可以看我之前写的关于c++的必知必会的文章 UB(Undefined-Behaviors) 未定义行为 char 是 signed char 还是 unsigned char 是未定义的 int 是大于等于 short 小于等于 long 的 流 流可以作为 condition，用于判断是否到了流末尾，当到达流末尾时为 false，所以我们经常可以看到如下的写法 int n; while (std::cin >> n) { // do somthing... } 此时调用了 std::cin 类的 >> 函数，往 n 中输入数据，返回的是 std::cin 类的 istream 对象，到达流末尾时（通常这个标记为 EOF(End-Of-File)），在windows上可通过 Ctrl-z 和 Ctrl-d 输入 EOF 符号，标志流结束。 >> 作为一个函数，同理 std::cout << "Hello World" << std::endl; 的 << 也是一个函数，但是你会发现，其中存在多次调用，因为 std::cout<< 的返回值是一个 ostream 对象，即 std::cout 本身，所以实现了上面这样子的连续调用，但实际上，这个操作可以像下面这样分解， std::cout << "Hello World"; std::cout << std::endl; 这两种写法是完全等价的，于是就引出了一个问题，线程安全，因为，这个操作可以被等价分成两份，所以它的操作是不原子的，就可能在别的线程中，被插入，造成输出顺序混乱，比如输出了 Hello World123123\n 但是你想要输出的是 Hello World\n123123 其中，上面的\n的是转义字符，让换行看起来更加明显。解决办法也是有的，使用原子锁，但是这个内容是在后面学习多线程时才会讲到的，所以这里不加以赘述。 字面量 字面量大致可以分为两种，一种是语言提供的字面量，一种是库提供的字面量 语言提供的字面量，例如（其实我也没有仔细研究过具体哪些属于哪些，反正把自己知道的都列出来了） // 指针字面量 nullptr; // 布尔字面量 true;false; // 整数字面量 auto a = 1; // int a auto b = 0x1; // int b auto c = 01; // int c // 二进制字面量在 c++14 中引入 auto d = 0b1; // int d auto e = 1u; // unsigned int e auto f = 1ll; // long long f auto uf= 1ull; // unsigned long long f auto g = 1l; // long g // 其实这些后缀大小写都是可以的，为了方便书写，这里都写小写 // 浮点数字面量 auto h = 1.0l; // long double h auto i = 1e-1; // double i auto j = 1.0f; // float j auto k = 1e-1f; // float k // 字符(串)字面量 auto l = "Hello"; // const char *l auto m = u"World"; // const char16_t *m auto n = U"你好"; // const char32_t *n auto o = u8"世界"; // const char8_t *o auto p = L'！'; // wchar_t p auto q = '!'; // char q 但实际上，部分字面量会根据自己的数据大小自动变更数据类型，如果数据超过了long所能承载的范围，就会自动变为 long long，类型都是所能承受的最小类型，当然，char和short不在此列； 用户自定义字面量 使用运算符重载的方式 auto operator"" end(something) { } 就可以弄一个 somethingend 的一个字面量，something 作为参数（Parameter）传入 函数，处理后返回 第 I 部分 C++ 基础 第 2 章 变量和基本类型 初始化与赋值 其实这个是老生常谈的问题了，因为总是有非常多的事情，在这个上面纠结 int a = 10; // mov DWORD PTR [rbp-4], 10 int b; // int d = a; // …

《图解 HTTP》 读书笔记
type: item
date: 2021-02-03T13:45:11+00:00
description: [TOC] 第 1 章 了解 Web 及网络（Network）基础（Base） 1.1 使用 HTTP 协议访问 Web 1.2 HTTP 的诞生 1.3 网络基础 TCP/IP 1.4 与 HTTP 关系密切的协议：IP、TCP 和 DNS 1.5 负责域名解析的 DNS 1.6 各种协议与 HTTP 协议之间的关系 1.7 URI 和 URL 简单的 HTTP 协议 第 2 章 简单的 HTTP 协议 2.1 HTTP 协议用于客户端和服务（Services）端之间的通信 2.2 通过请求（Request）和相应的交换达成通信 2.3 HTTP 是不保存状态的协议 2.4 请求 URI 定位资源 2.5 告知服务器意图的 HTTP 方法 2.6 使用方法下达命令 2.7 持久连接节省通信量 2.7.1 持久连接 2.7.2 管线化 2.8 使用 Cookie 的状态管理 第 3 章 HTTP 报文内的 HTTP 信息 第 4 章 返回结果的 HTTP 状态码 4.1 状态码高中从服务端返回的请求结果 4.2 2XX 成功 4.2.1 200 OK 4.2.2 204 No Content 4.2.3 206 Partial Content 4.3 3XX 重定向 4.3.1 301 Moved Permanently 4.3.2 302 Found 4.3.3 303 See Other 4.3.4 304 Not Modified 4.3.5 307 Temporary Redirect 4.4 4XX 客户端错误 4.4.1 400 Bad Request 4.4.2 401 Unauthorized 4.4.3 403 Forbidden 4.4.4 404 Not Found 4.5 5XX 服务器错误 4.5.1 500 Internal Server Error 4.5.2 503 Service Unaviable 第 5 章 与 HTTP 协作的 Web 服务器 第 6 章 HTTP 首部 6.1 HTTP 报文首部 6.2 HTTP 首部字段 6.2.1 HTTP 首部字段传递重要信息 6.2.2 HTTP 首部字段结构 6.2.3 4 种 HTTP 首部字段类型 6.2.4 HTTP/1.1 首部字段一览 6.2.5 非 HTTP/1.1 首部字段 6.2.6 End-to-end 首部和 Hop-by-hop 首部 6.3 HTTP/1.1 通用首部字段 6.3.1 Cache-Control 6.3.2 Connection 6.3.3 Date 6.3.4 Pragma 6.3.5 Trailer 6.3.6 Transfer-Encoding 6.3.7 Upgrade 6.3.8 Via 6.3.9 Warning 6.4 请求首部字段 6.4.1 Accept 6.4.2 Accept-Charset 6.4.3 Accept-Encoding 6.4.4 Accept-Language 6.4.5 Authorization 6.4.6 Expect 6.4.7 From 6.4.8 Host 6.4.9 If-Match 6.4.10 If-Mofied-Since 6.4.11 If-None-Match 6.4.12 If-Range 6.4.13 If-Unmodified-Since 6.4.14 Max-Forwards 6.4.15 Proxy-Authorization 6.4.16 Range 6.4.17 Refer 6.4.18 TE 6.4.19 User-Agent 6.5 响应首部字段 6.5.1 Accept-Range 6.5.2 Age 6.5.3 ETag 6.5.4 Location 6.5.5 Proxy-After 6.5.6 Server 6.5.7 Vary 6.5.8 WWW-Authenticate 6.6 实体首部字段 6.6.1 Allow 6.6.2 Content-Encoding 6.6.3 Content-Language 6.6.4 Content-Length 6.6.5 Content-Location 6.6.6 Content-MD5 6.6.7 Content-Range 6.6.8 Content-Type 6.6.9 Expires 6.6.10 Last-Modified 6.7 为 Cookie 服务的首部字段 6.7.1 Set-Cookie 6.7.2 Cookie 6.8 其他首部字段 6.8.1 X-Frame-Options 6.8.2 X-XSS-Protection 6.8.3 DNT 6.8.…

《51 单片机快速入门》读书笔记
type: item
date: 2021-02-03T13:43:00+00:00
description: 51 单片机快速入门 [TOC] keil uVision5 第一步，点亮你的 LED 电源 晶振 复位电路 特殊功能寄存器 程序下载 第二步，硬件基础（Base）知识 电磁干扰 三极管 三八译码器 流水灯 定时器与数码管 中断与数码管动态显示 矩阵 LED 按键 步进电机与蜂鸣器 实例练习 UART串口通信 1602 液晶 1602 与 串口 i2c和e2prom ds1302 红外通信 模数转换和数模转换 RS-485 与 modbus协议 多功能电子钟 单片机开发常用工具 万用表 示波器 逻辑分析仪

【转载】别像弱智一样提问
type: item
date: 2021-02-03T13:40:00+00:00
description: 别像弱智一样提问 Stop-Ask-Questions-The-Stupid-Ways 你真的准备好了吗？ 感谢群友 for you 提供 避免 xy-problem 参考地址: http://xyproblem.info/ XY Problem 表示 提问者想要解决 原问题 X ，且觉得解决了 引申问题 Y 就能解决 X 问题 提问者对外提出了解决 Y 的的请求（Request） 回答者帮助提问者解决 Y 问题。（浪费了回答者和提问者双方的时间） 然而, 最终 Y 问题可能并不是 X 问题的一个合适的解决方法 因此， 提问者要避免创造这样的修罗场, 需要学会在问题之初就准确描述自己的根本问题。 学会描述问题 提问前你必须需要知道的事情 要知道， Free 的正确翻译是 自由，而非 免费。 要知道，愿意回答问题的人，都是 可爱 的人。 要知道，向帮助你的人 付费 是一个高尚的行为。即使回答你的人不是为了钱。 要知道，花钱买时间是一个常识。如果你不能认同，要么你钱包穷，要么你思想穷。 要知道，给对方发工资的不是你或者你老板。 要知道，提问的时候你才是 孙子，帮助你的人是 大爷。 要知道，不回答你的问题对其他人没有任何损失。 要知道，准确描述一件事情是一项基本生存技能。要学会 《提问的智慧》 要知道，搜索是一项基本生存技能，学不会用 Google 的话，你可能真的不适合你所从事的行业。 要知道，英文是一项基本生存技能，不认识英文的话，你可能真的不适合你所从事的行业。 幼儿园的小朋友都知道要有礼貌 请问 ...问题描述... 谢谢 学会描述问题 向别人提问的时候，要学会正确的描述问题。 把对方当成你的老板，你在给他提做报告。要用最精炼的文字和图片，向对方阐述明白一个事情的来龙去脉。 要知道，你不是我追的妹子，我没有时间来猜你想要什么。 记住，给别人的条件越多，你的问题解决越快。因为这不是解密游戏。 请问一个关于 什么 的问题。 我想要达到 什么样 效果，但是我这样做出现了 什么样 的问题。 报错日志是 这样 的。（要 学会 画关键字） 我尝试过 什么 方法来解决。 我尝试搜索过了 什么 关键字，在里面找到了 这些 URL 的回答，尝试了还是没有解决问题。 我用的是 什么 操作系统（Operating System），版本号是多少。 我用的是 什么 软件，版本号是多少。 谢谢 千万别认为只有别人帮助你之后才需要说 谢谢。 学会什么时候贴图 像这种，IM 自动转义表情，贴出来的问题全是表情。 学会什么时候要圈出重点 千万不要认为别人的频率和你是同步的，然后像这样扔出一张图一个表情就了事了。 在工作中， 你@的人可能会多问一句什么情况。 但是在 IM 聊天群里面，就没有这么好运气了。 如下很难吗？ @xxx，我这边访问不了 git [仓库]^(Repository)。 环境是: 环境是什么。 学会什么时候贴文字 什么是弱智一样的提问 萌新滚粗 | 什么鬼？ | 咋回事？ | 怎么办？ | 救命啊！！ | |-------------|-------------|-------------|------------------| | 自己 google | 自己 google | 自己 google | 自己 google 了吗 |