自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(41)
  • 资源 (1)
  • 收藏
  • 关注

原创 Git时间旅行:优雅地改写历史提交

本文介绍了如何在 Git 中优雅且安全地修改提交历史。首先,文章解释了 Git 历史的本质,强调每个提交都有唯一的哈希值,任何修改都会生成新的哈希。接着,文章详细讲解了在个人分支上修改历史的方法,包括使用 --amend 修改最近一次提交和通过 rebase 修改更早的提交。最后,文章提醒在多人协作中修改历史的风险,建议谨慎使用强制推送,并提出了三个问题以帮助判断是否适合修改历史。文章旨在帮助开发者更好地维护 Git 提交记录,同时避免在协作中引发问题。

2025-05-18 12:06:50 341

原创 Git Merge实战手册:分支合并的智慧

本文详细介绍了Git合并的原理、策略及冲突解决方法。合并的本质是寻找两个分支的共同祖先,通过差异对比生成新版本。常见的合并策略包括普通合并(Fast-Forward)、保留历史的合并(--no-ff)和压缩合并(Squash),分别适用于不同场景。合并冲突时,Git会标记冲突部分,开发者需手动解决并提交。文章还提供了合并前的预演、日志分析、更新本地分支等建议,帮助开发者避免常见问题,提升团队协作效率。掌握这些技巧,能有效应对合并中的各种挑战。

2025-05-10 15:50:59 265

原创 C++ 数据结构之std::vector介绍

std::vector是C++标准库中的动态数组,能够自动管理内存大小,适用于处理不确定数量的数据。其关键特性包括动态伸缩、快速访问和内存连续排列。核心操作包括创建与初始化、增删元素和随机访问。进阶操作涉及处理动态对象,如游戏中的敌人。性能优化建议包括预分配空间、选择正确的构造方式、高效删除技巧和利用现代C++特性。避坑指南提醒避免盲目使用[]操作符、在循环中反复扩容和忽视迭代器失效问题。std::vector是处理动态数组时的首选工具,合理使用可显著提升程序效率。

2025-05-02 22:27:48 192

原创 C++ UML 类图介绍

UML类图是面向对象分析与设计中的核心工具,用于描述系统的静态结构。它通过展示类、接口、属性、方法及其之间的关系,帮助开发者理解系统架构,减少沟通成本,并为系统实现提供可视化方案。类图的核心组成部分包括类(Class)和接口(Interface),类用矩形表示,分为类名、属性和方法三部分,接口则用带<<interface>>的矩形表示,仅包含方法声明。类之间的关系包括依赖(Dependency)、关联(Association)、聚合(Aggregation)、组合(Compositi

2025-04-03 21:40:37 953

原创 在C语言中,可以用free释放NULL吗?

在C语言中,动态分配的内存需要通过free函数手动释放,以避免内存泄漏。当指针可能为空时,调用free(ptr)是否安全?根据C99标准,free函数在ptr为空指针时不执行任何操作,因此释放空指针是安全的,不会导致程序崩溃或未定义行为。这一特性简化了代码编写,并提高了程序的健壮性。在实际编程中,建议在释放指针后将其设置为NULL,以避免悬空指针问题。这一设计避免了额外的检查负担,确保了free(NULL)的安全性。

2025-03-14 21:46:47 356

原创 C++ 格式化输出浮点数

在性能分析或日志记录中,打印时间戳并比较其差异时,C++默认的浮点数输出格式可能导致时间戳显示不直观。默认情况下,C++会根据数值大小自动选择固定小数格式或科学计数法格式,当数值超出[1e-4, 1e6]范围时,会使用科学计数法。为了解决这一问题,可以使用std::fixed强制浮点数以固定小数格式输出,并结合std::setprecision控制小数点后的位数。通过这种方式,可以确保时间戳以固定小数格式输出,清晰展示具体的时间值。

2025-02-28 18:51:54 325

原创 Windows安装Ubuntu24.04双系统指南

本文详细介绍了在Windows电脑上安装Ubuntu 24.04双系统的步骤。首先,准备工作包括备份数据、下载Ubuntu ISO镜像、制作启动U盘,并通过磁盘管理为Ubuntu腾出至少50GB的空间。接着,系统设置部分指导用户关闭Windows的快速启动功能,并在BIOS中确保启动模式为UEFI、关闭安全启动、将SATA配置为AHCI模式。最后,安装Ubuntu的步骤包括从U盘启动、选择语言、键盘布局、网络连接、安装方式(选择与Windows共存)、创建用户、选择时区等。安装完成后,用户可以通过GRUB菜

2025-02-15 12:24:32 3411 2

原创 如何将tag推送到远程仓库

在多人协作的软件开发项目中,tag(标签)是Git中用于标记和管理版本的重要机制。通过为特定版本打上标签,可以方便集成人员拉取代码,提高版本的可追溯性。推送标签到远程仓库的操作包括:推送单个标签(git push origin <tag_name>)、推送多个标签(git push origin <tag_name_1> <tag_name_2>)、推送所有本地标签(git push origin --tags)以及删除远程标签(git push origin --del

2024-12-07 17:40:11 775

原创 GDB调试进阶

在实际工作中,掌握这些高级功能可以大大提高开发和调试效率。如果你还没用过这些功能,不妨在下次调试中尝试一下~最后,欢迎大家关注我的公众号《嵌入式3分钟》,一起学习嵌入式~

2024-11-30 20:25:30 498

原创 SSH免密登陆的原理与应用

SSH免密登录通过非对称加密技术实现,使用公钥和私钥进行身份验证,提高了登录效率和安全性。其工作原理包括连接建立、公钥验证、挑战-响应和响应验证四个步骤。具体应用时,首先在客户端生成密钥对,然后将公钥配置到远程服务器的authorized_keys文件中,最后即可实现免密登录。为确保安全,需正确设置远程服务器上相关文件的权限。这种方法不仅减少了密码输入的麻烦,还降低了密码泄露的风险。

2024-10-15 08:43:02 758

原创 GDB基本使用指南

GDB(GNU Debugger)是一个强大的调试工具,主要用于调试 C、C++ 和其他语言编写的程序。它让我们可以监控、控制程序的执行,从而查找并修复错误。

2024-10-15 08:41:47 494

原创 Float类型的有效位数有几位

C语言中的Float类型是单精度浮点数,占用4个字节(32位),按照IEEE 754标准存储。Float类型的有效位数是7位,这意味着它可以精确表示7位十进制数。当数值超过16777216时,Float类型无法精确表示所有整数,导致精度丢失。例如,Float可以表示16777218,但无法表示16777217,因为后者的有效位数超过了24位二进制的限制。通过理解有效位数和科学计数法,可以更好地掌握Float类型的精度和表示范围。

2024-09-16 11:27:21 2357

原创 Linux 如何将pwd的结果同步复制到剪贴板

pwd命令用于显示当前路径,但通常我们还需要复制路径,操作繁琐。通过结合xclip工具,可以实现显示路径的同时将其复制到剪贴板。具体步骤为:安装xclip,使用echo -n $(pwd) | xclip -selection clipboard && pwd命令,既显示路径又复制路径。为简化操作,可以将该命令设置为别名cpwd,并添加到.bashrc或.zshrc中。此外,通过X11转发功能,cpwd命令也可在远程登录时使用,方便复制远程路径。这一方法显著提升了路径复制的效率,适用于本地和

2024-09-07 10:40:46 1101

原创 Linux 如何存储Core dump文件

在Linux开发中,程序崩溃如Segmentation fault是常见问题,尤其在问题不易复现或处于生产环境时,直接使用gdb调试效率较低。此时,core dump文件的重要性凸显,它是程序崩溃时自动生成的内存快照,包含寄存器状态、调用栈等信息,可用于分析崩溃原因。默认情况下,Linux可能不会生成core dump文件,需通过ulimit -c unlimited解除大小限制,并配置/proc/sys/kernel/core_pattern指定存储路径。通过编写故意崩溃的C程序,可验证core dump

2024-08-31 14:45:47 689

原创 C语言 分析声明的方法

本文详细解析了C语言中声明的组成和解析方法。声明由声明说明符和声明符组成,声明说明符描述数据项的性质,声明符描述数据项的名字和额外特点。通过两条规则——由内而外和遇事不决找括号,可以解析复杂声明符。文章通过多个实例,如指针数组、函数指针等,逐步展示了如何应用这些规则来理解复杂的C语言声明。最终,文章帮助读者更好地掌握C语言中的声明解析技巧,提升代码阅读和编写能力。

2024-08-23 22:28:07 1023

原创 嵌入式系统概述

嵌入式系统是一种专为执行特定任务而设计的计算机系统,广泛应用于家用电器、汽车、医疗设备等领域。其特点包括专用性、实时性、资源受限、稳定性和低功耗。嵌入式系统结构分为软件层和硬件层,软件层包括应用层、中间件、操作系统层、HAL层和BSP,硬件层则包括处理器、内存、输入输出接口等。随着物联网、智能家居和汽车电子系统的发展,嵌入式系统的需求不断增加。从事嵌入式软件开发需要掌握编程语言、操作系统、驱动程序开发及调试测试等技能。嵌入式系统在现代科技中扮演着重要角色,具有广阔的发展前景。

2024-08-16 23:21:42 1406

原创 C语言 Windows下使用gcc制作静态库与动态库

前言将函数封装成库不仅有利于代码的复用, 还可以在不公开源码的情况下给他人使用函数的功能。本文记录了Windows下使用gcc制作静态库的过程。一、测试代码编写测试函数为一个加法函数,它将被制作成静态库,并被函数main()调用。各个文件如下所示,它们被放在同一个目录下。add.hint add(int a, int b);add.c#include "add.h"int add(int a, int b){ return a + b;}main.c#in.

2021-03-30 19:21:31 5594 4

原创 C语言 二进制文件读写实例讲解

前言二进制文件的读写是程序员们经常会遇到的一个场景,难是不难,但如果不熟悉的话,等到要用的时候还是会着急忙慌的。因此本文将结合一个具体的例子来介绍C语言中的二进制文件读写,这也是我自我学习的一个记录。一、函数介绍在本例中,我们尝试在一个文件中写入10个字节的数据,其中每个字节均为0xFF,然后我们再将数据读取出来。为了完成这个任务,我们需要三个函数,我们一个个来看。第一个函数为fopen(),它的函数原型如下FILE *fopen(const char *__restrict__ _F.

2021-03-22 21:02:08 23991 4

原创 嵌入式开发——程序跑飞原因总结

前言在嵌入式软件开发中,程序跑飞是一个比较棘手的问题。为什么说棘手,那是因为当程序跑飞时,往往没有任何错误信息报出来,Log停止的地方通常也不是出现问题的地方,因此这让我们很难定位问题。基于以上原因,我将嵌入式开发中一些常见的程序跑飞原因以及相关解决方案记录在这篇博客下。程序跑飞的原因与相关解决方案1. 栈溢出说明:这可能是最常见的问题了,往往是因为我们定义了较大的局部变量,使得栈空间不够了。解决方案:使用static关键字或者将局部变量定义为全局变量。2. 访问了不该访问的内存说明:这.

2021-03-09 20:23:17 9586

原创 如何让Markdown 表格整体居中?

如何让Markdown 表格整体居中?记录一个Markdown小技巧。在Markdown中绘制表格时,可以使用:来设置表格内容的对齐方式。但是如何让整个表格都居中,使得文章整体更加美观呢?方法如下:在正在编辑的.md文件中加入以下代码:<style>table{ margin: auto;}</style>PS: 这个方法感觉有点野,大家若有更好的方法欢迎分享。...

2021-02-25 20:48:36 12168 2

原创 Matlab——二进制转十进制(包含小数转换)

Matlab中有二进制转十进制的函数,“bin2dec”,示例如下:但是这个函数只能进行整数转换,如果有小数的话:由于需要,最近写了一个小程序,实现带小数的二进制转十进制,先看代码:clcclear all% 整数部分bit1 = 3;bit_integer = [0,1,0];% 小数部分bit2 = 2;bit_decimal = [1,0];intege...

2019-04-03 10:10:13 32774 1

原创 MATLAB实现混淆矩阵评价指标(精度,召回率,F1分数)

记录一下,在学习用SVM分类时,需要对分类结果进行评价,光有正确率是不够的,所以就使用了混淆矩阵。原理的话,很多博客上都有,但为了便于理解程序,就简单讲一下。结合程序,我们的类别是(-1,1),在Matlab中,类别是按照值的大小排的,即-1在前。但为了更加直观明了,解释理论的时候依然是1为正类。  1 -1 1 TP FN -1 FP...

2018-10-27 10:54:20 13148 4

原创 MATLAB中实现数据 [0,1] 归一化

记录一下,在做机器学习时,数据处理部分要花很多精力。数据处理的方式有很多种,今天记录的是[0,1]归一化,该法可以避免在较大数值范围内的特性凌驾于较小数值范围内的特性,先看下原理。设序列代表特性A,对它们进行变换则得到的新序列下面看代码:clcclear all% 最后一列是标签,不做标准化data0 = [1,2,1;3,2,-1;1,4,1];[d_r, d_c]...

2018-10-18 16:09:55 25116 2

原创 MATLAB产生按顺序排列的自然数一维向量

记录一下,一个小技巧。用MATLAB产生"[1, 2, 3, 4, 5,...]"这样的按顺序排列的自然数一维向量。实现这个功能其实只要两行代码:a = randperm(10);b = sort(a);看下结果:补充:其实可以更简单:a = (1:10);...

2018-10-08 15:07:13 21679

原创 树莓派通过串口与计算机通信

希望此文可以解决部分朋友的问题。第一步:用“USB TO TTL”将树莓派和计算机连接。第二步:在计算机安装“USB TO TTL”的驱动第三步:在计算机上安装串口调试助手。第四步:到https://pypi.org/project/pyserial/上下载pyserial安装包,给树莓派装上。第五步:在树莓派终端输入python -m serial.tools.list...

2018-09-29 20:07:49 2251 3

原创 解决在Ubuntu中使用libsvm出现的“LIBSVM library not found”的问题

在Windows下的python中使用libsvm,只需在下载好libsvm后,使用如下代码:import sysimport numpy as nppath = 'E:/libsvm-3.22/python'sys.path.append(path)from svmutil import *但在Ubuntu下的python中使用libsvm,如果直接用上述代码会出现“LIBSV...

2018-09-26 16:34:09 2298

原创 Matlab使用交叉验证

在做机器学习时,经常要用到交叉验证来分配数据,故在此记录一下。所谓交叉验证,就是将一个数据集分为K份,然后取其中一份作为测试集,剩余K-1份作为训练集。然后,取另一份作为测试集,其余K-1份作为训练集......如此循环,直到每一份都做过测试集为止。用的比较多的是10折交叉验证,代码如下:clcclear all% 导入数据data = load('F:\work_matlab\Mat...

2018-09-25 14:41:39 22049 4

原创 Matlab产生动态变化的字符串,便于将数据批量存入表格

记录一下。在使用Matlab跑程序的时候,需要将最后的结果存入表格,例如:xlswrite('xxx.xls',result, 'a1:i1');此处只保存一行,所以 ‘result’ 是个一维向量。上述代码只能适用于跑一次程序的情况。下次跑的时候,我们需要改为:xlswrite('xxx.xls',result, ‘a2:i2’);即存入表格的下一行,从而避免第一行数...

2018-09-04 14:47:13 4030

原创 一根网线实现电脑远程登录树莓派

材料准备:1、网线一根2、树莓派一个3、笔记本电脑一台操作步骤:1、用网线把树莓派和电脑连接起来2、给树莓派连接电源3、将电脑的无线网设置为共享。具体操作为:控制面板——&gt;网络和Internet——&gt;网络和共享中心——&gt;更改适配器设置——&gt;Wlan属性——&gt;共享然后将“允许其他网络用户通过此计算机的Internet连接来连接”打钩。上图是Win10系统,对于Win7系...

2018-07-06 12:13:17 5185 1

原创 Python中一维向量和一维向量转置相乘

在Python中有时会碰到需要一个一维列向量(n*1)与另一个一维列向量(n*1)的转置(1*n)相乘,得到一个n*n的矩阵的情况。但是在python中,我们发现,无论是“.T”还是“np.transpose”都无法实现一维向量的转置,相比之下,Matlab一句“ a' ”就能实现了。那怎么实现呢?我找了个方法。请看:即,我们把向量reshape一下,如此便实现了一维向量与一维向量转置相乘为矩阵的...

2018-06-30 16:18:57 14950 8

原创 解决“TypeError: 'int' object is not callable”

最近碰到了这个问题,记录一下。看个例子:如上图所示,出现这个问题的原因是之前有变量名(len)与函数名(len)重复了。

2018-06-26 08:34:49 10479 1

原创 Python实现识别多个条码/二维码(二)

    这篇博客实现的是“Python实现识别多个条码/二维码(一)”未完成的解码任务。由于系统坏了,软件重装等一系列原因,所以拖到现在。。不好意思哈。    在上一篇中我们已经能把两个条形码找出并框起来了,接下来就是要解码。先上代码吧。from sys import exitfrom Image import _ImageCropfrom PIL import Imageimpo...

2018-06-18 09:54:03 7374 4

原创 Window上,Matlab安装libsvm,libsvmtrain.mexw64无效,mex-setup 失败

根据个人经验,这个问题注意以下几点即可解决。1、软件版本问题首先要认清自己Matlab的版本,这与第二个问题密切相关。2、编译器问题在Matlab的命令行中输入,mex -setup如果正常执行,会跳出编译器选项给你选择。如果没有编译器,则会告诉你没有合适的编译器。那么,如果没有编译器,就需要下载安装一个。下载安装前,请到以下网址查看自己的Matlab支持哪些编译器。...

2018-05-31 16:45:44 4327 6

原创 在Powershell中切换Python版本(包括32位与64位切换)

我装了好几个Pyhton,2.7的有两个,32位的和64位的,3.6的也是这样。关于在Powershell中切换Python版本的方法,网上有不少,不过那是切换针对Python2和Python3的方法,那我想在Python2的32位与64位之间切换怎么办?今天讲个简单粗暴的方法。。。。。。。请直接转到对应版本的Python安装目录。cd 对应版本安装目录然后./python直接运行。另外,想给某个...

2018-04-20 13:39:08 5888 2

原创 Python实现识别多个条码/二维码(一)

        对于条码的识别程序,网上有很多,不过很多都是只识别一个,并且此处的“识别”指的是找出图片中的条码,并没有对条码进行译码。本篇博客将先实现第一个功能,即,找出图中的多个条码。下篇博客会实现第二个功能,即,对找出的条码进行译码。下面看代码:from sys import exitimport numpy as npimport cv2 # 加载图片并把它转换为灰度图片ima...

2018-04-20 13:01:05 9919

原创 用Python将数据写入Excel表格中

    最近在学习Libsvm,使用它需要有Libsvm格式的数据。虽然有FormatDataLibsvm.xls可以更改数据格式,但是要把原始数据手动输入Excel中可就不容易了。所以就用Python写了个简单的程序将数据存入表格中。    上代码import numpy as npimport xlwt#读入数据data_file = 'D:/.../ionosphere.data'#...

2018-03-22 14:35:17 19563

原创 解决SimpleMKL Toolbox例程exmklclass.m无法运行的问题

记录一下,解决方法很简单,但却花了我不少时间。解决方法:将options.efficientkernel=1;改为options.efficientkernel=0;

2018-03-21 21:32:29 1119 4

原创 解决Python中“unindent does not match any outer indentation level”问题

爬坑心路省略N字......问题解析:Python程序出现这个问题是因为制表符与空格混用,建议全部改为空格。设置方法:我用的是VS2017,全选程序,然后,编辑——&gt;高级——&gt;将选定行中的制表符替换为空格。...

2018-03-19 09:51:36 2644

原创 Python实现投影法分割图像(二)

        在上篇博客中,我们已经实现了水平投影和垂直投影图的绘制。接下来,我们可以根据获得的投影数据进行图像的分割,该法用于文本分割较多,所以此处依然以上次的图为例。        先把上次的两幅图搬过来,方便讲解。                        上面两图分别从垂直和水平方向描述了图像中文本的分布。我们想象一下,将两幅图重叠起来(当然这里比例要调整下),那么我们就能得到四个重...

2018-03-02 15:28:39 12199 16

原创 Python实现投影法分割图像(一)

投影法多用于图像的阈值分割。闲话不多说,现用Python实现。上代码。import cv2import numpyimg = cv2.imread('D:/0.jpg', cv2.COLOR_BGR2GRAY)height, width = img.shape[:2]#resized = cv2.resize(img, (3*width,3*height), interpolation=c...

2018-02-26 09:27:40 12957 2

空空如也

空空如也

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

TA关注的人

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