自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(43)
  • 收藏
  • 关注

原创 mysql 查找表中重复数据 类型题目

1. 我们 首先可以想到 分表 把这一张表分成两张表 查询 两张表的num 值相同的 且 id 不同的,但是下面的sql 只能应用大于等于2 的查询,如果是查找大于3的 数值 ,就不会再适用了。其中 sql语句的执行顺序where >group by >having>order by ,在需要用到 函数 来进行条件判断 可以使用having 因为 where 无法配合 函数使用。先 将 每个数字出现的次数统计出来当成一个表,然后在该表里面查询出 数值大于2的数值。2.使用 分组 分表 ,再查询的形式。

2024-06-28 22:21:06 250

原创 effective java (1)(考虑使用!)静态工厂方法代替构造方法

只是目前阶段 对本书第一章内容的浅显认知,说实话 这一章 我看了4遍左右,每一遍感觉都不一样他的创建模式 有时候像设计模式,但作者已经在原文中描述,它并不等价于 设计模式我们正常 创建一个年级类 是长这样的我们不写成标准的javabean模式 ,只是对 静态工厂方法 代替构造方法 一章的内容进行自己简单的理解实现。

2024-06-28 17:58:07 797

原创 mysql窗口函数排名查询 与 连续出现的数字查询

学会这一个查询,我们应该对该类型的查询 方法就能有一个了解,不然 如果下次遇到该类型的查询,我们依然分析不出给你一张表,里面有id 和score字段,根据score的分数大小 排序 ,假如有相同的分数,按照相同的次序进行排行例子如下该decimal 参数代表的 是 精度,(5,3)代表该数字只能有五个,包括小数点后面的,3代表小数点后面只能有三个 意思该 字段的范围在 -99.999 到99.999 如果是(5,0) 代表着只能是整数,且没有小数点插入的数据如下查询到的例子如下。

2024-06-25 16:57:30 980

原创 mysql join on 与left join on

1.假如 有 a b 两个表,我们 用a表作为主表 ,b表作为子表,在我们使用 left join on 查询的时候,如果右表没有查询到数据,那么右表会显示为null,而不是直接查询不到值。我们可以看到 b表中 并没有 销售部 我们对 a b 两表 进行查询。使用 join on查询结果 直接王永真4号没有查询出来。使用left join on 查询 返回的为 null。

2024-06-25 15:57:17 176

原创 微服务中不同服务使用openfeign 相互调用

首先 我们上文 已经知道了 nacos 的注册服务,现在 我们 在不同服务中相互调用就可以使用openfeign 直接调用,而不是 再写冗余的调用代码啦首先 我们的微服务组件如下因为我这个微服务是我在 员工登录demo 中 拆出来的,在userlogin模块中 我集成了 用户登录和员工查询,耦合度比较高,大家先凑合看,但是这并不影响 阅读哈哈首先 我们分析 一下我自己设计的业务逻辑。

2024-06-21 20:18:49 652

原创 mysql 查询的一般思路

不能用单表时优先用连接,连接是SQL中非常强大的用法,小表驱动大表+建立合适索引+合理运用连接条件,基本上连接可以解决绝大部分问题。能不用子查询、笛卡尔积尽量不用,虽然很多情况下MySQL优化器会将其优化成连接方式的执行过程,但效率仍然难以保证。自定义变量在复杂SQL实现中会很有用,例如LeetCode中困难级别的数据库题目很多都需要借助自定义变量实现。能用单表优先用单表,即便是需要用group by、order by、limit等,效率一般也比多表高。

2024-06-20 11:49:00 335

原创 redis 缓存jwt令牌设置更新时间 BUG修复

就是 我 redis中存储的键 名 为token 值 是jwt令牌 ,但是如果 用户a 登录 之后 创建一个 键 为token的 键值对,如果用户b登录,创建的的键名也是 token ,这样用户b的 jwt 会覆盖 用户a的,就会导致 用户a 的token 会失效呀,这真是一个大大的bug , 按照我目前的水平,我想到了一下 的解决方案 ,既然 token 的键会覆盖,那么我们给 token的键 加上一个唯一标识不就好了。我们apifox进行登录接口的依次登录 ,然后观察 redis中的缓存数据。

2024-06-16 11:57:38 621

原创 mybatisplus(原理)使用方法引用的形式获取实体类对应数据库的列名

而继承serizlizable类的接口, 这个接口中的方法就代表在我们传入函数式对象的时候他是可以序列化的,在变成字节码的时候 会额外存储 这个传入的函数式对象的 类和方法信息,根据这些信息,找到数据库对应的列名。我们用接口对象 lambda 中getclass方法的getdeclaredmethod方法获取类本身声明的方法,然后我们看到有两个方法 ,一个workplace方法,一个是我们的add方法。方法引用,但是我们把方法引用改成lambda表达式的形式的时候不会报错,但是运行的时候报错。

2024-06-11 13:26:15 442

原创 (面试官问我微服务与naocs的使用我回答了如下,面试官让我回去等通知)微服务拆分与nacos的配置使用

当我们配置好nacos之后,我们的实例的端口号 就会发送给nacos注册中心 ,当我们服务的调用者进行调用的时候,具体的服务端口号就从nacos中进行拉取。下面我们进行一个场景的分析,现在有一个购物车服务 cartservice ,然后还有一个商品服务 itemservice,我们是查看购物车的时候需要访问商品服务,当我们的用户一多,并发量上来的时候商品服务这个 模块有可能就会承受不住崩溃,所以我们可以多开几个启动实例,进行负载均衡的配置,可是当我们访问的这几个不同的实例的时候,我们该怎么访问这些实例呢?

2024-06-06 22:50:40 756

原创 redis缓存token设置jwt令牌过期时间

在上文中 我们已经设置了自定义登录接口自定义拦截器jwt登录校验接口模拟账号登录_jwt自定义拦截器-CSDN博客但是上文jwt过期时间是由yml文件中配置的,比较不优雅,我们今天来用redis缓存token 的方法来进行 jwt的过期设置。

2024-05-30 22:53:25 826

原创 linux下docker 的使用(2)

上期我们讲了网络,现在来进行最后的 docker的基础内容。

2024-05-27 19:35:24 336

原创 linux下的docker使用

docker是什么,docker翻译过来的意思就是码头工人,顾名思义,docker本质上就是一个搬运工,只不过从搬运货物改成了搬运程序,使搬运的不同的程序能够独立的运行在码头上的不同容器内,互不干扰,而他强大的不仅仅是搬运,而是对程序的统一管理,配置。

2024-05-24 13:03:14 764

原创 mybatis-plus 优雅的写service接口中方法(3)

比如说 我们 数据库中定义的字段status为 int类型的,然后我们对应的数据库user表的实体类user 的类型是 枚举类型的这样就会导致我们在查询插入的时候出现类型转换的错误,我们加上这个注解,开启配置枚举处理器,就可以 实现二者值之间的自动转换。首先 我们可以看到 在 我们对比用户状态的时候 用户状态异常的数字是写死的,这样写有没有问题,没有问题,但是假如我们以后用了多个用户状态的的数字,以后想改 是不是特别 的麻烦 ,所以我们干脆定义一个枚举类型,来进行 用户状态的对比。

2024-05-18 12:20:54 1002

原创 mybatis-plus(2)

我们还是 给出一个查询条件 扣减指定id用户的工资 200 sql 为在我们自定的sql中可以这样写其中该deletemoney方法是自己写的这是 usermapper接口中和xml文件中的方法其中 第二个 Constants .wrapper 为 mp中的一个定义的常量类 , 后面的${ew.customSqlSegment} 是拼接 wrapper sql语句的固定格式。

2024-05-13 22:58:16 469

原创 mybatis-plus使用指南(1)

mybatis-plus

2024-05-12 23:01:06 542

原创 自定义拦截器jwt登录校验接口模拟账号登录

五一闲在宿舍,本来想写一个自己的简易博客网站,发现vue基础太差,做不出来页面效果于是便放弃,但也没有完全放弃。于是我分析了一下简易博客的后端实现流程,除了最基本的crud以外,在自己目前的对接口的分析中感觉比较复杂的便是登录校验这一块,于是便用apifox 进行接口测试,模拟实现一个登录校验接口。

2024-05-03 21:59:54 1277

原创 springCache实现redis缓存功能

首先 我们要明确使用springcache的使用顺序maven坐标为dependencygroupIdgroupIdartifactIdartifactIdversion>2.7.3</version</dependency我们常用的注解有以下几种我们在启动类上加入第一个注解之后。

2024-04-28 22:10:19 417

原创 Springboot自定义注解+aop实现redis自动清除缓存功能

假如我们是一个商家,我们在管理端 设置好菜品之后,每次不同的用户访问我们的菜品,都要查询数据库,当访问者多的时候,会造成数据库的卡顿,所以使用redis进行缓存,这样只需要读取一次数据库,就可以的大大减少数据库的访问压力,但是当我们 管理端对某个菜品进行删除的时候,用户再次访问,还会访问到我们redis 数据库的数据,这时候就会出现bug,所以我们在删除菜品的时候,也应该把对应的redis的菜品缓存数据删除 但是我们执行删除修改增加菜品的时候,统一设置删除缓存数据,但是我们一个个的调用封装的删除缓存的方法太

2024-04-28 21:18:12 411

原创 redis基本数据类型与操作+springDateRedis使用

与mysql不同的是mysql是存储在磁盘当中的,用表格对数据进行展示,redis是存储在内存中的,读写速度相对较快。

2024-04-22 10:41:41 269

原创 Maven的了解与使用

我们加入现在 创建了 a b c三个maven 模块,a b c三个模块中有的需要相同的模块,一个一个配置显的太繁琐了,我们就创建一个 父工程模块,把相同的依赖都配置到父工程模块,然后让a b c三个子模块继承该父模块,依赖也会继承。我们在父工程中加入了许多子工程需要的依赖的时候,有时候很多依赖的版本我们在编写代码的时候需要去修改,但是 我们去修改的的话需要一个一个找太麻烦了而且在修改的时候容易出问题,所以我们进行统一版本锁定。打包方式是设置在父工程中的,在我们子工程untils继承父工程代码参考如下。

2024-04-14 22:15:31 387

原创 springboot配置原理

我们在引入第三方依赖的时候,该依赖中会有一些bean,但是有时候我们注入的时候并不会找到该bean对象,是因为springboot扫描的时候没有扫描到该依赖的包,是因为 我们在添加@componet注解声明bean对象的时候,需要保证注解能被spring的组件扫描到,需要用@componentscan注解手动扫描该依赖,但是这样太繁琐了。我们要进行事务管理、要进行AOP程序的开发,此时就不需要我们再去手动的声明这些 bean对象了,我们直接使用就可以从而大大的简化程序的开发,省去了繁琐的配置操作。

2024-04-03 22:56:01 972

原创 AOP使用详情+nginx部署以及反向代理

可以看到我的文件中设置的是 80端口号,只需要在网志中输入 localhost:80 就可以访问,但是这样比较不安全,会暴露我们的后端服务,我们就可以用反向代理 来使我们的后端更安全,访问速度更快,可以进行负载均衡总结来说 就是 前端发送的动态请求 nginx会帮我转发到后端tomcat服务器等,首先 我们会为目标对象生成一个代理对象,代理对象注入 controller层的 service方法,然后运行切面类的中的方法,运行一次之后,调用目标对象的原始方法,然后继续运行切面类的方法,直到结束。

2024-03-25 18:03:53 897

原创 阿里云oss文件上传+springboot配置文件yml+登录校验jwt令牌+过滤器 拦截器+异常处理+spring事务管理

jwt令牌本质就是一个字符串, 当我们用户第一次访问服务器的时候,也就是开启会话的1时候,我们登录账号,登录成功之后会在服务器产生一个jwt令牌,响应给浏览器存储在cokie或者其他存储空间中,接下来在后续的每一次的每一次请求都需要把令牌带到服务端进行校验,如果令牌有效就说明用户已经登陆,令牌无效说明用户未登录,我们在多次请求中共享数据就可以把共享的数据存储在令牌当中就可以。在拦截器当中,我们通常也是做一些通用性的操作,比如:我们可以通过拦截器来拦截前端发起的请 求,将登录校验的逻辑全部编写在拦截器当中。

2024-03-17 17:31:13 905

原创 mybatis增删查改基础操作+mybatis日志输入+sql注入+xml配置与动态sql

执行之后,就能删除id为2的数据了,但是这种有一个弊端,就是你只能指定一行的删除情况,想删除其他的id 内容,就需要再编写删除方法,或者修改 delete注解中的sql语句内容,那么有没有方法能解决这种冗余的情况 ,我们可以使用占位符 #{}我们在插入的时候是根据一整行的信息进行插入的,这时候我们可以用我们之前建立的实体类 封装 好要插入的数据内容,然后调用mapper接口的方法 给sql语句返回一个封装好的实体类,mybatis会自动识别类中的名称与内容,进行插入操作。${...} 拼接SQL。

2024-03-10 20:14:49 919 2

原创 零碎的知识点c语言

f,%F,%e,%E,%g,%G 用来输入实数,可以用小数形式或指数形式输入。而i则会变成unsigned int 型的一个随机大的正数 所以该题打印的为>有符号的char取值为-127到128 无符号的char取值范围是0到255。%a,%A 读入一个浮点值(仅C99有效)一个定义的全局变量 不初始化的时候默认的值为0。%i 读入十进制,八进制,十六进制整数。指针减指针得到的是指针之间的元素个数。%u 读入一个无符号十进制整数。指针之间比较大小比较的是地址的大小。%x,%X 读入十六进制整数。

2024-03-04 10:07:00 368

原创 maven依赖+http请求响应+统一请求响应结果+分层解耦+ioc&di+mybatis 数据库连接池

假如 有一个项目 A 现在添加了 a b c三个 依赖 ,现在 我们 又创建了一个项目B,在我们没有在pom文件中添加依赖的时候,依赖不会传递,在我们 在pom文件中把A项目添加到依赖中去,B项目就会 有 A项目中的所有依赖 ,这就是直接依赖。当我们在C项目中依赖了B项目,此时 有a b c三个jar1包,我们C项目不需要cjar包,此时可以用依赖排除,记住 排除的依赖代码需要写在 此时。

2024-03-04 09:58:27 1068 1

原创 java期末实验

【代码】java期末实验。

2023-12-21 15:36:57 383

原创 Leetcode-数据结构链表-24.两两交换链表中的节点-每日一题

6.我们可以看到后面还有两个节点需要交换,那么我们根据上一个节点交换的情况,如果我们想要交换节点3和4是不是需要 把cur指向节点1(cur=cur.next.next),f指向3,s指向4,然后重复情况5的交换。我们可以再设置两个节点 first和second,(用f代表first用s代表second)一个记录链表的头节点cur.next,一个记录链表的下一个节点cur.next.next,也就等价于 f.next。所以我们可以添加一个哨兵位的头节点记录该链表的头节点,作为返回值。

2023-11-13 22:42:05 72

原创 java迭代器

student是自己写的类,而第一行代码创建迭代器对象, 调用hasnext方法判断元素是否为空,next方法获取当前元素,并且把指向第一个元素的指针++,指向第二个元素。

2023-11-12 22:56:08 53 1

原创 Leetcode-每日一题 相交链表 -java实现-数据结构链表

链接如下。

2023-11-12 22:20:58 178 1

原创 字符串,字符串函数 strlen和sizeof和string库包含的函数等(3)

如果目标区域和源区域有重叠的话,memmove() 能够保证源串在被覆盖之前将重叠区域的字节拷贝到目标区域中,复制后源区域的内容会被更改。这是一个int型的数字,一个元素占用4个字节,我们把arr1的内容拷贝到arr数组中,拷贝的字节数为3*4也就是12个字节,此外我们不但可以进行从头开始的拷贝,也可以选择内容的进行拷贝,看下面一段代码。拷贝时候因为是void型,所以理论上哪种种数据类型都可以拷贝,但是拷贝时候的两种类型必须相同,否则会发生字节处的错误。1.memcpy负责拷贝两块独立空间的数据,

2023-06-14 19:12:05 61

原创 string和strlen函数和sizeof(2)

看这行代码的运行结果为wodd,拷贝的字符串个数大于要拷贝的字符串,而当遇到\0时会停止拷贝,所以拷贝到wodd就会结束,后面的用\0补充,而不会输出 woddo。当我们要追加的目标字符串中有 \0的时候,该函数自动识别并从目标字符串的\0出追加多出来的字节后面补\0,但是值得注意的是。因为该拷贝的是3个字节的,而arr1数组第三个字节是\0,而打印和拷贝的时候是以\0结束的,所以程序的运行结果 为。当 src 的长度小于 n 时,dest 的剩余部分将用空字节填充。所指向的字符串的结尾,直到。

2023-06-12 21:53:02 64

原创 字符串,字符串函数 strlen和sizeof和string库包含的函数等(1)

a和a比相同 b和b比相同,然后c和d比 发现d比c大,而比较的是字符中的 ascii 所以返回的是第二个字符串大。所指向的字符串进行比较 值得我们注意的是 该函数是int型的 返回的值是大于0 等于0 和小于0的三个数字。需要注意的是如果目标数组 dest 不够大,而源字符串的长度又太长,可能会造成缓冲溢出的情况。字符串比较的不是比较字符串的长度,比较的是字符的大小 例如。计算的是字符串的长度,一直识别到“/0”才结束,不包含/0。这是c语言代码,模拟实现字符串的追加。所指向的字符串的结尾。

2023-06-11 21:39:09 131 1

原创 数组指针(2)

二维数组取数组名时,取出的不是第一个arr[0][0]的地址,而是二维数组第一行的地址,让他为arr【0】时也是取出的二维数组的第一行的地址。在写有关题的时候请注意,只有sizeof(数组名)和&数组名取出是整个数组的地址,其他为首元素地址。该数组指针也就是第二行【】中应该写上10,不写的话默认为0,下标为0的话数组下标不同是不行的。

2023-06-09 10:34:57 55 1

原创 字符指针 指针数组 数组指针

parr【3】中取出的arr1的是arr1的首元素地址 如果想打印 printf("%d",*(parr[1]+1))得到的值就是2。得到的答案是4 5 3 第一个printf打印出来的意思是 对指针p指向的arr首元素的地址进行解引用之后在加1。abcdef\0占用的有一个内存,然后p1p2指向的地址是同一个字符串的地址所以p1=p2。但是该字符其实给指针p的是字符串a的地址,然后根据a的地址找到后面的bcdef\0的地址。第二个的意思是对对p指向的首元素的地址加1再进行解引用。

2023-05-24 20:33:18 59

原创 c语言二维数组要点

这三行代码中只有第一行是被允许的,为什么会是这样的 呢,因为zai二维数组中计算机需要放置内容到一个二维数组中,当我们有列的标识时候,就算是没有行,该数组的元素也会按照列排满的情况下依次写入下一行,而只有行时,无法排满本列。在c语言二维数组的编写中,我们可以省略二维数组的行元素的个数,但是不能省略列元素的个数。二维数组的地址存放在内存中是连续存放的 下面这个图是定义的一个二维数组的排列形式。在函数传参中,传参的数组名是数组首元素的地址。二维数组是按照行划分元素的。二维数组是按照行划分元素的。

2023-05-23 17:34:22 158 1

原创 c语言按位与&按位或| 按位取反

这是补码 最后得出的结果就是这个 也就是数字 -8 为什么加1之后那个1变成了2呢?00000000000000000000000000000110 //对负7的补码进行按位取反。接下来不对-7的的补码进行 按位取反 而正数中对7的原码直接按位取反是因为 在正数中。1.先写出两个数字的二进制位,然后每位对比,相同为1,相异为0,都为0的话则为0。让相同的数按位与它本身减1就可以让他二进制位中的一减少一个。这是7的取反 也就是1变成0 0变成1。可以得出-7的按位取反的值为6。

2023-05-13 17:32:33 365

原创 padding内边距

值得我们注意的是 当我们在盒子中设置padding即内边距的大小时,盒子的大小也会发生相应的改变。大小变为加入内边距的大小。padding设置的是盒子内容与盒子边缘的距离,代码规范为。

2023-05-13 16:42:11 90

原创 border边框

但是我们要知道 前面的复合型写法只是为了让我们更加了解border的用法,实际的写法的中给边框这是单独的样式需要用border-top等格式更加的简谐明了。上文提到 给边框设置颜色时 设置四个会按照上右下左的顺序依次修改颜色,而当只设置两个颜色时候会按照上下,左右依次修改颜色,代码的运行结果如下。该方法利用的是 css中的层叠性就近原则,同一标签内的多个属性可以层叠,谁离的近就覆盖离得远的,如果上面两行代码互换,则边框全部为蓝色。给下边框设置一个粉色的虚线边框边框的大小为10px代码如下。

2023-05-09 20:58:27 443

原创 【无标题】css盒子布局的设置 border

border主要设置边框的样式margain设置盒子与盒子之间的距离padding设置盒子中内容与盒子边框的距离可以这样视图。

2023-05-08 20:49:02 165 1

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除