车子(chezi)

不忘初心,有始有终。重在过程,贵在坚持。
私信 关注
车子 chezi
码龄7年

乐于开源,善于分享。死磕自己,方便大家。广泛查阅,独立思考。持续琢磨,自成一家。

  • 997,225
    被访问量
  • 271
    原创文章
  • 4,164
    作者排名
  • 613
    粉丝数量
  • 于 2014-01-16 加入CSDN
获得成就
  • 获得612次点赞
  • 内容获得257次评论
  • 获得1,045次收藏
荣誉勋章
TA的专栏
  • 《x86汇编语言:从实模式到保护模式》读书笔记
    52篇
  • Linux-0.00 源码剖析
    7篇
  • 裸板 stm32
    16篇
  • contiki
    3篇
  • s3c2440
    1篇
  • C语言
    16篇
  • 数据结构与算法
    31篇
  • Linux
    7篇
  • 《x86汇编语言:从实模式到保护模式》学习笔记
    61篇
  • 工具
    42篇
  • 《标准C语言指南》读书笔记
    3篇
  • GNU Make
    2篇
  • 技术之外
    7篇
  • 诗海撷粹
    3篇
  • 韦东山【嵌入式Linux视频】学习笔记
    13篇
  • 未分类
    8篇
  • Linux-0.11
    28篇
  • Git
    23篇
  • python
    18篇
  • 最近
  • 文章
  • 资源
  • 问答
  • 课程
  • 帖子
  • 收藏
  • 关注/订阅

批量保存网页

文章目录背景工具SeleniumgeckodriverPyUserInput工具下载和安装代码总结背景之前已经写了 2 篇文章:备份 CSDN 博客(上)备份 CSDN 博客(下)但是效果都不怎么好,其实还有一种简单粗暴的方法,就是用浏览器下载,批量下载。工具我是 Ubuntu 的操作系统,自带火狐浏览器。要下载 3 个工具:seleniumgeckodriverPyUserInputSeleniumSelenium 是一个用于 Web应用程序测试的工具。Selenium 测试直
原创
71阅读
1评论
0点赞
发布博客于 7 天前

备份CSDN博客(下)

文章目录背景fileinput 模块安装 clean-marklinecache 模块下载图片完整代码总结其他备份博客的思路背景在上一篇文章 备份 CSDN 博客(上)中,已经解决了第一个问题——获取所有博文的 URL,这篇博文就讨论如何根据 URL 把文章下载下来,并转换成 markdown 格式。fileinput 模块python 中的 fileinput 模块可以对一个或多个文件中的内容进行迭代、遍历等操作。该模块的 input() 函数有点类似操作文件的 readlines() 方法,区别
原创
11阅读
0评论
0点赞
发布博客于 8 天前

备份 CSDN 博客(上)

备份 CSDN 博客(上)背景因为 CSDN 的博客没有批量导出功能,所以我就琢磨写个脚本可以一键备份博客,最好是 markdown 格式。搜了一波,极少有能拿来就用的,那就自己探索吧。思路解析思路很简单:得到每篇文章的链接(URL)根据 URL 下载每篇文章,转换成 markdown 格式囿于篇幅,这篇文章先解决第 1 个问题。其实我不太懂 python 爬虫和前端,算是现学现卖,说得不对的地方,请您指正。如何获得每篇文章的 URL如图所示,我的博客总共有 7 页,第 2 页的
原创
62阅读
1评论
0点赞
发布博客于 12 天前

网页转 markdown 的工具

文章目录背景准备工作安装 clean-mark如何使用效果展示参考资料背景想把我在 CSDN 的博客备份下来,最好是 markdown 格式。在探索的过程中发现了一款工具——clean-mark它的仓库地址是:https://github.com/croqaz/clean-mark有人问为什么不保存成 html,而是要保存成 markdown 呢?clean-mark 在项目主页已经说得很清楚了:to save interesting articles offline, in a high
原创
94阅读
1评论
1点赞
发布博客于 16 天前

搭建 Verilog 仿真环境

搭建 Verilog 仿真环境对于 Verilog 的初学者,有一个仿真环境是必要的。这就好比是刚开始接触 C 语言,连 C 语言的开发环境都没有,怎么学习 C 语言呢,难道靠大脑模拟运行吗?本文介绍如何在 Linux 操作系统(以 Ubuntu 为例)下搭建一个轻量级的 RTL 仿真环境。安装软件要安装 2 个软件sudo apt-get install iverilogsudo apt-get install gtkwave准备代码安装好后可以做个实验。先准备两个文件count.v
原创
146阅读
0评论
0点赞
发布博客于 1 月前

verilog 中的 timescale

原文链接:https://blog.csdn.net/qq_16923717/article/details/81099833timescale 的语法timescale 是 Verilog 中的预编译指令,指定位于它后边的module的时间单位和时间精度,直到遇到新的 timescale 指令或者 resetall 指令。它的语法如下:`timescale time_unit / time_precision假如我们延时 x 个时间单位,那延时的总时间 time = x * time_unit,
转载
138阅读
0评论
0点赞
发布博客于 1 月前

grep --exclude 不起作用

用 grep 查找的时候,如果想在查找范围中排除掉某个目录和文件,怎么做?很简单,用 --exclude=xxxx 或者 --exclude-dir=xxxx(用于目录)举例子$ grep 1111 -r ../a.txt:1111./b.txt:1111111./c.txt:11111222221假如要排除掉文件 a.txt$ grep 1111 --exclude=a.txt -r ../b.txt:1111111./c.txt:11111222221假如要排除掉当前目
原创
197阅读
0评论
0点赞
发布博客于 1 月前

二叉树的构建

文章目录什么是扩充二叉树扩充二叉树的前序遍历二叉树构建:前序 + 中序二叉树构建:后序 + 中序二叉树构建:层序 + 中序二叉树构建:扩充二叉树前序二叉树构建:扩充二叉树后序参考资料先复习一下二叉树的遍历:前序遍历:根结点—>左子树 —>右子树中序遍历:左子树—>根结点 —>右子树后序遍历:左子树 —>右子树 —>根结点如果知道了某个遍历序列,能否还原出那个二叉树呢?要构建一棵二叉树,仅靠前序、中序和后序中的任何一个都不能,因为不能唯一确定一棵二叉树。二叉树
原创
149阅读
0评论
0点赞
发布博客于 1 月前

不带头节点的单链表如何头插(多图易懂)

文章目录缘起带头节点的头插不带头节点的头插错误的代码为什么错误如何修改返回新的头指针二级指针缘起本文想说的是单向非循环链表的头插。单向非循环链表,可以是带头节点的,也可以是不带头节点的。对于前者,代码比较简单,后文会说。对于后者,不带头节点的单向链表的头插,我发现即使有多年工作经验的老鸟,也可能写出错误的代码。带头节点的头插#include <stdio.h>#include <assert.h>#include <stdlib.h>typedef s
原创
192阅读
0评论
0点赞
发布博客于 3 月前

main() 函数解析(一)——Linux-0.11 剖析笔记(六)

文章目录1. 宏定义`_syscall0`2. `setup.s`读取的参数3. 读取CMOS实时时钟信息3.1 `outb_p(value,port)`3.2 `inb_p(port)`3.3 `outb(value,port)`和`inb(port)`3.4 CMOS与RTC3.5 time_init函数4. main函数4.1 根设备号4.2 复制硬盘参数表4.3 计算主内存起始位置4.4 虚拟盘4.5 `mem_init`函数4.6 `trap_init`函数4.6.1 `set_trap_gate
原创
422阅读
0评论
1点赞
发布博客于 7 月前

C语言的复合语句表达式

看一个例子int main(void){ int x = 10; int y = 1; int c = ({x;y;}); printf("c = %d
",c);}第 5 行,这样写合法吗?答案是合法,结果输出 1再比如({ int y = foo(); int z; if(y > 0) z = y; else z = -y; z;})这就是复合语句表达式。
原创
548阅读
0评论
2点赞
发布博客于 7 月前

C 语言内联汇编介绍

文章目录为什么要用内联汇编内联汇编的基本要素语法汇编语句模板操作数输出部分和输入部分操作数约束常用约束寄存器操作数约束内存操作数约束 (m)匹配(数字)约束为什么要用内联汇编首先,对于那些频繁调用的函数,为了提高执行效率,直接用汇编写比较好。其次,有些功能只能用汇编实现,比如开中断和关中断:#define sti() __asm__ ("sti"::)#define cli() __asm__ ("cli"::)内联汇编的重要性体现在它能够灵活操作,而且可以使其输出通过 C 变量显示出来。因为
原创
174阅读
0评论
0点赞
发布博客于 7 月前

head.s 剖析——Linux-0.11 剖析笔记(五)

文章目录一、加载段寄存器LSS指令二、设置中断描述符表(IDT)中断处理过程 `ignore_int`三、设置全局描述符表(GDT),加载 GDTR四、重新加载段寄存器五、检测A20是否开启六、检测 `x87` 协处理器关于异或按位异或的3个特点按位异或的几个常见用途1. 使某些特定的位翻转2. 不使用临时变量就可以实现两个值的交换3. 在汇编语言中经常用于将变量置零4. 快速判断两个值是否相等七、开启分页,跳转到 main()为调用 `main()`函数做准备设置页目录和页表八、总结head.s 程序在
原创
248阅读
3评论
2点赞
发布博客于 7 月前

x86分页机制详解

文章目录1. 为什么会有分页机制?2. 从虚拟地址到物理地址3. 简单的分页模型4. 页表和页目录4.1 层次化的分页结构4.2 页表4.3 页目录5. 地址变换的具体过程1. 为什么会有分页机制?有些资料说是为了实现“虚拟内存”,真的是这样吗?如果没有分页机制,能否实现“虚拟内存”?答案是肯定的。当同时运行的任务很多时,内存可能就不够用。如图所示,每个段描述符都有 AVL 位(简称 A 位),用于表示一个段最近是否被访问过(准确地说是表明从上次操作系统清零该位后一个段是否被访问过)。当创建描述
原创
351阅读
2评论
1点赞
发布博客于 7 月前

简单的分页模型

分页机制是 80x86 内存管理机制的第二部分。它在分段机制的基础上完成虚拟(逻辑)地址到物理地址的转换。为了理解分页机制,本文介绍一个简单的分页模型,虽然简单,但是对理解真正的分页模型非常有帮助。咱们开始吧!在单纯的分段模式下,线性地址就是物理地址。比如下面的汇编语句:mov edx [0x1008]这是要把内存中某个位置的值赋给 EDX,但究竟是内存的哪个位置呢?这就要看数据段描述符了。假设描述符中的段基地址为 0x0020_0000,界限值为 0x2007,段的粒度是字节 ,那么该段的最大
原创
186阅读
0评论
0点赞
发布博客于 7 月前

setup.s 总结——Linux-0.11 剖析笔记(四)

上一篇文章 setup.s 解读——Linux-0.11 剖析笔记(三) 详细地解释了 setup.s 的代码,整个代码完成的任务有:获取一些参数保存在 0x90000 处保存光标的位置获取从 1M 处开始的扩展内存大小获取显示模式检查显示方式(EGA/VGA)并获取参数复制硬盘参数表(包括检查系统是否有第2个硬盘)关中断移动 system 模块到 0x00000加载 IDT 和 GDT开启 A20设置 8259进入保护模式(使 CR0 的 PE 位 = 1)跳转到 0
原创
166阅读
0评论
0点赞
发布博客于 7 月前

伪指令 .align 的含义

伪指令 .align 的作用是在编译时指示编译器填充位置计数器(类似指令计数器)到一个指定的内存边界处,目的是为 了提高 CPU 访问内存中代码或数据的速度和效率。其完整格式为:.align val_1 , val_2, val_3其中第 1 个参数值 val_1 是所需要的对齐值;第 2 个是填充字节的值,填充值可以省略,若省略则编 译器使用 0 值填充。第 3 个用来指明最大用于填充或跳过的字节数。如果进行边界对齐会超过 val_3 指定的最大字节数,那么就根本不进行对齐操作。如果需要省略第 2 个
原创
208阅读
0评论
0点赞
发布博客于 8 月前

setup.s 解读——Linux-0.11 剖析笔记(三)

题目:setup.s 解读——Linux-0.11 剖析笔记(三)更新记录版本时间修订内容1.02018-4-14增加了“获取显示模式”这一节,AL取值的表格2.02020-6-27补充了一些内容本文由 setup.s 分析—— Linux-0.11 学习笔记(二) 修改而来。文章目录定义符号常量获取一些参数保存在 0x90000 处保存光标的位置获取从 1M 处开始的扩展内存大小获取显示模式检查显示方式(EGA/VGA)并获取参数复制硬盘参数表复制 HD0
原创
405阅读
0评论
0点赞
发布博客于 8 月前

bootsect.s 解读——Linux-0.11 剖析笔记(二)

题目:bootsect.s 解读——Linux-0.11 剖析笔记(二)文章目录一些符号常量老式Linux设备号的命名规则bootsect 把自己搬运到 0x90000,并跳转加载 setup 模块到 0x90200INT 13H AH=02H:读扇区INT 13H AH=00H:磁盘控制器复位获得磁盘驱动器参数(主要是每磁道的扇区数)INT 13H AH=08H:读取驱动器参数打印 “Loading system ...”INT 10H AH=03H:获取光标位置和形状INT 10H AH=13H:写字
原创
469阅读
2评论
0点赞
发布博客于 8 月前

硬盘的工作原理

文章目录物理结构容量计算磁盘读写的三个步骤磁盘读写响应时间物理结构一块磁盘有若干盘片,每个盘片有上下两个面,每个盘面都对应地有一个读写磁头,所以经常用磁头来指代盘面。磁头都有编号,第一个盘片,上面的磁头编号是 0,下面的磁头编号是 1;第二个盘片,上面的磁头编号是 2,下面的磁头编号为 3,…下图显示的是一个盘面,盘面中一圈圈的灰色同心圆为一条条磁道。磁道也要编号,从盘面最外面的那条磁道开始,向着圆心的方向,从 0 开始编号。所有盘面具有相同编号的磁道形成一个圆柱,称之柱面。柱面是一个用来优化
原创
135阅读
1评论
0点赞
发布博客于 8 月前

bootsect.s 预备——Linux-0.11 剖析笔记(一)

文章目录boot 目录下文件介绍16 位代码是什么意思计算机启动过程Linux 0.11 启动过程boot 目录下文件介绍boot 目录中一共有三个文件,都是用汇编语言写的,如下图(图来自赵炯的书)[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wQUWW8oT-1592127754860)(pics/image-20200614102237979.png)]我是在 https://mirrors.edge.kernel.org/pub/linux/kernel/His
原创
296阅读
0评论
0点赞
发布博客于 8 月前

大龄程序员有出路吗

今天我面试了一个程序员,论学历,知名 985 的本科加硕士;论工作经历,12 年工作经验,待过好几个大公司,还有一些外企。如此亮眼的简历,很难不让我对他的能力抱有期待。既然是招搞技术的,编码功底是必须的,我递过去一张纸,让他写个单链表的代码,写得很不流畅,还犯了一些低级错误。好吧,那就根据简历上的工作经历提问。仔细看看他待过的公司,时间都不长,基本上是 2 年一跳。从行业来看,也是五花八门,从来没有在一个行业深钻过。他也意识到了,对我说,感觉什么都会,但是都不精通,应该在一个公司稳定下来。这引发了我
原创
330阅读
0评论
2点赞
发布博客于 8 月前

如何提高 GitHub 的下载速度

如何提高 GitHub 的下载速度一般来说,国内的朋友从 GitHub 上面下载代码,速度最大是 20KB/s,这种龟速,谁能忍受呢?本文介绍一种方法——利用“码云”,可以大大提高下载速度,亲测有效。1. 注册账号去“码云”注册一个账号,然后登录。2. 准备好链接进入 GitHub 项目主页,复制地址。3. 创建仓库点击加号,创建仓库。在弹出的界面中找到“导入已有仓库”,点...
原创
846阅读
0评论
0点赞
发布博客于 10 月前

如何给Typora安装主题

文章目录主题从哪里来如何安装主题How to install a theme测试Typora 是一款优秀的 .md 格式编辑软件。它自带的主题不多。本文介绍如何给 Typora 安装主题。主题从哪里来一般是去官网下载,下载地址是:http://theme.typora.io/比如:选择你喜欢的主题,点击 Download 就可以下载。如果对源码有兴趣,可以点 Homepage,很多代...
原创
2212阅读
0评论
3点赞
发布博客于 10 月前

themes.zip

typora主题包,解压后覆盖目标文件夹即可。 # How to install a theme Download theme from this website or other place. Open typora. Click "Open Theme Folder" button from `Preference Panel` → `Appearance` section. Put downloaded content into the opened folder, make sure your css files are directly under that directory.
zip
发布资源于 10 月前

《x86汇编语言:从实模式到保护模式》视频来了

《x86汇编语言:从实模式到保护模式》视频来了很多朋友留言,说我的专栏《x86汇编语言:从实模式到保护模式》写得很详细,还有的朋友希望我能写得更细,最好是覆盖全书的所有章节。毕竟我不是作者,只有作者的解读才是最权威的。当初我学习这本书的时候,只能靠自己摸索,网上搜不到什么好资源。如果你正在学这本书或者汇编语言,那你有福气了。本书作者李忠老师,以此书为蓝本,录制了全套视频。试看点这里如...
原创
1892阅读
1评论
1点赞
发布博客于 10 月前

三门问题

三门问题本文摘自我的公众号【车子的心智探索】欢迎关注我!题目三门问题,也叫蒙提霍尔问题或山羊问题。这个问题最早出自美国一档电视节目,此节目的主持人叫蒙提霍尔。假设你是参赛者。你面前有三扇关闭的门,其中一扇门后面有一辆汽车,而另外两扇门后面各有一只山羊。当然汽车值钱,你希望选中藏有汽车的那扇门。游戏规则是:你选定一扇门,但先不开启,知道答案的主持人会开启剩下两扇门中的一扇,露出其中一...
原创
333阅读
0评论
0点赞
发布博客于 1 年前

五分钟了解先验概率和后验概率

五分钟了解先验概率和后验概率本文摘自我的公众号【车子的心智探索】欢迎关注我!不理解先验概率和后验概率?莫慌,本文可以帮你。从面积的角度看概率在说正题之前,咱们从面积的角度认识一下概率。拿掷骰子来说,每个点的概率是相等的,因为总概率是 1,所以每个点数的概率是 1/6。我们用格子的大小来表示概率,那么掷骰子的概率图是这样的:如果把掷出的点数小于等于 4 记作事件 F,问你 P(F)...
原创
424阅读
0评论
3点赞
发布博客于 1 年前

C语言指针入门 《C语言非常道》

C语言基础之指针初步文章目录C语言基础之指针初步初识指针取地址运算符和指针变量的声明指针指向什么类型很重要解引用运算符总结与补充指针是 C 语言的难点,也是亮点。有人说如果不懂指针,那就不算是掌握了 C 语言。作为一个嵌入式软件工程师,我认为指针是 C 语言的杀手锏,离开了它,C 语言不可能在嵌入式领域“一览众山小”。好了,进入正题。初识指针int a = 5;这句话定义了 int...
原创
312阅读
1评论
2点赞
发布博客于 2 年前

C 语言基础之数组

文章目录什么是数组数组变量的声明多维数组什么是数组数组,顾名思义,就是一组数。假如班上有 30 个同学,让你编程统计每个人的分数,求最高分、最低分、平均分等。如果不知道数组,你只能这样写代码:int ZhangSan_score = 95;int LiSi_score = 90;......int LiuDong_score = 100;int ZhouJie_score = 7...
原创
119阅读
0评论
1点赞
发布博客于 2 年前

C 语言的基本数据类型

C 语言的基本数据类型注:本文面向 C 语言初学者,如果你是熟手,那就不用看了。有人问我,char、short、int、long、float、double 等这些关键字到底是什么意思,如果说他们是数据类型的话,那么为啥有这么多数据类型呢?如果写了一句:int a;那么执行的时候在内存中会有什么变化呢?橡皮泥大家都玩过吧,一般你买橡皮泥的时候,店家会赠送一些模板。上图就是我在某宝的...
原创
185阅读
0评论
0点赞
发布博客于 2 年前

问题解决: SSR 的 1080 端口被占用

问题解决: SSR 的 1080 端口被占用在我的博客 故障解决:端口已被占用 1080 中已经讨论了一些方法,但也不是每次都能成功。对于 SSR,我们完全可以换一种思路:既然 1080 被占用了,那我就换个端口。找到配置文件 gui-config.json找到"localPort" : 1080,你完全可以换一个端口号,比如"localPort" : 12345,保存后重启 ...
原创
45802阅读
12评论
33点赞
发布博客于 2 年前

这些心智程序你安装了吗?

原文题目:《为什么聪明人也会做蠢事(四)》心智程序大脑有两个特征导致人类不够理性,一个是处理信息方面的缺陷,一个是心智程序出了问题。前者可以称为“认知吝啬鬼”,前几篇文章已经讨论了。本期主要讲心智程序这个方面。心智程序这一概念由哈佛大学认知科学家大卫•帕金斯提出,指个体可以从记忆中提取出的规则、知识、程序和策略,以辅助我们决策判断和解决问题。如果把人脑比喻成计算机,那心智程序就是人脑的软件,...
原创
349阅读
0评论
2点赞
发布博客于 2 年前

嵌入式方向的毕业生,找工作很迷茫

一个应届硕士生的问题:虽然我明白想成为技术大牛需要日积月累的磨练,但我总感觉自己学习方法或者哪些方面有问题,时间一天天过去,自己也每天不停学习,但总感觉自己没有想象中那样进步,总感觉找不到一个很清晰的学习规划……眼看 9 月份就要参加秋招了,我想毕业了去大城市磨练几年,涨涨见识,拓开眼界多学点东西。但是感觉自己的实力还是很不够,内心慌得不行,总怕浪费了这人生唯一的校招机会,当然我也明白,毕业找...
原创
3504阅读
6评论
13点赞
发布博客于 2 年前

批处理以当前时间为文件名创建文件

批处理以当前时间为文件名创建文件批处理创建空文件有时候,需要创建以当前时间命名的文件,手动输入当然可以,但是有更省心的方法吗?假设我是 windows 操作系统,打开命令行。输入以下命令试试:echo %date:~0,4%_%date:~5,2%_%date:~8,2%_%time:~0,2%_%time:~3,2%_%time:~6,2%输出类似:2019_06_24_22_...
原创
903阅读
0评论
1点赞
发布博客于 2 年前

Python学习之迭代器协议

文章目录迭代(iteration)可迭代(iterable)迭代器(iterator)迭代器协议(iterator protocol)迭代器协议与 for 循环参考资料迭代(iteration)逐个获取元素的过程,就是「迭代」。例如:# iteration# 用 for 循环迭代序列a_list = [1, 2, 3]for i in a_list: print(i)...
原创
176阅读
0评论
1点赞
发布博客于 2 年前

参数匹配顺序——Python学习之参数(三)

参数匹配顺序——Python学习之参数(三)文章目录参数匹配顺序——Python学习之参数(三)函数参数匹配表参数匹配顺序keyword-only 参数的位置参考资料这篇博文是对上一篇博文参数匹配模型的总结与扩展。函数参数匹配表下面的表格总结了Python中参数匹配的语法。考虑到翻译过来可能不准确,我就不翻译成中文了。参数匹配顺序在函数调用中,参数必须以此顺序出现:任何位置参数,后...
原创
477阅读
1评论
0点赞
发布博客于 2 年前

参数匹配模型——Python学习之参数(二)

参数匹配模型——Python学习之参数(二)文章目录参数匹配模型——Python学习之参数(二)位置参数:从左至右进行匹配关键字参数:通过参数名进行匹配默认参数:为没有传入值的参数定义参数值可变参数:收集任意多于基于位置或关键字的参数可变参数解包:传递任意多的基于位置或关键字的参数Keyword-only参数:参数必须按照名称传递参考资料位置参数:从左至右进行匹配一般情况下,也是我们最常使用...
原创
168阅读
0评论
0点赞
发布博客于 2 年前

禁止复制的网页怎么复制

禁止复制的网页怎么复制文章目录禁止复制的网页怎么复制前言准备工作操作步骤一、在浏览器菜单中找到“开发者工具”二、点击“检查元素(inspect element)”按钮三、在网页中选取需要的片段,锁定对应的元素四、复制被选中的元素五、粘贴到记事本,以`.html`为后缀命名六、打开`xxx.html`,优雅地复制前言在浏览网页的时候,有的网页内容无法复制。比如「360doc个人图书馆」,虽然选...
原创
408阅读
0评论
2点赞
发布博客于 2 年前

Windows如何添加右键新建菜单

Windows如何添加右键新建菜单文章目录Windows如何添加右键新建菜单实验环境缘起以新建`.md`文件为例第一步第二步第三步总结实验环境Windows7缘起因为我习惯用 Markdown 格式写文本,每次新建一个.txt后都要手动修改为.md,真的麻烦。如何在右键新建菜单中添加.md选项呢?网上有很多方法,这些方法我都尝试了,要么太麻烦,要么不凑效。在尝试的过程中,我摸索出了一种...
原创
3612阅读
2评论
5点赞
发布博客于 2 年前

Python学习之函数返回多个值

Python学习之函数返回多个值问题的引出Python中,一个函数能不能一次返回多个值?在C语言中,函数最多返回一个值,如果要返回多个值,可以把这些值封装在一个结构体中。注意,C语言不允许函数返回整个数组。Python中,可以返回任意类型的对象,如果想返回多个值,可以把这些值封装成一个元组或者其他的集合类型。举例>>> def multiple(x, y):... ...
原创
1432阅读
0评论
1点赞
发布博客于 2 年前

Python学习之参数(一)

Python学习之参数(一)文章目录Python学习之参数(一)参数的传递避免可变参数的修改【未完待续】参考资料参数的传递所有的参数实际上都是通过指针进行传递的。作为参数被传递的对象从来不自动拷贝。在函数内部的参数名的赋值不会影响调用者。如果传入的是可变对象,那么在函数内就可以就地改变这个可变对象,这可能会影响调用者。Python通过赋值进行传递的机制与C++的引用参数选项并不...
原创
183阅读
0评论
0点赞
发布博客于 2 年前

Python学习之zip函数

Python 学习之 zip 函数问题的引出有时候,你可能想同时迭代两个序列。假设有下面两个列表:names = ['anne', 'beth', 'george', 'damon']ages = [12, 45, 32, 102]如果要打印名字和对应的年龄,可以这样做:&amp;gt;&amp;gt;&amp;gt; names = ['anne', 'beth', 'george', 'damon']&amp;...
原创
114阅读
0评论
0点赞
发布博客于 2 年前

Python学习之共享引用

Python 学习之共享引用文章目录Python 学习之共享引用什么是共享引用共享引用和在原处修改(Shared References and In-Place Changes)共享引用和相等参考资料什么是共享引用假设我们在Python交互模式下输入以下语句:&gt;&gt;&gt; a = 3&gt;&gt;&gt; b = a实际的效果就是变量a和b都引用了相同的对象(指向了相...
原创
214阅读
0评论
0点赞
发布博客于 2 年前

Python学习之变量、对象和引用

Python学习之变量、对象和引用文章目录Python学习之变量、对象和引用问题的引出变量创建变量类型变量使用动态类型类型属于对象,而不是变量对象的垃圾收集参考资料问题的引出当在Python中运行赋值语句a=3时,熟悉C语言的朋友肯定会感到奇怪:难道变量a不需要定义吗?Python是怎么知道变量a的类型的?变量创建一个变量(也就是变量名),就像a,当代码第一次给它赋值的时候就创建了它。之...
原创
410阅读
0评论
0点赞
发布博客于 2 年前

Python 学习之作用域

Python 学习之作用域文章目录Python 学习之作用域问题的引出代码块名称的绑定三种变量作用域名称解析LEGB 作用域查找规则global 和 nonlocalglobalnonlocal注意参考资料问题的引出请看这样一段代码:例1# test01.pyn = 5def test(): n += 1 print(n)test()猜猜运行结果是什么?咱...
原创
153阅读
0评论
0点赞
发布博客于 2 年前

__name__ == '__main__' 到底是什么意思

__name__ == '__main__'到底是什么意思相信许多人初学 Python 时,常会在例子程序中看到如下语句:if __name__ == '__main__': foo() # 或其他语句第 1 行的__name__ == '__main__'到底是什么意思呢?首先,如果你永远都只执行一个 xxx.py,而不去 import它的话,那你完全不需要了解这是什么。例如...
原创
11795阅读
2评论
24点赞
发布博客于 2 年前

Python 学习之元组

元组:不可修改的序列tuple(读音是 /tuːpəl/ 或 /tʌpəl/)与列表一样,元组也是序列,唯一的差别在于元组是不能修改的(你可能注意到了,字符串也不能修改)。元组语法很简单,只要将一些值用逗号分隔,就能自动创建一个元组。In [34]: 1,2,3Out[34]: (1, 2, 3)元组还可用圆括号括起(这也是通常采用的做法)。In [35]: (1,2,3)Out[3...
原创
130阅读
0评论
0点赞
发布博客于 2 年前

Python 学习之列表

文章目录函数 list基本的列表操作修改列表:给元素赋值删除元素给切片赋值列表方法appendclearcopycountextendindexinsertpopremovereversesort参考资料列表是可变的,即可修改其内容。函数 list如果你想使用字符串来创建列表,那就用函数list( 它实际上是一个类,而不是函数,但眼下,这种差别并不重要。),例如:In [1]: a = l...
原创
98阅读
0评论
0点赞
发布博客于 2 年前

python 中的序列

python 中的序列序列概述Python 内置了多种序列,比如列表、元组和字符串。列表和元组的主要不同在于:列表是可以修改的,而元组不可以。在需要处理一系列值时,序列很有用。在数据库中,你可能使用序列来表示人,其中第一个元素为姓名,第二个元素为年龄。如果使用列表来表示,将类似于下面这样:&amp;gt;&amp;gt;&amp;gt; edward = ['Edward Gumby', 42] 要点是:所...
原创
541阅读
0评论
3点赞
发布博客于 2 年前

python 中的 for-else 和 while-else 语句

python 中的 for-else 和 while-else 语句绝大部分编程语言中都有条件判断语句,比如 if-else。这里的 else 一般与 if 成对使用。不过在 Python 中,else 除了能与 if 配合外,还能和 for、while 配对使用。我们来看一个例子:假设有一个列表用来保存学生信息,列表的元素是字典,字典中的键有姓名、年龄等。让用户输入一个名字,然后在列表中查...
原创
3510阅读
4评论
4点赞
发布博客于 2 年前

C语言可变参数详解

C语言可变参数详解什么是可变参数函数在C语言编程中有时会遇到一些参数可变的函数,例如printf()、scanf(),其函数原型为:int printf(const char* format,…)int scanf(const char *format,…)就拿 printf 来说吧,它除了有一个参数 format 固定以外,后面的参数其个数和类型都是可变的,用三个点“…”作为参数占位...
原创
4211阅读
0评论
6点赞
发布博客于 3 年前

C 语言运算符优先级

C 语言运算符优先级优先级运算符描述结合性1++ --后缀自增与自减从左到右()函数调用[]数组下标.结构体与联合体成员访问-&gt;结构体与联合体成员通过指针访问(type){list}复合字面量(C99)2++ --前缀自增与自减从右到左+ -一元加与减! ~逻辑非、逐...
原创
505阅读
0评论
0点赞
发布博客于 3 年前

python 中用什么键缩进 —— tab 还是空格?

python 中用什么键缩进—— tab 还是空格?实验设计实验环境:Python 3.5.2假设要缩进的块有3行。代码如下if 10&amp;amp;amp;gt;4: print(&amp;amp;quot;hello&amp;amp;quot;) print(&amp;amp;quot;hello&amp;amp;quot;) print(&amp;amp;quot;hello&amp;amp;quot;)
原创
11407阅读
3评论
10点赞
发布博客于 3 年前

问题解决:无法获得锁 /var/lib/dpkg/lock

Fix “Unable to lock the administration directory (/var/lib/dpkg/)” in Ubuntu【注:实验环境是 Ubuntu 16.04】提出问题当使用 sudo apt install xxxxx 命令安装软件的时候,出错了。例如:tecmint@TecMint:~$ sudo apt install neofetch[sudo...
原创
4647阅读
0评论
2点赞
发布博客于 3 年前

问题解决:无法获得锁 /var/lib/dpkg/lock

Fix “Unable to lock the administration directory (/var/lib/dpkg/)” in Ubuntu【注:实验环境是 Ubuntu 16.04】提出问题当使用 sudo apt install xxxxx 命令安装软件的时候,出错了。例如:tecmint@TecMint:~$ sudo apt install neofetch[sudo...
原创
4647阅读
0评论
2点赞
发布博客于 3 年前

fetch 与引用规格(refspec)—— Git 学习笔记 23

fetch 与引用规格(refspec)本文想讨论 fetch 命令的细节。假设我们用命令添加了一个远程版本库:$ git remote add origin https://github.com/schacon/simplegit-progit上述命令会在 .git/config 文件中添加几行,并在其中指定远程版本库名称(origin)、URL 和一个用于获取(fetch)操作的引用...
原创
521阅读
0评论
0点赞
发布博客于 3 年前

图解远程版本库开发周期 —— Git 学习笔记 22

图解远程版本库开发周期文章目录图解远程版本库开发周期克隆版本库快进推送非快进推送fetch 命令merge 命令push 命令参考资料克隆版本库假设服务器上有一个简单的版本库:最近的 2 次提交用 A 和 B 表示。这时候,你把这个版本库克隆到了本地:克隆之后,我们看看这个克隆到本地的版本库都有些什么:原始版本库中的所有提交都复制到克隆版本库。克隆版本库中有一个名为 orig...
原创
233阅读
0评论
0点赞
发布博客于 3 年前

git checkout 对工作目录的影响 —— Git 学习笔记 21

git checkout 对工作目录的影响问题的提出本文要讨论的是:当我们用git checkout &lt;branch_name&gt;命令切换分支时,如果有未提交的修改,会发生什么?如果当前工作区的状态是“clean”,那么切换到其他分支是很容易的。但是,如果有未提交的修改,也许就不能顺利地切换过去,Git 会给出错误信息。例如: $ git branch bug/pr-...
原创
1407阅读
0评论
0点赞
发布博客于 3 年前

远程仓库与 fetch 命令——Git 学习笔记 20

远程仓库是指托管在因特网或其他网络(比如局域网)中的版本库。 你可以有好几个远程仓库,通常有些仓库对你只读,有些则对你可读可写。 与他人协作涉及管理远程仓库以及根据需要推送或拉取数据。查看远程仓库如果想查看你已经配置的远程仓库服务器,可以运行 git remote 命令。它会列出你指定的每一个远程服务器的简写。 如果你已经克隆了仓库,那么至少应该能看到 origin -—— 这是 Git 给你...
原创
583阅读
0评论
1点赞
发布博客于 3 年前

git rebase(变基)—— Git 学习笔记 19

git rebase(变基)认识 git rebase假设你现在基于远程分支"origin",创建一个叫"mywork"的分支。$ git checkout -b mywork origin现在我们在 mywork 分支做一些修改,生成两个提交(C5和C6).但是与此同时,有些人也在"origin"分支上做了一些修改并且做了提交了。你可以用"fetch"命令把"origin"分支...
原创
346阅读
0评论
0点赞
发布博客于 3 年前

git cherry-pick 详解 —— Git 学习笔记 18

git cherry-pick 详解初识 git cherry-pick(拣选)拣选会提取某次提交的补丁,之后尝试将其重新应用到当前分支上。 这种方式在你只想引入特性分支中的某个提交时很有用。假设你的项目提交历史如下:如果你希望将提交 e43a6 拉取到 master 分支,你可以运行:# 当前处于 master 分支$ git cherry-pick e43a6Finished...
原创
25949阅读
0评论
8点赞
发布博客于 3 年前

三路合并 —— Git 学习笔记 17

三路合并和其他版本控制系统不同,Git 提供的合并冲突解决方案并不会聪明过头,不会尝试自动将所有问题都解决。Git 的设计哲学是智能判断一个合并是否可以非常容易地自动完成,如果自动化方案不可行,就不要自作聪明地去尝试解决它,最好让用户自己去解决合并冲突。文件层面通过比较共同的祖先(base)、当前分支(ours),待合并分支(theirs),Git 采用三路合并算法生成合并结果。该算法至少在...
原创
3005阅读
4评论
1点赞
发布博客于 3 年前

git checkout 命令详解—— Git 学习笔记 16

git checkout 命令详解概览git checkout 这条命令的常用格式如下:用法一git checkout [&amp;lt;commit&amp;gt;] [--] &amp;lt;paths&amp;gt;用于拿暂存区的文件覆盖工作区的文件,或者用指定提交中的文件覆盖暂存区和工作区中对应的文件。用法二git checkout &amp;lt;branch&amp;gt;用于切换分支。用法三git chec...
原创
5794阅读
0评论
1点赞
发布博客于 3 年前

Git 的工作区、暂存区、版本库—— Git 学习笔记 15

Git 的工作区、暂存区、版本库大家都知道,在 Git 系统中有 “三棵树” 的概念。注意:“树” 在这里的意思是 “文件集合”,而不是指特定的数据结构。基本概念树用途HEAD(版本库)上一次提交的快照,下一次提交的父结点Index(暂存区)预期的下一次提交的快照Working Directory(工作区)沙盒HEADHEAD 是当前分支引...
原创
528阅读
0评论
0点赞
发布博客于 3 年前

Git 分支的创建与切换 —— Git 学习笔记 14

Git 分支的创建与切换文章目录Git 分支的创建与切换Git 分支的本质分支创建分支切换参考资料几乎所有的版本控制系统都以某种形式支持分支。 使用分支意味着你可以把你的工作从开发主线上分离开来,以免影响主线的开发。 在很多版本控制系统中,这是一个略微低效的过程 —— 常常需要完全创建一个源代码目录的副本。对于大项目来说,这样的过程会耗费很多时间。有人把 Git 的分支模型称为它的“必杀技特...
原创
596阅读
0评论
0点赞
发布博客于 3 年前

Git 中的对象模型和文件的详细视图 —— Git 学习笔记 13

Git 中的对象模型和文件的详细视图文章目录Git 中的对象模型和文件的详细视图初始状态编辑一个文件之后暂存文件后提交之后参考资料本文将用几幅图来可视化一个叫file1的文件从修改到暂存,再到提交的整个过程。相信会对你理解 Git 有一些帮助。初始状态初始状态如下图所示:可以看到,工作目录包含file1和file2两个文件,分别包含内容 “foo” 和 “bar”.除了工作目录下的f...
原创
344阅读
0评论
1点赞
发布博客于 3 年前

撤销操作 —— Git 学习笔记 12

撤销操作写在前面:有些撤消操作是不可逆的。 这是在使用 Git 的过程中,会因为操作失误而导致之前的工作丢失的少有的几个地方之一。修改最新提交有时候我们提交完了才发现漏掉了几个文件没有添加,或者提交信息写错了。 此时,可以运行带有 --amend 选 项的提交命令尝试重新提交:$ git commit --amend如果自上次提交以来你还未做任何修改(例如,在上次提交后马...
原创
244阅读
0评论
0点赞
发布博客于 3 年前

查看提交历史 —— Git 学习笔记 11

查看提交历史查看提交历史不带任何选项的git log-p选项--stat 选项--pretty=oneline选项--pretty=format选项git log常用选项列表参考资料在提交了若干更新,又或者克隆了某个项目之后,你也许想回顾下提交历史。 完成这个任务最简单而又有效的 工具是 git log 命令。接下来的例子会用一个用于演示的 simple...
原创
253阅读
0评论
0点赞
发布博客于 3 年前

记录每次更新到仓库 —— Git 学习笔记 10

记录每次更新到仓库 文件的状态三个区域检查当前文件状态跟踪新文件取消跟踪(un-tracking)文件重新跟踪(re-tracking)文件暂存已修改文件忽略某些文件查看已暂存和未暂存的修改提交更新跳过暂存区删除文件移动文件参考资料咱们接着很多天以前的 取得Git仓库 这篇文章继续说。文件的状态不管是通过哪种方法,现在我们已经有了一个仓...
原创
389阅读
0评论
1点赞
发布博客于 3 年前

git checkout 和 git reset 的区别 —— Git 学习笔记 09

git checkout 和 git reset 的区别git checkout 和 git reset 有时候让人困惑,因为它们的表现很相似。本文浅析二者之异同。后接分支名称运行 git checkout [branch] 与运行 git reset --hard [branch] 非常相似,都会更新所有的三棵树(关于三棵树可以参考我的博文 git reset 命令详解),使其看...
原创
17845阅读
0评论
4点赞
发布博客于 3 年前

git reset 命令详解(二)—— Git 学习笔记 08

git reset 命令详解(二)上一篇博文git reset 命令详解(一)讲了 git reset 命令的基本原理和用法,这篇博文谈一谈 git reset 的另一种用法——后面跟一个路径(或文件)。恢复索引中的文件到某个版本假设版本库中是文件file.txt的V1版本,HEAD、Index和工作目录都和版本库一致。这时候修改了file.txt文件,并把它(V2版本)加入Ind...
原创
1266阅读
1评论
2点赞
发布博客于 3 年前

git reset 命令详解(一)—— Git 学习笔记 07

git reset 命令详解(一)简而言之,git reset 命令是用来将当前 branch 重置到另外一个 commit 的,这个动作可能同时影响到 index 以及 work directory.先举个例子,来一个感性的认识。下面这两条命令让 hotfix 分支向后回退两个提交。git checkout hotfixgit reset HEAD~2hotfix 分支...
原创
18236阅读
8评论
15点赞
发布博客于 3 年前

git status 命令总结 —— Git 学习笔记 06

当执行 git status 的时候,返回结果大致可分为3个部分:拟提交的变更:这是已经放入暂存区,准备使用 git commit 命令提交的变更未暂存的变更:这是工作目录和暂存区快照之间存在差异的文件列表未跟踪的文件:这类文件对于 Git 系统来说是未知的,也是可以被忽略的还有一种简洁的输出格式,即添加 --short 选项,例如$ git status --short D...
原创
2108阅读
0评论
0点赞
发布博客于 3 年前

忽略某些文件 —— Git 学习笔记 05

忽略某些文件忽略某些文件通过.gitignore文件其他规则源如何选择规则源参考资料对于某些文件,我们不希望把它们纳入 Git 的管理,也不希望它们总出现在未跟踪文件列表。通常它们都是些自动生成的文件,比如日志文件、编译过程中创建的临时文件等。通过.gitignore文件假设我们要忽略 lib.a 文件,那我们可以在 lib.a 所在目录下创建一个名为 .g...
原创
453阅读
0评论
1点赞
发布博客于 3 年前

取得 Git 仓库 —— Git 学习笔记 04

取得 Git 仓库 —— Git 学习笔记 04我认为, Git 的学习分为两大块:一是工作区、索引、本地版本库之间的交互;二是本地版本库和远程版本库之间的交互。第一块是基础,第二块是难点。下面,我们就围绕着第一部分内容来学习,先不考虑远程仓库,只考虑本地仓库。怎样取得项目的 Git 仓库?有两种取得 Git 项目仓库的方法。第一种是在本地创建一个新的仓库,第二种是把其他地方的...
原创
465阅读
0评论
0点赞
发布博客于 3 年前

Git 的安装与初次使用 —— Git 学习笔记 03

Git 的安装与初次使用 —— Git 学习笔记 03Git 的安装与初次使用 —— Git 学习笔记 03安装 Git在 Linux 上安装在 Windows 上安装初次运行 Git 前的配置配置用户信息查看配置信息获取帮助安装 GitGit 是一个跨平台的软件,不管是 Windows、Linux,还是 Mac,都有自己的安装包。在 Linu...
原创
544阅读
0评论
2点赞
发布博客于 3 年前

Git 的特点—— Git 学习笔记 02

Git 简史Git 的特点直接记录快照,而非差异比较近乎所有操作都是本地执行保证完整性一般只添加数据参考资料Git 简史众所周知,Linux 内核开源项目有着为数众多的参与者。这么多人在世界各地为 Linux 编写代码,那Linux 的代码是如何管理的呢?事实是在 2002 年以前,世界各地的开发者把源代码通过 diff 的方式发给 Linus,然后由 Li...
原创
836阅读
3评论
1点赞
发布博客于 3 年前

集中式版本控制与分布式版本控制——Git 学习笔记01

什么是版本控制如果你用 Microsoft Word 写过东西,那你八成会有这样的经历:想删除一段文字,又怕将来这段文字有用,怎么办呢?有一个办法,先把当前文件“另存为”一个文件,然后继续改,改到某个程度,再“另存为”一个文件。就这样改着、存着……最后你的 Word 文档变成了这样:过了几天,你想找回被删除的文字,但是已经记不清保存在哪个文件了,只能挨个去找。真麻烦,眼睛都花了。看...
原创
1993阅读
1评论
6点赞
发布博客于 3 年前

在 Windows 上部署 gitblit

在 Windows 上部署 gitblit在 Windows 上部署 gitblit缘起gitblit 是什么安装JDK部署 gitblit下载 gitblit 并解压配置登录注册为 windows 服务修改 installService.cmd 文件运行 installService.cmd运行 gitblitw.exe查看 services.msc...
原创
5969阅读
0评论
0点赞
发布博客于 3 年前

Windows上安装JDK

Windows上安装JDKWindows上安装JDK题外话什么是JDKJRE 和 JDK 的区别是什么?下载JDK并安装设置环境变量新建 JAVA_HOME新建 CLASSPATH编辑 Path检验安装和配置是否正确参考资料题外话因为要在 windows server 上部署 gitblit(用 java 编写的),所以要先安装 JDK(其实...
原创
1920阅读
0评论
1点赞
发布博客于 3 年前

伪随机数C语言编程

在程序设计中,有时会用到随机数。本文介绍在 Linux 编程环境下,如何生成伪随机数。什么是伪随机数伪随机数是通过一个确定性的算法计算出来的“似乎”是随机的数序,因此伪随机数实际上并不随机。在计算伪随机数时,假如初始值不变的话,那么伪随机数的数序也不变。伪随机数的优点要产生真正的随机数,必须使用专门的设备,比如热噪信号、量子力学效应、放射性元素的衰退辐射,或使用无法预测的现...
原创
3167阅读
0评论
3点赞
发布博客于 3 年前

find 命令入门

find 命令入门find 命令入门列出当前目录及子目录下的所有文件列出某个目录及子目录下的所有文件根据文件名查找文件忽略大小写反向查找组合条件查找(与)组合条件查找(或)只查找文件或只查找目录同时在多个目录下查找参考资料Linux系统中的 find 命令在查找文件时非常有用。它可以根据不同的条件来查找文件,例如文件名、拥有者、文件大小、修改时间等。...
原创
209阅读
0评论
0点赞
发布博客于 3 年前

选择问题(求第k个最小元素)

什么是选择问题划分的思路Lomuto 划分利用划分求第k小元素C语言实现改进参考资料什么是选择问题选择问题(selection problem)是求一个n个数列表的第k个最小元素的问题。这个数字被称为第k个顺序统计量(order statistic)。当然,对于k=1或者k=n的情况,我们可以扫描整个列表,找出最小或者最大的元素。对于其他情况,我们可以对列表进行排序...
原创
4139阅读
1评论
6点赞
发布博客于 3 年前

希尔排序(二)

另一种写法上一篇博文希尔排序(一)中的代码是基于希尔排序的原理,“直译”过来的。还有一种更简单的写法:void shellsort_2(int a[], int n) { int j, gap; for (gap = n / 2; gap &amp;gt; 0; gap /= 2) {#ifdef PRINT_PROCEDURE ...
原创
140阅读
0评论
0点赞
发布博客于 3 年前

希尔排序(一)

什么是希尔排序C语言实现数组打印函数排序函数测试函数运行结果参考资料希尔排序的名称源于它的发明者——唐纳德·希尔(Donald Shell)。希尔排序是另一种形式的插入排序,它神奇地突破了冒泡排序、直接选择排序、直接插入排序等算法的二次时间界限,在时间复杂度上首次实现了质的突破。希尔排序如此神奇,这源于它对插入排序两个优点的综合应用:在数据量少的时候插...
原创
367阅读
0评论
0点赞
发布博客于 3 年前

看懂堆排序——堆与堆排序(三)

看懂堆排序——堆与堆排序(三)看懂堆排序——堆与堆排序(三)堆排序的基本思想代码详解父亲下标和孩子下标的关系打印数组的函数下滤函数构造堆的函数删除最大元函数排序主函数完整代码及运行截图参考资料有了前面两篇文章的铺垫,堆与堆排序(一)堆与堆排序(二) 我们终于可以学习“堆排序”了。假使给定一个数组a[N],其包含元素a[0],a[1],...
原创
721阅读
0评论
0点赞
发布博客于 3 年前

C程序内存泄露检测工具——Valgrind

缘起C/C++程序员总是亲力亲为地管理内存,一不小心就会造成“内存泄露”。有的同学会问:内存泄露是什么意思?以下解释摘自 维基百科: 在计算机科学中,内存泄漏指由于疏忽或错误造成程序未能释放已经不再使用的内存。内存泄漏并非指内存在物理上的消失,而是应用程序分配某段内存后,由于设计错误,导致在释放该段内存之前就失去了对该段内存的控制,从而造成了内存的浪费。除了在编码时小心翼翼,...
原创
2138阅读
1评论
1点赞
发布博客于 3 年前

堆的C语言实现——堆与堆排序(二)

堆的C语言实现——堆与堆排序(二)堆的C语言实现——堆与堆排序(二)头文件初始化函数下滤函数1(递归)堆构造函数1(自底向上,递归)下滤函数2(非递归,交换法)下滤函数3(非递归,空穴法)堆构造函数2(自底向上,非递归,空穴法)自顶向下堆构造插入函数1(交换法)插入函数2(空穴法)堆构造函数3(自顶向下,空穴法)删除最大键函数完整的代码及运行截图上...
原创
1052阅读
1评论
1点赞
发布博客于 3 年前

堆与堆排序(一)

堆与堆排序(一)上一篇博文 浅谈优先队列 介绍了什么是优先队列,文末提到了一种数据结构——“堆”,基于“堆”实现的优先队列,出队和入队的时间复杂度都为 O(logN).这篇博文我们就走进“堆”,看看它到底是什么结构。此堆非彼堆值得注意的是,这里的“堆”不是内存管理中提到的“堆栈”的“堆”。前者的“堆”——准确地说是二叉堆,是一种类似于完全二叉树的数据结构;后者的“堆”是一种类似...
原创
491阅读
1评论
5点赞
发布博客于 3 年前

浅谈优先队列

浅谈优先队列一道面试题如果你被问到: “编写一个程序,从 10 亿个元素的整数数组中找出前10个最大的数。” 你会怎么回答?我想,最最简单的回答就是蛮力法:先对这10亿个数排序(比如用时间复杂度为 O(nlogn)O(nlog⁡n)O(n \log n) 的快速排序),然后选出前10个最大的。请问有更好的方法吗?优先队列是什么普通的队列是一种先进先出的数据结构:...
原创
319阅读
0评论
0点赞
发布博客于 3 年前

问题解决:下载的网页打开后自动跳转到首页

提出问题我把CSDN上的某篇博客下载到本地,用浏览器打开,看着看着,不到5秒钟就会跳转到CSDN的首页,实在是闹心啊。有没有解决办法呢?解决问题用文本编辑器打开(下图以Notepad++为例),搜索关键词onerror,找到下图中所示的一行: 【例 1】 【例 2】 不要心慈手软,直接删除后保存即可。【完】...
原创
7091阅读
7评论
10点赞
发布博客于 3 年前

C语言中“数组名”和“&数组名”

C语言中 数组名 和 &amp;数组名== 实验环境 == 1. 编译器:gcc 5.4.0 2. 操作系统:Ubuntu 16.04 x86_64缘起本以为此知识点我已熟练掌握,可是最近应用的时候还真给记混淆了。所以写篇文章加深印象。Show me the code废话少说,show me the code.#include &lt;stdio.h&gt;int ...
原创
2395阅读
7评论
6点赞
发布博客于 3 年前

在 C 中引用汇编语言定义的 .globl 变量

缘起在 Linux-0.11 中遇到了这种用法,所以想做个实验以加深理解。实验代码分为2个源文件和1个Makefile.a.s.globl phone_num.dataphone_num:.word 0x1234.word 0x5678可以认为,phone_num是一个全局变量,可以供其他文件链接,phone_num的值是0x56781234.b...
原创
1826阅读
0评论
1点赞
发布博客于 3 年前

main 函数解析(二)—— Linux-0.11 学习笔记(六)

main函数解析(二)——Linux-0.11 学习笔记(六)4.6 blk_dev_init函数void blk_dev_init(void){ int i; for (i=0 ; i&lt;NR_REQUEST ; i++) { request[i].dev = -1; //表示空闲 request[i].next = NUL...
原创
772阅读
1评论
2点赞
发布博客于 3 年前

PC 机 UART(NS8250)详解

PC 机 UART(NS8250)详解异步串行通信原理两台计算机/设备进行数据交换,即通信,必须像人们对话一样使用同一种语言。在计算机通信术语中,我们把计算机/设备与计算机/设备之间的“语言”称为通信协议。通信协议规定了传送一个有效数据长度单位的格式。通常我们使用术语“帧”来形容这种格式。为了能让通信双方确定收/发的顺序和进行一些错误检测操作,除了必要的数据以外,在传输的一帧信息中还包含用...
原创
1595阅读
1评论
1点赞
发布博客于 3 年前

波特与比特率

题目:波特与比特率码元码元(code cell)是携带信息的波形符号,也即“时间轴上的一个信号编码单元”。码元可能是二进制的,也可能是多进制的。 二进制中,脉冲的有或无就表示这个码元状态的“1”或“0”,即码元有2种状态,这种码元称为二进制码元。在QPSK(四进制相移键控,Quaternary Phase Shift Keying)中,利用载波的四种不同相位来表示数字信息,即码...
原创
567阅读
0评论
1点赞
发布博客于 3 年前

main函数解析(一)——Linux-0.11 学习笔记(五)

main()函数解析(一)——Linux-0.11 学习笔记(五)经过了前面的各种铺垫,终于来到了main函数。这篇博客的任务是把init/main.c讲清楚。由于牵扯到很多的函数调用,要想一次就说明白是很难的,所以我们把目标定得低一点,把脉络理清楚就行。1. 宏定义_syscall0文件开头的头文件包含等就不多说了。对于C语言比较熟悉的朋友,我想第一个拦路虎就是“GCC内嵌汇编”...
原创
1461阅读
2评论
4点赞
发布博客于 3 年前

Linux 0.11 实验环境搭建与调试

缘起之前我写过一篇博文:Linux 0.11 实验环境搭建本以为有了这个环境(gcc-3.4 &amp; gdb-6.8),就可以调试无忧了。谁知遇到了以下问题:(1)用 gdb 调试 main 函数的时候,无法输出变量的值。总是提示: No symbol “XXX” in current context.(2)虽然在编译时为 gcc 加上了-gdwarf-2 -g3这两...
原创
10046阅读
0评论
7点赞
发布博客于 3 年前

ubuntu 终端内查找/搜索

缘起有人问终端的 find 功能在哪儿?比如说终端哗啦啦刷了一波屏,我想查找之前显示的某个消息,请问怎么找?答案其实非常简单,看图。
原创
6382阅读
2评论
4点赞
发布博客于 3 年前