一些面试背题

发布于 2023-07-06  159 次阅读


HTTTPS 和SSL/TLS协议

HTTP是什么?

HTML是网络协议,用于传输Web内容。大部分网站都是通过 HTTP 协议来传输 Web 页面、以及 Web 页面上包含的各种内容,如:图片、CSS 样式、JS 脚本等。

“SSL/TLS”是什么?

SSL 是“Secure Sockets Layer”的缩写,叫做“安全套接层”,也就是安全链接。而标准化之后的SSL改名为 TLS(“Transport Layer Security”的缩写),中文叫做“传输层安全协议”。所以两者其实是同一个东西

“HTTPS”又是什么?

HTTPS就是HTTP+SSL=HTTPS,简单说就是HTTP是明文传输,不安全,因此加上SSL之后就会变成了HTTPS。

JDK、JRE、JVM之间的区别

  • JDK(Java SE Development Kit),Java标准开发包,它提供了编译、运⾏Java程序所需的各种工具和资源,包括Java编译器、Java运⾏时环境,以及常⽤的Java类库等
  • JRE( Java Runtime Environment) ,Java运⾏环境,⽤于运⾏Java的字节码⽂件。JRE中包括了JVM以及JVM⼯作所需要的类库,普通⽤户⽽只需要安装JRE来运⾏Java程序,⽽程序开发者必须安装JDK来编译、调试程序。
  • JVM(Java Virtual Mechinal),Java虚拟机,是JRE的⼀部分,它是整个java实现跨平台的最核⼼的部分,负责运⾏字节码⽂件。

我们写Java代码,⽤txt就可以写,但是写出来的Java代码,想要运⾏,需要先编译成字节码,那就需要
编译器,⽽JDK中就包含了编译器javac,编译之后的字节码,想要运⾏,就需要⼀个可以执⾏字节码的
程序,这个程序就是JVM(Java虚拟机),专⻔⽤来执⾏Java字节码的。

如果我们要开发Java程序,那就需要JDK,因为要编译Java源⽂件。
如果我们只想运⾏已经编译好的Java字节码⽂件,也就是*.class⽂件,那么就只需要JRE。
JDK中包含了JRE,JRE中包含了JVM。
另外,JVM在执⾏Java字节码时,需要把字节码解释为机器指令,⽽不同操作系统的机器指令是有可能
不⼀样的,所以就导致不同操作系统上的JVM是不⼀样的,所以我们在安装JDK时需要选择操作系统。
另外,JVM是⽤来执⾏Java字节码的,所以凡是某个代码编译之后是Java字节码,那就都能在JVM上运
⾏,⽐如Apache Groovy, Scala and Kotlin 等等。

hashCode()与equals()之间的关系

在Java中,每个对象都可以调⽤⾃⼰的hashCode()⽅法得到⾃⼰的哈希值(hashCode),相当于对象的
指纹信息,通常来说世界上没有完全相同的两个指纹,但是在Java中做不到这么绝对,但是我们仍然可
以利⽤hashCode来做⼀些提前的判断,⽐如:

  • 如果两个对象的hashCode不相同,那么这两个对象肯定不同的两个对象
  • 如果两个对象的hashCode相同,不代表这两个对象⼀定是同⼀个对象,也可能是两个对象
  • 如果两个对象相等,那么他们的hashCode就⼀定相同

在Java的⼀些集合类的实现中,在⽐较两个对象是否相等时,会根据上⾯的原则,会先调⽤对象的
hashCode()⽅法得到hashCode进⾏⽐较,如果hashCode不相同,就可以直接认为这两个对象不相
同,如果hashCode相同,那么就会进⼀步调⽤equals()⽅法进⾏⽐较。⽽equals()⽅法,就是⽤来最终
确定两个对象是不是相等的,通常equals⽅法的实现会⽐较重,逻辑⽐较多,⽽hashCode()主要就是得
到⼀个哈希值,实际上就⼀个数字,相对⽽⾔⽐较轻,所以在⽐较两个对象时,通常都会先根据
hashCode想⽐较⼀下。

所以我们就需要注意,如果我们重写了equals()⽅法,那么就要注意hashCode()⽅法,⼀定要保证能遵
守上述规则。

String、StringBuffer、StringBuilder的区别

  • String是不可变的,如果尝试去修改,会新⽣成⼀个字符串对象,StringBuffer和StringBuilder是可
    变的
  • StringBuffer是线程安全的,StringBuilder是线程不安全的,所以在单线程环境下StringBuilder效
    率会更⾼