1.请大概描述一下Vector和ArrayList的区别,Hashtable和HashMap的区别。(5)

(1)Vector和ArrayList的异同

实现原理,功能相同,可以互用

主要区别:

Vector线程安全,ArrayList重速度轻安全,线程非安全,所以当运行到多线程环境中时,需要程序员自己管理线程的同步问题。

长度需增长时,Vector默认增长为原来的一倍,而ArrayList增长50%,有利于节约内存空间。

(2)Hashtable和HashMap的异同

实现原理,功能相同,可以互用

主要区别:

Hashtable继承自Dictionary类,而HashMap实现Map接口

Hashtable线程安全,HashMap重速度,轻安全是线程非安全的,所以当运行到多线程环境中时,需要程序员自己管理线程的同步问题。

Hashtable不允许null值,hashMap允许null值

2.请问你在什么情况下会在你的JAVA代码中使用可序列化?(5)

为什么放到HttpSession中的对象必须要是可序列化的?(5)

因为在我们的系统中,某些类实例化为对象后,将会在网络中传送。而我们知道,网络传输只能2进制文件。这就像你要搬一个大家俱通过一个小门,你得先把家俱拆散,到屋里后再把这些组件重新组合为你的大家俱。 也就是说,当你的对象会被通过网络来传送时,那就必须要序列化。 放到httpSession中的对象,必定会被使用网络来传输的。

3.为什么在重写了equals()方法之后也必须重写hashCode()方法?(10)

hashmap中value的查找是通过 key 的 hashcode 来查找,所以对自己的对象必须重写 hashcode 通过 hashcode 找到对象后会用 equals 比较你传入的对象和 hashmap 中的 key 对象是否相同,所以要重写 equals.

1、重写equals方法时需要重写hashCode方法,主要是针对Map、Set等集合类型的使用;

a: Map、Set等集合类型存放的对象必须是唯一的;

b: 集合类判断两个对象是否相等,是先判断equals是否相等,如果equals返回TRUE,还要再判断HashCode返回值是否ture,只有两者都返回ture,才认为该两个对象是相等的。

2、由于Object的hashCode返回的是对象的hash值,所以即使equals返回TRUE,集合也可能判定两个对象不等,所以必须重写hashCode方法,以保证当equals返回TRUE时,hashCode也返回Ture,这样才能使得集合中存放的对象唯一。

4.sleep()和wait()有什么区别?(10)

A、这两个方法来自不同的类分别是,sleep来自Thread类,和wait来自Object类。

sleep是Thread的静态类方法,谁调用的谁去睡觉,即使在a线程里调用了b的sleep方法,实际上还是a去睡觉,要让b线程睡觉要在b的代码中调用sleep。

B、最主要是sleep方法没有释放锁,而wait方法释放了锁,使得其他线程可以使用同步控制块或者方法。

sleep不出让系统资源;wait是进入线程等待池等待,出让系统资源,其他线程可以占用CPU。一般wait不会加时间限制,因为如果wait线程的运行资源不够,再出来也没用,要等待其他线程调用notify/notifyAll唤醒等待池中的所有线程,才会进入就绪队列等待OS分配系统资源。sleep(milliseconds)可以用时间指定使它自动唤醒过来,如果时间不到只能调用interrupt()强行打断。

Thread.Sleep(0)的作用是“触发操作系统立刻重新进行一次CPU竞争”。

C、使用范围:wait,notify和notifyAll只能在同步控制方法或者同步控制块里面使用,而sleep可以在任何地方使用

synchronized(x){

x.notify()

//或者wait()

}

D、sleep必须捕获异常,而wait,notify和notifyAll不需要捕获异常

5.请阐述一下你对JAVA多线程中“锁”的概念的理解。(10)

锁:对象锁,类锁。两种,用synchronized关键字。

(1)对象锁用于程序片段或者method上,此时将获得对象的锁,所有想要进入该对象的synchronized的方法或者代码段的线程都必须获取对象的锁,如果没有,则必须等其他线程释放该锁。

(2)类锁--作用于静态代码断或者方法上,用于控制对静态变量的访问。

6.所有的递归实现都可以用循环的方式实现,请描述一下这两种实现方式各自的优劣。

并举例说明在什么情况下可以使用递归,而在什么情况下只能使用循环而不能使用递归?(5)

递归算法:

优点:代码简洁、清晰,并且容易验证正确性

缺点:它的运行需要较多次数的函数调用,如果调用层数比较深,需要增加额外的堆栈处理(还有可能出现堆栈溢出的情况),比如参数传递需要压栈等操作,会对执行效率有一定影响。但是,对于某些问题,如果不使用递归,那将是极端难看的代码。

循环算法:

优点:速度快,结构简单。

缺点:并不能解决所有的问题。有的问题适合使用递归而不是循环。如果使用循环并不困难的话,最好使用循环。

总结:

1. 一般递归调用可以处理的算法,也通过循环去解决常需要额外的低效处理。

2. 现在的编译器在优化后,对于多次调用的函数处理会有非常好的效率优化,效率未必低于循环。

3.递归和循环两者完全可以互换。如果用到递归的地方可以很方便使用循环替换,而不影响程序的阅读,那么替换成递归往往是好的。(例如:求阶乘的递归实现与循环实现。)

7.请阐述一下你对“面向接口编程”的理解。(10)

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 类型的。

abstract class 和 interface 是 Java语言中的两种定义抽象类的方式,它们之间有很大的相似性。但是对于它们的选择却又往往反映出对于问题领域中的概 念本质的理解、对于设计意图的反映是否正确、合理,因为它们表现了概念间的不同的关系(虽然都能够实现需求的功能)。这其实也是语言的一种的惯用法,希望读者朋友能够细细体会。

Java中有关构造函数的一道笔试题解析

Java中有关构造函数的一道笔试题解析 1.详细题目例如以下 下列说法正确的有() A. class中的constructor不可省略 B. constructor必须与class同名,但方法不能与c ...

【Java编程】Java中的大整数计算

在上一篇文章中,我们实现了c语言中的大整数的运算,并且用Miller-Rabin算法实现了对大素数的测试.本来我准备用Java代码实现大整数的运算,查了一下资料发现Java中java.math的Big ...

Java中的大数值使用

在Java中,偶尔会遇到超大数值,超出了已有的int,double,float等等你已知的整数.浮点数范围,那么可以使用java.math包中的两个类:BigInteger和BigDecimal. 这 ...

Thinking in java中关于Exception的一道面试题.

今天看到Thinking in Java中一个关于Exception的例子:最后看到有一篇总结的比较好的文章, 这里拿来记录下, 文章地址是:http://blog.csdn.net/salerzha ...

Java中4大基本加密算法解析

简单的java加密算法有: BASE64 严格地说,属于编码格式,而非加密算法 MD5(Message Digest algorithm 5,信息摘要算法) SHA(Secure Hash Algor ...

Java中try-catch-finally的一点理解

在只有try-catch语句中,如果catch块中出现了return语句或者抛出了异常,那么catch之后的语句是执行不到的:但是如果将代码放入finally中,即使catch中出现了return语句 ...

Java中关于位运算的面试题

位运算的效率是最高的,因为位位运算是直接对二进制进行操作 位运算只能应用于整型和char类型(char类型可以看做是特殊的无符号的整形) 面试题: a: 判断一个数是否是奇数 a & 1 == ...

关于java中String的一点理解

String类是java的最基本类之中的一个,非常好的掌握它的原理非常是必要的!   1.String的Final类型的.是不可继承 的.final类默认的方法都为final类型,保证了方法不能被 ...

Java中String类的常见面试题

1. 判断定义为String类型的s1和s2是否相等 String s1 = "ab"; String s2 = "abc"; String s3 = s1 + ...

随机推荐

前端学PHP之面向对象系列第六篇——简单图形面积计算器实现

前面的话 本文用面向对象的技术来实现一个简单的图形面积计算器 图形类 //rect.class.php <?php abstract class Shape{ public $name; abs ...

启用vim-ruby的rails complete &lpar;macvim&rpar;

macvim启用rails complete 用vim已经很久了, 一直用spf13也挺好的, 最近遇到要处理一个遗留项目, 数据库字段太多, 因此折腾了一下配置好vim的ruby-completio ...

JS初学者必备的几个经典案例(二)!!!

一.写出当前年份的前后5年的日期表

java 难度_java中难度大一点的面试题相关推荐

  1. math java 计算_Java中的数学计算函数汇总

    Math类:  java.lang.Math类中包含基本的数字操作,如指数.对数.平方根和三角函数. java.math是一个包,提供用于执行任意精度整数(BigInteger)算法和任意精度小数(B ...

  2. java冒泡排序_Java中的经典算法之冒泡排序(Bubble Sort)

    原理:比较两个相邻的元素,将值大的元素交换至右端. 思路:依次比较相邻的两个数,将小数放在前面,大数放在后面.即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后.然后比较第2个数和第3个数,将 ...

  3. java 事务_Java中事务总结详解(精华)

    1.什么是JAVA事务? 通常的观念认为,事务仅与数据库相关. 事务必须服从ISO/IEC所制定的ACID原则.ACID是原子性(atomicity).一致性(consistency).隔离性 (is ...

  4. [转载] c++多态与java多态性_Java中的多态性

    参考链接: Java中的加法和串联 c++多态与java多态性 Polymorphism is one of the core concepts of OOPS paradigm. The meani ...

  5. java 且_JAVA中逻辑运算符“|”和“”与“||”和“”的用法

    1.使用规则: (1)& 可以用作逻辑与的运算符,表示逻辑与(and) a.当运算符两边的表达式的结果都为true时,整个运算结果才为true,否则,只要有一方为false,则结果为false ...

  6. java 字符串 面试_JAVA中String介绍及常见面试题小结

    字符串广泛应用 在 Java 编程中,在 Java 中字符串属于对象,Java 提供了 String 类来创建和操作字符串. 深刻认识String 1)String为字符串常量:即String对象一旦 ...

  7. java 包装类_Java中的包装类

    Java中哪些需要包装类 它们将原始数据类型转换为对象.如果我们希望修改传递给方法的参数,则需要对象(因为基元类型是按值传递的). java.util包中的类只处理对象,因此在这种情况下包装类也有帮助 ...

  8. java中的多态性_[转载] c++多态与java多态性_Java中的多态性

    参考链接: Java中的加法和串联 c++多态与java多态性 Polymorphism is one of the core concepts of OOPS paradigm. The meani ...

  9. c++多态与java多态性_Java中的多态性

    c++多态与java多态性 Polymorphism is one of the core concepts of OOPS paradigm. The meaning of polymorphism ...

最新文章

  1. Ensure that you have installed a JDK (not just a JRE) and configured your JAVA_HOME system variable
  2. python opencv 检测特定颜色
  3. 使用python获取路径问题
  4. python中case的用法_python中Switch/Case实现的示例代码
  5. IDEA去除mapper.xml文件中的sql语句的背景色
  6. jQuery属性筛选选择器
  7. python和python stub文件类型的区别_python – 如何告诉mypy包含stubfile
  8. string字符串在java_java-String字符串的常用使用方法
  9. linux内存管理_架构师必读:Linux 的内存分页管理
  10. python老齐_python-basic
  11. BZOJ3450 Easy
  12. BI系统的分布式部署原理和技术实现
  13. Studio 3T 使用教程 mogodb
  14. 图片水印如何去除,怎样处理带水印的图片
  15. root工具android10,KingRoot安卓10root工具 5.4.0最新版
  16. 光伏发电并网matlab/simulink仿真,带PLL锁相环,逆变器控制,最大功率控制MPPT,BOOST升压电路
  17. android 备份游戏数据,用于Android游戏存档备份和存档还原的教程(图形中的详细信息)...
  18. 平板电脑是中国制造转向中国创造的机遇
  19. ITK 2D图像刚性配准
  20. 【计算机组成原理】CPU的前世今生

热门文章

  1. php strus2 漏洞攻击_关于对部分重要漏洞进行安全加固的预警通报
  2. ilm 和dlm差异_Oracle 的信息生命周期管理工具(ILM assistant)
  3. ERP 系统数据库设计规范
  4. 浅析libuv源码-node事件轮询解析(2)
  5. vue router-link子级返回父级页面
  6. 栈帧与操作数栈剖析及符号引用与直接引用的转换
  7. electron 前端开发桌面应用
  8. request.path 值危险
  9. CSS3(七) 前端预处理技术(Less、Sass、CoffeeScript)
  10. android studio使用ndk,jni随记