目录

1、JDK,JRE,JVM的区别与联系

JDK

JRE

JVM

三者的联系

三者的区别

二、类加载的过程

三、JVM的结构

四、Java基础

1,post与get请求的区别

2,三次握手

3,sql优化

4,==与euqls的区别

5,面向对像的三大特征

6,接口的意义

7,抽象类的意义

8,接口和抽象的区别

9,父类的静态方法可否被子类重写

10,什么是不可变对象,好处是什么?

11,java创建对象的几种方式

12,&与&&的区别

13,深拷贝和浅拷贝的区别

14,final的用法

15,int 和Integer的区别

16,String,StringBuffer,StringBuilder的区别

17,了解java中的四大引用类型,它们之间的区别是什么?

18,说说进程线程之间的区别

20,创建线程的两种方式,他们的区别

静待及时更新!!!​​​​​​​


1、JDK,JRE,JVM的区别与联系

JDK

JDK(Java Development Kit) 是整个JAVA的核心,包括了Java运行环境(Java Runtime Envirnment),一堆Java工具(javac/java/jdb等)和Java基础的类库(即Java API 包括rt.jar)。
JDK是java开发工具包,基本上每个学java的人都会先在机器 上装一个JDK,那他都包含哪几部分呢?在目录下面有 六个文件夹、一个src类库源码压缩包、和其他几个声明文件。其中,真正在运行java时起作用的 是以下四个文件夹:bin、include、lib、 jre。有这样一个关系,JDK包含JRE,而JRE包 含JVM。

JRE

JRE(Java Runtime Environment,Java运行环境),包含JVM标准实现及Java核心类库。JRE是Java运行环境,并不是一个开发环境,所以没有包含任何开发工具(如编译器和调试器)
JRE是指java运行环境。光有JVM还不能成class的 执行,因为在解释class的时候JVM需要调用解释所需要的类库lib。 (jre里有运行.class的java.exe)
JRE ( Java Runtime Environment ),是运行 Java 程序必不可少的(除非用其他一些编译环境编译成.exe可执行文件……),JRE的 地位就象一台PC机一样,我们写好的Win64应用程序需要操作系统帮 我们运行,同样的,我们编写的Java程序也必须要JRE才能运行。

JVM

JVM(Java Virtual Machine),即java虚拟机, java运行时的环境,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。针对java用户,也就是拥有可运行的.class文件包(jar或者war)的用户。里面主要包含了jvm和java运行时基本类库(rt.jar)。rt.jar可以简单粗暴地理解为:它就是java源码编译成的jar包。Java虚拟机在执行字节码时,把字节码解释成具体平台上的机器指令执行。这就是Java的能够“一次编译,到处运行”的原因。

三者的联系

JVM不能单独搞定class的执行,解释class的时候JVM需要调用解释所需要的类库lib。在JDK下面的的jre目录里面有两个文件夹bin和lib,在这里可以认为bin里的就是jvm,lib中则是jvm工作所需要的类库,而jvm和 lib和起来就称为jre。JVM+Lib=JRE。总体来说就是,我们利用JDK(调用JAVA API)开发了属于我们自己的JAVA程序后,通过JDK中的编译程序(javac)将我们的文本java文件编译成JAVA字节码,在JRE上运行这些JAVA字节码,JVM解析这些字节码,映射到CPU指令集或OS的系统调用。

三者的区别

a.JDK和JRE区别:在bin文件夹下会发现,JDK有javac.exe而JRE里面没有,javac指令是用来将java文件编译成class文件的,这是开发者需要的,而用户(只需要运行的人)是不需要的。JDK还有jar.exe, javadoc.exe等等用于开发的可执行指令文件。这也证实了一个是开发环境,一个是运行环境。
b.JRE和JVM区别:JVM并不代表就可以执行class了,JVM执行.class还需要JRE下的lib类库的支持,尤其是rt.jar。

二、类加载的过程

我们编写的java代码都是保存着业务逻辑代码,java编译器将.java编译成字节码文件.class。.class文件保存着java转换后虚拟机要执行的指令,当需要某个类的时候,Java虚拟机会加载.class文件,并创建class对象,将class文件加载到虚拟机的内存,这个过程被称为类的加载。

类的生命周期前三步,其中,验证,准备,解析又被称为链接。如图所使。

后面还有使用,卸载。

加载
类加载过程的一个阶段,ClassLoader通过一个类的完全限定名查找此类字节码文件,并利用字节码文件创建一个class对象。

验证
目的在于确保class文件的字节流中包含信息符合当前虚拟机要求,不会危害虚拟机自身的安全,主要包括四种验证:文件格式的验证,元数据的验证,字节码验证,符号引用验证。

准备
为类变量(static修饰的字段变量)分配内存并且设置该类变量的初始值,(如static int i = 5 这里只是将 i 赋值为0,在初始化的阶段再把 i 赋值为5),这里不包含final修饰的static ,因为final在编译的时候就已经分配了。这里不会为实例变量分配初始化,类变量会分配在方法区中,实例变量会随着对象分配到Java堆中。

解析
这里主要的任务是把常量池中的符号引用替换成直接引用

初始化
这里是类记载的最后阶段,如果该类具有父类就进行对父类进行初始化,执行其静态初始化器(静态代码块)和静态初始化成员变量。(前面已经对static 初始化了默认值,这里我们对它进行赋值,成员变量也将被初始化)
      类记载器的任务是根据类的全限定名来读取此类的二进制字节流到 JVM 中,然后转换成一个与目标类对象的java.lang.Class 对象的实例,

在java 虚拟机提供三种类加载器,引导类加载器,扩展类加载器,系统类加载器。

三、JVM的结构

具体如下:

https://blog.csdn.net/zyzzxycj

四、Java基础

1,post与get请求的区别

1,get请求参数再地址栏显示,post请求不显示

2,get请求不安全,post更安全,因为参数不可见

3,get请求传输比post请求快,因为post在接收数据前会先将请求头发给服务器进行确认,然后发送真正的数据

4,post能发送更多的数据类型

5,post用于修改和写入,get用于搜索排序或着筛选之类的操作,目的是资源的获取。

2,三次握手

浏览器向服务器返送tcp请求连接(第一次握手)

服务器答应进行tcp连接(第二次握手)

浏览器确认,并发送请求头及数据。(第三次握手)

3,sql优化

查询sql尽量不用select *,而用具体的字段,节约网络资源

避免在where子句中用“or”连接,可能或是索引失效,进行全表扫描

模糊查询时like,%放后面,查询的具体内容放前面,提高查询效率

用varchar不用char

使用索引,提高查询效率。索引不易太多,一般五个以内

用默认值代替null

避免在where子句中使用<>,!=等操作符号

复合索引最左特性。

union代替union all。前者会自动去掉多个结果集中的重复结果。后者将所有的结果显示出来。

4,==与euqls的区别

值类型是存放在内存中的堆栈,而引用类型的变量在栈中是存储引用类型变量的地址,而其本身则存储在堆中。

==比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量在堆中的地址是否相同,既栈中的内容是否相等

equals操作表示的是两个变量是否是同一个对象的引用,及堆中的内容是否相同

==比较多较的是两个对象的地址,equals比较的是两个对象的内容。

5,面向对像的三大特征

封装,继承,多态

6,接口的意义

功能的拓展,回调,开发的一种规范

7,抽象类的意义

为其他子类提供一个公共的类型

封装子类中重复定义的内容

定义抽象方法,子类虽然有不同的实现,但是定义是一致的

8,接口和抽象的区别

比较点    抽象类  接口
默认方法    抽象类可以有默认的方法实现    java 8之前,接口中不存在方法的实现
 
实现方式   子类使用extends关键字来继承抽象类.如果子类不是抽象类,子类需要提供抽象类中所声明方法的实现    子类使用implements来实现接口,需要提供接口中所有声明的实现.
构造器   抽象类中可以有构造器   接口中不能
和正常类区别  抽象类不能被实例化    接口则是完全不同的类型
访问修饰符  抽象方法可以有public,protected和default等修饰    接口默认是public,不能使用其他修饰符
多继承    一个子类只能存在一个父类  一个子类可以存在多个接口
添加新方法     抽象类中添加新方法,可以提供默认的实现,因此可以不修改子类现有的代码    如果往接口中添加新方法,则子类中需要实现该方法

9,父类的静态方法可否被子类重写

不可以,重写只适用于实例方法,不能用于静态方法,而子类当中含有含有和父类相同签名的静态方法,我们一般称之为隐藏。

10,什么是不可变对象,好处是什么?

不可变对象指对象一旦创建,状态就不能被改变,任何修改都会创建一个新的对象,如string,integer,及其包装类,不可变对象最大的好处是线程安全。

11,java创建对象的几种方式

new创建新对象

通过反射机制

采用clone

通过序列化

前两者都需要显性的调用构造方法,对于clone机制,需要注意浅拷贝和深拷贝的区别,对于序列化机制需要明确其实现原理,在Java中序列化可以通过实现Externalizable或着Serializable来实现。

12,&与&&的区别

&是位操作,只有两者都符合条件,才返回true

&&是逻辑运算符,运算结果与&结果相同,但是效率较高,产生短路的效果。

13,深拷贝和浅拷贝的区别

浅拷贝:被复制的对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象,换言之,浅拷贝仅仅复制所考虑的对象,而不复制他所引用的对象

深拷贝:被复制的对象的所有的变量都含有与原来对象相同的值,而那些引用其他对象的变量将指向被复制过的新的对象,而不再是原来的那些被引用的对象,换言之,深拷贝把要复制的对象引用的对象都复制了一遍。

14,final的用法

final修饰的类不可被继承

final修的方法不可以被重写

final修饰的变量不可以被改变,如果修饰引用,那么表示引用不可改变,引用指向的内容可变

final修饰的方法,JVM尝试将其内联,一提高效率

final修饰的常量,在编译阶段会存入常量池

15,int 和Integer的区别

Integer是int的包装类型,在拆箱和装箱中二这自动转换,int是基本类型,直接存放数据,而Integer是对象,一个引用指向这个对象,又有integer是一个对象,在JVM中需要一定的数据结构进行描述,象必int而言,其占用的内存更大

16,String,StringBuffer,StringBuilder的区别

String是字符串常量,final修饰,StringBuffer是字符串变量(线程安全),StringBuilder是字符串变量(线程不安全),StringBuffer和StringBuilde实现原理都一样,都是基于数组扩容来实现的。其父类都素是abstractStringBuilder,只是StringBuffer加了同步锁,更加安全。

17,了解java中的四大引用类型,它们之间的区别是什么?

在Java中主要有四大引用类型,分别是强引用,弱引用,软引用,虚引用,不同的引用类型主要体现在GC上:

强引用:如果一个对象具有强引用,他就不会被垃圾回收器回收,即使当前内存空间不足,JVM也不会回收他,而是抛出OutOfMemoryError错误,使程序异常终止,如果想中断强引用和某个对象之间的关联,可以显示的将引用赋值为null,这样一来的话,JVM在合适的时间就会回收该对象。

软引用:在使用软引用时,如果内存的空间足够,软引用就能继续被使用而不会被垃圾回收器回收,只有在内存不足时,软引用才会被垃圾回收器回收

弱引用:具有弱引用的对象拥有的生命周期更短,因为当JVM进行回收,一旦发现弱引用对象,无论当前内存空间是否充足,都会将弱引用回收,不过由于垃圾回收器是一个优先级较低的线程,所以并不会一定能迅速发现弱引用对象

虚引用:如果一个对象仅持有虚引用,那么它相当于没有引用,在任何时候都可能被垃圾回收器回收。

18,说说进程线程之间的区别

进程是程序运行和资源分配的基本单位,一个程序至少一个进程,一个进程至少一个线程,进程在执行过程中拥有独立的内存单元,而多个线程共享内存资源,减少切换次数,从而效率更高,线程是进程的一个实体,是cpu调度和分配的基本单位,比程序更小的能独立运行的基本单位,同一进程中的多个线程之间可以并发执行,在Linux中,进程也成为Task。

19,什么是多线程上下文切换

指cpu控制权由一个正在运行的线程切换到另一个就绪等待并获取cpu执行权的线程过程。19,创

20,创建线程的两种方式,他们的区别

继承Thread类,实现Runnable接口,后者更优:

java不支持多继承,因此扩展Thread类就代表这个子类不能扩展其他类,而实现Ruunable接口的类还可能扩展另一个类

类要求可执行即可,因此继承Thread类的开销过大

21,Thread类中start()和run()方法有什么区别

在start()方法中最终要调用Native方法start0()用来启动新创建的线程,启动后会自动调用run()方法,如果我们直接调用run()方法就和我们调用其他方法一样不会再线程中执行。

静待及时更新!!!

Java基础高频面试题相关推荐

  1. 火爆Github的大厂Java 基础高频面试题,真的无解

    前言 网上的 Java 基础面试题文章有非常多,但是大部分都比较老了. 很多题目早已不是当前的热门题目,没有必要在这些题目上花太多时间. 很多答案放现在已经不准确,可能会误导新人. 因此,我花了几天时 ...

  2. elasticsearch java对象 驼峰原则_2020年Java基础高频面试题汇总(1.4W字详细解析)...

    1. Java语言有哪些特点 (1)简单易学.有丰富的类库 (2)面向对象(Java最重要的特性,让程序耦合度更低,内聚性更高) (3)与平台无关性(JVM是Java跨平台使用的根本) (4)可靠安全 ...

  3. 问遍了身边的面试官朋友,我整理出这份 Java 集合高频面试题(2022年最新版)

    微信搜索[程序员囧辉],关注这个坚持分享技术干货的程序员. 我的最新文章:百万级QPS,支撑淘宝双11商品浏览需要哪些技术 前言 大家好,我是囧辉,面试系列开篇:Java 基础高频面试题(2021年最 ...

  4. 分享18道Java基础面试笔试题

    转载自 分享18道Java基础面试笔试题(面试实拍) 1.你最常上的两个技术站和最常使用的两个app分別进什么?主要解决你什么需求? 2.请简述http协议中get请求和post请求的区别. 3.请简 ...

  5. Java基础常见面试题(一)

    Java基础常见面试题(一) 1. 为什么说 Java 语言"编译与解释并存"? 我们可以将高级编程语言按照程序的执行方式分为两种: 编译型 :编译型语言会通过编译器将源代码一次性 ...

  6. 蓝桥杯 Java 基础练习 vip试题

    蓝桥杯 Java 基础练习 vip试题 高精度加法 其实这道题调用函数就会变得更简单 import java.math.BigDecimal; import java.util.Scanner; pu ...

  7. 让秋招飞,Java岗高频面试题盘点,站着就把offer给拿了

    前言 咱们先随便打开一个招聘网站,看看对Java工程师的技能要求. 抛开其它的经验能力等等,单纯从技术,或者说知识上来讲,可以发现一些共通的地方. Java基础 计算机基础 数据库 常用开源框架 分布 ...

  8. JAVA基础——toString()方法,java基础面试笔试题

    我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家. 扫描二维码或搜索下图红色VX号,加VX好友,拉你进[程序员面试学习交流群]免费领取.也欢迎各位一起 ...

  9. Java 基础面试题,java基础面试笔试题

    我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家. 扫描二维码或搜索下图红色VX号,加VX好友,拉你进[程序员面试学习交流群]免费领取.也欢迎各位一起 ...

最新文章

  1. Dubbo 2.7.1 踩坑记
  2. 如何避免重构带来的危险
  3. iOS开发 QQ粘性动画效果
  4. hadoop简介(大数据技术)
  5. MIP 扩展组件开发手册
  6. (33)System Verilog类1调用类2示例
  7. mysql mongodb binlog_订阅MongoDB的数据变更比解析mysql的binlog更简单
  8. 海思Hi3716M高清广电平移和低端IPTV解决方案芯片产品简介
  9. Linux date对时间戳的转换
  10. linux装回windows系统,装linux后怎样装回windows?(Linux系统清除Grub的几种方法)
  11. PS2汉化2 - 自制程序的运行与调试
  12. NVIDIA NGC镜像使用笔记
  13. Vue整合Markdown组件+SpringBoot文件上传+代码差异对比
  14. 满减活动基础算法-java-类似淘宝满200减30
  15. 关于QTableWidget 表头设置无效的原因
  16. abp mysql .net core_基于abp vNext和.NET Core 开发博客
  17. 信息传播渠道多元化日渐明显
  18. JavaScript上下文对象详细解析,ES3与ES6
  19. Cmpp发送wappush
  20. [转载] linux程序后台挂起demo——nohup

热门文章

  1. JavaScript设计模式----单例模式
  2. R数据分析:网络分析的做法,原理和复现方法
  3. ubuntu 14.04 systemd开机启动方式安装
  4. 【论文阅读】Exploring the Limitations of Behavior Cloning for Autonomous Driving
  5. 大数据前端可视化大屏--前端开发之路
  6. IDEA:IDEA中文翻译插件的安装与使用
  7. 机器视觉工业相机与智能相机的区别
  8. android byte[] 清空,android byte的使用
  9. matlab高斯函数半高全宽,【求助】高斯分布下,求半宽度
  10. matlab 半高斯拟合,高斯曲线拟合求半宽高