获得徽章 0
Spring Boot是简化Spring应用开发的一个框架、整个Spring技术栈的一个大整合(Spring全家桶时代)、J2EE开发的一站式解决方案(Spring Cloud是分布式整体解决方案)。优点:– 快速创建独立运行的Spring项目以及与主流框架集成– 使用嵌入式的Servlet容器,应用无需打成WAR包– starters自动依赖与版本控制– 大量的自动配置,简化开发,也可修改默认值– 无需配置XML,无代码生成,开箱即用– 准生产环境的运行时应用监控– 与云计算的天然集成
展开
评论
点赞
,首先会扫描test_joinv1数据表,总共需要读取10000行。当在第三步中拿第二步中获取的数据m到test_joinv2数据表中进行查询判断,但是由上图可知该条 SQL 命中了test_joinv2中 m 字段上的索引,所以根据索引的特性在数据表test_joinv2中按照树形算法查询相匹配的数据,所以查询的结果是1000行。由此可知,上述的 SQL 在使用 join 连表查询的结果是10000 + 1000 = 11000次。
展开
评论
1
其实在开发的过程中,我们还会涉及到一些权限框架的使用,比如我的mall项目中就使用到了SpringSecurity。
为了实现认证和授权功能,项目中整合了SpringSecurity和JWT。
为了使权限功能更加灵活通用,我们还会通过SpringSecurity实现接口的动态权限控制。
为了提高系统的性能,我们还会使用Redis+AOP来优化权限管理功能。
为了实现认证和授权功能,项目中整合了SpringSecurity和JWT。
为了使权限功能更加灵活通用,我们还会通过SpringSecurity实现接口的动态权限控制。
为了提高系统的性能,我们还会使用Redis+AOP来优化权限管理功能。
展开
评论
点赞
所谓技术债务,通俗地讲,其实就是那些技术上没做好的事情,会逐渐体现为长期的成本。
如果把视野再拔高一点,其实不单单是技术有债务的问题,业务发展带来各种各样的债务,例如团队管理、项目管理、知识管理等,其实都可能形成债务。
关于技术债务准确的定义与分类,因为不影响核心的思考,这里不做展开。
如果把视野再拔高一点,其实不单单是技术有债务的问题,业务发展带来各种各样的债务,例如团队管理、项目管理、知识管理等,其实都可能形成债务。
关于技术债务准确的定义与分类,因为不影响核心的思考,这里不做展开。
展开
评论
点赞
以前我们开发项目要进行认证基本都是通过在服务中写个拦截器,然后配置拦截器拦截所有的请求,最终通过拦截器的逻辑进行认证。这中方法不是不可以,但我觉得不好,如果我们项目中有三个微服务以上,那么这个拦截器的认证逻辑就会存在于每个微服务中,这是我认为的不好的点。
那我是怎么做的呢!
对,在网关服务里做认证动作。将认证动作迁移,因为我的个人项目是通过网关进行请求转发,所以,所有的请求都会先进入网关,再进入各个具体的业务服务,那问题就好办了。我直接通过实现网关的 GlobalFilter 接口拦截所有的请求,通过实现该接口进行认证逻辑处理,完成本平台的认证、续约、限流等功能。
那我是怎么做的呢!
对,在网关服务里做认证动作。将认证动作迁移,因为我的个人项目是通过网关进行请求转发,所以,所有的请求都会先进入网关,再进入各个具体的业务服务,那问题就好办了。我直接通过实现网关的 GlobalFilter 接口拦截所有的请求,通过实现该接口进行认证逻辑处理,完成本平台的认证、续约、限流等功能。
展开
评论
点赞
MySQL 的数据模型是严格的,需要事先定义好表的结构和约束,而 Elasticsearch 的数据模型是灵活的,可以随时添加或修改字段。
MySQL 的数据模型是二维的,每个表只有行和列两个维度,而 Elasticsearch 的数据模型是多维的,每个文档可以有嵌套的对象或数组。
MySQL 的数据模型是关系型的,可以通过连接(join)多个表来查询相关的数据,而 Elasticsearch 的数据模型是非关系型的,不支持连接操作,需要通过嵌套文档或父子文档来实现关联查询。
MySQL 的数据模型是二维的,每个表只有行和列两个维度,而 Elasticsearch 的数据模型是多维的,每个文档可以有嵌套的对象或数组。
MySQL 的数据模型是关系型的,可以通过连接(join)多个表来查询相关的数据,而 Elasticsearch 的数据模型是非关系型的,不支持连接操作,需要通过嵌套文档或父子文档来实现关联查询。
展开
评论
点赞
使用Setter方法进行注入时,Spring会在执行默认的无参构造函数实例化Bean对象之后,调用Setter方法来注入依赖。使用Setter方法注入可以将 required 属性设置为 false,表示若注入的Bean对象不存在,直接跳过注入,不会报错。
评论
点赞
,在上面的场景中,虽然BeanUtil.copyProperties用的一时爽,但有时候带来的后果是很严重的,所以很不推荐这种方式。为什么这么说呢?
比如团队中的某些人偷偷改了数据传输对象DTO,比如修改了类型、删去了某个字段。用BeanUtil.copyProperties的方式压根无法在编译阶段发现,更别提修改的影响范围了,这就只能把风险暴露到生产上去了。
比如团队中的某些人偷偷改了数据传输对象DTO,比如修改了类型、删去了某个字段。用BeanUtil.copyProperties的方式压根无法在编译阶段发现,更别提修改的影响范围了,这就只能把风险暴露到生产上去了。
展开
评论
点赞
数据脱敏,指对某些敏感信息通过脱敏规则进行数据的变形,实现敏感隐私数据的可靠保护。这样就可以在开发、测试和其它非生产环境以及外包环境中安全地使用脱敏后的真实数据集。在涉及客户安全数据或者一些商业性敏感数据的情况下,在不违反系统规则条件下,对真实数据进行改造并提供测试使用,如身份证号、手机号、卡号、客户号等个人信息都需要进行数据脱敏。是数据库安全技术之一。
评论
点赞
在请求头里Content-Type 为 multipart/form-data; boundary=----WebKitFormBoundary4TaNXEII3UbH8VKo,刚开始看肯定有点懵,不过其实也不复杂,可以简单理解为在请求体里要传递的参数被分为多部份,每一部分通过分解符boundary分割,就比如在这个例子,表单里有file和remark两个字段,则在请求体里就被分为两部分,每一部分通过boundary=----WebKitFormBoundary4TaNXEII3UbH8VKo来分隔(实际上还要加上CRLF回车换行符,回车表示将光标移动到当前行的开头,换行表示一行文本的结束
展开
评论
点赞
== 和 equals 的区别是什么?
== 对于基本类型来说是值比较,对于引用类型来说是比较的是引用;而 equals 默认情况下是引用比较,只是很多类重新了 equals 方法,比如 String、Integer 等把它变成了值比较,所以一般情况下 equals 比较的是值是否相等。
== 对于基本类型来说是值比较,对于引用类型来说是比较的是引用;而 equals 默认情况下是引用比较,只是很多类重新了 equals 方法,比如 String、Integer 等把它变成了值比较,所以一般情况下 equals 比较的是值是否相等。
评论
点赞
如果我们尝试把编程的复杂架构缩小到最容易理解的程度,那么编程开发其实只做3件事:”定义属性、创建方法、调用展示“。但因为同类所需的内容较多,如一系列的属性,一堆的方法实现,一组的接口封装,那么就需要合理的把这些内容分配到不同的层次中去实现,因此有了分层架构的设计。
那么本文小傅哥会向大家介绍一套MVC架构的分层设计以及如何创建使用,并提供相应的简单的案例。你可以复制这套架构在自己的场景中使用,也更能方便编程的小白可以更快的上手开发。
那么本文小傅哥会向大家介绍一套MVC架构的分层设计以及如何创建使用,并提供相应的简单的案例。你可以复制这套架构在自己的场景中使用,也更能方便编程的小白可以更快的上手开发。
展开
评论
点赞
对于MySQL的查找,其底层可以使用equal进行全值查找或者是like进行模糊查找,而这个操作是比较慢的,它会逐一去判断每条数据是否匹配,如果匹配了才会作为查找的结果。而MySQL在插入数据的过程中,会按照顺序,一条数据一条数据的插入,哪怕有几条数据的某些部分值是差不多,也会按照顺序进行排放。
而对于ES而言,它底层会在插入时,会维护一个倒排索引表,在这个倒排索引表中,会有两个字段,一个字段是对应的词,一个字段是包含该词的所有记录
而对于ES而言,它底层会在插入时,会维护一个倒排索引表,在这个倒排索引表中,会有两个字段,一个字段是对应的词,一个字段是包含该词的所有记录
展开
评论
点赞
上面两种方案中都存在硬编码问题,代码的侵入性太强,如果对实时性要求不高的情况下,可以考虑用定时器来处理:
数据库的相关表中增加一个字段为 timestamp 的字段,任何 CURD 操作都会导致该字段的时间发生变化;
原来程序中的 CURD 操作不做任何变化;
增加一个定时器程序,让该程序按一定的时间周期扫描指定的表,把该时间段内发生变化的数据提取出来;
逐条写入到 ES 中。
数据库的相关表中增加一个字段为 timestamp 的字段,任何 CURD 操作都会导致该字段的时间发生变化;
原来程序中的 CURD 操作不做任何变化;
增加一个定时器程序,让该程序按一定的时间周期扫描指定的表,把该时间段内发生变化的数据提取出来;
逐条写入到 ES 中。
展开
评论
点赞
Kubernetes,简称k8s,是一个自动化应用程序部署的系统。现代应用程序分散在云、虚拟机和服务器中。手动管理应用程序不再是一个可行的选择。
K8s 将虚拟机和物理机转变为统一的 API 界面。然后,开发人员可以使用 Kubernetes API 来部署、扩展和管理容器化应用程序。
K8s 将虚拟机和物理机转变为统一的 API 界面。然后,开发人员可以使用 Kubernetes API 来部署、扩展和管理容器化应用程序。
评论
点赞
很多人说,MySQL每张表最好不要超过2000万条数据,否则就会导致性能下降。阿里的Java开发手册上也提出:单表行数超过 500 万行或者单表容量超过 2GB,才推荐进行分库分表。
但实际上,这个2000万或者500万都只是一个大概的数字,并不适用于所有场景,如果盲目的以为表数据只要不超过2000万条就没问题了,很可能会导致系统的性能大幅下降。
但实际上,这个2000万或者500万都只是一个大概的数字,并不适用于所有场景,如果盲目的以为表数据只要不超过2000万条就没问题了,很可能会导致系统的性能大幅下降。
评论
点赞
Kafka 和 RabbitMQ 都是流行的开源消息系统,它们可以在分布式系统中实现数据的可靠传输和处理。Kafka 和 RabbitMQ 有各自的优势和特点,它们适用于不同的场景和需求。本文将比较 Kafka 和 RabbitMQ 的主要区别,并分析何时使用 Kafka 而不是 RabbitMQ。
评论
点赞
Redis是KV数据库,MySQL是关系型数据库,Redis速度更快;
Redis数据操作主要在内存中,MySQL主要将数据存储在硬盘,Redis速度更快;
Redis同样支持持久化(RDB+AOF),Redis支持将数据异步将内存的数据持久化到硬盘上,避免Redis宕机出现数据丢失的问题;
Redis性能极高,读的速度是110000次/秒,写的速度是81000次/秒;
Redis数据类型丰富,不仅支持KV键值对,还支持list、set、zset、hash等数据结构的存储;
Redis支持数据的备份,即master-slave模式的数据备份;
Redis支持简单的事务,操作满足原子性;
Redis支持读写分离,分担读的压力;
Redis支持哨兵模式,实现故障的自动转移;
单线程操作,避免了频繁的上下文切换;
采用了非阻塞I/O多路复用机制,性能卓越;
Redis数据操作主要在内存中,MySQL主要将数据存储在硬盘,Redis速度更快;
Redis同样支持持久化(RDB+AOF),Redis支持将数据异步将内存的数据持久化到硬盘上,避免Redis宕机出现数据丢失的问题;
Redis性能极高,读的速度是110000次/秒,写的速度是81000次/秒;
Redis数据类型丰富,不仅支持KV键值对,还支持list、set、zset、hash等数据结构的存储;
Redis支持数据的备份,即master-slave模式的数据备份;
Redis支持简单的事务,操作满足原子性;
Redis支持读写分离,分担读的压力;
Redis支持哨兵模式,实现故障的自动转移;
单线程操作,避免了频繁的上下文切换;
采用了非阻塞I/O多路复用机制,性能卓越;
展开
评论
点赞
如果说之前的 JDK17你还觉得没必要折腾,那 JDK21确实有必要关注一下了。因为 JDK21 引入了一种新型的并发编程模式。
当前 Java 中的多线程并发编程绝对是另我们都非常头疼的一部分,感觉就是学起来难啃,用起来难用。但是转头看看使用其他语言的朋友们,根本就没有这个烦恼嘛,比如 GoLang,感觉人家用起来就很丝滑呢。
JDK21 中就在这方面做了很大的改进,让Java并发编程变得更简单一点,更丝滑一点。确切的说,在 JDK19或JDK20中就有这些改进了。
当前 Java 中的多线程并发编程绝对是另我们都非常头疼的一部分,感觉就是学起来难啃,用起来难用。但是转头看看使用其他语言的朋友们,根本就没有这个烦恼嘛,比如 GoLang,感觉人家用起来就很丝滑呢。
JDK21 中就在这方面做了很大的改进,让Java并发编程变得更简单一点,更丝滑一点。确切的说,在 JDK19或JDK20中就有这些改进了。
展开
评论
点赞
格式:以键值对的方式进行配置,key=value
示例:name=xintu
我们修改application.properties配置文件。比如修改默认tomcat端口号及项目上下文件根。
设置内嵌Tomcat端口号
server.port=8888
设置项目上下文根路径,这个在请求的时候需要用到
server.servlet.context-path=/springbootcase
配置完毕之后,启动测试。
示例:name=xintu
我们修改application.properties配置文件。比如修改默认tomcat端口号及项目上下文件根。
设置内嵌Tomcat端口号
server.port=8888
设置项目上下文根路径,这个在请求的时候需要用到
server.servlet.context-path=/springbootcase
配置完毕之后,启动测试。
展开
评论
点赞