- 博客(34)
- 收藏
- 关注
原创 2023最新!QQ接入ChatGpt!!!保姆级教程
直接先上gitee!!!由于当前chatgpt热度不断,网上众多的基于chatgpt提供的api做到chat网站层出不穷,但这些网址每次都得找,有些麻烦,我就在想能不能直接QQ接入chatgpt,想法一出,开始找资料开干!
2023-04-25 20:27:33
6617
1
原创 Spring-自己简单实现@Bean注解和@Autowired
比如转移交给了IoC容器,它就是一个专门用来创建对象的工厂,你要什么对象,它就给你什么对象,有了 IoC容器,依赖关系就变了,原先的依赖关系就没了,它们都依赖IoC容器了,通过IoC容器来建立它们之间的关系。1.我们肯定是通过ApplicationContext.getBean()来获取对象实例,所以我们得仿写这样一个接口,实现这个getBean()方法。要自己手写实现@Bean注解和@Autowired注解,其实我们就是简单实现一下Spring Ioc。实现@Be注解(仿@Bean)
2023-03-03 15:16:17
360
原创 Redis实现关注取消关注,展示共同关注及Feed流
关注这个业务是用户之间的,一个用户可以关注多个用户,所以,他们的关系是多对多的,对于多对多的关系,我们需要用一张中间表来维系他们的关系,所以,它的表结构为:这样,关注和取消关注的基本流程就清晰了,但是,这样我们怎么知道哪些是共同关注的呢?思路:就是找出我关注的人,和另一个people关注的人,然后找一个交集,这样不就可以实现了吗?那么全部用数据库来实现,方便吗?纯数据库:两个select找,再判断交集,这样显然是低效和缓慢的所以,我们用redis来进行优化。
2022-12-01 09:53:41
944
原创 使用Redis实现点赞和生成根据点赞时间的点赞排行榜
对于点赞,我们将每次点赞者都存放在redis中的set集合中,这样每次有人进行点赞请求,我们事先判断它是否在redis中有,如果有就是已经点赞了的,则直接结束
2022-11-30 16:21:43
609
原创 带你了解代理模式中的静态代理和动态代理以及cgilib代理^_^
在代理模式(Proxy Pattern)中,一个类代表另一个类的功能。这种类型的设计模式属于结构型模式。在代理模式中,我们创建具有现有对象的对象,以便向外界提供功能接口。或者特定的工具自动生成源代码在对其进行编译,举个简单例子:猪八戒去找高翠兰结果是孙悟空变的,可以这样理解:把高翠兰的外貌抽象出来,高翠兰本人和孙悟空都实现了这个接口,猪八戒访问高翠兰的时候看不出来这个是孙悟空,所以说孙悟空是高翠兰代理类。
2022-11-29 20:33:29
290
原创 黑马点评项目——通过redis实现异步秒杀
未优化前,业务按照步骤依次执行,所需要的时间是所有业务时间之和,这样做的话,原本那些比如判断秒杀库存,校验一人一单的操作就会等待,直到之前的业务流程走到它时,才开始执行,这样也就会使得整个流程执行时间变长,影响体验。所以,我们优化的思路就是,
2022-11-27 16:50:59
343
原创 Java设计模式——装饰器模式
装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。一般的,我们为了扩展一个类经常使用继承方式实现,由于继承为类引入静态特征,并且随着扩展功能的增多,子类会很膨胀。这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能。具体主体:ConcreteComponent(如果具体主体太多可以再多设计一层抽象类来做缓冲),采用装饰器模式动态的添加功能。,它是作为现有的类的一个包装。抽象装饰者:Decorator。
2022-11-24 11:19:45
117
原创 秒杀项目下的各种并发情况解决
、抢购逻辑:在高并发的情况下,多个线程可能会同时拿到数据库中的值,每个线程减一,但同时写入数据库的话,抢了三件,但实际是数据库中数量减一,这时不可取的。
2022-11-23 19:44:22
288
原创 你真的了解MySQL的事务隔离机制吗?
事务(transaction),在数据库中指的是一组逻辑操作,这么操作要么全部执行,要么全部不执行。一个事务就是一个单位,不可分隔。总结来说,事务是由事务开始到结束所有的数据库操作组成。
2022-11-23 11:35:12
186
原创 Java设计模式——桥接模式
1。实现了抽象和实现部分的分离,从而极大的提供了系统的灵活性,让抽象部分和实现部分独立开,有助于系统进行分层设计,从而产生更好的结构化系统2.对于系统的高层部分,只需要知道抽象部分和实现部分的接口就可以了,其他的部分由具体业务来完成3.桥接模式替代多层继承方案,可以减少子类的个数,降低系统的管理和维护成本4.桥接模式的引入增加了系统的理解和设计难度,由于聚合关系建立在抽象层,要求开发者针对抽象进行设计和编程。
2022-11-23 10:59:00
358
原创 Redis实现全局唯一id
这样好像说的对,但是这样如果数据量一大,你用long型,最多也就2^64个不一样的数,平常可能够用,但对大项目来说,这显然有点不够了,同时,这种数又容易被猜测,知道了一个,下一个也就知道了,不安全,所以,这种方案适合小业务,同时又不是很重要的业务来使用。在数据库中,对于mybatis-plus,它自带了雪花算法生成id的工具包来为我们使用,并生成唯一id。ID是一个唯一标识,在业务开发中,我们要保证ID是唯一的,不容易猜测的。既然我们不导这样的工具包,那我们自己写一个这样的工具包,总可以吧!
2022-11-20 14:59:59
368
原创 设计模式——适配器模式
什么是适配器呢?很简单,就是当我们出去旅游时,充电器有不同的型号插座,国标,美标,欧标,当我们要在外带的是国标的充电器,但插座是欧标的,为了充电,没办法一定要用这个插座,这时该怎么办呢?土豪做法:直接买新的,哈哈哈,这种做法显然是最可行的,那不是每个人都是土豪,那么,我们就只能用个转接头,这样我们就可以使用这个插座了。这么说还是有点抽象,我们逐一举例子写代码帮助理解下面我们设计一个场景。
2022-11-19 20:37:19
129
原创 优雅使用函数式编程实现先查redis,再查数据库
优雅的实现了先查redis再查数据库,以后根据业务需求,自己传入相应的业务查询方法,和各种参数值即可!新手小白,还望指教!
2022-11-18 11:38:07
870
原创 黑马点评项目——redis短信登录功能
2.通过手机号封装Key,在redis中查找是否存在如果有就不再执行发送操作,避免多次发送。第一个拦截器用来刷新token,第二个拦截器对登录状态进行判断,拦截。有就直接登录,没有就给他创建一个保存到数据库,再返回登录状态。刷新,判断请求头是否有token,没有就让登录拦截器拦截就行。判断redis中是否有用户信息,没有就让登录拦截器拦截就行。4.在redis中保存脱敏用户数据,用来校验登录。4.将验证码设置过期时间保存到redis。3.根据手机号查询用户,判断是否有用户。1.获取手机号,判断其合法性。
2022-11-16 22:03:58
380
原创 自定义注解及反射
注解是一种能被添加到java源代码中的元数据,方法、类、参数和包都可以用注解来修饰。注解可以看作是一种特殊的标记,可以用在方法、类、参数和包上,source:注解只保留在源文件,当Java文件编译成class文件的时候,注解被遗弃;class:注解被保留到class文件,但jvm加载class文件时候被遗弃,这是默认的生命周期。表明使用了@Inherited注解的注解,所标记的类的子类也会拥有这个注解。ElementType.TYPE:允许被修饰的注解作用在类、接口和枚举上。
2022-11-16 16:57:10
290
原创 springboot整合redis
spring-data-redis它是可以对redistemple进行自定义的,这样我们就可以对Redistemple进行自定义的序列化规则@Bean{// 使用StringRedisSerializer来序列化和反序列化redis的key值// 值用Json来进行序列化value值// Hash的key也采用StringRedisSerializer的序列化方式}我们可以将对象Json序列化,进行存储,但是,这样有什么缺点呢?
2022-11-16 11:10:20
1093
原创 spring二刷----@Bean注解
在spring中,@Bean主要在@Configuration标记的配置类中去注入一些我们所需要的对象,将这些对象交给spring来管理。其实就是代表@Bean所标注的对象的实例化依赖于参数中的类,需要先。从容器中的bean默认是单例模式//singleton单例饿汉式。同时@Bean修饰的方法,如果有参数,这种情况是怎么样的呢?也就是说,容器中必须得有参数中的类。和xml配置中的bean标签的作用是一样的。这样每次从容器中拿到的对象就是不同的。才能实例化@Bean所标注的对象。这是需要加上一个注解。
2022-11-15 23:45:23
179
原创 设计模式——建造者模式
缺点:设计的程序结构过于简单,没有设计缓存层对象,程序的扩展和维护不好,也就是说,这种设计方案,把产品(即:房子)和创建产品的过程(房子创建流程)封装在了一起,耦合性更强。:构建一个使用Builder的对象,它主要是用于创建一个复杂的对象,它主要有两个作用,一是:隔离了客户与对象的生产过程,二是:负责控制产品对象的生产过程。它可以将复杂对象的建造过程抽象出来(抽象类别),使这个抽象过程的不同实现方法可以构造出不同表现(属性)的对象。:创建一个Product对象的各个部件指定的接口/抽象类。
2022-11-14 22:18:02
265
原创 浅谈序列化和反序列化
序列化可以序列化为字节流的形式,另外引用一些库,如阿里巴巴fastjson,就可以实现JSON类型的序列化和反序列化。序列化就是,当一个类,你使用它时,就new出来,并且给它的相应属性赋值,用完了,java内存回收掉,当你想对之前创建的对象进行持久化存储,这时就需要对这个类进行。在学习原型模式中深拷贝时,采用序列化的方式实现深拷贝,这时,就不懂什么是序列化了,特此学习了一下什么是序列化,什么是反序列化。序列化前的对象和反序列化后得到的对象,内容是一样的(且对象中包含的引用也相同),
2022-11-14 13:10:36
195
原创 java设计模式——原型模式
Object类是所有类的根类,它提供了一个clone方法,重写它实现自己的功能即可。就是对象通过请求原型对象拷贝,来实现克隆,即克隆对象=对象.clone()一个对象创建另一个可定制对象,无需知道其创建细节。之后要克隆的话只要调用其clone方法即可。让原型类继承该接口,并重写克隆方法。
2022-11-13 13:09:31
66
原创 设计模式——工厂模式
终极目的是为了解耦,实现创建者和调用者的分离。这种类型的属于设计模式中创建型模式,它提供了一种创建对象的最佳方式。工厂模式的定义:定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。这满足创建型模式中所要求的“创建与使用相分离”的特点。将创建对象的任务交给工厂类让工厂决定创建何种对象调用即可。举个例子:点pizza。
2022-11-12 20:24:10
81
原创 springsecurity+jwt+redis+vue的后台系统权限方案
springsecurity+jwt+redis+vue的后台系统权限方案
2022-11-03 15:17:01
306
原创 springboot实现文件上传到liunx服务器
springboot实现文件上传到liunx服务器上保存1.首先配置服务器环境,这时候我们要在服务器上安装tomcat服务器通过tomcat来进行2.安装好tomcat服务后,对tomcat进行配置:1)找到tomcat文件所在位置打开conf文件夹下的server.xml 加上一个context标签,表示/img路径可以访问到/home/img下的文件正在上传…重新上传取消2)修改conf文件夹下的web.xml文件,如果没有设置readonly为false会报错409正在上传…重
2022-05-29 00:02:51
1639
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人