java面试题整理

面向对象的特征有什么?解释一下具体含义。

         封装、继承、多态,封装就是将类的属性和方法隐藏起来,对外部提供访问方法,比如javabean中的get set方法,封装有利于提高代码的安全性和复用性。继承就是在继承关系中子类可以通过继承然后使用父类中的属性和方法,提高代码的复用性。多态就是同一个行为具有多个不同表现形式比如猫和狗都是动物,他们都有吃的行为,猫的表示是吃鱼,而狗的表现是啃骨头。

重载和重写的区别是什么?

         重载就是同一个类中具有多个方法,他们的方法名相同,但是参数个数或者参数类型不相同,返回值类型可以相同也可以不同。

        重写是指在子父类关系中,子类定义的方法与父类中的方法具有相同的方法名字,相同的参数列表和相同的返回类型

Java 中==和 equals 的区别

        对于基本数据类型来说==比较的是变量的值是否相等,如果是引用类型的话比较的是引用对象的地址是否相等,equals默认情况下比较的是对象的地址是否相等,但是可以根据具体的类进行重写比如String类对equals方法进行重写比较的是对象的内容是否相等。

String、StringBuffer、StringBuilder 三者之间的区别

   String是不可变的类,一旦创建就不能被修改,而StringBuffer、StringBuilder是可变的类,可以修改字符串的内容。

接口和抽象类的区别是什么?

        定义接口的关键字是interface,定义抽象类的关键字是abstract,抽象类可以包含抽象方法和非抽象方法,实例变量和构造方法,接口只能包含抽象方法、静态方法和默认方法,不包含实例变量和构造方法,一个类可以继承一个抽象类但是可以实现多个接口,抽象类的设计目的是为了提供类的继承机制,实现代码的复用,适用于有相似行为和属性的类,而接口的设计目的是定义一组规范,实现类遵特定的行为和功能。

什么是单例模式?有几种?

   单例模式就是在内存中只创建一次对象的设计模式。

      

ArrayList和LinkedList有什么区别?

        它们都是List接口的实现类,Arraylist底层的数据结构是数组,LinkedList底层的数据结构是双向链表,ArrayList随机访问性能比较高效,因为它可以通过下标计算出元素的位置,而LinkedList需要从头部或者是尾部开始遍历链表找到元素对应的位置。ArrayList在尾部进行插入和删除性能较好,因为它不需要移动数组,但是在中间插入删除的话需要移动大量数组,LinkedList在任意位置的插入和删除性能都比较好,因为它只需要调整链表中的指针。

final,finally,finalize的区别

         final是一个修饰符,可以修饰类,方法和变量,修饰类的话表示该类不能被继承,为最终类,修饰方法的话,该方法不能被子类重写,修饰变量的话表示该变量是一个常量,它的值不能被修改。

         finally是一个关键字,用于定义一个代码块,在异常处理中,无论是否出现异常,finally代码块中的代码都会被执行,finally代码块通常用于释放资源和关闭连接。

        finalize是Object的一个方法,用于对象的垃圾回收之前的清理操作,该方法已被废弃。

String类可以被继承吗?为什么这样设计?

        不可以,因为String类是被final修饰的,被final修饰的类是不可以继承的,称为最终类。为什么这么设计好像跟安全有关。

Spring与springboot的区别是什么?

        Spring是一个java应用程序框架,它提供了很多组件和功能,但是需要开发人员进行大量的xml配置和集成,而springboot是脚手架工具,用于简化spring的配置和开发,提供了自动装配和约定优于配置的特性,而且内置Web容器,开发速度快。

Spring Bean的生命周期是什么

        从bean创建到销毁的整个过程称为bean的生命周期,它主要有四个阶段,实例化、属性赋值、初始化、销毁

Spring mvc 的执行流程是什么?

        用户发起请求被servlet拦截并转发到springmvc,springmvc的核心控制器dispatchServlet会接受到请求并转发到HandlerMappering,HandlerMappering解析请求,根据请求信息和配置信息找到匹配的Controller类,把请求参数传递到controller里面的方法,controller里面的方法执行完之后会返回一个ModeAndView,这里面包括视图的名称和需要传递给视图的模型数据,然后视图解析器会根据视图名字找到视图,然后把数据模型填充到视图里面再渲染成html内容返回给客户端。

Mybatis中$和#的区别是什么?

        美元符其实就是拼接sql语句,可能存在被sql注入的风险,而#号使用PreparedStatement 对象,能够避免 sql 注入,使得sql语句的执行更加安全。

Redis的是什么?基本数据类型有哪些?

        Redis是一种非关系型的数据库,存储的是key-value结构的数据,基于内存存储,读写性能高。字符串String,哈希hash,列表list,集合set,有序集合sorted set

Nginx是做什么用的?

部署前端资源,反向代理

Mysql的内外连接

Java中的数据类型

Springboot中读取配置的方式有哪几种?怎么读取配置文件?

        有三种,注入Environment对象,通过Environment 的 getProperty() 方法读取指定配置 Key 的内容。

使用@Value注解,实现单个配置的注入

最常用的是使用@ConfigurationProperties注解,先创建一个配置类然后加上@ConfigurationProperties,再加一个前缀。

        什么是java的序列化和反序列化

Java的序列化就是将java对象转换为字节流的过程,可以将这些字节流保存到文件中或者进行网络传输,反序列化就是将字节流恢复成对象的过程,序列化的目的是为了实现对象的持久化存储和传输,在java中要使一个类可序列化需要实现实现java.io.Serializable接口,该接口是一个标记接口,没有任何方法。

       说一说Springboot自动配置原理?

        springboot项目的启动类上有个SpringBootApplication注解,这个注解里面有个EnableAutoConfiguration注解,这个注解里面有个import注解导入了AutoConfigurationlmportSelector类,实现了selectlmports方法,这个方法经过层层调用,最终会读取META-INF 目录下的 后缀名 为imorts的文件,当然了,boot2.7以前的版本,读取的是spring.factories文件,这个文件里面配置了很多自动配置类的全类名,springboot读取到这些全类名,读取到全类名了之后,会解析注册条件,也就是
@Conditional及其行生注解把满足注册条件的Bean对象自动注入到I0C容器中。

        

浅拷贝和深拷贝的区别是什么?

        浅拷贝只拷贝对象的引用,不创建新的实例对象,拷贝后的对象和原始对象共享同一份数据,新旧对象指向同一块内存地址,修改其中一个对象的属性会影响到另一个对象。性能消耗较小,因为它不会创建新的对象。

        深拷贝会创建一个新的对象实例,然后将原始对象的属性值复制到新对象中,新旧对象指向不同的内存地址,对任意对象修改不会影响到另一个对象。性能消耗大,因为需要创建新的实例对象而且还需要进行属性复制。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值