Java面试题

Java面试题

TCP/IP 传输层的TCP和UDP协议的主要区别:
关键的区别:
使用TCP协议前,必须先建立TCP连接,形成传输数据的通道;
TCP采用“三次握手” 方式,点对点通信是可靠的
TCP协议进行通信的两个应用进程:客户端、服务端
在连接中可进行大数据量的传输
传输完毕需要释放已建立的连接;
效率低!

UDP协议:
将数据、源、目的封装成数据包,不需要建立连接
数据包有限制大小: 每个数据包限制在64K内;
不可靠的连接:不管对方是否准备好,接收方是否接收;
可以广播发包;
发送完数据不需要释放资源,开销小,速度快!

JDK、JRE、JVM的区别:
JDK 是java语言的软件开发工具包(SDK)。 在JDK的安装目录下又一个jre的目录,里面有两个文件,一个是bin 一个是 lib,我们可以认为bin里面就是JVM,lib是jvm工作所需要的类库,而jvm和lib合起来就是jre。

JDK( Java Development kit), 包含JRE 和一堆工具和java 的基础类库什么的(java API)
JRE( Java Runtime Environment, Java运行环境), 包含JVM标准实现及Java核心类库。JRE是Java运行环境,并不是一个开发环境。所以里面没有包含任何开发工具。
JVM(Java Virtual Machine),即java虚拟机, java运行时的环境,Java虚拟机在执行字节码时,把字节码解释成具体平台上的机器指令执行。这就是Java的能够“一次编译,到处运行”的原因。

三者的联系和区别:
JVM不能单独搞定class的执行,解释class的时候JVM需要调用所需要的类库lib。在JRE目录下两个文件bin 和 lib,这里bin就是JVM,lib 就是解释class 的类库lib。(lib 中尤其是rt.java 很重要,就是java基本类库的包,什么math,time都在里面)
JVM + lib == JRE。
JDK 中有javac.exe 这个文件,而JRE里面是没有的, 这个是编译程序,javac指令就是将java文件编译成java.class文件,这是开发这需要的,而用户如果只是运行程序的话 是不需要的。

类的加载过程
类的加载过程主要是三步:
在这里插入图片描述
结合JDK、JRE、JVM体现类的加载过程:
加载: JDK通过java.exe 的javac命令将class文件字节码内容加载到内存中,并将这些静态数据转换成方法区的运行时数据结构,然后生成一个代表这个类的java.lang.Class对象,作为方法区中类数据的访问入口(引用地址)。所以一个java 只会生成一个java.class文件。 所以这里判断class是相等的。

        Person p1 = new Person();
        Class p1Class = p1.getClass();

        Class p2Class = Class.forName("Reflection.Person");

        System.out.println(p1Class == p1Class);
        // true

所有需要访问和使用类数据只能通过这个Class对象。这个加载的 过程需要类加载器参与。

链接: 将Java类的二进制代码合并到JVM的运行状态中的过程。
链接分为三个阶段:验证、准备、解析
验证:确保加载的类信息符合JVM规范。
准备:正式为类变量(static)分配内存设置类变量默认初始化值 的阶段,这些内存都将在方法区中进行分配。
解析:虚拟机常量池的符号引用(常量名)替换为直接引用地址的过程。

初始化:
对静态变量,静态代码块执行初始化工作。

类的加载会涉及到一个双亲委派机制
双亲委派机制:当某个类加载器需要加载某个.class文件时,它首先把这个任务委托给他的上级类加载器,递归这个操作,如果上级的类加载器没有加载,自己才会去加载这个类。
双亲委派机制的作用
1、防止重复加载同一个.class。通过委托去向上面问一问,加载过了,就不用再加载一遍。保证数据安全。
2、保证核心.class不能被篡改。通过委托方式,不会去篡改核心.clas,即使篡改也不会去加载,即使加载也不会是同一个.class对象了。不同的加载器加载同一个.class也不是同一个Class对象。这样保证了Class执行安全。

进程和线程的区别:
进程
一个进程就是CPU执行的单个任务的过程,是程序在执行过程当中CPU资源分配的最小单位,并且进程都有自己的地址空间,包含了运行态、就绪态、阻塞态、创建态、终止态五个状态。

线程
线程是CPU调度的最小单位,它可以和属于同一个进程的其他线程共享这个进程的全部资源

两者之间的关系
一个进程包含多个线程,一个线程只能在一个进程之中。每一个进程最少包含一个线程。

两者之间的区别
其实最根本的区别在刚开始就说了:进程是CPU资源分配的最小单位,线程是CPU调度的最小单位

进程之间的切换开销比较大,但是线程之间的切换开销比较小。

CPU会把资源分配给进程,但是线程几乎不拥有任何的系统资源。因为线程之间是共享同一个进程的,所以线程之间的通信几乎不需要系统的干扰。

Http与Https的基本概念和他们的区别
http的中文叫做超文本传输协议,它负责完成客户端到服务端的一系列操作,是专门用来传输注入HTML的超媒体文档等web内容的协议,它是基于传输层的TCP协议的应用层协议

https:https是基于安全套接字的http协议,也可以理解为是http+ssl/tls(数字证书)的组合

http和https的区别:

HTTP 的 URL 以 http:// 开头,而 HTTPS 的 URL 以 https:// 开头
HTTP 是不安全的,而 HTTPS 是安全的
HTTP 标准端口是 80 ,而 HTTPS 的标准端口是 443
在 OSI 网络模型中,HTTPS的加密是在传输层完成的,因为SSL是位于传输层的,TLS的前身是SSL,所以同理
HTTP无需认证证书,而https需要认证证书

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值