Java面试题基础第十一天

2023-09-21 23:50:18

一、java面试题第十一天

1.跨域问题怎么解决呢?

有以下有几种方法

CORS,跨域资源共享

我们可以通过springboot 为每一个请求设置它的请求头,来设置它的可以跨域 的路径,

这样可以为每一个请求都可以跨域了

@CrossOrigin注解

我们可以通过springboot 来设置Controller类加个@CrossOrigin注解就可以进行跨域了,

注意SpringMVC的版本要在4.2或以上版本才支持@CrossOrigin。

nginx反向代理接口跨域

nginx反向代理跨域原理如下: 首先同源策略是浏览器的安全策略,不是HTTP协议的一部分。服务器端调用HTTP接口只是使用HTTP协议,不会执行JS脚本,不需要同源策略,也就不存在跨越问题。

2.设计接口要注意什么?

接口参数校验。接口必须校验参数,比如入参是否允许为空,入参长度是否符合预期。

设计接口时,充分考虑接口的可扩展性。思考接口是否可以复用,怎样保持接口的可扩展性。

串行调用考虑改并行调用。比如设计一个商城首页接口,需要查商品信息、营销信息、用户信息等等。如果是串行一个一个查,那耗时就比较大了。这种场景是可以改为并行调用的,降低接口耗时。

接口是否需要防重处理。涉及到数据库修改的,要考虑防重处理,可以使用数据库防重表,以唯一流水号作为唯一索引。

日志打印全面,入参出参,接口耗时,记录好日志,方便甩锅。

修改旧接口时,注意兼容性设计

异常处理得当。使用finally关闭流资源、使用log打印而不是e.printStackTrace()、不要吞异常等等

是否需要考虑限流。限流为了保护系统,防止流量洪峰超过系统的承载能力

3.过滤器和拦截器有什么区别?

1、过滤器和拦截器触发时机不一样,过滤器是在请求进入容器后,但请求进入servlet之前进行预处理的。请求结束返回也是,是在servlet处理完后,返回给前端之前。

2、拦截器可以获取IOC容器中的各个bean,而过滤器就不行,因为拦截器是spring提供并管理的,spring的功能可以被拦截器使用,在拦截器里注入一个service,可以调用业务逻辑。而过滤器是JavaEE标准,只需依赖servlet api ,不需要依赖spring。

3、过滤器的实现基于回调函数。而拦截器(代理模式)的实现基于反射

4、Filter是依赖于Servlet容器,属于Servlet规范的一部分,而拦截器则是独立存在的,可以在任何情况下使用。

5、Filter的执行由Servlet容器回调完成,而拦截器通常通过动态代理(反射)的方式来执行。

6、Filter的生命周期由Servlet容器管理,而拦截器则可以通过IoC容器来管理,因此可以通过注入等方式来获取其他Bean的实例,因此使用会更方便。

4.对接第三方接口要考虑什么?

确认接口对接的网络协议,是https/http或者自定义的私有协议等。

约定好数据传参、响应格式(如application/json),弱类型对接强类型语言时要特别注意

接口安全方面,要确定身份校验方式,使用token、证书校验等

确认是否需要接口调用失败后的重试机制,保证数据传输的最终一致性。

日志记录要全面。接口出入参数,以及解析之后的参数值,都要用日志记录下来,方便定位问题(甩锅)。

5.后端接口性能优化有哪些方法?

有以下这些方法:

1、优化索引。给where条件的关键字段,或者order by后面的排序字段,加索引。

2、优化sql语句。比如避免使用select *、批量操作、避免深分页、提升group by的效率等

3、避免大事务。使用@Transactional注解这种声明式事务的方式提供事务功能,容易造成大事务,引发其他的问题。应该避免在事务中一次性处理太多数据,将一些跟事务无关的逻辑放到事务外面执行。

4、异步处理。剥离主逻辑和副逻辑,副逻辑可以异步执行,异步写库。比如用户购买的商品发货了,需要发短信通知,短信通知是副流程,可以异步执行,以免影响主流程的执行。

5、降低锁粒度。在并发场景下,多个线程同时修改数据,造成数据不一致的情况。这种情况下,一般会加锁解决。但如果锁加得不好,导致锁的粒度太粗,也会非常影响接口性能。

6、加缓存。如果表数据量非常大的话,直接从数据库查询数据,性能会非常差。可以使用Redismemcached提升查询性能,从而提高接口性能。

7、分库分表。当系统发展到一定的阶段,用户并发量大,会有大量的数据库请求,需要占用大量的数据库连接,同时会带来磁盘IO的性能瓶颈问题。或者数据库表数据非常大,SQL查询即使走了索引,也很耗时。这时,可以通过分库分表解决。分库用于解决数据库连接资源不足问题,和磁盘IO的性能瓶颈问题。分表用于解决单表数据量太大,sql语句查询数据时,即使走了索引也非常耗时问题。

8、避免在循环中查询数据库。循环查询数据库,非常耗时,最好能在一次查询中获取所有需要的数据

更多推荐

会“穿墙术”的神奇材料 ——超固体

超固体(supersolid)是一种具备超流特性的固体,也就是集“超流体+固体”特性于一身的物质。简单来说就是超固体既有晶体态中原子规则排布的特征,又可以像超流体一样无摩擦流动。在凝聚态物理学中,超固体是具有超流体特性的空间有序材料。超固体是一种晶体材料,其原子排列结构规则且重复,也能够永远流动而不损失任何动能。尽管它

SpringMVC之自定义注解

目录一、Java注解1.1注解简介1.2注解分类1.3JDK基本注解1.4JDK元注解1.5自定义注解1.5.1标记注解1.5.2元数据注解1.6如何自定义注解二、自定义注解的基本案例2.1案例一(获取类、方法以及属性上的注解)2.1.1@Ingerited的使用2.2案例二(获取类属性上的注解属性值)2.3案例三(获

全球变暖问题(floodfill 处理联通块问题)

全球变暖问题文章目录全球变暖问题前言题目描述题目分析边界问题的考虑岛屿是否被淹没判断:如何寻找联通块:代码预告前言之前我们介绍了bfs算法在二维,三维地图中的应用,现在我们接续进行拓展,解锁floodfill算法,准确的来说是用bfs算法解决联通块问题。后续还会更新bfs算法有关内容,喜欢的小伙伴可以点个关注啦。题目描

数据结构和算法之快速排序

快速排序是一种基于分治法的排序算法。它通过不断地将数组分成较小的子数组,并按照递归的方式对每个子数组进行排序,最终将整个数组排序。#mermaid-svg-Za26UnuASULzGzsM{font-family:"trebuchetms",verdana,arial,sans-serif;font-size:16px

Vue路由与nodejs环境搭建

一.路由什么是路由什么是SPA路由的思路及实现实例建立一个HTML来编写路由测试结果​编辑二.nodejs环境什么是node.jsnpm是什么node.js的下载一.路由什么是路由路由(Routing)是指根据不同的URL地址,将用户导航到不同的页面或视图的过程。在前端开发中,特别是在单页面应用(SPA)中,路由起着至

Python实现MYSQL蜜罐

1LOADDATAINFILE介绍首先开启一个Mysql,看一下mysql是如何读取主机文件的。1.1linux搭建mysql1)docker运行mysql2)启动Mysqldockerrun-itd--namemysql-p3306:3306-eMYSQL_ROOT_PASSWORD=123456mysql3)进入容

Rust常见编程概念

变量和可变性rust使用let声明变量,变量默认是不可改变的。通过在let后面加上mut,可以声明可变变量。可以在变量名后加:和类型名,来显式声明变量类型,例如:leta:u32=1;常量常量使用const声明,变量名一般约定使用大写。隐藏不同的作用域如果有重叠,且重叠区域内有同名的变量,那么更小的作用域里变量会隐藏外

CentOS 7系统安装与配置、常用100条操作命令

CentOS7是一个广泛使用的开源Linux操作系统,它是RedHatEnterpriseLinux(RHEL)的一个免费重建版本,以稳定性和安全性而著称。在CentOS7上安装虚拟机通常使用虚拟化技术,如VirtualBox或VMware等。以下是CentOS7的简要介绍以及如何安装CentOS7虚拟机的步骤。Cen

git 的文件目录错误删除 --chatGPT

问:git的文件目录错误删除,需要还原到最后一次提交的位置,如何操作gpt:如果您在Git中删除了文件或目录,想要还原到最后一次提交的位置,可以使用以下步骤:1.**查看Git状态**:首先,可以使用以下命令来查看当前Git仓库的状态,以确保您删除了哪些文件或目录:```gitstatus```这将列出未提交的更改,包

(python语言程序设计教程)自学二

(python语言程序设计教程)自学二文章目录前言一、编写简单的程序1.1.标识符及命名规则1.2.变量与赋值语句1.3.数值1.4.字符串二、turtle画图2.1.绘制爱心并书写文本2.2.绘制幸运的四叶草2.3.浪漫的玫瑰花三、课后习题总结前言本系列文章,主要是对学校开设的python课程进行总结,教科书为:py

性能测试 —— 性能测试常见的测试指标 !

一、什么是性能测试先看下百度百科对它的定义,性能测试是通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。我们可以认为性能测试是:通过在测试环境下对系统或构件的性能进行探测,用以验证在生产环境下系统性能是否达到预估的性能需求,发现系统可能存在的性能瓶颈,进而改善优化并系统的性能,提高系

热文推荐