- 博客(153)
- 收藏
- 关注
原创 Redis 和 MySQL双写一致性的更新策略有哪些?常见面试题深度解答。
canal 是阿里巴巴旗下的一款开源项目,基于数据库增量日志解析,提供增量数据订阅&消费主要用途是基于 MySQL 数据库增量日志解析,目前主要支持MySQL。说白了是一个新的技术,第三方中间件,需要额外花时间掌握学习。有兴趣的小伙伴可以查阅下面这边文章,写的非常好!【Canal】从原理、配置出发,从0到1完成Canal搭建-优快云博客canal 的工作原理类似于将自己伪装成 MySQL(主机) 的一条从机(slave),然后只要主机数据发生变化,就会同步MySQL主机的数据。
2025-03-27 17:24:08
1491
原创 UNION,UNION ALL 的详细用法
如下图,不管是 UNION,还是UNION ALL,最终的表字段顺序会以第一张表 user1 的字段顺序为准,这就会产生一个问题,我 user4 表中,passwor 和 username 顺序是反着的,因为没有转化,就会导致查询到的结果中,user4 表的查询结果,用户的密码 password 被当作 username,用户的 username 被当作 password;table2 有A,B,C,D四个字段,我希望对这两张表UNION合并取出查询结果。,而是将两张表的全部数据合并,一共十条数据;
2025-03-17 17:37:38
1380
原创 MyBatisPlus 代码生成器如何使用?一篇文章学会它!!!
代码生成器是 MyBatis-Plus 提供的一个非常实用的功能,可以快速生成 Entity、Mapper、Mapper XML、Service、Controller 等代码,极大地提高了开发效率。我们从网上拉取的一些博主项目,特别是Spring Boot项目,很多就会集成 MyBatis-Plus 使用MyBatis-Plus 提供的代码生成器,对于单表增删改查的项目来说可以极大的提升开发效率。// 定义数据库// 数据库用户名// 数据库连接密码// 定义数据库// 数据库用户名。
2025-01-09 17:18:39
654
原创 使用 Redis 实现手机号验证码登陆功能,实际开发中使用 Token 实现登录校验又是如何做的?
对于我们用户来讲,我们在登陆一个APP的时候,有很多种登陆方式,比如"微信扫码"、"手机号登陆"、"支付宝扫码"、"账号密码登录",而且现在账号普遍都是使用手机号作为账号同时还能确保每个用户账号的唯一性,因此狭义上来讲账号密码登录也可以归属于手机号登陆的一种。现在大多都会要求微信扫码登录或者是手机号验证码登录。使用传统账号密码登陆的已经很少了,当然并不是说没有了,而是不再那么流行了,而且很多人其实设置了密码基本都会忘了,还不如短信登陆来的快。
2024-12-31 18:26:34
834
原创 Session、Cookie、Token、JWT分别都是什么?作用都有哪些?
到这里,许多小伙伴们会说可以多设置几台服务器,这样就能避免服务器崩溃带来的影响了,但与此同时也带来了另一个问题,多台服务器的 Session 不共享,如果服务器A生成了一个 Session,在将 Session 发送给用户的同时,也需要将这个 Session 发送给其他几台服务器,避免数据不同步导致用户下次访问时访问到其它服务器出现无此 Session 的情况。此时,我们就迫切需要一种技术,将每个用户进行隔离,虽然HTTP请求是无状态的,但我们需要让每个用户发送过来的HTTP请求有状态。
2024-12-20 15:32:23
768
原创 Vue学习之路——从入门到入土
Vue 是一款渐进式的前端开发框架,可以极大的提高前端开发的效率,核心就是MVVM模式。Model(模型),可以理解为我们开发中后端代码的实体类,模型,不同的个人有不同的个命名方式,常见的有"Entity"、"domain"、"pojo"、"model"、"po"等;View(视图),可有理解为前端页面,即HTML文件,供用户浏览的页面,成为视图;ViewModel(视图模型),实现模型数据与视图数据的双向绑定,简单来说就是后台数据库数据发生变化时,会刷新作用到前台页面的展示;
2024-12-18 15:01:02
1423
原创 Java常用 Date 时间格式化、Calender日历、正则表达式的用法
a-z] 则表示匹配26个小写字母,[A-Z] 则表示匹配26个大写字母,[0-9] 表示匹配0~9的数字;通常都是将正则条件写成一个字符串,然后在去调用 String 字符串类中已经写好的 "matches" 正则方法,方法会返回一个布尔类型的值。密码就没啥可说的了,安全性高一些的网站或者APP,可能会强制要求至少包含一个大小写、数字、特殊字符,且不能含有空格,长度通常为8~16位。表示匹配零个或一个;当然了,上述六个是正则表达式的基本组成部分,还有很多高级的组成部分,包括反向引用,非获取组,注释等。
2024-12-11 11:02:31
1906
原创 Windows / Linux / Docker怎么安装部署Redis?需要注意哪些细节?保姆级教学来啦,一篇文章全学会!!!
到这里,windows ,Linux,docker 三种部署 redis 的方法就算是全部讲解完毕啦!!!我们一起简单总结一下吧!
2024-11-26 17:32:47
994
原创 Linux系统Centos设置开机默认root用户
使用 Linux 安装Centos系统的小伙伴大概都知道,我们进入系统后,通常都是自己设置的普通用户身份,而不是 root 超级管理员用户,导致我们在操作文件夹时往往爆出没有权限,还需要切换到root 用户再去操作,就很麻烦很烦。最好用的在线SSH、SFTP工具,随时随地打开,支持文件在线编辑、状态监控,支持私有部署线路,给你最大的数据安全保障。配置完毕,":wq"保存并推出后,执行"reboot"重启电脑,命令即可生效,再次进入时自动为 root 用户。进入 "/etc/gdm"文件夹;
2024-11-15 11:32:38
1700
原创 Spring Boot项目的配置文件有哪些?加载优先级谁最高?配置优先级谁最高?
Spring Boot 项目最大的优点就是简化了原本 Spring 项目繁重的配置,熟悉Spring Boot项目的小伙伴们应该都听过一句话"约定大于配置",即约定的优先级要高于配置。在Spring boot项目中,我们做配置只需要使用配置文件即可,配置文件主要有 "application.properties"、"application.yml"、"application.yaml"三种文件;
2024-11-13 20:56:19
1469
1
原创 Ajax异步请求解析,打通前后端,看这一篇就够了
现在来看,Ajax 并不是一个很新的技术,但是它的异步请求思想还是直接我们去借鉴和思考的。现在的很多前端框架,归根结底还是封装的 JavaScript 代码,Ajax 也不例外。实质上,Ajax 只是 JQuery 框架封装的一个函数,也可以称之为 "$.ajax()" 函数,通过调用 ajax() 函数加载发送异步请求,JavaScript 提供了一个对象XHR(XMLHttpResponse),它就是 Ajax 的核心对象,发送请求以及接收服务器数据的返回全靠它。
2024-11-09 18:40:52
1543
原创 JSON详解
在开发过程中,我们常常会碰到JSON格式的数据与JavaBean格式的实体类之间的相互转化,此时我们就可以借助第三方工具包提供的现有API来提高我们的开发效率。常说糊涂工具包,里面不仅提供了JSON与Java互相转化的API,还提供了各种判空数组、判空字符串、日期格式化等众多小巧好用的API,非常推荐同学我们在日常练习的时候导包使用里面的API;实际开发过程中,我们从数据库中查到的数据量往往会很大,我们会将数据存储到ArrayList中,在返回给前端时,前端会将集合中的每个对象都转化为一个个JSON对象。
2024-10-08 10:43:59
5394
原创 HTTP协议讲解,请求报文与响应报文都是什么?网络控制台查看HTTP请求
服务器拒绝用户请求,有可能因为用户的权限不足,没有相应的访问权限,紧接着刚才的401,401是用户没有验证身份,如果用户验证了身份,但是没有访问权限,就会爆出403。而我们本地启动自己的项目代码的时候,是可以看到HTML文件和JS文件的,还可以在JS文件中打断点进行调试,如下图,我启动了本地的前端项目,可以看到这里就有JS文件和HTML文件,我们将鼠标点击在行头,就可以标记断点进行调试,如下图蓝色的三行几位断点,当JS代码运行到此处时,就会卡住,和我们使用IDEA进行DEBUG一样的道理。
2024-09-30 15:10:42
1325
原创 split 分割字符串方法解析,substring 截取字符串方法解析;二者的作用和区别?使用时需要注意什么?附代码和运行图
众所周知,开发过程中,我们时常会遇到需要切割字符串或截取字符串的需求,例如按照特殊符号切割、或按照标点符号截取等。对于切割字符串方法和截取字符串方法,Java为我们提供了 split 切割方法,substring 截取方法,下面小编就来说说二者的用法和区别。
2024-09-12 15:28:17
1289
原创 BigDecimal 接收数据库 decimal 类型数据,格式化为 #.000(#.角分厘)
经过查询之后,通常会将金额进行格式化,例如100元要格式化显示为100.00元;而我们在开发时,从数据库中查到 "decimal"、"float" 数据类型的数据,通常都是使用。数据库存储金额时,通常也是使用的 "decimal"、"float"等高精度类型。格式化的方式很简单,Java 提供了现成的格式化 API 供我们使用。开发过程中,我们在接触到关于金额的计算时,通常都会进行非常的精确的计算。举例 123456.789 元,拆解为如下表格所示。在实际的开发过程中,通常业务逻辑都是下面这样的,
2024-09-10 18:58:26
678
原创 万字精解 JavaScript 鼠标事件,键盘事件,事件处理程序,表单事件,看这一篇就够了(带源码和运行图)
事件其实也可以简单的理解为用户进行的每一步操作,用户访问我们的页面,一定会做各种各样的操作。比如我点击某个链接、某张图片、或填写个人信息然后提交按钮等这一系列用户执行的操作都可以称之为事件。用户点击页面可以交互的区域,也会受到交互的反馈。比如我输入账号密码登录,过一会就会反馈我登陆成功;又或者我填写个人信息然后提交,会反馈给我提交成功或保存成功;其实,这种效果都是由事件处理程序来完成的,当用户er各种交互,也会产生各种不同的事件,我们通过写代码对各种事件去进行捕获处理,然后将处理后的结果返回给用户。
2024-09-05 09:42:23
1206
原创 document对象获取元素,创建元素
但是,调用这三个方法创建的三个对象是各自独立存在的,当我们需要将它们组合在一起形成一个完整的标签时,就需要调用 appendChild 方法和 setAttributeNode 方法,此方法可以将节点文本对象和属性对象加入到标签之内从而形成一个完整的标签;该方法返回指定Id属性值的元素节点,由于各个Id值唯一,所以该方法返回值也只有一个,即指定的某个标签,而不会是多个,此外,该方法参数区分大小写。此外该方法返回匹配到的单个节点元素,如果匹配到多个,只会返回第一个,如果没有匹配到,则返回null;
2024-08-26 17:50:05
1856
1
原创 HTML标签入门(2)——超文本链接、有序列表、无序列表、表格、表单、块元素标签、内联元素标签、特殊内联元素标签
来进行包裹,而无序标签则是使用来进行包裹,内部每个选择同样时使用标签。有序列表标签语法如下所示,最外层由一对标签进行填充,每个
2024-08-23 18:41:09
1895
原创 给SQL server数据库表字段添加注释SQL,附修改、删除注释SQL及演示
删除其实都没什么好说的,因为开发过程中我们几乎都是去添加或者修改注释,不会去删除注释,但还是提一嘴,删除注释函数为 dorp ,然后下方8个参数不需要写注释,因为要删掉注释,当然不需要写注释内容,所以剩下7个参数,其他语法不变;但在它们二者中间,还有一个中间者,叫"SCHEMA",一个数据库可以有多个"SCHEMA","SCHEMA"是数据库的一个逻辑结构,,用于组织数据库对象,如表、视图、存储过程等。:我们知道,数据库都是一个个的链接,我们都过IP和端口去连接各个数据库服务器,所以连接是最大的一个单位;
2024-08-13 18:17:17
3769
原创 JavaScript快速入门,满满干货总结,快速掌握JS语法,DOM,BOM,事件
JavaScript是一个跨平台,面向对象的脚本语言。跨平台,面向对象,脚本语言。前两个特性,学过Java的小伙伴们一定不陌生,因此,有Java基础的同学,学习JavaScript会相对来说比较轻松。再者,JavaScript是脚本语言,所以它是不需要编译,而是由浏览器直接执行的(这句话记住,后面要考哦!!!。本篇主要讲解JavaScript,但是我们又不得不将 JavaScript 与 HTML,CSS做比对。因为它们三者都是构成前端的重要元素,只是各自的分工有所不同。1.1 HTML简介和举例说明。
2024-08-07 16:11:40
1005
原创 Java跨平台的原理是什么?JDK,JRE,JVM三者的作用和区别?xxx.java和xxx.class有什么区别?看这一篇就够了
跨平台的意思就是说Java代码的运行可以不受平台的约束,只需要将代码进行一次编译,就可以在多种平台上运行。即一次编译,到处执行(Write Once,Run Anywhere)。(1)Java虚拟机:通过Java虚拟机将 Class 文件编译转化成对应平台的二进制文件;(2)Class 文件:所有Java文件都由javac编译器编译成class文件,规范文件一致性;(3)Java语言规范:规定了Java语言中基本数据类型的取值范围和行为;
2024-07-18 15:00:04
1369
1
原创 Redis 管道(Pipeline)是什么?有什么用?
虽然 Pipeline 能够显著提高命令的执行效率,但一次性发送的命令数量也不宜过大,否则可能会导致数据包过大进而对网络传输造成较大压力,但是,如果发送的请求量过于庞大,Redis 也是会分多批次发送的。众所周知,redis 是一个客户端-服务端的模型设计,客户端向服务端发送存储数据的请求共分为四步(发送命令——>命令排队——>命令执行——>返回结果),简单来说就是一问一答的交互方式,在等待返回结果的期间,通常是以阻塞的模式等待服务端响应。类比到 Redis 中,Redis管道就是用来批量传输命令的。
2024-07-04 12:00:23
1125
原创 开发常见的http状态码.——400,401,403,404,500,501,503,状态码大全!
服务器拒绝用户请求,有可能因为用户的权限不足,没有相应的访问权限,紧接着刚才的401,401是用户没有验证身份,如果用户验证了身份,但是没有访问权限,就会爆出403。示意请求者应当继续发送请求,客户端返回此码表示请求有效,但是请求不完整,服务器只接收到了一部分,用户应当继续发送剩余部分;服务器目前从不同的网页位置响应请求,表示资源被临时分配到了新的URL,但请求者无需任何操作,可继续使用原来的位置进行请求。请求的网页已经被永久的移动到了其他位置,资源分配到了新的URL,服务器也会随之重定向至新的网页位置。
2024-07-02 18:42:32
3893
原创 开发常用的实体属性转化API,copyProperties方法的用途,需要注意的点。
在开发过程中,我们通常会在 Entity,model,DTO,VO,POJO,Param 等众多实体类之间进行互相转换,传统的做法就是 new 一个新的要转化的对象然后一个属性一个属性的 set 进去,如果是集合,外边再加一层循环嵌套即可,但尽管如此,步骤还是较为繁琐,而且当实体类中的属性较多时,代码还会显得特别臃肿,不美观。
2024-05-15 13:42:30
1153
原创 null和空集合有什么区别?集合List的判断 list == null,list.size() == 0,isEmpty() == true有什么区别和联系?
集合 List 是我们在开发过程中非常常用的,这两天我在做一个功能的时候,用 PostMan 测试接口总是报空指针异常,后来经过调试发现了问题所在,原因就是对于数组的判断方式有误;所以写这篇文章记录下来,防止以后再犯类似的错误,也为了给小伙伴分享让小伙伴们在日后开发过程中也可以避。
2024-05-08 20:12:39
1603
原创 设计模式(2)——工厂方法模式
本篇文章主要讲述23种设计模式中的工厂方法模式。这里我们用一个咖啡店系统的小案例来引出简单工厂模式的使用,在简单工厂模式的基础上延申介绍工厂方法模式。// 加奶方法// 加糖方法// 定义抽象方法,获取咖啡名称,由子类实现@Overridereturn "美式咖啡";@Overridereturn "拿铁咖啡";if ("美式咖啡".equals(type)) {}else if ("拿铁咖啡".equals(type)) {}else {
2024-04-29 20:46:29
1407
2
原创 UML——类图详解
UML全称(Unified Modeling Language),译为统一建模语言,是用来设计软件的可视化建模语言。它的特点是简单,统一,图形化,能表达软件设计中的动态与静态信息。UML从目标系统的不同角度出发,定义了用例图,类图,对象图,状态图,活动图,时序图,协作图,构件图,部署图九种图,本篇文章重点描述类图。类图(Class Diagram)是显示了模型的静态结构,特别是模型中静态的类,类的内部结构以及它们与其他类的关系等。类图不显示暂时性的信息。类图是面向对象建模的主要组成部分。
2024-04-25 08:00:00
4090
原创 POJO,Entity,model,domain,view,DTO,VO,Param这些分别都是什么含义?怎样理解?
在日常开发的过程中,如果我们接手一个新的项目之后,通常会有各种各样的包,想要搞清楚项目的基本架构,当然就需要知道各种包做什么用的,里面存放了那些东西。以便于我们理解项目的整体结构。我们都知道项目是要和数据库打交道的,数据库中的一张表映射到Java代码种是一个实体类。在形目中,我们通常会发现实体类用很多种不同的定义方法,有叫 entity 的,有叫 domain 的,有叫 model 的,有叫 pojo 的,到底哪一种是最规范的呢?本篇我们就来说说它们的区别。
2024-04-24 14:30:00
3440
原创 数据库主键ID自增,两种方法获取插入数据库那条数据自动生成的主键ID值
在开发过程中,我们可能会遇到这样的一种情况,我们保存一条数据。如果这条数据的主键ID是由用户决定的,这样我们在获取主键ID的时候,只需要让前端的同时传递给我们就可以了;如果主键ID设置为自增,是在用户新增数据操作时自动生成的,在后续业务逻辑中需要使用生成的主键ID值,我们又该如何获取呢?本篇我们就来说说两种常用方法获取自动生成的主键ID;
2024-04-23 16:28:39
3636
原创 MyBatis-Plus分页查询IPage的使用方法,如何自定义分页查询功能?
介绍 MyBatisPlus 分页插件IPage的使用和条件构造器 LambdQueryWrapper 的使用
2024-04-19 15:49:21
20049
5
原创 MySQL中空值和NULL的区别,开发过程中注意避坑!
在 MySQL 中,NULL 值和空值是两个不同的概念,空值就是我们常说的空字符串,用两个单引号 '' 代替即可;NULL 值在MySQL中是占用空间的,而空值则是不占用长度空间的。举个最简单的例子。如果把数据比作水果,表中的每一个空位比作一个个箱子,水果要放进箱子里存储;NULL就可以理解为空位上有一个箱子,但箱子是空的,没有存放任何水果;空值就可以理解为空位上连箱子都没有,真空状态;2. NULL和空值在表中显示的区别如下SQL创建一张 user 用户表,
2024-04-18 21:28:22
5474
原创 十六款好用的 IDEA 插件,强烈推荐!!!不容错过
然后在右侧CodeGeeX中,他就会跟我们说这段代码的逻辑,做了什么事,在你接手别人的项目时,没有注释就直接选中问CodeGeeX,懒人必备神器,如下,它就帮我解释了刚才我选中的方法的功能,以后再遇到读不懂的方法时,别忘了询问CodeGeeX;然后我们回到项目中,随便选中一个单词,点击右键,就会出现 "Translate",点击翻译,他就可以直接讲的那次的意思翻译出来,不需要我们在去浏览器翻译,非常方便,对英语不好的同学简直是救星;然后,控制台下方就会出现方法的调用过程,我们可以清楚的知道它的执行逻辑;
2024-04-03 18:28:25
43602
2
原创 windows系统kafka小白入门篇——下载安装,环境配置,入门代码书写
我们修改 log.dirs 的值为刚才创建的 data 文件夹的路径,在路径末尾再添加上 "/kafka" ,用来和刚才的zk做区分,kafka 文件夹用来存放kafka的日志文件,zk 文件夹用来存放zoopeeper的日志文件;如下图所示,我在生产者命令窗口输入 "hello kafka",点击回车,我们就可以在消费者中命令窗口中看到发送过来的 "hello kafka" 消息。打开文件夹后可以发现内部含有bin文件夹,config配置夹,libs依赖夹等,和JDK,maven 问价夹的格式如出一辙;
2024-04-02 20:34:58
7160
9
原创 MySQL 中 JSON 字段增删改查相关函数及使用演示,简单易学,5分钟上手
JSON数据是我们在开发过程中几位常用的一种数据存储方式,主要以KV键值对的形式存储数据,在 MySQL5.7 之后,提供了JSON字段,在 MySQL8之后得到了很好的优化,下面就是JSON格式数据与的例子,以KV键值对的形式存储数据,每个键值对之间使用 "," 隔开即可。我们先准备好一张 product 商品表,字段类型如下图所示,方便一会操作展示然后在表中存放一些数据,如下图,数据均为编造,仅为演示建表SQL和数据SQL如下,想动手尝试小伙伴们可自行CV。
2024-04-01 14:51:11
4106
原创 设计模式(1)——单例模式
静态内部类是通过JVM的方式保证线程安全,JVM会保证每个类之加载一次,但类中的静态内部类是不会被加载的,只有当我们调用 get 方法时,get 方法会返回给我们一个静态内部类的INSTANCE,而INSTANCE在静态内部类中指代的就是外部类的实例对象,非常神奇,非常花哨,并且可以做到线程安全,任何人来访问get方法获取Mgr03对象的实例,获取到的都是同一个INSTANCE。一个类只实例化自己的一个实例,并且不允许再创建多余的实例,在对外提供访问时,访问的都是同一个实例对象。
2024-03-29 09:47:57
752
原创 Git,GitHub,Gitee,GitLab 四者有什么区别?
总结来说就四句话即可概括全部内容(1)Git 只是本地仓库的代码管理工具;(2)GitHub 是国外公司基于git制作的远程仓库;(3)Gitee 是国内公司基于git制作的远程仓库;(4)GitLab 是想搭建自己仓库时用的工具;t=N7T8。
2024-03-28 14:05:51
3429
原创 如何理解Java不可变集合?有什么使用场景?
不可变集合最经典的一个使用场景就是我们常玩的斗地主,斗地主中已经规定好了的规则,我们就可以把它放在不可变数组中,这些规则不能修改,也不能再继续添加,只能按照他已经规定好的游戏规则去进行。然后我们调用 list.add() 方法,发现方法报错,不支持的操作异常,下面的 Set 和 Map 我就不重复尝试了,感兴趣的小伙伴可以自行动手操作一遍。(2)当集合对象被不可信的库调用时,集合内部数据不可变也保证了数据的安全性;,不可变通常说的是内存地址(也就是引用)不可变,但引用的值是可以改变的;
2024-03-26 10:30:00
432
原创 精炼总结阿里巴巴Java编程规范,养成良好编程习惯,提高编程素质(1)
(1)long或Long 初始赋值时,必须使用大写 L,因为小写的 l 容易和数字1 产生混肴;正确示例:Long num = 2L;错误示例:long num = 2l,极容易将num 认为是21,但实际上定义的是2;(2)不允许出现未经定义的变量只出现在代码中;错误示例 String key = "ID" + tradeId,这样定义容易造成内存溢出,不允许出现。(3)不要使用一个常量类维护所有常量,应该对常量进行分类维护,后期排查方便,维护也方便。
2024-03-25 14:53:47
986
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人