https://blog.csdn.net/qq_43148017/article/details/85121579

https://www.cnblogs.com/cocoxu1992/p/10460251.html

一  JAVA基础  [ 1 - 17 ]

1 JRE 和 JDK 的区别是什么

  • JRE: Java Runtime Environment
  • JDK:Java Development Kit
  • JRE顾名思义是java运行时环境,包含了java虚拟机,java基础类库。是使用java语言编写的程序运行所需要的软件环境,是提供给想运行java程序的用户使用的。
  • JDK顾名思义是java开发工具包,是程序员使用java语言编写java程序所需的开发工具包,是提供给程序员使用的。JDK包含了JRE,同时还包含了编译java源码的编译器javac,还包含了很多java程序调试和分析的工具:jconsole,jvisualvm等工具软件,还包含了java程序编写所需的文档和demo例子程序。如果你需要运行java程序,只需安装JRE就可以了。如果你需要编写java程序,需要安装JDK。

JRE根据不同操作系统(如:windows,linux等)和不同JRE提供商(IBM,ORACLE等)有很多版本,最常用的是Oracle公司收购SUN公司的JRE版本

Java中equals和==的区别

     1)基本数据类型,也称原始数据类型。byte,short,char,int,long,float,double,boolean 他们之间的比较,应用双等号(==),比较         的是他们的值

     2)复合数据类型(类) 
  当他们用(==)进行比较的时候,比较的是他们在内存中的存放地址,所以,除非是同一个new出来的对象,他们的比较后的结果为true,否则比较后结果为false。 JAVA当中所有的类都是继承于Object这个基类的,在Object中的基类中定义了一个equals的方法,这个方法的初始行为是比较对象的内存地 址,但在一些类库当中这个方法被覆盖掉了,如String,Integer,Date在这些类当中equals有其自身的实现,而不再是比较类在堆内存中的存放地址了。
  对于复合数据类型之间进行equals比较,在没有覆写equals方法的情况下,他们之间的比较还是基于他们在内存中的存放位置的地址值的,因为Object的equals方法也是用双等号(==)进行比较的,所以比较后的结果跟双等号(==)的结果相同。

3. 两个对象的 hashCode()相同,则 equals()也一定为 true?

因为:Hash,一般翻译做“散列”,也有直接音译为"哈希"的,就是把任意长度的输入(又叫做预映射, pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,而不可能从散列值来唯一的确定输入值。
1) 对象相等则hashCode一定相等;
2) hashCode相等对象未必相等。(不同对象的hashcode是否一定不一样?是错误的,hashcode本身就是个函数,是可以重载的,你完全可以写个函数总是返回固定值。但hashcode函数从设计要求上来说,要尽量保证:不同对象的hashcode不同。)

4. final 在 java 中有什么作用?

  • 1. final修饰变量,那么该变量相当于一个常量值,在初始化之后保持不变。 
  • 2. final修饰方法,那么该方法不能被重写,继承时不能被子类覆盖。 
  • 3. final修饰类,该类不能够被继承。 
  • 4. final用于对象引用时,使对象引用恒定不变,而该对象本身可以改变。 
  • 5. final与private的关系。 详细代码

java面试基础

5. java 中的 Math.round(-1.5) 等于多少? -1 (向上进一位)

6 String是基本的数据类型吗?

String不是基本数据类型,而是一个类(class),是Java编程语言中的字符串。String对象是char的有序集合,并且该值是不可变的。因为java.lang.String类是final类型的,因此不可以继承这个类、不能修改这个类。为了提高效率节省空间,我们应该用StringBuffer类。

7. java 中操作字符串都有哪些类?它们之间有什么区别?

    操作字符串的类有:String、StringBuffer、StringBuilder。

String:字符串常量。也就是说String是不可变的对象,因此每次对String类型的对象进行更改操作时,实际上是生成了新的String对象,然后修改指针指向新的String对象。因此可以发现,如果经常要改变字符串内容,用String就会造成内存中大量无引用的对象,当内存不足时GC工作就会引起性能下降

StringBuffer:字符串变量、线程安全。首先是字符串变量,所以每次对StringBuffer对象操作时就是对StringBuffer对象本身操作,而不会生成新的对象,StringBuffer相对于String类其速度较快。其次StringBuffer的字符缓冲区可以安全地用于多个线程,其操作方法主要有append和insert方法(append将字符添加到缓冲区的末端,insert将字符添加到指定位置)

StringBuilder:字符串变量、非线程安全。同StringBuffer是一个可变的字符序列,区别是不保证同步,所以单线程时可以优先采用StringBuilder,速度相比StringBuffer要快,二者方法基本相同

8. String str="i"与 String str=new String(“i”)一样吗?

不一样,因为内存的分配方式不一样。

String str="i"的方式,java 虚拟机会将其分配到常量池中;而 String str=new String("i") 则会被分到堆内存中。

9 如何将字符串反转?

  • 使用 StringBuilder 或者 stringBuffer 的 reverse() 方法
  •  把字符串转换为字符数组,for循环输出

10.String 类的常用方法都有那些?

  • indexOf():返回指定字符的索引。
  • charAt():返回指定索引处的字符。
  • replace():字符串替换。
  • trim():去除字符串两端空白。
  • split():分割字符串,返回一个分割后的字符串数组。
  • getBytes():返回字符串的 byte 类型数组。
  • length():返回字符串长度。
  • toLowerCase():将字符串转成小写字母。
  • toUpperCase():将字符串转成大写字符。
  • substring():截取字符串。

equals():字符串比较。

11 抽象类必须有抽象方法吗

12 普通类和抽象类的区别

13 抽象类可以用final修饰吗

抽象类不一定有抽象方法,但有抽象方法的类一定是抽象类

14 接口和抽象类的区别

抽象类可以有构造方法,接口中不能有构造方法。

抽象类中可以有普通成员变量,接口中没有普通成员变量

抽象类中可以包含静态方法,接口中不能包含静态方法

 一个类可以实现多个接口,但只能继承一个抽象类。

接口可以被多重实现,抽象类只能被单一继承

如果抽象类实现接口,则可以把接口中方法映射到抽象类中作为抽象方法而不必实现,而在抽象类的子类中实现接口中方法

派生类必须实现未实现的方法

15 JAVA 中IO流分为几种

https://www.cnblogs.com/QQ846300233/p/6046388.html

16 BIO NIO AIO有什么区别

https://blog.csdn.net/u010310183/article/details/81700405

17 FILE常用方法有哪些

https://www.cnblogs.com/cocoxu1992/p/10460994.html


 二  容器

18.java 容器都有哪些?

1)Collection:一个独立元素的序列,这些元素都服从一条或者多条规则。 List必须按照插入的顺序保存元素,而set不能有重复的元素。Queue按照排队规则来确定对象产生的顺序(通常与它们被插入的顺序相同)。 
2)Map:一组成对的“键值对”对象,允许你使用键来查找值。

|Collection 
|  ├List 
|  │-├LinkedList 
|  │-├ArrayList 
|  │-└Vector 
|  │ └Stack 
|  ├Set 
|  │├HashSet 
|  │├TreeSet 
|  │└LinkedSet 

|Map 
  ├Hashtable 
  ├HashMap 
  └WeakHashMap

19.Collection 和 Collections 有什么区别?

Collection是集合类的上级接口,继承与他有关的接口主要有List和Set

Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全等操作

20.List、Set、Map 之间的区别是什么?


 

相关文章: