1. Java的跨平台的机制是什么?
java语言编写的程序,一次编译后,可以在多个系统平台上运行
Java程序是通过java虚拟机在系统平台上运行的,只要该系统可以安装相应的java虚拟机,该系统就可以运行java程序
2. JVM 内存是怎么管理的?
堆,方法区,程序计数器,虚拟机栈,本地方法栈
3.GC 一般在什么时候触发?
- Young GC 一般是在新生代的 Eden 区满了之后触发的
- Full GC
- 年老代(Tenured)被写满;
- 持久代(Perm)被写满;
- System.gc()被显示调用;
- 上一次GC之后Heap的各域分配策略动态变化;
4. 调用GC(System.gc())之后会立即触发吗?如果立马触发的话,会导致频繁回收,又会带来什么问题?
如果不是,是什么机制来保障的(finalize)
不会立马触发。甚至可能不会垃圾回收。
造成系统卡顿
用justRanFinalization来保障System.gc()执不执行
5. Java 有了 GC 之后还会有内存泄漏问题吗?
静态集合类泄漏
静态集合类像HashMap,Vector等的使用最容易出现内存泄漏,静态变量的声明周期与应用程序一直,所有的对象Object也不能内释放,因为被其他对象引用着。单例造成的泄漏
单例对象在初始化后将在JVM的整个生命周期中存在(以静态变量的方式),如果单例对象持有外部的引用,那么这个对象将不能被JVM正常回收,导致内存泄漏。
各种连接
数据库连接,网络连接,IO连接等没有显式调用close()关闭,会导致内存泄漏。监听器的使用
在释放对象的同时,没有删除相应监听器,也会造成内存泄漏。
6. 哪些可以作为 GC Roots ?
- 虚拟机栈(栈帧中的本地变量表)中引用的对象
- 方法区中类静态属性引用的对象
- 方法区中常量引用的对象
- 本地方法栈中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)