自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 hashmap

ConcurrentHashMap采用锁分段技术,将整个Hash桶进行了分段segment,也就是将这个大的数组分成了几个小的片段segment,而且每个小的片段segment上面都有锁存在,那么在插入元素的时候就需要先找到应该插入到哪一个片段segment,然后再在这个片段上面进行插入,而且这里还需要获取segment锁。HashMap是线程不安全的,当出现多线程操作时,会出现安全隐患;而ConcurrentHashMap是线程安全的。

2023-10-06 21:46:43 70

原创 mysql部分知识

id值不同,id越大则优先级越高,越先查询。如果是主键自增的表,且中间没有断层,使用范围查询,where id >2000000 limit 10.走索引。字段为varchar类型,如果不加单引号,mysql会进行隐式转换,相当于对索引列进行了运算操作,索引会失效。先查id,在主键索引id上完成排序的操作,再根据id回表查其他的数据。索引列完全包含查询列,不需要回表查。key:实际使用的索引,为null则没有使用索引。rows:扫描的行数。

2023-10-05 21:47:24 66

原创 redis知识点总结

底层实现:内部使用HashMap和跳跃表(SkipList)来保证数据的存储和有序,HashMap里放的是成员到score(优先级)的映射,而跳跃表里存放的是所有的成员,排序依据是HashMap里存的score,使用跳跃表的结构可以获得比较高的查找效率,并且在实现上比较简单。那太恐怖了,而且我们线上基本上也都是会设置一定的过期时间的。解决方案:采用布隆过滤器,将所有可能存在的数据哈希到一个足够大的bitmap中,一个一定不存在的数据就会被bitmap拦截掉,从而减小了对底层存储系统的查询压力。

2023-10-04 17:25:06 65

原创 分布式事务

一般情况下,我们都是优先保证的AP,在保证系统可用的前提下,可能会出现临时的数据不一致的现象。因为是微服务项目,文章模块和自媒体模块分别对应着不同的数据库,这样就会产生不同的数据库连接。如果自媒体微服务通过feign调用文章微服务的保存方法后,若出现了异常,自媒体微服务会进行事务的回滚。而文章微服务因为是不同的数据库连接,所以不会发生事务的回滚,这样就会造成数据不一致的问题。主要使用的是阿里巴巴的开源框架seata,采取的AT模式。项目中分布式事务的问题:*****解决分布式事务的方法:*****

2023-09-27 17:58:32 55

原创 黑马头条前四天

由于密码是由用户设定的,在实际应用中,用户设置的密码复杂度可能不够高,同时不同的用户极有可能会使用相同的密码,那么这些用户对应的密文也会相同,这样,当存储用户密码的数据库泄露后,攻击者会很容易便能找到相同密码的用户,从而也降低了破解密码的难度,因此,在对用户密码进行加密时,需要考虑对密码进行掩饰,即使是相同的密码,也应该要保存为不同的密文,即使用户输入的是弱密码,也需要考虑进行增强,从而增加密码被攻破的难度,而使用带盐的加密hash值便能满足该需求。# 记录真实发出请求的客户端IP。

2023-09-24 20:33:03 33

原创 Spring Boot集成Minio

最后在根据我们配置的OSS类型,创建不同的自动配置类,这里创建的MinioConfiguration,主要是根据配置注入MinioClient及MinioTemplate模板类,将其交给Spring容器管理。在spring中,提供了很多集成第三方的操作模板类,比如RedisTemplate、RestTemplate等等,我们可以参照这些,提供一个minio SDK的集成模板类,这样在使用API时就比较方便了。创建OSS配置类,可以选择不同类型的OSS集成,以及集成需要的访问地址、用户密码等信息配置。

2023-09-21 21:48:30 676

原创 DI的三种方式

在上面的三种常规注入方式中,假如我们想要注入一个接口,而当前接口又有多个实现类,那么这时候就会报错,因为 Spring 无法知道到底应该注入哪一个实现类。@Autowired //通过setter方法实现bean注入(非字符串类型)private Wolf1Bean wolf1Bean;//若参数为字符串类型,则需要加@Value进行值注入。@Autowired //通过构造器注入。

2023-09-20 18:00:30 41

原创 ES桶聚合

"size": 0, // 设置size为0,结果中不包含文档,只包含聚合结果。"terms": { // 聚合的类型,按照品牌值聚合,所以选择term。"_count": "asc" // 按照_count升序排列。"field": "brand", // 参与聚合的字段。"lte": 200 // 只对200元以下的文档聚合。"size": 20 // 希望获取的聚合结果数量。"brandAgg": { //给聚合起个名字。// 4.1.根据聚合名称获取聚合结果。"aggs": { // 定义聚合。

2023-09-18 21:44:00 48

原创 ElasticSearch基本操作

query(QueryBuilders.multiMatchQuery("外滩如家","name","brand","business"));boolQueryBuilder.must(QueryBuilders.matchQuery("all","如家")) //单字段查询。request.source().query(QueryBuilders.termQuery("brand","如家"));.query(QueryBuilders.matchQuery("all","上海"));

2023-09-17 22:30:47 31

原创 ElasticSearch

将全部文档的内容根据策略进行分词操作,根据拆分粒度有粗粒度和细粒度,之后会形成一个词条列表。因为词条是唯一的,给词条创建一个索引可以提高查询的效率。把查询条件进行分词操作,通过匹配词条列表中的词条,会得到对应的文档id,然后就可以获取该文档详细的信息。先根据文件的内容查找,得到包含这些文件内容的文件列表。数值:long、integer、short、byte、double、float。keyword(精确值,不分词):例如:品牌、国家、作者、ip地址。先通过文件名找到具体的文件,再获取文件中的内容过程。

2023-09-15 20:56:23 20

原创 死信交换机

return QueueBuilder.durable("ttl.queue") // 指定队列名称,并持久化。.deadLetterExchange("dl.ttl.direct") // 指定死信交换机。log.info("接收到 dl.ttl.queue的延迟消息:{}", msg);.ttl(10000) // 设置队列的超时时间,10秒。log.debug("发送消息成功");log.debug("发送消息成功");//不指定消息过期时间TTL。//指定消息过期时间。

2023-09-14 17:31:29 42

原创 8、私服使用

搭建参考教程services:registry:volumes:ui:ports:- 8080:80- registry访问配置私服重新加载配置文件重启Docker重新启动私服服务推送打tag拉取。

2023-09-12 21:44:16 28

原创 镜像常用命令

docker save -o [保存的目标文件名称] [镜像名称:版本号 | 镜像ID]导入后如果查看不到镜像名称,可以使用 docker tag 为镜像指定名称。拉取redis镜像,并导出到本地,再删除redis镜像,再导入。docker tag 镜像ID 镜像名称:tag。docker rmi 镜像ID或者镜像名称。docker pull 镜像名称:版本号。docker search 镜像名称。保存的镜像名称,后缀名为 tar。前提:该镜像没有对应的容器。2.1、查看本地镜像。

2023-09-11 20:53:15 240

原创 springcloud-Getway网关

GlobalFilter通过实现Ordered接口,或者添加@Order注解来指定order值,由我们自己指定。路由过滤器和默认过滤器的order由Spring指定,默认是按照声明顺序从1递增。需求:给通过网关进入 userservice 的请求增加请求头。默认过滤器 > 路由过滤器 > GlobalFilter。1、先根据order值判断,值越小优先级越高。springcloud解决跨域问题。springmvc 解决跨域问题。2、order值一样。

2023-09-10 17:00:34 81

原创 远程调用的两种方式

二、RestTemplate。一、OpenFeign。

2023-09-08 20:27:17 38

原创 IO流(Stream流)

/判断max是否为空,不为空则打印student。Stream<String> stream2 = Stream.of("四", "五", "六");Stream<String> stream1 = Stream.of("一", "二", "三");//把student对象包裹起来,防止对象为空,报空指针异常。一,获取Stream流。三,对字符串数组排序。

2023-09-06 21:46:04 31

原创 Map集合

/空指针异常,返回值null不能赋值给int,Integer可以。//所有key保存到strings集合中。//get()方法返回value。(1)实现了Map接口,查询快,底层哈希表。(2)无序,存取顺序可能不一致。(1)有序,存取顺序一致。

2023-09-05 21:44:54 29

原创 【linux常用命令】

删除itcast目录中名为test的子目录,若test目录删除后itcast目录变为空目录,则也被删除。将hello.tar.gz文件进行解压,并将解压后的文件放在/usr/local目录。-r: 如果复制的是目录需要使用此选项,此时将复制该目录下所有的子目录和文件。将当前目录下所有文件打包并压缩,打包后的文件名为hello.tar.gz。将itcast目录和目录下所有文件复制到itheima目录下。将itcast目录下所有文件复制到itheima目录下。将文件hi.txt移动到itheima目录中。

2023-09-04 15:26:44 23

原创 利用Redis解决购物车存储问题

购物车的存储问题对电商企业来说是一个需要考虑的难题,传统的数据库存储方式难以满足高并发场景的需求。在实现购物车存储时,与用户的关联是关键,我们可以利用Redis的有序集合进行存储。在购物车商品的删除操作上,可以利用Redis的pipeline技术进行批量删除,提升操作效率。在购物车中,用户可以将不同的商品加入购物车,为了保证商品之间的顺序,可以利用有序集合的score特性。每个商品对应的score,可以设置为商品加入购物车的时间戳,这样就可以保证在购物车中,按照添加顺序进行展示。2.购物车商品数量的存储。

2023-09-02 21:45:45 501

原创 日志记录log

/被切中的方法执行。//自定义注解标注 切点。//设置方法执行时间。//切面=切点+通知。

2023-08-30 21:44:23 26

原创 DI的三种注入方式

在上面的三种常规注入方式中,假如我们想要注入一个接口,而当前接口又有多个实现类,那么这时候就会报错,因为 Spring 无法知道到底应该注入哪一个实现类。@Autowired //通过setter方法实现bean注入(非字符串类型)private Wolf1Bean wolf1Bean;//若参数为字符串类型,则需要加@Value进行值注入。@Autowired //通过构造器注入。

2023-08-29 21:45:12 136

原创 spring事务管理

2. @Transactional(rollbackFor = Exception.class) //开启该方法事务,带参则编译期异常会回滚,不带参只回滚运行时异常。3. 创建DataSourceTransactionManager bean交给ioc管理。1. @EnableTransactionManagement //类上开启事务管理。

2023-08-28 22:56:04 22

原创 mybatis-SQL语句

Result(column = "entrydate", property = "ed"),//@Result一条映射规则 (column = "数据表中字段名", property = "实体类属性名")where:只会在<where>标签内部有内容的情况下才插入where子句,而且会自动去除子句的开头的AND或OR。* 引用SQL片段: <include refid="selectUser"></include>* 定义SQL片段: <sql id="selectUser"></sql>

2023-08-27 21:59:56 109

原创 Stream流

一,获取Stream流。三,对字符串数组排序。

2023-08-26 00:01:47 14

原创 Jwt登录校验

三、JwtUtils 工具类(把map集合转成token)二、生成/解析token。

2023-08-25 00:00:31 19

原创 redis常用命令

向redis写入数据时,会先判断默认的序列化器是否为空,如果为空就创建一个jdk的序列化器。之后会判断是否开启了默认的序列化器,因为默认的设置为true,所以会进一步判断key和value的序列化器是否为空,因为默认也为true,所以就把默认的序列化器复制给了key和value的序列化器,同时开启使用。在自定义的时候先把键的序列化器设置为字符串的序列化器,因为key本来就是个字符串,在被字符串的序列化器序列化之后还是个字符串,没有改变。当从redis中取数据时,会对key和value进行反序列化。

2023-08-23 19:41:27 14

原创 java反射

一,加载类字节码文件到内存的方法。

2023-08-21 21:43:54 15

原创 java设计模式

多个处理器处理同一个请求,一个请求由A处理器处理后交给B处理器处理,之后再交给C处理器处理。以此类推,每个处理器有各自的职责。一般的应用场景有风控的处理,对用户进行一层一层的判断,前一个条件判断通过后在判断下一个条件,每一个条件都是一个类。双重校验锁中的第一次判空操作可能会出现指令重排的情况,导致多个线程同时进入第一个if语句块中,从而创建多个实例。饿汉式单例装载类的时候会创建实例,不管你用不用,调用的时候不需要再判断,浪费空间。用于创建复杂的对象,创建的对象有一系列的初始化操作。三,工厂模式(下载器)

2023-08-20 18:49:58 14

原创 debug技巧

Show Execution Point:光标定位到当前代码执行的一行。Step Into:进入自定义的方法,不仅如此官方类库的方法。Step Over :一行一行执行,遇到方法不进入。Step Out:从步入的方法内退出到方法调用处。Force Step Into:强制进入方法。

2023-08-18 21:27:30 20

原创 ThreadLocal简单学习

不恰当地使用可能会导致内存泄漏的问题,主要是因为ThreadLocalMap里面的key是一个弱引用,当发生了GC之后,若该key指向一个弱引用方向,会被GC回收,就会导致key变成null,使得这块内存空间永远无法被访问,发生内存泄漏。解决方法:在每次使用完ThreadLocal之后调用Remove方法,移除对应的数据。2. 在拦截器中往ThreadLocal添加数据。3. 在拦截器中释放ThreadLocal资源。三、使用示例(全局保存登录的用户id)一、ThreadLocal。

2023-08-18 20:56:07 17

原创 Aop切面基础知识

Pointcut(execution(切点方法的返回值类型 权限定名)) //标注切点。@ComponentScan("com.itheima") //扫包。@AfterReturning("pt1()") //方法返回后运行。//标注切点 切点表达式execution(返回值类型 权限定名)@Around("pt1()") //环绕通知,整合四大通知。@Aspect //切面注解 表名这是一个切面类。//切被自定义注解标注的方法。//切指定路径下的全部方法。//选择需要增强的方法。

2023-08-17 16:12:27 33

原创 Oss文件上传

思路:前端访问上传接口,传本地图片,后端根据图片调用工具类把图片上传到阿里云,返回一个服务器上图片的下载链接给前端。2.controller层。

2023-08-15 20:47:42 145

原创 Git学习笔记

一、概念及原理修改代码先add到暂存区,然后commit到本地仓库,本地仓库再push到远程仓库。若本地仓库没有,会从远程仓库clone,若有则检出到工作目录。二、本地仓库操作。

2023-08-14 21:02:08 36

空空如也

空空如也

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

TA关注的人

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