<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[mafangcheng的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/mafangcheng</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; mafangcheng]]></copyright><item><title><![CDATA[hashmap]]></title><link>https://blog.youkuaiyun.com/mafangcheng/article/details/133622675</link><guid>https://blog.youkuaiyun.com/mafangcheng/article/details/133622675</guid><author>mafangcheng</author><pubDate>Fri, 06 Oct 2023 21:46:43 +0800</pubDate><description><![CDATA[ConcurrentHashMap采用锁分段技术，将整个Hash桶进行了分段segment，也就是将这个大的数组分成了几个小的片段segment，而且每个小的片段segment上面都有锁存在，那么在插入元素的时候就需要先找到应该插入到哪一个片段segment，然后再在这个片段上面进行插入，而且这里还需要获取segment锁。HashMap是线程不安全的，当出现多线程操作时，会出现安全隐患；而ConcurrentHashMap是线程安全的。]]></description><category></category></item><item><title><![CDATA[mysql部分知识]]></title><link>https://blog.youkuaiyun.com/mafangcheng/article/details/133588892</link><guid>https://blog.youkuaiyun.com/mafangcheng/article/details/133588892</guid><author>mafangcheng</author><pubDate>Thu, 05 Oct 2023 21:47:24 +0800</pubDate><description><![CDATA[id值不同，id越大则优先级越高，越先查询。如果是主键自增的表，且中间没有断层，使用范围查询，where id >2000000 limit 10.走索引。字段为varchar类型，如果不加单引号，mysql会进行隐式转换，相当于对索引列进行了运算操作，索引会失效。先查id，在主键索引id上完成排序的操作，再根据id回表查其他的数据。索引列完全包含查询列，不需要回表查。key:实际使用的索引，为null则没有使用索引。rows：扫描的行数。]]></description><category></category></item><item><title><![CDATA[redis知识点总结]]></title><link>https://blog.youkuaiyun.com/mafangcheng/article/details/133556919</link><guid>https://blog.youkuaiyun.com/mafangcheng/article/details/133556919</guid><author>mafangcheng</author><pubDate>Wed, 04 Oct 2023 17:25:06 +0800</pubDate><description><![CDATA[底层实现：内部使用HashMap和跳跃表(SkipList)来保证数据的存储和有序，HashMap里放的是成员到score（优先级）的映射，而跳跃表里存放的是所有的成员，排序依据是HashMap里存的score,使用跳跃表的结构可以获得比较高的查找效率，并且在实现上比较简单。那太恐怖了，而且我们线上基本上也都是会设置一定的过期时间的。解决方案：采用布隆过滤器，将所有可能存在的数据哈希到一个足够大的bitmap中，一个一定不存在的数据就会被bitmap拦截掉，从而减小了对底层存储系统的查询压力。]]></description><category></category></item><item><title><![CDATA[分布式事务]]></title><link>https://blog.youkuaiyun.com/mafangcheng/article/details/133360087</link><guid>https://blog.youkuaiyun.com/mafangcheng/article/details/133360087</guid><author>mafangcheng</author><pubDate>Wed, 27 Sep 2023 17:58:32 +0800</pubDate><description><![CDATA[一般情况下，我们都是优先保证的AP，在保证系统可用的前提下，可能会出现临时的数据不一致的现象。因为是微服务项目，文章模块和自媒体模块分别对应着不同的数据库，这样就会产生不同的数据库连接。如果自媒体微服务通过feign调用文章微服务的保存方法后，若出现了异常，自媒体微服务会进行事务的回滚。而文章微服务因为是不同的数据库连接，所以不会发生事务的回滚，这样就会造成数据不一致的问题。主要使用的是阿里巴巴的开源框架seata，采取的AT模式。项目中分布式事务的问题：*****解决分布式事务的方法：*****]]></description><category></category></item><item><title><![CDATA[黑马头条前四天]]></title><link>https://blog.youkuaiyun.com/mafangcheng/article/details/133251034</link><guid>https://blog.youkuaiyun.com/mafangcheng/article/details/133251034</guid><author>mafangcheng</author><pubDate>Sun, 24 Sep 2023 20:33:03 +0800</pubDate><description><![CDATA[由于密码是由用户设定的，在实际应用中，用户设置的密码复杂度可能不够高，同时不同的用户极有可能会使用相同的密码，那么这些用户对应的密文也会相同，这样，当存储用户密码的数据库泄露后，攻击者会很容易便能找到相同密码的用户，从而也降低了破解密码的难度，因此，在对用户密码进行加密时，需要考虑对密码进行掩饰，即使是相同的密码，也应该要保存为不同的密文，即使用户输入的是弱密码，也需要考虑进行增强，从而增加密码被攻破的难度，而使用带盐的加密hash值便能满足该需求。# 记录真实发出请求的客户端IP。]]></description><category></category></item><item><title><![CDATA[Spring Boot集成Minio]]></title><link>https://blog.youkuaiyun.com/mafangcheng/article/details/133150004</link><guid>https://blog.youkuaiyun.com/mafangcheng/article/details/133150004</guid><author>mafangcheng</author><pubDate>Thu, 21 Sep 2023 21:48:30 +0800</pubDate><description><![CDATA[最后在根据我们配置的OSS类型，创建不同的自动配置类，这里创建的MinioConfiguration，主要是根据配置注入MinioClient及MinioTemplate模板类，将其交给Spring容器管理。在spring中，提供了很多集成第三方的操作模板类，比如RedisTemplate、RestTemplate等等，我们可以参照这些，提供一个minio SDK的集成模板类，这样在使用API时就比较方便了。创建OSS配置类，可以选择不同类型的OSS集成，以及集成需要的访问地址、用户密码等信息配置。]]></description><category></category></item><item><title><![CDATA[DI的三种方式]]></title><link>https://blog.youkuaiyun.com/mafangcheng/article/details/133091905</link><guid>https://blog.youkuaiyun.com/mafangcheng/article/details/133091905</guid><author>mafangcheng</author><pubDate>Wed, 20 Sep 2023 18:00:30 +0800</pubDate><description><![CDATA[在上面的三种常规注入方式中，假如我们想要注入一个接口，而当前接口又有多个实现类，那么这时候就会报错，因为 Spring 无法知道到底应该注入哪一个实现类。@Autowired  //通过setter方法实现bean注入（非字符串类型）private Wolf1Bean wolf1Bean;//若参数为字符串类型,则需要加@Value进行值注入。@Autowired //通过构造器注入。]]></description><category></category></item><item><title><![CDATA[ES桶聚合]]></title><link>https://blog.youkuaiyun.com/mafangcheng/article/details/132998361</link><guid>https://blog.youkuaiyun.com/mafangcheng/article/details/132998361</guid><author>mafangcheng</author><pubDate>Mon, 18 Sep 2023 21:44:00 +0800</pubDate><description><![CDATA["size": 0,  // 设置size为0，结果中不包含文档，只包含聚合结果。"terms": { // 聚合的类型，按照品牌值聚合，所以选择term。"_count": "asc" // 按照_count升序排列。"field": "brand", // 参与聚合的字段。"lte": 200 // 只对200元以下的文档聚合。"size": 20 // 希望获取的聚合结果数量。"brandAgg": { //给聚合起个名字。// 4.1.根据聚合名称获取聚合结果。"aggs": { // 定义聚合。]]></description><category></category></item><item><title><![CDATA[ElasticSearch基本操作]]></title><link>https://blog.youkuaiyun.com/mafangcheng/article/details/132956532</link><guid>https://blog.youkuaiyun.com/mafangcheng/article/details/132956532</guid><author>mafangcheng</author><pubDate>Sun, 17 Sep 2023 22:30:47 +0800</pubDate><description><![CDATA[query(QueryBuilders.multiMatchQuery("外滩如家","name","brand","business"));boolQueryBuilder.must(QueryBuilders.matchQuery("all","如家"))   //单字段查询。request.source().query(QueryBuilders.termQuery("brand","如家"));.query(QueryBuilders.matchQuery("all","上海"));]]></description><category></category></item><item><title><![CDATA[ElasticSearch]]></title><link>https://blog.youkuaiyun.com/mafangcheng/article/details/132911281</link><guid>https://blog.youkuaiyun.com/mafangcheng/article/details/132911281</guid><author>mafangcheng</author><pubDate>Fri, 15 Sep 2023 20:56:23 +0800</pubDate><description><![CDATA[将全部文档的内容根据策略进行分词操作，根据拆分粒度有粗粒度和细粒度，之后会形成一个词条列表。因为词条是唯一的，给词条创建一个索引可以提高查询的效率。把查询条件进行分词操作，通过匹配词条列表中的词条，会得到对应的文档id，然后就可以获取该文档详细的信息。先根据文件的内容查找，得到包含这些文件内容的文件列表。数值：long、integer、short、byte、double、float。keyword（精确值，不分词）：例如：品牌、国家、作者、ip地址。先通过文件名找到具体的文件，再获取文件中的内容过程。]]></description><category></category></item><item><title><![CDATA[死信交换机]]></title><link>https://blog.youkuaiyun.com/mafangcheng/article/details/132886849</link><guid>https://blog.youkuaiyun.com/mafangcheng/article/details/132886849</guid><author>mafangcheng</author><pubDate>Thu, 14 Sep 2023 17:31:29 +0800</pubDate><description><![CDATA[return QueueBuilder.durable("ttl.queue") // 指定队列名称，并持久化。.deadLetterExchange("dl.ttl.direct") // 指定死信交换机。log.info("接收到 dl.ttl.queue的延迟消息：{}", msg);.ttl(10000) // 设置队列的超时时间，10秒。log.debug("发送消息成功");log.debug("发送消息成功");//不指定消息过期时间TTL。//指定消息过期时间。]]></description><category></category></item><item><title><![CDATA[8、私服使用]]></title><link>https://blog.youkuaiyun.com/mafangcheng/article/details/132841395</link><guid>https://blog.youkuaiyun.com/mafangcheng/article/details/132841395</guid><author>mafangcheng</author><pubDate>Tue, 12 Sep 2023 21:44:16 +0800</pubDate><description><![CDATA[搭建参考教程services:registry:volumes:ui:ports:- 8080:80- registry访问配置私服重新加载配置文件重启Docker重新启动私服服务推送打tag拉取。]]></description><category></category></item><item><title><![CDATA[镜像常用命令]]></title><link>https://blog.youkuaiyun.com/mafangcheng/article/details/132817353</link><guid>https://blog.youkuaiyun.com/mafangcheng/article/details/132817353</guid><author>mafangcheng</author><pubDate>Mon, 11 Sep 2023 20:53:15 +0800</pubDate><description><![CDATA[docker save -o [保存的目标文件名称] [镜像名称:版本号 | 镜像ID]导入后如果查看不到镜像名称，可以使用 docker tag 为镜像指定名称。拉取redis镜像，并导出到本地，再删除redis镜像，再导入。docker tag 镜像ID 镜像名称:tag。docker rmi 镜像ID或者镜像名称。docker pull 镜像名称:版本号。docker search 镜像名称。保存的镜像名称，后缀名为 tar。前提：该镜像没有对应的容器。2.1、查看本地镜像。]]></description><category></category></item><item><title><![CDATA[springcloud-Getway网关]]></title><link>https://blog.youkuaiyun.com/mafangcheng/article/details/132793079</link><guid>https://blog.youkuaiyun.com/mafangcheng/article/details/132793079</guid><author>mafangcheng</author><pubDate>Sun, 10 Sep 2023 17:00:34 +0800</pubDate><description><![CDATA[GlobalFilter通过实现Ordered接口，或者添加@Order注解来指定order值，由我们自己指定。路由过滤器和默认过滤器的order由Spring指定，默认是按照声明顺序从1递增。需求：给通过网关进入 userservice 的请求增加请求头。默认过滤器 > 路由过滤器 > GlobalFilter。1、先根据order值判断，值越小优先级越高。springcloud解决跨域问题。springmvc 解决跨域问题。2、order值一样。]]></description><category></category></item><item><title><![CDATA[远程调用的两种方式]]></title><link>https://blog.youkuaiyun.com/mafangcheng/article/details/132767078</link><guid>https://blog.youkuaiyun.com/mafangcheng/article/details/132767078</guid><author>mafangcheng</author><pubDate>Fri, 08 Sep 2023 20:27:17 +0800</pubDate><description><![CDATA[二、RestTemplate。一、OpenFeign。]]></description><category></category></item><item><title><![CDATA[IO流(Stream流)]]></title><link>https://blog.youkuaiyun.com/mafangcheng/article/details/132724211</link><guid>https://blog.youkuaiyun.com/mafangcheng/article/details/132724211</guid><author>mafangcheng</author><pubDate>Wed, 06 Sep 2023 21:46:04 +0800</pubDate><description><![CDATA[/判断max是否为空，不为空则打印student。Stream<String> stream2 = Stream.of("四", "五", "六");Stream<String> stream1 = Stream.of("一", "二", "三");//把student对象包裹起来，防止对象为空，报空指针异常。一，获取Stream流。三，对字符串数组排序。]]></description><category></category></item><item><title><![CDATA[Map集合]]></title><link>https://blog.youkuaiyun.com/mafangcheng/article/details/132701106</link><guid>https://blog.youkuaiyun.com/mafangcheng/article/details/132701106</guid><author>mafangcheng</author><pubDate>Tue, 05 Sep 2023 21:44:54 +0800</pubDate><description><![CDATA[/空指针异常，返回值null不能赋值给int，Integer可以。//所有key保存到strings集合中。//get()方法返回value。（1）实现了Map接口，查询快，底层哈希表。（2）无序，存取顺序可能不一致。(1)有序，存取顺序一致。]]></description><category></category></item><item><title><![CDATA[【linux常用命令】]]></title><link>https://blog.youkuaiyun.com/mafangcheng/article/details/132670253</link><guid>https://blog.youkuaiyun.com/mafangcheng/article/details/132670253</guid><author>mafangcheng</author><pubDate>Mon, 04 Sep 2023 15:26:44 +0800</pubDate><description><![CDATA[删除itcast目录中名为test的子目录，若test目录删除后itcast目录变为空目录，则也被删除。将hello.tar.gz文件进行解压，并将解压后的文件放在/usr/local目录。-r: 如果复制的是目录需要使用此选项，此时将复制该目录下所有的子目录和文件。将当前目录下所有文件打包并压缩，打包后的文件名为hello.tar.gz。将itcast目录和目录下所有文件复制到itheima目录下。将itcast目录下所有文件复制到itheima目录下。将文件hi.txt移动到itheima目录中。]]></description><category></category></item><item><title><![CDATA[利用Redis解决购物车存储问题]]></title><link>https://blog.youkuaiyun.com/mafangcheng/article/details/132643105</link><guid>https://blog.youkuaiyun.com/mafangcheng/article/details/132643105</guid><author>mafangcheng</author><pubDate>Sat, 02 Sep 2023 21:45:45 +0800</pubDate><description><![CDATA[购物车的存储问题对电商企业来说是一个需要考虑的难题，传统的数据库存储方式难以满足高并发场景的需求。在实现购物车存储时，与用户的关联是关键，我们可以利用Redis的有序集合进行存储。在购物车商品的删除操作上，可以利用Redis的pipeline技术进行批量删除，提升操作效率。在购物车中，用户可以将不同的商品加入购物车，为了保证商品之间的顺序，可以利用有序集合的score特性。每个商品对应的score，可以设置为商品加入购物车的时间戳，这样就可以保证在购物车中，按照添加顺序进行展示。2.购物车商品数量的存储。]]></description><category></category></item><item><title><![CDATA[日志记录log]]></title><link>https://blog.youkuaiyun.com/mafangcheng/article/details/132591283</link><guid>https://blog.youkuaiyun.com/mafangcheng/article/details/132591283</guid><author>mafangcheng</author><pubDate>Wed, 30 Aug 2023 21:44:23 +0800</pubDate><description><![CDATA[/被切中的方法执行。//自定义注解标注   切点。//设置方法执行时间。//切面=切点+通知。]]></description><category></category></item></channel></rss>