自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(42)
  • 收藏
  • 关注

转载 写给java web一年左右工作经验的人

转自:https://my.oschina.net/aaron74/blog/282304摘要: 大学就开始学习web,磕磕绊绊一路走过来,当中得到过开源社区很多的帮助,总结了这些年来的技术积累,回馈给开源社区。 ps:图片都是从网上盗。。。感谢原作者。 ps:文字千真万确都是我自己写的。 在此,特别感谢Hansen,他曾经有私的帮助过我(两包零食),他是一个很强的启蒙胖子。 

2016-12-30 10:47:07 12258 2

原创 基于MQTT的消息推送

这段时间学习了推送技术,对xmpp和mqtt 协议做了下比较。xmpp基于xml信息传递,所以传输信息量比较大,在保持长链接情况下功耗会比较大。可能还是比较适合用来做聊天之类的通讯应用,而对于智能和物联低功耗设备的推送来说,感觉比较笨重。而mqtt协议就是针对网络带宽低,高延时,通信不稳定的环境设计的,特别适合物联设备。低通讯量连接保持,简约轻便。提供了发布/订阅模式,只要

2016-12-09 11:45:17 9665

原创 用Jmeter工具对服务器做压力测试

1. 下面Jmeter    http://mirrors.hust.edu.cn/apache//jmeter/binaries/apache-jmeter-3.1.zip2. 进入apache-jmeter-3.1\apache-jmeter-3.1\bin 目录下    运行jmeter.bat,分别添加线程组,http请求,察看观察树,响应断言,断言结果

2016-11-30 12:29:10 5132

原创 OTA服务器和android客户端添加HTTPS协议

有段时间没总结了,这期间主要学习三个问题:一是https协议,OTA HTTPS 协议可以工作了。二是消息推送,推送用的是openfire+asmack方案,目前只能给所有用户广播消息,如果针对不同项目用户,服务器端还需要单独开发插件支持,这个后面继续研究。三是服务器并发压力测试,测试工具用的是jmeter,个人觉得这个工具还是很强大的,可以同时模拟成千上万的用户同时访问服务器。

2016-11-30 12:15:10 3883

转载 android Service和Thread的区别

转自: http://www.cnblogs.com/perfy/p/3820502.html1.服务不是单一的进程。服务没有自己的进程,应用程序可以不同,服务运行在相同的进程中。2.服务不是线程。可以在线程中工作。一.在应用中,如果是长时间的在后台运行,而且不需要交互的情况下,使用服务。同样是在后台运行,不需要交互的情况下,如果只是完成某个任务

2016-11-15 18:30:09 467

转载 堆排序的讲解和实现

转自:http://www.2cto.com/kf/201308/239791.html堆排序: 特点        堆排序(HeapSort)是一树形选择排序。堆排序的特点是:在排序过程中,将R[l..n]看成是一棵完全二叉树的顺序存储结构, 利用完全二叉树中双亲结点和孩子结点之间的内在关系(参见二叉树的顺序存储结构),在当前无序区中选择关键字最大(或最小)的记录

2016-11-06 20:51:21 437

原创 在华为云服务器上搭建OTA服务器之thinkphp5

因为用的云服务器是ubuntu裸机,所以软件都需要自己安装。这个过程遇到很多问题花费了好多时间,也好,就当学习了。1. FTP上传失败问题???    前面通过ftp客户端已经可以连上云服务器了,但是上传文件失败!!!    最后发现居然是云服务器ftp 主目录是用root 权限创建的,所以用ftp的用户名从ftp客户端连接当然就无法上传了。    哎,到处是陷阱,细心

2016-11-03 14:29:22 1332

原创 【算法】分治法之归并排序实现

所谓分治:分而治之,中华民族智慧的结晶。对其联盟,使其分裂而利于各个击破;对其国使用,使其国分裂而利于控制;对其公司使用,使其公司分裂而利于控制;对其团队使用,使其团队分裂而利于控制。可见,分治法被运用于当今社会的方方面面。既然分治法拥有那么大能量,有必要学习学习它。当然了,这里学习分治是用来如何解决问题的。面对一个大问题,如果直接去解决,可能很复杂,不好解决。所以要把大的问题分解

2016-11-03 12:17:17 2525

转载 关系数据库的几种范式(1NF,2NF,3NF,BCNF)

关系数据库的范式就是设计关系数据表的一种规范,不同范式代表的不同的规范等级。达到的等级越高,设计出的数据库表就越合理,问题越少。否则就会出现重复数据(数据冗余),插入、删除、修改等异常。要理解关系数据库的范式,首先需要弄清楚几个概念。1. 什么是码2. 什么是主属性和非主属性3. 什么函数依赖和部分函数依赖,设计时得明辨出依赖关系。下面是知乎上一位老师给的解释,本人

2016-11-02 10:33:36 7007

原创 在华为云服务器上搭建OTA服务器之安装apache 与ftp

之前写了OTA服务端和客户端代码,在本地局域网用wamp测试过,想放到公网上去测试下。于是想到用云服务器,找来找去发现还是华为的实惠,1元体验15天,还是2G内存,对本人测试来说已经足够了。由于本人在服务器这块确实是无知,所以这个安装过程很是坎坷,折腾了好长一段时间终于可以外网连上服务器。这个过程特别感谢华为客服的耐心帮助。下面按照本人记忆中的印象记录下安装过程和问题解决。

2016-11-01 17:46:02 4223

原创 设计模式之Iterator(迭代器)的设计和使用

目的:提供一种方法顺序访问或者遍历一个聚合对象中的各个元素,且不希望暴露该对象的内部结构。一、设计1. 因为是聚合对象,所以设计的这个类应该使用类似list这样的结构体存储聚合对象;2.迭代器应该是通用的,适用于各种类型的聚合对象,所以设计的类应该是模板类型;3.还需要对外提供统一的访问接口,以及获取当前元素,递增到下一个元素,判断是否末尾元素。 interface

2016-11-01 11:46:47 1112

转载 设计模式之桥接模式

转自:http://www.cnblogs.com/houleixx/archive/2008/02/23/1078877.html  作者:侯垒学习设计模式也有一段时间了,今天就把我整理的一篇课程和大家分享,有不妥之处欢迎指出. 生活中的一个例子:    就拿汽车在路上行驶的来说。即有小汽车又有公共汽车,它们都不但能在市区中的公路上行驶,也能在高速公路上行驶。这你会发现,对于交通工具

2016-10-31 12:09:59 303

原创 设计模式之单实例

1. 如何实现一个单实例2. 单实例是否可以继承3. 和静态类有什么区别一、单实例  即保证一个类只有一个实例,并提供一个全局访问点。  因为可能有多个线程访问该实例,所以需要考虑线程同步。  因为是单实例,那么就是只有一个对象状态,那么构造函数应该是私有的,从单实例设计目的来说,就应该设计成不可继承的,即一个final类。  拿android上面的代码作为一个

2016-10-31 11:27:06 225

原创 设计模式之Builder

Builder 模式的目的是将一个复杂对象的构建与它的表示分离,用同样的构建过程可以创建不同的表示。什么情况下可以使用Builder模式:1. 当创建复杂对象的算法应该独立于该对象的组成部分。2.  当同样的构建过程允许被不同的对象有不同的表示时。这种模式在android 中也大量使用,基本都是作为内部类使用。比如创建通知: Notification.

2016-10-30 21:44:07 340

转载 设计模式之简单工厂、工厂方法和抽象工厂

转自:http://zyjustin9.iteye.com/blog/2094960简单工厂,工厂方法,抽象工厂都属于设计模式中的创建型模式。其主要功能都是帮助我们把对象的实例化部分抽取了出来,优化了系统的架构,并且增强了系统的扩展性。本文是本人对这三种模式学习后的一个小结以及对他们之间的区别的理解。 简单工厂简单工厂模式的工厂类一般是使用静态方法,通过

2016-10-30 21:02:15 253

原创 Thinkphp5 数据分页显示

使用Thinkphp5实现分析很是简便。具体请参考官方文档:   http://www.kancloud.cn/manual/thinkphp5/1542941.  使用Query.php的paginate 接口获取数据内容,通过render接口获取渲染内容thinkphp/library/think/db/Query.phpthinkphp/library/think/pag

2016-10-25 15:21:44 16514

原创 Android OTA应用访问Thinkphp5 服务器

从学习服务器端Thinkphp5 到现在已有半个月,目前为止,尝试做的OTA后台服务器已经可以运行,手机端的OTA应用也可以通过服务器下载升级包并完成升级。这期间还是能学习到不少东西的,比如php、html、js、数据库、网络等,实践证明多动手才能发现问题,才能发现不足。多学习才能发现自己的无知,才体会到知识的浩瀚无穷和力量。服务器做好了,如何访问服务器呢?1. 可以通过H

2016-10-25 11:12:19 826

原创 Thinkphp5 多条件查询和聚合查询

方法一:把查询条件放到数组里作为where函数参数,但是如果有大于等于条件参数,数组里是无法赋值的。例1: $where=array( "version_name"=>$version_name, "project_name"=>$project_name ); $userdata=$this

2016-10-25 10:41:22 18227

原创 Thinkphp5 联合(关联)查询

按照官方手册http://www.kancloud.cn/manual/thinkphp5/142357  折腾了很久还是无法实现,可能还是我理解的不对,最后使用了如下方式:1. 项目表DROP TABLE IF EXISTS `darling_project`;CREATE TABLE `darling_project` (  `project_id` int(32) N

2016-10-21 16:48:23 12078

原创 ThinkPHP5 查询数据并处理结果

在处理数据库查询结果时遇到了些问题,记录下用到过的几种查询方式和结果处理。1. 查询某条记录 $where=array( "version_id"=>$version_id ); $data = model("PackageWhitelist")->where($where)->find(); $this->assign("package_id",$packa

2016-10-21 10:21:05 14966

原创 MYSQL 触发器

触发器能同步更新数据,即一张表的更新、删除、插入等操作能自动触发该表或者其它表数据的更新删除同步。这点就很有优势,有了触发器我们就不需要再在代码里面实现数据表同步,而让数据库自动完成。举例如下:1. 创建OTA升级包表如下DROP TABLE IF EXISTS `darling_package`;CREATE TABLE `darling_package` (  `pac

2016-10-21 10:05:03 266

原创 Thinkphp5 表单提交额外参数和页面跳转参数传递

1. 表单提交在控制器中获取$project_name=input("post.project_name");2. php中跳转$this->success('新增项目成功',url("Version/index",array('project_name'=>$project_name)));die;

2016-10-20 10:53:42 13218

原创 Thinkphp5 log打印

需要加载log类   use think\Log;方法1:就是不知道如何用它打印变量,结果输出到runtime\log 目录下  Log::info('查看是否存在记录cookie');方法2:这个可以打印变量,结果输出到runtime\log 目录下  Log::record('savename ' . var_export($savename, true), 'info')

2016-10-19 14:38:55 14044

原创 Thinkphp5+uploadify 文件上传实现

初次接触服务器端开发,边学习边试着做一个OTA后台服务器,费了好大劲才实现了文件上传和进度条显示。遇到几个问题:1. 大文件上传失败2.上传取消X 符合显示不出来3. 不知道如何传递变量值给后台php记录下过程。1. 下载uploadify 代码到工程里,如public\plug-ins\uploadify 下。2. 前端脚本如下,    客户端在formD

2016-10-19 14:30:06 7425 3

转载 MYSQL 控制台命令

导入导出sql文件,查看数据库,查看表等命令。

2016-10-10 16:13:59 12300

原创 Android 输入事件系统之 EventHub 和 Input Lib(事件解析库)

从 Android 事件输入系统整体框架 一文可知Input Libs是一个事件解析库,完成事件解析、keycode转换,设备配置信息加载。EventHub  枚举当前系统设备,根据不同的输入设备通过Input lib 解析库加载不同的配置;提供接口从事件设备节点读取事件,并调用Input Lib库对事件进行解析。

2016-09-22 16:33:08 2340

转载 关于C++ 里struct 和 class的区别

在分析android EventHub类时发现内嵌入一个Device结构体,在使用上和class类似。虽然之前认为struct和class类似,但是不知道能当成class一样使用,哎,C++ 语言基础的东西都不会。下面这篇博文写得不错。博客原文地址:http://blog.sina.com.cn/s/blog_673ab5410100zzlf.html有很多人在学习C++的时候只是

2016-09-22 10:27:29 3903

原创 Android 事件输入系统整体框架

一、 整体框架图1.  ViewRootImpl 每个窗口都对应一个viewRoot,通过viewRoot把view 添加到WM WindowState 列表里,之后WM就可以维护每个窗口的状态。     native层上报的事件消息和刷屏会先到达ViewRoot。对于刷屏事件,ViewRoot 会对view执行layout和measure动作。对于key或者触屏事件,ViewRo

2016-09-21 11:30:08 367

原创 Android 事件输入系统分析计划

工作中时常遇到和事件输入相关的问题,比如:1. 按键无响应问题2. 触屏无响应问题3. 触屏跳点问题4.自己定义事件问题,比如SIM卡插拔事件5. android服务里能接受到事件吗,曾经有人问过我这样的问题。.....等等类似事件相关问题,所以如果熟悉整个输入系统工作机制,那么对解决这么问题将会事半功倍。事件输入系统涉及kernel、native、fram

2016-09-20 12:31:50 221

原创 Android native调用分析(JNI)

1. 为什么需要native?2. java层(或者说dalvik)如何识别native函数?3. java层到native的调用是如何实现的?4. java和native工作在同一进程吗?5. native 受dalvik管理吗?带着这些问题,接下来逐步去分析总结,相信是会有收获的。一、为什么需要native。       1.  不可反编译。na

2016-09-09 11:19:18 3252

原创 对Android 平台下SElinux的理解及遇到过的相关问题解决方法总结

笔者在工作中多次遇到和SELinux相关的问题,初次遇到时一头雾水,走了很多弯路,也耗费了很多时间精力。后来看了不少资料和博客,也研究了相关代码,对SELinux有了些认识。所以用本文来做个总结,加深理解。本文将从下面五个方面来逐步认识和理解Android 下SELinux。什么是SELinux为什么需要SELinuxSElinux 工作原理android 上的实现曾经遇到过的问题

2016-09-06 17:01:18 15303

原创 Android OTA升级的补救措施

问题场景如下:       产品已经上市,由于销量太好了,某个硬件连二供都供应不上,没办法,只能用三供的硬件,但是之前量产版本的软件(软件A)不支持三供的硬件,所以为兼容三供硬件,需要出软件B,软件A和软件B版本号一样(为了使所有用户在表面上看拿到都是了一样的产品)。但是使用的三方OTA升级软件是通过软件版本号去区分版本的,现在软件A和软件B版本号一样,那么以后如果需要出售后版本C,如何使得软

2016-09-01 18:03:38 1417

原创 队列实现

栈是后进先出的,一般用在符号匹配,回溯,中断返回队列是先进先出,使用场景很多,一般性的排队问题,缓冲区问题,生产者消费者问题。觉得队列应该都是循环的,否则没有多大实际意义。如下使用顺序存储结构实现循环队列,类似一个缓冲区。要点:1. 队列满条件2. 队列空条件3. gcc编译需要加-lpthread      (gcc test.c -lpthread)#include

2016-08-09 16:25:22 276

原创 尝试写的一个android象棋游戏,还未加入博弈功能

偶尔下下象棋,棋艺比较烂,常常败于电脑,敬佩那些开发象棋算法之余,也想了解了解这象棋算法的原理。所以在业余时间一边写写象棋游戏代码,一边研究研究象棋算法。目前完成了界面,事件响应,棋子走法规则匹配,也就是基本实现了本地的人人对弈,人机对弈还没有实现。先做个阶段性的记录和总结备份,以后有时间研究透了再加上博弈算法。       几个要点总结如下:      1. 设计好总

2016-08-09 13:17:37 482

原创 栈的链表实现

栈的原理是后进先出,看懂未必能真正理解,理解了未必能写出来,写出来的未必能运行,所以动手写写还是有必要的。写完修改了好一会才运行起来。一是 结构体的2种定义方式搞不清了。二是 指针的使用三是  malloc一个结构体,和 java 搞混了 ,居然写成newstruct StackNode{ int data; struct StackNode *

2016-08-09 12:19:41 272

原创 Android 数字签名

按照自己的理解,写下总结。1.  数字证书     正常是由数字证书管理心发给个人或者组织的证书,相当于身份证,用来唯一识别一个发送者,这点在通过网络签署合同时很重要,避免对方抵赖合同不是他发送的。但是android 上证书是自己生成的,因为不管是谁开发的应用,默认都是允许安装的。2. 数字签名   数字签名是用来确认发送者身份和发送信息完整性的。发送者将把原始数据摘要信息用私有进

2016-07-18 17:12:24 835

原创 多进程下的单实例和全局变量

曾经对单实例和全局变量有过很深的误解,而且发现有即使是工作几年的童鞋依然理解得不对,总以为单实例和全局变量是针对整个系统的,所以遇到在一个应用(相当于进程)里面修改了一个全局变量的值,但是发现在另外一个地方(另外一个进程)去访问得到的值总是不对。而且打log跟踪也发现代码确实已经走到修改的地方了,变量值改了,为什么得到的值还是不对呢,一头雾水。       比如有的人在android fram

2016-07-13 16:43:09 4595 1

原创 android5.1 AsyncTask 启动慢

在一个低性能平台上遇到一个进入恢复出厂设置慢问题,有时候会卡住几十秒。跟踪发现进入恢复出厂设置是会先在AsyncTask 对persistent 分区做格式化,慢就是因为AsyncTask 启动慢。调查发现AsyncTask 启动慢的原因有二:1. 系统默认的AsyncTask 是基于一个顺序执行的线程池,所以如果线程池里的别的线程正在运行,那么当前AsyncTask 就无法得到及时执

2016-07-01 11:52:55 466

原创 android 影响开机速度因素

1.EMMC 读写性能2.去掉不必要的服务3.第一次开机不启动fstrim,文件系统刚创建的,有必要执行fstrim??4. 编译应用odex化5. 开机时CPU是否跑在最高频率6. 启动代码里不必要的循环排序

2016-07-01 10:38:36 577

原创 Android外部应用获取SD卡状态

像是从android4.0以后,外部应用就无法通过android标准接口获取到SD卡状态,但是可以通过如下方法获取:1. 通过env 获取SD卡路径 String externalStorage = System.getenv("SECONDARY_STORAGE");​​2. 通过读取mounts节点获取SD卡挂载状态private boolean isSdcardMounted

2016-07-01 10:35:53 419

空空如也

空空如也

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

TA关注的人

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