- 博客(372)
- 收藏
- 关注
原创 SpringSecurity的执行原理
SpringSecurity的执行原理:当我们服务端接收到请求后,首先通过DelegatingFilterProxy代理对象交互,转发给springsecurity的执行链,由于他自带的执行链有16条,我们将不用的过滤器进行了排除,同时加入了我们自定义的过滤器,token全局过滤器,先判断token是否被篡改或过期,然后对token进行解析,将负载中的角色存储在SecurityContext上下文中,对加有@PreAuthorize注解的方法进行判断,如果我们上下文中的角色包含注解中的角色,则执行请求,否则
2024-06-27 13:48:01 338
原创 常见的IO流有哪些?
1、FileInputStream2、FileOutputStream3、FileReader4、FileWriter5、printStream6、printWriter7、ObjectInputStream8、ObjectOutputStream
2024-06-26 19:19:59 181
原创 静态变量和实例变量的区别:
的实例变量才会被分配空间,才能使用这个实例变量。静态变量不属于某个实例对。象,而是属于类,所以也称为类变量,只要程序加载了类的字节码,不用创建任何。实例对象,静态变量就会被分配空间,静态变量就可以被使用了。:静态变量前要加static关键字,而实例变量前则不加。:实例变量属于某个对象的属性,必须创建了实例对象,其中。
2024-06-26 17:53:09 226
原创 数据结构:几种基本的数据结构
树形结构中,元素之间存在一对多的关系,每个节点有零个或多个子节点。常见的树形结构有二叉树、平衡二叉树(如AVL树、红黑树)、B树等,用于实现高效的查找、插入和删除操作。:图是一种更为复杂的数据结构,其中的元素(节点)之间可以存在多对多的关系,通过边来连接。图可以是有向的也可以是无向的,广泛应用于表示网络、路径规划等问题。
2024-06-26 14:32:05 304 1
原创 MySQL常用的函数
8、week()/ year():返回时一年中的第几周 / 返回是哪一年。1、concat('a','b'):把传入的参数连成一个字符串。2、lower()/upper():转换为小写/转换为大写。7、now():当前日期和时间,年月日时分秒。5、substring():截取字符串的。4、trim():去掉开头和结尾的空格。6、rand():返回0-1的随机数。3、replace():替换字符串。
2024-06-25 22:04:25 118
原创 count(*) 和count(1)的区别
COUNT(字段) 多了一个步骤就是判断所查询的字段是否为 NULL,所以他的性能要比 COUNT(*) 慢。同时MySQL对COUNT(*) 进行了优化,所以COUNT(*) 的效率高一些。
2024-06-25 19:29:50 156
原创 重写equals为什么要重写hashCode???
综上所述,为了保证程序的正确性和性能,当你修改了对象的相等性判断逻辑(即重写了。,可能会导致一些难以调试的问题,特别是在处理大量对象和复杂数据结构时。,就是说equals相同的话hash值必须一致,如果。方法,以保持两者之间的一致性和集合框架的正确运行。:Java集合框架的很多实现都依赖于正确的。,可能会导致集合中出现重复的对象,或者在。这是基于Java集合框架的。这样的集合中,对象的唯一性是由。中,同一个键可能关联到多个值。方法后,通常建议你也应该重写。方法是相等的,那么它们的。比较,提高查找效率。
2024-06-25 19:24:07 233
原创 断言提供了哪些方法
Java中的断言机制主要用于开发和测试阶段,以确保代码符合预期的行为。,如果是,则抛出带有自定义消息的。,可以用于实现自定义的断言逻辑。关键字,Java标准库中的。
2024-06-25 19:20:21 222
原创 MySQL集群如何实现读写分离
在业务代码中使用ShardingDataSource来执行数据库操作,Sharding-JDBC会自动根据配置进行读写分离。:通过MasterSlaveRuleConfiguration定义了主从数据库的读写分离规则。:使用数据源和读写分离规则创建了ShardingDataSource。:定义了从数据库的负载均衡算法。:定义了主从数据库的连接池。
2024-06-25 19:14:54 247
原创 为什么序列化???
需要共享数据时,直接传递对象通常是不可行的,因为对象的引用无法在网络或进程边界上传输。因此,需要将对象的状态转化为一种可以传输的形式,这就是序列化的作用。
2024-06-25 17:49:35 281
原创 Java stream操作流常用的方式
8.匹配:使用anyMatch()、allMatch()、noneMatch()方法可以对集合中的元素进行匹配判断。10.转换:使用collect()方法可以将集合中的元素转换为另一个集合。2.映射:使用map()方法可以对集合中的每一个元素进行映射处理。6.聚合:使用reduce()方法可以对集合中的元素进行聚合计算。7.遍历:使用forEach()方法可以遍历集合中的每一个元素。3.排序:使用sorted()方法可以对集合中的元素进行排序。5.统计:使用count()方法可以对集合中的元素进行统计。
2024-06-25 17:37:52 201
原创 堆和栈的区别
栈 堆 是否共享 私有 共享 存储内容 基本数据类型和引用类型的地址 实例对象 声明周期 随着线程结束而消亡 随着jvm结束而消亡 垃圾回收 不需要垃圾回收 需要垃圾回收
2024-06-25 17:28:19 142
原创 Redis为什么使用单线程?
3、工作线程单线程,io多线程,最大化cpu利用率。1、简化了并发控制,避免多线程死锁。2、保证了原子性和数据的一致性。
2024-06-25 17:11:34 107
原创 全链路跟踪的过程???
前端埋点,前端生成traceId放在请求头中传递给后端,请求后端接口,在后端过滤器中判断是否有传递traceId,如果没有就生成一个,放在MDC中,使用时直接打印就可以了,由于微服务会通过openfegin远程调用其它服务,所以需要增强openfegin原生的拦截器,将token和traceId放入请求中传递给下游服务,已记录用户调用行为,便于后续分析。
2024-06-24 22:11:17 302
原创 openfeign的原理 ????
4、open Feign是基于aop的原理,在远程调用时,会扫描带有@FeignClient注解的接口,根据接口上的服务名去nacos服务中心获取对应服务的ip和端口,与方法上的url进行拼接成http请求,调用远程接口就像调用本地方法一样简单,再由动态代理生成对应的代理对象去执行所调用服务(通过http进行请求与响应),拿到响应数据(统一封装过的)后会将响应体中的数据通过我们所自己设置的openfeign的解码器反序列化成Java对象返回给本地服务。2、支持spring mvc 注解。
2024-06-24 21:56:59 359
原创 SpringBoot内置日志框架是什么?
文件中添加或修改配置项来定制日志行为,比如改变日志级别、日志文件的路径和名称等。Spring Boot 默认的日志级别是 INFO,并且它会生成一个名为。(Simple Logging Facade for Java)作为日志。的日志文件,除非你修改了默认的配置。Spring Boot 内置的日志系统是由。
2024-06-24 21:48:06 308
原创 脱敏的原理:
脱敏的原理:自定义了一个注解@Desensitization使用自定义的脱数序列化工具类,实现接口ContextualSerializer重写createContextual方法,方法中扫描属性上是否有自定义的注解,有则创建定义的序列化类的实例并且返回,根据自定义的脱敏规则实现数据脱敏。
2024-06-24 21:32:44 119
原创 装箱和拆箱?int和Integer的区别?
3、int转Integer叫做装箱,Integer转int叫做拆箱,但是装箱和拆箱不是一定的,在-128到127之间的数据就不需要进行装箱和拆箱,因为这部分数据会存储在JVM的堆内存中。2、Intege内部包含了很多方法,便于我们开发。1、int是基本类型,Integer是包装类。
2024-06-24 21:20:52 112
原创 前端v-if和v-show的区别是什么???
v-if:是否渲染dom,如果为false就不进行渲染;性能更高。v-show:无论true/false都进行渲染;性能低。
2024-06-24 20:53:16 117
原创 在mybatis中resoultType和resoultMap的区别?
resoultType:使po对象中的属性与数据库中的字段实现自动映射。resoultMap:需要手动写标签,在标签中手动映射po对象与数据库中的字段。
2024-06-24 20:29:52 276
原创 war包和jar包的区别?SpringMVC和SpringBoot的区别?
SpringBoot:先说springboot的好处,打的是jar包,通过docker部署直接运行。war:需要tomcat,web应用部署,spring MVC使用。SpringMVC:xml配置,配置繁琐,打的是war包。jar:内置tomcat,jvm可以直接运行。
2024-06-24 17:58:07 91
原创 SpringIoc容器中的Bean是否是线程安全的?
不安全,默认单例,那么多个线程同时访问和修改这个状态时,其它线程可以给感知到,可能会互相影响,所以不安全。
2024-06-24 16:19:55 380
原创 项目从接收到发布的流程
3、每个人拿到任务后,根据具体的任务需求与其他人沟通(定义一些公共的模块),根据自己的需求编写接口(供别人调用),实现功能。6、上线后,对我们的应用进行监控,通过elk,skywalking监控日志,如果出现错误就及时解决,解决不了就立刻上报。2、开需求发布会,确定开发周期,根据需求分析划分模块,确定技术栈,派发任务。4、通过GitFlow发布流程。1、项目经理拿到客户的需求。5、CI/CD发布流程,
2024-06-24 13:06:09 568
原创 不建议使用存储过程,视图
使用函数计算,这样压力都给到了数据库,及时我们使用集群,当大量的请求进来时,我们的数据库可能也无法相应其它请求。:我们开发过程中一般都是禁止超过三张表的连接,每次查询视图时都会查找表连接,过多的连接会造成我们查询的效率低下。
2024-06-19 17:02:03 296
原创 如何设计一个秒杀系统
设计一个秒杀系统,整体而言可以从前端与后端进行优化。对于前端优化而言,可以从「页面静态化 + CDN」、请求频率限制进行优化。其中「页面静态化 + CDN」指的是将不变的静态数据固定下来,然后放入 CDN 服务器,从而提高用户请求的响应速度,降低服务器的并发压力。请求频率限制,则是通过抢购概率与抢购频率限制,降低后端服务器的服务压力。对于后端优化而言,一般有「增加缓存层 + 预热数据」、「MQ 异步处理」、「限流、熔断、降级」、业务侧优化这 4 种优化方式。
2024-06-18 22:11:34 1057
原创 Ribbon与Nginx的区别
nginx:可以反向代理,静态代理服务器,负载均衡,https认证。,它不会直接连接到服务的某个特定实例,而是通过。
2024-06-17 21:25:28 1055
原创 常用的设计模式
(始终使用同一个对象)饿汉式/懒汉式DCL. synchronized. volatile(多线程可见性,不保原子性禁止指令重排):沿着执行链执行同一请求.直至执行链完成.应用:Spring MVC/Gateway/Spring Security。深拷贝可以用于创建对象,但这并不是原型模式的唯一实现方式),:喂猫吃鱼.根据所监听对象变化.其被依赖对象进行对应处理.例:监听器机制.(复制基本类型的属性,引用类型采用的是复制指向这些对象的内存地址):下单接口.根据前端所传type.动态执行对应类。
2024-06-17 20:55:16 576
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人