3.Javaweb模块进阶

news2024/11/14 22:34:10

1.2web进阶 

什么是 CSRF 攻击,如何避免?
CSRF:Cross-Site Request Forgery(中文:跨站请求伪造),可以理解为攻击者盗用了你的身份,以你的名义发送恶意请求,比如:以你名义发送邮件、发消息、购买商品,虚拟货币转账等。
防御手段:
验证请求来源地址;
关键操作添加验证码;
在请求地址添加 token 并验证。

JSP 和 servlet 有什么区别?
JSP 是 servlet 技术的扩展,本质上就是 servlet 的简易方式。servlet 和 JSP 最主要的不同点在于,servlet 的应用逻辑是在 Java 文件中,并且完全从表示层中的 html 里分离开来,而 JSP 的情况是 Java 和 html 可以组合成一个扩展名为 JSP 的文件。JSP 侧重于视图,servlet 主要用于控制逻辑。


JSP 有哪些内置对象?作用分别是什么?
JSP 有 9 大内置对象:
request:封装客户端的请求,其中包含来自 get 或 post 请求的参数;
response:封装服务器对客户端的响应;
pageContext:通过该对象可以获取其他对象;
session:封装用户会话的对象;
application:封装服务器运行环境的对象;
out:输出服务器响应的输出流对象;
config:Web 应用的配置对象;
page:JSP 页面本身(相当于 Java 程序中的 this);
exception:封装页面抛出异常的对象。
说一下 JSP 的 4 种作用域?
page:代表与一个页面相关的对象和属性。
request:代表与客户端发出的一个请求相关的对象和属性。一个请求可能跨越多个页面,涉及多个 Web 组件;需要在页面显示的临时数据可以置于此作用域。
session:代表与某个用户与服务器建立的一次会话相关的对象和属性。跟某个用户相关的数据应该放在用户自己的 session 中。
application:代表与整个 Web 应用程序相关的对象和属性,它实质上是跨越整个 Web 应用程序,包括多个页面、请求和会话的一个全局作用域。
spring mvc 和 struts 的区别是什么?
拦截级别:struts2 是类级别的拦截;spring mvc 是方法级别的拦截。
数据独立性:spring mvc 的方法之间基本上独立的,独享 request 和 response 数据,请求数据通过参数获取,处理结果通过 ModelMap 交回给框架,方法之间不共享变量;而 struts2 虽然方法之间也是独立的,但其所有 action 变量是共享的,这不会影响程序运行,却给我们编码和读程序时带来了一定的麻烦。
拦截机制:struts2 有以自己的 interceptor 机制,spring mvc 用的是独立的 aop 方式,这样导致struts2 的配置文件量比 spring mvc 大。
对 ajax 的支持:spring mvc 集成了ajax,所有 ajax 使用很方便,只需要一个注解@ResponseBody就可以实现了;而 struts2 一般需要安装插件或者自己写代码才行。

  2.2进阶

1. Error 和 Exception 区别是什么?
Error 类型的错误通常为虚拟机相关错误,如系统崩溃,内存不足,堆栈溢出 等,编译器不会对这类错
误进行检测,JAVA 应用程序也不应对这类错误进行捕 获,一旦这类错误发生,通常应用程序会被终
止,仅靠应用程序本身无法恢复;
Exception 类的错误是可以在应用程序中进行捕获并处理的,通常遇到这种错 误,应对其进行处理,使应用程序可以继续正常运行。
原文链接:

【Java面试】异常常见面试题_parselong error, field : lastmodifieddate-CSDN博客

 

3.2进阶 

说一下 tcp 粘包是怎么产生的?
tcp 粘包可能发生在发送端或者接收端,分别来看两端各种产生粘包的原因:
发送端粘包:发送端需要等缓冲区满才发送出去,造成粘包;
接收方粘包:接收方不及时接收缓冲区的包,造成多个包接收。
如何实现跨域?
实现跨域有以下几种方案:
服务器端运行跨域 设置 CORS 等于 *;
在单个接口使用注解 @CrossOrigin 运行跨域;
使用 jsonp 跨域;


说一下 JSONP 实现原理?
jsonp:JSON with Padding,它是利用script标签的 src 连接可以访问不同源的特性,加载远程返回的“JS 函数”来执行的。

 4.2进阶

24种设计模式之单例模式(饿汉式、懒汉式)_单例模式懒汉和饿汉_inexaustible的博客-CSDN博客24种设计模式之单例模式(饿汉式、懒汉式)_单例模式懒汉和饿汉https://blog.csdn.net/inexaustible/article/details/128816512

1、创建型模式


这些模式用于创建对象或者对对象的创建进行优化。

1.1、工厂模式 (Factory Pattern)


        定义了一个创建对象的接口,但让子类决定要实例化的类是哪一个。工厂方法使得一个类的实例化延迟到其子类。

1.2、抽象工厂模式 (Abstract Factory Pattern)


        提供了一种创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。

1.3、单例模式 (Singleton Pattern)


        保证一个类只有一个实例,并提供一个全局访问点。

1.4、建造者模式 (Builder Pattern)


        允许逐步构建复杂对象。与工厂模式不同的是,建造者模式更注重于对象的组装方式。

1.5、原型模式 (Prototype Pattern)


        通过复制现有的对象来创建新的对象。
 

2、结构型模式
        结构型模式是一类用于组织类和对象之间的关系的设计模式,它们通常解决对象的组合和对象之间的依赖关系的问题。结构型模式被分为7个不同的类型。

2.1、 适配器模式(Adapter Pattern)
        将一个类的接口转换成客户端所期望的另一种接口。适配器模式通常用于解决两个现有接口之间不兼容的问题,以使它们能够在一起工作。

2.2、桥接模式(Bridge Pattern)
        将一个对象的抽象部分与它的实现部分分离开来,使它们可以独立地变化。桥接模式通常用于解决多种实现方式的问题。

2.3、组合模式(Composite Pattern)
        将对象组合成树形结构,以表示“整体-部分”的层次结构。组合模式使得客户端可以将单个对象和组合对象一视同仁,从而简化了客户端代码。

2.4、装饰器模式(Decorator Pattern)
        允许在运行时动态地给对象添加功能,而无需修改它们的代码。装饰器模式是一种灵活而高效的替代继承的方式。

2.5、外观模式(Facade Pattern)
        为一个复杂的子系统提供了一个简单的接口。通过使用外观模式,客户端可以将子系统的复杂性从它们的代码中分离出来。

2.6、享元模式(Flyweight Pattern)
        将一个对象的状态分成内部状态和外部状态。通过共享内部状态,享元模式使得可以共享大量细粒度的对象,从而减少了内存消耗。享元模式通常与工厂模式一起使用,以便在需要时动态地创建新的对象。

2.7、代理模式(Proxy Pattern)
        允许通过引入一个代理对象来控制对另一个对象的访问。代理对象充当客户端和实际对象之间的中介,以便在不改变实际对象接口的情况下增加额外的功能。

3、行为型模式
        它们关注对象之间的交互和职责分配。这些模式主要用于处理对象之间的通信,以及在不同对象之间分配职责和行为。以下是常见的行为型模式及其详解:

3.1、观察者模式(Observer Pattern)
        定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。当主题对象发生改变时,所有依赖它的观察者对象都会得到通知并更新。

3.2、迭代器模式(Iterator Pattern)
        提供一种方法来访问一个聚合对象中的各个元素,而不暴露该对象的内部表示。通过迭代器模式,可以遍历一个聚合对象而不需要知道其内部结构。

3.3、模板方法模式(Template Method Pattern)
        定义了一个算法的骨架,将一些步骤延迟到子类中实现。模板方法使得子类可以在不改变算法结构的情况下重新定义算法中某些步骤。

3.4、命令模式(Command Pattern)
        将请求封装成一个对象,从而使你可用不同的请求来参数化其他对象。同时,支持撤销操作。

3.5、职责链模式(Chain of Responsibility Pattern)
        将请求的发送者和接收者解耦,使得多个对象都有机会处理请求。将这些对象串成一条链,并沿着这条链传递请求,直到有一个对象处理它为止。

3.6、策略模式(Strategy Pattern)
        定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。策略模式使得算法可独立于使用它的客户而变化。

3.7、状态模式(State Pattern)
        允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它所属的类。

3.8、备忘录模式(Memento Pattern)
        在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。以后可以将该对象恢复到原先保存的状态。

3.9、访问者模式(Visitor Pattern)
        表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。

3.10、解释器模式(Interpreter Pattern)
        定义一个语言的文法,并且建立一个解释器来解释该语言中的句子。

3.11、中介者模式(Mediator Pattern)
        目的是降低多个对象之间的耦合度,使它们能够更好地协同工作。在这种模式中,一个中介者对象作为其他对象之间的媒介,协调它们之间的交互,以便它们可以相互合作完成任务,而不需要直接相互交互。在中介者模式中,所有参与对象都与中介者对象进行交互,而不是相互之间直接交互。这样一来,参与对象就不需要知道其他对象的存在或具体实现细节,而只需要与中介者对象进行通信,由中介者对象负责协调整个系统的交互。

4、设计模式六大原则
        设计模式六大原则,也称为设计原则或者SOLID原则,是面向对象设计的基础原则。这些原则是从多个设计模式的实践经验总结出来的,并且可以帮助我们编写可维护、可扩展、可重用的代码。

4.1、单一职责原则(SRP)
        单一职责原则要求一个类只负责一个功能领域中的一项职责。也就是说,一个类应该只有一个引起它变化的原因。这个原则的目的是让类更加容易理解、扩展和维护。

4.2、开放封闭原则(OCP)
        开放封闭原则要求软件实体(类、模块、函数等)应该对扩展开放,对修改关闭。也就是说,我们应该通过扩展现有代码来实现新的功能,而不是直接修改现有代码。这个原则的目的是让软件更加稳定和易于维护。

4.3、里氏替换原则(LSP)
        里氏替换原则要求一个子类能够替换其父类并且不会影响程序的正确性。也就是说,子类应该能够完全替代父类的功能,并且可以在不破坏程序的正确性的前提下进行扩展。这个原则的目的是让代码更加灵活和可扩展。

4.4、依赖倒置原则(DIP)
        依赖倒置原则要求高层模块不应该依赖于底层模块,而是应该依赖于抽象。也就是说,我们应该通过抽象来定义组件之间的依赖关系,而不是通过具体实现来定义。这个原则的目的是让代码更加灵活和易于维护。

4.5、接口隔离原则(ISP)
        接口隔离原则要求一个类不应该强迫其它类依赖于它们不需要使用的方法。也就是说,我们应该尽可能地将接口拆分为更小的部分,从而使得接口更加精简。这个原则的目的是让代码更加灵活和易于维护。

4.6、迪米特法则(LoD)
        迪米特法则要求一个对象应该对其他对象有尽可能少的了解,也就是说,对象应该尽可能地降低与其它对象之间的耦合度。这个原则的目的是让代码更加灵活、易于维护和可复用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1079034.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SIP对讲求助终端sip解码广播终端

SIP对讲求助终端sip解码广播终端 SV-2701VP具有10/100M以太网接口,支持最高48KHz采样,192Kbps的音频流播放。接入12V/1A的直流电源。具有1路mic输入,1路线路输入,1路立体音线路输入,这3组信号经过信号混合后输出到本地…

计算机毕业设计选什么题目好?springboot 社区流浪动物救助领养系统

✍✍计算机编程指导师 ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流! ⚡⚡ Java实战 |…

Websocket获取B站直播间弹幕教程——第二篇、解包/拆包

教程一、Websocket获取B站直播间弹幕教程 — 哔哩哔哩直播开放平台 1、封包 我们连接上B站Websocket成功后,要做两件事情: 第一、发送鉴权包。第二、发送心跳包,每30秒一次,维持websocket连接。 这两个包不是直接发送过去&…

PowerShell pnpm : 无法加载文件 C:\Users\lenovo\AppData\Roaming\npm\pnpm.ps1

1、右键点击【开始】,打开Windows PowerShell(管理员) 2、运行命令set-ExecutionPolicy RemoteSigned 3、根据提示,输入A,回车 此时管理员权限已经可以运行pnpm 如果vsCode还报该错误 继续输入 4、右键点击【开始】,打…

如何将gif变成视频?3个转换方法

如何将gif变成视频?没错,GIF是一种动态图片格式,与视频在本质上有所区别。在一些自媒体平台上,我们无法直接分享GIF格式的图片,但可以将其转换为视频格式后再进行分享。因此,当我们想要分享我们喜欢的GIF图…

C# 文件监听FileSystemWatcher

用处 当文件修改后,触发其他操作,例如删除另一个文件夹下的文件等 代码 using System; using System.Collections.Generic; using System.Diagnostics; using System.IO;namespace ConsoleApp6FileSystemWatcher {internal class Program{static void …

【TES720D-KIT】基于复旦微FMQL20S400全国产化ARM开发套件(核心板+底板)

TES720D-KIT是专门针对我司TES720D(基于复旦微FMQL20S400的全国产化ARM核心板)的一套开发套件,它包含1个TES720D核心板,加上一个TES720D-EXT扩展底板。 FMQL20S400是复旦微电子研制的全可编程融合芯片,在单芯片内集成…

微信小程序在TS模板下引入TDesign组件

介绍 TDesign 是腾讯官方出品的一款微信小程序组件库。本文介绍如何在新建ts空白模板下引入TDesign库 步骤 新建一个空白项目,这里可以选择TS-基础模板 新建项目目录结构如图所示: 注意这里其实小程序的文件都存放在miniprogram文件夹下,…

本文整理了Debian 11在国内的几个软件源。

1.使用说明 一般情况下,将/etc/apt/sources.list文件中Debian默认的软件仓库地址和安全更新仓库地址修改为国内的镜像地址即可,比如将deb.debian.org和security.debian.org改为mirrors.xxx.com,并使用https访问,可使用…

关于神经网络的思考

关于感知机 感知机(Perceptron)和神经网络(Neural Network)之间有一定的关系,可以说感知机是神经网络的一个基本组成单元。 感知机: 感知机是一种简单的二分类线性分类器。它接受多个输入,对每…

sanic框架解决多进程共享缓存问题

最近在用sanic框架做项目,今天需要处理多进程共享缓存问题,在网上搜索了很多,知道使用multiprocessing模块,但是导入后,直接使用会报错,然后看官网解决问题。 直接看官方文档点我哦 大致意思如下&#xf…

flutter 常用组件:文本、图片和按钮

文章目录 文本控件富文本控件图片本地图片网络图片按钮文本控件 ##一’码’当先 Text(这是一段文本这是一段文本这是一段文本这是一段文本这是一段文本这是一段文本这是一段文本这是一段文本,textAlign:TextAlign.center,style: TextStyle(fontWeight: FontWeight.bold, font…

简单好用的CHM文件阅读器 CHM Viewer Star最新 for mac

CHM Viewer Star 是一款适用于 Mac 平台的 CHM 文件阅读器软件,支持本地和远程 CHM 文件的打开和查看。它提供了直观易用的界面设计,支持多种浏览模式,如书籍模式、缩略图模式和文本模式等,并提供了丰富的功能和工具,如…

elasticsearch(ES)分布式搜索引擎01——(初识ES,索引库操作和文档操作,RestClient操作索引库和文档)

目录 1.初识elasticsearch1.1.了解ES1.1.1.elasticsearch的作用1.1.2.ELK技术栈1.1.3.elasticsearch和lucene1.1.4.总结 1.2.倒排索引1.2.1.正向索引1.2.2.倒排索引1.2.3.正向和倒排 1.3.es的一些概念1.3.1.文档和字段1.3.2.索引和映射1.3.3.mysql与elasticsearch1.4.3.总结 2.…

mysql面试题41:关心过业务系统里面的sql耗时吗?统计过慢查询吗?对慢查询怎么优化呢?

该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:关心过业务系统里面的sql耗时吗?统计过慢查询吗?对慢查询怎…

[CSAWQual 2019]Web_Unagi - 文件上传+XXE注入(XML编码绕过)

[CSAWQual 2019]Web_Unagi 1 解题流程1.1 分析1.2 解题 2 思考总结 1 解题流程 这篇博客讲了xml进行编码转换绕过的原理:https://www.shawroot.cc/156.html 1.1 分析 页面可以上传,上传一句话php失败,点击示例发现是xml格式,那…

『Linux小程序』进度条

文章目录 缓冲区问题回车与换行的区别进度条小程序 缓冲区问题 假设有一段代码为: #include<iostream> #include<unistd.h> int main() …

openGauss学习笔记-96 openGauss 数据库管理-访问外部数据库-file_fdw

文章目录 openGauss学习笔记-96 openGauss 数据库管理-访问外部数据库-file_fdw96.1 使用file_fdw96.2 注意事项 openGauss学习笔记-96 openGauss 数据库管理-访问外部数据库-file_fdw openGauss的fdw实现的功能是各个openGauss数据库及远程服务器&#xff08;包括数据库、文件…

算法-DFS+记忆化/动态规划-不同路径 II

算法-DFS记忆化/动态规划-不同路径 II 1 题目概述 1.1 题目出处 https://leetcode.cn/problems/unique-paths-ii 1.2 题目描述 2 DFS记忆化 2.1 思路 注意题意&#xff0c;每次要么往右&#xff0c;要么往下走&#xff0c;也就是说不能走回头路。但是仍有可能走到之前已经…

动态壁纸软件iWall mac中文特色

iWall for mac是一款动态壁纸软件&#xff0c;它可以使用任何格式的漂亮视频(无须转换)&#xff0c;音频(可视化功能)&#xff0c;图片&#xff0c;动画&#xff0c;Flash&#xff0c;gif&#xff0c;swf&#xff0c;程序&#xff0c;网页&#xff0c;网站做为您的动态壁纸&…