当前位置:首页 > 资讯 > info5 > 正文

Java基础

发表于: 2016-11-03   作者:lzming1988   来源:转载   浏览:
摘要: 1.String类为什么是final的。主要是为了效率和安全性的缘故。1)只有当字符串是不可变的,字符串池才有可能实现。字符串池的实现可以在运行时节约很多heap空间,因为不同的字符串变量都指向池中的同一个字符串。但如果字符串是可变的,那么Stringinterning将不能实现(注:当调用intern方法时,如果常量池中已经该字符串,则返回池中的字符串;否则将此字符串添加到常量池中,并返回字符串

1. String类为什么是final的。

主要是为了效率安全性的缘故。
1)只有当字符串是不可变的,字符串池才有可能实现。字符串池的实现可以在运行时节约很多heap空间,因为不同的字符串变量都指向池中的同一个字符串。但如果字符串是可变的,那么String interning将不能实现(注:当调用 intern 方法时,如果常量池中已经该字符串,则返回池中的字符串;否则将此字符串添加到常量池中,并返回字符串的引用。),因为这样的话,如果变量改变了它的值,那么其它指向这个值的变量的值也会一起改变。
2)因为字符串是不可变的,所以是多线程安全的,同一个字符串实例可以被多个线程共享。这样便不用因为线程安全问题而使用同步。字符串自己便是线程安全的。
3)因为字符串是不可变的,所以在它创建的时候hashcode就被缓存了,不需要重新计算。这就使得字符串很适合作为Map中的键,字符串的处理速度要快过其它的键对象。这就是HashMap中的键往往都使用字符串。

2. HashMap的源码,实现原理,底层结构。

http://www.importnew.com/16599.html

3. 说说你知道的几个Java集合类:list、set、queue、map实现类咯。。。

4. 描述一下ArrayList和LinkedList各自实现和区别

ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。
对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。
对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。

5. Java中的队列都有哪些,有什么区别。

6. 反射中,Class.forName和ClassLoader的区别

java中Class.forName和ClassLoader都可用来对类进行加载。
前者除了将类的.class文件加载到jvm中之外,还会对类进行解释,执行类中的static块。而classLoader只干一件事情,就是将.class文件加载到jvm中,不会执行static中的内容,只有在newInstance才会去执行static块。

7. Java7、Java8的新特性(baidu问的,好BT)

8. Java数组和链表两种结构的操作效率,在哪些情况下(从开头开始,从结尾开始,从中间开始),哪些操作(插入,查找,删除)的效率高

9. Java内存泄露的问题调查定位:jmap,jstack的使用等等

10. string、stringbuilder、stringbuffer区别

11. hashtable和hashmap的区别

13. 异常的结构,运行时异常和非运行时异常,各举个例子

Java基础_第1张图片
在java中,所有的非正常情况都继承Throwable。而Error和Exception是他的两个子类,各自又含有一系列的子类,对应一系列的错误和异常。
Error(错误):是程序无法处理的,指与虚拟机相关的问题(比如:系统崩溃、虚拟机错误)。这些错误无法恢复或者捕获。
Exception(异常):是程序本身可处理的。而异常又分为两大类:Checked异常和Runtime异常。
Checked异常是指可以在编译阶段内处理的异常,java认为必须显示处理的异常。处理方式:1.当前方法明确如何处理该异常,就应该捕获它,在对应的catch中修复。2.当前方法不知道如何处理该异常,应在定义该方法时声明抛出该异常。它的缺点:1.java要求必须显示捕获并处理该异常,增加变成复杂度。2.在方法显示声明抛出此异常,会导致方法签名与异常耦合。它的优点:可在编译时提醒程序员代码可能存在的问题,提醒处理该异常。
Runtime异常是指编译阶段无需处理,debug过程处理的异常(因为java编译器不会检查它,可以通过编译)。它的优势:1.正常代码与错误处理代码的分离;2.保证程序健壮性;3.避免checked异常的编程繁琐性。

14. String a= “abc” String b = “abc” String c = new String(“abc”) String d = “ab” + “c” .他们之间用 == 比较的结果

15. String 类的常用方法

http://www.bkjia.com/Javabc/1129146.html#comment

16. Java 的引用类型有哪几种

17. 抽象类和接口的区别

18. java的基础类型和字节大小。

整型
int 4字节
short 2字节
long 8字节
byte 1字节
浮点型
float 4字节
double 8字节
* char类型*
char 2字节
* boolean类型*
boolean 1bit(这种数据类型代表一个比特的信息,但大小没有明确的定义)
另:Java有一个能够表示任意精度的算法包,通常称为“大数值”(big number)。虽然被称为大数值,但它并不是一种Java类型,而是一个Java对象。
如果基本的整数和浮点数精度不能够满足需求,那么可以使用java.math包中的两个很有用的类:BigIntegerBigDecimal,这两个类可以处理包含任意长度数字序列的数值。BigInteger类实现了任意精度的整数运算,BigDecimal实现了任意精度的浮点数运算。

19. Hashtable,HashMap,ConcurrentHashMap 底层实现原理与线程安全问题(建议熟悉 jdk 源码,才能从容应答)

20. 如果不让你用Java Jdk提供的工具,你自己实现一个Map,你怎么做。说了好久,说了HashMap源代码,如果我做,就会借鉴HashMap的原理,说了一通HashMap实现

21. Hash冲突怎么办?哪些解决散列冲突的方法?

22. HashMap冲突很厉害,最差性能,你会怎么解决?从O(n)提升到log(n)咯,用二叉排序树的思路说了一通

23. rehash

24. hashCode() 与 equals() 生成算法、方法怎么重写

http://www.codeceo.com/article/201-java-interview-qa.html

Java基础

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

推荐文章
编辑推荐
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号