前天写SQL时本想通过 A left B join on and 后面的条件来使查出的两条记录变成一条,奈何发现还是有两条。后来发现 join on and 不会过滤结果记录条数,只会根据and后的条件是否显示 B表的记录,A表的记录一定会显示。不管and 后面的是A.id=1还是B.id=1,都显示出A表中所有的记录,并关联显示B中对应A表中id为1的记录或者B表中id为1的记录。运行sql :
一、查询SQL尽量不要使用select *,而是具体字段1、反例SELECT * FROM user2、正例SELECT id,username,tel FROM user3、理由节省资源、减少网络开销。可能用到覆盖索引,减少回表,提高查询效率。注意:为节省时间,下面的样例字段都用*代替了。二、避免在where子句中使用 or 来连接条件1、反例SELECT * FROM user WHERE i
还好这个 for 循环代码只有 40 次,如果400次,估计要崩溃:这个纯粹是为了学习 if 的用法:挺好,这样防止经常改密码,然后忘记密码:一般人想不到密码在这里,大隐隐于市,另外 password 是可以作为一个独立的单词,passWord 这样的写法就很诡异,难道是传说中的驼峰写法。也很可能是故意的,因为大多数用户不知道 js 和浏览器调试,但维修的工程师可以很轻松的在特殊情况下找到需要的密
每当有铁子问到一些环境的搭建和部署问题时,总是会习惯性的问一句:学习还是线上?学习的话,能 Docker 就无脑 Docker 部署,省时省力,比如安装个MySQL,一条命令就搞定了,用完容器一删,干干净净;如果在物理机上面安装MySQL,不仅会浸入电脑,而且还可能面临各种问题,结果是还没开始学,却被环境给难住了。但我的建议仅限于个人学习,如果部署线上环境,那就得综合考试当前的服务是否适合容器化;
随着用户量和数据量的不断增加,慢查询是无法避免的问题。一般情况下如果出现慢查询,意味着接口响应慢、接口超时等问题。如果是高并发的场景,可能会出现数据库连接被占满的情况,直接导致服务不可用。慢查询的确会导致很多问题,我们要如何优化慢查询呢?主要解决办法有:监控sql执行情况,发邮件、短信报警,便于快速识别慢查询sql打开数据库慢查询日志功能简化业务逻辑代码重构、优化异步处理sql优化索引优化其他的办
前言作为一名老码农,在开发后端Java业务系统,包括各种管理后台和小程序等。在这些项目中,我设计过单/多租户体系系统,对接过许多开放平台,也搞过消息中心这类较为复杂的应用,但幸运的是,我至今还没有遇到过线上系统由于代码崩溃导致资损的情况。这其中的原因有三点:一是业务系统本身并不复杂;二是我一直遵循某大厂代码规约,在开发过程中尽可能按规约编写代码;三是经过多年的开发经验积累,我成为了一名熟练工,掌握
使用Spring Boot开发API的时候,读取请求参数是服务端编码中最基本的一项操作,Spring Boot中也提供了多种机制来满足不同的API设计要求。接下来,就通过本文,为大家总结6种常用的请求参数读取方式。如果你发现自己知道的不到6种,那么赶紧来查漏补缺一下。如果你知道的不止6种,那么告诉大家,一起互相学习一下吧~@RequestParam这是最最最最最最常用的一个了吧,用来加载URL中?
What is rabbitMQ ?RabbitMQ的消息模型Why use rabbitMQ ?异步解耦削峰How to use rabbitMQ ?基操安装方式功能实现另外的安装方式(建议使用这种)实现延迟消息What is rabbitMQ ?❝RabbitMQ 是一个由 Erlang 语言开发的 「AMQP」 (高级消息队列协议) 的开源实现。Rab
前言那么为啥线程池里面的线程和线程池都没释放呢。那么现在问题就转为线程对象是在什么时候gc。最后总结前言今天给大家分享一个线上问题引出的一次思考,过程比较长,但是挺有意思。今天上班把需求写完,出于学习(摸鱼)的心理上skywalking看看,突然发现我们的一个应用,应用内线程数超过900条,接近1000条,但是cpu并没有高涨,内存也不算高峰。但是敏锐的我还是立刻意识到这个应用有不妥,因为线程数太
思考:做需求与做需求的差异业务需求该怎么做再说「技术深度」获取做有深度事情的授权技术深度不是唯一标准最后看到一个讨论帖,原文如下:平时的工作如何体现一个人的技术深度?平时工作中很多时候需求细而碎的,如何在工作中积累技术深度?又如何体现一个人的技术深度?思考:做需求与做需求的差异再回答问题之前,我想先抛开「技术深度」这次词,讲讲做需求这件事,说说我对做需求的理解。每一个程序员都是从刚毕业做需求开始,
1、普通拼接2、循环拼接总结各位小伙伴在字符串拼接时应该都见过下面这种提示:图片内容翻译:报告StringBuffer、StringBuilder或StringJoiner的任何用法,这些用法可以用单个java.lang.String串联来替换。使用字符串串联可以使代码更短、更简单。只有当得到的串联至少与原始代码一样高效或更高效时,此检查才会报告。大家普遍认知中,字符串拼接要用 StringBui
在实际项目使用中,必须要考虑服务的安全性,当服务部署到互联网以后,就要考虑服务被恶意请求和暴力攻击的情况,下面的教程,通过intercept和redis针对url+ip在一定时间内访问的次数来将ip禁用,可以根据自己的需求进行相应的修改,来打打自己的目的;首先工程为springboot框架搭建,不再详细叙述。首先创建一个自定义的拦截器类,也是最核心的代码:/** * @package: com.
1. 前言最近在搞一个鉴权认证服务器,其中有个问题就是token的无感刷新。Token无感刷新是一种在用户不感知的情况下自动更新访问令牌(Token)的机制,以维持用户的登录状态。一般是使用一个短期的token来做权限认证,而更长时间的refreshToken来做短token的刷新,而在实现的过程中就有各种问题出来比如:Q1: 是要在服务器端实现还是能在客户端实现?Q2: token过期后无法解析
一、基本命令uname -m 显示机器的处理器架构uname -r 显示正在使用的内核版本dmidecode -q 显示硬件系统部件(SMBIOS / DMI) hdparm -i /dev/hda 罗列一个磁盘的架构特性hdparm -tT /dev/sda 在磁盘上执行测试性读取操作系统信息arch 显示机器的处理器架构uname -m 显示机器的处理器架构uname -r 显示正在使用的内核
前言XXL-JOB简介任务调度 - “类时间轮”的实现时间轮XXL-JOB中的“时间轮”一致性Hash路由中的Hash算法分片任务的实现 - 维护线程上下文看完源码后的思考前言废话少说,直接进入正题。相信大家对XXL-JOB都很了解,故本文对源码不进行过多介绍,侧重的是看源码过程中想到的几个知识点 ,不一定都对,请大神们批评指正。XXL-JOB简介XXL-JOB是一个轻量级分布式任务调度
我们知道 Java Switch 支持byte、short、int 类型,在 JDK 1.5 时,支持了枚举类型,在 JDK 1.7 时,又支持了 String类型。那么它为什么就不能支持 long 类型呢,明明它跟 byte、short、int 一样都是数值型,它又是咋支持 String 类型的呢?一、结论不卖关子,先说结论:switch 底层是使用 int 型 来进行判断的,即使是枚举、Str
在工作中的老项目中经常会看到代码中使用了1=1的情况,想起来之前自己也这个样子写过,感觉也没有啥影响就没有当回事,随着工作年限,工作经验的增加,对着一块有了更深的理解,下面我们就来看一看。代码开发中,编写SQL语句其实就和家常炒菜差不多,每个条件语句就是一个调料,所以每一种调料都会影响菜的味道,对于SQL来说查询条件的增加,影响的就是执行SQL的效率。那么1=1这种为什么又会存在呢,存在即有它的道
Spring 的 Controller 是单例还是多例?怎么保证并发的安全答案:controller默认是单例的,不要使用非静态的成员变量,否则会发生数据逻辑混乱。正因为单例所以不是线程安全的。我们下面来简单的验证下:@Controller public class ScopeTestController { private int num = 0; @RequestMapping
有的方法看看就好,知道可以这么用,但是否应用到实际开发中,那就仁者见仁,智者见智了。一万个读者就会有一万个哈姆雷特,希望这篇文章能够给您带来一些思考。耐心看完,你一定会有所收获。@onX例如 onConstructor、oMethod 和 onParam 允许你在生成的代码中注入自定义的注解。一个常见的用例是结合 Spring 的 @Autowir
前言见过几千行代码的 controller吗?我见过。见过全是 try catch 的 controller 吗,我见过。见过全是字段校验的 controller 吗,我见过。见过全是业务代码的 controller 吗?不好意思,我们公司很多业务写在 controller 的。看见这些我真的血压高。正文不优雅的 controller@RestController @RequestMapping(
在个人或者企业服务器上,总归有要更新代码的时候,普通的做法必须先终止原来进程,因为新进程和老进程端口是一个,新进程在启动时候,必定会出现端口占用的情况,但是,还有黑科技可以让两个SpringBoot进程真正的共用同一个端口,这是另一种解决办法,我们下回分解。那么就会出现一个问题,如果此时有大量的用户在访问,但是你的代码又必须要更新,这时候如果采用上面的做法,那么必定会导致一段时间内的用户无法访问,
什么是minioMinIO是一个基于Go实现的高性能、兼容S3协议的对象存储。它采用GNU AGPL v3开源协议。项目地址:https://github.com/minio/minio引用官网:MinIO是根据GNU Affero通用公共许可证v3.0发布的高性能对象存储。它与Amazon S3云存储服务兼容。使用MinIO构建用于机器学习,分析和应用程序数据工作负载的高性能基础架构。官网地址:
1摘要流式SQL是指采用用于编写数据库查询的相同的声明式SQL,而在快速变化的数据流上运行。这很有用,因为。当你能迅速采取行动时,数据往往更有价值现有的从数据流中获得实时洞察力的工具过于复杂。SQL的 "声明 "性质在解决第二点方面发挥了重要作用,因为它允许用户专注于他们想要什么,而让底层引擎担心如何完成。在现实世界中,流式SQL被用来。启用新的内部和面向客户的洞察力、自动化和应用程序通过为关键指
本文将详细介绍如何在Spring Boot应用程序中动态加载Jar包。我们将探讨动态加载Jar包的基本概念,以及如何使用Spring Boot的类加载器和第三方库来实现Jar包的动态加载。此外,我们将通过具体的示例来展示如何在Spring Boot应用程序中配置和使用Jar包的动态加载,以提高系统的灵活性和可扩展性。❝本文适合希望使用动态加载Jar包来增强Spring Boot应用程序功能的开发者
0、前言原项目框架 SpringBoot + MybatisPlus + Mysql1、切换流程1.1、项目引入postgresql驱动包由于我们要连接新的数据库,理所当然的要引入该数据库的驱动包,这与mysql驱动包类似<dependency> <groupId>org.postgresql</groupId> <artifactId&g
快速测试mybatis的sql当我们写完sql后,我们需要测试下sql是否符合预期,在填入各种参数后能否正常工作,尤其是对于复杂的sql。一般我们测试可能是如下的代码:由于需要启动spring,当项目较大的时候启动速度很慢,有些项目的启动时间超过30秒。导致测试sql速度很慢,尤其项目上不允许引入热部署jrebel,改下sql重新再测试等很花时间。如果只是单独测试sql是否正确,没必要启动spri
一、Spring Web MVC 与 Spring Bean 注解Spring Web MVC 注解@RequestMapping@RequestMapping注解的主要用途是将Web请求与请求处理类中的方法进行映射。Spring MVC和Spring WebFlux都通过RquestMappingHandlerMapping和RequestMappingHndlerAdapter两个类来提供对@
前几天看技术交流群的话题,又刷到了Service 层和 Dao 层真的有必要每个类都加上接口吗?这个问题,之前简单回答了一波,给出的观点是看情况现在结合我参与的项目以及阅读的一些项目源码来看,如果项目中使用了像 Spring 这样的依赖注入框架,那可以不用接口!先来说说为什么使用了依赖注入框架以后,可以不使用接口。我整理了支持 Service 层和 Dao 层需要加上接口的理由,总结下来就这么三个
平时开发中遇到根据当前用户的角色,只能查看数据权限范围的数据需求。列表实现方案有两种,一是在开发初期就做好判断赛选,但如果这个需求是中途加的,或不希望每个接口都加一遍,就可以方案二加拦截器的方式。在mybatis执行sql前修改语句,限定where范围。当然拦截器生效后是全局性的,如何保证只对需要的接口进行拦截和转化,就可以应用注解进行识别因此具体需要哪些步骤就明确了创建注解类创建拦截器实现Inn
filter是Java8 Stream的方法:Stream filter(Predicate<? super T> predicate)返回由与此给定谓词匹配的此流的元素组成的流。removeIf是Java8 Collecttion的一个默认方法。default boolean removeIf(Predicate<? super E> filter)删除满足给定谓词的这个
Copyright © 2005-2025 51CTO.COM 版权所有 京ICP证060544号