文章目录
- 一、JavaSE 部分
-
- 1、Java 基础
-
- ①Java 基础部分(基本语法,Java 特性等)
-
- 1、为什么重写 equals 还要重写 hashcode?
- 2、说一下 map 的分类和常见的情况
- 3、Object 若不重写 hashCode()的话,hashCode()如何计算出来的?
- 4、```==```比较的是什么?
- 5、若对一个类不重写,它的 equals()方法是如何比较的?
- 6、java8 新特性
- 7、说说 Lamda 表达式的优缺点。
- 8、一个十进制的数在内存中是怎么存的?
- 9、为啥有时会出现 4.0-3.6=0.40000001 这种现象?
- 10、Java 支持的数据类型有哪些?什么是自动拆装箱?
- 11、什么是值传递和引用传递?
- 12、数组(Array)和列表(ArrayList)有什么区别?什么时候应该使用 Array 而不 是 ArrayList?
- 13、你了解大 O 符号(big-O notation)么?你能给出不同数据结构的例子么?
- 14、String 是最基本的数据类型吗?
- 15、int 和 Integer 有什么区别
- 16、String 和 StringBuffer 的区别
- 17、我们在 web 应用开发过程中经常遇到输出某种编码的字符,如 iso8859-1 等,如何输出一个某种编码的字符串?
- 18、int 和 Integer 有什么区别?
- 19、&和&&的区别?
- 20、在 Java 中,如何跳出当前的多重嵌套循环?
- 21、你能比较一下 Java 和 JavaSciprt 吗?
- 22、简述正则表达式及其用途。
- 23、Java 中是如何支持正则表达式操作的?
- 24、请你说说 Java 和 PHP 的区别?
- ②关键字
- ③面向对象
-
- 1、wait 方法底层原理
- 2、Java 有哪些特性,举个多态的例子。
- 3、String 为啥不可变?
- 4、类和对象的区别
- 5、请列举你所知道的 Object 类的方法。
- 6、重载和重写的区别?相同参数不同返回值能重载吗?
- 7、”static”关键字是什么意思?Java 中是否可以覆盖(override)一个 private 或者是 static 的方法?
- 8、String 能继承吗?
- 9、StringBuffer 和 StringBuilder 有什么区别,底层实现上呢?
- 10、类加载机制,双亲委派模型,好处是什么?
- 11、静态变量存在哪?
- 12、讲讲什么是泛型?
- 13、解释 extends 和 super 泛型限定符-上界不存下界不取
- 14、是否可以在 static 环境中访问非 static 变量?
- 15、谈谈如何通过反射创建对象?
- 16、Java 支持多继承么?
- 17、接口和抽象类的区别是什么?
- 18、Comparable 和 Comparator 接口是干什么的?列出它们的区别。
- 19、面向对象的特征有哪些方面
- 20、final, finally, finalize 的区别。
- 21、Overload 和 Override 的区别。Overloaded 的方法是否可以改变返回值的类型?
- 22、abstract class 和 interface 有什么区别?
- 23、Static Nested Class 和 Inner Class 的不同
- 24、当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性, 并可返回变化后的结果,那么这里到底是值传递还是引用传递?
- 25、Java 的接口和 C++的虚类的相同和不同处。
- 26、JAVA 语言如何进行异常处理,关键字:throws,throw,try,catch,finally 分别代表什么意义?在 try 块中可以抛出异常吗?
- 27、内部类可以引用他包含类的成员吗?有没有什么限制?
- 28、两个对象值相同(x.equals(y) == true),但却可有不同的 hashcode 说法 是否正确?
- 29、重载(Overload)和重写(Override)的区别。重载的方法能否根据返回类 型进行区分?
- 30、如何通过反射获取和设置对象私有字段的值?
- 31、谈一下面向对象的"六原则一法则"。
- 32、请问 Query 接口的 list 方法和 iterate 方法有什么区别?
- 33、Java 中的方法覆盖(Overriding)和方法重载(Overloading)是什么意思?
- 34、Java 中,什么是构造函数?什么是构造函数重载?什么是复制构造函数?
- 35、hashCode()和 equals()方法有什么联系?
- ④集合部分
-
- 1、Map 和 ConcurrentHashMap 的区别?
- 2、hashMap 内部具体如何实现的?
- 3、如果 hashMap 的 key 是一个自定义的类,怎么办?
- 4、ArrayList 和 LinkedList 的区别,如果一直在 list 的尾部添加元素,用哪 个效率高?
- 5、HashMap 底层,负载因子,为啥是 2^n?
- 6、ConcurrentHashMap 锁加在了哪些地方?
- 7、TreeMap 底层,红黑树原理?
- 8、concurrentHashMap 有啥优势,1.7,1.8 区别?
- 9、ArrayList 是否会越界?
- 10、什么是 TreeMap?
- 11、ConcurrentHashMap 的原理是什么?
- 12、Java 集合类框架的基本接口有哪些?
- 13、为什么集合类没有实现 Cloneable 和 Serializable 接口?
- 14、什么是迭代器?
- 15、Iterator 和 ListIterator 的区别是什么?
- 16、快速失败(fail-fast)和安全失败(fail-safe)的区别是什么?
- 17、HashMap 和 Hashtable 有什么区别?
- 18、ArrayList 和 LinkedList 有什么区别?
- 19、ArrayList,Vector,LinkedList 的存储性能和特性是什么?
- 20、Collection 和 Collections 的区别。
- 21、你所知道的集合类都有哪些?主要方法?
- 22、List、Set、Map 是否继承自 Collection 接口?
- 23、阐述 ArrayList、Vector、LinkedList 的存储性能和特性
- 24、List、Map、Set 三个接口存取元素时,各有什么特点?
- 2、Java 高级知识
-
- ①线程
-
- 1、多线程中的 i++线程安全吗?为什么?
- 2、如何线程安全的实现一个计数器?
- 3、多线程同步的方法
- 4、介绍一下生产者消费者模式?
- 5、线程,进程,然后线程创建有很大开销,怎么优化?
- 6、线程池运行流程,参数,策略
- 7、讲一下 AQS 吧。
- 8、创建线程的方法,哪个更好,为什么?
- 9、Java 中有几种方式启动一个线程?
- 10、Java 中有几种线程池?
- 11、线程池有什么好处?
- 12、cyclicbarrier 和 countdownlatch 的区别
- 13、启动线程有哪几种方式,线程池有哪几种?
- 14、线程池配置
- 14、如何理解 Java 多线程回调方法?
- 15、创建线程有几种不同的方式?你喜欢哪一种?为什么?
- 16、概括的解释下线程的几种可用状态。
- 17、同步方法和同步代码块的区别是什么?
- 18、在监视器(Monitor)内部,是如何做线程同步的?程序应该做哪种级别的同步?
- 19、sleep() 和 wait() 有什么区别?
- 20、同步和异步有何异同,在什么情况下分别使用他们?举例说明。
- 21、设计 4 个线程,其中两个线程每次对 j 增加 1,另外两个线程对 j 每次减少 1。使用内部类实现线程,对 j 增减的时候没有考虑顺序问题。
- 22、启动一个线程是用 run()还是 start()?
- 23、请说出你所知道的线程同步的方法
- 24、多线程有几种实现方法,都是什么?同步有几种实现方法,都是什么?
- 25、 java 中有几种方法可以实现一个线程?用什么关键字修饰同步方法? stop() 和 suspend()方法为何不推荐使用?
- 26、线程的 sleep()方法和 yield()方法有什么区别?
- 27、当一个线程进入一个对象的 synchronized 方法 A 之后,其它线程是否可进 入此对象的 synchronized 方法 B?
- 28、请说出与线程同步以及线程调度相关的方法。
- 29、举例说明同步和异步
- 30、什么是线程池(thread pool)?
- 31、说说线程的基本状态以及状态之间的关系?
- 32、如何保证线程安全?
- ②锁
- ③JDK
- ④反射
- ⑤JVM
- ⑥GC
- ⑦ IO 和 NIO,AIO
一、JavaSE 部分
1、Java 基础
①Java 基础部分(基本语法,Java 特性等)
1、为什么重写 equals 还要重写 hashcode?
链接:https://www.jianshu.com/p/75d9c2c3d0c1
考点:java 基础
参考回答:
因为在HashMap中,如果要比较key是否相等, 要同时使用这两个函数。
重载 hashCode()是为了对同一个key,能得到相同的 HashCode,这样 HashMap 就可以定位到我们指定的 key 上。
重载 equals()是为了向 HashMap 表明当前对象和 key 上所保存的对象是相等的,这样我们才真正地获得了这个 key 所对应的这个键值对。
因为自定义的类的hashcode() 方法继承于 Object 类,其 hashcode 码为默认的内存地址,这样即便有相同含义的两个对象,比较也是不相等的。
HashMap中的比较key是这样的,先求出 key的hashcode(),比较其值是否相 等,