自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

转载 32位与64位下各类型长度对比

64 位的优点:64 位的应用程序可以直接访问 4EB 的内存和文件大小最大达到4 EB(2 的 63 次幂);可以访问大型数据库。本文介绍的是64位下C语言开发程序注意事项。 1. 32 位和 64 位C数据类型 32和64位C语言内置数据类型,如下表所示: 上表中第一行的大写字母...

2020-04-27 17:49:53 32 0

转载 Linux | 为什么用户态和内核态的切换耗费时间?

思考这个问题的导火线是,看到java中的synchronized关键字。 经过编译,synchronized标注的函数会加一个读写锁,一般不推荐使用,因为加锁解锁设计到内核态与用户态的转换,有时转化耗时比函数体执行时间还长,所以不推荐使用。 这个观点在学操作系统的时候作为常识被认知,那背后具体...

2020-03-26 18:29:45 55 0

原创 KMP算法原理详解_论文解读版

1. KMP算法是什么,解决了什么问题,及其不足之处(算法最坏情况) 2. KMP原理 3. KMP实例 4. 引用文献

2020-03-25 00:08:12 37 0

原创 理解Windows坐标系概念及其转换
原力计划

1. Windows坐标系统 坐标系主要分为两种: 逻辑坐标系:主要是在“虚拟界面”中绘图,是绘制到设备坐标系的准备阶段。 设备坐标系:由客户区坐标、窗口坐标、屏幕坐标组成,主要和显示设备有关。 在不同的空间中,各个坐标系及其坐标表示方法稍有不同。世界空间和页面空间的坐标系为平时熟悉的方式,...

2020-03-19 21:55:58 84 0

原创 Traits编程技法

照顺序,这次应该是迭代器Iterator的内容了,然而Iterator涉及到一个重要的技巧就是Traits编程技法。 一 获取Iterator的相应类型(associate type) 在使用Iterator时,可能需要知道它的相应类型,也就是Iterator指向的变量的类型,在C/C++语言...

2019-12-03 14:21:07 39 0

转载 一致性 hash 算法( consistent hashing )

我的理解和思考:一致性Hash主要为了解决在节点变化(增或删)后,会造成的大量的Cache Miss。因而提出了此算法,为节点的增删提供极大的帮助。用新方法解决了一个问题后,还有新的问题产生,Cache分布不均匀呢?因而又引入虚拟节点的概念,对原有分布不均匀的节点进行Balance。 不得不说这...

2019-12-03 09:51:15 40 0

转载 Linux写时拷贝技术(Copy on Write)

我的总结: 为发挥计算机的计算优势,不惜一切代价压榨着对计算机资源的使用。 Page Table Entry(PTE)的使用案例之一,这里的Copy是一种浅拷贝。以Linux的fork为例,fork时只简单的创建新的描述信息,并将PTE中的描述信息标志为只读,对于物理内存中的数据段、代码段、堆...

2019-11-20 09:08:15 34 0

原创 Coursera 计算机组成——期末考试

1.第 1 个问题 以下人物中,没有参与电子计算机ENIAC研发工作的是 约翰•埃克特 约翰•冯•诺依曼 约翰•阿塔纳索夫 约翰•莫克利 Correct 1/1 分 2.第 2 个问题 指令执行的四个基本步骤为 取指、发射、执行、访存 取指、读数、运算、完成 取指、分派、计...

2019-11-02 20:02:14 681 0

原创 MIPS汇编程序设计——Cousera

第一题:用系统功能调用实现简单输入输出 利用系统功能调用从键盘输入,转换后在屏幕上显示,具体要求如下: 如果输入的是字母(A~Z,区分大小写)或数字(0~9),则将其转换成对应的英文单词后在屏幕上显示,对应关系见下表 若输入的不是字母或数字,则在屏幕上输出字符“*” 每输入一个字符,即时转换并...

2019-10-14 22:48:56 122 0

转载 Dijkstra算法正确性证明

问题:求图中点1到其他各点的最短距离 策略: 把起点1放入初始集合Set中,从剩余的点中,选取到Set(此时Set中只有1个点)距离最近的点,并入集合Set中, 从剩余的点中,找经过集合Set,到起点1的最短距离,将最短边并入Set集合 依次循环,直到所有的边都并入Set 变量的命...

2019-09-26 10:18:15 419 0

转载 凸包问题的4种解法

转载自:https://blog.csdn.net/u011001084/article/details/72768075 前言: 首先,什么是凸包? 假设平面上有p0~p12共13个点,过某些点作一个多边形,使这个多边形能把所有点都“包”起来。当这个多边形是凸多边形的时候,我们就叫它“凸...

2019-09-18 11:28:51 90 0

原创 ”无法找到所需的资源“——GDI绘图相关——MFC运行异常

这两天用程序时碰到神奇的问题,软件短时间运行OK,但一定时间后(6个小时及以上),界面刷新失败,对软件长时间不处理后,软件自动退出。以前软件因堆内存耗尽退出的都会产生dmp文件,根据这个比较好定位问题。但是此次的软件退出,有时并不会产生dmp文件,有时虽然会有dmp文件,但调用堆栈都停止在系统级D...

2019-08-30 10:40:32 68 0

原创 python读取和保存mat文件

一、mat文件 mat数据格式是Matlab的数据存储的标准格式。在Matlab中主要使用load()函数导入一个mat文件,使用save()函数保存一个mat文件。对于文件 load('data.mat') save('data_1.mat',...

2019-08-26 16:21:35 6453 0

转载 Matlab神经网络函数newff()新旧用法差异

摘要   在Matlab R2010a版中,如果要创建一个具有两个隐含层、且神经元数分别为5、3的前向BP网络,使用旧的语法可以这样写: net1 = newff(minmax(P), [5 31]); 注意minmax()函数的使用,还有对输出层神经元数(1)的指定。   当然也可以采用...

2019-08-22 09:01:22 571 0

转载 UDP 组播---你需要了解这些

我的小结 UDP是面向无连接的协议,不能保证数据的可靠到达,但相应的,实时性较于TCP好了不是一个数量级。这回主要得用到组播。但下午实验的时候,没有组出效果,可能得连上路由器才行吧。 数据传输方式主要分为单播、广播、组播,不同的传输方式各有其优劣性。 另外感觉7层OSI协议,在软件上实现其实...

2019-08-06 17:59:40 1108 0

原创 C++ tips记录

十六进制转十进制(进制转化) #include <sstream> #include <string> using namespace std; int main() { int nOut = 0; string name = "d0&quo...

2019-08-01 09:25:59 57 0

原创 J1939协议与CAN2.0对应关系图表

使用中接触最多的位:ID、数据包(8 bytes),其他的信息大部分驱动程序或软件都已做了处理,无需额外关注。 其中,CAN总线的原理和RS485的异同如下: 相同之处 信号的调制方式:都按差分电压,并设置电压阈值,来区分0/1信号 数据的传输方式:都在总线上传输 异: RS485为主从...

2019-07-19 10:41:16 886 0

原创 背包问题——动态规划

主要目的:在不改变算法结果的情况下,提高算法执行效率。 主要手段:将算法执行中,重复执行的子问题进行缓存,通过查表直接获取到本次结果。 有这样一个问题,我们只有一只不同磅数的背包,要装不同的物品,且物品有不同的价值,需要怎么进行装配能得到最大的价值呢?表格中的物品的重量和价格如下所示: 物品...

2019-07-06 16:12:33 124 0

原创 Windows DLL注入的方法介绍

DLL作为公司日常用品,极大的方便了日常的开发(主要是看起来产品就很高大上了)。以下介绍几种跨进程调用DLL的方法。 从《Windows核心编程》的书中可知,Windows下各个进程间的地址是相互独立的。建立新的进程时,会为此进程开辟一块独立的虚拟地址空间,这样有助于系统的稳定。——当一个进程崩...

2019-06-26 21:02:30 291 0

原创 Windows DLL的生成与使用

DLL基础部分 通过对函数前加前缀:__declspec(dllexport) 或__declspec(dllimport),表明函数或类是导出到DLL,还是从DLL中导入。但在C++中,通过编译会改变函数名称,可以通过如下的宏进行更正,但过程比较繁琐,不适用于大批量改变函数名称的情况。 ...

2019-06-17 22:15:31 514 0

原创 Windows Dll的构建和导入

去年校招在美的面试时,emmm,被问倒了。 Dll基本的部分本事不太复杂,真需要静下心来,细细研究这方面的知识。 ——以不变应万变! update 2019/11/14: 从主要目的来看,这个构建和导入的过程,核心是通过编译产生二进制文件,并在软件启动时加载到内存中,其中内存里存放了dll相关...

2019-06-10 16:58:15 100 0

原创 软件中“新需求”的处理方法

这是关于如何做好工作的一篇拙见,肯定还有更多没注意到,欢迎批评指正! 逐渐意识到技术只是其中一个点,还有更多其他方面的,如软技能,也同样重要!前段时间火爆的996吐槽,我的直观感受是任务是干不完的,当做好了一件事,还会有更多的任务在等着你(干活还给高工资的公司例外)。何尝不用这个高质量的时间来提...

2019-06-02 09:34:24 130 0

原创 A*算法介绍

不得不叹服,强大算法背后,都是简单得不能再简单的逻辑。普林斯顿的算法课程作业里,要让用A*算法。什么都没接触到过,看到后有种想哭的感觉!于是网上查阅资料,渐渐的明白了怎么回事。 通过对A*算法的学习的个人感悟:计算一个代价函数,评估每一步的代价,并找到代价最小的方向。最终得到的解可能不是最优,但...

2019-05-24 19:41:04 537 0

原创 Quick Selection(快速选择算法)

常年见到快速排序算法,当在普林斯顿大学的网课上看到这个Quick Selection算法的时候,直接蒙住了——这个是什么,和快速排序有什么关系啊? 于是迅速查阅了维基百科,大致了解了其思想,再结合课程中的ppt,终于搞明白了。不得不说这是个很巧妙的算法,把原先要O(nlogn)复杂度的问题,简化...

2019-05-14 20:58:12 1994 0

转载 树莓派NAS搭建——基于OMV

之前树莓派的debian版系统里装了个以samba服务为基础的NAS,但在实际使用中发现写入速度只有2M/s,特别慢,用的是Class 10的高速TF卡也于事无补。实在无法直视,于是一直在搜寻合适的NAS系统。偶然间发现了OMV,遂刷入,很快很好用,读写速度轻松保持在10M/s! OMV的配置绝...

2019-05-04 11:49:56 7216 0

原创 背包问题——贪婪算法

贪婪算法 在时间或空间有限的条件下,去较为快速的找到问题的近似解。如典型的旅行商问题,就是一个复杂度为O(n!)的问题,可能解的数量会随着路线的增多呈爆炸性增长。 背包的例子 假设你是一个小偷,有一个可装35Kg重东西的背包,要去商场获取收益。因此要尽量保持包里装的东西价值最大。那么你应该如...

2019-05-04 11:35:44 1205 0

原创 最短路径算法——Dijkstra介绍

个人心得体会:理解这种或这类算法,可以先从小规模的问题入手,并逐渐推广到问题变复杂的情况,这样理解起来也可以更方便和透彻。——和数学归纳法很相似。 图简介 以使用地图APP为例,假设你想前往某个目的地,此间有很多条线路可以选,如地铁、不同的公交换乘方案。而不同的方案所需换乘的次数不同。那么怎么...

2019-04-27 08:56:07 8705 2

原创 散列表——Hash Table

前文对数组和链表进行了分析,介绍了各自在插入、遍历、删除方面的优势和劣势,时间复杂度如下表示。 数组 链表 读取 O(1) O(n) 插入 O(n) O(1) 删除 O(n) O(1) 既然数组和链表都存在一定的不足,那么有没有什...

2019-04-21 10:02:09 87 0

原创 LeetCode 940 解题思路

这道题是随机选的,看了看题目,刚好和前段时间看了MIT6.00课程中的Dynamic Programming很像,于是就想着去解决试试。没找到Dynamic Programming在这里的切入点,运算结果是对的(报:Time Limit Exceeded),就是计算复杂度太高了——,当然十分惨烈。...

2019-04-20 11:16:47 88 0

原创 三种排序算法详解:插入、冒泡、快速排序

好几年前就接触了排序算法,那时候写都是直接用的brute force方法。那时候心没有静下来好好去想,而且只得其形,未得其意,难以理解不同排序算法间的精髓所在。近期在看《图解算法》这本书,借助一幅幅图的表达和演化,恍然顿悟,这算法原来并没有想象中的那么难! 插入排序 排序算法的起名,都是和其特...

2019-04-14 11:22:50 115 0

原创 数组与链表——异同分析

近期开始看《图解算法》,虽然很早以前就接触过算法这块的,但还是不得不惊叹作者的功力,巧妙地借助漫画的形式和相关的例子把复杂的原理讲得如此有趣和透彻。这里将先跳过大O(时间复杂度、空间复杂度)相关部分的介绍,以及关于最佳、平均、最坏情况下复杂度的估计方法。 内存 首先是介绍内存的概念,一般来说,...

2019-04-05 17:47:13 302 0

原创 VS2017 C++编译时报大量错误

本文的基本部分参考自CSDN博客:https://blog.csdn.net/weixin_40830684/article/details/80949746 如图所示出现了E1696、E0282、E0260等错误,包括“float.h”, "errno.h", &quo...

2019-04-02 21:38:41 948 1

原创 代码整洁之道——读后感

时隔三年,这是第二次阅读《代码整洁之道》,并以第三者的角度来看代码质量的问题,感慨良多。最主要的是我们要去写具有表达力、张力的代码;在修改时,每次签出都要比来时更整洁,千里之行始于足下。 写代码,本质上写法与中学作文无异,写的过程和好故事都需要兼顾。实现了业务功能的代码只是作为一个开始,软件...

2019-03-13 22:43:46 645 0

转载 依赖注入、控制反转

通过这个例子,作者吧依赖注入和控制反转讲的十分精练易懂。 依赖注入:底层对象做为参数传入高层次对象。——解决的问题:底层对象的小变动,会极大影响高层次的代码结构。 控制反转:一个容器相关,通过配置好的依赖关系,对依赖注入方式进行管理。 作者:Mingqi 链接:https://www.zhi...

2019-03-12 22:20:58 53 0

转载 架构漫谈(九):理清技术、业务和架构的关系 + 我的思考

我的思考:架构师接触的工作内容,已不仅仅是技术的范畴,更需要协调好人与人之间的合作关系。技术仅仅是用于解决问题的一种方式,问题具体是如何解决的,是非技术人员所不关心的,他们关心更多的是能不能以更低成本,来处理好当前的问题。因而在解决问题的时候,更需去关注问题的本质,相似的问题完全可以借用类似的案例...

2019-01-28 22:16:16 438 0

原创 架构漫谈(八):从架构的角度看如何写好代码 + 我的思考

我的总结:当先前对于利益相关者的关系理清了,系统基本架构和测试方法等也有了,进入实际Coding阶段。在Coding前,需要我们考虑好业务功能的分配,关注于功能会频繁变更的部分,为未来的维护和扩展打下良好基础。诚然,这确实是一个基础,限于当时的资源、环境等约束,难以将所有问题一步到位的解决,还待于...

2019-01-23 23:19:24 10356 0

原创 架构漫谈(七):不要空设架构师这个职位,给他实权 + 我的思考

我的总结:在做好本职工作的同时,仔细观察和推敲事物背后的其他关系,及其相互之间的影响。就如架构师,光让下面的人执行流程肯定不行,得真正让他们从心底里认可这个事情。这里有太多的内容值得去推敲,技术方面的、管理方面的(这和项目经理完全一样啊不是?)。 结合前面的文章,架构师的主要目的,是以长期下的低...

2019-01-15 23:18:43 8813 2

转载 c++内存泄露:使用性能监视器进行内存泄露的确认

对于服务器程序,在不停的运作中,如何去测试是否存在内存泄露,如果你的开发环境是在windows下,那么我们就可以使用windows自带的性能监视器来观察程序的性能。 使用此例子: // Test.c int main() {     while (true)     {         c...

2018-12-28 10:15:31 217 0

原创 架构漫谈(六):软件架构到底是要解决什么问题? +个人思考

概括:结合上文(漫谈六),为满足业务方在利益方面的诉求,将业务在计算机上虚拟化(软件化),软件工程师开始对业务进行建模和实现,这是一个顺序过程。软件方面,随着这个过程愈发复杂,需要不同人参与到不同部分,进行职能的细分和并行开发,达到效率的最大化。随着日后处理量的上升,对软件架构和硬件性能有着更高的...

2018-12-19 22:00:52 129 0

转载 C++ explicit关键字详解

一句话总结:在类中,写了explicit关键字时,类中的隐式转换无效,必须在类中进行实际的声明。 首先, C++中的explicit关键字只能用于修饰只有一个参数的类构造函数, 它的作用是表明该构造函数是显示的, 而非隐式的, 跟它相对应的另一个关键字是implicit, 意思是隐藏的,类构造函...

2018-12-12 17:38:10 88 0

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