吊打面试官,你需要懂这些Java基础题(系列一)

😄 吊打面试官,你需要懂这些Java基础题(系列一)


本篇文章适合正在学习Java基础的小伙伴儿,以及正在找工作的大佬面试使用。如果文章有写的不准确或需要改进的地方,还请各位大佬不吝赐教💞💞💞。
胖胖仔在此先感谢大家了。😘😘😘
🏠个人主页:https://www.artprogramming.xn–6qq986b3xl/点击直达
🧑个人简介:大家好,我是胖胖仔,一个想要与大家共同进步的程序猿😉😉
💕欢迎大家:这里是CSDN,我总结知识的地方,欢迎来到我的博客,我亲爱的大佬😘

🌆Java基础思维导图

🏯Java的基本数据类型有哪些?默认值?

基本数据类型默认值包装类范围
byte0Byte-2^7 ~ 2^7-1
short0Short-2^15 ~ 2^15-1
int0Integer-2^31 ~ 2^31-1
long0Long-263~263-1
charCharacter\u0000~\uffff
float0.0fFloat-3.410^38 ~ 3.410^38
double0.0dDouble-3.410^38 ~ 3.410^38
booleanfalseBoolean

🏰自动装箱,自动拆箱的应用场景

自动装箱:一个基本类型的数据直接赋值给对应的包装类型。💛

自动拆箱:一个包装类型的对象直接赋值给对应的基本类型。💙

⛺️面向对象的三大特征是什么?

面向对象的程序设计方法具有三个基本特征:封装、继承、多态。

🏭面向对象的三大特征是什么?

封装指的是将对象的实现细节隐藏起来,然后通过一些公用方法来暴露该对象的功能;

继承是面向对象实现软件复用的重要手段,当子类继承父类后,子类作为一种特殊的父类,将直接获得父类的属性和方法;

多态指的是子类对象可以直接赋给父类变量,但运行时依然表现出子类的行为特征,这意味着同一个类型的对象在执行同一个方法时,可能表现出多种行为特征。

🗼说一首重写和重载的区别

重载发生在同一个类中,若多个方法之间方法名相同,参数列表不同,则构成重载关系。

重写发生在父类子类中,若子类方法想要和父类方法构成重写关系,则它的方法名,参数列表,必须与父类相同。

🗾对泛型的理解

丢进 忘记 取出 自动记住

Java集合有一个缺点把一个对象“丢进”集合之后,集合会“忘掉”这个对象的数据类型,当再次取出该对象时,该对象的编译类型就变成了Object类型(运行时类型没变)

Java集合设计成能保存任何类型的对象,只要具有很好的通用性。

1.想创建一个只能保存Dog对象的集合,但程序将Cat对象“丢"进去,所有可能引发异常。

2.对象“丢进”集合时, 集合丢失了对象的状态信息,只知道它盛装的时Object

有了泛型,程序再也不能“不小心”把其它对象“丢进“集合中。而且程序更加简洁,集合自动记住所有集合元素的数据类型,从而无须对集合元素进行强制类型转换。

🚙 List<? super T>和List<? extends T>有什么区别?

参考答案

通配符,T的父类型,T的子类型。

  • ? 是类型通配符,List<?> 可以表示各种泛型List的父类,意思是元素类型未知的List;
  • List<? super T> 用于设定类型通配符的下限,此处 ? 代表一个未知的类型,但它必须是T的父类型;
  • List<? extends T> 用于设定类型通配符的上限,此处 ? 代表一个未知的类型,但它必须是T的子类型。

🌄说一说对Java反射机制的理解

编译时类型和运行时类型

程序运行时,

1.可以通过反射获得任意一个类的Class对象

2.可以通过反射创建任意一个类的实例,并访问该实例的成员

3.可以通过反射机制生成一个类的动态代理类或动态代理对象

Java程序中的对象在运行时表现出两种类型,即编译时类型和运行时类型。例如 Person p = new Student(); ,这行代码将会生成一个p变量,该变量的编译时类型为Person,运行时类型为Student。程序在运行时接收到外部传入的一个对象,该对象编译时类型是Object,但程序又需要调用该对象的运行时类型的方法。这就要求程序程序需要在运行时发现对象和类的真实信息,

1.假设在编译时和运行时都完全知道类型具体信息,先使用instanceof运算符进行判断,再利用强制类型转换成运行时类型的变量即可

2.编译时根本无法预知该对象和类可能属于那些类,程序只依靠运行时信息来法相该对象和类的真实信息。

通过反射机制,我们可以实现如下操作:

1.程序运行时,可以通过反射获得任意一个类的Class对象,并通过这个对象查看这个类的信息;

2.程序运行时,可以通过反射创建任意一个类的实例,先访问该实例的成员;

3.程序运行时,通过反射机制生成一个类的动态代理类和动态代理对象。

🚘Java中有那些容器?

  • Set代表无序的,元素不可重复的集合;
  • List代表有序的,元素可以重复的集合;
  • Queue代表先进先出(FIFO)的队列;
  • Map代表具有映射关系(key-value)的集合。

HashSet、TreeSet、ArrayList、LinkedList、ArrayDeque、HashMap、TreeMap,这些都是线程不安全的集合类,但是它们的优点是性能好。

🌈Map put的过程

  1. 首次扩容:

    先判断数组是否为空,若数组为空则进行第一次扩容(resize);

  2. 计算索引:

    通过hash算法,计算键值对在数组中的索引;

  3. 插入数据:

    • 如果当前位置元素为空,则直接插入数据;
    • 如果当前位置元素非空,且key已存在,则直接覆盖其value;
    • 如果当前位置元素非空,且key不存在,则将数据链到链表末端;
    • 若链表长度达到8,则将链表转换成红黑树,并将数据插入树中;
  4. 再次扩容

    如果数组中元素个数(size)超过threshold,则再次进行扩容操作。

🌅JDK7和JDK8中的HashMap有什么区别?

JDK7中的HashMap,是基于数组+链表来实现的,底层是维护一个entry数组

JDK8中的HashMap,是基于数组+链表+红黑树来实现的,底层维护一个Node数组

HashMap为什么用红黑树而不用B树

如果用B/B+树的话,数据量不是很多的情况下,数据都会挤在一个结点里面,这个时候遍历效率就退化了链表。

🌅Java中的IO流

IO(Input Output)用于实现对数据的输入与输出操作,Java把不同的输入/输出源(键盘、文件、网络等)抽象表述为流(Stream)。流是从起源到接收的有序数据,有了它程序就可以采用同一方式访问不同的输入/输出源。

数据流向:输入流和输出流

数据类型:字节流和字符流

处理功能:节点流和处理流

欢迎大家关注公众号《深度IT世界》学习更多内容。💓💓💓

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嚼绿箭的朱七

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值