自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

七哥地盘

留下稚嫩的脚印,见证自己的成长

  • 博客(79)
  • 收藏
  • 关注

原创 没找到问题原因,再怎么debug也是白费

总结,有些技术方案真的是一眼就能看懂,但是看懂是看懂,能实现是另外一回事,这里面涉及到方方面面的细节,如果你不自己亲手去尝试,永远不会知道这里面有多少个小坑。所以看懂和会做真的完全是两回事。另外,没有找到问题的根本原因,在其他方面做的任何debug尝试都是徒劳的。最后一个启发,是一定要将自己的视角和触角延伸到更宽更广,这样才能知道实现同样一个效果,可能有哪些技术方法,然后模仿学习变为自己的技术。说到底还是自己太菜了,要持续努力。

2024-04-15 13:24:11 319

原创 我对神经网络的一点理解

神经网络的每一层节点整合前一层的特征,通过权重和偏置学习局部特征。多层节点设计受大脑启发,非线性激活函数解决梯度消失问题,增强网络表达能力。人类认知是不断试错,迭代的过程,勇敢尝试和总结是通向创新和完美的关键。

2024-04-04 23:42:15 570

原创 搞了个二手NAS玩玩黑群晖

淘了几块二手硬盘,和一个蜗牛星际D款,将老笔记本群晖中的docker平移过来,速度能快一些,那个老本本已经快15年啦,只有USB2.0的速度,加了外置USB网卡也只是勉强上到千兆,而且风扇声音确实大了些,这才想到搞一个二手矿机玩具。

2024-02-26 18:57:51 133

原创 记一次用Qt开发 “启动器” 的经历

如何实现从桌面向GUI的拖拽,以添加快捷方式关键在于override这3个函数如何实现从GUI向桌面/或其他GUI之外的区域拖拽以删除快捷方式这里其实是耗费了我相当多时间的,分别遇到了对QGroupbox生完了mouse event后,仍然无法拖拽其成员的情况可以拖拽但如何实现拖拽动画效果如何判断拖拽的位置已经超出gui范围从而从layout中remove掉这里要理解Qt对于MouseEvent的处理机制,在同一个GUI上,可能存在多层widget,比如在QGroupBox。

2024-01-16 10:35:37 893

原创 《数据结构,算法与应用 C++语言描述》- 第1章 练习题答案

解释:因为形参没有使用引用。形参是通过对实参的值进行的复制得到的,所以函数体中任何对形参的修改都不会作用于实参。

2023-12-26 22:09:33 614

原创 彻底解决python多进程can‘t pickle问题

通过绕开序列化,避免出现can't pickle报错

2023-10-05 22:30:48 9320

原创 【CSAPP】练习题3.4

辅助学习的方法,提升效率的3步走。

2023-06-23 23:54:42 441 1

原创 python之copy()与deepcopy()区别

背景为什么要研究这个问题?之所以提出这个问题,是因为有这样一个场景,我需要使用两个列表ls_old与ls_new分别记录某一组状态在执行前后的值,以此判断执行是否成功。若执行成功,则ls_old=ls_new以保存当前状态因为采用的是=赋值方式,当执行ls_new.clear()时,ls_old也被清空了于是这引起了我的兴趣。因为之前学习C++的时候对深浅复制以及指针、引用,有过系统的学习,所以猜想python实现=的方式,应该是创建了引用。但这需要去了解它的实现方式才能证实看官方解释官方关

2022-05-25 10:47:09 427

原创 【日志】进程间的互相控制

今日综述今天用了接近1天的时间,才搞定了Python中进程间的互相控制,包含主进程与子进程之间,子进程之间。着实花费了一番心力,说明自己的功底还是太浅。记录一下今天的坑点,备忘进程间可以共享的数据,是有要求的,比如用mutiprocess.Process()创建的进程对象,就不能作为参数直接传递给其他进程,否则报错TypeError: cannot pickle 'xxxxx' object,但pid可以,确认了pid可行后,后面直接开了绿灯,一路畅通了线程间的控制很复杂,网上有人说Python在

2022-05-12 22:59:43 165

原创 PyCharm项目获取项目路径的方法

思路一例胜千言。比如main.py要import进来一个模块ui.py因为import进来的文件,相当于是以文本方式复制进来,所以它原本的相对路径是以ui.py为参照,但在main.py中执行路径相关的函数时,路径参照物变成main.py了,这点尤其要注意但不论相对位置是以哪个文件为参照,总有一些目录是固定不变的,以PyCharm项目为例,.idea是它默认必然生成的目录,且它总是在项目根目录下,所以,我们可以通过以当前文件(任何文件都可以)开始向上遍历,直至定位到某个目录,它有一个子目录名为.i

2022-05-07 10:33:20 3785

原创 为什么可以用计算图完整表达神经网络?

之所以有这样的疑问,是因为计算图是正向传播和反向传播的载体,不理解它,就没有办法理解神经网络是如何工作的。以下为我的一点粗浅认知。因为神经网络整体实质就是一个函数,只不过是个复杂的函数罢了,下面化繁为简,描述一下。以目标检测用到的神经网络为例,抽象成:y=F(a,x),y是最终预测的结果;a是输入的样本,因为样本是数据化后的一组向量,在计算过程中也不会被改变,本质是常数,所以用a表示;x是自变量,它才是重点,它是一个总体的代称,而不是一个具体的单一的自变量,是包含了无数组(w,b)的自变量包;

2021-08-12 05:14:19 318

原创 林群院士演讲有感

今天无意中看到b站上安民群院士分享的一个观点。按照我自己的理解所吸收的几个点:他强调假传万卷书,真传一案例,通过一个具体的案例去了解背后的原理,去分析道理,而不是一上来就学习各种定理以及相应的证明多即是少,少即是多。我自己理解到的是,生活中有各种分散精力的事情,同时,学习的资料又多种多样,如果我们把时间和精力分散在各种各样的事情上面,就导致我们不能聚焦不能聚焦的结果,就是不能在同一个主题上面深入思考,就不能真正掌握背后的原理,也不能想到他可能的应用,最终导致杂而不精,在学习上可能就体现为只是能应付考试

2021-08-08 17:40:49 831

转载 BIOS 与 UEFI引导流程

版权相关,转自:https://www.cnblogs.com/zerxoi/p/13252573.html感谢大神的精彩总结。以下正文:BIOS 与 UEFI引导流程1 基础知识1.1 引导程序(boot loader)1.1.1 概念 [1]引导装载程序(英语:boot loader)是计算机开机自检完成后装载操作系统或者其他系统软件的计算机程序。自检完成后运行引导装载程序,然后再加载并运行软件。引导装载程序可以从硬盘装载到主内存中。在MBR磁盘分区中引导程序位于主引导记

2020-11-16 19:35:43 2044

原创 《如何阅读一本书》- 第5章 - 如何做一个自我要求的读者

如何做一个自我要求的读者提出4

2020-11-12 15:40:44 151

原创 《如何阅读一本书》- 第4章 - 检视阅读

检视阅读1. 什么是检视阅读?检视阅读是从整体上把握整书的内容及定位,作者要讲什么,主要的观点是什么,讲了哪些内容(如目录中列)。这是在读这本书之前要完成的任务。2. 检视阅读具体的落地方法是什么?包括两部分:有系统地略读 + 整书粗读2.1 有系统地略读(只读 整书框架+章节头尾 )即先建立对整书的认知,整本书的框架和要旨(即作者要表达的观点,或者说作者写此书是要讲什么)框架从哪里获取序言出版者的话目录索引章节头尾是指什么感兴趣章节的开关概述及结尾总结,属于必

2020-11-06 21:15:39 208

原创 友元函数的定义位置,以及模板类声明和定义位置 - 编译过程理解(如何避免undefined错误)

写在前面之所以总结这两个知识点,是因为在编写练习题c5-5时突然遇到报错,经过一翻查找,总算有点搞明白了,记录下来,不一定理解准确,但起码可以解决问题了.1. 友元函数的实现友元函数的声明位置首先必须是在类中至于是在public,protected,private无所谓,外接都可以直接调用友元函数的实现位置,也就是具体的定义(非声明)所在位置第1种方式(推荐):在宿主类中声明的同时直接提供定义将友元所在类用一个新的namespace框起来,然后在其他cpp文件中提供友元的定义,但是

2020-10-26 23:26:14 1596 1

原创 Chapter5 - 3 changeLength2D()的练习

写在前面选择记录本题是因为在如何表示二维数组的指针,以及如何传递二维数组的指针时遇到了问题,说明对指针的理解还不够透彻,暂时记录下基于本次练习的思考经过关于二维数组指针的理解首先明确指针和元素的表示方法,否则后面的理解就无从谈起数组的指针具有2重含义整体指向:指向整个数组所在的内存块首元素指向:指向数组的首元素所在内存块指针可以用两种方式表示(假如有数组 int a[5], 则):数组名表示法,即直接用a表示指向此数组的指针指针名表示法,如 int* ptr= &

2020-10-23 21:59:33 136

原创 对 “程序1-32”的理解

写在前面:对递归这部分,终觉得要下些功夫,因为最初学习这部分的时候理解起来就有些抽象。很难得在这本书中将递归用几个例子说得明明白白,所以决定耐心下来,类似单步执行般,将这个例子仔细梳理一遍,务求理解。P28页用C++写的递归过程分析#include <iostream>#include <iterator>using namespace std;template <class T>void perm(T list[], int k, int m) //

2020-07-11 23:45:11 145

原创 Chapter1-2

#include <iostream>template<class T>int count(T arr[], int n,T &value){ int countValue = 0; for (int i = 0; i < n; i++) { if (arr[i] == value) countValue++; } return countValue;}int main(){ double arr[100]; // assign

2020-06-25 10:55:17 86

原创 [Chapter 15] - [实验15]

思考需要1个安装程序安装新int9老int9入口备份新int9入口注册需要重写1个新int9,并在其中模拟调用老int9以处理硬件信息按键A的处理如果松开A,就显示满屏幕A:端口60h接收到的是断码9Eh (计算方法,通用1Eh+80h=8Eh)还要考虑到是大写的A,因为只对al接收到的信息与8Eh比较,将对小a的输入也会做出同A一样的响应,而题目要求只对大写A响应。C...

2019-12-12 20:27:07 67

原创 [Chapter 14] - [实验14]

;ex14_1.exe;按指定格式(年/月/日 时:分:秒)在屏幕中显示CMOS RAM中的时间内容;思路:按P263的(3)中的思路,将地址组在一起,;再将要提取的单元数组在一起(本例中每个数据只有1字节,所以本步省略),分别喂食给 处理模块assume cs:codecode segment;地址编组s1: db 9,8,7,4,2,0;预留字符串内存空间 - 每个字节拆分...

2019-12-06 20:23:30 90

原创 [Chapter 14] - [检测点14.2]

;用加法称移位指令计算(ax)=(ax)*10;可拆分为 (ax)*2+(ax)*8assume cs:codecode segmentstart: push bx ;(ax)*2 mov ax,5;随便给的数,用于验证结果 mov bx,ax;因为ax*2后,ax中的值将变化,后面还要用到ax中的原始值 shl bx,1 ;(ax)*8 mov cl,...

2019-12-05 22:05:40 81

原创 [Chapter 13] - [实验13]

(1)代码第1种:用之前的方法,逐个字节复制ASCII,逐个填充属性单元。经验证正确;实验13;功能:显示一个用0结尾的字符串;参数:ds:si指向源字符串,位置用dh显示行、dl显示列,cl为显示属性;返回值:无assume cs:codedata segment db 'welcome to masm!',0data endscode segmentstart:...

2019-12-04 21:49:40 96

原创 [Chapter 13] - [检测点13.1]

;检测点11.3;int 7ch的安装程序assume cs:codedata segment db 'conversation',0data endscode segmentstart: mov ax,cs mov ds,ax mov si,offset jnear mov ax,0 mov es,ax mov di,2...

2019-12-01 11:44:00 296

原创 [Chapter 13] - [检测点13.2]

(1)错误。这里有两个原因:CPU通电,将CS:IP指向0FFFFH:0是对CPU的硬件设计,此时还没有轮到操作系统介入,更不会有程序员的程序执行,从时间点上,我们无权限干涉。更不可能去更改硬件中的设计硬件检测和初始化程序是非常有必要的,不能跳过否则硬件有问题,操作系统即使启动了也不能正常工作初始化程序的任务中包含着将BIOS的中断例程注册在中断向量表,且包含着调用int 19h 将计...

2019-12-01 11:41:35 234

原创 [Chapter 12] - [实验12]

需要注意的几个错误200H和202H,要在编辑器中末尾加H,以注明是HEX,否则会将do0程序安装到错误位置设置中断向量表时,要注明mov word ptr,否则会报错operand must have size,因为未注明要向多大的数据(几个内存单元)进行写入;实验12:编写0号中断的处理程序;火箭(送卫星进预定位置) - do0的安装程序assume cs:codecode ...

2019-11-23 17:07:09 111

原创 [Chapter 12] - [检测点12.1]

(1)关键点:中断向量表是从第0个单元开始每个表项由2个word构成,即4个byte高地址word存储段地址,低地址word存储偏移地址回到问题本身,求3号中断源入口(即地址):将内存4个字节一组,第1组记为0,第2组记为1,以此类推,第4组记为3,即3号中断源的表项,debug中显示 8B 01 70 00。因为debug从左至右是低地址到高地址,所以实际书写习惯是 0...

2019-11-15 22:04:41 175 1

原创 [Chapter 11] - [实验11]

本实验考察知识点有条件转移的意识,以及用法与0比较,是否相等区间的判断,如[61h,7Ah]小写转大写(AND用法,是老知识点)思路:读取源字符串处理筛选出哪些字符是小写小写转大写循环处理(在不知字符串元素个数的情况下,有2种方式:1.计算出个数;2.条件判断)写入目标位置代码1:;程序名:;功能:;参数:;返回结果:;一、m...

2019-11-15 17:40:08 90

原创 [Chapter 11] - [检测点11.4]

考察知识点:AND指令的理解标志寄存器所在16bit的构成无符号运算、有符号运算,分别影响哪些标志寄存器溢出,是否有进位,都是相对于要容纳结果的寄存器而言的,同1个数,用AL,和AX去容纳,前者溢出,后者可能不溢出,取决于寄存器的容纳范围分析:不论是有符号运算,还是无符号运算,得到的结果都是一样的(只是它们代表实际意义不同,无符号就是值本身,而有符号还要转为原码)不用担心是不是...

2019-11-12 10:19:56 131 2

原创 [Chapter 11] - [检测点11.2]

以下为详细梳理:CFOFSFZFPF分析sub al,al00011判断CF:无符号运算时,无进位,CF=0判断OF:有符号运算时,无溢出,OF=0判断SF:结果为0,非负,SF=0判断ZF:结果为0,SF=1判断PF:结果0的BIN中有0个1bit,0为偶数,PF=1mov al,10H00011mov,push,pop不对标记位产生...

2019-11-03 15:05:25 199

原创 [Chapter 11] - [检测点11.1]

需要注意,这是一个“完整的”程序,所有指令不是独立的,是互相影响的mov al,al;al=0 —— 结果为0,0有偶数个1bits,0是非负 —— ZF=1,PF=1,SF=0。mov al,1;al=1 —— ZF=1,PF=1,SF=0——传送指令mov,push pop不影响这3个flag的值,原值为多少仍是多少push ax;同上pop bx;bl=1。同上add al,bl;...

2019-10-31 20:26:05 104

原创 [Chapter 10] - [课程设计1]

思路创建1个临时区域,用于存放dtoc转换后的字符串区域命名为temp考虑到容量要足够容纳 “十进制待转换数字” 的每一位转换后的ASCII,对比原始数据后,用16个内存单元足可容纳此区域的每个字符串均用1个值为00的单元结尾,此功能由dtoc实现主程序循环21次,每次对每个字段的其中1个数据进行处理,包含的动作内容为:将data中 年份 字段中1个数据(dword型),传递...

2019-10-31 11:53:05 113

原创 [Chapter 10] - [检测点10.5]

检测点10.5这里要注意,程序将stack段同时与ss与ds进行了关联,也就是此段既被当作栈使用,同时被当作数据段使用call word ptr ds:[0EH] 的理解IP指向此call指令时,call指令被读取进CPU的指令缓存器IP立第即指向了call指令的后的下一条指令,即本程序中的第1条 inc ax然后,指令缓冲器中的call指令开始正式被执行第1步...

2019-10-07 15:24:02 144

原创 [Chapter 9] - [实验9]

思路先在data段中定义3行数据,每行32个单元,每行的前16个单元存放ASCII,每行后16个单元存放属性将data段中的内容,传递到目标缓冲区,传递的过程中,每次从data单行中前16个单元中摘出1个,后16个单元中摘出1个,构成1个组合(每个组合由1个ASCII单元和1个属性单元构成)代码;实验9assume cs:code,ds:data,ss:stackdata segm...

2019-10-06 22:47:09 68

原创 [Chapter 8] - [实验7]

思路:本实验用2种思路各完成一遍。自己最先想到的思路,将源数据区视视为一个整体,将目标数据区也视为一个整体,loop 21次,每次完成4+4+2个字节的传输,均适用idata[si]的寻址方式书中的思路,将源数据区视为3个独立的数组,将目标数据区视为21个结构,每个结构由一整行(16个单元)构成,适用于[bx].idata[si]的寻址方式以下为代码 (CSDN不能高亮汇编代码,也是醉...

2019-09-18 13:51:39 130

原创 C++ Premier Plus 6th edition - Programming excercise - Chapter18 - 4

// functor.cpp -- using class object as functor. object has name, and temporary object without name#include &lt;iostream&gt;#include &lt;list&gt;#include &lt;iterator&gt;#include &lt;algorithm&gt;...

2019-03-15 15:23:32 116

原创 C++ Premier Plus 6th edition - Programming excercise - Chapter18 - 3

// APPROACH 1: use rvalue as parameter#include&lt;iostream&gt;#include&lt;cmath&gt;long double sum_values() { return 0; };// 0 parameter,deal with border situationtemplate&lt;typename T, typenam...

2019-03-15 08:39:18 305

原创 C++ Premier Plus 6th edition - Programming excercise - Chapter18 - 2

cpmv.h#ifndef CPMV_H_#define CPMV_H_#include&lt;iostream&gt;class Cpmv{public: struct Info// info is only a self-defined type, has no contents in Cpmv { std::string qcode; ...

2019-03-13 19:11:04 150

原创 C++ Premier Plus 6th edition - Programming excercise - Chapter18 - 1

#include&lt;iostream&gt;#include&lt;initializer_list&gt;#include&lt;algorithm&gt;using namespace std;// create a template function, which will add all elements together// initializer_list is co...

2019-03-12 20:14:33 115

原创 C++ Premier Plus 6th edition - Programming excercise - Chapter17 - 7

#include&lt;iostream&gt;#include&lt;fstream&gt;// fout#include&lt;vector&gt;#include&lt;string&gt;#include&lt;algorithm&gt;// for_each()using namespace std;// write to file. use ifstream to inp...

2019-03-01 11:43:34 219

空空如也

空空如也

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

TA关注的人

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