2013年已经过完了。在2013年里,对D瓜哥来说最重要的一件事情就是面试,长达半年的面试(2013年5月10日离职到2013年11月15日上班)。至于找工作的时候经常玩,这种丢脸的事情,我会到处张扬吗?别人都去写年末总结了,D瓜哥也想写,但是还没动手。所以,滥竽充数,把以前面试时整理的一些面试题拿出来权当年末总结吧。这是D瓜哥2013年10月18日面试时,被问的问题和“昨天面试被问到的一些问题”有不少区别的,而且也确实有一些是我自己不太确定或者说研究得不够透彻。所以, 阅读全文…
分类: Java, Linux, 挨踢(IT), 数据库, 职场生涯 标签: HTTP, Java, JavaScript, Linux, Network, Web, 数据库, 面试
对线程分组是Java并发API提供的一个有趣功能。我们可以将一组线程看成一个独立单元,并且可以随意操纵线程组中的线程对象。比如,可以控制一组线程来运行同样的任务,无需关心有多少线程还在运行,还可以使用一次中断调用中断所有线程的执行。
Java提供了ThreadGroup
类来控制一个线程组。一个线程组可以通过线程对象来创建,也可以由其他线程组来创建,生成一个树形结构的线程。
根据《Effective Java》的说明, 阅读全文…
昨天D瓜哥参加了一个Java工程师面试,具体公司名称就不透露了。感觉被问的问题挺有代表性。简单整理一下,发布出来,给需要的朋友一个参考吧。暂时没有解答,抱歉!
-
以前工作中收获最大的一次经历是什么?
这里只说明一下收获吧。
- 高性能网站的十四条黄金法则
- 高性能JavaScript
-
所需知识哪些 阅读全文…
共享数据是并发程序最关键的特性之一。对于无论是继承Thread
类的对象,还是实现Runnable
接口的对象,这都是一个非常周重要的方面。
如果创建了一个实现Runnable
接口的类的对象,并使用该对象启动了一系列的线程,则所有这些线程共享相同的属性。换句话说,如果一个线程修改了一个属性,则其余所有线程都会受此改变的影响。
有时,我们更希望能在线程内单独使用,而不和其他使用同一对象启动的线程共享。Java并发接口提供了一种很清晰的机制来满足此需求,该机制称为本地线程变量。该机制的性能也非常可观。
知其然
按照下面所示步骤, 阅读全文…
Java语言中,把异常分为两类:
- 受检异常: 这类异常必须在
throws
子句中被显式抛出或者在方法内被捕获。例如,IOException
异常或ClassNotFoundException
异常。
- 非受检异常: 这类异常不需要显式抛出或捕获。例如,
NumberFormatException
异常。
当一个受检异常在Thread
对象的run()
方法中被抛出时,我们必须捕获并处理它,因为run()
方法不能抛出异常。而一个非受检异常在Thread
对象的run()
方法中被抛出时,默认的行为是在控制台打印出堆栈跟踪信息然后退出程序。
幸运的是,Java为我们提供了一种机制, 阅读全文…
Java有一种特殊线程,守护线程,这种线程优先级特别低,只有在同一程序中的其他线程不执行时才会执行。
由于守护线程拥有这些特性,所以,一般用为为程序中的普通线程(也称为用户线程)提供服务。它们一般会有一个无限循环,或用于等待请求服务,或用于执行任务等。它们不可以做任何重要的工作,因为我们不确定他们什么时才能分配到CPU运行时间,而且当没有其他线程执行时,它们就会自动终止。这类线程的一个典型应用就是Java的垃圾回收。
在本节示例中,我们将创建 阅读全文…
一直以来,对Hadoop集群很感兴趣。最近得闲,就抽空把Hadoop集群搭建起来。为了日后备查,著一小文以记之。
创建用户账号
为了便于管理,建立一个专门用于搭建Hadoop集群的用户账号。创建指令如下:
sudo adduser u --ingroup sudo
注销原来的登录用户,使用用户u
登录。也可以使用 阅读全文…
在某些场景下,我们必须等待线程执行完成才能进行下一步工作。例如,某些程序在开始执行之前,需要先初始化一些资源。这时,我们可以启动一个线程专门来做初始化任务,等到线程任务完成后,再去执行其他部分。
为此,Thread
类为我们提供了join()
方法。当我们使用线程对象调用此方法时,正在掉调用的线程对象将被推迟到被调用对象执行完成后再开始执行。
在本节,示例程序演示等待初始化方法完成后,再去执行其他任务。
知其然
按照下面所示步骤, 阅读全文…
有时,我们需要在指定的时间点中断正在执行的线程。比如,每分钟检查一次传感器状态的线程,其余时间,线程不需要做任何事情。在此期间,线程不需要使用计算机的任何资源。过了这段时间之后,并且当Java虚拟机调度了该线程,则该线程继续执行。为此,你可以使用Thread
类的sleeep()
方法。该方法以休眠的方式来推迟线程的执行,而且整数类型的参数则指明休眠的毫秒数。当调用sleep()
方法,休眠时间结束后,Java虚拟机分配给线程CPU运行时间,线程就会继续执行。
另一种是用sleep()
方法的方式是 阅读全文…
在上一节“线程中断”中,我们讲解了如何中断一个正在执行的线程以及为了中断线程,我们必须对Thread
动点什么手脚。一般情况下,我们可以使用上一节介绍的中断机制。但是,如果线程实现了一个分配到多个方法中的复杂算法,或者方法调用中有一个递归调用,我们应该使用更好的方式来控制线程的中断。为此,Java提供了InterruptedException
异常。当检测到中断请求时,可以抛出此异常,并且在run()
方法中捕获。
在本节,我们将使用一个线程 阅读全文…