- 博客(114)
- 资源 (6)
- 收藏
- 关注
原创 jemalloc疑似内存泄漏分析
最近项目中有使用到jemalloc作为内存分配器,但是使用后发现应用所占用的内存在不断飙高,而且无下降的趋势。经过阅读源码和进行实验逐步发现jemalloc隐藏的使用风险——脏页释放规则。jemalloc简介jemalloc是一款很优秀的内存分配器,按照他们wiki的说法,已经被Redis、Android等多个大型项目采用。从jemalloc在github上的提交记录,jemalloc已经由f...
2019-05-18 15:59:22 3966 4
原创 万能遥控器小制作(五)
1.物联网云平台为了先树立物联网平台通信过程的意识,为之后自己编写物联网云平台提供借鉴,我们该篇教程中使用的物联网云平台是阿里云的物联网套件(现已更名物联网平台)。阿里云收费规则是每月前100万条消息数免费赠送,所以这对于我们个人使用已绰绰有余。如何开启阿里云物联网平台服务以及基础配置可参见产品手册。这里我们使用的协议为MQTT,关于MQTT协议,可参见博主的另一篇科普文MQTT初探。...
2018-08-04 09:55:15 1947 3
原创 万能遥控器小制作(四)
前面的文章中我们已经知道如何获取遥控器的红外编码,以及通过单片机重放红外信号,来遥控空调。但是这样是远远不够的,要想让家电智能起来,我们需要把模块接入一些高级点的系统中,比如树莓派,然后通过Linux系统来控制红外发射。下面我们将介绍如何使用Linux与红外模块交互。1.通信协议的制定就目前而言,模块与外界通信的渠道只有串口可以使用,所以我们决定使用串口与树莓派进行通信。但是只要制定好...
2018-07-03 08:10:25 1655
原创 万能遥控器小制作(三)
在上一篇文章中,我们已经知道遥控器红外的编码基本规范,但是每个键值是什么编码我们还不得而知。其实,每个键值是按照什么规则编码我们并不care,我们只需要将键值记录下重放即可。1.记录键值记录键值很简单,只需要根据文章(二)中的时间统计程序,把信号中每个位的时间记录下,然后根据位的编码规则就可以反推出这个位的含义。下面是我记录下的开空调(制冷26度)和关空调的编码,使用时需要加上起始位与...
2018-07-03 08:09:51 1622
原创 万能遥控器小制作(二)
1.想法我的整体想法是通过红外接收头对遥控器发射的信号波形进行记录,然后使用的时候只要根据记录的数据发射就可以了。现在手头上的模块包括以下三个部分组成。所以,可以通过单片机对接收到的信号进行记录,因为没有示波器,所以整个过程中对信号的分析只能通过串口上传给电脑人工分析了。2.困境在作出想法过后便遇到了困境,那就是单片机资源不足的问题。目前板上的单片机为stc11f02e...
2018-07-03 08:09:19 2118 3
原创 万能遥控器小制作(一)
六月这段时间一直在学车,所谓“学车苦,学车累,司机一滴酒,亲人两行泪”…还好在毕业时分拿到了驾照,感谢苍天。时值夏日,租的房子电价贼贵,不分峰谷电,不敢整夜开空调,但是早上老是会被热醒,作为一名新时代的程序猿:-),决定做一个定时开启空调的小系统,在早上的时候自动打开空调,以解我热醒之急。1.准备材料树莓派 x 1(非必须)安卓手机 x 1 (非必须)红外对管 x 15...
2018-07-03 08:08:17 12782 3
原创 uthash实现分析
uthash简介详见http://troydhanson.github.io/uthash/userguide.html,因为毕业论文中对其作了介绍,为避免查重率上升,这里不再作说明。uthash全部使用了宏对一些函数作了实现。下面对其涉及的数据结构以及增、删、查找与遍历的流程作出介绍。数据结构uthash一共有三个数据类型,分别是UT_hash_handle、UT_has...
2018-04-26 16:31:58 1245
原创 libwebsockets(四)增加ssl支持
libwebsockets增加ssl支持很简单,只需要在创建服务器时增加必要的信息就可以了。关于ssl参见http://www.iotshare.org/archives/121.html一般来说只需要增加以下几行即可 struct lws_context_creation_info info; ... /*证书的路径*/ info.ssl_cert_f...
2018-03-17 14:34:22 5838 7
原创 libwebsockets(三)实现简易websocket服务器
实现websocket服务器本身也是libwebsockets库的初衷,本篇博客将介绍如何利用libwebsockets库来实现一个简单的ws服务器。1、添加websocket协议这里创建服务器句柄的流程与http一致,需要修改的地方只有在创建服务器时传入的协议数组,即 struct lws_context_creation_info info; struct l...
2018-03-08 20:05:43 24353 2
原创 libwebsockets(二)实现简易http服务器
根据官方的说明来看,从2.0版本起,http协议的服务器已经自动集成在库中,不需要我们自己去实现。下面介绍如何使用库去实现http服务器。1、填充服务器创建需要的参数lws_context_creation_info是创建服务器句柄时用来定制服务器信息的结构体,所以我们首先需要填充该结构体。该结构体的定义如下。/*这里只列出我们常用的成员,注释很详细,不做过多解释*/stru...
2018-03-08 20:05:09 12296 1
原创 libwebsockets(一)简介
libwebsockets是一款轻量级用来开发服务器和客户端的C库。按照官方(https://libwebsockets.org/)给出的介绍来看,它不仅支持ws,wss还同时支持http与https,可以轻轻松松结合openssl等库来实现ssl加密。OK,本篇博客将介绍如何下载使用功能这么强大的库。下载git clone https://github.com/warmcat/l...
2018-03-08 20:04:23 27430
原创 I/O多路复用(二)epoll的内核实现简述
本篇主要简述epoll的内核实现,以及结合之前select与poll的实现分析作出它与这两者间的区别。一、epoll简介使用过epoll的同学都知道我们要使用epoll主要使用三个函数,epoll_create,epoll_ctl与epoll_wait。在man手册中给出的epoll使用的例子如下。大致可以分为三个部分:使用epoll_create创建epoll的文件描述...
2018-03-02 13:36:11 585
原创 select的文件描述符集合 : fd_set
在使用select时我们必定会使用到fd_set,那么fd_set究竟是什么呢?一、fd_set的相关介绍在网络编程中,经常用到selec系统调用来判断套接字上是否存在数据可读,或者能否向一个套接字写入数据。其原型为: int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, st...
2018-03-01 16:27:21 3272
原创 I/O多路复用(一)select与poll的内核实现简述
select与poll是比较常用的多路IO复用,在处理高并发情况下使用的更多的是epoll。这篇文章主要介绍select与poll的内核实现,而epoll将在下一次的文章中介绍。一、先谈谈文件操作函数与IO多路复用的驱动实现1、文件操作函数我们知道在linux(unix)系统中,一切皆是文件。而在linux环境编程中,我们要读写或操作一个文件时,我们首先需要通过open...
2018-02-28 12:55:45 433
原创 MQTT Broker Mosquitto(二)数据结构
本文主要介绍一下Mosquitto中用到的比较重要的数据结构,为之后的流程处理讲解奠定基础。为了清晰,结构体展示时只保留重要成员。一、mosquitto_dbstruct mosquitto_db{ /*主题树的根结点*/ struct _mosquitto_subhier subs; /*id:context映射的Hash表首节点,通过该成员去遍历H
2018-02-07 14:29:26 3573
原创 MQTT Broker Mosquitto(一)简介
写这个系列文章其实出发点有很多。一方面是很早之前看到了一个开源物联网云平台项目,叫做iotgo,有兴趣的同学可以去搜索后了解一下。iotgo使用的是node.js语言编写,是一个物理网设备管理的平台。我抽出了十一假期研究了一下它的源码:它使用angular做前端,前端通过websocket实时从后台获取设备信息,所有的设备通过socket与平台通讯。但是这个框架我还是觉得很别扭,可能在我看来一个网
2018-02-07 14:27:26 3586
原创 谈谈嵌入式linux设备启动
本文主要介绍嵌入式linux设备从裸板到加载bootloader,到启动linux内核和文件系统的大致过程。先谈谈单片机的启动接触过硬件知识的同学大概都用过51单片机、stm32等等。但是为什么我们把程序下载进去,然后接通电源程序就可以运行起来?我想这个过程需要我们来思考下。我们在PC上写好程序然后把程序下载到单片机中一般用的是串口,串口只是通俗的说法,在芯片上被称为uart(通用异
2018-01-04 17:35:03 555
原创 新装树莓派raspbian系统无法通过ssh访问
表示手头上的学霸赠的树莓派用的都是好几年前的系统,今天心血来潮给它换个新系统,latest。但是死活却都不能使用ssh进行连接了,一开始以为是sshd服务没有安装(Ubuntu系统确有此坑),看了下server是有安装的。然后又去手动在rc.local中加了自启命令,死活都不行。到官网http://downloads.raspberrypi.org/raspbian/release_notes.tx
2018-01-02 11:15:47 2060
原创 微信跳一跳自动执行代码剖析
感谢学霸提供了这一途径,感谢原作者无私奉献。原作者代码参见https://github.com/wangshub/wechat_jump_game,给作者一个star。手动版的这里不多说,图像识别,坐标计算跳跃,要想得高分会点的手疼。这里主要剖析下自动版的,介于本穷屌丝只有安卓机,这里仅介绍安卓版本。整体的结构脚本的整体结构还是比较简洁的,如下图所示。手机连接PC,PC通过adb命令对手机游戏界
2018-01-01 13:10:55 10621
原创 Typecho使用百度对象存储
百度对象存储前几年的时候用过几次,后来转战用了阿里的对象存储,不过阿里的越来越用不起了,回头看看百度的BOS,那个叫便宜啊。本来想自己动手根据百度的SDK为博客写插件的,在github上搜了搜已经有现成的了,于是拿过来改了改,还是可以用的,这里就不多介绍了。需要修改的地方只有一处,在BosService.php文件里,根据自己BOS区域更改下代码就行了。//北京区域:http://bj.bcebo
2017-11-07 22:22:27 581
原创 BAE部署Typecho的一些修改
表示找了一圈的服务器,从阿里云的学生惠主机到香港的虚拟主机,想了想还是使用BAE吧。和BAE还是挺有缘分的,从上学时它开始内测的时候就开始使用了,后来收费就没再使用了。前几天又去看了,BAE貌似比前几年便宜了,想想自己的博客才开始起步,先安居在BAE好了,毕竟我对服务器性能要求不高,重点是便宜(:зゝ∠)。写在前面前几个月就萌生了搭建一个个人网站的想法,想和传统博客不太一样,我想把一些可以使用小程
2017-11-07 22:20:25 475
转载 Node.js——bower简明入门教程
什么是bowerBower是一个客户端技术的软件包管理器,它可用于搜索、安装和卸载如JavaScript、HTML、CSS之类的网络资源。其他一些建立在Bower基础之上的开发工具,如YeoMan和Grunt,这个会在以后的文章中介绍。准备工作安装node环境:node.js安装Git,bower从远程git仓库获取代码包:git简易指南安装bower
2017-10-06 20:23:12 437
转载 Node.js——utils-merge
Merges the properties from a source object into a destination object.Install$ npm install utils-mergeUsagevar a = { foo: 'bar' } , b = { bar: 'baz' }; merge(a, b);// => { foo: 'bar'
2017-10-04 12:46:55 1506
转载 每个程序员都该知道的 5 个定律
定律-或称法则,可以指导我们并让我们在同伴的错误中学习。这篇文章中,我将介绍我每次设计或实现软件时出现在我脑海的五大定律。其中有些和开发有关,有些和系统组织有关。它们可以帮助你成为合格的软件工程师。作者:Raphael Brugier来源:Linux中国|2017-09-26 13:08定律-或称法则,可以指导我们并让我们在同伴的错误中学习。这篇文章中,
2017-10-01 22:16:56 729
转载 make Image uImage与zImage的区别
文章转载自:http://blog.chinaunix.net/uid-25322094-id-3589796.html内核编译(make)之后会生成两个文件,一个Image,一个zImage,其中Image为内核映像文件,而zImage为内核的一种映像压缩文件,Image大约为4M,而zImage不到2M。那么uImage又是什么的?它是uboot专用的映像文件,它是在zIm
2017-03-31 10:37:28 473
原创 LeetCode——2. Add Two Numbers
You are given two non-empty linked lists representing two non-negative integers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return i
2017-03-22 14:11:16 307
原创 LeetCode——1. Two Sum
Given an array of integers, return indices of the two numbers such that they add up to a specific target.You may assume that each input would have exactly one solution, and you may not use the sam
2017-03-22 14:08:41 261
原创 记一次阿里C/C++研发岗电话面试
明明投的是阿里硬件相关的,但是一个搜索引擎的来面我也是醉醉的。 大致是四个方面:linux基础,C++,操作系统,数据结构。linux基础: 列举熟悉的linux命令?关于系统状态的命令?怎么查看一个目录下文件的总大小?怎么将一个文件中某一字符串替换成另一个?还有linux网络编程的,socket服务端客服端通信过程以及服务端如何处理多个客服端访问。C++:
2017-03-21 13:54:57 10064
原创 华为2017年实习招聘上机题
表示今年华为的上机题是在牛客网上进行的。难度较往年来说降低了几个档次,可能是实习生招聘的要求不是那么高。之前一直在刷华为武研所的OJ,总体而言今年实习生的上机题水平与OJ上的简单题一致。 离上机已经过了差不多半个月了,跟我想象的题目大相径庭,没有dp,没有图。我们这一批考了三道题,一道大数相加,一道模拟题,还有一道字符串处理。下面是我根据回忆还原出的题目,因为具体代码不是太难,这里不再献
2017-03-21 13:47:33 1417
原创 小记——一次DIY电路板的教训
参考了许许多多地资料,辛辛苦苦地画了3周的PCB,每天在实验室从早上画到晚上11点,等到焊接完成的时候却得到了一个类似喜剧的结局,自己的都欲哭无泪... 去年刚入学开始就打算自己制作一款arm的开发板,因为前期在做项目,一直拖到12月下旬才开始有空来实现这个想法。因为是自己来做,所以焊接什么的一切就简,采用的arm芯片是ATSAM9260,atmel公司很多年前的一款arm9系列芯片,表
2017-03-16 09:30:31 4019 3
转载 linux挂载U盘、移动硬盘后无法更改权限
话说最近在树莓派上搭建了一个owncloud,因为树莓派的存储空间有限,就插了个16G的U盘,然后设置成开机自动挂载。这里稍微注意一下的是U盘的格式最好不要NTFS,因为一般情况下NTFS格式的文件系统linux只具有读的权限。就这样奇怪的事情发生了,U盘挂载之后无法对U盘内的文件更改权限,连超级用户也不行。调了一段时间之后才看到如下文章,转载至此,方便今后查阅。 原文地址:让li
2017-03-05 10:25:05 16438 2
原创 dp——求最长公共子串
#include #include using namespace std;#define MAX_DATA 1050char src[MAX_DATA];char dst[MAX_DATA];int dp[MAX_DATA][MAX_DATA];int main(void){ int i , j ; int max = -1 , s_i = 0 , s_j = 0;
2017-03-03 16:24:35 300
原创 排序——归并排序
这边只是自己复习用的,时间有限就没有展开说,需要详细算法解释的请移步http://blog.csdn.net/morewindows/article/details/6678165/ #include using namespace std;#define MAX_NUM 1050int data[MAX_NUM];int ret[MAX_NUM];void swap
2017-03-02 10:44:48 259
原创 排序——堆排序
//堆排序#include using namespace std;#define MAX_NUM 1050int data[MAX_NUM];void swap2(int *a , int *b){ int tmp = *a; *a = *b; *b = tmp;}void adjust(int node , int N){ int start = node
2017-03-01 21:33:31 313
原创 排序——快速排序
来一波快速排序大法~~~#include using namespace std;#define MAX_NUM 100int data[MAX_NUM];int sort(int start ,int end){ int num = data[start]; while(start<end) { while( start num) end--; dat
2017-02-27 22:03:15 250
原创 排序——冒泡排序
#include using namespace std;#define MAX_NUM 100int data[MAX_NUM];//来一个冒泡排序void bubble_sort( int N){ int i , j ; for( i = 0 ; i < N ; i++) { int flag = 1 ; for( j = 0 ; j < N-i ;
2017-02-27 21:42:47 253
原创 排序——希尔排序
以前不是很理解希尔排序,现在才弄清楚,希尔排序是基于直接插入排序的,只不过每次增量不同罢了。 #include using namespace std;#define MAX_NUM 100int data[MAX_NUM];//希尔排序void shell_sort(int d , int N ){ int i = 0 ; for( i = 0 ; i<d;
2017-02-27 21:29:50 300
原创 排序——插入排序
#include using namespace std;#define MAX_NUM 100int data[MAX_NUM];int main(void){ int N ; int i ; #ifdef DEBUG freopen("input.txt" , "r" ,stdin); freopen("output.txt" , "w" , stdout
2017-02-27 20:38:42 208
原创 华为OJ<武研所>——素数伴侣
递归判断即可。素数的地方可能处理的不是很到位。#include #include using namespace std;#define MAX_NUM 150typedef struct{ int num ; int visited;}T ;T data[MAX_NUM];int max = -1;bool is_prime(int num){ int
2017-02-21 10:11:54 835
原创 华为OJ<武研所>——字符串排序
#include #include #include #include #include #include #include using namespace std;#define MAX_NUM 10050vector DATA[26];char ans[MAX_NUM];queueQ;int main(void){ string str ; int i
2017-02-21 09:24:52 351
java求两圆相交坐标
2016-09-28
html+js兼容性很好的留言墙源码
2014-11-12
安卓滑动导航延迟加载fragment
2014-06-29
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人