JAVA面试八股文一(基础篇)

  1. 面向对象

面向过程注重于流程步骤 洗衣服>---打开洗衣机>----放入衣服>----加洗衣液>-----放水

面向对象注重于单位元素负责那些事

人: 放衣服 倒洗衣液

洗衣机: 洗涤 烘干

面向对象特征:

封装 : 不需要关注方法内部的执行流程,直接调用,就例如集成mybatis 不用去关心mybatis如何去连接数据库的过程,只管调用操作数据的方法

四种修饰符

private 只作用于同一类

default 作用于同一包

protected 其他包子类

public 全局

继承:子类继承父类 拥有父类的方法和属性

方法重写 Override

重写父类的方法,方法名,入参,返回参数与父类相同

方法重载 Overload 方法名相同 参数个数,类型不通

多态:多态是同一个行为具有多个不同表现形式或形态的能力。

方法的重写和重载其实是多态的一种体现

  1. JDK,JRE,JVM区别和联系

JDK java开发工具 包含 JRE JAVA工具

JRE java运行环境 包含JVM

JVM java虚拟机

.java文件>----javac编译>---.class文件>----jvm>----映射到windows/Linux操作系统

  1. ==和eques区别

== 基本数据类型比较的是值 引用数据类型 比较的是内存地址

eques 方法默认是才用==来比较的 具体还得看类中的重写方法 String类重写了eques主要是用来比较字符串中的各个字符是否完全相同

  1. 浅谈final

a.final的作用

最终的

修饰类 不可以被继承

修饰方法 不可以被覆盖 重写 可以重载

修饰变量 变量值不可以改变

1).修饰成员变量 需要直接赋值

final int i = 0

修饰静态变量 static 需要直接赋值或在静态代码块赋值

final static int a= 0

2).修饰基本类型变量 赋值之后就不能改了

修饰引用类型变量 不能再指向另一个对象 但是对象里的值可以修改

b.为什么局部内部类和匿名内部类只能访问局部final变量?

首先要知道内部类和外部类其实属于一个层级,内部类不会在外部类方法执行完之后进行销毁,

但是局部变量会在外部方法执行完成后进行销毁,为了房子内部类调用报错,程序会在执行过程中copy一个一样的变量放入内部类中,为了保证copy的变量和原始局部变量的值一致,所以进行妥协才用final修饰 保证变量不被修改,这也是为什么局部内部类,匿名内部类只能访问final变量的原因。

  1. String,StringBuffer,StringBuilder区别和使用场景

String 是final修饰的 每修改一次就会产生一个新的对象,占内存

StringBuffer和StringBuilder是在原对象上修改的

StringBuffer线程安全的 是由Synchronized修饰的

StringBuilder线程不安全的

线程安全指的是多个线程公用一个变量,导致变量的值受到影响

性能 StringBuilder>StringBuffer>String

单线程 StringBuilder

多线程且共用同一变量用StringBuffer

  1. 重载和重写的区别

重载:同一类中方法名相同,参数不同,参数类型不同,参数个数不同,参数顺序同。不存在返回值不同,编译时会直接报错

重写:子类重写父类的方法,方法名,参数列表和父类相同,返回参数范围要下雨等于父类,访问修饰符要大于等于父类,private方法不能被重写

  1. 接口和抽象类的区别

抽象类 接口

关键字 abstract interface

成员变量 任何 默认public static final

成员方法 部分实现 没有实现

实现 只能继承一个 可以实现多个

接口 实际上是出于设计的目的,只约束行为的有无,不关心方法的具体实现。

抽象类实际上是先有子类然后为了解决代码复用问题,将公用方法抽取出来派生为抽象类,抽象类可以有自己的方法实现,子类也可以拓展自己的方法,因此抽象类是不能实例化的,因为有些方法没有具体的实现。

抽象类的本质是 对事物的属性进行抽象 is a

接口的本质是 对事物的行为进行抽象 like a

  1. List 和 Set的区别

list 是按照对象进入顺序存储对象,可重复的,允许多个null,可以使用迭代器逐一遍历,也可以通过下标获取

set 是无序的,不可重复的,只能存在一个null,只能使用迭代器逐一遍历

  1. hashCode与equals

hashCode实际是int类型的数字,哈希码,存储的是对象在哈希表中的索引的位置,key-value。作用是通过索引可以快速找到所对应的对象

在执行hashSet时,会先拿hashCode值去检索该位置有没有对象,如果没有,直接将对象保存在该位置,如果存在对象,会调用equals方法来校验存储的对象和该位置的对象是否一样,如果一样,视为重复加入,就不会再进行操作,如果不一痒,就会生成新的hashCode值,将对象存储下来,减少了调用equals次数,提升效率

  1. ArrayList 和 LinkedList区别

ArrayList 底层是数组结构,存储为连续内存,有下标,查询速度快,方便。ArrayList扩容原理为:创建一个更大的数组,将原来的数据copy过去,中间节点插入数据时,后面的每个节点都会往后复制存储,因此插入 删除,效率会显得很慢。如果ArrayList才用尾插法,并指定合适的长度,减少扩容的次数,效率会比LinkedList快

LinkedList 是链式结构,存储为分散内存,再写入数据时直接在要写入的位置断链插入链接即可,因此插入删除效率会很快。 但是插入数据时会创建node对象,如果数据过多,时间都会浪费在 创建node对象上。LinkedList只能使用迭代器循环,如果使用for每次get(i)都会重新遍历 性能极差

  1. HashMap和HashTabel区别 底层实现

HashMap 线程不安全的

HashTabel 线程安全的

底层结构 数组+链式结构

存储时对存储对象hashCode值进行二次hash对数组下标取模然后放在对应下标的数组中,如果不存在hash冲突直接放入,如果存在冲突,进行equals 如果相同取代该元素,不同,判断链表高度,如果小于8且数组长度小于64 插入链表,如果数组长度大于64 转为红黑树,如果长度小于6 再次转回 数组链表

扩容和arrayList一样 创建新数组 重新定义长度,数据复制

  1. 如何实现ioc容器

a.创建配置文件,配置需要扫描的包的路径

b.开启扫描判断是否是文件夹,是文件夹继续向下一层扫描,如果是文件判断是否是class文件,是class文件,判断是否有注解,如果有,通过反射生成对象,放入class数组中。如果是接口的实现类,找到接口 通过反射创建实例化对象放入数组中。

c.遍历class数组 检查是否有依赖注入标签确认依赖关系 将依赖入住

  1. 什么是字节码?采用字节码的好处

字节码:java程序之所以在各种平台运行是得益于jvm虚拟机。虚拟机提供了和操纵系统交互的接口。所以变成面向jvm即可,写好的java程序会用过javac编译成.class文件来供jvm理解,这种jvm理解的编码即为字节码。 java是编译金额解释共存的语言

采用字节码的好处:提升了执行效率,跨平台,可以在不同计算机操作系统上运行。

  1. java类加载器

类加载器分为:虚拟机自带的加载器 和用户自定义加载器

虚拟机自带的加载器分为:

启动加载器, 加载/lib下的jar class

扩展加载器, 加载/lib/ext 下的jar class

应用程序加载器 加载我们的程序代码

  1. 双亲委派机制

类加载器加载过程中先回委托自己的父级去加载文件,父级如果加载成功,直接返回,如果未成功,才会自己去加载,向上委托 查缓存,向下查找加载路径 双亲委派+沙箱机制(防止恶意代码对java的破坏)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java面试八股文是指在准备Java面试时需要重点掌握的一些核心知识和常见问题。下载Java面试八股文是为了将这些知识和问题整理成一份文档,方便学习和准备。这份文档通常包含Java基础知识、Java集合框架、多线程、IO流、数据库、设计模式、网络编程等各个方面的问题和答案。 Java面试八股文的下载对于准备面试的候选人来说非常重要。因为Java面试的问题种类繁多,面试官可能会选择任意一个方面进行提问。同时,面试官一般会倾向于问一些经典的问题,以便评估候选人对于基础和核心知识的掌握程度。如果候选人能够提前下载并学习这份八股文,不仅可以提高回答问题的准确性和流利度,还能够帮助候选人在面试中更好地展示自己的能力和优势。 当然,光有Java面试八股文还远远不够,候选人还需要结合自己在实际项目中的经验、对于面试岗位的理解以及对于技术的持续学习来进行综合准备。另外,面试本身也不是仅仅靠死记硬背答题,更重要的是能够准确理解问题的本质,提出合理的解决思路和方案,并能够清晰地表达自己的观点和思考过程。 总的来说,下载Java面试八股文是为了提高面试准备的效率和质量,但准备八股文只是面试准备的一部分,更重要的是掌握基础知识、理解问题本质,发展自己的解决问题的能力。希望以上回答对您有所帮助。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值