面试题

1. 方法的传参过程是如何工作的?

:在Java中,方法的参数传递都是值传递,在调用方法时,参数会被创建出一个副本,原本的值不会被改变。

  • 基本数据类型:把实参的值复制一份传递到方法的形参里,在方法内部改变的是形参的值(形参和实参是两块独立的内存空间),实参的值不会发生变化.
  • 引用类型:把实参中的地址复制一份传递给形参,那么实参和形参存的是共同的地址,通过形参改变地址里的值,通过实参查看,实参的值会变化

2.return,break,continue

  • return:

从当前的方法中退出,返回到该调用的方法的语句处,继续执行;
返回一个值给调用该方法的语句,返回值数据类型必须与方法的声明中返回值的类型一致,可以使用强制类型转换来使数据类型一致

  • break:

只能在循环体内和switch语句体内时使用:
当break出现在循环体中的switch语句体内时,其作用只是跳出该switch语句体
当break出现在循环体内,但并不在switch语句体内时,则在执行break后,跳出本层循环体

  • continue:

其作用是结束本次循环,即跳过本次循环体中余下尚未执行的语句,接着再一次进行循环的条件判定。

3.方法重载和方法重写的区别:

在这里插入图片描述
1)重写只能发生在两个类之间,重载可以在一个类的内部
2)重写是对父类方法的重新实现,父类方法在子类对象中无法调用,重载是对方法的延伸实现,使方法更具多样性
3)@Override注释(注解),方法重写的标志,一般对于重写的方法需要在方法上添加,如果不添加也可以,但不规范
4)重写的方法和原方法的方法名以及参数列表完全一致;重载要求方法名一致,参数列表不一致

4.关于子类对象的构建过程(面试)※※※

  • 第一步:先执行子类的构造方法
  • 第二步:在子类构造方法的第一行跳转到父类的构造方法开始执行
    隐式的调用super();------>代表父类的构造方法,只能写在子类构造方法的第一行,也可以不写,但是不写默认也会生成
  • 第三步:父类的构造方法执行完毕之后,回到子类的构造方法继续执行
  • 第四步:子类的构造方法完成之后,子类的对象构建完毕

继承的本质:在构建子类对象的过程中完整的执行了父类的构造方法,意味着在此过程中构建了一个父类的对象,在执行子类构造的过程中,父类的对象被拆分,父类的属性和方法拼接生成子类的对象

5.面向对象的三大特征

  • 封装:
    属性私有,通过公共的setXXX,getXXX方法对属性进行操作,在赋值过程中,对值的有效性进行判断,从而保证数据的合理性。
  • 继承:(单继承,单根性;传递性)
    描述的是类和类之间的一种关系,通过继承关系,子类就可以使用父类中可以允许使用的那些成员
  • 多态:
    同一父类类型,调用其同一方法后,表现出不同的状态,称为多态

**好处:**代码复用–重复的代码放在父类中即可,子类中仅存放自己独有的代码即可.有利于程序的变更及维护

6.接口和抽象类的区别? 什么时候使用抽象类?什么时候使用接口?

1、抽象类中既可以有抽象方法,也可以有非抽象方法
接口中的方法必须是公共的、抽象的
2、抽象类中的属性是普通属性
接口中的变量必须具有public static final 必须赋值
3、抽象类有构造方法,而接口没有构造方法
4、继承(实现) 抽象类是类,只能单继承,而接口可以多实现

7.Java继承的特点是什么?

答:基类单继承,接口多实现. 传递性

8.多态的实现方式有哪些?有什么区别?

答:

  • 方法重载来实现多态:静态方式,在程序编译及运行过程中,重载的方法就已经确定,加载到内存中
  • 方法重写/方法覆盖来实现多态:再调用时,根据使用的子类对象,由对象对应的子类去覆盖父类中的抽象方法或虚方法.

9. java的垃圾回收机制

答:垃圾:不用的内存堆空间
Java会自动开启一个后台线程,此线程进行垃圾的清理,工作原理如下:
当new出的空间有一处引用,计数器+1,当引用结束后,计数器-1.垃圾回收线程,判断计数器的值,当值为0时,将此对象压入栈,进入了计划删除列表.(但还有一次复活的机会),在压入栈的过程中,如果某个对象再次被引用,那么从栈中弹出,逐步清理栈中的对象地址空间

10.collection

在这里插入图片描述

11.ArrayList和LinkedList的区别?

1、ArrayList和LinkedList从名字分析,它们一个是Array(动态数组)的数据结构,一个是Link(链表)的数据结构,此外,它们两个都是对List接口的实现。

前者是数组队列,相当于动态数组;后者为双向链表结构,也可当作堆栈、队列、双端队列

2、当随机访问List时(get和set操作),ArrayList比LinkedList的效率更高,因为LinkedList是线性的数据存储方式,所以需要移动指针从前往后依次查找。

3、当对数据进行增加和删除的操作时(add和remove操作),LinkedList比ArrayList的效率更高,因为ArrayList是数组,所以在其中进行增删操作时,会对操作点之后所有数据的下标索引造成影响,需要进行数据的移动。

4、从利用效率来看,ArrayList自由性较低,因为它需要手动的设置固定大小的容量,但是它的使用比较方便,只需要创建,然后添加数据,通过调用下标进行使用;而LinkedList自由性较高,能够动态的随数据量的变化而变化,但是它不便于使用。

5、ArrayList主要控件开销在于需要在lList列表预留一定空间;而LinkList主要控件开销在于需要存储结点信息以及结点指针信息。
在这里插入图片描述

简单来说:

  • LinkedList集合适用在对元素插入和删除操作较频繁的时候
  • ArrayList集合适用在对元素查询操作较频繁的时候

12.Map

在这里插入图片描述

13.何时使用Get请求,何时使用Post请求

  • Get请求的目的是给予服务器一些参数,以便从服务器获取列表.例如:list.aspx?page=1,表示获取第一页的数据
  • Post请求的目的是向服务器发送一些参数,例如form中的内容.

与 POST 相比,GET 更简单也更快,并且在大部分情况下都能用。
然而,在以下情况中,请使用 POST 请求:

  • 无法使用缓存文件(更新服务器上的文件或数据库)
  • 向服务器发送大量数据(POST 没有数据量限制)
  • 发送包含未知字符的用户输入时,POST 比 GET 更稳定也更可靠

14.String类的常用方法:

indexOf():返回指定字符的索引。
charAt():返回指定索引处的字符。
replace():字符串替换。
trim():去除字符串两端空白。
split():分割字符串,返回一个分割后的字符串数组。
getBytes():返回字符串的 byte 类型数组。
length():返回字符串长度。
toLowerCase():将字符串转成小写字母。
toUpperCase():将字符串转成大写字符。
substring():截取字符串。
equals():字符串比较。
toString()
hashCode()
toCharArray()

15.Mybatis框架的组成

在这里插入图片描述

16.Mybatis框架的工作流程(重点!!!)

在这里插入图片描述

17.Spring AOP IOC 实现原理(重点!!!)

IOC:控制反转也叫依赖注入,IOC利用java反射机制,AOP利用代理模式。所谓控制反转是指,本来被调用者的实例是有调用者来创建的,这样的缺点是耦合性太强,IOC则是统一交给spring来管理创建,将对象交给容器管理,你只需要在spring配置文件总配置相应的bean,以及设置相关的属性,让spring容器来生成类的实例对象以及管理对象。在spring容器启动的时候,spring会把你在配置文件中配置的bean都初始化好,然后在你需要调用的时候,就把它已经初始化好的那些bean分配给你需要调用这些bean的类。
AOP:面向切面编程。(Aspect-Oriented Programming)
AOP可以说是对OOP的补充和完善。OOP引入封装、继承和多态性等概念来建立一种对象层次结构,用以模拟公共行为的一个集合。实现AOP的技术,主要分为两大类:一是采用动态代理技术,利用截取消息的方式,对该消息进行装饰,以取代原有对象行为的执行;二是采用静态织入的方式,引入特定的语法创建“方面”,从而使得编译器可以在编译期间织入有关“方面”的代码,属于静态代理
在这里插入图片描述

18. web.xml中元素的加载顺序

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值