Eclipse使用技巧集锦

Eclipse使用技巧集锦

Eclipse是应用非常广泛的Java开发工具,几乎垄断了Java开发工具市场。它如此广泛,我们都应用它,但是却可能没有注意到它的一些功能,一些非常棒的设计,所以笔者认为有必要介绍下Eclipse比较特色的功能,总结出一个比较全的使用技巧。如安装插件,代码热替换,任务标记等。

技巧一,添加插件包,Eclipse是个框架,它有很强的扩展性,可以扩展我们Java开发中的常见工具,比如单元测试工具JUnit,版本管理工具SubVersion,以及代码统计,代码质量检查等等工具。那么这些附加工具如何集成到Eclipse里面呢?

安装插件有以下几种方法:

一,在线更新

help - install software,选择后界面如下,网上有很多在线更新的URL,直接拷贝到Work with输入框,然后点击”Add”按钮,这时候会弹出最上面的对话框,随便取个名字,然后点击OK即可,回到上一个界面,点击Finish即完成自动安装。
 onlineupdate

二,直接拷贝插件到Eclipse安装目录下

插件会有两个文件夹,分别为features,plugins,把下载的插件拷贝到eclipse相应的plugins,features下面。重启eclipse就行。

三,通过link文件链接插件到Eclipse.

直接解压后文件包放在电脑的任意位置,在%eclipse_home/links目录下里写一个XXX.link文件,这个link文件指向插件包,link文件的名字可以用插件名字定义,如svn插件叫svn.link,文件里面内容需要安装这样的格式:path=E:\\Program Files\\Genuitec\\Common\\svn1.0.0(这个就是对应的插件包名)

技巧二,远程调试和代码热替换,有个问题很困扰Java的开发人员,我们集成测试的时候,发现一个Bug,修改完这个Bug,要想让修改完的代码生效,需要先打包,然后拷到版本环境中,重启服务器。这个过程很耗时,一些大一点的系统,重启一个服务器往往就需要几分钟的时间,而我们修改一个Bug,往往就是几行代码,甚至一两个变量,但是为了验证这一个小小的改动,却要花费大量的时间来做“体力活”,有什么版本让代码修改完即生效呢?问题的解决版本是远程调试和代码热替换。首先,我们要保证系统中运行的Jar包是我们从Eclipse导出的,如下图:

exportjar

 

只有这样才能保证两边的代码是一致的,可以热替换,有人会说,我用maven编译的难道不一样吗?不一样的,两者的编译参数可能不同,稍微有点不同,Eclipse就认为是不同步,没法热替换。

第二步,通过远程调试链接远程服务器,路径如下图:

remotedebugmenu

而实际的调试界面如下图:

remotedebug

 

技巧三,如何标记任务以便以后完成,Java开发时,往往遇到一个问题,暂时没有好的思路,想放一放,过两天再解决,而过两天后呢?想改这块代码,但是却找不到了,想改改不了了,怎么办呢?解决问题的思路是,使用标记语言标记,标记语言有FIXME,TODO,XXX,其中FIXME标记的含义是,这块代码处理的不完善,需要完善我,TODO的含义是这边有个功能没实现,需要实现;XXX的含义是功能实现了,但是方案值得商榷,可以再优化下。

这个只是初步整理下,后续还会逐步完善。

java字符集问题总结

从事Java开发近10年了,发现有个问题一直如影随形,那就是字符集问题。解析获取过来的中文数据乱码,解析xml文件中的中文乱码等等。真是烦不胜烦。

自己到网上也搜集了一些资料,解决过一些问题,今天将这些已经获取的知识整理一下。

一,   字符集有哪些呢?字符集有很多,分类的话可以从是否支持中文来分,gbk,gb2312,utf-8,utf-16,big5等是支持中文的,但是ascii,iso-8859-1等是不支持中文的。也就是用iso-8859-1编码格式来解析字符串,中文是肯定乱码的。而其他,只要编码和解析用的字符集相同,就没有问题。

二,   现有的系统中的字符集是什么样的?

相信很少有人关心,一个操作系统安装好以后,它支持哪些字符集。实际上中文的操作系统肯定安装了支持中文的字符集的,而纯英文的操作系统也支持中文字符集,因为英文的操作系统一般都支持unicode的编码格式,按照第一条我们知道,unicode字符集是可以用来存储中文的。当然,是要转成unicode编码

三,   Java提供了哪些方法来转换字符集?

Java提供方法包括:

1)      字符串 转换成 字节流,String 的getBytes()和getBytes(String encoding),前者按照操作系统的默认字符集转换,后者按照指定的字符集转换。

2)      字节流转成成字符串 String 的构造函数提供了方法,如new String(byte[] bytes)或者new String(byte[] bytes, String endcoding),前者按照操作系统默认的字符集转成String,后者按照指定的字符集。

3)      IO类中,分为两种,字节方式传输的InputStream,OutputStream和按照字符方式传输的Reader和Writer。这两类IO类,字节方式传输如果都不读取实际可以不用关心。Reader和Writer实际需要关心,否则读取或者写入的是乱码,就不对了。这里面涉及的方法包括:InputStreamReader(Reader reader, String encoding)等不一一列举。

四,   读取XML文件乱码是为什么?

程序中读取XML文件乱码,根本原因在于读取时设定的编码格式不支持中文,需要制定支持中文的编码格式。当然,如果输入流是InputSource,而流中的信息是字符形式的,需要保证传进来的字符流就是正确编码的,因为SAX解析器对字符流是不进行编码转换的。

南京怀孕期间产假工资计算方法

南京地区怀孕期间产假工资是怎么计算的,查了一些资料,应该是生产前一年的所有工资除以12,产假期间按照这个标准发放。下面是社会保险法对于生育保险的规定。

比如你2012年的年总收入是30000,你在2013年生产,那么你产假期间的工资为30000/12=2500

南京产假工资
南京产假工资

【生育保险 待遇】《社会保险法》规定:用人单位已经缴纳生育保险费的,其职工享受生育保险待遇;职工未就业配偶按照国家规定享受生育医疗费用待遇。所需资金从生育保险基金中支付。生育保险待遇包括生育医疗费用和生育津贴。
生育医疗费用包括下列各项:
(一)生育的医疗费用;
(二)计划生育的医疗费用;
(三)法律、法规规定的其他项目费用。
职工有下列情形之一的,可以按照国家规定享受生育津贴:
(一)女职工生育享受产假;
(二)享受计划生育手术休假;
(三)法律、法规规定的其他情形。
生育津贴按照职工所在用人单位上年度职工月平均工资计发。

字节序随笔

最近项目涉及发送消息到前台,涉及不同的硬件平台和操作系统,发现需要考虑字节序的问题。字节序怎么成了问题的呢?什么是字节序呢?

 

简单来说,字节序就是字节在内存中顺序,而不同的处理器,存放字节的顺序习惯不同,呵呵。分为大字节序和小字节序,大字节序讲高位字节存放在内存低处,而低位字节存放在内存高处。小字节序则相反。

 

那么,高位字节是什么样的?低位字节又是什么样的?距离来说12345678这个数字,1是最高位字节,而7是最低位字节。而内存高低怎么来确定呢?一个byte数组,索引低的在内存低处,而索引高的在内存高处。{12,34,56,78}这个byte数组的话,1是内存低处,而7是内存高处。

 

根据以上的介绍,我们可以很容易看出,数字在内存中的存放规则,1234567这个数字,如果是大字节序,存放是:{12,34,56,78},而如果是小字节序,则是{78,56,34,12}

 

实际编码需要考虑不同的字节序,避免数据解析错误。当然,这种错误只有在多字节的数值中才有问题,如int,long,float,double等。单字节的字符不存在这些问题。

 

需要附加说明的是,网络字节序,都是大字节序。

南京市妇幼保健院建大卡的过程与经验,市妇幼地址以及上班时间


南京市妇幼是南京人比较认可的妇幼医院,所以决定在南京市妇幼建立大卡,在市妇幼建立大卡的流程如下:

需要带的东西:医保卡,身份证,小卡资料,结婚证,三维或四维的b超单,现金或银行卡(医保并不能全部报销,有一些要自费的)。

南京市妇幼建立大卡的上班时间:周一至周五,早上8点至12点,下午两点至5点半,周六上午半天

市妇幼的人很多,第一次建大卡需要空腹抽血,如果去得晚的话,可能要拖到11点左右,这样准妈妈会很饿,所以最好是早点去,早上7点半就可以在二楼挂号,挂产科的号。挂好号八点钟之后去五楼产科,先去门口的导医台,等待分配诊室。

第一次建大卡需要检查的项目:血常规,验尿,听胎心,量宫围,白带化验,预约糖耐,还会一次性收掉10次挂号费跟10次检查费,还有39周的一次麻醉检测费用。其中要注意口腔检查,胎儿大学,营养咨询,这三个都是自费的。

南京市妇幼地址:南京莫愁路天妃巷123号;电话:025-52226777(总机)

nanjingshifuyou

 

基于微博的手机app推广

现在微薄的火热程度大家有目共睹,最近整理了几种基于微薄的手机APP推广方法。

微博推广
微博推广

一、           免费方法:

  1. 搜集现有的官方微薄资源,在官方的微薄上发布手机APP消息,重点描述其与其他app相比的优势,在发布时可以利用限时免费,或者推广码等消息增加吸引度。
  2. 建立小号微薄,加以转载,并简单评论,在转发评论时说明此款手机app的特色。
  3. 投稿:微薄上现在有各种专门介绍手机app的帐号,他们的粉丝数还是比较可观的,本身也需要新鲜的手机app资讯,而且粉丝对app应该比较关注,他们会实时发布一些最新的app应用的信息,我们可以编辑好我们的手机app信息,将其投稿给这些微薄。APP每日推送微博 安卓全球汇

二、           收费推广方法:

  1. 微博转发抽奖:新浪微薄现在微活动这样的栏目,可以发起一个大转盘抽奖之类的活动,参与人必须关注我们才能参加,这种推广方式被很多网站尝试。优点是传播快,传播广。但是转播微博的人,往往都是关注于奖品,而忽略了对网站本身的关注。即使为了参加活动,被迫关注了活动发起者的微博,可能在活动结束后,也会取消。
  2. app主题微薄合作:参考免费方法第三点,这些微薄支持投稿,同样可以商谈与他们合作,定期发布手机app应用,给以相应的费用。
  3. 威客方式推广:可以在类似的威克网上发布任务,根据粉丝人数,每转发一次给与相应的金额。现在不少网站在威客网站发布微博评论转发、撰写微博软文等任务来推广。

java线程池技术的历史

总体而言,java线程池技术经历了两个阶段,第一阶段是我们需要自己通过自己写代码来实现线程池技术的,网上有不少现成的资料。总体来说,设计一个线程池包括以下几个类:

1)总体执行类

ThreadPool ,用来创建线程池,这个类还包括一些属性,如下:

a)任务列表

private static List<Task> taskQueue = Collections
.synchronizedList(new LinkedList<Task>());

b)线程池中的所有线程

public PoolWorker[] workers;

提供的方法中,包括构造函数,默认构造默认个数的worker并作为守护线程执行。

Execute方法,执行一个Task。

closePool方法,关闭pool

 

2)执行线程,即PoolWorker,每个PoolWorker都继承自Thread,即没新起一个worker就是一个新线程。Worker的run方法里面,主要工作就是从taskQueue中获取Task,并执行Task的run()方法。

3) 任务Task,一般都是一个实现Runnable接口的实现类。该类的run()方法就是具体要做的事情,你可以用来实现自己的业务逻辑。

以上的实现总体来说有一个缺陷,就是相对来说还是比较死的,线程数一般都是固定的,没有伸缩性。不能安装系统的吞吐量要求来增加或者减少线程。

因为线程池技术如此有用,而自身实现总有这样那样的功能缺陷,从5.0开始,jdk自身提供了线程池技术。比较完美的解决了以上问题,总体来说,主要包括以下几个类:

ExecutorService 线程池接口

ThreadPoolExecutor 线程池接口的默认实现类等,类图如下:

classdiagram

核心类ThreadPoolExecutor:常用构造方法为:
ThreadPoolExecutor(int corePoolSize, int maximumPoolSize,
long keepAliveTime, TimeUnit unit,
BlockingQueue<Runnable> workQueue,
RejectedExecutionHandler handler)
corePoolSize: 线程池维护线程的最少数量
maximumPoolSize:线程池维护线程的最大数量
keepAliveTime: 线程池维护线程所允许的空闲时间
unit: 线程池维护线程所允许的空闲时间的单位
workQueue: 线程池所使用的缓冲队列
handler: 线程池对拒绝任务的处理策略

一个任务通过 execute(Runnable)方法被添加到线程池,任务就是一个 Runnable类型的对象,任务的执行方法就是 Runnable类型对象的run()方法。

当一个任务通过execute(Runnable)方法欲添加到线程池时:

如果此时线程池中的数量小于corePoolSize,即使线程池中的线程都处于空闲状态,也要创建新的线程来处理被添加的任务。
如果此时线程池中的数量等于 corePoolSize,但是缓冲队列 workQueue未满,那么任务被放入缓冲队列。
如果此时线程池中的数量大于corePoolSize,缓冲队列workQueue满,并且线程池中的数量小于maximumPoolSize,建新的线程来处理被添加的任务。
如果此时线程池中的数量大于corePoolSize,缓冲队列workQueue满,并且线程池中的数量等于maximumPoolSize,那么通过 handler所指定的策略来处理此任务。

也就是:处理任务的优先级为:
核心线程corePoolSize、任务队列workQueue、最大线程maximumPoolSize,如果三者都满了,使用handler处理被拒绝的任务。

当线程池中的线程数量大于 corePoolSize时,如果某线程空闲时间超过keepAliveTime,线程将被终止。这样,线程池可以动态的调整池中的线程数。

unit可选的参数为java.util.concurrent.TimeUnit中的几个静态属性:
NANOSECONDS、MICROSECONDS、MILLISECONDS、SECONDS。

workQueue我常用的是:java.util.concurrent.ArrayBlockingQueue

handler有四个选择:
ThreadPoolExecutor.AbortPolicy()
抛出java.util.concurrent.RejectedExecutionException异常
ThreadPoolExecutor.CallerRunsPolicy()
重试添加当前的任务,他会自动重复调用execute()方法
ThreadPoolExecutor.DiscardOldestPolicy()
抛弃旧的任务
ThreadPoolExecutor.DiscardPolicy()
抛弃当前的任务

 

类Executors提供了一系列的工厂方法创建一些常用的线程池,

newSingleThreadExecutor:创建一个单线程的线程池。这个线程池只有一个线程在工作,也就是相当于单线程串行执行所有任务。如果这个唯一的线程因为异常结束,那么会有一个新的线程来替代它。此线程池保证所有任务的执行顺序按照任务的提交顺序执行。

newFixedThreadPool:创建固定大小的线程池。每次提交一个任务就创建一个线程,直到线程达到线程池的最大大小。线程池的大小一旦达到最大值就会保持不变,如果某个线程因为执行异常而结束,那么线程池会补充一个新线程。

newCachedThreadPool:创建一个可缓存的线程池。如果线程池的大小超过了处理任务所需要的线程,那么就会回收部分空闲(60秒不执行任务)的线程,当任务数增加时,此线程池又可以智能的添加新线程来处理任务。此线程池不会对线程池大小做限制,线程池大小完全依赖于操作系统(或者说JVM)能够创建的最大线程大小。

newScheduledThreadPool:创建一个大小无限的线程池。此线程池支持定时以及周期性执行任务的需求。

newSingleThreadExecutor:创建一个单线程的线程池。此线程池支持定时以及周期性执行任务的需求。

 

Ehcache源代码下载

Ehcache源代码下载分为以下几种方式:

一,直接下载或者Maven版本库方式。根据笔者的经验,第1)种方式可能下载不了,建议用后面的方式。

1)      直接下载,直接下载的网址为http://ehcache.org/downloads/catalog

2)      Maven 版本库,网址为:http://oss.sonatype.org/content/repositories/sourceforge-releases/net/sf/ehcache/ 

3)      Maven 快照库,网址为:http://oss.sonatype.org/content/repositories/sourceforge-snapshots/net/sf/ehcache/

 

二,SubVersion版本库下载方式

SubVersion是一个版本控制库,用来管理源代码,建议下载源代码之前先下载SubVersion控制库。下载完以后,通过SubVersion客户端来下载管理源代码。具体来说,分为以下几种情况:

1)  Web方式访问,网址为:http://svn.terracotta.org/svn/ehcache/trunk/

2)  匿名方式检出源代码,url为“$ svn checkout http://svn.terracotta.org/svn/ehcache/trunk ehcache”,这种方式代码修改是没办法提交的。

3)  开发人员检出源代码,url为“$ svn checkout https://svn.terracotta.org/repo/ehcache/trunk ehcache”

4)  如果需要提交代码,用如下命令提交,url为“$ svn commit –username your-username -m “A message””

5)  访问客户端是在企业防火墙后面的,而企业防火墙阻止了http链接,可以采用(3)方法,用开发人员检出方式,因为开发人员检出方式是https协议。

6)  SubVersion客户端可以通过代理访问版本库,只是需要做一些配置。首先,编辑”servers”这个配置文件以明确使用哪个代理。这个文件不同的操作系统的位置不同,LINUX和UNIX操作系统的位置是”~/.subversion”,WINDOW操作系统的位置是 “%APPDATA%\Subversion”(注意这是一个隐藏文件)。

这个文件有描述信息告诉你如何配置,如果没有这个文件,用subversion客户端随便执行一个命令,就会自动生成这个文件。

例子:可以如下方式配置文件:

[global]
http-proxy-host = your.proxy.name
http-proxy-port = 3128

 

移动APP如何推广

移动APP目前无疑是一块大蛋糕,很多人都想进军并占领这块市场,开发一个App对于目前的一些IT公司,甚至工作室过个人来说并非难事,难得是如何去推广移动APP,有哪些方法和渠道。

一、应用市场推荐

目前应用市场推荐是目前最高效,快捷推出APP的方法,因为应用市场是目标人群高度集中的区域。之前的研究文档中有提到一些基于安卓平台的应用市场,包括安卓市场的主要组成部分,排名因素,以及目前市面上的几大应用平台。对于应用市场,主要可以考虑几个推广方法.

  1. 自然排名,就是通过应用市场一定的排名规则,适应其规律,使应用自然排名在前位。参考了网上的一些资料,在APPstore上,冲榜单秘诀就是——刷评价。尤其在每次发布新版本的前3天,努力制造更多的好评数,冲榜有奇效。冲上该分类排名第一页之后,是否能保持排名就看真功夫了。版本更新4-5天后,好评的加权效果消失,如果真实下载与好评数提不上来,排名就会掉下去。
  2. 付费推荐,这个主要是在各个安卓应用市场,可以与其谈付费推荐,累计到一定的下载量与好评度之后再依靠自然排名。
  3. 付费广告,也就是app嵌入式广告,通过第三方商店就是买广告位、买推荐位。付费购买应用市场的广告,包括一些常规Banner,如首页顶部,底部等。

二、增加曝光度

  1. 推高官网访问量,官网有更大的篇幅与感染力来介绍产品的创新价值。在官网为推广的APP打造一个专页,要有吸引力,借助公司原有的资源,为新产品推广。
  2. 增加媒体曝光度,包括软文与视频。可与媒体合作,制作一些软文或有趣味的视频,发布在各大网站中。视频营销现在也是一种很受欢迎的手段,目前在微薄和人人网中,趣味视频被大量的用户主动推荐分享。
  3. APP本身具备口碑传播的气场,够酷,够潮,体验绝佳。用户的主动推荐。这个效果是最好的,目前海量的APP中,我们要有自己的特色与良好的用户体验,这样才能更好的吸引用户。yidongapp

三、社会化营销

  1. 话题营销,可在论坛或社交网站发起一些有意思的话题或活动。例如,前段时间复活节前,必胜客在人人网发布了“原地满状态复活活动”,邀请用户在其活动日志下面以标准格式“我要××原地满状态复活”进行回复,回复的用户即有机会获得100的代金券。该活动每个用户的回复都出现在其好友的新鲜事列表中,活动日志被12000余人次参与该活动,而必胜客为此活动付出的仅仅是1200的代金券,比起传统渠道,具有更大的收益成本。
  2. 微薄推广,目前微薄非常的火热。基于微博也有很多推广方法,在微博中有专门的推送渠道。想在微博论坛推广的话,除了自身产品的用户体验,如果产品自身有社交性质,会比较好推。
  3. 博客,博主是意见领袖是达人,拥有一定的忠实粉丝。跟村长似的,村长说话村民还都是挺相信的。只是相信的是哪句话就得看村长说得如何,村民选择听的内容。
  4. 论坛推荐、置顶,特别是国内一些大的安卓应用平台都是有自身的论坛,这些论坛的目标人群也很集中,可以与其合作,将APP的软文或者评测的帖子置顶推荐。
  5. 应用与社交网站连接,设置分享接口,吸引用户将APP生成的内容推送至社交网络。

四、移动广告联盟

手机广告有着更高的精准度,目前全球最大的移动广告平台是Google的Admob, 还有最近又刚和国内的木瓜移动达成了合作伙伴关系的Tapjoy移动广告平台等。

五、其他的一些非主流方法

1.  应用预装,主要是跟国内的手机生产厂家合作,在手机出厂时就预装我们的APP应用。实施起来比较困难,而且可能会引起用户的反感。

2.  刷机,请别人在刷机的时候把APP预置进去,刷一台几分钱。

 

南京集体户口如何转到江宁

大学毕业之后户口就由毕业时的第一家单位挂靠在南京市人才的集体户口,将集体户口转移到江宁流程和需要的材料有:

身份证原件和复印件

常住人口登记表原件和复印件

购房合同中1,2和签名页复印件

夫妻双方的劳动合同,如果只有一方在上班的话,江宁区会要求提供收入证明,所以如果只有老公或者老婆在上班的话,别忘了让单位开一个收入证明。

房产证原件和复印件

土地证原件和复印件

最后,还需要夫妻双方填写书面申请书,对于申请书,其实是有不同的场景,绝大部分的场景是购房迁入户口,那么申请书的格式可以这样写:

落户申请

××公安局××派出所:

我叫×××,××年×月×日出生,户口在×××,非农业户口,自

20××年

××××××。根据户口迁移政策相关规定,现申请将户口转入×××。

望批准为盼!

申请人:×××

注意,如果是夫妻双方,都需要写,去派出所办理时,如果有一方没有到现场,还需要写一份委托书,大概格式如下:

授 权 委 托 书
委托人: 性别: 身份证号:
被委托人: 性别: 身份证号:
本人工作繁忙,不能亲自办理
的相关手续,特委托 ____________作为我的合法代理人,全权代表我办理相关事项, 对委托人在办理上述事项过程中所签署的有关文件,我均予以认可,并承担相应的法律责任.
委 托 期 限:
委 托 人:
年 月 日