首先,最常见的是非空校验。比如字符串对于空格、空和null的校验,数字类型对于null的校验。 然后是字符串特定格式的校验,常见的有手机号码、邮箱地址等。 还有就是提交表单的时候,字符串有时不能包含特殊字符串,这个呢,就需要定义正则表达式进行比对。 对于数字类型,还可以指定最小值、最大值,还可以指定数字的取值范围。 对于日期类型,还可以要求这个日期是过去日期,或者是未来的某个日期。

数组链表和双向链表得区别 一般来说,数组链表查询更快,因为前者查询可以通过下标直接定位。而后者需要根据下标的大小,先选择遍历的方向,再依次遍历。 但是数组链表的增删相对更慢一点,因为增加或删除元素,需要将此下标后面的所有元素移动位置。但是对于双向链表,增加或删除元素,仅仅需要打开下标的前后两个连接,并重新建立连接即可。

事务注解底层原理是动态代理,所以需要方法的修饰符需要是公开。 springboot中,自动配置类自然包含开启事务,所以不用手动配置了。 底层大概分为四部,开启事务、执行代理方法、异常就回滚事务、正常就提交事务。

AOP的使用场景主要包括日志记录、性能统计、安全控制、事务处理、异常处理等。 日志记录应用在控制器层面,可以记录接口调用的出入参信息,以及相应的触发事件。也可以用于调用数据库时,执行脚本的打印和记录。 性能统计一般指的是接口处理请求的响应时间的长短。通过记录响应时间从而体现出性能。一般在压力测试过程中,或者生产环境大并发的环境下,接口响应时间提升,性能有下降。 安全控制,一般指的是接口的鉴权。在实际实现过程中,采用拦截器的方式,先从请求头中获取token,然后通过这个token从缓存中获取登录用户的用户信息。如果此用户有权限访问这个接口,那么放行。如果用户没有这个权限,就抛出异常信息,提示用户...

采用幂等表,酒店房间+日期作为唯一键,防止数据重复、预定冲突 同时,幂等表也可统计预定情况,用于数据分析 释放的房间,采用物理删除的方式,删除幂等数据

  SQZIszmzlwhA   2023年11月02日   19   0   0 数据数据分析幂等

代码中获取token的方式 第一种就是写个拦截器,当请求进来时,获取请求头里的token信息,然后存入请求头对象中。由于请求头对象对于每个线程都是独有的,所以在代码中的控制器、服务、数据层都可以获取。 第二种就是写个切面,切面就是所有涉及到的控制器方法。当用户访问接口时,获取请求头中的token,然后存入本地线程变量中。然后代码中可以直接调用静态方法,直接获取token信息。除了token,这个本地线程变量还可以存储用户相关信息。

  SQZIszmzlwhA   2023年11月02日   36   0   0 拦截器请求头静态方法

第一天,早早的去了一家东北菜馆,家人们聚餐,感觉像锅包肉很好吃,然后酸菜炖骨头酸菜太多了,而且尝试了东北酸菜的味道才发现不太爱这个口味。 然后点的炒鸡蛋和地三鲜的确很好吃,烧的很有味道,家里做菜应该做不出这种感觉。炖豆腐倒是感觉一般,汤呢也不会特别鲜美。送了一壶豆浆,冰的甜甜的,我感觉很好喝,很浓稠。但是家人们好像都不太爱喝。但是豆浆比奶茶健康,是吧。 对了,忘记东北大拉皮了。拌好后,酸酸甜甜也挺好吃。后面看别的桌在吃昂刺鱼贴饼子,看起来很香,后面有机会要一起去试试。 后面去了太茂的一家图书馆,看了会书。

  SQZIszmzlwhA   2023年11月02日   39   0   0 1

项目中异步方法无法启动的问题 最近在对接消息队列,当项目启动时,会自动顺序启动一个方法。这个方法里,会顺序调用几十个异步方法。每个异步方法都是接收不同主题的队列消息。发现一个问题,就是新添加的异步方法,根本不会启动,在应用日志里也不会有什么日志出现。 AsyncConfigurer.getAsyncExecutor() 后来发现,如果不配置上面的方法,异步方法会使用默认的线程池,然后呢线程数量就固定为8,不够用了。解决方法就是重写这个方法,然后扩大线程池的规模。 默认线程池固定的底层原理是这样的,虽然最大线程数很大很大,但是新建线程的条件是等待队列要充满,但是等待队列也非常大根本不会充满,所以...

  SQZIszmzlwhA   2023年11月02日   50   0   0 异步方法线程池等待队列

授权登录的一般流程 比如,有两个系统,甲方系统和乙方系统。我们要做的就是从甲方系统登录进入,然后跳转到乙方系统。这是如何实现的呢。 原理就是用户在甲方的系统登录后,跳转到乙方系统的链接。当乙方系统收到外部的跳转后以及鉴权编码后,乙方调用甲方的获取密钥接口,获取到密钥后,乙方再调用甲方的获取用户信息接口。然后乙方将用户信息存到服务器上,同时传个密钥给浏览器或者软件客户端。这样用户就可以以登录的状态使用乙方系统了。 支付宝的授权登录流程,和上面的差不多。只是由于手机上的支付宝软件一般处于登录状态,所以开始的登录流程改为点击授权的按钮。用户点击授权的按钮后,完成第三方软件或者网站的登录。 微信的授权...

  SQZIszmzlwhA   2023年11月02日   61   0   0 微信用户信息支付宝

事务注解什么时候会失效 相比于手动打开事务和关闭事务,事务注解的使用比较简单。但是它的使用必须遵循一些规则,否则会面临失效的风险。 第一个点,就是方法必须用公开修饰符,否则会失效。原因是,事务注解是根据动态代理实现的,其源码显示如果不是公开修饰符,将不会执行代理对象创建以及代理方法的调用。 第二个点,在于写在了类内部调用的方法上,那事务将不会生效。原因是,内部调用的方法,将绕开代理对象,从而使得事务控制失效。 第三个点,在于方法内部捕捉了异常,没有抛出异常,导致了事务回滚失败。这是因为,只有异常被捕捉到,事务的回滚操作才会执行。

  SQZIszmzlwhA   2023年11月02日   56   0   0 修饰符事务回滚事务控制

什么叫做代理呢,代理就是方法执行的时候,不执行原来的对象,而是调用其代理对象的方式。 而在爪洼的世界里,一般有这么两种代理实现方式。 在使用方式上,前者要求类要实现一个接口。后者不需要。 在原理上。前者是通过重写接口方法实现的,底层技术用的是反射。后者是基于底层的字节码技术,通过创建类的子类并织入逻辑,拦截父类的调用。 代理的应用场景,比如说切面的编写,拦截器的原理等。

  SQZIszmzlwhA   2023年11月02日   12   0   0 拦截器父类应用场景

首先定义一个注解,用来标识切点以及携带参数控制切面行为。 然后编写切面类,这个切面类包含切点,切点就是这个切面逻辑生效的地方。 然后就是定义环绕方式,常见的有方法执行前、方法执行后、环绕、方法出参后。 这是一种自定义注解结合的,切面编写方式,目前的应用场景有: 比如订单提交接口,前端可能触发连击操作,导致同一笔业务提交了两次。这种情况下,可以定义一个注解,注解逻辑是该用户的token在2秒内只能提交一次订单。那么连击得第二次提交就会失败。那就避免了这个问题。

  SQZIszmzlwhA   2023年11月02日   35   0   0 带参数自定义注解应用场景

过滤器没有用到切面编程,而是在请求过程中,直接调用过滤器中的方法。过滤器中的方法有调用前、调用后以及流程结束时。 过滤器加入过滤器列表中,是什么时间点呢。是在请求路径处理器实例化过程中发生的。

  SQZIszmzlwhA   2023年11月02日   39   0   0 实例化切面编程
关注 更多

空空如也 ~ ~

粉丝 更多

空空如也 ~ ~