后端面试题集

整理的众多优秀博客的笔记

面向对象

三大特征
  • 封装
    • 封装就是隐藏对象的属性和实现细节(私有getset),仅对外公开接口,控制在程序中属性的读和修改的访问级别,将抽象得到的数据和行为(或功能)相结合,形成一个有机的整体,也就是将数据与操作数据的源代码进行有机的结合,形成“类”,其中数据和函数都是类的成员。
    • 封装的目的是增强安全性和简化编程,使用者不必了解具体的实现细节,而只是要通过外部接口,以特定的访问权限来使用类的成员。
  • 继承
    • 继承机制允许创建分等级层次的类。继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。
    • 继承之间是子父类的关系。继承机制可以很好的描述一个类的生态,也提高了代码复用率,在Java中的Object类是所有类的超类,常称作上帝类。
  • 多态
    • 多态同一个行为具有多个不同表现形式或形态的能力。是指一个类实例(对象)的相同方法在不同情形有不同表现形式。多态机制使具有不同内部结构的对象可以共享相同的外部接口。这意味着,虽然针对不同对象的具体操作不同,但通过一个公共的类,它们(那些操作)可以通过相同的方式予以调用。
    • 多态的优点:
      • 消除类型之间的耦合关系
      • 可替换性
      • 可扩充性
      • 接口性
      • 灵活性
      • 简化性
    • 多态存在的三个必要条件
      • 继承
      • 重写(子类继承父类后对父类方法进行重新定义)
      • 父类引用指向子类对象
抽象类&接口
  • 抽象类是用来捕捉子类的通用性的,而接口则是抽象方法的集合;抽象类不能被实例化,只能被用作子类的超类,是被用来创建继承层级里子类的模板,而接口只是定义方法。
  • 抽象类可以有默认的方法实现,子类使用extends关键字来继承类,如果子类不是抽象类的话,它需要提供抽象类中所有声明方法的实现。而接口完全是抽象的,它根本不存在方法的实现,子类使用关键字implements来实现接口,它需要提供接口中所有声明方法的实现。
  • 抽象类可以有构造器,除了不能实例化抽象类之外,它和普通的java类没有任何区别,抽象方法可以有public,protected和default这些修饰符,而接口不能有构造器,是完全不同的类型,接口方法默认修饰符是public不能使用其他修饰符。

集合

  • 继承图

在这里插入图片描述

ArrayList与LinkedList的区别
1.数据结构不同
  • ArrayList是Array(动态数组)的数据结构;LinkedList是Link(链表)的数据结构。
2.效率不同
  • 当随机访问List(get和set操作)时,ArrayList比LinkedList的效率更高,因为LinkedList是线性的数据存储方式,所以需要移动指针从前往后依次查找。
  • 当对数据进行增加和删除的操作(add和remove操作)时,LinkedList比ArrayList的效率更高,因为ArrayList是数组,所以在其中进行增删操作时,会对操作点之后所有数据的下标索引造成影响,需要进行数据的移动。
3.自由性不同
  • ArrayList自由性较低,因为它需要手动的设置固定大小的容量,但是它的使用比较方便,只需要创建,然后添加数据,通过调用下标进行使用;而LinkedList自由性较高,能够动态的随数据量的变化而变化,但是它不便于使用。
4.主要控件开销不同
  • ArrayList主要控件开销在于需要在lList列表预留一定空间;而LinkList主要控件开销在于需要存储结点信息以及结点指针信息。
数组&链表
  • 不同:链表是链式的存储结构;数组是顺序的存储结构。

    链表通过指针来连接元素与元素,数组则是把所有元素按次序依次存储。

    链表的插入删除元素相对数组较为简单,不需要移动元素,且较为容易实现长度扩充,但是查询元素较为困难;数组查询元素较为简单,但插入与删除比较复杂。

  • 相同:两种结构均可实现数据的顺序存储,构造出来的模型呈线性结构。

Servlet生命周期

  • 图解
    在这里插入图片描述

  • 当客户端向 Servlet 容器发出 请求要求访问 Servlet 时,Servlet 容器首先会解析请求,检查内存中是否已经有了该 Servlet 对象,如果有,则直接使用该 Servlet 对象,如果没有,则创建Servlet 实例对象,然后通过调用 init() 方法实现 Servlet 的初始化工作。需要注意的是,在 Servlet 的整个生命周期内,它的 init() 方法只能被调用一次。在运行阶段Servlet 容器会为这个请求创建ServletRequest 和ServletResponse 对象,然后将它们作为参数传递给 Servlet 的 service() 方法。service() 方法从 ServletRequest 对象中获得客户请求信息并处理该请求,通过 ServletResponse 对象生成响应结果。在 Servlet 的整个生命周期内,对于 Servlet 的每一次访问请求,Servlet 容器都会调用一次 Servlet 的 service() 方法,并且创建新的ServletRequest 和 ServletResponse 对象,也就是说,service() 方法在 Servlet 的整个生命周期中会被调用多次。当服务器关闭或 Web 应用被移除出容器时,Servlet 随着 Web 应用的关闭而销毁。在销毁 Servlet 之前,Servlet 容器会调用 Servlet 的 destroy() 方法,以便让 Servlet 对象释放它所占用的资源。在 Servlet 的整个生命周期中,destroy() 方法也只能被调用一次。

  • servlet构造方法在init之前调用。

重定向和转发的区别

相同:页面会实现跳转

不同

  • 请求转发,url不会产生变化
  • 重点向,url地址栏会发生变化

JSP九大内置对象

  • out(JspWriter):等同与response.getWriter(),用来向客户端发送文本数据;

  • config(ServletConfig):对应“真身”中的ServletConfig;

  • page(当前JSP的真身类型):当前JSP页面的“this”,即当前对象;

  • pageContext(PageContext):页面上下文对象,它是最后一个没讲的域对象;

  • exception(Throwable):只有在错误页面中可以使用这个对象;

  • request(HttpServletRequest):即HttpServletRequest类的对象;

  • response(HttpServletResponse):即HttpServletResponse类的对象;

  • application(ServletContext):即ServletContext类的对象;

  • session(HttpSession):即HttpSession类的对象,不是每个JSP页面中都可以使用,如果在某个JSP页面中设置<%@page session=”false”%>,说明这个页面不能使用session。

过滤器&监听器

写得不错的一个博客地址:https://blog.csdn.net/weixin_42636552/article/details/100159939

监听器(listener):就是对项目起到监听的作用,它能感知到包括request(请求域),session(会话域)和applicaiton(应用程序)的初始化和属性的变化;

过滤器(filter):就是对请求起到过滤的作用,它在监听器之后,作用在servlet之前,对请求进行过滤;

cookie和session的区别
  • cookie数据存放在客户的浏览器上,session数据放在服务器上.

  • cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗考虑到安全应当使用session。

  • 设置cookie时间可以使cookie过期。但是使用session-destory(),我们将会销毁会话。

  • session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能考虑到减轻服务器性能方面,应当使用cookie。

Spring

IOC

IOC:控制反转也叫依赖注入,IOC利用java反射机制,AOP利用代理模式。所谓控制反转是指,本来被调用者的实例是有调用者来创建的,这样的缺点是耦合性太强,IOC则是统一交给spring来管理创建,将对象交给容器管理,你只需要在spring配置文件总配置相应的bean,以及设置相关的属性,让spring容器来生成类的实例对象以及管理对象。在spring容器启动的时候,spring会把你在配置文件中配置的bean都初始化好,然后在你需要调用的时候,就把它已经初始化好的那些bean分配给你需要调用这些bean的类。

AOP

AOP:面向切面编程。(Aspect-Oriented Programming)
AOP可以说是对OOP的补充和完善。OOP引入封装、继承和多态性等概念来建立一种对象层次结构,用以模拟公共行为的一个集合。实现AOP的技术,主要分为两大类:一是采用动态代理技术,利用截取消息的方式,对该消息进行装饰,以取代原有对象行为的执行;二是采用静态织入的方式,引入特定的语法创建“方面”,从而使得编译器可以在编译期间织入有关“方面”的代码,属于静态代理

SpringMVC

流程图

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值