- 博客(77)
- 资源 (5)
- 收藏
- 关注
原创 cv::Mat的六种格式化输出风格
Mat示例风格一:Opencv默认风格风格二:Matlab风格风格三:Python风格风格四:CSV风格风格五:Numpy格风格六:C语言风格Mat示例 如下是一个5行3列的三通道cv::Mat矩阵,使用randu函数设置矩阵中的数字为随机值。 cv::Mat coutFormat = cv::Mat(5, 3, CV_8UC3); cv::randu(coutFormat, cv::Scalar::all(0), cv::Scalar::all(255));风格一:Opencv默认风格 .
2021-04-01 00:00:23 2455
原创 剑指Offer之替换空格(面试题四)
一:题目 请实现一个函数,把字符串中的每个空格替换成“%20”。例如输入“We are happy.”,则输出“We%20are%20happy.”二:题目分析 熟悉网络编程的同学应该都知道为什么要将空格替换成%20,这里就不做过多赘述。1)一般思路 对于该题,一般的解法,就是循环遍历该字符串中的每一个字符,遇到空格后,将空格后的字符串向右移动两位,然后将空格和空出来的位置替换成%20。 对于上面的思路,很明显,每遇到一个空格就要移动O(n)个字符。假设有O(n)个空格字符的字符串,那么
2021-03-26 00:08:23 126
原创 剑指Offer之有序数组查找
一:题目 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。1 2 8 92 4 9 124 7 10 136 8 11 15二:题目分析 如题所示,它的行和列都是递增的。那么我们需要试图找到边界点,这个边界点可以帮助我们排除一整行或一整列。看左上角的1,比1大的可以是第一列和第一行,所以很难排除一整行或一整列。看左下角的6,比6大的数可以
2021-03-06 13:30:20 174
原创 剑指Offer之实现一个单例模式
一:题目 实现一个类, 我们只能生成该类的一个实例。二:题目分析 该题也是常见的题目。实现单例,首先单例模式是设计模式中最常见的模式之一。设计单例模式的话,通常需要注意以下几点:类的构造函数、拷贝构造函数、赋值函数声明为受保护成员或私有成员。获取单例的函数设置为静态成员函数注意线程安全性双层判断可以提高获取单例类实例的效率。三:源码设计 结合C++语言的特性,这里我们使用了模板类来完成单例模式的设计。该类为单例类的基类,继承该类的子类都可以成为一个单例类。这种设计具有平台化的
2021-03-06 00:09:30 135
原创 剑指Offer之MyString
一:题目 如下为类型CMyString的声明,请为该类型添加赋值运算符函数。 以上是剑指Offer的面试题一,这里我直接实现一下整个字符串类,该面试题出现的频率还是挺高的。主要考察了类的封装、函数重载、构造函数、拷贝构造函数、深浅拷贝、赋值函数、左值、const常量、编码规范等技术点。麻雀虽小五脏俱全,知识点还挺密集的,这大概就是考察频率高的原因吧。二:题目分析构造函数形参是可缺省的,等同于函数的重载。拷贝构造函数的形参是const引用,如果不使用引用,会导致在传参时,循环调用拷贝构造函数,
2021-03-04 23:14:16 132 5
原创 Shell脚本压力测试之实时获取CPU和GPU温度
在实际工作中,经常会对主机做一些压力测试,在测试过程中需要实时获取CPU和GPU温度,以便对硬件环境做一个整体的评估。如上,将获取的温度写入文件,方便测试完成后对其进行分析。
2023-06-04 15:32:54 1518
原创 CMake构建之自动整理VS工程中多层级目录
在使用CMake构建工程,如果项目中存在多层级目录时,构建的VS工程中的.h和.cpp文件会自动整理在HeaderFile和SourceFile中,具体如下:这样的情况不便于开发人员对文件目录进行分类和阅读。工程目录结构也不够清晰,无法与实际磁盘存储的文件夹对应上。那么有什么方法可以构建出多层级目录呢,同时能够与实际的文件夹对应上呢。
2023-06-01 23:54:33 1119
原创 CMake构建之整理VS工程中Qt自动生成的moc文件
靠谱的解决方案:完美隐藏CMake构建带有Qt的VS工程下自动生成的moc文件,VS工程目录清爽了许多。
2023-05-31 23:50:56 1784
原创 设计模式(java)-观察者模式
观察者模式,行为型设计模式。观察者模式在实际项目实践中,是一种使用较频繁的设计模式,它主要解决的是信息同步的问题,当多个对象需要从同一个主题中得到自身所需要的信息或状态,并通过这些信息或状态做出相应的行为时,就可以使用观察者模式解决。
2023-05-14 22:36:45 355
原创 剑指Offer之用两个栈实现队列
一:题目 用两个栈实现一个队列。完成在队列尾部插入结点和在队列头部删除结点的功能。二:题目分析 首先,让我们知道队列是“先进先出”的特性,而栈是“先进后出”的特性。那么使用两个栈实现一个队列的功能。我们可以想到的是一个栈用于作为入队列的容器,另一个栈可以用来作为出队列的容器。 根据栈的“先进后出”的特性,栈二中的内容可以存放栈一的栈顶元素。然后栈二的栈顶元素就是入队的第一个元素。那么就会有如下的操作步骤:入队列操作即就是入栈一的操作;出队列时,先判断栈二中是否有元素,有元素则出栈,
2021-08-01 00:21:31 344 1
原创 剑指Offer之重建二叉树
一:题目 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建出如下的二叉树并输出它的头结点。二叉树结点的定义如下:struct BinaryTreeNode{ int m_nValue; BinaryTreeNode* m_pLeft; BinaryTreeNode* m_pRight;}二:题目分析 首先,我
2021-07-26 00:38:12 169
原创 剑指Offer之从尾到头打印链表
一:题目 输入一个链表的头结点,从尾到头反过来打印出每个结点的值。 链表结点定义如下:struct ListNode{ int m_nKey; ListNode* m_pNext;}二:题目分析 对于该题,一般又两种解法,分别是使用栈结构,先将结点按顺序压栈,然后进行出栈输出。这种符合先进后出的原则。一般的符合先进后出的原则,我们就可以使用递归的手法进行输出。因为函数的调用也是以栈的形式进行的。不过如果链表很长,则会引起栈溢出的现象。三:源码 栈方式:void
2021-04-06 00:15:18 150
原创 新年新的想法(一直放在草稿箱里到现在)
去年其实也给自己定了一些目标,只是没有书写成文。回过头来看一下,发现自己并没有想象中的那么厉害,有段时间会发现自己对很多事情都是力不从心的,人的精力也是有限的。不过好在也完成了一个重要的目标:拿到了公司的最高个人奖项——公司之星,也第一次抽中了奖。这应该是好的开始吧。 虽然为了这个荣誉,费了不少努力,但从结果上来看,一切都是值得的。不过回想起来也会发现过去的一年里做了很多重要且紧急的事情,而忽略了许多重要不紧急的事,甚至浪费了一些时间去做不重要不紧急和不重要紧急的事。然而真正能让自己立住的恰...
2021-03-24 23:54:19 157 1
原创 CMake教程之构建Qt平台
一:构建环境二:目录结构三:CMakeLists文件说明四:测试一:构建环境 关于Qt环境下的项目,这里也使用了cmake进行构建,这样可以减少对工程文件的依赖,同时可以做到跨平台的使用。 目前使用的平台是:CMake3.16.4 + VS2015。二:目录结构 国际惯例,直接上工程目录结构: 根目录: source目录:、三:CMakeLists文件说明 同样的我们看一下根目录的写法:cmake_minimum_required(VERSION 3.5.1)pro.
2020-05-29 00:07:43 1034
原创 Effective C++ 之《资源管理》
条款13:以对象管理资源条款14:在资源管理类中小心copying行为条款15:在资源管理类中提供原始资源的访问条款16:成对使用new和delete时要采取相同形式条款17:以独立语句将newed对象置入智能指针条款13:以对象管理资源 看如下一个例子:void f() { Investment *pInv = createInvestment(); ... delete pIn...
2020-03-21 23:02:32 205
原创 VS2015 + Qt 5.9环境安装
一、环境下载Visual Studio 2015Qt 5.9.4qt-vsaddin-msvc2015-2.2.0一、测试一、环境下载 为了保证大家和我的环境一致,这里写一个Qt和VS的环境教程。 本人使用的环境是:VS2015 专业版+ Qt 5.9.4 + qt-vsaddin-msvc2015-2.2.0Visual Studio 2015 关于Visual Studio ...
2020-03-09 23:36:36 7396 2
原创 Qt自定义控件之可复选的ComboBox
在项目开发中,使用qt的原生控件可能打不到产品的需求。所以我们会经常自定义一些控件,以达到我们想要的效果。这个系列主要积累一些本人自定义过的控件的开发。 可复选的ComboBox,如下图所示: 如上,这个ComboBox下拉后,它是有复选框的,所以可以多选。这种控件很适合当复选项很多的情况下使用,节省了很多空间。 这里使用的核心控件有QListWidgetItem、QCheckB...
2020-03-08 21:14:16 2086 2
原创 Effective C++ 之《构造/析构/赋值运算》
条款05:了解C++默默编写并调用了哪些函数条款06:若不想使用编译器自动生成的函数,就该明确拒绝条款07:为多态基类声明virtual析构函数条款05:了解C++默默编写并调用了哪些函数 考虑如下一个类:class Empty{}; 这个类其实等价于:class Empty {public: Empty(); Empty(const Empty& other);...
2020-03-04 22:43:20 223
原创 CMake教程之构建《剑指Offer》平台
一:构建环境二:目录结构三:CMakeLists文件说明四:总结一:构建环境 为了更快速的熟悉CMake的使用,本人以练代练。在平时做自己的积累学习的项目的时候,尽量使用CMake去构建编译平台。这样即完成了自己的项目,同时也学到了CMake的使用,一举两得,何乐而不为。 目前使用的平台是:CMake3.16.4 + VS2015。二:目录结构 该项目是为了实现《剑指Offer》...
2020-02-26 22:12:33 266
原创 设计模式(java)-模板方法模式
1. 简介 模板方法模式,行为型设计模式。定义一个算法的执行骨架,而内部的操作步骤可由子类去做不同的实现。例如一些小游戏如射击、足球等,它们的执行过程都是一样的,只是执行内容不同罢了,那么这个执行过程(初始化、开始游戏、结束游戏)就是算法的骨架,而执行内容(射击本身和足球本身的规则、内容不一样)就是具体的操作内容。再比如,我们高中时经常会遇到同一类应用题,它们的解题思路都是基本一致的,而题目中...
2020-02-05 22:43:13 335
原创 Effective C++ 之《让自己习惯C++》
这里写自定义目录标题条款一:新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入条款一:你好! 这是你第一次使用...
2020-02-04 09:16:56 248
原创 QT和VS编译前生成版本信息头文件
在工程中经常会使用svn的版本号作为开发版本的迭代的版本信息。如果使用手动配置文件的方式,开发人员可能会经常忘记更新配置文件,这回导致svn版本和软件配置文件的版本信息不一致的问题。所以为了解决这个问题,我们可以将svn版本号信息编译到软件的可执行文件中。那么就需要在编译前通过脚本生成版本头文件(version.h),然后代码中引用该头文件,获取版本宏内容。 经过查阅和实践,我总结了在VS...
2019-06-25 13:48:05 956
原创 Opengl的一些常用功能理解
在使用Opengl的过程中,会经常禁用或开启一些功能,这里经过一些查阅,整理一些对常用的一些功能的理解。后续会不断的补充。1. glShadeModel glShadeModel是设置opengl中绘制指定两点间其他点颜色的过渡模式。一般分为两种模式:GL_SMOOTH(默认)、GL_FLAT。GL_SMOOTH: 以插值的方式,过渡两个点之间的颜色,两点颜色相同,则中间的点颜色也保...
2019-06-21 11:22:21 878
原创 Opencv中访问矩阵Mat中数据性能比对
本文参考作者浅墨_毛星云的著作《OpenCV3编程入门》中的源码和相关内容。Opencv访问矩阵像素方法 在图像处理中,会经常对图像的像素数据进行处理。那么在使用opencv的过程中避免不了去使用矩阵Mat。对矩阵Mat中像素的访问常用的几种方法有:通过获取矩阵数据的指针进行访问通过迭代器访问通过at函数访问 为此,对这三种方式的性能做了相关的测试。测试方法是对图像像素做映射压...
2019-06-05 14:45:38 1177
原创 cv::Mat初识和它的六种创建方法
cv::Mat 初识 Opencv种的Mat类,使得Opencv的编程更加的简单,程序员不用过多的去关注内存管理,并且发现Opencv的编程有点像不需要太多编程技术的Matlab一样,甚至有些函数名字都是一样的。所以对Mat的了解是很有必要的。 首先我们在处理一块数据的时候,如果使用Mat类,我们得到的好处是:不需要手动申请一块内存;在不需要时不用再手动释放内存;可以通过类的封装...
2019-06-04 14:52:49 72100 1
原创 ubuntu下集显做显示nvidia独显做计算的一种解决方案
nvidia显卡对linux系统一直不是很友好。在众多的桌面发行版上,安装nvidia独立显卡驱动后总是出现各种各样的与集成显卡不兼容的问题。为此,查了很多解决方案,都不是很理想。 有一个需求是这样的:为了减少桌面对nvidia独立显卡性能的消耗,我们想使用集成显卡做显示,独立显卡只用来做gpu的加速处理。但是在ubuntu系统上安装了独显驱动后,boise上设置以集成显卡作为主要显示硬件...
2019-03-13 14:39:49 3990
原创 LFS(Linux From Scratch)构建过程全记录(六):基本系统配置
上一篇,我们跟着lfs7.9将需要的软件包再chroot的环境下安装完成。接下来我们需要对chroot环境下的系统进行基本的配置。1. 通用网络配置静态IP配置: 通过如下命令创建静态IP配置文件:cat > /etc/systemd/network/10-eth0-static.network << “EOF”[Match]Name=eth0[Netwo...
2019-02-22 14:29:30 1033
原创 LFS(Linux From Scratch)构建过程全记录(五):正式构建LFS系统 -编译并安装程序
本篇主要介绍程序软件的安装和编译过程,这里需要按照LFS文档所描述的按照顺序安装,否则可能会出现依赖问题导致编译失败的情况发生。1. Linux-4.13.16 API Headers 执行如下命令,将头文件拷贝到/usr/include下:make INSTALL_HDR_PATH=dest headers_installfind dest/include ( -name .in...
2019-02-21 15:56:01 930
原创 LFS(Linux From Scratch)构建过程全记录(五):正式构建LFS系统 - 创建构建环境
前一篇中,我们在tools中安装了临时构建工具。本章我们会进入构建环境中,正式的构建lfs系统。创建构建环境1. 准备虚拟内核文件系统1.1 创建即将用来挂载文件系统的目录:mkdir -pv $LFS/{dev,proc,sys,run}1.2 创建初始设备节点: LFS文档的解释:内核引导系统的时候,依赖于几个设备节点,特别是console和null两个设备。这些设备需要...
2019-02-18 15:05:30 969 1
原创 LFS(Linux From Scratch)构建过程全记录(四):构建临时lfs系统
在构建lfs系统之前我们需要构建脱离宿主系统的新的工具链,然后在使用新的工具链构建其他基础的工具。这样做的目的减少宿主系统的依赖和影响。 构建出来的新工具链会放在$LFS/tools 的文件夹中,让其与后面安装的文件和宿主系统生成的目录分开,防止污染后面要制作的lfs系统。构建临时lfs系统 解压包命令:tar -xjf ***附:在没有特殊说明的情况下,编译安装完一个就删除...
2019-01-31 09:56:03 1646 1
原创 LFS(Linux From Scratch)构建过程全记录(三):下载并确认软件包和最后的准备
本篇我们需要准备好后续需要的软件包和补丁,并做构建系统的最后的准备工作。准备软件包和补丁 lfs7.9 的软件包下载地址:ftp://ftp.lfs-matrix.net/pub/lfs/lfs-packages/ 创建软件包目录、设置写权限和粘滞模式、校验MD5:mkdir -v $LFS/sourceschmod -v a+wt $LFS/sourcespushd $L...
2019-01-28 20:09:36 1197 1
原创 LFS(Linux From Scratch)构建过程全记录(二):构建分区
上一篇说明了lfs的一些准备工作,现在我们需要在构建lfs之前进行分区的创建。创建分区 使用fdisk -l 查看当前系统的硬盘分区情况:Disk /dev/sda: 238.5 GiB, 256060514304 bytes, 500118192 sectorsUnits: sectors of 1 * 512 = 512 bytesSector size (logical/p...
2019-01-28 16:12:38 1571 1
原创 LFS(Linux From Scratch)构建过程全记录(一):准备工作
前言 根据LFS文档,构建Linux系统。LFS版本:Linux From Scratch Version 7.9-systemd 首先了解一下该版本下LFS构建中的软件包和作用(摘自Linux From Scratch Version 7.9-systemd内容):Acl: 这个软件包包括了管理访问控制列表(ACL)的工具,用于定义文件和目录更细粒度的自主访问权。Attr: 这个软...
2019-01-28 11:15:05 4773 1
原创 设计模式(java)-策略模式
1. 简介 策略模式,行为型设计模式,指对象有某种行为,在不同的场景或需求中表现方式不同。一个或多个场景下拥有一种表现方式。策略模式就是对这种场景设计的模式。 策略模式再软件设计中是经常被使用的,且难度相对来说很小,这里就不做过多的解释了。如我们在设计一个算法时,它可能在不同的需求下算法的公式不一样。例如个人所得税,各个国家的收税算法都是不一样的,根据不同国家的需求,就会制定不同的策略。...
2019-01-13 22:27:42 158
原创 设计模式(java)-享元模式
1. 简介 享元模式,同样引用百度百科的解释:它使用共享物件,用来尽可能减少内存使用量以及分享资讯给尽可能多的相似物件;它适合用于只是因重复而导致使用无法令人接受的大量内存的大量物件。通常物件中的部分状态是可以分享。常见做法是把它们放在外部数据结构,当需要使用时再将它们传递给享元。 享元模式主要解决的是当系统中存在大的内存或对象时,且这些内存或对象在很多地方使用频繁,如果这些内存和对...
2019-01-12 19:14:39 123
原创 设计模式(java)-组合模式
1. 简介 组合模式,同样引用百度百科的定义:将对象组合成树形结构以表示“部分整体”的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。 从以上的解释,我们可以看出,为了保证整体和部分对象的使用一致性。那么,整体和部分就需要有相同的接口方法,那么怎么才能体现整体和部分的差别呢,那么就需要在整体中有对部分的引用,同时拥有对部分的增删查改的方法。 所以,组合模式多应用于...
2019-01-07 23:44:24 439
原创 设计模式(java)-桥接模式
1. 简介 桥接模式,引用百度百科的解释如下:桥接模式是将抽象部分与它的实现部分分离,使它们都可以独立地变化。它是一种对象结构型模式,又称为柄体(Handle and Body)模式或接口(Interfce)模式。 由上可以看出来,它存在两个维度的对象:抽象部分和实现部分。那么什么是抽象部分,什么是实现部分呢。抽象部分:一般的,它存在于实现部分,继承于统一个接口的抽象化实例。实...
2018-12-30 19:37:56 183
原创 设计模式(java)-代理模式
1. 简介 代理模式,为了控制委托对象的访问,为其提供了一个代理类,该代理类拥有委托类对象的引用。代理类在委托类和客户之间起到中介的作用,用来控制委托对象的成员、方法等的访问,从而达到与客户代码的解耦。 一般的委托类只负责自身的业务处理,而代理类中会负责调用和使用委托类方法的逻辑处理,以便更好的使用委托对象中的方法,从而完成客户代码的需求。所以,代理类的目的,主要是控制委托对象的访问。 ...
2018-12-22 16:23:45 236
原创 shell学习笔记(三):使用shell脚本打包软件程序
在项目开发过程中,我们常常需要在脱离源码的情况下,去运行程序,进行相关测试。所以就需要对程序打包,并使用svn号进行管理这些打包的程序,便于后续去追溯版本。 对于小公司,可以简单的使用shell脚本,将程序和资源文件压缩到文件中,并带有svn版本的的命名,来进行维护。最近就写了一个简单的脚本来做这个工作,这里记录一些关键的地方,方便后续查阅。查看svn版本号:svnversion -...
2018-12-11 19:42:36 1567
原创 设计模式(java)-外观模式
1. 简介 外观模式,为了隐藏系统的复杂性,向客户提供统一的接口层,消除客户与系统的耦合。该设计模式为结构性模式。、 在中大型程序中使用很多,当整个软件系统分为多个模块或层次结构,在各层或各子系统通信时,可以使用外观模式来隐藏各子系统或各层的内部细节,向自己的客户系统提供统一的接口,保证系统的独立性。 由于设计模式比较简单,这里只给出一个简单的代码示例,以及它的使用场景。2. 代码示...
2018-12-10 23:17:44 181
C# 高级编程第13章通过搜索异步获取百度图片.
2016-04-26
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人