下面是小编整理的java面试问题及答案,本文共11篇,欢迎您能喜欢,也请多多分享。本文原稿由网友“zboyz520”提供。
篇1:java面试问题及答案
1、作用域public,private,protected,以及不写时的区别
答:区别如下:
作用域 当前类 同一package 子孙类 其他package
public √ √ √ √
protected √ √ √ ×
friendly √ √ × ×
private √ × × ×
不写时默认为friendly
2、arraylist和vector的区别,hashmap和hashtable的区别
答:就arraylist与vector主要从二方面来说.
一.同步性:vector是线程安全的,也就是说是同步的,而arraylist是线程序不安全的,不是同步的
二.数据增长:当需要增长时,vector默认增长为原来一培,而arraylist却是原来的一半
就hashmap与hashtable主要从三方面来说。
一.历史原因:hashtable是基于陈旧的dictionary类的,hashmap是java 1.2引进的map接口的一个实现
二.同步性:hashtable是线程安全的,也就是说是同步的,而hashmap是线程序不安全的,不是同步的
三.值:只有hashmap可以让你将空值作为一个表的条目的key或value
3、char型变量中能不能存贮一个中文汉字?为什么?
答:是能够定义成为一个中文的,因为java中以unicode编码,一个char占16个字节,所以放一个中文是没问题的
4、多线程有几种实现方法,都是什么?同步有几种实现方法,都是什么?
答:多线程有两种实现方法,分别是继承thread类与实现runnable接口
同步的实现方面有两种,分别是synchronized,wait与notify
篇2:java面试问题及答案
1)transient和volatile是java关键字吗?(瞬联)
如果用transient声明一个实例变量,当对象存储时,它的值不需要维持。例如:
class t
{
transient int a; //不需要维持
int b; //需要维持
}
这里,如果t类的一个对象写入一个持久的存储区域,a的内容不被保存,但b的将被保存。
volatile修饰符告诉编译器被volatile修饰的变量可以被程序的其他部分改变。在多线程程序中,有时两个或更多的线程共享一个相同的实例变量。考虑效率问题,每个线程可以自己保存该共享变量的私有拷贝。实际的变量副本在不同的时候更新,如当进入synchronized方法时。 用strictfp修饰类或方法,可以确保浮点运算(以及所有切断)正如早期的java版本那样准确。切断只影响某些操作的指数。当一个类被strictfp修饰,所有的方法自动被strictfp修饰。
strictfp的意思是fp-strict,也就是说精确浮点的意思。在java虚拟机进行浮点运算时,如果没有指定strictfp关键字时,java的编译器以及运行环境在对浮点运算的表达式是采取一种近似于我行我素的行为来完成这些操作,以致于得到的结果往往无法令你满意。而一旦使用了strictfp来声明一个类、接口或者方法时,那么所声明的范围内java的编译器以及运行环境会完全依照浮点规范ieee-754来执行。因此如果你想让你的浮点运算更加精确,而且不会因为不同的硬件平台所执行的结果不一致的话,那就请用关键字strictfp。
你可以将一个类、接口以及方法声明为strictfp,但是不允许对接口中的方法以及构造函数声明strictfp关键字,例如下面的代码:
strictfp interface a {}
public strictfp class fpdemo1 {
strictfp void f {}
}
2. 错误的使用方法
interface a {
strictfp void f();
}
public class fpdemo2 {
strictfp fpdemo2() {}
}
一旦使用了关键字strictfp来声明某个类、接口或者方法时,那么在这个关键字所声明的范围内所有浮点运算都是精确的,符合ieee-754规范
的。例如一个类被声明为strictfp,那么该类中所有的方法都是strictfp的。
2)抽象类和接口有什么区别?(瞬联)
1.abstract class 在 java 语言中表示的是一种继承关系,一个类只能使用一次继承关系。但是,一个类却可以实现多个interface。
2.在abstract class 中可以有自己的数据成员,也可以有非abstarct的成员方法,而在interface中,只能够有静态的不能被修改的数据成员(也就是必须是static final的,不过在 interface中一般不定义数据成员),所有的成员方法都是abstract的。
3.abstract class和interface所反映出的设计理念不同。其实abstract class表示的是“is-a”关系,interface表示的是“like-a”关系。
4.实现抽象类和接口的类必须实现其中的所有方法。抽象类中可以有非抽象方法。接口中则不能有实现方法。
5.接口中定义的变量默认是public static final 型,且必须给其初值,所以实现类中不能重新定义,也不能改变其值。
6.抽象类中的变量默认是 friendly 型,其值可以在子类中重新定义,也可以重新赋值。
7.接口中的方法默认都是 public,abstract 类型的。
3)能说一下java的反射(reflection)机制吗?(瞬联)
开放性和原因连接(causally-connected)是反射系统的两大基本要素
4)在java中怎样实现多线程?(瞬联)
extends thread
implement runnable
方法一:继承 thread 类,覆盖方法 run(),我们在创建的 thread 类的子类中重写 run() ,加入线程所要执行的代码即可。下面是一个例子:
public class mythread extends thread
{
int count= 1, number;
public mythread(int num)
{
number = num;
system.out.println
(“创建线程 ” + number);
}
public void run() {
while(true) {
system.out.println
(“线程 ” + number + “:计数 ” + count);
if(++count== 6) return;
}
}
public static void main(string args[])
{
for(int i = 0;i 〈 5; i++) new mythread(i+1).start();
}
}
这种方法简单明了,符合大家的习惯,但是,它也有一个很大的缺点,那就是如果我们的类已经从一个类继承(如小程序必须继承自 applet 类),则无法再继承 thread 类,这时如果我们又不想建立一个新的类,应该怎么办呢?
我们不妨来探索一种新的方法:我们不创建thread类的子类,而是直接使用它,那么我们只能将我们的方法作为参数传递给 thread 类的实例,有点类似回调函数。但是 java 没有指针,我们只能传递一个包含这个方法的类的实例。
那么如何限制这个类必须包含这一方法呢?当然是使用接口!(虽然抽象类也可满足,但是需要继承,而我们之所以要采用这种新方法,不就是为了避免继承带来的限制吗?)
java 提供了接口 java.lang.runnable 来支持这种方法。
方法二:实现 runnable 接口
runnable接口只有一个方法run(),我们声明自己的类实现runnable接口并提供这一方法,将我们的线程代码写入其中,就完成了这一部分的任务。但是runnable接口并没有任何对线程的支持,我们还必须创建thread类的实例,这一点通过thread类的构造函数 public thread(runnable target);来实现。下面是一个例子:
public class mythread implements runnable
{
int count= 1, number;
public mythread(int num)
{
number = num;
system.out.println(“创建线程 ” + number);
}
public void run()
{
while(true)
{
system.out.println
(“线程 ” + number + “:计数 ” + count);
if(++count== 6) return;
}
}
public static void main(string args[])
{
for(int i = 0; i 〈 5;i++) new thread(new mythread(i+1)).start();
}
}
严格地说,创建thread子类的实例也是可行的,但是必须注意的是,该子类必须没有覆盖 thread 类的 run 方法,否则该线程执行的将是子类的 run 方法,而不是我们用以实现runnable 接口的类的 run 方法,对此大家不妨试验一下。
使用 runnable 接口来实现多线程使得我们能够在一个类中包容所有的代码,有利于封装,它的缺点在于,我们只能使用一套代码,若想创建多个线程并使各个线程执行不同的代码,则仍必须额外创建类,如果这样的话,在大多数情况下也许还不如直接用多个类分别继承 thread 来得紧凑。
综上所述,两种方法各有千秋,大家可以灵活运用。
下面让我们一起来研究一下多线程使用中的一些问题。
三、线程的四种状态
1. 新状态:线程已被创建但尚未执行(start() 尚未被调用)。
2. 可执行状态:线程可以执行,虽然不一定正在执行。cpu 时间随时可能被分配给该线程,从而使得它执行。
3. 死亡状态:正常情况下 run() 返回使得线程死亡。调用 stop()或 destroy() 亦有同样效果,但是不被推荐,前者会产生异常,后者是强制终止,不会释放锁。
4. 阻塞状态:线程不会被分配 cpu 时间,无法执行。
四、线程的优先级
线程的优先级代表该线程的重要程度,当有多个线程同时处于可执行状态并等待获得 cpu 时间时,线程调度系统根据各个线程的优先级来决定给谁分配 cpu 时间,优先级高的线程有更大的机会获得 cpu 时间,优先级低的线程也不是没有机会,只是机会要小一些罢了。
你可以调用 thread 类的方法 getpriority() 和 setpriority()来存取线程的优先级,线程的优先级界于1(min_priority)和10(max_priority)之间,缺省是5(norm_priority)。
5)你用过哪种设计模式?(瞬联,ibm,aspentech)
设计:design
模式:pattern
框架:framework
创建模式,结构模式和行为模式
gof设计模式
a.创建模式
设计模式之factory(工厂模式)
使用工厂模式就象使用new一样频繁./10/9更新
设计模式之prototype(原型模式)
用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。
设计模式之builder
汽车由车轮 方向盘 发动机很多部件组成,同时,将这些部件组装成汽车也是一件复杂的工作,builder模式就是将这两种情况分开进行。
设计模式之singleton(单态模式)
保证一个类只有一个实例,并提供一个访问它的全局访问点 /10/9更新
b.结构模式
设计模式之facade
可扩展的使用jdbc针对不同的数据库编程,facade提供了一种灵活的实现.
设计模式之proxy
以jive为例,剖析代理模式在用户级别授权机制上的应用
设计模式之adapter
使用类再生的两个方式:组合(new)和继承(extends),这个已经在“thinking in java”中提到过.
设计模式之composite
就是将类用树形结构组合成一个单位.你向别人介绍你是某单位,你是单位中的一个元素,别人和你做买卖,相当于和单位做买卖。文章中还对jive再进行了剖析。
设计模式之decorator
decorator是个油漆工,给你的东东的外表刷上美丽的颜色.
设计模式之bridge
将“牛郎织女”分开(本应在一起,分开他们,形成两个接口),在他们之间搭建一个桥(动态的结合)
设计模式之flyweight
提供java运行性能,降低小而大量重复的类的开销.
c.行为模式
设计模式之template
实际上向你介绍了为什么要使用java 抽象类,该模式原理简单,使用很普遍.
设计模式之memento
很简单一个模式,就是在内存中保留原来数据的拷贝.
设计模式之observer
介绍如何使用java api提供的现成observer
设计模式之chain of responsibility
各司其职的类串成一串,好象击鼓传花,当然如果自己能完成,就不要推委给下一个.
设计模式之command
什么是将行为封装,command是最好的说明.
设计模式之state
状态是编程中经常碰到的实例,将状态对象化,设立状态变换器,便可在状态中轻松切换.
设计模式之strategy
不同算法各自封装,用户端可随意挑选需要的算法.
设计模式之mediator
mediator很象十字路口的红绿灯,每个车辆只需和红绿灯交互就可以.
设计模式之interpreter
主要用来对语言的分析,应用机会不多.
设计模式之visitor
访问者在进行访问时,完成一系列实质性操作,而且还可以扩展.
设计模式之iterator
这个模式已经被整合入java的collection.在大多数场合下无需自己制造一个iterator,只要将对象装入collection中,直接使用iterator进行对象遍历。
篇3:java面试问题及答案
1.J2EE是什么?(Java 2 Enterprise Edition, 中文为Java 2企业版本,由多种技术组成,主要的两大技术为Servlet技术和EJB技术,J2EE程序需要在J2EE容器内运行)
2.介绍JAVA中的Collection FrameWork(Java的Collection FrameWork包括两大接口,为Collection和Map。5.0版本增加了一个新的接口Queue。其中Collection又包括List和Set接口。其所有的标准实现类均在java.util包中定义。总体上来说,Map定义了键和值的对应关系,List定义了列表,Set定义了堆式。所以一般来说Map和Set为无序而List有序,但也有例外。)?
如COLLECTION中遗留类(HASHTABLE、VECTOR)和现有类的区别?(同步) 3.Java中异常处理机制,事件机制?
所有继承自Trowable的类的对象都可被抛出和捕获,继承它的Error接口表示错误,而Exception表示异常,继承自Exception下RuntimeException接口的类表示运行时异常,可以不被捕获。事件则一般采用接口来实现,接口内定义回调方法而实现该接口的类定义具体流程。
4.EJB与JAVA BEAN的区别?
EJB与JAVA BEAN是SUN的不同组件规范,EJB是在容器中运行的,分步式的,而JAVA BEAN主要是一种可利用的组件,主要在客户端UI表现上。
5.JAVA中的多形与继承?
可出编程,选择题。
6.抽象类与接口?
接口的好处是将实现与表现分离。
抽象类与接口都用于抽象,但是抽象类(JAVA中)可以有自己的部分实现,而接口则完全是一个标识(同时有多重继承的功能)。
7.Java 的通信编程,编程题(或问答),用JAVA SOCKET编程,读服务器几个字符,再写入本地显示?
8.JAVA SERVLET API中forward() 与redirect()的区别?
forward()是在容器内部对请求的转发,而redirect()使用的是HTTP协议在应答中将客户端
重新定向至所指定的URL。使用forward()时客户端不产生新的请求,而使用redirect()时客户端会产生一个新的请求。
9.JAVA解析XML的方式? SAX、DOM
10.用JAVA实现数据库查询,这是一道编程题。
11.用JAVA实现一种排序 ,比较,JAVA类实现序列化的方法(二种)?
如在COLLECTION框架中,实现比较要实现什么样的接口。
12.JSP中动态INCLUDE与静态INCLUDE的区别? 动态可以带参数,静态相当于一段静态HTML文件。
13.应用服务器与WEB SERVER的区别?
应用服务器侧重于对应用流程的实现,WEB SERVER侧重于对网络协议的实现。
14.设计模式与UML方面。
如工厂模式,解决多数据库支持问题。
15。 编程:编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。
但是要保证汉字不被截半个,如“我ABC”4,应该截为“我AB”,输入“我ABC汉DEF”,6,应该输出为“我ABC”而不是“我ABC+汉的半个”。
16。在ORACLE大数据量下的分页解决方法。 一般用截取ID方法,还有是三层嵌套方法。 17。WEB SERVICE名词解释。JSWDL开发包的介绍。JAXP、JAXM的解释。SOAP、UDDI解释。 18。BS与CS的联系与区别。 19。LINUX下线程,GDI类的解释。 20。JAVA多线程编程。
用JAVA写一个多线程程序,如写四个线程,二个加1,二个对一个变量减一,输出。 21。JAVA的基本功: STRING与STRINGBUFFER的区别。
22。STRUTS的应用(如STRUTS架构
JAVA方面
1 面向对象的特征有哪些方面 继承,多态,抽象,重载, 封装 2 String是最基本的数据类型吗? 不是
3 int 和 Integer 有什么区别 一个是基本类型,另一个是对象 4 String 和StringBuffer的区别 一个是非可变类,另一个是可变类 5运行时异常与一般异常有何异同?
异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误。java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。
6 说出一些常用的类,包,接口,请各举5个
7 说出ArrayList,Vector, LinkedList的存储性能和特性
ArrayList和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,Vector由于使用了synchronized方法(线程安全),通常性能上较ArrayList差,而LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。
8设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。写出程序。
以下程序使用内部类实现线程,对j增减的时候没有考虑顺序问题。 public class ThreadTest1{ private int j; public static void main(String args[]){ ThreadTest1 tt=new ThreadTest1(); Inc inc=tt.new Inc(); Dec dec=tt.new Dec(); for(int i=0;i<2;i++){ Thread t=new Thread(inc); t.start(); t=new Thread(dec); t.start(); } } private synchronized void inc(){ j++; System.out.println(Thread.currentThread().getName()+“-inc:”+j); } private synchronized void dec(){ j--; System.out.println(Thread.currentThread().getName()+“-dec:”+j); } class Inc implements Runnable{ public void run(){ for(int i=0;i<100;i++){ inc(); } } } class Dec implements Runnable{ public void run(){ for(int i=0;i<100;i++){ dec(); } } } }
9.JSP的内置对象及方法。
request request表示HttpServletRequest对象。它包含了有关浏览器请求的信息,并且提供了几个用于获取cookie, header, 和session数据的有用的方法。
response response表示HttpServletResponse对象,并提供了几个用于设置送回 浏览器的响应的方法(如cookies,头信息等)
out out 对象是javax.jsp.JspWriter的一个实例,并提供了几个方法使你能用于向浏览器回送输出结果。
pageContext pageContext表示一个javax.servlet.jsp.PageContext对象。它是用于方便存取各种范围的名字空间、servlet相关的对象的API,并且包装了通用的servlet相关功能的方法。
session session表示一个请求的javax.servlet.http.HttpSession对象。Session可以存贮用户的状态信息
application applicaton 表示一个javax.servle.ServletContext对象。这有助于查找有关servlet引擎和servlet环境的信息
config config表示一个javax.servlet.ServletConfig对象。该对象用于存取servlet实例的初始化参数。
page page表示从该页面产生的一个servlet实例
10.用socket通讯写出客户端和服务器端的通讯,要求客户发送数据后能够回显相同的数据。
参见课程中socket通讯例子。
11说出Servlet的生命周期,并说出Servlet和CGI的区别。
Servlet被服务器实例化后,容器运行其init方法,请求到达时运行其service方法,service方法自动派遣运行与请求对应的doXXX方法(doGet,doPost)等,当服务器决定将实例销毁的时候调用其destroy方法。
与cgi的区别在于servlet处于服务器进程中,它通过多线程方式运行其service方法,一个实例可以服务于多个请求,并且其实例一般不会销毁,而CGI对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于servlet。
12.EJB是基于哪些技术实现的?并说出SessionBean和EntityBean的区别,StatefulBean和StatelessBean的区别。
SessionBean用于提供对流程的处理,EntityBean提供对数据持久化的管理。StatefulBean有状态,StatelessBean无状态,一般来说StatelessBean速度较快但无法保持客户信息,StatefulBean速度较慢但可以保持客户状态。
13.EJB包括(SessionBean,EntityBean)说出他们的生命周期,及如何管理事务的?
无状态SessionBean的生命周期由容器自由决定。有状态SessionBean在客户需要时被创建,用完后销毁。EntityBean的生命周期也由容器决定,但是在它的不同阶段会根据需要来表示不同的数据内容。
14.说出数据连接池的工作机制是什么?
对表示数据库连接的对象进行包装并预先生成一定数量的连接,当用户请求数据库连接时,从池中选取一个当前不在使用的连接提交给用户。用户使用完成后关闭改连接,此时连接并不真正的被关闭,只是对事物进行提交或回滚等相应的操作,然后回到池中等待被下一次调用。
17你所知道的集合类都有哪些?主要方法? 查API
18给你一个:驱动程序A,数据源名称为B,用户名称为C,密码为D,数据库表为T,请用JDBC检索出表T的所有数据。
[java面试问题及答案]
篇4:java面试问题及答案
第一,谈谈final, finally, finalize的区别。
final—修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。因此一个类不能既被声明为 abstract的,又被声明为final的。将变量或方法声明为final,可以保证它们在使用中不被改变。被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改。被声明为final的方法也同样只能使用,不能重载
finally—再异常处理时提供 finally 块来执行任何清除操作。如果抛出一个异常,那么相匹配的 catch 子句就会执行,然后控制就会进入 finally 块(如果有的话)。
finalize—方法名。Java 技术允许使用 finalize 方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在 Object 类中定义的,因此所有的类都继承了它。子类覆盖 finalize() 方法以整理系统资源或者执行其他清理工作。finalize() 方法是在垃圾收集器删除对象之前对这个对象调用的。
第二,Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)?
匿名的内部类是没有名字的内部类。不能extends(继承) 其它类,但一个内部类可以作为一个接口,由另一个内部类实现。
第三,Static Nested Class 和 Inner Class的不同,说得越多越好(面试题有的很笼统)。
Nested Class (一般是C++的说法),Inner Class (一般是JAVA的说法)。Java内部类与C++嵌套类最大的不同就在于是否有指向外部的引用上。具体可见http: //www.frontfree.net/articles/services/view.asp?id=704&page=1
注: 静态内部类(Inner Class)意味着1创建一个static内部类的对象,不需要一个外部类对象,2不能从一个static内部类的一个对象访问一个外部类对象
第四,&和&&的区别。
&是位运算符。&&是布尔逻辑运算符。
第五,HashMap和Hashtable的区别。
都属于Map接口的类,实现了将惟一键映射到特定的值上。
HashMap 类没有分类或者排序。它允许一个 null 键和多个 null 值。
Hashtable 类似于 HashMap,但是不允许 null 键和 null 值。它也比 HashMap 慢,因为它是同步的。
第六,Collection 和 Collections的区别。
Collections是个java.util下的类,它包含有各种有关集合操作的静态方法。
Collection是个java.util下的接口,它是各种集合结构的父接口。
第七,什么时候用assert。
断言是一个包含布尔表达式的语句,在执行这个语句时假定该表达式为 true。如果表达式计算为 false,那么系统会报告一个 Assertionerror。它用于调试目的:
assert(a > 0); // throws an Assertionerror if a <= 0
断言可以有两种形式:
assert Expression1 ;
assert Expression1 : Expression2 ;
Expression1 应该总是产生一个布尔值。
Expression2 可以是得出一个值的任意表达式。这个值用于生成显示更多调试信息的 String 消息。
断言在默认情况下是禁用的。要在编译时启用断言,需要使用 source 1.4 标记:
javac -source 1.4 Test.java
要在运行时启用断言,可使用 -enableassertions 或者 -ea 标记。
要在运行时选择禁用断言,可使用 -da 或者 -disableassertions 标记。
要系统类中启用断言,可使用 -esa 或者 -dsa 标记。还可以在包的基础上启用或者禁用断言。
可以在预计正常情况下不会到达的任何位置上放置断言。断言可以用于验证传递给私有方法的参数。不过,断言不应该用于验证传递给公有方法的参数,因为不管是否启用了断言,公有方法都必须检查其参数。不过,既可以在公有方法中,也可以在非公有方法中利用断言测试后置条件。另外,断言不应该以任何方式改变程序的状态。
第八,GC是什么? 为什么要有GC? (基础)。
GC是垃圾收集器。Java 程序员不用担心内存管理,因为垃圾收集器会自动进行管理。要请求垃圾收集,可以调用下面的方法之一:
System.gc()
Runtime.getRuntime().gc()
第九,String s = new String(“xyz”);创建了几个String Object?
两个对象,一个是“xyx”,一个是指向“xyx”的引用对象s。
第十,Math.round(11.5)等於多少? Math.round(-11.5)等於多少?
Math.round(11.5)返回(long)12,Math.round(-11.5)返回(long)-11;
第十一,short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?
short s1 = 1; s1 = s1 + 1;有错,s1是short型,s1+1是int型,不能显式转化为short型。可修改为s1 =(short)(s1 + 1) 。short s1 = 1; s1 += 1正确。
第十二,sleep() 和 wait() 有什么区别? 搞线程的最爱
sleep()方法是使线程停止一段时间的方法。在sleep 时间间隔期满后,线程不一定立即恢复执行。这是因为在那个时刻,其它线程可能正在运行而且没有被调度为放弃执行,除非(a)“醒来”的线程具有更高的优先级
(b)正在运行的线程因为其它原因而阻塞。
wait()是线程交互时,如果线程对一个同步对象x 发出一个wait()调用,该线程会暂停执行,被调对象进入等待状态,直到被唤醒或等待时间到。
第十三,Java有没有goto?
Goto—java中的保留字,现在没有在java中使用。
第十四,数组有没有length()这个方法? String有没有length()这个方法?
篇5:40个Java面试问题和答案
40个Java集合面试问题和答案
1.Java集合框架是什么?说出一些集合框架的优点?
每种编程语言中都有集合,最初的Java版本包含几种集合类:Vector、Stack、HashTable和Array。
随着集合的广泛使用,Java1.2提出了囊括所有集合接口、实现和算法的集合框架。在保证线程安全的情况下使用泛型和并发集合类,Java已经经历了很久。它还包括在Java并发包中,阻塞接口以及它们的实现。
集合框架的部分优点如下:
(1)使用核心集合类降低开发成本,而非实现我们自己的集合类。
(2)随着使用经过严格测试的集合框架类,代码质量会得到提高。
(3)通过使用JDK附带的集合类,可以降低代码维护成本。
(4)复用性和可操作性。
2.集合框架中的泛型有什么优点?
Java1.5引入了泛型,所有的集合接口和实现都大量地使用它。泛型允许我们为集合提供一个可以容纳的对象类型,因此,如果你添加其它类型的任何元素,它会在编译时报错。这避免了在运行时出现ClassCastException,因为你将会在编译时得到报错信息。
泛型也使得代码整洁,我们不需要使用显式转换和instanceOf操作符。它也给运行时带来好处,因为不会产生类型检查的字节码指令。
3.Java集合框架的基础接口有哪些?
Collection为集合层级的根接口。一个集合代表一组对象,这些对象即为它的元素。Java平台不提供这个接口任何直接的实现。
Set是一个不能包含重复元素的集合。这个接口对数学集合抽象进行建模,被用来代表集合,就如一副牌。
List是一个有序集合,可以包含重复元素。你可以通过它的索引来访问任何元素。List更像长度动态变换的数组。
Map是一个将key映射到value的对象.一个Map不能包含重复的key:每个key最多只能映射一个value。
一些其它的接口有Queue、Dequeue、SortedSet、SortedMap和ListIterator。
4.为何Collection不从Cloneable和Serializable接口继承?
Collection接口指定一组对象,对象即为它的元素。如何维护这些元素由Collection的具体实现决定。
例如,一些如List的Collection实现允许重复的元素,而其它的如Set就不允许。很多Collection实现有一个公有的clone方法。然而,把它放到集合的所有实现中也是没有意义的。这是因为Collection是一个抽象表现。重要的是实现。
当与具体实现打交道的时候,克隆或序列化的语义和含义才发挥作用。所以,具体实现应该决定如何对它进行克隆或序列化,或它是否可以被克隆或序列化。
在所有的实现中授权克隆和序列化,最终导致更少的灵活性和更多的限制。特定的实现应该决定它是否可以被克隆和序列化。
5.为何Map接口不继承Collection接口?
尽管Map接口和它的实现也是集合框架的一部分,但Map不是集合,集合也不是Map。因此,Map继承Collection毫无意义,反之亦然。
如果Map继承Collection接口,那么元素去哪儿?Map包含key-value对,它提供抽取key或value列表集合的方法,但是它不适合“一组对象”规范。
6.Iterator是什么?
Iterator接口提供遍历任何Collection的接口。我们可以从一个Collection中使用迭代器方法来获取迭代器实例。迭代器取代了Java集合框架中的Enumeration。迭代器允许调用者在迭代过程中移除元素。
7.Enumeration和Iterator接口的区别?
Enumeration的速度是Iterator的两倍,也使用更少的内存。Enumeration是非常基础的,也满足了基础的需要。但是,与Enumeration相比,Iterator更加安全,因为当一个集合正在被遍历的时候,它会阻止其它线程去修改集合。
迭代器取代了Java集合框架中的Enumeration。迭代器允许调用者从集合中移除元素,而Enumeration不能做到。为了使它的功能更加清晰,迭代器方法名已经经过改善。
8.为何没有像Iterator.add()这样的方法,向集合中添加元素?
语义不明,已知的是,Iterator的协议不能确保迭代的次序。然而要注意,ListIterator没有提供一个add操作,它要确保迭代的顺序。
9.为何迭代器没有一个方法可以直接获取下一个元素,而不需要移动游标?
它可以在当前Iterator的顶层实现,但是它用得很少,如果将它加到接口中,每个继承都要去实现它,这没有意义。
10.Iterater和ListIterator之间有什么区别?
(1)我们可以使用Iterator来遍历Set和List集合,而ListIterator只能遍历List。
(2)Iterator只可以向前遍历,而LIstIterator可以双向遍历。
(3)ListIterator从Iterator接口继承,然后添加了一些额外的功能,比如添加一个元素、替换一个元素、获取前面或后面元素的索引位置。
**********
11.遍历一个List有哪些不同的方式?
List
//使用for-each循环
for(String obj : strList){
System.out.println(obj);
}
//using iterator
Iterator
while(it.hasNext()){
String obj = it.next();
System.out.println(obj);
}
使用迭代器更加线程安全,因为它可以确保,在当前遍历的集合元素被更改的时候,它会抛出ConcurrentModificationException,
12.通过迭代器fail-fast属性,你明白了什么?
每次我们尝试获取下一个元素的时候,Iterator fail-fast属性检查当前集合结构里的任何改动。如果发现任何改动,它抛出ConcurrentModificationException。Collection中所有Iterator的实现都是按fail-fast来设计的(ConcurrentHashMap和CopyOnWriteArrayList这类并发集合类除外)。
13.fail-fast与fail-safe有什么区别?
Iterator的fail-fast属性与当前的集合共同起作用,因此它不会受到集合中任何改动的影响。
Java.util包中的所有集合类都被设计为fail-fast的,而java.util.concurrent中的集合类都为fail-safe的。Fail-fast迭代器抛出ConcurrentModificationException,而fail-safe迭代器从不抛出ConcurrentModificationException。
14.在迭代一个集合的时候,如何避免ConcurrentModificationException?
在遍历一个集合的时候,我们可以使用并发集合类来避免ConcurrentModificationException,比如使用CopyOnWriteArrayList,而不是ArrayList。
15.为何Iterator接口没有具体的实现?
Iterator接口定义了遍历集合的`方法,但它的实现则是集合实现类的责任。每个能够返回用于遍历的Iterator的集合类都有它自己的Iterator实现内部类。
这就允许集合类去选择迭代器是fail-fast还是fail-safe的。比如,ArrayList迭代器是fail-fast的,而CopyOnWriteArrayList迭代器是fail-safe的。
16.UnsupportedOperationException是什么?
UnsupportedOperationException是用于表明操作不支持的异常。在JDK类中已被大量运用,在集合框架java.util.Collections.UnmodifiableCollection将会在所有add和remove操作中抛出这个异常。
17.在Java中,HashMap是如何工作的?
HashMap在Map.Entry静态内部类实现中存储key-value对。
HashMap使用哈希算法,在put和get方法中,它使用hashCode()和equals()方法。当我们通过传递key-value对调用put方法的时候,HashMap使用Key hashCode()和哈希算法来找出存储key-value对的索引。
Entry存储在LinkedList中,所以如果存在entry,它使用equals()方法来检查传递的key是否已经存在,如果存在,它会覆盖value,如果不存在,它会创建一个新的entry然后保存。
当我们通过传递key调用get方法时,它再次使用hashCode()来找到数组中的索引,然后使用equals()方法找出正确的Entry,然后返回它的值。下面的图片解释了详细内容。
其它关于HashMap比较重要的问题是容量、负荷系数和阀值调整。HashMap默认的初始容量是32,负荷系数是0.75。
阀值是为负荷系数乘以容量,无论何时我们尝试添加一个entry,如果map的大小比阀值大的时候,HashMap会对map的内容进行重新哈希,且使用更大的容量。容量总是2的幂,所以如果你知道你需要存储大量的key-value对,比如缓存从数据库里面拉取的数据,使用正确的容量和负荷系数对HashMap进行初始化是个不错的做法。
18.hashCode()和equals()方法有何重要性?
HashMap使用Key对象的hashCode()和equals()方法去决定key-value对的索引。当我们试着从HashMap中获取值的时候,这些方法也会被用到。如果这些方法没有被正确地实现,在这种情况下,两个不同Key也许会产生相同的hashCode()和equals()输出,HashMap将会认为它们是相同的,然后覆盖它们,而非把它们存储到不同的地方。
同样的,所有不允许存储重复数据的集合类都使用hashCode()和equals()去查找重复,所以正确实现它们非常重要。equals()和hashCode()的实现应该遵循以下规则:
(1)如果o1.equals(o2),那么o1.hashCode() == o2.hashCode()总是为true的。
(2)如果o1.hashCode() == o2.hashCode(),并不意味着o1.equals(o2)会为true。
篇6:java面试问题
question no: 1
publicclass test1 {
publicstaticvoid changestr(string str){
str=“welcome”;
}
publicstaticvoid main(string[] args) {
string str=“1234”;
changestr(str);
system.out.println(str);
}
}
//输出结果:1234
//这里虽然是一个静态方法,但是里面的变量是一个局部变量,
//所以这里不因为是静态方法,就误认为里面的变量也是静态变量了
question no:2
publicclass test2 {
staticboolean foo(char c) {
system.out.print(c);
returntrue;
}
publicstaticvoid main(string[] argv) {
int i = 0;
//for(65;88&&(i<2);67)
for (foo('a'); foo('b') && (i < 2); foo('c')) {
i++;
foo('d');
}
}
}
/*
what is the result?
a. abdcbdcb
b. abcdabcd
c. compilation fails.
d. an exception is thrown at runtime.
//输出结果是:abdcbdcb
分析:for循环里面讲究的条件要为真,与你的判断式是什么没有关系
就像这里,虽然是打印的字母,但是却不是false,所以可以执行
第一次进行循环:
foo('a')打印字母a,(注:这里不是false条件就默认为true条件)
foo('b')打印字母b,i=0,比较(i < 2),条件为true,进行循环体,foo('d')打印d
foo('c')打印字母c
第二次循环:
foo('b')打印b,i=1,比较(i < 2)为true,进行循环体,foo('d')打印d
foo('c')打印字母c
第三次循环:
foo('b')打印字母b,i=2,比较(i < 2)为false,退出循环,得结果
*/
篇7:java面试问题
你刚毕业,在一家公司实习了一个月。
面试人问:
你在这公司实习一个月学到了什么?
[java面试问题]
篇8:java程序员面试问题
1、谈谈final, finally, finalize的区别。
final―修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。因此一个类不能既被声明为 abstract的,又被声明为final的。将变量或方法声明为final,可以保证它们在使用中不被改变。被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改。被声明为final的方法也同样只能使用,不能重载
finally―再异常处理时提供 finally 块来执行任何清除操作。如果抛出一个异常,那么相匹配的 catch 子句就会执行,然后控制就会进入 finally 块(如果有的话)。
finalize―方法名。Java 技术允许使用 finalize 方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在 Object 类中定义的,因此所有的类都继承了它。子类覆盖 finalize() 方法以整理系统资源或者执行其他清理工作。finalize() 方法是在垃圾收集器删除对象之前对这个对象调用的。
2、Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)?
匿名的内部类是没有名字的内部类。不能extends(继承) 其它类,但一个内部类可以作为一个接口,由另一个内部类实现。
3、Static Nested Class 和 Inner Class的不同,说得越多越好(面试题有的很笼统)。
Nested Class (一般是C++的说法),Inner Class (一般是JAVA的说法)。Java内部类与C++嵌套类最大的不同就在于是否有指向外部的引用上。具体可见http: //www.frontfree.net/articles/services/view.asp?id=704&page=1
注: 静态内部类(Inner Class)意味着1创建一个static内部类的对象,不需要一个外部类对象,2不能从一个static内部类的一个对象访问一个外部类对象
Hashtable继承自Dictionary类,而HashMap是Java1.2引进的Map interface的一个实现
HashMap允许将null作为一个entry的key或者value,而Hashtable不允许
还有就是,HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因为contains方法容易让人引起误解。
最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在
多个线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap
就必须为之提供外同步。
4、&和&&的区别。
&是位运算符。&&是布尔逻辑运算符。
5、HashMap和Hashtable的区别。
都属于Map接口的类,实现了将惟一键映射到特定的值上。
HashMap 类没有分类或者排序。它允许一个 null 键和多个 null 值。
Hashtable 类似于 HashMap,但是不允许 null 键和 null 值。它也比 HashMap 慢,因为它是同步的。
Hashtable继承自Dictionary类,而HashMap是Java1.2引进的Map interface的一个实现
还有就是,HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因为contains方法容易让人引起误解。
最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在
多个线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap
就必须为之提供外同步。
6、Collection 和 Collections的区别。
Collections是个java.util下的类,它包含有各种有关集合操作的静态方法。
Collection是个java.util下的接口,它是各种集合结构的父接口.
7、什么时候用assert。
断言是一个包含布尔表达式的语句,在执行这个语句时假定该表达式为 true。如果表达式计算为 false,那么系统会报告一个 AssertionError。它用于调试目的:
assert(a > 0); // throws an AssertionError if a <= 0
断言可以有两种形式:
assert Expression1 ;
assert Expression1 : Expression2 ;
Expression1 应该总是产生一个布尔值。
Expression2 可以是得出一个值的任意表达式。这个值用于生成显示更多调试信息的 String 消息。
断言在默认情况下是禁用的。要在编译时启用断言,需要使用 source 1.4 标记:
javac -source 1.4 Test.java
要在运行时启用断言,可使用 -enableassertions 或者 -ea 标记。
要在运行时选择禁用断言,可使用 -da 或者 -disableassertions 标记。
要系统类中启用断言,可使用 -esa 或者 -dsa 标记。还可以在包的基础上启用或者禁用断言。
可以在预计正常情况下不会到达的任何位置上放置断言。断言可以用于验证传递给私有方法的参数。不过,断言不应该用于验证传递给公有方法的参数,因为不管是否启用了断言,公有方法都必须检查其参数。不过,既可以在公有方法中,也可以在非公有方法中利用断言测试后置条件。另外,断言不应该以任何方式改变程序的状态。
8、GC是什么? 为什么要有GC? (基础)。
GC是垃圾收集器。Java 程序员不用担心内存管理,因为垃圾收集器会自动进行管理。要请求垃圾收集,可以调用下面的方法之一:
System.gc()
Runtime.getRuntime().gc()
9、String s = new String(“xyz”);创建了几个String Object?
两个对象,一个是“xyx”,一个是指向“xyx”的引用对象s。
10、Math.round(11.5)等于多少? Math.round(-11.5)等于多少?
Math.round(11.5)返回(long)12,Math.round(-11.5)返回(long)-11;
11、short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?
short s1 = 1; s1 = s1 + 1;有错,s1是short型,s1+1是int型,不能显式转化为short型。可修改为s1 =(short)(s1 + 1) 。short s1 = 1; s1 += 1正确。
12、sleep() 和 wait() 有什么区别? 搞线程的最爱
sleep()方法是使线程停止一段时间的方法。在sleep 时间间隔期满后,线程不一定立即恢复执行。这是因为在那个时刻,其它线程可能正在运行而且没有被调度为放弃执行,除非(a)“醒来”的线程具有更高的优先级
(b)正在运行的线程因为其它原因而阻塞。
wait()是线程交互时,如果线程对一个同步对象x 发出一个wait()调用,该线程会暂停执行,被调对象进入等待状态,直到被唤醒或等待时间到。
13、Java有没有goto?
Goto―java中的保留字,现在没有在java中使用。
14、数组有没有length()这个方法? String有没有length()这个方法?
数组没有length()这个方法,有length的属性。
String有有length()这个方法。
15、Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型?
方法的重写Overriding和重载Overloading是Java多态性的不同表现。重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被“屏蔽”了。如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。Overloaded的方法是可以改变返回值的类型。
16、Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别?
Set里的元素是不能重复的,那么用iterator()方法来区分重复与否。equals()是判读两个Set是否相等。
equals()和==方法决定引用值是否指向同一对象equals()在类中被覆盖,为的是当两个分离的对象的内容和类型相配的话,返回真值。
17、给我一个你最常见到的runtime exception。
ArithmeticException, ArrayStoreException, BufferOverflowException, BufferUnderflowException, CannotRedoException, CannotUndoException, ClassCastException, CMMException, ConcurrentModificationException, DOMException, EmptyStackException, IllegalArgumentException, IllegalMonitorStateException, IllegalPathStateException, IllegalStateException,
ImagingOpException, IndexOutOfBoundsException, MissingResourceException, NegativeArraySizeException, NoSuchElementException, NullPointerException, ProfileDataException, ProviderException, RasterFormatException, SecurityException, SystemException, UndeclaredThrowableException, UnmodifiableSetException, UnsupportedOperationException
18、error和exception有什么区别?
error 表示恢复不是不可能但很困难的情况下的一种严重问题。比如说内存溢出。不可能指望程序能处理这样的情况。
exception 表示一种设计或实现问题。也就是说,它表示如果程序运行正常,从不会发生的情况。
19、List, Set, Map是否继承自Collection接口?
List,Set是
Map不是
20、abstract class和interface有什么区别?
声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例。不能有抽象构造函数或抽象静态方法。Abstract 类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类为。取而代之,在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法。
接口(interface)是抽象类的变体。在接口中,所有方法都是抽象的。多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽象的,没有一个有程序体。接口只可以定义static final成员变量。接口的实现与
[java程序员面试问题]
篇9:java开发面试问题
Java基础方面:
1,作用域public,protected,private,以及不写时的区别
2,ArrayList和Vector的区别,HashMap和Hashtable的区别
3,char型变量能不能定义为一个中文?为什么?
4,多线程有几种表示方法,都是什么?同步有几种实现方法,都是什么?
5,继承时候类的执行顺序问题,一般都是选择题,问你将会打印出什么?
6,内部类的实现方式?
7,垃圾回收机制,如何优化程序?
8,float型float f=3.4是否正确?
Jsp方面
1,jsp有哪些内置对象?作用分别是什么?
2,jsp有哪些动作?作用分别是什么?
3,include的两种实现方式的区别?
4,两种跳转方式分别是什么?有什么区别?
Servlet方面
1,说一说Servlet的生命周期?
2,Servlet版本间(忘了问的是哪两个版本了)的不同?
篇10:java开发面试问题
第一面
项目:
1、找一个项目,介绍下情况。其中遇到了什么问题,每种问题怎么样的解决方案。
算法题:
2、一个排好序的数组,找出两数之和为m的所有组合
3、自然数序列,找出任意连续之和等于n的所有子序列
数据结构:
4、从数据库查出一个数据结果集,其中有一个时间字段,请用一个数据结构存储使得可以最快速的查出某个时间段内的记录。
5、上一题我提到了B+树,他就继续问了为何用B+树实现索引而不用二叉树
数据库:
6、说说Oracle数据库的事务隔离级别,以及遇到的相关问题
这个我说了标准的四种级别,Oracle实现的三种级别,并概述了下多版本读一致性
项目相关技术:
7、看到简历上写了个rpc,讲讲,我说了跟rmi比较像,说了异同点,然后又展开到内存分配的问题,不过没搞懂他到底要说什么。还问题java客户端跟c程序服务端的通信情况,比如说c那边直接一个结构体过来,怎么处理,答曰没遇到过。
8、简历上写的jvm性能调优,说说都做了什么事情
9、说到jvm的时候,说到了我们用windows开发,就问linux的脚本知道么,awk用过么
10、简历上写web框架开发维护,就问浏览器端跟服务器端如何通信,不过最后只落到了java对象如何传递到客户端,客户端数据如何传递到服务端。
java基础:
11、并发同步的问题,synchorized是如何使用,Object的wait、notify方法什么作用
框架:
12、是否了解spring,ioc的实现,aop的实现方案,各种方案有什么限制
第二面
项目:
1、介绍下你做的项目,稍微高层次一些的介绍下,意思是不要没完没了的介绍
其中提到了主实例集群节点与主实例备用节点的单例状态如何保持同步
2、rpc通信和rmi区别
3、并发访问同一条数据的时候,如何保证数据同步。
4、网站性能优化都做了什么,具体的?ETag、Last-Modified、Expires、Cache-Control
5、最近看什么书,印象最深刻的是什么?
算法:
6、二叉树,找两个节点的最底层的公共父节点,给思路
7、单向链表反转,写代码
第三面(就记了这么多)
自我介绍:
1、个人基本情况,顺便提到项目,就开始扯了几下
数据库:
2、数据库性能优化有做么?做了些什么?
设计:
3、设计一个小商店进销存系统的的表结构设计,老板每天要知道卖出的货物,要定期查看货物的成本、销售额和利润。
这里要注意,重点之一是如何进行成本计算,要知道成本计算的几种方法,选其中一种实现,这个会影响表结构的设计
算法:
4、1到1亿的自然数,求所有数的拆分后的数字之和,如286 拆分成2、8、6,如1到11拆分后的数字之和 => 1 + ... + 9 + 1 + 0 + 1 + 1。
之前去百度面试,整理了一下面试问题。没有笔试,直接和面试官交谈。感觉面试官人挺好的,挺有耐心,每次面试回来不论公司大小,不管能不能拿到offer,但基本都能有一些有价值的输入,还挺开心的。我虽然有4年工作经验,但是不是走纯技术系的,开发,维护,见客户,项目管理什么都干过,最近想换工作,粪发图强恶补算法,数据结构一类大公司特爱考的基础知识。
这次后几道题答的不好。尤其是有一个关于服务器session优化和数据库表水平拆分策略的,没说到点儿上,回来的路上有了点儿思路,回来百度一下,发现八九不离十。前面几个算法的也都是磕磕碰碰,好歹都说上来了,是不是最优的就不好说了。
以前做信息系统,更注重业务的获取与功能的实现,虽然所有人都喊性能、架构什么的,但是实际上没人在乎。反正撑死了也就那么点儿人用。互联网公司真的是不一样啊,对并发和大数据量的关注是深入骨髓的。感觉真是惭愧。虽然这几年跑客户谈需求讲ppt自诩也是混场面的,但是从心里希望自己在技术上也能再往前走一步。
根据记忆整理如下:
1. 有一个集合a,里面有n个正整数,乱序排列。给定一个正整数N,求,a中任意两个数相加等于N,共有哪些种组合情况。例如,集合为{1,3,44,2,4,5,54,222,368} N=6,则结果集为{1,5},{2,4}
这个题网上有类似的
2. Treemap的实现。
各种集合类的结构和优缺点,大家都挺爱考的。以前做行业信息化,没什么感觉,但是如果很在意性能,搞清楚还是挺有用的。
3. 有两个很大的文件,每个文件中都有1亿行,每行一个整数。问这两个集合的交集是什么。给定的前提是机器内存不足以完全装入任意一个文件。
这个几乎是网上的原题了
4. 堆和栈的定义,堆和栈里面的对象,哪个运行速度快。
还问了一些衍生的问题,记不清了,只要看清楚java教材关于这方面的介绍足矣
5. 为了实现一个折线图,需要将数据存入一种数据结构,折线图横坐标是时间,纵坐标是值,经常的查询是按时间段进行查询,如select value from t where begin>’0101’ and end<’20111212’ ,问,使用java中的那种数据结构比较好。
还是考java中的各种集合类,本质上是问各种数据结构在顺序/随机的读取/插入上的效率
6. 数据库的索引通常用什么数据结构实现?为什么用这种数据结构。
就知道是btree,但是btree是咋回事,为啥不能用其他tree或者别的结构,这个看过一篇帖子以后才明白。算是学习了。
7. 如果数据库中有2个表,表a字段为姓名、年龄,表b字段为姓名、单位。现在使用姓名字段做left join查询,假设姓名字段都有索引了。问数据库是怎么实现的。如果把这两个表看为在内存中的数组,要自己实现left join,怎么实现?
面试官看我实在不知道数据库里leftjoin怎么实现的,就让我自己实现一个内存中的,勉强答出来了吧,但是可能不太好。
8. 数据库各种事务隔离级别
这个是纯不记得了,以前工作中从来用不到,真是汗颜。
9. wait方法和notify()方法干什么用的,wait()方法有什么使用限制,是哪儿都能用么?
对于一个从来不用多线程的人,这么简单的问题也变得有点儿难。只知道干什么用的,不知道有什么限制。
10. 数据库中有一个表有上亿的数据量,怎么优化?(主要是拆分,除了按业务拆分外,还有什么从技术角度的,可扩展性好的水平拆分方式)
思路是拆没错,但是面试官问的不是业务拆分策略,而是从技术上考虑。还得考虑扩展性,比如拆好以后,数据量增长迅速,又要拆了,怎么办。这个水平拆分策略有好多,网上能搜到。但是我说的都不是很有体系,以前没弄过,都是现场想。。
ps:当时上新东方的时候,老师说,有的时候虽然你英语不好,但是有几个单词只要你记住了,说的时候塞到句子里,人家就会觉得你特地道,
比如absolutely之流。我觉得面试的时候也有这种key words,比如位排序之流,说的时候还得特举重若轻。适用于各类新手和平时工作中压根用不到各种排序算法的人,
主题:淘宝北京专场java面试题(2011-12-31)
第一面
1、说说项目
由于我几年一直做一个产品,从后台做到前台,从业务开发做到技术平台,所以就画了整个产品部署架构图,b/s & c/s的,然后一层层的讲解。
B/S现有Web框架改造、浏览器缓存、c/s补丁下载各种方式、cdn、c/s通信协议、rpc集群、http集群、负载均衡、集群前置机调度、后端服务器主从实例、后端服务器各种优化(异步、性能隔离)、数据库服务器各种优化(索引、物化视图、读写分离、帐套结转、数据库横向切分、纵向切分)、层间调用性能监控的实现,对照产品架构图各个部分一路讲下来。
2、http集群方案,我们的是反向代理服务器,自己有写代理服务器,也可以用主流的web服务器,然后面试官就问ngnix、lighttpd、apache三大主流web服务器的区别...辶恕!!
3、如果有机会重新设计你们的产品,你会怎么做?
这个当时回答的不好,主要从通信协议和数据存储两块来说了,这样说有些片面。因为我们产品本身又很多问题,只通过部署架构图是反映不出来的,如二次开发问题、补丁下载问题、不同模块java包相互依赖问题、技术框架比较封闭、构建系统方案落后、文档缺失等,我们内部经历过很多的痛苦的,但是当时思维局限在了部署架构,所以没有说出这些问题。
第二面
4、网站性能优化如何优化的?
自己一点网站性能优化经历,结合《构建高性能Web站点》,扯了一通,跟一面有点类似。
5、本来要花产品架构图,我翻过简历,后边有一面时候画的,就没要画了。然后就要我在黑板(暂且叫做黑板)上画jvm体系结构。
画了jvm体系结构,讲解了jvm各个组件和组件的交互、GC算法、各种垃圾收集器、运行期优化、产品中遇到的与jvm相关的问题如oom、ClassLoader问题等,并针对HotSpot VM的实现讲解了堆、非堆内存划分
第三面(HR面)
6、看我面过b2b和支付宝,问了下情况
b2b面完了,但是没过;支付宝过了2面
7、个人优缺点
8、是否愿意来杭州
第四面(视频电话面,杭州某大牛)
9、介绍项目。对于Web框架的改造,跟原有框架的异同
10、下班后的时间有学习技术么
11、是否参加过开源项目
[java开发面试问题]
篇11:java面试宝典完整版(所有面试问题及答案)
一. Java基础部分......................................................................................................2
1、一个“.java”源文件中是否可以包括多个类(不是内部类)?有什么限制?.....2
2、Java有没有goto?..........................................................................................2
3、说说&和&&的区别。......................................................................................2
4、在JAVA中如何跳出当前的多重嵌套循环?...................................................2
5、switch语句能否作用在byte上,能否作用在long上,能否作用在String上?...2
6、short s1 =1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?..................2
7、char型变量中能不能存贮一个中文汉字?为什么?............................................2
8、用最有效率的方法算出2乘以8等於几?2
9、请设计一个一百亿的计算器..........................................................................2
10、使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变?2
11、“==”和equals方法究竟有什么区别?...........................................................2
12、静态变量和实例变量的区别?.....................................................................2
13、是否可以从一个static方法内部发出对非static方法的调用?........................2
14、Integer与int的区别.....................................................................................2
15、Math.round(11.5)等於多少?Math.round(-11.5)等於多少?...............................2
16、下面的代码有什么不妥之处?.......................................................................2
17、请说出作用域public,private,protected,以及不写时的区别.......................2
18、Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型?2
19、构造器Constructor是否可被override?..........................................................2
20、接口是否可继承接口?抽象类是否可实现(implements)接口?抽象类是否可继承具体类(concreteclass)?抽象类中是否可以有静态的main方法?.......................................................................2
21、写clone()方法时,通常都有一行代码,是什么?.........................................2
22、面向对象的特征有哪些方面.........................................................................2
23、java中实现多态的机制是什么?..................................................................2
24、abstractclass和interface有什么区别?...........................................................2
25、abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized?2
26、什么是内部类?StaticNested Class 和 Inner Class的不同。..........................2
27、内部类可以引用它的包含类的成员吗?有没有什么限制?...........................2
28、AnonymousInner Class (匿名内部类)是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)?...................................................................................................................2
29、super.getClass()方法调用.....................................................................2
30、String是最基本的数据类型吗?.....................................................................2
31、String s = “Hello”;s = s + “ world!”;这两行代码执行后,原始的String对象中的内容到底变了没有? 2
32、是否可以继承String类?..............................................................................2
33、String s =new String(“xyz”);创建了几个String Object?二者之间有什么区别? 2
34、String和StringBuffer的区别.......................................................................2
35、如何把一段逗号分割的字符串转换成一个数组?...........................................2
36、数组有没有length()这个方法?String有没有length()这个方法?...................2
37、下面这条语句一共创建了多少个对象:Strings=“a”+“b”+“c”+“d”;.................2
38、try {}里有一个return语句,那么紧跟在这个try后的finally{}里的code会不会被执行,什么时候被执行,在return前还是后?.................................................................................................2
39、下面的程序代码输出的结果是多少?...........................................................2
40、final,finally, finalize的区别。......................................................................2
41、运行时异常与一般异常有何异同?..............................................................2
42、error和exception有什么区别?.....................................................................2
43、Java中的异常处理机制的简单原理和应用。................................................2
44、请写出你最常见到的5个runtimeexception。...............................................2
45、JAVA语言如何进行异常处理,关键字:throws,throw,try,catch,finally分别代表什么意义?在try块中可以抛出异常吗?............................................................................................................2
46、java中有几种方法可以实现一个线程?用什么关键字修饰同步方法? stop()和suspend()方法为何不推荐使用?..........................................................................................................................2
47、sleep()和 wait() 有什么区别?.....................................................................2
48、同步和异步有何异同,在什么情况下分别使用他们?举例说明。.................2
49.下面两个方法同步吗?(自己发明)...........................................................2
50、多线程有几种实现方法?同步有几种实现方法?.............................................2
51、启动一个线程是用run()还是start()?............................................................2
52、当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法? 2
53、线程的基本概念、线程的基本状态以及状态之间的关系...............................2
54、简述synchronized和java.util.concurrent.locks.Lock的异同?.......................2
55、设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。写出程序。 2
56、子线程循环10次,接着主线程循环100,接着又回到子线程循环10次,接着再回到主线程又循环100,如此循环50次,请写出程序。..................................................................................2
57、介绍Collection框架的结构..........................................................................2
58、Collection框架中实现比较要实现什么接口..................................................2
59、ArrayList和Vector的区别............................................................................2
60、HashMap和Hashtable的区别.......................................................................2
61、List和 Map 区别?......................................................................................2
62、List, Set,Map是否继承自Collection接口?....................................................2
63、List、Map、Set三个接口,存取元素时,各有什么特点?............................2
64、说出ArrayList,Vector,LinkedList的存储性能和特性......................................2
65、去掉一个Vector集合中重复的元素..............................................................2
66、Collection和 Collections的区别。...............................................................2
67、Set里的元素是不能重复的,那么用什么方法来区分重复与否呢?是用==还是equals()?它们有何区别? 2
68、你所知道的集合类都有哪些?主要方法?....................................................2
69、两个对象值相同(x.equals(y)== true),但却可有不同的hash code,这句话对不对? 2
70、TreeSet里面放对象,如果同时放入了父类和子类的实例对象,那比较时使用的是父类的compareTo方法,还是使用的子类的compareTo方法,还是抛异常!.................................................2
71、说出一些常用的类,包,接口,请各举5个...................................
[java面试宝典最新完整版(所有面试问题及答案)]
- 销售面试问题与答案2022-12-28
- 报社面试问题及答案2023-09-30
- 银行面试问题及答案2022-12-19
- 面试会计问题及答案2022-12-11
- 文员面试问题答案2023-03-01
- 财务经理面试问题及答案2023-03-07
- 应聘面试问题及答案2023-10-31
- 常见的面试问题及答案2024-03-15
- 英文面试问题与答案2024-08-19
- 的英语面试问题及答案2024-05-10