自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

进击的小学生

To be or not to be, this is a question.

  • 博客(419)
  • 资源 (10)
  • 论坛 (1)
  • 收藏
  • 关注

原创 000-EMC 深入解读-目录

除了刚毕业的应届生,从来没人敢说他精通 C++,Bjarne Stroustrup (C++ 之父)也不敢说。所以,放弃学习 C++,早日成佛吧。哈,开个玩笑,即便 C++ 虐你千百遍,你还待它如初恋不是?所以你买了很多 C++ 相关的书籍,什么 《C++ primer》、《STL 标准模板库》、《Effective C++》《21 天精通 C++》、《颈椎病康复指南》、《活着》……当然,...

2018-09-15 20:43:27 1300 1

原创 0- Golang 修炼指南

本系列是我的学习笔记,希望大家一起学习,一起进步。如果有错误的地方,及时评论 ^_^. 也可以加群讨论:610441700贡献者:@JovanyWong一、快速入门001 安装 go & 你好,世界 002 go 项目结构 003 渐入渐佳 go 程序 004 统计(一) 005 统计(二) 006 统计(三) 007 绘制三角函数图像(一) 008 绘制三角...

2018-02-08 10:05:06 2425 3

原创 0-Linux 网络编程修炼指南——内功心法

学习交流群: Linux 学习交流群 610441700说明:本系列文章并不能取代 《UNP》这本旷世之作,文章中难免有错误与不足之处,希望读者们遇到有疑问的地方可以加群互相交流,共同进步。写这一系列文章的目的有三个:一是为了提升自己对 linux 的理解,二是锻炼自己能够把知识点讲清楚,三是希望能更好的帮助基础薄弱的同学能够学习 UNP。在学习 unix 网络编程前,请...

2017-04-04 17:09:48 17102 51

原创 0-linux 环境编程修炼指南——外功心法

学习交流群: Linux 环境编程 610441700说明:本系列文章并不能取代 《APUE》这本旷世之作,文章中难免有错误与不足之处,希望读者们遇到有疑问的地方可以加群互相交流,共同进步。写这一系列文章的目的有三个:一是为了提升自己对 Linux 的理解,二是锻炼自己能够把知识点讲清楚,三是希望能更好的帮助基础薄弱的同学能够在学习 APUE。建议学习时间:大于 3 个月...

2016-10-09 20:26:21 28813 16

原创 操作系统修炼指南——保护模式

环境搭建000 实验环境搭建保护模式001 保护模式 002 段寄存器 003 段选择子与段描述符结构 004 段描述符属性分析 005 特权级 006 数据段权限检查 007 代码段权限检查与 jmp 008 跨段提权与调用门 009 调用门(无参) 010 调用门(有参) 011 中断门 012 陷阱门 013

2016-09-14 15:45:01 8372 11

原创 C++ 编写一个解释器

前言一直想知道如何编写一门脚本语言,现在终于有机会实现了。非常感谢 Thorsten Ball 的大作:Writing An Interpreter In Go 帮助我实现了这个想法!Go 是一门非常不错的语言,但是为了锻炼一下自己,使用 C++ 实现了书中的想法,项目地址:https://github.com/ivanallen/autumn 。可能你比较好奇为啥这个项目叫 Autumn...

2019-11-21 20:12:02 2701 4

原创 数据结构与算法学习库——DSA

介绍不少在校学生在学习数据结构与算法时痛苦不堪,很多数据结构写起来验证也很困难。如果有一个库,能帮助大家解决构建数据结构的困难,以快速验证自己的想法,那多好啊。DSA(Data struct & Algorithm) 就是这样的一个工具。示例我们来看一个示例。#include <iostream>#include <string_view>#inclu...

2019-05-01 22:41:17 1531 4

原创 实战:C语言实现用户态线程

0. 前言一直以来,我们学习线程切换与调度,都是通过阅读操作系统书籍或 Linux 源码甚至反汇编 Window 内核代码。无论怎样,这些东西都很抽象,学习起来十分困难。另外,随着现代化编程语言逐渐流行,C++20 的正式发布,都离不开用户态线程这些基础知识。再比如 Golang 的 Goroutine,腾讯公司的开源的 libco,百度的 BRPC 中的 bthread,如果想深刻理解它们,都...

2019-04-22 20:38:09 3429 3

原创 二叉树旋转

本文我们来学习二叉树的另一种操作——旋转。掌握了这个神技,你将会在平衡树的道路上所向披靡。1. 什么是旋转二叉树节点旋转一共有两种操作:左旋和右旋。如图 1 所示,左边的二叉树通过左旋得到右边的二叉树;反之右旋同理。(a, b, c 表示子树,而不是单独表示一个节点) 图1 左旋和右旋 左旋:是以节点的"右分支"为轴,进行逆时针旋转。我们将左旋操作定义为 left_rotate.右...

2019-03-03 20:15:27 3999

原创 二叉搜索树

红黑树不仅是二叉树,也是二叉搜索树。如果你想学习红黑树,却不了解二叉搜索树的性质,这就是典型的爬还没学会就想学走。所以本文就来讨论二叉搜索树的一点简单的性质以及操作。在此之前,你需要下载这份代码(C++),并对照实现:https://github.com/ivanallen/dsa1. 性质二叉树中:对于任意一个节点,左孩子的值都它的值小,右孩子的值比它的值大。(二叉搜索树一定满足这个性...

2019-03-02 00:12:30 648 2

原创 085-包的匿名导入(Blank Import)

转眼间,Golang 的博客从春天写到了冬天,现在我们又回到了原点,不忘初心。那时候我们为了匆匆进入 Golang 的世界,几笔掠过了 Golang 项目结构的相关知识,也粗略的介绍了 Golang 的包相关的概念——《go 项目结构》。我们依靠这点知识,撑到了现在。如今,是时候再为你扩展一些关于 Golang 包以及相关的工具了。1. 介绍一路走来,你一定遇到过这样的情况:如果 import...

2018-10-20 12:30:07 1156 1

原创 084-反射(通过 reflect.Value 修改值)

前面我们学习了一些关于反射的用法,比如:x := 2// 拿到 x 的 Value 对象a := reflect.ValueOf(x)我们可以通过 a 来得知 x 的具体值是多少,那有没有办法通过 a 来修改 x 的值呢?在上面这个例子中,是不行的。1. 可修改性或者说叫可设置性。Value 有一个方法,CanSet,它可以告知你是否可以设置值。还有一个方法就一并讲了,叫 CanA...

2018-10-14 13:17:13 1152

原创 083-反射(序列化 json)

想必你已经掌握了反射的相关操作,也能够遍历结构体的字段和方法,现在我们就要进入实战了。1. 问题正如标题所指,我们的目标是能将任意类型的结构体序列化成 json. 对应的 golang 的encoding/jsong 包就是 Marshal 函数, C++ 的 jsoncpp 库来说就是 write 或 fastwrite 方法,对应到 JavaScript 就是 JSON.stringify...

2018-10-14 12:22:43 813

原创 003-EMC 深入解读-理解模板型别推导(三)

上一篇文章我们介绍了 ParamType 是引用或指针的情况,这一节继续第二条规则,也是最复杂的规则。ParamType 是引用或指针,但不是通用引用ParamType 是通用引用ParamType 既非指针也非引用1. ParamType 是通用引用首先你得明白,何为通用引用(Universal Reference). 下面是一个比较平易近人的定义:"函数模板中持有型别形参 T ...

2018-09-30 18:15:29 280 3

原创 002-EMC 深入解读-理解模板型别推导(二)

接下来,从三种不同的情况来讨论函数模板推导规则:ParamType 是引用或指针,但不是通用引用ParamType 是通用引用ParamType 既非指针也非引用1. ParamType 是引用或指针,但不是通用引用template&amp;amp;lt;typename T&amp;amp;gt;void f(ParamType param) // 例如:ParamType = T&amp;amp;amp;,ParamT...

2018-09-17 10:32:28 322

原创 001-EMC 深入解读-理解模板型别推导(一)

EMC 第一章条款一,一上来就出个王炸——有关于函数模板的推导规则。1. 问题似乎你在使用的时候并未关注过这些事情,因为一切看起来相当自然,你也用的很爽。比如:template &amp;amp;amp;lt;typename T&amp;amp;amp;gt;T add(T a, T b) { return a + b;}这是一个计算两数之和的函数,你可以传递 float, double, int 等支持 op...

2018-09-17 10:31:33 636 2

原创 082-反射(结构体字段遍历)

如何知道一个未知结构体包含哪些字段呢?利用反射,可以很容易做到。1. 遍历结构体的 field 和 method还记得 reflect.Type 接口吧,这个接口还包含这 4 个方法:type interface Type { ... NumField() int Field(i int) StructField NumMethod() int ...

2018-09-15 13:41:36 1694

原创 081-反射(Kind)

希望你还能记得反射中的 Type 和 Value 这两个类型。Type 是接口类型,Value 是 Struct 类型;Type 是类型描述,而 Value 是具体的值。这次,我们来看一下 Golang 反射中的另一个重要概念 —— Kind.1. Kind 定义 A Kind represents the specific kind of type that a Type r...

2018-09-08 22:11:17 485

原创 080-反射(介绍)

接触过 Java 的同学对反射的概念一定不陌生。不过这里大多数同学没接触过 Java,也不用担心。反射是一种能让程序自身去检查和操作变量的一种能力,即使不知道变量的类型也没有关系。在 C++ 里,如果你不知道一个 class 的定义,你就没有办法去调用这个 class 的任何方法,操作这个 class 的任何成员,所以说 C++ 是一种不支持反射能力的语言。这不是说 C++ 办不到这件事情...

2018-08-26 17:08:28 244

原创 079-竞争检测

大多数时候,我们对并发的直觉都是错误的,特别是在多核处理器上更为明显。这也是高并发程序难写的原因。人类想了种种办法来降低程序员犯错误的机率,发明了很多方法。甚至在有些语言里,干脆就不支持多线程了,比如基于 NodeJs 开发的服务器。但在 Golang 里我们无法逃避这种并发竞争。1. 竞争例子下面这个例子开启了 100 个 goroutine,读写全局变量 a.// de...

2018-08-25 20:26:25 295

原创 078-只被执行一次的函数

倘若你看过我的所有文章的话,你肯定还记得曾经在学习《Linux 环境编程》的时候,也有一篇类似的文章,标题和这个一模一样——《只被执行一次的函数》。我强烈建议你回顾一下上面那篇文章。如果你没有《Linux 环境编程》的基础,强烈建议你补习一下,只会 Golang 是不行的。1. 背景相信很多同学都使用过单例模式。如果在单线程程序中,单例模式肯定没啥问题,但是如果在多线程程序中,可能...

2018-08-24 23:32:20 541

原创 077-内存同步

还记得前面的银行账户存款的例子吗?为了解决竞争问题,我们曾经使用了 sync.Mutex 来保护共享变量。特别的,在读取 balance 变量的时候,我们是这样写的:func Balance() int { mu.Lock() defer mu.Unlock() return balance}当时我们说到,这里加锁需要进一步讨论。这种情况也是并发编程里让人感到...

2018-08-12 22:23:11 447

原创 076-使用通信的方式共享内存

希望你还能记得住这句话: “不要使用共享数据的方式进行通信,而应该使用通信的方式来共享数据。”这一节,我们秉承这一理念,来改写前面的银行账户存款问题。1. 思路使用 channel 对控制共享数据。不要将共享数据暴露出去。其实第二条就可以使用第一条来实现。我们使用一个函数来维护这个共享数据。假设该函数叫 monitor.完整的程序如下:// gopl/syn...

2018-08-12 21:29:48 348

原创 075-互斥锁

过去我们在写 C/C++ 程序的时候,总会听到竞争的概念。比如多线程对共享变量的存取,需要加锁才能避免数据不致的问题。在 Golang 中也不例外,多个 Goroutine 存取共享变量,同样也会出现竞争问题。1. 银行转账假设 Alice 有一个银行账户。Alice 会往里存钱,她的好友 Bob 也会转钱给她。用程序来描述应该是这样:package bank// Alice...

2018-08-12 20:55:31 250

原创 074-Context

上一篇文章结束我留下了一下小小的悬念,说 Golang 标准库为我们提供了纯天然的取消并发请求的解决方案,在这里我就需要填坑了。1. 取消并发请求为了能让你快速上手 context,我们继续延续上一篇文章的取消并发请求的例子,使用 context 将其改写。如果你不熟悉上一篇的例子,请务必回去再看一遍。package mainimport ( &quot;context&quot; &quot;...

2018-07-15 17:53:31 241

原创 073-取消并发请求

在服务器开发领域,有很多未知的原因可能导致用户的请求失败。比如:你的服务器并发请求了多个下游服务,并在等待它们返回所有结果。但是很不幸,其中一个服务返回了错误,此时其它所有其它请求我们也就没有必要再等待下去了,而是直接返回并告诉用户本次请求失败。上面的场景在服务器开发领域非常常见,处理起来也比较困难。无论你是写 C++ 还是 Java,或是 Nodejs,都不那么容易处理。多说不益,我们使...

2018-07-15 00:13:04 252

原创 072-火箭发射游戏(select 关键字)

不知不觉,Golang 之路已经走过了一大半。谢谢所有读者一路陪伴,也很欣慰你们能一直坚持下来。接下来,我们进入几篇比较轻松的话题,我不打算在这里全盘托出,让我们从一个火箭发射小游戏开始吧。同样,这个例子来源于《Golang 程序设计》。1. 小小发射器当然,我们并不是真的要开发一套火箭发射程序的代码,只是简单的模拟一下。这对你来说几乎就是小学生的作业。我们的目标如下:从 10 ...

2018-07-11 00:22:53 636

原创 071-并发爬虫(二)

学习从来都不是一件困难的事情。那为啥我们学习会如此痛苦?其实难在坚持。这就好比跑步并不是一件困难的事,但是难在十年如一日的坚持。如果你仔细一点,会发现我的 csdn 头像是《海贼王》这部动漫的主角头像。海贼王这部动漫从 1997 年开始连载,至今已经连载 21 年了。将一部作品连载至今,需要的不仅仅是智慧,更多的是毅力。如果我们学习也能如此,日复一日,年复一年,我想也应该能有所成就吧。...

2018-07-08 22:23:55 282 5

原创 070-并发爬虫(一)

关于爬虫(Spider/Crawler),相信你多多少少接触过。比如你老板要你从某网站获取一批企业的黄页信息,这时候爬虫就派上用场了。而本文,我们的任务是编写一个网页抓取程序,提取网页中的 url. 我们的程序可以继续访问抓取到的 url,深度抓取更多的 url.1. 链接抓取器关于这个程序,我就不多废口舌了,你也不必过多的去研究它,掌握用法即可,我们的目的是学习并发。这个程序位于 gop...

2018-07-08 15:08:59 306

原创 069-Go 并发编程(三)

相信你已经对 goroutine 已经轻车熟路了,既然如此,我们来完成一个小任务。1. 故事背景背景是这样,我们的任务分成 3 个阶段。 第一阶段:从 A 工厂采购三种不同材料。第二阶段:你需要带着三种材料,交给 B 工厂 3 个不同的车间去加工。第三阶段:等待 B 工厂所有材料加工完毕,生产出零件后,你才能带上所有零件去 C 工厂组装零件。特别的,在上面的过程中...

2018-07-07 18:23:13 185

原创 068-Go 并发编程(二)

并发编程的难点在于异常处理。今天我们继续研究缩略图的并发编程,还记得之前留下的问题吗?我们的程序没有对程序返回的错误做特殊照顾。在服务器开发领域,这样的程序的显然不够健壮。1. 让程序能够处理错误之前我们的 makeThumbnails 函数没有返回值,现在我们给它添加一个 error 类型的返回值。下面这个程序在 demo04.go 中。func makeThumbnails(f...

2018-07-07 16:56:51 214

原创 067-Go 并发编程(一)

接下来了几篇文章,我们会重点讨论有关 Go 的并发编程以及常见的技术手段。当然,所有问题我们都需要从实例出发,所有的实例均来源于《The Go Programming Language》一书的第 8 章。1. 缩略图计算程序这个例子的目的很简单,给定多幅 jpg 图片,通过调用 Go 里的缩略图处理函数,生成相应的缩略图存储到本地。我们的目的不是写一个如何将图像处理成缩略图的函数,所以...

2018-07-01 17:55:08 277

原创 066-单向 channel

在 Golang 中,channel 也是一种引用数据类型。还记得我们学过哪些引用类型吗?所以 channel 作为参数,函数内对 channel 的修改,会直接影响到函数外面的变量。现在我们把上一节的 pipeline 进行改写,封装成函数的形式。1. 封装 counter 和 squarerpackage mainimport &amp;quot;fmt&amp;quot;// out 参数是传出参数fun...

2018-06-24 21:41:30 310

原创 065-pipeline

一个程序(函数)只干一件事,将不同的程序通过管道串联起来,完成一件复杂的事情。这是 pipeline 的核心思想。1. 介绍平时工作中,可能你会经常遇到这样的例子:$ cat abc.log | grep &quot;INFO&quot; | awk '{print $5}'abc.log 文件内容如下// abc.log[2018-06-05 21:30:22] [INFO] - id:4...

2018-06-24 00:13:42 265

原创 064-Channel

Golang 里 Channel 是一种数据类型。在 《goroutine 和 chan》 一文我们就探讨过 channel 的特性,它非常像线程安全的阻塞队列,只不过 Golang 里原生支持了它。在 Golang 里,chan 用的最多的地方就是用于 goroutine 之间的通信。很久以前你在学习多线程的时候,线程与线程之间通信的办法,一般都使用共享内存,互斥锁和条件变量这些手段,而...

2018-06-18 22:22:20 201

原创 063-Goroutine

欢迎来到新的章节—— Goroutine &amp;amp;amp;amp;amp;amp;amp;amp;amp;amp; Channel.如果说 goroutine 是 Golang 中的倚天剑,那 channel 就是 Golang 里的屠龙大宝刀。早在第一章,我们就展示过 cotoutine 和 channel 的魅力了,如果你忘记了,可以再次回顾一遍《goroutine 和 chan》。我不会一遍又一遍的给你介绍 goroutine 的概念,一方面是...

2018-06-18 19:17:32 220

原创 062-一些 Go 接口设计建议

Go 语言程序设计一书作者讲了一些关于 Go 语言面向对象编程的经验和建议,如果不拿过来太可惜了。 When designing a new package, novice Go programmers often start by creating a set of interfaces and only later define the concrete types that satis...

2018-06-17 14:10:29 305

原创 061-类型开关(Type Switch)

这一篇仍然是与类型断言相关的,只是稍微再延伸一下。没事,不要怕,没你想象的复杂。到目前为止,关于接口我们已经掌握了它的两种使用方法:实现了同一个接口的不同具体类型都具有共性特征,而接口屏蔽了底层细节。此时我们的关注的是接口的『方法』,而不是类型。使用类型断言,我们可以判断接口值的类型。此时我们关注的是接口的『类型』和『值』,而不是方法。第二种方法通常被描述为 discrimina...

2018-06-17 11:57:04 680

原创 060-类型断言(Type Assertion)

接口相关的知识中,最重要的不仅仅是了解接口如何实现,接口的构成(类型和值)。另一个非常非常重要的知识点就是类型断言。正好上一篇文章所介绍的,根据接口判断 error 的类型,相当重要,这可以帮助我们根据不同的错误来制定相应的策略。1. 类型断言首先,类型断言,当然只能在接口上进行操作啦。普通对象你都已经知道它的类型了,还有断言的必要吗?对于接口 x,语法形式上像 x.(T) 这样的...

2018-06-16 23:25:26 669

原创 059- error 接口

1. error 接口一直以来,我们到处都能看到 error 作为很多函数的返回值类型出现,我们也没太关注它,一般都以下面这样的形式看到它:// err := ...if err != nil { fmt.Printf(&quot;%v\n&quot;, err)}这个 error 实际上是接口类型:type error interface { Error() string...

2018-06-16 22:21:17 161

k近邻_kd-tree_kd树_vs2008_C++代码

vs2008写的Kd树泛型算法,支持k近邻查询。

2014-12-15

梯度下降法VS2008_C++

梯度下降法完整的VS2008代码。博客地址:http://blog.csdn.net/q1007729991/article/details/40382071

2014-10-23

事故树绘制软件easydraw免费V2.19

免费版本的事故软件,实现所有计算功能,节点自动调整,建树判错等功能!支持导出图片。

2013-12-13

增强版事故树绘制与分析程序

1.完善建立事故树的过程 2.事故树节点自动排列,免去手工排列节点的烦恼 3.编号自动生成,免去手工编号的繁琐 4.自动检测是否有闭环回路,防止用户建立逻辑上错误的事故树 5.自动检测用户是否在一个事件下重复添加 6.相同事件下建立节点,会进行同步复制,提高建树效率 7.相同事件下删除节点,会进行同步删除 8.手工拖动节点时自动对齐 9.修改节点信息,所有相同节点进行同步修改 10.画布大小自定义 11.画布颜色,事件框颜色,门颜色,文字颜色可以自定义 12.完美的一键保存bmp图片功能 13.编码树与文字树一键切换 14.列出事件清单,方便用户一次性输入事件概率 15.完善顶上事件概率计算,提供最小割集逼近法,无重复基本事件计算法,首项近似法,以及事件状态组合法。 16.优化最小割集、径集算法,提高计算速度 17.结构重要度删除不必要的状态组合法,仅提供公式三计算结果 18.提高了概率重要度、关键重要度的计算精度

2013-04-19

事故树绘制分析软件

简单易用,功能其全的一个事故树绘制分析软件,用以计算最小割集,最小径集,顶上事件概率,概率重要度,结构重要度,临界重要度,计算方法可选。 计算的结果可以保存到本地txt文本文件,方便您复制到您需要的地方,给您的论文写作也会带来极大方便。概率计算提供一套精确算法,可以根据您所提供的数据计算出精确结果。当然您也可以选择近似算法,本软件提供首项近似法和平均近似法的计算结果,给您多种选则。软件非常简单易用,自己几分钟就可以学会,谢谢您的使用!

2012-12-17

MFC 音乐播放器

基本上实现了常用的播放功能,可以自动下一首,通过音量条控制音量,实现时间进度栏,实现将添加到列表的歌曲文件列表存储到本地,下次启动的时候依然还在,更多功能等待你的发觉,不要说分高,学习才是王道,尊重作者的劳动成果,花了两天时间写的。

2012-12-12

汇编_单片机_matlab_Multisim等

注意:此为TXT文档,里面都有下载地址,你所要下载的东东都在我的u115网盘里! 静态反汇编工具W32Dasm.rar 51单片机种子全.rar win7系统工具.rar matlab详细教程.rar Multisim教程.exe 中国象棋经典残局《适情雅趣》_0.1.exe UltraEdit-32_V16.20.0.1009_汉化版(30天免费使用).exe 精美PPT模板_2009.11.30.zip VC6.0简体中文企业版.rar

2010-11-24

EasyDraw 3.0(事故树绘制)

EasyDraw 事故树软件,3.0 版本,完全免费。排版更加精致,支持生成 svg 矢量图,png/jpeg 图形。

2018-11-02

GCC 内联汇编

gcc 内联汇编 1 AT&T 与 INTEL 的汇编语言语法的区别 1.1 大小写 1.2 操作数赋值方向 1.3 前缀 1.4 间接寻址语法 1.5 后缀 1.6 指令 2 GCC 内嵌汇编 2.1 简介 2.2 内嵌汇编举例 2.3 语法 2.3.1 汇编语句模板 2.3.2 输出部分 2.3.3 输入部分 2.3.4 限制字符 2.3.5 破坏描述部分 2.4GCC 如何编译内嵌汇编代码

2018-10-28

版本控制之道-使用 Git

程序员修炼三部曲第一部,Travis Swicegood 著,董越、付昭伟等译

2018-10-28

--Allen--的留言板

发表于 2020-01-02 最后回复 2020-01-02

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人 TA的粉丝

提示
确定要删除当前文章?
取消 删除