2013年3月月 发布的文章

MapR与Ubuntu携手推免费版Hadoop工具

MapR与Ubuntu Linux开发商Canonical合作,实现Ubuntu与Hadoop大数据平台无缝兼容。
据介绍,Ubuntu/MapR包括MapR M3版本的Hadoop,以支持Ubuntu 12.04 LTS和12.10版本。该软件目前可以通过Canonical的Ubuntu合作伙伴获得,时间从4月25日开始。
Canonical公司副总裁Kyle MacDonald表示,MapR M3是一款易于部署的企业级Hadoop解决方案,“我们为Ubuntu客户提供了高效执行大数据的新途径”。
MapR M3是一款捆绑有HBase数据库、Pig开发分析工具、Hive数据仓库系统、Sqoop数据传输软件和其他Hadoop相关组件的免费版软件。
MapR是什么:
MapR是MapR Technologies, Inc的一个产品,号称下一代Hadoop,使Hadoop变为一个速度更快、可靠性更高、更易于管理、使用更加方便的分布式计算服务和存储平台,同时性能也不断提高。它将极大的扩大了Hadoop的使用范围和方式。它包含了开源社区的许多流行的工具和功能,例如Hbase、Hive。它还100%和Apache Hadoop的API兼容。它能够为客户节约一半的硬件资源消耗,使更多的组织能够利用海量数据分析的力量提高竞争优势。目前有两个版本,M3和M5,其中M3是免费的,M5为收费版,有试用期。
更多资料:
http://www.mapr.com/
http://blog.chinaunix.net/uid-20787846-id-3015631.html

本地模式运行storm的demo

本例实现的是本地模式运行storm的wordcount demo!
开发过程中,可以用本地模式来运行Storm,这样就能在本地开发,在进程中测试Topology。一切就绪后,以远程模式运行 Storm,提交用于在集群中运行的Topology。
创建工程:demo-storm
目录结构如下:
demo-storm
——src/main/java
————com.youku.demo
————————bolts
————————spouts
——src/test/java
——src/main/resource
————words.txt

storm-demo工程目录

storm-demo工程目录


WordCounter.java:

package com.youku.demo.bolts;
import java.util.HashMap;
import java.util.Map;
import backtype.storm.task.TopologyContext;
import backtype.storm.topology.BasicOutputCollector;
import backtype.storm.topology.OutputFieldsDeclarer;
import backtype.storm.topology.base.BaseBasicBolt;
import backtype.storm.tuple.Tuple;
public class WordCounter extends BaseBasicBolt {
	Integer id;
	String name;
	Map<String, Integer> counters;
	/**
	 * At the end of the spout (when the cluster is shutdown
	 * We will show the word counters
	 */
	@Override
	public void cleanup() {
		System.out.println("-- Word Counter ["+name+"-"+id+"] --");
		for(Map.Entry<String, Integer> entry : counters.entrySet()){
			System.out.println(entry.getKey()+": "+entry.getValue());
		}
	}
	/**
	 * On create
	 */
	@Override
	public void prepare(Map stormConf, TopologyContext context) {
		this.counters = new HashMap<String, Integer>();
		this.name = context.getThisComponentId();
		this.id = context.getThisTaskId();
	}
	public void declareOutputFields(OutputFieldsDeclarer declarer) {}
	public void execute(Tuple input, BasicOutputCollector collector) {
		String str = input.getString(0);
		/**
		 * If the word dosn't exist in the map we will create
		 * this, if not We will add 1
		 */
		if(!counters.containsKey(str)){
			counters.put(str, 1);
		}else{
			Integer c = counters.get(str) + 1;
			counters.put(str, c);
		}
	}
}

WordNormalizer.java:

package com.youku.demo.bolts;
import backtype.storm.topology.BasicOutputCollector;
import backtype.storm.topology.OutputFieldsDeclarer;
import backtype.storm.topology.base.BaseBasicBolt;
import backtype.storm.tuple.Fields;
import backtype.storm.tuple.Tuple;
import backtype.storm.tuple.Values;
public class WordNormalizer extends BaseBasicBolt {
	public void cleanup() {}
	/**
	 * The bolt will receive the line from the
	 * words file and process it to Normalize this line
	 *
	 * The normalize will be put the words in lower case
	 * and split the line to get all words in this
	 */
	public void execute(Tuple input, BasicOutputCollector collector) {
        String sentence = input.getString(0);
        String[] words = sentence.split(" ");
        for(String word : words){
            word = word.trim();
            if(!word.isEmpty()){
                word = word.toLowerCase();
                collector.emit(new Values(word));
            }
        }
	}
	/**
	 * The bolt will only emit the field "word"
	 */
	public void declareOutputFields(OutputFieldsDeclarer declarer) {
		declarer.declare(new Fields("word"));
	}
}

WordReader.java:

package com.youku.demo.spouts;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.util.Map;
import backtype.storm.spout.SpoutOutputCollector;
import backtype.storm.task.TopologyContext;
import backtype.storm.topology.OutputFieldsDeclarer;
import backtype.storm.topology.base.BaseRichSpout;
import backtype.storm.tuple.Fields;
import backtype.storm.tuple.Values;
public class WordReader extends BaseRichSpout {
	private SpoutOutputCollector collector;
	private FileReader fileReader;
	private boolean completed = false;
	public void ack(Object msgId) {
		System.out.println("OK:"+msgId);
	}
	public void close() {}
	public void fail(Object msgId) {
		System.out.println("FAIL:"+msgId);
	}
	/**
	 * The only thing that the methods will do It is emit each
	 * file line
	 */
	public void nextTuple() {
		/**
		 * The nextuple it is called forever, so if we have been readed the file
		 * we will wait and then return
		 */
		if(completed){
			try {
				Thread.sleep(1000);
			} catch (InterruptedException e) {
				//Do nothing
			}
			return;
		}
		String str;
		//Open the reader
		BufferedReader reader = new BufferedReader(fileReader);
		try{
			//Read all lines
			while((str = reader.readLine()) != null){
				/**
				 * By each line emmit a new value with the line as a their
				 */
				this.collector.emit(new Values(str),str);
			}
		}catch(Exception e){
			throw new RuntimeException("Error reading tuple",e);
		}finally{
			completed = true;
		}
	}
	/**
	 * We will create the file and get the collector object
	 */
	public void open(Map conf, TopologyContext context,
			SpoutOutputCollector collector) {
		try {
			this.fileReader = new FileReader(conf.get("wordsFile").toString());
		} catch (FileNotFoundException e) {
			throw new RuntimeException("Error reading file ["+conf.get("wordFile")+"]");
		}
		this.collector = collector;
	}
	/**
	 * Declare the output field "word"
	 */
	public void declareOutputFields(OutputFieldsDeclarer declarer) {
		declarer.declare(new Fields("line"));
	}
}

TopologyMain.java:

package com.youku.demo;
import com.youku.demo.bolts.WordCounter;
import com.youku.demo.bolts.WordNormalizer;
import com.youku.demo.spouts.WordReader;
import backtype.storm.Config;
import backtype.storm.LocalCluster;
import backtype.storm.topology.TopologyBuilder;
import backtype.storm.tuple.Fields;
public class TopologyMain {
	public static void main(String[] args) throws InterruptedException {
        //Topology definition
		TopologyBuilder builder = new TopologyBuilder();
		builder.setSpout("word-reader",new WordReader());
		builder.setBolt("word-normalizer", new WordNormalizer())
			.shuffleGrouping("word-reader");
		builder.setBolt("word-counter", new WordCounter(),1)
			.fieldsGrouping("word-normalizer", new Fields("word"));
        //Configuration
		Config conf = new Config();
		conf.put("wordsFile", args[0]);
		conf.setDebug(true);
        //Topology run
		conf.put(Config.TOPOLOGY_MAX_SPOUT_PENDING, 1);
		LocalCluster cluster = new LocalCluster();
		cluster.submitTopology("Getting-Started-Toplogie", conf, builder.createTopology());
		Thread.sleep(2000);
		cluster.shutdown();
	}
}

pom.xml:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>com.youku.demo</groupId>
	<artifactId>demo-storm</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>jar</packaging>
	<name>demo-storm</name>
	<url>http://maven.apache.org</url>
	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
	</properties>
	<build>
		<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>
				<version>2.3.2</version>
				<configuration>
					<source>1.6</source>
					<target>1.6</target>
					<compilerVersion>1.6</compilerVersion>
				</configuration>
			</plugin>
		</plugins>
	</build>
	<repositories>
		<!-- Repository where we can found the storm dependencies -->
		<repository>
			<id>clojars.org</id>
			<url>http://clojars.org/repo</url>
		</repository>
	</repositories>
	<dependencies>
		<!-- Storm Dependency -->
		<dependency>
			<groupId>storm</groupId>
			<artifactId>storm</artifactId>
			<version>0.8.0</version>
		</dependency>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>3.8.1</version>
			<scope>test</scope>
		</dependency>
	</dependencies>
</project>

words.txt:

storm
test
are
great
is
an
storm
simple
application
but
very
powerfull
really
StOrm
is
great

运行的时候需要配置参数:src/main/resources/words.txt 指定输入文件

运行命令

运行命令


日志输出:
运行日志

运行日志


会报好多zookeeper异常,还有最后的日志文件无法删除的异常,目前忽略了,O(∩_∩)O呵呵~

271  [main-SendThread(localhost:2000)] WARN  org.apache.zookeeper.ClientCnxn  - Session 0x0 for server null, unexpected error, closing socket connection and attempting reconnect
java.net.SocketException: Address family not supported by protocol family: connect
	at sun.nio.ch.Net.connect(Native Method)
	at sun.nio.ch.SocketChannelImpl.connect(SocketChannelImpl.java:507)
	at org.apache.zookeeper.ClientCnxn$SendThread.startConnect(ClientCnxn.java:1050)
	at org.apache.zookeeper.ClientCnxn$SendThread.run(ClientCnxn.java:1077)
java.io.IOException: Unable to delete file: C:UsersThinkPadAppDataLocalTemp3fbb080f-e585-42e6-8b1b-d6ae024503acversion-2log.1
	at org.apache.commons.io.FileUtils.forceDelete(FileUtils.java:1390)
	at org.apache.commons.io.FileUtils.cleanDirectory(FileUtils.java:1044)
	at org.apache.commons.io.FileUtils.deleteDirectory(FileUtils.java:977)
	at org.apache.commons.io.FileUtils.forceDelete(FileUtils.java:1381)
	at org.apache.commons.io.FileUtils.cleanDirectory(FileUtils.java:1044)
	at org.apache.commons.io.FileUtils.deleteDirectory(FileUtils.java:977)
	at org.apache.commons.io.FileUtils.forceDelete(FileUtils.java:1381)
	at backtype.storm.util$rmr.invoke(util.clj:413)
	at backtype.storm.testing$kill_local_storm_cluster.invoke(testing.clj:163)
	at backtype.storm.LocalCluster$_shutdown.invoke(LocalCluster.clj:21)
	at backtype.storm.LocalCluster.shutdown(Unknown Source)
	at com.youku.demo.TopologyMain.main(TopologyMain.java:33)

渐进学习hadoop

渐进式的学习Hadoop:
(1)先搭建一个单节点的 Hadoop平台,先将那些疑问放一边,先去学习如何搭建这个平台;
(2)尝试用Hadoop管理各类文件,尝试将数据存放于其非关系型数据库中,尝试编写一个MapReduce程序,通过些步骤,能够大概的认识到Hadoop是一个海量的数据、文件的存放平台,上面提供了各种通用的工具以帮助用户更好的去分析、应用与处理这些数据与文件;
(3)考虑一个问题:如果当前有一个任务交给你,去实现一个TB、乃至PB级数据的海量存取与快速查询,你最后如果实现了这一任务,其实就是实现了一个专用任务的Hadoop平台,考虑到未来有很多类似的任务,将你的专用Hadoop平台改造成通用性平台,以方便其他用户使用,那你可能就真正实现了一个类似于Hadoop的应用系统。用这样的思维去看待Hadoop可能会让用户理解的为更透彻,另外当用户对这个认识模糊时,大可以不用太担心,这多半是由于当前的实际工作可能还用不上,如果真碰到这样的大数据处理,通过思考就能很快理解Hadoop的好处。
(4)实现多节点的安装与部署,并尝试设置节点失效,看一下如何去管理与调度、监测任务的执行。
(5)实现大批量专用工具部署,并尝试实现1万个文件的存取、数千万数据的写入与查询,再去重新认识一下Hadoop。
(6)尝试在工作中开始实现Hadoop。

Storm实时计算平台

Twitter将Storm正式开源了,这是一个分布式的、容错的实时计算系统,它被托管在GitHub上,遵循 Eclipse Public License 1.0。Storm是由BackType开发的实时处理系统,BackType现在已在Twitter麾下。GitHub上的最新版本是Storm 0.8.0,基本是用Clojure写的。
Storm为分布式实时计算提供了一组通用原语,可被用于“流处理”之中,实时处理消息并更新数据库。这是管理队列及工作者集群的另一种方式。 Storm也可被用于“连续计算”(continuous computation),对数据流做连续查询,在计算时就将结果以流的形式输出给用户。它还可被用于“分布式RPC”,以并行的方式运行昂贵的运算。 Storm的主工程师Nathan Marz表示:
Storm可以方便地在一个计算机集群中编写与扩展复杂的实时计算,Storm之于实时处理,就好比 Hadoop之于批处理。Storm保证每个消息都会得到处理,而且它很快——在一个小集群中,每秒可以处理数以百万计的消息。更棒的是你可以使用任意编程语言来做开发。
Storm的主要特点如下:
简单的编程模型。类似于MapReduce降低了并行批处理复杂性,Storm降低了进行实时处理的复杂性。
可以使用各种编程语言。你可以在Storm之上使用各种编程语言。默认支持Clojure、Java、Ruby和Python。要增加对其他语言的支持,只需实现一个简单的Storm通信协议即可。
容错性。Storm会管理工作进程和节点的故障。
水平扩展。计算是在多个线程、进程和服务器之间并行进行的。
可靠的消息处理。Storm保证每个消息至少能得到一次完整处理。任务失败时,它会负责从消息源重试消息。
快速。系统的设计保证了消息能得到快速的处理,使用ØMQ作为其底层消息队列。
本地模式。Storm有一个“本地模式”,可以在处理过程中完全模拟Storm集群。这让你可以快速进行开发和单元测试。
Storm集群由一个主节点和多个工作节点组成。主节点运行了一个名为“Nimbus”的守护进程,用于分配代码、布置任务及故障检测。每个工作节 点都运行了一个名为“Supervisor”的守护进程,用于监听工作,开始并终止工作进程。Nimbus和Supervisor都能快速失败,而且是无 状态的,这样一来它们就变得十分健壮,两者的协调工作是由Apache ZooKeeper来完成的。
Storm的术语包括Stream、Spout、Bolt、Task、Worker、Stream Grouping和Topology。Stream是被处理的数据。Sprout是数据源。Bolt处理数据。Task是运行于Spout或Bolt中的 线程。Worker是运行这些线程的进程。Stream Grouping规定了Bolt接收什么东西作为输入数据。数据可以随机分配(术语为Shuffle),或者根据字段值分配(术语为Fields),或者 广播(术语为All),或者总是发给一个Task(术语为Global),也可以不关心该数据(术语为None),或者由自定义逻辑来决定(术语为 Direct)。Topology是由Stream Grouping连接起来的Spout和Bolt节点网络。在Storm Concepts页面里对这些术语有更详细的描述。
可以和Storm相提并论的系统有Esper、Streambase、HStreaming和Yahoo S4。其中和Storm最接近的就是S4。两者最大的区别在于Storm会保证消息得到处理。这些系统中有的拥有内建数据存储层,这是Storm所没有的,如果需要持久化,可以使用一个类似于Cassandra或Riak这样的外部数据库。
入门的最佳途径是阅读GitHub上的官方《Storm Tutorial》。 其中讨论了多种Storm概念和抽象,提供了范例代码以便你可以运行一个Storm Topology。开发过程中,可以用本地模式来运行Storm,这样就能在本地开发,在进程中测试Topology。一切就绪后,以远程模式运行 Storm,提交用于在集群中运行的Topology。
要运行Storm集群,你需要Apache Zookeeper、ØMQ、JZMQ、Java 6和Python 2.6.6。ZooKeeper用于管理集群中的不同组件,ØMQ是内部消息系统,JZMQ是ØMQ的Java Binding。有个名为storm-deploy的子项目,可以在AWS上一键部署Storm集群。关于详细的步骤,可以阅读Storm Wiki上的《Setting up a Storm cluster》
storm官网:
http://storm-project.net/
storm git:
https://github.com/nathanmarz/storm

体验云存储

体验“云存储”
Dropbox据说在分享文件的时候是有每日20G流量限制的,超过会封号;
腾讯的微云,我问过客服,说是没有,分享人数,下载次数,流量控制等限制;
QQ中转站有下载次数限制
百度网盘有版权问题,可能会分享失败
各种廉价及有吸引力的 云选择日益增多。但是通过3月19号公布一个Strategy Analytics调查显示,美国市场已被大公司开发的生态系统所霸占。研究发现Apple在硬件和服务上的融合已很大限度上成为这种生态系统的标杆,在该领域占主导地位;而Dropbox、Amazon和Google紧随其后。
Strategy Analytics调查了接近2300个连接终端后得出结论:Apple的iCloud和iTunes Match服务拥有了市场上27%的用户;其它取得了两位数成绩的公司有:Dropbox 17%、Amazon Cloud Drive 15%以及Google Drive的10%;而其它的竞争对手的用户占有率都未超过4%。
研究还发现云服务采用最高的人群为年轻人,特别是在20到24岁之间的青年;其中只有Apple云服务的女性用户比男性用户来的多,而其中音乐存储的采用率最高。有90%左右的Apple、Amazon及Google云用户都使用这些服务存储他们的音乐,即使Dropbox(区别于其它Apple等公司,并没有围绕着内容生态系统)服务的用户中有45%都来自音乐储存。Strategy Analytics指出Dropbox似乎准备在这一领域大展拳脚,这得益于 12月份收购的Audiogalaxy;Audiogalaxy是个音乐流及存储公司,使Dropbox可以快速的整合像本地音乐播放器这些功能。
Ed Barton —— Strategy Analytics数字媒体总监,说道:“音乐已经成为云战争的主要战场。”他指出,Google为争取客户给安卓设备提供了2万首免费音乐备份服务。与其竞争的服务同样提供了类似的小规模免费服务,不过它们通常是根据使用的空间收费。
音乐成为 云战争主战场已有多年之久,但是Barton指出:对流视频的需求可能会促成更深层的采用。也是出于这个原因,他非常看好好莱坞支持的Ultraviolet服务,根据该公司的调查:这个服务已经占据了市场上4%的用户份额,尽管这个服务因为出错率高和界面复杂激怒过很多初期用户。
在另一个需要注意的发现中,Samsung Music Hub占据了3%的美国云存储。这个韩国电子巨头一直追求着使Apple迅速崛起的软硬件协同效应,而它们扩张的云脚步正是实现这一目标的一部分。
微软在这一榜单上的缺席无疑是惹人注意的,该公司SkyDrive云服务上的文件已超10亿。Redmond也正致力将服务整合到最普及的产品,比如Office。Strategy Analytics并没有公布对这些公司调查的详细统计数据。
虽然有些公司还在讨论采用什么类型的云服务,甚至是在考虑是否采用云服务,但是云的采用还是成为了主流。通过研究发现,美国线上用户中有45%至少使用了一种云服务。
Barton说,虽然那些“2013年是云计算一年”的论调有些言过其实,但毫无疑问的是云存储已经成为数字平台的一个关键使用策略,而在2至3年内更将随处可见。

利用devstack在ubuntu上安装openstack

系统要求:ubuntu12.04 32位
安装git:

sudo apt-get install git

获取devstack脚本:

git clone https://github.com/openstack-dev/devstack.git

在当前用户目录下执行命令,否则会报没权限
进入devstack目录

cd devstack
./stack.sh

脚本执行过程需要按照提示设置几个密码,执行过程大概:
(1)下载并安装Openstack运行所需要的系统软件,大概包括一些python的组件、mysql、rabbitmq-server等
(2)下载openstack组件,包括nova 、keystone、glance、noVNC、horizon等
(3)下载并安装openstack源码所依赖的python库和框架
(4)安装openstack各组件
(5)启动各项服务
然后就是漫长到等待,需要看网络情况,经常装到一半没速度了,可以换用其他到Ubuntu 更新源。

Horizon is now available at http://172.16.95.187/
Keystone is serving at http://172.16.95.187:5000/v2.0/
Examples on using novaclient command line is in exercise.sh
The default users are: admin and demo
The password: 123456
This is your host ip: 172.16.95.187
stack.sh completed in 1961 seconds.

访问http://172.16.95.187/,输入用户名密码即可
http://devstack.org/

IaaS层实现思路

云计算,什么是云计算,它到底离我们有多远?
这些内容我已经在《云计算的定义和特征》中阐述过了,需要看的朋友可以再去翻出来看看。
这篇文章我们重点讨论IaaS
IaaS的使用者是谁?IaaS能提供怎样的服务?他们怎么利用提供的服务?
是研发人员,有了IaaS层以后,他们就不需要等待公司的流程,盼星星盼月亮似地等着审批机器。IaaS层提供资助服务,完全可以由使用者自助申请,通过云管理平台审批,而后得到想要的机器。这种是直接提供虚拟机。
还有一种场景,我的IaaS层在外面是看不到东西的,这里的IaaS层只是为内部的中间件提供一个可部署、易维护的一个环境,而用户使用的服务是中间件提供的。这种我们得到的服务是间接的,看不到摸不着的。
我们可以像想,在我的I层有一堆的PC Server ,每台PC Server上都有内存、CPU、硬盘这些重要组件。虚拟化带来的切割资源,将一个性能较好的机器,切分成相对性能较差的机器。
未完待续……

Hadoop云计算资料收集

Hadoop云计算资料收集,会陆续更新……
先说下我本人对各种资料、信息来源的看法:
1、书:有些书不错,必须得买,必须得深入的看,这种书比较少;但有些书,乍一看书目很不错,但内容多为浅尝辄止,没啥新意,看看书目就行了,作为查找资料的依据,自学的大纲,不买;垃圾书就不说了。
2、培训:任何事情都有好坏两方面,我对此的态度是不排斥,也不喜欢;好多培训课程在课程安排上还是不错的,因此在自学的时候可以参考培训学校安排的学习路线,参加不参加培训看个人基础,关键是自己知道自己应该学什么,而不是别人告诉你,你要学什么充分利用培训网站上的课程表,安排自学路线,还是不错的方法。充分利用培训学校的培训视频,找到自己需要的知识点,切记,前提一定是知道自己想要学什么;
任何东东都有两面性,取其精华去其糟粕,学好技术才是我们最终目标,看事物的时候不能一刀切!
希望资源失效的时候,大家提醒下,也好及时删除,如果有什么资源,也欢迎大家及时分享。


云计算相关:
北航云计算视频教程  http://soft.buaa.edu.cn/MC/show.asp?id=534
重点推荐张荣典老师的《云计算之前生今世与未来》http://www.huijiangtan.com/pubcontent1.php


Hadoop相关:
史密斯学院关于Hadoop一些资料(英文的)   http://cs.smith.edu/classwiki/index.php/Category:Hadoop
高负载低延迟:动态算法+Hadoop+AWS+NoSQL解析 http://www.csdn.net/article/2013-01-18/2813788-analyzing-billions-of-credit-card-transa
csdn Hadoop专题:http://subject.csdn.net/hadoop/
Mapreduce相关,介绍的内容很基础和比较底层:http://www.importnew.com/?s=hadoop%E6%95%99%E7%A8%8B
如何给Hadoop集群选择硬件:http://blog.cloudera.com/blog/2013/08/how-to-select-the-right-hardware-for-your-new-hadoop-cluster/


Java:
java异常处理:http://www.importnew.com/5616.html
tomcat的配置: http://blog.lihai.me/deploy-webapp-on-tomcat.html
调度系统Quartz快速入门:http://www.importnew.com/4107.html


开源相关:
图灵社区,正在翻译的《开源软件架构》http://www.ituring.com.cn/book/1143#jtss-tsina

261个Java基础问题

这是摘自《你必须知道的261个Java语言问题》的书目,大家可以对照着,排查下自己哪些还不熟悉,都是比较基础的问题
第1章 java基本概念及环境配置 .1
faq1.01 什么是面向对象程序设计? 1
faq1.02 面向对象程序设计的基本特征有哪些? 2
faq1.03 java语言是如何产生和发展的? 3
faq1.04 android与java语言有什么关系? 4
faq1.05 java se、java ee和java me有什么区别? 5
faq1.06 java语言的运行机制如何? 6
faq1.07 什么是jvm?有什么作用?工作机制如何? 8
faq1.08 什么是jre(或j2re)? 9
faq1.09 什么是jdk? 10
faq1.10 jdk、jre和jvm之间有什么区别? 11
faq1.11 什么是gc?gc的工作原理如何? 12
faq1.12 如何安装java基本开发环境jdk? 13
faq1.13 为何在jdk安装路径下存在两个jre? 16
faq1.14 jdk安装时设置path和classpath环境变量有何作用? 17
faq1.15 如何编译、运行java应用程序? 18
faq1.16 如何将程序中的文档注释提取出来生成说明文档? 20
faq1.17 怎样制作鼠标双击就可以运行的jar文件? 23
faq1.18 怎样给main(string[] args)方法的args指定参数值? 26
第2章 java编程基础 28
faq2.01 java中的标识符如何命名?可以用中文吗? 28
faq2.02 java中有哪些关键字? 29
faq2.03 用public、protected和private修饰方法有什么区别? 30
faq2.04 this关键字有什么含义?在哪些情况下应用? 31
faq2.05 super关键字有什么含义?在哪些情况下应用? 32
faq2.06 static关键字有什么含义?具体如何应用?能修饰构造方法吗? 34
faq2.07 final关键字有什么含义?具体如何应用? 36
faq2.08 instanceof关键字有什么含义?如何应用? 37
faq2.09 java中有哪些数据类型? 38
faq2.10 如何解决double和float精度不准的问题? 40
faq2.11 int和integer都可以作为整数类型,那么它们有什么区别? 43
faq2.12 float f=3.4语句是否正确? 44
faq2.13 成员变量和局部变量有什么区别? 45
faq2.14 变量之间传值时可分为值传递和引用传递,那么它们有何区别? 46
faq2.15 java中有哪些运算符?优先级如何? 48
faq2.16 在实现x和y相加时,x+=y和x=x+y两种实现方式有区别吗? 50
faq2.17 在执行与运算时,运算符&和&&有什么区别? 50
faq2.18 在实现x递增加1操作时,x++和++x有什么区别? 52
faq2.19 x?y:z格式的语句表示什么意思? 53
faq2.20 “+”操作符在java内部是如何实现字符串连接的? 54
faq2.21 ==和equals()都可用于比较两个操作数是否相等,它们有什么区别吗? 55
faq2.22 创建string对象时,使用string s=new string (“abc”)和string s=“abc”语句有什么区别? 56
faq2.23 break和continue语句有什么区别? 56
faq2.24 数组如何定义和初始化? 57
faq2.25 如何实现一维和二维数组的遍历? 59
faq2.26 如何实现数组的复制? 60
faq2.27 数组的排序算法有哪些?如何实现? 61
faq2.28 如何解决arrayindexoutofbounds exception异常? 64
第3章 java与面向对象 65
faq3.01 什么是类、对象、属性和方法? 65
faq3.02 什么是包?有什么好处? 67
faq3.03 什么是抽象类?有什么好处? 67
faq3.04 什么是接口?有什么好处? 69
faq3.05 什么是多态?有什么好处? 70
faq3.06 什么是内部类?有什么好处? 71
faq3.07 什么是匿名内部类?如何使用? 73
faq3.08 什么是封装类?有什么作用? 74
faq3.09 什么是继承?有什么好处? 75
faq3.10 使用new关键字创建对象时,为什么有时候提示找不到无参的构造方法? 76
faq3.11 抽象类和接口都可以包含抽象方法,那么它们有什么区别?使用时该如何选择? 76
faq3.12 什么是方法重写?为什么需要方法重写? 78
faq3.13 什么是方法重载?为什么需要方法重载? 78
faq3.14 构造方法是否可以被重写?能否被重载? 79
faq3.15 static修饰的方法能否在子类中重写? 80
faq3.16 在定义类时,何时需要重写object类中tostring()方法? 81
faq3.17 在定义类时,何时需要重写object类中equals()方法? 82
faq3.18 为什么在重写equals()方法时,一般都会重写hashcode()方法? 84
faq3.19 如何重写hashcode()方法? 85
faq3.20 java中动态绑定是什么意思? 87
faq3.21 java中是如何实现多态的?实现机制是什么? 88
faq3.22 创建类的对象时,类中各成员的执行顺序是什么样的? 89
faq3.23 什么是初始化块?有什么作用? 90
faq3.24 静态初始化块与非静态初始化块有什么区别? 92
faq3.25 如何调用内部类中的方法? 93
faq3.26 当内部类和外部类的成员名称相同时,如何在内部类中调用外部类的成员? 94
faq3.27 匿名内部类如何访问外部方法的局部变量或参数? 95
faq3.28 java异常处理机制是什么样的? 96
faq3.29 常见的runtimeexception异常有哪些? 97
faq3.30 java中异常处理的方式有哪些? 98
faq3.31 try-catch-finally语句块各部分的执行顺序如何? 100
faq3.32 为什么使用自定义异常?自定义异常如何使用? 101
第4章 java流和文件操作 103
faq4.01 如何获取文件的属性信息? 103
faq4.02 如何判断文件是否为空? 105
faq4.03 如何实现文件的创建、删除和移动? 105
faq4.04 如何创建和删除文件夹? 107
faq4.05 如何遍历目录中所有的文件? 109
faq4.06 如何获取文件夹大小? 110
faq4.07 什么是流?如何分类?具体包含哪些类? 111
faq4.08 如何实现字节流和字符流之间的转化? 113
faq4.09 如何判断要读的文件是否到达末尾? 116
faq4.10 如何读文件、写文件? 117
faq4.11 如何以追加的方式写文件? 118
faq4.12 如何实现文件和文件夹的复制? 119
faq4.13 如何在文件的任意位置进行读写? 121
faq4.14 使用buffered缓冲流写文件,为什么内容没有写入? 122
faq4.15 如何实现文件的分割与合并? 123
faq4.16 什么是nio?与i/o有什么区别和联系? 125
faq4.17 如何使用nio读写文件? 127
faq4.18 什么是字符编码和解码? 129
faq4.19 读写文件时为什么中文字符经常产生乱码? 130
faq4.20 如何解决filereader读文件乱码的问题? 131
faq4.21 为什么datainputstream和dataoutputstream读写文件时乱码? 132
faq4.22 如何实现文件锁定功能? 134
faq4.23 如何实现对文件和字符串加密、解密? 135
faq4.24 如何实现对文件和目录的压缩、解压缩? 139
faq4.25 如何读写properties文件? 143
faq4.26 如何读写xml文件? 146
faq4.27 如何读写xml文件中的元素属性? 151
faq4.28 如何读写csv格式的文件? 152
faq4.29 如何为图片文件生成缩略图? 154
faq4.30 如何操作excel文件? 156
faq4.31 如何操作word文件? 161
第5章 java gui编程 164
faq5.01 什么是java gui?swing与awt有什么关系? 164
faq5.02 什么是布局管理器?常用的布局管理器有哪些? 165
faq5.03 如何在窗体中显示一张图片? 170
faq5.04 如何为容器添加滚动条功能? 171
faq5.05 如何实现一个打开文件或者是存储文件的对话框? 173
faq5.06 如何实现弹出消息框的功能? 175
faq5.07 如何使用dialog对话框? 177
faq5.08 如何为按钮添加单击事件? ..178
faq5.09 如何为窗体添加关闭事件? 181
faq5.10 如何实现窗体菜单功能? 183
faq5.11 如何处理键盘输入事件? 185
faq5.12 如何处理鼠标单击事件?如何区分是左键还是右键? 186
faq5.13 如何实现鼠标右键弹出菜单的功能? 189
faq5.14 如何使用表格组件? 191
faq5.15 如何实现记事本功能? 193
faq5.16 如何实现贪吃蛇游戏? 198
第6章 java线程和序列化 208
faq6.01 线程、进程和程序有何区别和联系? 208
faq6.02 如何创建和启动一个线程? 209
faq6.03 线程的基本状态有哪些?它们之间有何关系? 211
faq6.04 什么是线程优先级?线程依据什么原则调度执行? 212
faq6.05 什么是后台线程?如何创建一个后台线程? 214
faq6.06 如何使正在运行的线程在指定时间内休眠? 216
faq6.07 如何终止一个正在运行的线程? 218
faq6.08 为何stop()和suspend()方法不推荐使用? 219
faq6.09 如何控制线程的暂停和启动? 220
faq6.10 如何实现多个线程同步? 225
faq6.11 什么是对象序列化和对象反序列化? 233
faq6.12 实现对象序列化的方法有哪些? 234
faq6.13 如何实现对象在磁盘中的存取操作? 236
faq6.14 使用objectinputstream读取对象时为什么会发生streamcorruptedexception异常? 238
faq6.15 对象中的成员哪些参与序列化?哪些不参与序列化? 241
faq6.16 如何自定义序列化和反序列化过程? 243
faq6.17 如何使用externalizable接口定制序列化过程? 247
faq6.18 在序列化类中添加serialversionuid属性有什么作用? 250
faq6.19 当序列化遭遇继承时,如何正确处理对象序列化过程? 251
第7章 java网络编程 256
faq7.01 什么是tcp/ip?什么是ip? 256
faq7.02 tcp和udp有什么区别? 258
faq7.03 什么是http?http的工作原理如何? 259
faq7.04 在socket通信时如何获取主机和客户机的ip地址? 261
faq7.05 如何利用socket实现基于tcp的通信? 264
faq7.06 如何利用socket传输中文字符? 265
faq7.07 如何在socket读取数据时使用超时设置? 267
faq7.08 如何利用socket传递对象信息? 268
faq7.09 如何利用socket实现文件传输? 271
faq7.10 如何基于socket实现聊天系统? 274
faq7.11 如何利用socket实现基于udp的通信? 278
faq7.12 如何利用udp socket技术实现ip多点传送? 280
faq7.13 如何获取internet资源的大小? 285
faq7.14 如何实现internet资源的单线程下载? 286
faq7.15 url如何通过proxy代理访问internet资源? 287
faq7.16 如何实现internet资源下载的断点续传? 288
faq7.17 如何实现internet资源的多线程下载? 290
faq7.18 如何解析internet网页内容? 293
第8章 java常用功能 296
faq8.01 如何使字符串中包含“””字符 296
faq8.02 如何实现字符串和整数之间的转化? 297
faq8.03 如何替换字符串中的字符或子字符串? 298
faq8.04 如何过滤字符串前后以及中间出现的空格? 299
faq8.05 如何对字符串中的子字符或子字符串进行截取? 301
faq8.06 如何判断一个字符串是否符合数值格式? 302
faq8.07 如何实现字符串的切割和查找? 303
faq8.08 如何实现十进制和二进制之间的相互转化? 306
faq8.09 如何将字节流转换为指定编码的字符串? 307
faq8.10 如何实现日期格式和字符串之间的转化? 308
faq8.11 string、stringbuffer和stringbuilder有什么区别? 310
faq8.12 如何获得一个随机数? 311
faq8.13 list、set和map是否继承自collection接口?有什么区别? 312
faq8.14 arraylist与linkedlist、vector的区别是什么? 313
faq8.15 hashmap和hashtable有什么区别? 314
faq8.16 如何遍历map和vector集合? 315
faq8.17 如何获取系统当前时间? 317
faq8.18 如何获得系统属性? 318
faq8.19 什么是反射机制?有什么作用? 319
faq8.20 如何读取键盘输入的信息? 322
faq8.21 如何获取当前工程目录? 323
faq8.22 如何使用java调用系统的exe文件? 324
faq8.23 如何使用java执行cmd命令? 325
faq8.24 如何使用java程序打开一个word文档? 326
faq8.25 如何使用md5和sha算法加密信息? 327
第9章 java数据库操作 329
faq9.01 什么是jdbc?有什么作用? 329
faq9.02 java与数据库的连接方式有哪些? 330
faq9.03 如何连接各种类型的数据库? 331
faq9.04 如何实现对数据库数据的查询? 335
faq9.05 如何实现对数据库数据的增加、删除和修改? 336
faq9.06 如何使用preparestatement对数据库操作? 339
faq9.07 statement和preparestatement有什么区别? 340
faq9.08 如何调用数据库中的存储过程? 341
faq9.09 如何通过jdbc-odbc桥访问access数据库? 344
faq9.10 连接oracle数据库时thin和oci方式有什么区别? 346
faq9.11 如何判断resultset结果集为空? 347
faq9.12 如何获取resultset中含有的记录数量? 348
faq9.13 如何获取resultset中n~m位置区间的记录? 350
faq9.14 如何利用resultset更新数据库数据? 351
faq9.15 如何使用like关键字实现模糊查询? 352
faq9.16 如何实现查询的分组统计和排序? 354
faq9.17 如何实现多表联合查询? 355
faq9.18 如何使用jdbc的批处理操作? 357
faq9.19 如何实现oracle字段值递增的功能? 358
faq9.20 如何处理数据表中date类型的字段? 360
faq9.21 如何向表中插入含有特殊字符的信息? 360
faq9.22 如何使用blob类型的字段存取图片? 361
faq9.23 如何使用clob类型的字段存取字符文件? 363
faq9.24 如何通过程序创建和删除数据表? 365
faq9.25 如何获取数据表的结构信息? 367
faq9.26 如何获取数据库中所有表名? 369
faq9.27 如何用程序备份和恢复数据库? 370
faq9.28 什么是事务?如何使用jdbc事务控制? 372
faq9.29 什么是jta?jta事务与jdbc事务有什么区别? 373
faq9.30 如何使用jta实现分布式事务控制? 374
faq9.31 什么是数据库连接池?工作原理如何? 376
faq9.32 如何提升sql语句的查询性能? 377
faq9.33 如何解决mysql数据库插入乱码的问题? 379
第10章 java web程序设计 381
faq10.01 什么是jsp?jsp的工作原理如何? 381
faq10.02 jsp、java和javascript有什么区别和联系? 383
faq10.03 jsp程序开发和运行环境是什么?如何搭建? 383
faq10.04 如何开发一款jsp程序? 387
faq10.05 在jsp中有哪些注释格式?有什么作用? 390
faq10.06 jsp中有哪些内建对象?分别有什么作用? 391
faq10.07 page、request、session和application有什么区别? 395
faq10.08 如何解决request.getparameter()取值乱码问题? 396
faq10.09 jsp中forward和redirect有什么区别? 397
faq10.10 如何在多个jsp页面之间传递信息? 399
faq10.11 如何解决url传递中文时出现乱码的问题? 400
faq10.12 动态include与静态include有什么区别? 401
faq10.13 什么是javabean?如何使用javabean? 402
faq10.14 什么是session?如何使用session? 403
faq10.15 如何在关闭页面时自动清除session? 405
faq10.16 什么是cookie?如何使用cookie? 406
faq10.17 如何在禁用cookie的情况下使用session? 408
faq10.18 如何在jsp中避免表单的重复提交? 409
faq10.19 如何实现jsp数据和javascript数据的交互使用? 411
faq10.20 什么是servlet?servlet与jsp有什么区别? 412
faq10.21 servlet容器的工作原理如何? 413
faq10.22 如何在servlet中使用session和application? 414
faq10.23 如何编写多线程安全的servlet程序? 415
faq10.24 如何在servlet和jsp中获取工程文件的绝对路径? 417
faq10.25 如何获取客户端浏览器和操作系统信息? 417
faq10.26 如何在web程序中实现定时运行的功能? 418
faq10.27 如何实现网站登录记忆跳转的功能? 421
faq10.28 如何将jsp动态页面转换为html静态页面? 423
faq10.29 如何实现数据分页显示的功能? 424
faq10.30 如何将jsp内容以excel或word格式输出? 431
faq10.31 如何在jsp中实现打印功能? 432
faq10.32 如何实现图片验证码功能? 433
faq10.33 如何实现饼状图、柱状图和曲线图? 436
faq10.34 如何实现进度条显示功能? 443
faq10.35 如何实现网站计数器功能? 447
faq10.36 如何发送html格式和带附件的邮件? 448
faq10.37 如何实现文件的上传和下载? 453
faq10.38 如何禁止浏览器缓存页面内容? 457
faq10.39 如何在网页中在线播放音乐和视频? 458
faq10.40 如何处理jsp页面的错误? 460
faq10.41 如何利用过滤器实现权限验证功能? 462
faq10.42 如何实现jsp防盗链功能? …464