`
文章列表
引言 你是否遇到过两个(多个)系统间需要通过定时任务来同步某些数据?你是否在为异构系统的不同进程间相互调用、通讯的问题而苦恼、挣扎?如果是,那么恭喜你,消息服务让你可以很轻松地解决这些问题。消息服务擅长于解决多系统、异构系统间的数据交换(消息通知/通讯)问题,你也可以把它用于系统间服务的相互调用(RPC)。本文将要介绍的RabbitMQ就是当前最主流的消息中间件之一。 RabbitMQ简介 AMQP,即Advanced Message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。消息中间件主要用于组件之间的解耦,消息的发送者无 ...
    本文不介绍AMQP和RabbitMQ的基础知识,请参考链接: http://tracywen.iteye.com/blog/2183604 ,介绍的非常详细。     本文主要通过一个小的demo,来举例说明如何使用spring-rabbit插件来实现RabbitMQ消息的发送和接收,发送端称为生产者,接收端称为消费者。     1. 给pom.xml文件中添加rabbitmq相关依赖 <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncod ...
    Google Protocol Buffer( 简称 Protobuf) 是 Google 公司内部的混合语言数据标准,是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,或者说序列化。它很适合做数据存储或 RPC 数据交换格式。可用于通讯协议、数据存储等领域的语言无关、平台无关、可扩展的序列化结构数据格式。目前提供了 C++、Java、Python 三种语言的 API。 使用步骤:   1.下载附件中的protobuf-2.5.0.rar     解压后有两个文件:protobuf-java-2.5.0.jar和protoc.exe。     proto ...
一、设置浏览器缓存的四种方法   1、Last Modiefied:请求页面A,服务器会返回给浏览器页面A,并且加上一个lastmodified的标识表示最后的修改时间,那再次返回的时候,浏览器会通过if -modifiedsince询问在这个最后的修改时间之后是否修改过这个文件,然后服务器进行对比,最后服务器检查两个值的时间是否一致,如果一致,返回304缓存,不一致200。 2、Etag:与Last-Modiedied功能一致,Etag的出现弥补了Last-Modiedied的不足; 只能精确到秒:如果某些文件在1秒钟以内,被修改多次的话,它将不能准确标注文件的修改时间。 内容定 ...

用nexus搭建maven私服

 
首先介绍一下背景,公司访问外网有限制,项目组大部分人员不能访问maven的central repository,因此在局域网里找一台有外网权限的机器,搭建nexus私服,然后开发人员连到这台私服上 环境是:nexus-2.1.1、maven-3.0.4、jdk-1.6.0_32 一、用admin用户登陆nexus nexus的下载和安装都很简单,网上也有很多介绍,本文就不重复了。主要介绍一下安装之后的配置 nexus的配置需要用admin角色完成,默认的密码是admin123,进入nexus首页之后,点击右上角,进行登录        然后就可以在左边的菜单中进行配置了    ...
        几个去 IBM 面试的兄弟回来抱怨:去了好几个不同的 IBM 项目组,几乎每个面试官问到数据库的时候都要问用没用过存储过程,烦人不?大家去面的程序员,又不是 DBA,以前的项目都没有用到存储,不照样运行的好好的 ...
所需工具及步骤,工具下载见附件apktool:    1.将APK放置到APKTool目录下,并改名为123.apk;    2.打开APKTool,选择1进行反编译操作完成后会生成一个apk文件夹;    3.使用后可成功查看xml文件、及图片,但java代码的后缀名为.smali,无法查看源码;dex2jar:    1.将.apk的后缀名改为.rar,解压后得到classes.dex文件;    2.将该文件复制到dex2.jar文件夹下;    3.在cmd中运行dex2jar.bat classes.dex,生成classes_dex2jar.jar文件,即转换后的jar文 ...
1.交换排序 交换排序的基本思想是:两两比较待排序记录,发现两个记录的次序相反时即进行交换,直到没有反序的记录为止。 应用交换排序的方法有:冒泡排序,快速排序。 冒泡排序:         最好时间复杂度为:o(n)         最坏时间复杂度为:o(n2)         平均时间复杂度为:o(n2)         稳定性:就地排序,且是稳定的 /** * 冒泡排序 * 特征:第一次外循环得到最大(小)的值,第二次外循环得到次大(小)的值....... * 若在某一趟排序中未发现气泡位置的交换,则说明已排好序,因此可终止循环继续向下执行。 * 引入布尔型变量exchange, ...
  Activity生命周期的基本内容我就不多说了,网上一搜一大把,官方文档也说得很详细。总之,我们知道Activity从创建到销毁有多种状态,从一种状态到另一种状态时会激发相应的回调方法,这些回调方法包括:   onCreate 、onStart 、onResume 、onPause 、onStop 、onDestroy 、onRestart   以图片的形式去记忆:            不难看出,其实这些方法都是两两对应的,onCreate创建与onDestroy销毁;onStart可见与onStop不可见;onResume可编辑(即焦点)与onPause;这6个方法是相对应的,那么就 ...
项目需要,在socket编程中发送指令的线程应该实现复用,而不是每次点击一次操作就新建一次线程(貌似重复创建线程比较耗资源),因为socket的写操作不是阻塞方法,所以必须用一个死循环来保证线程不被结束,想到利用线程的等待与唤醒模拟阻塞方法的效果。即用户发送指令的时候首先唤醒线程,执行完后就进入等待状态,如此往复。 线程类使用单例模式,使得该线程对象在整个项目中使用同一个对象,即在不同的Activity中都使用同一个线程,实现线程的复用。 经测试该代码可正确实现以上功能 代码: 第一个Activity package wlx.test.thread; import wlx.test ...
总结: /* 1.自定义异常: class 异常类名 extends Exception { public 异常类名(String msg) { super(msg); } } 2.标识可能抛出的异常: throws 异常类名1,异常类名2 3.捕获异常: try{} catch(异常类名 y){} catch(异常类名 y){} 4.方法解释 getMessage() //输出异常的信息 printStackTrace() //输出导致异常更为详细的信息 */ ...
注:对象需要实现Parcelable接口,并且重写三个方法 1.实体类:Device.java package wlx.test; import android.os.Parcel; import android.os.Parcelable; /** * 注意写入和读出顺序要一致!!! * @author Tracy.Lee * */ public class Device implements Parcelable { private String location; private String name; public Device() { ...
Global site tag (gtag.js) - Google Analytics