java面试题选择题3篇
java面试题选择题1
(1)下列关于栈的描述中错误的是( B)
A. 栈是先进后出的线性表
B 栈只能顺序存储
C 栈具有记忆作用
D 对栈的插入弓删除操作中,不需要改变栈底指针
正确答案: B
分析: 栈是链式存储的
(2)对于长度为n的线性表,在最坏情况下,下列各排序法所对应的比较次数中正确的是( )
A 冒泡排序为n/2
B 冒泡排序为n
C 快速排序为n
D 快速排序为n(n-l)/2
正确答案: D
分析:
想想快速排序,每次都会选取线性表的轴值,随后以此轴值划分为两个子线性表再分别进行快排,在最坏情况下,也就是说每次选出的线性表轴值完全不能将这个线性表划分为两个子线性表。那么此时快速排序退化为冒泡排序了。
那么第一趟排序时,轴值(线性表的中间位置)被选出,这个值绝对是这个线性表中最大的(不然也不能是最坏情况),其他值都比他小,那么线性表现在分为完全不对等的两段(一段是0,另一段是n - 1),一段是这个值,一段是其他值。同样第二趟排序在刚才剩下的值中选中间值(剩余值中最大的那个),又分为不对等两段,依次递推。也就是说每次都比较了N - 1个元素(轴值选出后都与它比较大小),那么肯定是比较了n - 1次(如第一次先挑了个轴值,然后剩下n - 1比较),n**当前子线性表中元素个数 由此最白痴的数列问题出现了,如下
1 + 2 + 3 + .......... + n - 2 + n - 1 = n(n - 1) / 2
还有一种投机取巧的方法,在最垃圾情况下既然快排变为冒泡,那由时间复杂度知其必为o(n ^ 2)的复杂度,答案中ABC都是线性时间复杂,显然错误
(3)下列对于线性链表的描述中正确的是( )
A 存储空间间不一定是连续,且各元素的存储顺序是任意的
B 存储空间不一定是连续,且前件元素一定存储在后件元素的前面
C 存储定间必须连续,且前件元素一定存储在后件元素的前面
D 存储空间必须连续,且各元素的存储顺序是任意的
答案是A, 分析 链接存储并不要求存储空间连续,存储位置也不用有序
(4)为了使模块爆可能**,要求( )
A 模块的内聚程度要尽量高,且各模块间的耦合程度要尽量强
B 模块的内聚程度要尽量高,且各模块间的耦合程度要尽量弱
C 模块的内聚程度要尽量低,且各模块间的耦合程度要尽量弱
D 模块的内聚程度要尽量低,且各模块间的耦合程度要尽量强 f
答案:B
分析:高内聚,低耦合。
(5)下列叙述中,正确的是( )
A Java语言的`标识符是区分大小写的
B 源文件名与public类名可以不相同
C 源文件扩展名为.jar
D 源文件中public类的数目不限
答案:A
java面试题选择题2
(1)下列属于合法的Java标识符是( )
A _cat
B 5books
C +static
D -3.14159
答案:A
(2) 在Java中,表示换行符的转义字符是( )
A n
B f
C ‘n’
D dd
答案:A
( 3)扯Java中,所有类的根类是( )
A. java.lang.Object
B.java.lang.Class
C.java.applet.Applet
D.java.awt.Frame
答案:A
(4).在Java+中,用Package语句说明一个包时,该包的层次结构必须是( )
A 与文件的结构相同
B 与文件目录的层次相同 )
C 与文件类型相同
D 与文件大小相同
答案:A
(5)在读字符文件Employee.dat时,使用该文件作为参数的类是( )。
A BufferReader
B DatalnputStream
C DataOutoutStream
D FileInputStream
答案:D
java面试题选择题3篇扩展阅读
java面试题选择题3篇(扩展1)
——java面试题3篇
java面试题1
1、&和&&的区别?
答:&运算符有两种用法:(1)按位与;(2)逻辑与。&&运算符是短路与运算。逻辑与跟短路与的差别是非常巨大的,虽然二者都要求运算符左右两端的布尔值都是true整个表达式的值才是true。&&之所以称为短路运算是因为,如果&&左边的表达式的值是false,右边的表达式会被直接短路掉,不会进行运算。很多时候我们可能都需要用&&而不是&,例如在验证用户登录时判定用户名不是null而且不是空字符串,应当写为:username != null &&!username.equals(""),二者的顺序不能交换,更不能用&运算符,因为第一个条件如果不成立,根本不能进行字符串的equals比较,否则会产生NullPointerException异常。注意:逻辑或运算符(|)和短路或运算符(||)的差别也是如此。
补充:如果你熟悉JavaScript,那你可能更能感受到短路运算的强大,想成为JavaScript的高手就先从玩转短路运算开始吧。
2、解释内存中的栈(stack)、堆(heap)和静态区(static area)的用法。
答:通常我们定义一个基本数据类型的变量,一个对象的引用,还有就是函数调用的现场保存都使用内存中的栈空间;而通过new关键字和构造器创建的对象放在堆空间;程序中的字面量(literal)如直接书写的100、"hello"和常量都是放在静态区中。栈空间操作起来最快但是栈很小,通常大量的对象都是放在堆空间,理论上整个内存没有被其他进程使用的空间甚至硬盘上的虚拟内存都可以被当成堆空间来使用。
String str = new String("hello");
上面的语句中变量str放在栈上,用new创建出来的字符串对象放在堆上,而"hello"这个字面量放在静态区。
补充:较新版本的Java(从Java 6的某个更新开始)中使用了一项叫"逃逸分析"的技术,可以将一些局部对象放在栈上以提升对象的操作性能。
3、Math.round(11.5) 等于多少?Math.round(-11.5)等于多少?
答:Math.round(11.5)的返回值是12,Math.round(-11.5)的返回值是-11。四舍五入的原理是在参数上加0.5然后进行下取整。
4、swtich 是否能作用在byte 上,是否能作用在long 上,是否能作用在String上?
答:在Java 5以前,switch(expr)中,expr只能是byte、short、char、int。从Java 5开始,Java中引入了枚举类型,expr也可以是enum类型,从Java 7开始,expr还可以是字符串(String),但是长整型(long)在目前所有的版本中都是不可以的。
java面试题2
1、数组有没有length()方法?String有没有length()方法?
答:数组没有length()方法,有length 的属性。String 有length()方法。JavaScript中,获得字符串的长度是通过length属性得到的,这一点容易和Java混淆。
2、在Java中,如何跳出当前的多重嵌套循环?
答:在最外层循环前加一个标记如A,然后用break A;可以跳出多重循环。(Java中**带标签的break和continue语句,作用有点类似于C和C++中的goto语句,但是就像要避免使用goto一样,应该避免使用带标签的break和continue,因为它不会让你的程序变得更优雅,很多时候甚至有相反的作用,所以这种语法其实不知道更好)
3、构造器(constructor)是否可被重写(override)?
答:构造器不能被继承,因此不能被重写,但可以被重载。
4、两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对?
答:不对,如果两个对象x和y满足x.equals(y) == true,它们的哈希码(hash code)应当相同。Java对于eqauls方法和hashCode方法是这样规定的:(1)如果两个对象相同(equals方法返回true),那么它们的.hashCode值一定要相同;(2)如果两个对象的hashCode相同,它们并不一定相同。当然,你未必要按照要求去做,但是如果你违背了上述原则就会发现在使用容器时,相同的对象可以出现在Set集合中,同时增加新元素的效率会**下降(对于使用哈希存储的系统,如果哈希码频繁的冲突将会造成存取性能急剧下降)。
java面试题3
问题1:GregorianCalendar类是什么东西?
答案:GregorianCalendar提供了**传统日历的**。
问题2:ResourceBundle类是什么?
答案:ResourceBundle用来存储指定语言环境的资源,应用程序可以根据运行时的语言环境来加载这些资源,从而提供不同语言的展示。
问题3:为什么Java里没有全局变量?
答案:全局变量是全局可见的',Java不**全局可见的变量,因为:全局变量破坏了引用透明性原则。全局变量导致了命名空间的冲突。
问题4:SimpleTimeZone类是什么?
答案:SimpleTimeZone提供公历日期**。
问题5:while循环和do循环有什么不同?
答案:while结构在循环的开始判断下一个迭代是否应该继续。do/while结构在循环的结尾来判断是否将继续下一轮迭代。do结构至少会执行一次循环体。
问题6:Locale类是什么?
答案:Locale类用来根据语言环境来动态调整程序的输出。
问题7:面向对象编程的原则是什么?
答案:主要有三点,多态,继承和封装。
问题8:介绍下继承的原则
答案:继承使得一个对象可以获取另一个对象的属性。使用继承可以让已经测试完备的功能得以复用,并且可以一次修改,所有继承的地方都同时生效。
java面试题选择题3篇(扩展2)
——android面试题选择题3篇
android面试题选择题1
1. 下列哪些语句关于内存回收的说明是正确的? (b )
A、程序员必须创建一个线程来**内存
B、内存回收程序负责**无用内存
C、内存回收程序允许程序员直接**内存
D、内存回收程序可以在指定的时间**内存对象
2. 下面异常是属于Runtime Exception 的是( abcd)(多选)
A、ArithmeticException
B、IllegalArgumentException
C、NullPointerException
D、BufferUnderflowException
3. Math.round(11.5)等于多少()?Math.round(-11.5)等于多少(c).
A、11 ,-11 B、11 ,-12 C、12 ,-11 D、12 ,-12
4. 下列程序段的输出结果是:(b)
void complicatedexpression_r(){
int x=20, y=30;
boolean b;
b=x>50&&y>60||x>50&&y<-60||x<-50&&y>60||x<-50&&y<-60;
System.out.println(b);
}
A、trueB、 falseC、 1D、0
5. 对一些资源以及状态的操作保存,最好是保存在Activity生命周期的哪个函数中进行(d)
A、onPause() B、onCreate() C、onResume() D、onStart()
6. Intent传递数据时,下列的数据类型哪些可以被传递( abcd)(多选)
A、Serializable B、charsequence C、Parcelable D、Bundle
(可序列化) (字符序列) (绑定)
7. android 中下列属于Intent的作用的是(c)
A、实现应用程序间的数据共享
B、是一段长的生命周期,没有用户界面的程序,可以保持应用在**运行,而不会因为 切换页面而消失
C、可以实现界面间的切换,可以包含动作和动作数据,连接四大组件的纽带
D、处理一个应用程序整体性的工作
8. 下列属于SAX解析xml文件的优点的是(b)
A、将整个文档树在内存中,便于操作,**删除,修改,重新排列等多种功能(dom 解析优点)
B、不用事先**整个文档,占用资源少(sax 解析优点)
C、整个文档**内存,浪费时间和空间(dom 解析缺点)
D、不是长久驻留在内存,数据不是持久的,事件过后,若没有保存数据,数据就会
说明:不需要像dom 解析那样在内存中建立一个dom 对象,占用内存,sax 解析是逐行解析的,每次读入内存的只是一行xml,所以速度快,效率高点。不过sax 一般是处理固定格式的xml。
9. 在android中使用Menu时可能需要重写的方法有( ac)。(多选)
A、onCreateOptionsMenu()
B、onCreateMenu()
C、onOptionsItemSelected()
D、onItemSelected()
说明:
//当客户点击MENU 按钮的时候,调用该方法
public boolean onCreateOptionsMenu(Menu menu)
//当客户点击菜单当中的某一个选项时,会调用该方法
public boolean onOptionsItemSelected(MenuItem item)
android面试题选择题2
1. 在SQLServer Management Studio 中运行下列T-SQL语句,其输出值( c)。 SELECT @@IDENTITY
A、可能为0.1
B、可能为3
C、不可能为-100
D、肯定为0
@@identity 是表示的是最近一次向具有identity 属性(即自增列)的表插入数据时对应的自增列的值,是系统定义的全局变量。一般系统定义的全局变量都是以@@开头,用户自定义变 量以@开头。比如有个表A,它的自增列是id ,当向A 表插入一行数据后,如果插入数据 后自增列的值自动增加至101,则通过select @@identity 得到的值就是101。使用@@identity的前提是在进行insert 操作后,执行select @@identity 的时候连接没有关闭,否则得到的将是NULL 值。
2. 在SQLServer 2005中运行如下T-SQL语句,假定SALES表中有多行数据,执行查询之后的结果是(d)。
BEGIN TRANSACTION A
Update SALES Set qty=30 WHERE qty<30
BEGIN TRANSACTION B
Update SALES Set qty=40 WHERE qty<40
Update SALES Set qty=50 WHERE qty<50
Update SALES Set qty=60 WHERE qty<60
COMMITTRANSACTION B
COMMIT TRANSACTION A
A、SALES 表中qty 列最小值大于等于30
B、SALES 表中qty 列最小值大于等于40
C、SALES 表中qty 列的数据全部为50
D、SALES 表中qty 列最小值大于等于60
Update SALES Set qty=60 WHERE qty<60(关键在最后一句,执行完数据就都是大于等于60了)
3. 在android中使用SQLiteOpenHelper这个辅助类时,可以生成一个数据库,并可以对数据库版本进行管理的方法可以是(ab)
A、getWriteableDatabase()
B、getReadableDatabase()
C、getDatabase()
D、getAbleDatabase()
4. android 关于service生命周期的onCreate()和onStart()说法正确的是(ad)(多选题)
A、当第一次启动的时候先后调用onCreate()和onStart()方法
B、当第一次启动的时候只会调用onCreate()方法
C、如果service 已经启动,将先后调用onCreate()和onStart()方法
D、如果service 已经启动,只会执行onStart()方法,不在执行onCreate()方法
5. 下面是属于GLSurFaceView特性的是(abc)(多选)
A、管理一个surface,这个surface 就是一块特殊的内存,能直接排版到android 的视图 view 上。
B、管理一个EGL display,它能让opengl 把内容渲染到上述的surface 上。
C、让渲染器在**的线程里运作,和UI 线程分离。
D、可以直接从内存或者DMA 等硬件接口取得图像数据
说明:
GLSurfaceView 是一个视图,继承至SurfaceView,它内嵌的surface 专门负责OpenGL渲染。
GLSurfaceView 提供了下列特性:
1>管理一个surface,这个surface 就是一块特殊的内存,能直接排版到android 的视图view 上。
2>管理一个EGL display,它能让opengl 把内容渲染到上述的surface上。 3>用户自定义渲染器(render)。
4>让渲染器在**的线程里运作,和UI 线程分离。
5>**按需渲染(on-demand)和连续渲染(continuous)。
6>一些可选工具,如调试。
6. 下面在AndroidManifest.xml 文件中注册BroadcastReceiver方式正确的(a)
A、android:name="android.provider.action.NewBroad"/>
B、android:name="android.provider.action.NewBroad"/>
C、android:name="android.provider.action.NewBroad"/>
D、android:name="android.provider.action.NewBroad"/>
java面试题选择题3篇(扩展3)
——java面试基础选择题3篇
java面试基础选择题1
1.Java是从(B )语言改进重新设计。
A.Ada B.C++ C.Pasacal D.BASIC
答案:B
2.下列语句哪一个正确(B )
A. Java程序经编译后会产生machine code
B. Java程序经编译后会产生byte code
C. Java程序经编译后会产生DLL
D. 以上都不正确
答案:B
3.下列说法正确的有( )
A. class中的constructor不可省略
B. constructor必须与class同名,但方法不能与class同名
C. constructor在一个对象被new时执行
D. 一个class只能定义一个constructor
答案:C
4.提供Java存取数据库能力的包是( )
A.java.sql B.java.awt C.java.lang D.java.swing 答案:A
5.下列运算符合法的是( )
A.&& B.<> C.if D.:=
答案:A
6.执行如下程序代码
a=0;c=0;
do{
--c;
a=a-1;
}while(a>0);
后,C的值是( )
A.0 B.1 C.-1 D.死循环
答案:C
7.下列哪一种叙述是正确的( )
A. abstract修饰符可修饰字段、方法和类
B. 抽象方法的body部分必须用一对大括号{ }包住
C. 声明抽象方法,大括号可有可无
D. 声明抽象方法不可写出大括号
答案:D
java面试基础选择题2
1、如下哪些不是java的关键字?
A)const B)NULL C) false D)this E) native
答:B
2、关于垃圾收集的哪些叙述是对的
A)程序开发者必须自己创建一个线程进行内存**的.工作
B)垃圾收集将检查并**不在使用的内存
C)垃圾收集允许程序开发者明确指定并立即**该内存
D)垃圾收集能够在期望的时间**被java对象使用的内存
答:B
3、已知表达式 int m [ ] = {0,1,2,3,4,5,6}; 下面哪个表达式的值与数组下标量总数相等?
A)m.length() B)m.length C)m.length()+1 D)m.length-1
答:D
4、已知如下代码: public class Test { long a[] = new long [10]; public static void main(String arg[] ){ System.out.print(a[6]); } } 请问哪个语句是正确的?
A)Output is null. B)Output is 0 C)When compile, some error will occur.
D)When running, some error will occur.
答:C
5、已知如下代码: public class Test { public static void main(String arg[] ) { int i = 5; do{ System.out.print(i); }while(--i>5); System.out.print(“finished”); } } 执行后的输出是什么?
A)5 B)4 C)6 D)finished
答:AD
6、已知如下代码:
switch (m) {
case 0: System.out.print(“Condition 0”);
case 1: System.out.print(“Condition 1”);
case 2: System.out.print(“Condition 2”);
case 3: System.out.print(“Condition 3”); default: System.out.print(“Other Condition ”); } 当m的值为什么时能输出“Condition 2”
A)0 B)1 C)2 D)3 E) 4 F)None
答:ABC
java面试题选择题3篇(扩展4)
——java经典面试题目3篇
java经典面试题目1
1、String 是最基本的数据类型吗?
答:不是。Java中的基本数据类型只有8个:byte、short、int、long、float、double、char、boolean;除了基本类型(primitive type)和枚举类型(enumeration type),剩下的都是引用类型(reference type)。
2、float f=3.4;是否正确?
答:不正确。3.4是双精度数,将双精度型(double)赋值给浮点型(float)属于下转型(down-casting,也称为窄化)会造成精度损失,因此需要**类型转换float f =(float)3.4; 或者写成float f =3.4F;。
3、short s1 = 1; s1 = s1 + 1;有错吗?short s1 = 1; s1 += 1;有错吗?
答:对于short s1 = 1; s1 = s1 + 1;由于1是int类型,因此s1+1运算结果也是int 型,需要**转换类型才能赋值给short型。而short s1 = 1; s1 += 1;可以正确编译,因为s1+= 1;相当于s1 = (short)(s1 + 1);***隐含的**类型转换。
4、Java有没有goto?
答:goto 是Java中的保留字,在目前版本的Java中没有使用。(根据James Gosling(Java之父)编写的《The Java Programming Language》一书的附录中给出了一个Java关键字列表,***goto和const,但是这两个是目前无法使用的关键字,因此有些地方将其称之为保留字,其实保留字这个词应该有更广泛的意义,因为熟悉C语言的程序员都知道,在系统类库中使用过的有特殊意义的单词或单词的组合都被视为保留字)
java经典面试题目2
1、&和&&的区别?
答:&运算符有两种用法:(1)按位与;(2)逻辑与。&&运算符是短路与运算。逻辑与跟短路与的差别是非常巨大的,虽然二者都要求运算符左右两端的布尔值都是true整个表达式的值才是true。&&之所以称为短路运算是因为,如果&&左边的表达式的值是false,右边的表达式会被直接短路掉,不会进行运算。很多时候我们可能都需要用&&而不是&,例如在验证用户登录时判定用户名不是null而且不是空字符串,应当写为:username != null &&!username.equals(“”),二者的顺序不能交换,更不能用&运算符,因为第一个条件如果不成立,根本不能进行字符串的equals比较,否则会产生NullPointerException异常。注意:逻辑或运算符(|)和短路或运算符(||)的差别也是如此。
补充:如果你熟悉JavaScript,那你可能更能感受到短路运算的强大,想成为JavaScript的高手就先从玩转短路运算开始吧。
2、解释内存中的栈(stack)、堆(heap)和静态区(static area)的用法。
答:通常我们定义一个基本数据类型的变量,一个对象的引用,还有就是函数调用的现场保存都使用内存中的栈空间;而通过new关键字和构造器创建的对象放在堆空间;程序中的字面量(literal)如直接书写的100、”hello”和常量都是放在静态区中。栈空间操作起来最快但是栈很小,通常大量的对象都是放在堆空间,理论上整个内存没有被其他进程使用的空间甚至硬盘上的虚拟内存都可以被当成堆空间来使用。
1String str = new String("hello");
上面的语句中变量str放在栈上,用new创建出来的字符串对象放在堆上,而”hello”这个字面量放在静态区。
补充:较新版本的Java(从Java 6的某个更新开始)中使用了一项叫”逃逸分析”的技术,可以将一些局部对象放在栈上以提升对象的操作性能。
3、Math.round(11.5) 等于多少?Math.round(-11.5)等于多少?
答:Math.round(11.5)的返回值是12,Math.round(-11.5)的返回值是-11。四舍五入的'原理是在参数上加0.5然后进行下取整。
4、switch 是否能作用在byte 上,是否能作用在long 上,是否能作用在String上?
答:在Java 5以前,switch(expr)中,expr只能是byte、short、char、int。从Java 5开始,Java中引入了枚举类型,expr也可以是enum类型,从Java 7开始,expr还可以是字符串(String),但是长整型(long)在目前所有的版本中都是不可以的。
java面试题选择题3篇(扩展5)
——java常见面试题3篇
java常见面试题1
1.什么是Java虚拟机?为什么Java被称作是“*台无关的编程语言”?
Java虚拟机是一个可以执行Java字节码的虚拟机进程。Java源文件被编译成能被Java虚拟机执行的字节码文件。
Java被设计成允许应用程序可以运行在任意的*台,而不需要程序员为每一个*台单独重写或者是重新编译。Java虚拟机让这个变为可能,因为它知道底层硬件*台的指令长度和其他特性。
2.JDK和JRE的区别是什么?
Java运行时环境(JRE)是将要执行Java程序的Java虚拟机。它同时也包含了执行applet需要的浏览器插件。Java开发工具包(JDK)是完整的Java软件开发包,包含了JRE,编译器和其他的工具(比如:JavaDoc,Java调试器),可以让开发者开发、编译、执行Java应用程序。
3.”static”关键字是什么意思?Java中是否可以覆盖(override)一个private或者是static的方法?
“static”关键字表明一个成员变量或者是成员方法可以在没有所属的类的实例变量的情况下被访问。
Java中static方法不能被覆盖,因为方法覆盖是基于运行时动态绑定的,而static方法是编译时静态绑定的。static方法跟类的任何实例都不相关,所以概念上不适用。
4.是否可以在static环境中访问非static变量?
static变量在Java中是属于类的,它在所有的实例中的值是一样的。当类被Java虚拟机载入的时候,会对static变量进行初始化。如果你的代码尝试不用实例来访问非static的变量,编译器会报错,因为这些变量还没有被创建出来,还没有跟任何实例关联上。
5.Java**的数据类型有哪些?什么是自动拆装箱?
Java语言**的8中基本数据类型是:
byte
short
int
long
float
double
boolean
char
自动装箱是Java编译器在基本数据类型和对应的对象包装类型之间做的一个转化。比如:把int转化成Integer,double转化成double,等等。反之就是自动拆箱。
6.Java中的方法覆盖(Overriding)和方法重载(Overloading)是什么意思?
Java中的方法重载发生在同一个类里面两个或者是多个方法的方法名相同但是参数不同的情况。与此相对,方法覆盖是说子类重新定义了父类的方法。方法覆盖必须有相同的方法名,参数列表和返回类型。覆盖者可能不会限制它所覆盖的方法的访问。
7.Java中,什么是构造函数?什么是构造函数重载?什么是复制构造函数?
当新对象被创建的时候,构造函数会被调用。每一个类都有构造函数。在程序员没有给类提供构造函数的情况下,Java编译器会为这个类创建一个默认的构造函数。
Java中构造函数重载和方法重载很相似。可以为一个类创建多个构造函数。每一个构造函数必须有它自己唯一的参数列表。
Java不**像C++中那样的复制构造函数,这个不同点是因为如果你不自己写构造函数的情况下,Java不会创建默认的复制构造函数。
8.Java**多继承么?
不**,Java不**多继承。每个类都只能继承一个类,但是可以实现多个接口。
9.接口和抽象类的区别是什么?
Java提供和**创建抽象类和接口。它们的实现有共同点,不同点在于:
接口中所有的方法隐含的都是抽象的。而抽象类则可以同时包含抽象和非抽象的方法。
类可以实现很多个接口,但是只能继承一个抽象类
类如果要实现一个接口,它必须要实现接口声明的所有方法。但是,类可以不实现抽象类声明的所有方法,当然,在这种情况下,类也必须得声明成是抽象的。
抽象类可以在不提供接口方法实现的情况下实现接口。
Java接口中声明的变量默认都是final的。抽象类可以包含非final的变量。
Java接口中的成员函数默认是public的。抽象类的成员函数可以是private,protected或者是public。
接口是绝对抽象的,不可以被实例化。抽象类也不可以被实例化,但是,如果它包含main方法的话是可以被调用的。
也可以参考JDK8中抽象类和接口的区别
10.什么是值传递和引用传递?
对象被值传递,意味着传递了对象的一个副本。因此,就算是改变了对象副本,也不会影响源对象的值。
对象被引用传递,意味着传递的并不是实际的对象,而是对象的引用。因此,外部对引用对象所做的改变会反映到所有的对象上。
java常见面试题2
1.进程和线程的区别是什么?
进程是执行着的应用程序,而线程是进程内部的一个执行序列。一个进程可以有多个线程。线程又叫做轻量级进程。
2.创建线程有几种不同的方式?你喜欢哪一种?为什么?
有三种方式可以用来创建线程:
继承Thread类
实现Runnable接口
应用程序可以使用Executor框架来创建线程池
实现Runnable接口这种方式更受欢迎,因为这不需要继承Thread类。在应用设计中已经继承了别的对象的情况下,这需要多继承(而Java不**多继承),只能实现接口。同时,线程池也是非常高效的,很容易实现和使用。
3.概括的解释下线程的几种可用状态。
线程在执行过程中,可以处于下面几种状态:
就绪(Runnable):线程准备运行,不一定立马就能开始执行。
运行中(Running):进程正在执行线程的代码。
等待中(Waiting):线程处于阻塞的状态,等待外部的处理结束。
睡眠中(Sleeping):线程被**睡眠。
I/O阻塞(Blocked on I/O):等待I/O操作完成。
同步阻塞(Blocked on Synchronization):等待获取锁。
**(Dead):线程完成了执行。
4.同步方法和同步代码块的区别是什么?
在Java语言中,每一个对象有一把锁。线程可以使用synchronized关键字来获取对象上的锁。synchronized关键字可应用在方法级别(粗粒度锁)或者是代码块级别(细粒度锁)。
5.在**器(Monitor)内部,是如何做线程同步的?程序应该做哪种级别的同步?
**器和锁在Java虚拟机中是一块使用的。**器**一块同步代码块,确保一次只有一个线程执行同步代码块。每一个**器都和一个对象引用相关联。线程在获取锁之前不允许执行同步代码。
6.什么是死锁(deadlock)?
两个进程都在等待对方执行完毕才能继续往下执行的时候就发生了死锁。结果就是两个进程都陷入了无限的等待中。
7.如何确保N个线程可以访问N个资源同时又不导致死锁?
使用多线程的时候,一种非常简单的避免死锁的方式就是:指定获取锁的顺序,并**线程按照指定的顺序获取锁。因此,如果所有的线程都是以同样的顺序加锁和**锁,就不会出现死锁了。
java面试题选择题3篇(扩展6)
——java面试题库3篇
java面试题库1
1.forward 和redirect的区别
解答:forward是容器中**权的转向,是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器,浏览器根本不知道服务器发送的内容是从哪儿来的,所以它的地址栏中还是原来的地址。 redirect就是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址,一般来说浏览器会用刚才请求的所有参数重新请求,并且从浏览器的地址栏中可以看到跳转后的链接地址。前者更加高效,在前者可以满足需要时,尽量使用forward()方法,并且,这样也有助于隐藏实际的链接;在有些情况下,比如,需要跳转到一个其它服务器上的资源,则必须使用sendRedirect()方法。
2.Java反射机制的作用?
解答:Java反射机制的作用是:
1)在运行时判断任意一个对象所属的类。
2)在运行时构造任意一个类的对象。
3)在运行时判断任意一个类所具有的成员变量和方法。
4)在运行时调用任意一个对象的方法
3.你是怎么理解java的泛型的?
解答: 在Java SE 1.5之前,没有泛型的情况的下,通过对类型Object的引用来实现参数的“任意化”,“任意化”带来的缺点是要做显式的**类型转换,而这种转换是要求开发者对实际参数类型可以预知的情况下进行的。对于**类型转换错误的情况,编译器可能不提示错误,在运行的时候才出现异常,这是一个安全隐患。
泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。
泛型的好处是在编译的时候检查类型安全,并且所有的**转换都是自动和隐式的,提高代码的重用率。
4.JAVA源文件中是否可以包括多个类,有什么限制
解答:一个java源文件中可以包含多个类,每个源文件中至多有一个public类,如果有的话,那么源文件的名字必须与之相同。如果源文件中没有public类,则源文件用什么名字都可以,但最好还是具有特定的意义,免得自己都不记得里面写的是什么了。
5.在一个千万级的数据库查寻中,如何提高查询效率?分别说出在数据库设计、SQL语句、java等层面的解决方案。
解答:
1)数据库设计方面:
a. 对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。
b. 应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如: select id from t where num is null 可以在num上设置默认值0,确保表中num列没有null值,然后这样查询: select id from t where num=0
c. 并不是所有索引对查询都有效,SQL是根据表中数据来进行查询优化的,当索引列有大量数据重复时,查询可能不会去利用索引,如一表中有字段sex,male、female几乎各一半,那么即使在sex上建了索引也对查询效率起不了作用。
d. 索引并不是越多越好,索引固然可以提高相应的 select 的效率,但同时也降低了 insert 及 update 的效率,因为 insert 或 update 时有可能会重建索引,所以怎样建索引需要慎重考虑,视具体情况而定。一个表的索引数最好不要超过6个,若太多则应考虑一些不常使用到的列上建的索引是否有必要。
e. 应尽可能的避免更新索引数据列,因为索引数据列的`顺序就是表记录的物理存储顺序,一旦该列值改变将导致整个表记录的顺序的调整,会耗费相当大的资源。若应用系统需要频繁更新索引数据列,那么需要考虑是否应将该索引建为索引。
f. 尽量使用数字型字段,若只含数值信息的字段尽量不要设计为字符型,这会降低查询和连接的性能,并会增加存储开销。这是因为引擎在处理查询和连接时会逐个比较字符串中每一个字符,而对于数字型而言只需要比较一次就够了。
g. 尽可能的使用 varchar/nvarchar 代替 char/nchar ,因为首先变长字段存储空间小,可以节省存储空间,其次对于查询来说,在一个相对较小的字段内搜索效率显然要高些。
h. 尽量使用表变量来代替临时表。如果表变量包含大量数据,请注意索引非常有限(只有主键索引)。
i. 避免频繁创建和删除临时表,以减少系统表资源的消耗。
j. 临时表并不是不可使用,适当地使用它们可以使某些例程更有效,例如,当需要重复引用大型表或常用表中的某个数据集时。但是,对于一次性事件,最好使用导出表。
k. 在新建临时表时,如果一次**入数据量很大,那么可以使用 select into 代替 create table,避免造成大量 log ,以提高速度;如果数据量不大,为了缓和系统表的资源,应先create table,然后insert。
l. 如果使用到了临时表,在存储过程的最后务必将所有的临时表显式删除,先 truncate table ,然后 drop table ,这样可以避免系统表的较长时间锁定。
2)SQL语句方面:
a. 应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描。
b. 应尽量避免在 where 子句中使用 or 来连接条件,否则将导致引擎放弃使用索引而进行全表扫描,如: select id from t where num=10 or num=20 可以这样查询: select id from t where num=10 union all select id from t where num=20
c. in 和 not in 也要慎用,否则会导致全表扫描,如: select id from t where num in(1,2,3) 对于连续的数值,能用 between 就不要用 in 了: select id from t where num between 1 and 3
d. 下面的查询也将导致全表扫描: select id from t where name like ‘%abc%’
e. 如果在 where 子句中使用参数,也会导致全表扫描。因为SQL只有在运行时才会解析局部变量,但优化程序不能将访问计划的选择推迟到运行时;它必须在编译时进行选择。然而,如果在编译时建立访问计划,变量的值还是未知的,因而无法作为索引选择的输入项。如下面语句将进行全表扫描: select id from t where num=@num 可以改为**查询使用索引: select id from t with(index(索引名)) where num=@num
f. 应尽量避免在 where 子句中对字段进行表达式操作,这将导致引擎放弃使用索引而进行全表扫描。如: select id from t where num/2=100 应改为: select id from t where num=100*2
g. 应尽量避免在where子句中对字段进行函数操作,这将导致引擎放弃使用索引而进行全表扫描。如: select id from t where substring(name,1,3)=’abc’–name以abc开头的id select id from t where datediff(day,createdate,’2005-11-30′)=0–‘2005-11-30’生成的id 应改为: select id from t where name like ‘abc%’ select id from t where createdate>=’2005-11-30′ and createdate<’2005-12-1′
h. 不要在 where 子句中的“=”左边进行函数、算术运算或其他表达式运算,否则系统将可能无法正确使用索引。
i. 不要写一些没有意义的查询,如需要生成一个空表结构: select col1,col2 into #t from t where 1=0 这类代码不会返回任何结果集,但是会消耗系统资源的,应改成这样: create table #t(?)
j. 很多时候用 exists 代替 in 是一个好的选择: select num from a where num in(select num from b) 用下面的语句替换: select num from a where exists(select 1 from b where num=a.num)
k. 任何地方都不要使用 select * from t ,用具体的字段列表代替“*”,不要返回用不到的任何字段。
l. 尽量避免使用游标,因为游标的效率较差,如果游标操作的数据超过1万行,那么就应该考虑改写。
m. 尽量避免向客户端返回大数据量,若数据量过大,应该考虑相应需求是否合理。
n. 尽量避免大事务操作,提高系统并发能力。
3)java方面:
a.尽可能的少造对象。
b.合理摆正系统设计的位置。大量数据操作,和少量数据操作一定是分开的。大量的数据操作,肯定不是ORM框架搞定的。,
c.使用jDBC链接数据库操作数据
d.**好内存,让数据流起来,而不是全部读到内存再处理,而是边读取边处理;
e.合理利用内存,有的数据要缓存
java面试题库2
1.请解释分布式事务管理?
解答:分布式事务是指事务的参与者、**事务的服务器、资源服务器以及事务管理器分别位于不同的分布式系统的不同节点之上。为了实现分布式事务,需要使用下面将介绍的两阶段提交协议。 阶段一:开始向事务涉及到的全部资源发送提交前信息。此时,事务涉及到的资源还有最后一次机会来异常结束事务。如果任意一个资源决定异常结束事务,则整个事务取消,不会进行资源的更新。否则,事务将正常执行,除非发生灾难性的失败。为了防止会发生灾难性的失败,所有资源的更新都会写入到日志中。这些日志是永久性的,因此,这些日志会幸免遇难并且在失败之后可以重新对所有资源进行更新。 阶段二:只在阶段一没有异常结束的时候才会发生。此时,所有能被定位和单独**的资源管理器都将开始执行真正的数据更新。 在分布式事务两阶段提交协议中,有一个主事务管理器负责充当分布式事务协调器的角色。事务协调器负责整个事务并使之与网络中的其他事务管理器协同工作。 为了实现分布式事务,必须使用一种协议在分布式事务的各个参与者之间传递事务上下文信息,IIOP便是这种协议。这就要求不同开发商开发的事务参与者必须**一种标准协议,才能实现分布式的事务。
2.请写出5种常见到的runtime exception。
解答:
NullPointerException:当操作一个空引用时会出现此错误。
NumberFormatException:数据格式转换出现问题时出现此异常。
ClassCastException:**类型转换类型不匹配时出现此异常。
ArrayIndexOutOfBoundsException:数组下标越界,当使用一个不存在的数组下标时出现此异常。
ArithmeticException:数*行错误时出现此异常
3.数组有没有length()这个方法?String有没有length()这个方法?
解答:数组没有length()方法 它有length属性
String有length()方法。
4.请写出一个单例模式。
解答:单例模式(Singleton pattern):确保一个类只有一个实例,并提供一个全局的访问点
public class EagerSingleton { private static final EagerSingleton m_instance = new EagerSingleton(); /** * 私有的默认构造子 */ private EagerSingleton() { } /** * 静态工厂方法 */ public static EagerSingleton getInstance() { return m_instance; } }
5.在java中,List是个接口,那实现List接口的类有哪些,有什么区别?
解答: ArrayList是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,
LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。
6.char类型能否存储一个中文字符?为什么
解答:可以。一个char是两个字节,而一个中文也是两个字节。
java面试题选择题3篇(扩展7)
——华为面试题3篇
华为面试题1
Q1:请你分别划划OSI的七层网络结构图,和TCP/IP的五层结构图?
Q2:请你详细的解释一下IP协议的定义,在哪个层上面,主要有什么作用? TCP与UDP呢?
Q3:请问交换机和路由器分别的实现原理是什么?分别在哪个层次上面实现的?
Q4:请问C++的类和C里面的struct有什么区别?
Q5:请讲一讲析构函数和虚函数的用法和作用?
Q6:全局变量和局部变量有什么区别?实怎么实现的?操作系统和编译器是怎么知道的?
Q7:一些寄存器的题目,主要是寻址和内存管理等一些知识。
Q8:8086是多少尉的系统?在数据总线上是怎么实现的?
“华为面试题”版权归作者所有;转载请注明出处!版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 yyfangchan@163.com (举报时请带上具体的网址) 举报,一经查实,本站将立刻删除