JAVA 以及相关进阶 面试题总结

一.  JAVASE 

1. java语言的程序为什么可以实现跨平台(如何理解JAVA语言的跨平台特性)?

核心:java虚拟机

分析:我们所写的JAVA程序是".java"为后缀的源文件,但这些文件计算机无法直接执行,需要先进行编译环节,通过编译变为以".class"为后缀的字节码文件,这个字节码文件交由JVM(JAVA虚拟机)来运行.

那我们只要在需要运行java应用程序的OS(操作系统)上,安装一个JVM,由JVM来负责Java程序在该系统中的运行即可。不同的OS(操作系统)都有与之对应的JVM,所以只需要写一个Java程序,就可以在多个不同的操作系统上执行。这样就实现了Java程序的跨平台性。也称为Java具有良好的可移植性。

总结为以下几点:

1.我们编写了一份java代码,可以运行在多个不同的系统之中
2.Java代码需要编译,编译生成文件是.class为后缀的字节码文件
3.字节码文件需要交给JVM(java虚拟机)来执行
4.我们可以针对不同的系统,安装这个系统的JVM
5.一份代码 处处运行

2.JDK  JRE  JVM三者之间的关系是什么?

JVM是Java虚拟机,是虚拟出来的一个系统,我们常说的hotsport是JVM的一种实现;JRE是Java的最小运行环境,它包含JVM和系统类库;JDK是Java的最小开发环境,它包含JRE+编译运行工具。

3.标识符的命名规范是什么?

1. 标识符可以由字母、数字、下划线(_)、美元符($)组成,但不能包含 @、%、空格等其它特殊字符
2. 不能以数字开头。如:123name 就是不合法
3. 标识符严格区分大小写。如: tmooc 和 tMooc 是两个不同的标识符
4. 标识符的命名最好能反映出其作用,做到见名知意。
5. 标识符不能是Java的关键字

4.简述一下JAVA中的八大基本数据类型? 

类型名称字节空间默认值取值范围
byte10-128   ~    127
short 20--32768  ~32767
int40-21.47亿   ~  21.47亿(-2147483648~2147483647)
long80-9223372036854775808~9223372036854775807
float40.0F1.17549435E-38   ~  3.4028235E38
double80.0D4.9E-324  ~  1.7976931348623157E308
char2'\u0000'0  ~  65535
boolean1FALSEfalse    true

5.JAVA中基本类型转换的规则有哪些?

口诀:
小到大,直接转 大到小,强制转 浮变整,小数没
低 ------------------------------------> 高
byte,short,char→ int→ long→float→double

6.什么是  逻辑与  与  短路与(&和&&)?

逻辑与和短路与都是需要整个判断都为true的时候表达式才为true,当某一个判断为false时逻辑与会继续执行后续判断,短路与则不会再继续执行了。(逻辑或和短路或也是如此)

7.  switch...case判断条件可以使用字符串类型吗?

在jdk1.7之前只能使用整型,在jdk1.7开始可以使用字符串类型。

附:支持的数据类型有  byte   short   int   char   String

8.如何定义一个方法?

修饰词,返回值类型,方法名,参数列表,方法体

9.  Java中常用的循环方式有哪些?你能说说他们的区别吗?

while循环、do...while循环、for循环,while循环可能一次都不执行、do...while循环至少会执行一次,for循环也有可能一次都不执行,但是我们最常用的循环方式。

10.  break和continue有什么区别?

break用于结束循环,continue用于跳过本次循环。



11.什么是嵌套循环,如何跳出嵌套循环,你觉得嵌套循环多了有什么样的问题?

嵌套循环就是循环中套循环,外层循环控制行,内层循环控制列,运行规则遵循外层循环走一次,内层循环走所有次;当我们想跳出整个嵌套循环的时候,可以使用outer:标签来定义循环,使用break outer来跳出整个循环;嵌套循环我觉得一般需要控制在3层以内,如果嵌套太多可读性不好,而且可能存在设计问题。

12.  基本类型画“==”号和引用类型画“==”号有什么区别?那引用类型要判断内容是否相等应该怎么办?

基本类型画“==”号是判断两个值是否相等;
引用类型画“==””号是判断两个对象在堆的内存地址是否相同;
如果引用类型需要判断内容是否相等,应该使用重写后的equals方法(String类重写了Object中的equals方法);

13. 说一下权限修饰符各自的范围?

用来控制一个类,或者类中的成员的访问范围。

TIPS:default是表示不写修饰符,默认,如果写default单词来修饰会报错

14. this 与super的区别?

总结:java中的this代表的是指向对象本身的一个指针,super是发生在继承关系中的,代表的是指向父类对象的一个指针。
this.成员变量名,是访问本类的成员变量;如果参数super.成员变量名,是访问的父类的成员变量。
this.方法名,是访问本类的方法,我们在调用方法时,可以不写this,编译器会自动生成一个隐式的this;super.方法名,是访问父类的方法。
this(),是访问的本类的构造方法;super()是访问父类的构造方法,并且在初始化子类时,一定会先初始化父类。默认子类中的构造器会隐式的调用super()方法。

15. 重写与重载的区别?

重载:在一个类中的现象:同一个类中,存在方法名相同,参数列表不同的方法
重写:是指建立了继承关系以后,子类对父类的方法不满意,可以重写,遵循两同两小一大原则
重载的意义:是为了外界调用方法时方便,不管传入什么样的参数,都可以匹配到对应的同名方法
重写的意义:在不修改源码的情况下,进行功能的修改与拓展。

16.  请你说一下面向对象的特征?那什么是封装、什么是继承、什么是多态?

封装、继承、多态;
我们把一些具有相同属性或行为的类抽取出来,就是封装;对类的封装,就是封装的对象的属性和行为;对方法的封装,封装的是具体的功能。
继承是为了代码的重用,Java中的继承是单继承的,一旦继承子类就具有父类+子类的属性和行为;
我们声明一个父类型的引用指向子类型的对象,就是多态。多态的主要表现形式就是重写和重载。

17. 请你说一下java中的static关键字?

static 修饰的内容,是静态资源,它属于类资源,随着类的加载而加载,优先于对象加载,而且只加载一次。它可以被全局所有对象所共享,值只有一份。

static修饰的变量,称为静态变量,存在于方法区(元空间)中;通过类名.变量来访问,当所有对象数据都一样时使用。
static修饰的方法,称为静态方法,存在于方法区(元空间)中;通过类名.方法名来访问,当方法的操作仅与参数有关而与对象无关时使用,例如咱们常写的工具类当中的方法。
还有一种static静态块,在被类加载时自动执行,存在于方法区(元空间)中,常常用于加载静态资源,例如图片,音频,读取文档等。

18.说一下顶级父类Object类中的toString()、hashCode()、equals()方法?

toString()  :重写前  打印的是地址值

                     重写后  打印的是对象的属性 与  属性值

equals()  :  重写前 比较的是两个对象的地址值 底层用 == 来判断

                  重写后 比较的是两个对象的:类型+属性 + 属性值

hashCode(): 返回对象的哈希码值

二.前端

1.get提交数据和post提交数据有什么区别?

get方式:是默认的提交方式,但是不安全(都展示在地址栏),长度受限

post方式:安全,数据不在地址栏显示,看不见啦,提高安全性

持续更新中...

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 我可以提供一些Java集合相关面试题,包括:1.什么是集合?2.什么是集合框架?3.HashMap和Hashtable有什么区别?4.ArrayList和LinkedList有什么区别?5.什么是迭代器?6.什么是泛型?7.什么是线程安全的集合?8.什么是同步集合? ### 回答2: Java集合是Java中常用的数据结构,提供了许多功能强大且灵活的类和接口,可以方便地处理各种数据操作。下面我将回答一些常见的和Java集合相关面试题。 1. 请解释一下Java集合框架。 Java集合框架是一组用来存储和操作数据的类和接口的集合。它提供了各种集合类型(如List、Set、Map等),以及用于集合操作的方法和算法。Java集合框架的设计目标是提供高性能、可靠性和安全性的数据结构,同时将最小的编程复杂性和性能开销传递给开发人员。 2. List和Set之间有什么区别? List是一个有序的集合,允许重复元素。可以通过索引访问集合中的元素。Set是一个不包含重复元素的集合,不保证元素的顺序。在List中,元素可以根据插入的顺序进行访问和遍历,而在Set中,无法根据插入的顺序访问元素。 3. HashMap和HashTable有什么区别? HashMap和Hashtable都是实现了Map接口的键值对集合。主要区别在于HashMap是非线程安全的,而Hashtable是线程安全的。此外,HashMap允许使用null键和null值,而Hashtable不允许。在性能上,HashMap要优于Hashtable,因为HashMap使用了更高效的哈希算法。 4. 请解释一下ArrayList和LinkedList之间的差异。 ArrayList和LinkedList都是List接口的实现类。ArrayList是基于动态数组实现的,因此在随机访问和获取元素时性能较好。而LinkedList是基于双向链表实现的,因此在插入和删除元素时性能较好。因此,如果需要频繁进行随机访问操作,则应选择ArrayList;如果需要频繁进行插入和删除操作,应选择LinkedList。 5. 请解释一下迭代器(Iterator)是什么? 迭代器是用于遍历集合中元素的对象。由于不同的集合类型内部的数据结构不同,使用通用的for循环进行遍历时可能会有问题。迭代器提供了一种统一的方式来遍历集合,无论集合内部的数据结构如何,都能够正确地获取元素。可以使用迭代器的方法来逐个访问和操作集合中的元素。 ### 回答3: 面试题一: ArrayList和LinkedList有什么区别? ArrayList和LinkedList都是Java集合框架中的List接口的实现类,它们的主要区别在于底层数据结构和性能。 ArrayList底层使用数组实现,它的读取效率很高,时间复杂度为O(1),但是在插入和删除元素时会导致数组的扩容和复制,时间复杂度为O(n)。因此,适合对元素的访问操作较多,而对插入和删除操作较少的场景。此外,ArrayList还支持随机访问,可以通过索引来直接访问元素。 LinkedList底层使用双向链表实现,它的插入和删除操作效率很高,时间复杂度为O(1),因为只需要改变前后节点的指针即可。但是在读取元素时需要从头开始遍历链表,时间复杂度为O(n)。因此,适合对插入和删除操作较多,而对元素的访问操作较少的场景。此外,LinkedList还支持快速的头部和尾部操作。 总结起来,ArrayList适用于元素访问频繁的场景,而LinkedList适用于插入和删除频繁的场景。 面试题二: HashSet和TreeSet有什么区别? HashSet和TreeSet都是Java集合框架中的Set接口的实现类,它们的主要区别在于元素的存储和排序方式。 HashSet底层使用哈希表实现,它不保证元素的顺序,存储和检索的速度都很快,时间复杂度为O(1)。HashSet使用元素的hashCode()方法和equals()方法来判断元素的唯一性,因此要求元素必须实现hashCode()和equals()方法。 TreeSet底层使用红黑树实现,它可以对元素进行排序,默认按照元素的自然顺序进行排序,或者通过传入的Comparator对象来进行自定义排序。TreeSet的存储和检索速度较慢,时间复杂度为O(logn)。TreeSet要求元素必须实现Comparable接口或者在构造TreeSet时传入Comparator对象来进行比较。 总结起来,HashSet适用于需要快速存储和检索元素,并且不需要考虑元素的排序的场景。而TreeSet适用于需要对元素进行排序的场景。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值