坚信科学,分享技术

2018全新版本,未来在blog.54chen.com更新博客!

>>>尝试更加利于阅读的2014版科学院,以后都在新版上写。

Category Archives: java

这里有原创java教程,都是来自工作中的积累,有时候有些些弱。

ubuntu10.04 下通过usb在G7(desire)上真机调试android程序的设置

本文为android开发入门系列,以下是各节传送门: android 开发入门 http://www.54chen.com/_linux_/androiddev.html android开发入门2:概念建立 http://www.54chen.com/_linux_/androiddev2.html 一、工具介绍 android-sdk-linux_x86/tools下有一堆工具,今天要用的是:Android Debug Bridge,在android开发过程中,这个工具是使用得最多的。(缩写adb,有点像gcc的gdb似的) adb start-server - 实际上它会启动一个 adb fork-server server adb kill-server - kill掉 adb devices - 列出所有的设备 二、设置usb权限 因为ubuntu这样的系统都是默认以非root身份在运行的,要使用usb调试,需要sudo支持。 $ lsusb Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub …

Continue reading

Posted in java | Leave a comment

[java example]你还在使用while(true) Thread.sleep吗?

做各种SERVICE的时候,常常会需要一个程序重复定时地执行,基本上常见的山寨写法都是如下所示: while (true) { System.out.println("yours code"); Thread.sleep(3000); } 但实际这样的写法可控性很低,JDK的java.util.concurrent中提供了大量的方法去控制一段代码定时执行,标准的改写上面的代码如下: ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1); scheduler.scheduleWithFixedDelay(new Runner(), 0, 3, TimeUnit.SECONDS); public class Runner implements Runnable { public void run() { System.out.println("yours code"); } } scheduler下有很多的方法,达到的目的有:定时执行,执行完后一段时间再次执行;而Executors更有更多控制线程的方法,平时不可忽视。

Continue reading

Posted in java | Tagged | Leave a comment

android开发入门2:概念建立

上一记传送门:android开发入门 在第一记中,我(54chen)完成了一个完整的android开发环境,并且简单开发了一个Hello world android程序,在有了一个大概的开发过程的感觉之后,再进一步来学习android开发过程中需要接触到的常识。 android开发表皮几大块 1)extends Activity的Activity类很是奇异,其实这很像是mvc框架中的controller,继承Activity实现的类,它控制了所有的业务逻辑。 2)打开项目的文件夹,你会发现有许多的xml,其中,比较关键的一个是main.xml(layout目录下),它相当于mvc框架中的view,负责了软件界面哪个位置摆放一个什么样的控件,当然了,这些控件都是系统本身的,你可以想像成是html标签里的那些控件一样。 3)values目录下有settings.xml,是定义了一些字符串、颜色、数组等常量数据,有点像普通java项目里的属性文件(properties文件) 走进android项目中的layout/main.xml 开发android项目和开发web项目有几分神似,在main.xml里(也可能是xx.xml哦,main.xml是默认的第一个,在java代码里,会用R.layout.main来表示man.xml),包括了各种各样的基础控件(它们都是大小写敏感的,如果在xml里写错了,那一定会在运行过程中出现空指针错误),就像是web项目的前端一样,不过其复杂程度自然要比写html复杂。可能大部分入门android的时间都会花在这里。 <TextView and

Continue reading

Posted in java | Tagged | 9 Comments

android 开发入门

最近我(54chen)的兴趣都在android上,看到做的软件放到手持设备上的时候,找到了大学时光写delphi、gnome程序时久违的成就感。 下面是一些手记,这一系列的日志都将记录学习过程。 手记假设: 1.开发环境为ubuntu eclipse 2.你和我(54chen)一样有几年的java开发经验,对java基础不再进行描述 3.一开始就是以android2.2开始搞的,不排除后面的3出来,到时再另行通知 一 开发环境搭建 要开始开发Hello world,先要准备java环境(略),准备eclipse(略),再在eclipse上用software upadte安装上sdk的tools,再使用sdk的tools来安装platform(现在的最新版本是2.2),官方的文档和下载地址在http://developer.android.com/sdk/installing.html(洋文,被墙)。 因为是ubuntu 10.04,eclipse java都是可以apt-get install eclipse java6-sun-sdk(印象中是openjdk-6-jdk)来安装的。网上有许多切换openjdk到sunjdk的资料,不过提醒一点,这个openjdk似乎也一样可以用,如果切换成sunjdk的话,可能会遇到字体不正常的问题。 eclipse版本:3.5.2 Build id: M20100211-1343 第一步,要给eclipse安装一个android开发工具包 在eclipse的install new software上增加site:https://dl-s

Continue reading

Posted in java | Tagged , | 5 Comments

海纳百川——人人网海量存储系统Nuclear开发手记

此文为《程序员》杂志约稿,发表在2010年9月刊。怀念过去美好的时光和所有的UGC兄弟真挚友谊,谨以此文为个人职业发展阶段作一个美好的终结。以下是全文原稿。 2009年8月左右,由于业务扩展的需要,我们的团队开始了一个新项目的研发,其中需要完成一个存储系统,把评论数据聚合到一起同时还要提供线上的读写服务。这些评论来自不同的业务产品,数据量非常之巨大;同时对稳定性的要求非常高,因为如果出现宕机,将影响到大量的业务线。于是,我们开始了对此类系统的探索。 Nuclear 的由来 经过需求分析阶段,摆在我们面前的是五点要求:高可用、高可扩展、高性能、Key-Value存储、支持关系化查询。经过一段痛苦的系统选型分析,我们最终决定开发属于人人网的海量存储系统。Nuclear,正如其名,nuclear的未来将要肩负起整个评论系统存储的核反应般的压力爆发的重任。由于当时并没有这方面的经验,一切都是摸着石头过河,我们设计了好几期的雏形,一开始明显就是有问题的构架设计,慢慢地在学习和进步的过程中,团队的成员也在慢慢地成长,离我们的目标也越来越近。又因为业务模型的需要和方便分布到集群,这个系统慢慢演变,最后成为了一个可靠的分布式key- value存储系统。以下特将在研发过程中遇到的问题做一个总结。 Key-Value系统的优缺点 NoSQL系统在过去的一两年里,饱受了争议和技术界的目光。从原理上讲,基本上这类系统都会有一些相同的优点和缺点: 优点: 1. 只有高效的查询可用,性能是可想像的。 2. 容易分布到集群。 3. 可以很容易增加缓存层用来加

Continue reading

Posted in java, 架构研究 | Tagged , , | 16 Comments

[54chen开发日记]注解和拦截器实现权限通用模型的设计实践

------------------英文大爱-----------------------         在近期的开发过程中,有使用到拦截器来实现权限控制,使用这种设计方案,可以很好地分离权限与系统本身的功能,让开发过程更加关注系统的核心功能,同时可以很容易做到开发时的任务划分,同时使项目代码的可读性大大提升。先来普及几个相关的名词: 1.AOP:是OOP的延续,是(Aspect Oriented Programming)的缩写,意思是面向切面编程,也有叫面向方面编程,不过切面更加形象。可以通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种技术。AOP实际是GoF设计模式的延续,设计模式孜孜不倦追求的是调用者和被调用者之间的解耦,AOP可以说也是这种目标的一种实现。 2.GoF:《Design Patterns: Elements of Reusable Object-Oriented Software》(即《设计模式》一书),由 Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides 合著(Addison-Wesley,1995)。这几位作者常被称为"四人组(Gang of Four)",而这本书也就被称为"四人组(或 GoF)"书。话说为首的Erich Gamma,在QCon的大会上54chen也有半面之缘。 权限模型的常量定义      &n

Continue reading

Posted in java, 架构研究 | Tagged , , | 1 Comment

试用新型JAVA构建工具Gradle

54chen在研究一个开源项目的时候,发现其使用的构建工具很特殊,叫Gradle,和ant maven类似,他提供的东西更加有感觉,不过冒似版本还不高,最新的0.9也只是一个预览版本。 名词解释 ant 当一个代码项目大了以后,每次重新编译,打包,测试等都会变得非常复杂而且重复,因此c语言中有make脚本来帮助这些工作的批量完成。在Java 中应用是平台无关性的,当然不会用平台相关的make脚本来完成这些批处理任务了,ANT本身就是这样一个流程脚本引擎,用于自动化调用程序完成项目的编译,打包,测试等。除了基于JAVA是平台无关的外,脚本的格式是基于XML的,比make脚本来说还要好维护一些。 maven Maven是基于项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具. 如果你已经有十次输入同样的Ant targets来编译你的代码、jar或者war、生成javadocs,你一定会自问,是否有有一个重复性更少却能同样完成该工作的方法。Maven便提供了这样一种选择,将你的注意力从作业层转移到项目管理层。Maven项目已经能够知道如何构建和捆绑代码,运行测试,生成文档并宿主项目网页. 项目的主页地址为:http://maven.apache.org/ Gradle Gradle是一个基于Groovy的build工具——“Ease - Freedom - Power for your build Gradle试图使用Groovy语法来提供Ant的灵活性;它支持多项目的创建,为Ivy提供了一个layer,提供了build-by-conve

Continue reading

Posted in java | Tagged , , , | 10 Comments

闲谈分布式key-value存储服务nuclear及其他

现在很多国内公司都纷纷开始了key-value的nosql存储方式,然而,从什么时候开始key-value会变得这么流行呢?是风靡一时,还是顺应时代的潮流?前后数一数,有豆瓣网的beandb、有新浪的SDD、小道消息还有腾讯的TDB以及人人网的nuclear。再数国外,吹起这阵风的原因是亚马逊的一篇文档,这篇文档讲述了在亚马逊的S3服务中所使用的存储系统dynamo实现方式,但遗憾的是dynamo并不开源。紧随其后,facebook来了位号称是当年亚马逊dynamo的开发人员之一的同志,实现了facebook的cassandra,并且值得表扬的是还将其开源了。与此同时,相同理论下产生的,还有linkedin的voldemort系统。 百家争鸣还是百家讲坛 分布式存储的目标,是解决大规模数据在数据量不断增长的情况下,让服务更加稳定,更容易扩展。 其主要具备以下几个特点: 1.高可靠性:系统能够长时间高效运行不迭机。严格的说即使坏了一部分机器也没事。 2.可扩展性:可以随意增加减少机器,不用担心额外的数据损失。 3.负载均衡:要保证每个节点的数据都是负载均衡的,不出现集中负载到一个节点的情况。 4.一致性:因为是分布式的节点,就需要保证节点与节点之间保存数据的一致。 鱼与熊掌不可兼得,这几点,往往完成了其中几点就会损失另外一点,要全部达到完美,是一件非常困难的事情。 在国内的几个存储来看,基本都是只实现了其中的一部分,再按照自己业务的需求,来加强其中更为关心的建设。 beansdb的最终一致性通过哈希树实现快速完整数据同步(短时间内数据可能不一致);可以在不中断服务的情况下进行容

Continue reading

Posted in java, linux | Tagged , | 2 Comments

五四陈透过PHP看JAVA系列:fsockopen

本系列主要总结PHP与JAVA之间的一些异同,给从PHP学JAVA或者是从JAVA学PHP的同学一点启发,五四陈科学院出品。 第一部分,先看PHP的fsockopen 先来看PHP手册中的定义http://www.54chen.com/p/function.fsockopen.html 看完定义后,来看一段代码,利用PHP去更新squid的缓存: <?php function updateCache($myUrl) { global $vSquidConfig; foreach ( $vSquidConfig ['host'] as $mySquid ) { $myHandle = @fsockopen ( "127.0.0.1", 80, $myErrNo, $myErrStr, 30 ); if ($myHandle) { $myResult = ''; @fputs ( $myHandle, "PURGE " . …

Continue reading

Posted in java, php | Tagged , , | 4 Comments

五四陈透过PHP看JAVA系列:strtotime

本系列主要总结PHP与JAVA之间的一些异同,给从PHP学JAVA或者是从JAVA学PHP的同学一点启发,五四陈科学院出品。 第一部分,先看PHP的Date/Tme函数 详细见:http://www.54chen.com/p/ref.datetime.html 今天要说的是其中的strtotime函数 http://www.54chen.com/p/function.strtotime.html 函数的功能:接受一个包含美国英语日期格式的字符串并尝试将其解析为 Unix 时间戳(自 January 1 1970 00:00:00 GMT 起的秒数)。 例子: <?php echo strtotime("2010-3-3 3:3:3"); ?> 将得到结果: 1267585383 在PHP应用中,经常在需要记录时间的时候,使用Mysql的int(10)来保存这个 Unix 时间戳,并且时间的比较查找等操作,都用大于小于来进行。 第二部分,看JAVA对应的方法 try { fromUnixTime = new java.text.SimpleDateFormat("dd/MM/yyyy HH:mm:ss").parse("01/03/2010 08:00:00").getTime(); fromUnixTime /= 1000; } catch (ParseException …

Continue reading

Posted in java, php | Tagged , , | Leave a comment
Page 5 of 8« First...34567...Last »