1. Java的跨平台的机制是什么?

java语言编写的程序,一次编译后,可以在多个系统平台上运行

Java程序是通过java虚拟机在系统平台上运行的,只要该系统可以安装相应的java虚拟机,该系统就可以运行java程序

2. JVM 内存是怎么管理的?

堆,方法区,程序计数器,虚拟机栈,本地方法栈

3.GC 一般在什么时候触发?

  • Young GC 一般是在新生代的 Eden 区满了之后触发的
  • Full GC
    1. 年老代(Tenured)被写满;
    2. 持久代(Perm)被写满;
    3. System.gc()被显示调用;
    4. 上一次GC之后Heap的各域分配策略动态变化;

4. 调用GC(System.gc())之后会立即触发吗?如果立马触发的话,会导致频繁回收,又会带来什么问题?

如果不是,是什么机制来保障的(finalize)

不会立马触发。甚至可能不会垃圾回收。

造成系统卡顿

用justRanFinalization来保障System.gc()执不执行

5. Java 有了 GC 之后还会有内存泄漏问题吗?

  1. 静态集合类泄漏
    静态集合类像HashMap,Vector等的使用最容易出现内存泄漏,静态变量的声明周期与应用程序一直,所有的对象Object也不能内释放,因为被其他对象引用着。

  2. 单例造成的泄漏

    单例对象在初始化后将在JVM的整个生命周期中存在(以静态变量的方式),如果单例对象持有外部的引用,那么这个对象将不能被JVM正常回收,导致内存泄漏。

  3. 各种连接
    数据库连接,网络连接,IO连接等没有显式调用close()关闭,会导致内存泄漏。

  4. 监听器的使用
    在释放对象的同时,没有删除相应监听器,也会造成内存泄漏。

6. 哪些可以作为 GC Roots ?

  1. 虚拟机栈(栈帧中的本地变量表)中引用的对象
  2. 方法区中类静态属性引用的对象
  3. 方法区中常量引用的对象
  4. 本地方法栈中JNI引用的对象

7. String 类型不可修改,为什么呢?字符串常量,或者new一个String对象,创建对象的时候有什么差异吗?非要改String类型的值,能改的到吗?new一个String对象,是放在哪里的?StringBuilder和StringBuffer有什么区别?

String不可变是因为字符数组被final和private修饰。并且String没有提供可以修改字符数组的API

new一个对象时指向堆里面的,字符串常量时指向方法区里的字符串常量池

反射可以修改(不是声明底层字段会失败)

放在堆里(Heap)

一个线程不安全一个线程安全

8. 反射机制有了解吗?反射创建对象和new创建对象有什么区别?反射和new的性能哪个更高一点?

new属于静态编译
反射属于动态编译,意思就说只有到运行时才会去获得该对象的实例,Spring就是使用的反射

new性能更高

9. 多线程了解吗?通过什么类来实现?

了解

主要通过Thread类

10. 设计模式有了解吗?用了这些模式,带来的好处是什么?为什么要用这些设计模式(方便管理类、分工开发)

​ 了解

  • 方便重用,方便移植
  • 方便阅读,方便他人了解
  • 代码可靠性更高,降低错误发生
  • 节省写项目的时间

11.Redis 和大型数据库有什么区别?为什么要用这个数据库(Redis)

  • Redis是非关系型数据库,Mysql是关系型数据库
  • Mysql持久化到硬盘中,读取较慢,Redis数据存储到内存中,读取速度快

为什么要用:

反复连接数据库需要花费很多时间,从而导致运行效率过慢,反复连接也会导致数据库负载变高。由于Redis是基于内存操作,所以CPU不是性能瓶颈,机器的内存和宽带才是Redis的瓶颈,所以用Redis可以减少访问数据库的次数,提高运行效率。

12. 编码的时候,会做网络字节序转换,大小端转换,为什么要做这个转换呢? (不会)

因为不同的计算机都有自己的主机字节序,为了保证数据传输的统一性,就是让数据在所有计算机上都以一种通用形式呈现,所以会作网络字节序转换。

TCP/IP协议规定使用“大端”字节序作为网络字节序。

13. ICMP 协议,有了解吗?

ICMP(Internet Control Message Protocol)Internet控制报文协议。它是TCP/IP协议簇的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。

它的功能是报告无法传送的数据包的错误,并帮助对这些错误进行疑难解答。

典型应用:PING,traceroute(检查路由(路径)并测量跨Internet协议(IP)网络的传输延迟数据包的工具)

14. HTTP 和 HTTPS 的区别是什么?

1、https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。

2、http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。

3、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。

4、http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。

15. 数字证书使用了什么机制?数字证书为什么被创建?

数字证书采用公钥体制,即利用一对互相匹配的密钥进行加密、解密。用于加密和验证签名。当发送一份保密文件时,发送方使用接收方的公钥对数据加密,而接收方则使用自己的私钥解密,这样信息就可以安全无误地到达目的地了。通过数字的手段保证加密过程是一个不可逆过程,即只有用私有密钥才能解密。

为了防止信息泄露,所以必须保证网络安全的四大要素:

  • 信息传输的保密性
  • 数据交换的完整性
  • 发送信息的不可否认性
  • 交易者身份的确定性

所以创建数字证书

摘自华为面经-Java-西安_笔经面经_牛客网(https://www.nowcoder.com/discuss/1053917)