自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

可可西里

我本将心向明月,奈何明月照沟渠。

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

原创 基于字符串的Hash表效率实验分析

关键词:Hash表,Hash函数,冲突解决。一、哈希表原理及运用1、定义:散列表(Hash table),即哈希表,是根据关键字(Key value)而直接访问在内存存储位置的数据结构。也就是说,它是通过计算一个关于键值的函数,将所需查询的数据映射到表中的一个位置来访问记录,因此这可以加快查找速度。这个映射函数被称作散列函数,存放记录的数组被称作散列表。 2、思想:Hash算法的主要思想就

2016-10-16 15:03:33 2815 1

原创 文本数据集的读写和简单处理

·文本文件的处理,包括文件的读写操作,需要用到字符串切割方法来从数据集中获取目的数据以进行数据处理。·one-hot矩阵,目的是使用一个向量表示一篇文章中哪些词汇出现过,响亮的长度为词汇表的大小,1表示存在,0表示不存在。·TF矩阵,termfrequency,即每一个单词在训练文本中出现的次数与训练文本的总词数的比值,也就是对向量中的每个值归一化后的频率。·IDF矩阵,inverse

2016-10-15 18:06:02 18029 1

原创 KNN分类与回归-C++实现

KNN分类:夹角余弦#include #include #include #include #include #include #include #include #include #include #include using namespace std;struct train_data { int index; //训练文本序号 int e

2016-10-15 18:00:16 1167

原创 擦除flash需要注意什么

另外,在擦除时需要注意避免将其他地址的有效内容误擦了。同上例子,如果要写地址0~10KB的内容,但是第11KB有其它有效数据,那么在写之前擦除了3页,则会把原不需要擦除的内容一并擦掉了。flash在擦除时是按照sector或者page擦除的,因此需要注意需要擦除的页数。例如,页大小为4KB,如果需要写的大小为10KB,那么需要连续擦除3页,才能保证10KB写成功。因此,在做flash上的地址分配时,需要考虑到页的大小,做好。

2023-09-19 00:38:05 340

原创 为什么写flash之前需要先擦除

flash是一种掉电不丢失的存储介质,由于它的硬件特性(晶体管)只能从1写为0,所以在写之前,需要将当前页擦除,全部写为1,然后再写入。如果不擦除,直接写入是会失败的。

2023-09-19 00:13:17 467

原创 为什么不能在周期执行的中断内清狗

然而一般当程序跑飞时,PC指针处于异常状态,但是MCU的中断向量表是好的,中断执行机制是正常的。因此,如果在中断函数中有清狗操作,那么当程序异常时,如果中断函数响应了,那么可能无法按照预期执行狗复位,程序也无法恢复正常了。但是需要注意,我们这里说的中断一定要是周期执行的,并且执行的周期要小于狗复位的时间,例如定时器中断或者外部周期触发的管脚中断,这种中断函数中一定不能有清狗操作。为了程序的健壮性和鲁棒性,无论中断是否为周期执行或者执行周期为多少,我们都建议不要在中断中执行清狗操作。

2023-09-16 00:33:56 106

原创 为什么建议将常量用const关键字来修饰

如果我们将其定义在函数中,或者直接定义在全局变量中,没有用const关键字修饰,那么这些变量会被编译器分配在上面讲到的RAM区,因此会占用sram资源。当然这个做法也不是没有缺点,因为对于MCU来说,访问sram的效率会高于内部flash,如果不是追求极致的运行速度,那么建议用const修饰,否则不建议;一般来说我们的程序是放在内部flash中运行,在MCU中,内部flash资源远大于sram资源,因此这是一种牺牲内部flash来换取sram资源的办法。嵌入式软件中,内存资源是非常宝贵的,即sram资源。

2023-09-15 01:06:02 452

原创 为什么浮点数不能和0直接比较

诸如此类,都是不可取的,这里就和浮点数在计算机内存中的表示方法有关系了,比如浮点数1.0f在内存中可能为0.99999xxx,并不是一个精确的1.0f,并且浮点数0.0f在也有可能为0.00000xxx,具体值是多少,可以在IAR中查看。因此直接做比较,可能会造成误判。

2023-09-15 00:31:45 240

原创 嵌入式中断函数设计

即使用GPIO管脚作为中断源,连接外设,通过外设拉高或者拉低管脚,触发外部管脚中断;

2023-09-14 00:06:54 91

原创 通信接口互斥设计

当命令处理是操作系统中的一个线程,并且线程的优先级高于定时任务,则存在互斥问题,需要考虑场景:当定时任务中访问外设时,被命令处理打断,需要使用信号量进行互斥处理。- 当定时任务是操作系统中的一个线程,并且线程的优先级高于命令处理,则存在互斥问题,需要考虑场景:当命令中访问外设时,被定时任务打断,需要使用信号量进行互斥处理。锁中断是一个高危操作,有可能会导致中断函数不能及时执行,更严重的甚至会丢中断,因此需要结合软件的业务特点整体设计考虑,是否能锁中断,以及应该在哪里锁中断!1. 软件初始化过程中通信。

2023-09-12 23:30:59 92

原创 Java并发编程实战 第13章 显示锁

内置锁的局限性:无法中断一个正在等待获取锁的线程,或者无法在请求获取一个锁时无限的等待下去。内置锁必须在获取该锁的代码块中释放,这就简化了编码工作,并且与异常处理操作实现了很好的交互,但却无法实现非阻塞结构的加锁规则。这都是使用synchronnized的原因。13.1 Lock与ReentrantLock必须在finally中释放锁Lock lock = new ReentrantLock();...lock.lock();try { // 更新对象状态 // 捕获异常,并在必要时恢复不变

2020-09-03 09:02:36 170

原创 Java并发编程实战 第11章 性能与可伸缩性

线程的主要目的是提高程序的运行性能。提高资源利用率,系统响应性。11.1 对性能的思考多线程开销:线程之间的协调(加锁、触发信号、内存同步),上下文的切换,线程创建和销毁,线程的调度。可伸缩性:当增加计算资源(CPU、内存、存储容量、IO),程序的吞吐朗或者处理能力相应增加。...

2020-08-27 09:02:11 186

原创 Java并发编程实战 第10章 活跃性、性能与测试

过度地使用加锁,可能导致锁顺序死锁;过渡的使用线程池和信号量来限制对资源的使用,可能导致资源死锁;10.1 死锁java无法从死锁恢复;数据库设计一般可以恢复,会选择一个牺牲者放弃这个事务。10.1.1 锁顺序死锁如果所有线程以固定的顺序来获得锁,那么程序中就不会出现锁顺序死锁问题。right -》leftleft -》right10.1.2 动态的锁顺序死锁有时候并不清楚是否在锁顺序上有足够的控制权来避免死锁发生。...

2020-08-21 09:05:55 167

原创 Java并发编程实战 第9章 图形用户界面应用程序

9.1 为什么GUI是单线程的多线程GUI框架容易发生死锁问题。单线程的GUI框架使用线程封闭机制来实现线程安全性。9.2 短时间的GUI任务9.3 长时间的GUI任务9.4 共享数据模型

2020-08-21 08:45:11 154

原创 Java并发编程实战 第8章 线程池的使用

8.1 在任务与执行策略之间的隐形耦合只有当任务都是同类型的并且相互独立时,线程池的性能才能达到最佳。8.1.1 线程饥饿死锁在池中,如果任务A依赖其他任务B,任务B无法完成或者被阻塞,那么可能产生死锁,称为线程饥饿死锁。如果线程池足够大,可能不会死锁。每当提交了一个有依赖性的Executor任务时,要知道可能会出现线程的饥饿死锁,因此需要配置线程池的大小限制或配置限制。8.1.2 运行时间较长的任务如果任务阻塞的时间过长,即使无死锁,线程池的响应性也会变得糟糕。执行时间长的任务不仅会造成线程池

2020-08-04 21:58:58 152

原创 Java并发编程实战 第7章 取消与关闭

Java没有提供任何机制来安全地终止线程。但它提供了中断,这是一种协作机制,能够使一个线程终止另一个线程的当前工作。这种协作方法是必要的,我们很少希望某个任务、线程或服务立即停止,因为这种立即停止会使共享数据结构处于不一致的状态。在编写任务和服务时可以使用一种协作的方式:当需要停止时,它们首先会清楚当前旨在执行的工作,然后再结束。任务本身比发出取消请求的代码更清楚如何执行清除工作。行为良好的软件能很完善的处理失败、关闭和取消等过程。7.1 任务取消在Java中没有一种安全的抢占式方法来停止线程。只有一些

2020-07-27 23:05:57 159

原创 Java并发编程实战 第6章 任务执行

6.1 在线程中执行任务在理想情况下,各个任务之间时相互独立的:任务并不依赖于其他任务的状态、结果、边界效应。应用程序性希望支持尽可能多的用户,从而降低每个用户的服务成本,而用户则希望获得尽快的响应。6.1.1串行的执行任务6.1.2 显示地为任务创建线程只要请求到达的速率不超出服务器的处理能力。6.1.3 无限制创建线程的不足线程生命周期的开销非常高资源消耗稳定性:线程数的限制值随平台不同,并受JVM启动参数、Thread构造函数中栈大小、以及地层OS对线程的限制等。会抛出OOM等异常。

2020-07-03 09:01:42 148

原创 Java并发编程实战 第5章 基础构建模块

委托是创建线程安全类的一个最有效的策略:只需让现有的线程安全类管理所有的状态即可。5.1 同步容器类

2020-06-24 01:03:06 152

原创 Java并发编程实战 第4章 对象的组合

4.1 设计线程安全的类三要素:找出构成对象状态的所有变量找出约束状态变量的不变性条件建立对象状态的并发访问管理策略4.1.1 收集同步需求状态空间:对象与变量的所有可能取值。状态空间越小,越容易判断线程的状态。final类型的域使用得越多,就越能建华对象可能状态的分析过程。4.1.2 依赖状态的操作类的不变性条件与后验条件约束了在对象上有哪些状态和状态转换是有效的。4.1.3 状态的所有权4.2 实例封闭将数据封装在对象内部,可以将数据的访问限制在对象的方法上,从而更容易确保线程

2020-06-23 23:25:26 139

原创 Java并发编程实战 第3章 对象的共享

3.1 可见性在没有同步的情况下,编译器、处理器以及运行时等都可能对操作的执行顺序进行一些意想不到的调整。3.1.1 失效数据3.1.2 非原子的64位操作最低安全性:即使是失效值,但至少是之前的值,不是随机值。例外:非volatile类型的64位数值变量(long、double)。Java内存模型要求:变量的读取或写入都是原子操作,但是对非volatile的long和double变量,JVM允许将64位的读操作或写操作分解为两个32位的操作。当读取一个非volatile的long变量时,如果

2020-06-16 09:09:56 588

原创 Java并发编程实战 第2章 线程安全性

在构建稳健的并发程序时,必须正确地使用线程和锁。但这些终归只是一些机制,要编写线程安全的代码,核心在于要对状态访问操作进行管理,特别是对共享的和可变的状态的访问。

2020-06-10 01:23:19 163

转载 Python CSV Reader/Writer/DictReader/DictWriter例子

CSV(comma-separated values) 是跨多种形式导入导出数据的标准格式,比如 MySQL、Excel。它以纯文本存储数和文本。文件的每一行就代表一条数据,每条记录包含了由逗号分隔的一个或多个属性值。这个标准格式的名字来源就是每条记录是用逗号将其属性分隔的。即使有这个非常明显的命名标准,而实际上却没有一个官方的标准 CSV 格式,有可能是以一些比较类似的分隔符来分隔数据,虽然它们的

2017-05-22 16:05:49 19325 3

转载 Python 操作 MongoDB

这篇文章主要介绍了使用Python脚本操作MongoDB的教程,MongoDB作为非关系型数据库得到了很大的宣传力度,而市面上的教程一般都是讲解JavaScript的脚本操作,本文则是基于Python,需要的朋友可以参考下0.启动mongodb数据库$ mongod.exe --dbpath D:\mongodb\data\db1.连接数据库MongoClient VS Conne

2017-05-22 10:07:52 908

转载 MongoDB中的_id和ObjectId

_id和ObjectId MongoDB中存储的文档必须有一个”_id”键。这个键的值可以是任何类型的,默认是个ObjectId对象。 在一个集合里面,每个集合都有唯一的”_id”值,来确保集合里面每个文档都能被唯一标识。如果有 两个集合的话,两个集合可以都有一个值为”123”的”_id”的键,但是每个集合里面只能有一个”_id” 是123的文档。 1.ObjectId Obje

2017-05-20 17:17:07 3793

转载 MongoDB 之 用户管理

写在前面的话Note:   该文章仅对 2.x版本有效,3.x版本已更新了API本篇博客主要介绍Mongobd的用户管理本篇博客以参考官方文档为主本篇涉及到官方文档的部分是:[ http://docs.mongodb.org/manual/core/access-control/ ]如果可能,请尽量阅读官方文档,而不是看我的这篇博客。个人强烈推荐直接阅读官方文档。本人英语水平不好,肯定会遇到错误或

2017-05-19 11:52:23 1070

转载 Win7下MongoDB的安装和部署测试

Mongo DB 是目前在IT行业非常流行的一种非关系型数据库(NoSql),其灵活的数据存储方式备受当前IT从业人员的青睐。Mongo DB很好的实现了面向对象的思想(OO思想),在Mongo DB中 每一条记录都是一个Document对象。Mongo DB最大的优势在于所有的数据持久操作都无需开发人员手动编写SQL语句,直接调用方法就可以轻松的实现CRUD操作分布式文档存储数据库本文示范如何

2017-05-19 11:13:41 619

原创 Python-读入json文件并进行解析及json基本操作

import jsondef resolveJson(path): file = open(path, "rb") fileJson = json.load(file) field = fileJson["field"] futures = fileJson["futures"] type = fileJson["type"] name = fileJ

2017-05-18 16:11:20 59159 2

原创 Python-使用CSV模块进行文件处理

version 1:字段中还有逗号等复杂符号则无法处理import osDATADIR = r"C:\Users\dell\Desktop\Udacity"DATAFILE = r"beatles-diskography.csv"def parseFile(path): data = [] #f = open(path, "r") with open(path, "rb")

2017-05-18 14:15:12 1800

原创 Python-修改文件夹下所有文件的名字

import osdef renameFile(): fileList = os.listdir(r"C:\Users\dell\Desktop\Udacity\prank\prank") print(fileList) # get current work path currentpath = os.getcwd() print("Current is "+

2017-05-18 13:42:45 2737 1

原创 Python-定时打开一个网页

import webbrowserimport timeprint("start" + time.ctime())count = 0;while (count < 3): time.sleep(5) webbrowser.open("http://play.baidu.com/?__m=mboxCtrl.playSong&__a=270860469&__o=/search||s

2017-05-18 13:39:56 3658 2

原创 错误 4 error LNK1104: 无法打开文件“libboost_date_time-vc120-mt-sgd-1_64.lib”

在当前文件夹下生成lib,需要注意解决方案的配置属性和平台属性(即位数),即最后两个值 bjam stage –toolset=msvc-12.0 –stagedir=”C:\Users\dell\Desktop\kt\b oost_1_64_0\boost_1_64_0” link=static runtime-link=static threading=multi variant=debug

2017-05-11 16:11:51 13488 7

转载 boost库生成文件命名和编译

boost库生成文件命名和编译 生成文件命名规则:boost中有许多库,有的库需要编译、而有的库不需要编译,只需包含头文件就可以使用。编译生成的文件名字普遍较长,同一个库根据编译链接选项不同,又可以生成多个不同名字的文件。生成的文件名字是很长,可是这样带的信息才多,也就容易识别出用途。其实生成文件的名字遵循一定的规则,有着固定的格式。识别这种格式,能帮助我们更高效地使用boost库。生成文件名字

2017-05-11 16:09:20 887

原创 报错:1130-host ... is not allowed to connect to this MySql server

解决方法:1。 改表法。可能是你的帐号不允许从远程登陆,只能在localhost。这个时候只要在localhost的那台电脑,登入mysql后,更改 “mysql” 数据库里的 “user” 表里的 “host” 项,从”localhost”改称”%”mysql -u root -pvmwaremysql>use mysql;mysql>update user set host = ‘%’ wher

2017-05-11 12:55:38 700

原创 windows读取文件夹下所有的文件——C++

intptr_t hFile = 0; struct _finddata_t fileInfo; std::string pathName, exdName; if ((hFile = _findfirst(pathName.assign(path).append("\\*").c_str(), &fil

2017-05-11 09:36:15 1038

转载 jsoncpp在vs2013下的安装以及静态连接错误error LNK2005问题

PS:json静态链接错误:msvcprtd.lib(MSVCP100D.dll) : error LNK2005:解决方案 严格按照方法二执行即可,不一致问题。C++要使用JSON来解析数据,一般采用jsoncpp.下载jsoncpp后,按ReadMe文档的说法是要先安装的,但是安装比较麻烦。然而事实上,我们并不需要安装,就可以直接使用。方法一:直接拷贝源文件。这个方法比较简单,但不推荐,因为不

2017-05-08 17:35:55 1535

转载 YAML预研文档

YAML预研文档YAML概要YAML是”YAML Ain’t a Markup Language”(YAML不是一种置标语言)的递归缩写,早先YAML的意思其实是:”Yet Another Markup Language”(另外一种置标语言),但为了强调这种语言以数据做为中心,而不是以置标语言为重点,而用返璞词重新命名,YAML的官方定义很简单,即一种人性化的数据格式定义语言,其主要功能用途类似于X

2017-05-08 10:19:01 672

转载 设计原则:小议 SPI 和 API

设计原则:小议 SPI 和 API背景第一次听说 SPI 是阅读《软件框架设计的艺术》,以后陆续在 Log4Net 和 Quartz.Net中发现了以这种形式组织代码的方式,本位给出为什么要区分 SPI 和 API 的一个思考过程。从面向接口编程说起我们在“调用方”和“实现方”之间引入了“接口”,上图没有给出“接口”应该位于哪个“包”中,从纯粹的可能性上考虑,我们有三种

2017-05-08 10:16:05 687

转载 BitMap(位图) -处理海量数据

1K=1024byte  1M=1024K=1024*1024byte(约100万个字节)  1G=1024M=1024*1024K=1024*1024*1024byte(约10亿个字节)  假设现在有40亿个不重复且无序的无符号整数,现在给你一个整数让你快速判断它是否在这40亿个数里面???(假设现在只有4G的内存)  这道题的解决办法很简单,就是用这个数到这40个数中去找就行了,如果找到

2017-04-04 16:03:40 943

转载 海量数据处理 - 10亿个数中找出最大的10000个数(top K问题)

前两天面试3面学长问我的这个问题(想说TEG的3个面试学长都是好和蔼,希望能完成最后一面,各方面原因造成我无比想去鹅场的心已经按捺不住了),这个问题还是建立最小堆比较好一些。        先拿10000个数建堆,然后一次添加剩余元素,如果大于堆顶的数(10000中最小的),将这个数替换堆顶,并调整结构使之仍然是一个最小堆,这样,遍历完后,堆中的10000个数就是所需的最大的10000个。建堆时间

2017-04-04 15:51:32 879

原创 字符串全排列

#include <iostream>#include <vector>#include <set>#include <algorithm>using namespace std;set<string> res;void fun(string str, int pos) { if (str.length() == pos) { res.insert(str);

2017-04-03 15:55:34 216

空空如也

空空如也

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

TA关注的人

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