<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[qq_45473439的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/qq_45473439</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; qq_45473439]]></copyright><item><title><![CDATA[广告归因入门指南：告别盲目投放，让每一分钱都花在刀刃上]]></title><link>https://blog.youkuaiyun.com/qq_45473439/article/details/157905692</link><guid>https://blog.youkuaiyun.com/qq_45473439/article/details/157905692</guid><author>qq_45473439</author><pubDate>Mon, 09 Feb 2026 15:11:33 +0800</pubDate><description><![CDATA[在数字广告的世界里，归因（Attribution）就是回答「这个转化是从哪里来的」这个问题。当你看到一个用户在你的 App 里注册了、付费了、或者完成了任何你期望的行为，你想知道：他是被哪个广告吸引来的？是在哪个平台看到的？点击的是哪条创意？有了这些信息，你就能做出精准的决策：哪个平台效果好，就多投哪个平台；哪类创意转化率高，就多做这类创意。没有归因，广告投放就像在黑暗中扔骰子，全凭运气。但归因不仅仅是「知道钱花哪儿了」那么简单。]]></description><category></category></item><item><title><![CDATA[基于k8s实现算法训练系统（架构思路+落地方案）]]></title><link>https://blog.youkuaiyun.com/qq_45473439/article/details/127326736</link><guid>https://blog.youkuaiyun.com/qq_45473439/article/details/127326736</guid><author>qq_45473439</author><pubDate>Fri, 14 Oct 2022 19:53:55 +0800</pubDate><description><![CDATA[算法训练是本系统的核心功能之一，为用户提供深度学习算法训练平台，内置多种常用数据集，同时支持代码编程及图形化编程，其中代码支持python、scala、r 三种语言，图像化编程通过拖拽组件并选择参数完成建模无需编写代码即可开始算法训练，这种编程方式极大降低了开发者的门槛，提升了开发效率。]]></description><category></category></item><item><title><![CDATA[Redis 实现延迟队列]]></title><link>https://blog.youkuaiyun.com/qq_45473439/article/details/126340345</link><guid>https://blog.youkuaiyun.com/qq_45473439/article/details/126340345</guid><author>qq_45473439</author><pubDate>Tue, 16 Aug 2022 15:48:27 +0800</pubDate><description><![CDATA[关于消息队列，我们习惯于使用Rabbitmq 和 Kafka 作为消息队列中间件。但对于消费队列只有一组消费者时，也不需要非常高的可靠性，使用中间件显得十分繁琐，此时我们可以利用redis的特性来实现简单的消息队列。...]]></description><category></category></item><item><title><![CDATA[redis设计与实现 笔记（一）]]></title><link>https://blog.youkuaiyun.com/qq_45473439/article/details/126227116</link><guid>https://blog.youkuaiyun.com/qq_45473439/article/details/126227116</guid><author>qq_45473439</author><pubDate>Mon, 08 Aug 2022 14:32:13 +0800</pubDate><description><![CDATA[Redis简单动态字符串Redis 没有直接使用 C 语言传统的字符串表示（以空字符结尾的字符数组，以下简称 C 字符串）， 而是自己构建了一种名为简单动态字符串（simple dynamic string，SDS）的抽象类型， 并将 SDS 用作 Redis 的默认字符串表示。...]]></description><category></category></item><item><title><![CDATA[minio 单机版安装]]></title><link>https://blog.youkuaiyun.com/qq_45473439/article/details/126098341</link><guid>https://blog.youkuaiyun.com/qq_45473439/article/details/126098341</guid><author>qq_45473439</author><pubDate>Mon, 01 Aug 2022 11:49:31 +0800</pubDate><description><![CDATA[minio 单机版安装]]></description><category></category></item><item><title><![CDATA[k8s（二）——— pod 详解]]></title><link>https://blog.youkuaiyun.com/qq_45473439/article/details/125595024</link><guid>https://blog.youkuaiyun.com/qq_45473439/article/details/125595024</guid><author>qq_45473439</author><pubDate>Mon, 04 Jul 2022 10:27:05 +0800</pubDate><description><![CDATA[1. 先定义模板文件
模板的参数含义:运行以下命令，通过模板创建Pod。
创建成功后，可通过以下命令查询当前运行的所有Pod.
查询pod
Pod创建后，最常用的功能就是查询。可以用以下命令查询Pod的状态。
还可以在查询命令中带上参数-w，以对Pod状态进行持续监控。只要Pod发生了变化，就会在控制台中输出相应信息。命令如下。
另外，还可以在查询命令中带上-o wide参数，输出Pod的更多概要信息（如调度到哪台机器上，Pod本身的虚拟IP等信息）。命令如下。
get命令除了可以显示简要的运行信息外，还可]]></description><category></category></item><item><title><![CDATA[dubbo 核心源码——SPI和IOC、AOP]]></title><link>https://blog.youkuaiyun.com/qq_45473439/article/details/125377403</link><guid>https://blog.youkuaiyun.com/qq_45473439/article/details/125377403</guid><author>qq_45473439</author><pubDate>Mon, 27 Jun 2022 17:10:34 +0800</pubDate><description><![CDATA[Dubbo的有很多的设计值得学习和借鉴。需要理解的几个点：​	在Dubbo的源码中，很多地方会存在下面这样三种代码，分别是自适应扩展点，指定名称的扩展点，激活扩展点：
​	这种扩展点实际上就是Dubbo 中的 SPI机制。关于SPI，不知道大家是否还有印象，Springboot 自动装配的SpringFactoiesLoader，它也是一种SPI机制。SPI 全称是 Service Provider Interface，原本是JDK 内置的一种服务提供发现机制，它主要用来做服务的扩展实现。SPI 机制在很多]]></description><category></category></item><item><title><![CDATA[k8s使用nfs配置StorageClass，配置完成后，创建pvc一直为pending的状态。]]></title><link>https://blog.youkuaiyun.com/qq_45473439/article/details/125434215</link><guid>https://blog.youkuaiyun.com/qq_45473439/article/details/125434215</guid><author>qq_45473439</author><pubDate>Thu, 23 Jun 2022 20:23:55 +0800</pubDate><description><![CDATA[k8s使用nfs配置StorageClass，配置完成后，创建pvc一直为pending的状态。
出现报错provision "default/exampleforstorageclass" class "managed-nfs-storage": unexpected error getting claim reference: selfLink was empty, can't make reference]]></description><category></category></item><item><title><![CDATA[K8s centos安装与部署，集群搭建]]></title><link>https://blog.youkuaiyun.com/qq_45473439/article/details/125355293</link><guid>https://blog.youkuaiyun.com/qq_45473439/article/details/125355293</guid><author>qq_45473439</author><pubDate>Sun, 19 Jun 2022 10:31:12 +0800</pubDate><description><![CDATA[准备四台虚拟机，使用centos7操作系统，搭建集群系统。先搭建好一台虚拟机的环境，其他机器克隆就行。虚拟机参数：如果网络连接不成功，可以配置试试这篇博客https://blog.youkuaiyun.com/duyuanjun123/article/details/119833105在虚拟机中使用ip addr命令查看虚拟机ip因为虚拟机操作多少有点不方便，所以使用xshell或者fianlshell 连接连接成功配置一下yum源下载wget命令


备份旧的yum仓库源


清理旧包


下载新的阿里的yum源仓库]]></description><category></category></item><item><title><![CDATA[Spring深入学习（一）]]></title><link>https://blog.youkuaiyun.com/qq_45473439/article/details/125153679</link><guid>https://blog.youkuaiyun.com/qq_45473439/article/details/125153679</guid><author>qq_45473439</author><pubDate>Mon, 06 Jun 2022 20:31:06 +0800</pubDate><description><![CDATA[IoC Service Provider会检查被注入对象的构造方法，取得它所需要的依赖对象列表，进而为其注入相应的对象。同一个对象是不可能被构造两次的，因此，被注入对象的构造乃至其整个生命周期，应该是由IoC Service Provider来管理的。对于JavaBean对象来说，通常会通过setXXX()和getXXX()方法来访问对应属性。这些setXXX()方法统称为setter方法，getXXX()当然就称为getter方法。通过setter方法，可以更改相应的对象属性，通过getter方法，可以获]]></description><category></category></item><item><title><![CDATA[zookeeper 的特性及其利用场景（分布式锁 和 Master选举）]]></title><link>https://blog.youkuaiyun.com/qq_45473439/article/details/124661624</link><guid>https://blog.youkuaiyun.com/qq_45473439/article/details/124661624</guid><author>qq_45473439</author><pubDate>Mon, 09 May 2022 10:54:03 +0800</pubDate><description><![CDATA[zookeeper 的特性及其利用场景（分布式锁 和 Master选举）
zookeeper 的数据结构
Zookeeper 的数据模型和分布式文件系统类似，是一种层次化的属性结构，如图所示。和文件系统不同的是，Zookeeper的数据是结构化储存的，并没有在物理上体现出文件和目录。
​	Zookeeper 树中的每个节点被称为Znode，Znode维护了一个 Stat状态信息，其中包含数据变化的时间和版本等。并且每个Znode可以设置一个value值，Zookeeper并不用与通信的数据库或者大容量的对象]]></description><category></category></item><item><title><![CDATA[深入浅出Springboot 自动装配原理]]></title><link>https://blog.youkuaiyun.com/qq_45473439/article/details/124546390</link><guid>https://blog.youkuaiyun.com/qq_45473439/article/details/124546390</guid><author>qq_45473439</author><pubDate>Mon, 02 May 2022 20:43:02 +0800</pubDate><description><![CDATA[Springboot 自动装配原理
Springboot 自动装配简单点说，就是自动将Bean装配到Ioc容器中，在了解Springboot 自动装配之前我们先来聊聊Spring 是怎么注入和配置Bean的。
Spring Ioc/DI
loC ( Inversion of Control)和 DI (Dependency Injection)的全称分别是控制反转和依赖注入。如何理解这两个概念呢?
loC
loC(控制反转）实际上就是把对象的生命周期托管到Spring容器中，而反转是指对象的获取方式被反转了]]></description><category></category></item><item><title><![CDATA[Websocket 心跳包重连实现]]></title><link>https://blog.youkuaiyun.com/qq_45473439/article/details/124401257</link><guid>https://blog.youkuaiyun.com/qq_45473439/article/details/124401257</guid><author>qq_45473439</author><pubDate>Mon, 25 Apr 2022 11:38:54 +0800</pubDate><description><![CDATA[WebSocket
WebSocket 类似于标准的TCP连接，它是IETF（RFC 6455）定义的通过TCP进行实时全双工通信一种通信方式，这意味这它的功能更强大，常用于如股票报价器，聊天应用。
相比于SSE，它不仅可以双向通信，而且甚至还能处理音频/视频等二进制内容。
原理：
WebSocket协议是借用HTTP协议的101 switchprotocol(服务器根据客户端的指定，将协议转换成为 Upgrade首部所列的协议)来达到协议转换的，从HTTP协议切换成WebSocket通信协议。
优点：
它]]></description><category></category></item><item><title><![CDATA[兴趣圈项目的架构设计与实现]]></title><link>https://blog.youkuaiyun.com/qq_45473439/article/details/124281982</link><guid>https://blog.youkuaiyun.com/qq_45473439/article/details/124281982</guid><author>qq_45473439</author><pubDate>Tue, 19 Apr 2022 20:03:24 +0800</pubDate><description><![CDATA[射击项目的架构设计与实现
用户模块的详细设计与实现
登录与注册的详细设计与实现
本系统为了方便用户的使用，采用登录注册一键化的方案，当用户输入手机号在系统总不存在时即为注册，如果手机号存在则为登录。
本系统使用手机号发送验证码进行登录注册。
具体实现：在用户填写填写好手机号后，前端向后端发送请求获取手机验证码，后端调用阿里云SMS服务，向用户发送验证码，并将验证码存入redis，并设置过期时间为一分钟。 设置过期时间的目的是防止用户短时间内多次发送验证码，导致资源浪费，过期时间未到则不会发送新的验证码，当用]]></description><category></category></item><item><title><![CDATA[软件架构的发展及研究现状]]></title><link>https://blog.youkuaiyun.com/qq_45473439/article/details/124093940</link><guid>https://blog.youkuaiyun.com/qq_45473439/article/details/124093940</guid><author>qq_45473439</author><pubDate>Mon, 11 Apr 2022 11:07:41 +0800</pubDate><description><![CDATA[软件架构研究现状
软件架构的发展经历了单体架构、分布式架构、SOA架构、微服务架构四个阶段。
1.3.1 单体架构
Web应用程序发展的早期，大部分web工程师将所有的功能集成在一个项目工程中，所有功能打在一个war包中部署到服务器，通过部署应用集群和数据库集群来提高系统的性能。这种模式下，项目架构简单，前期开发成本低、周期短，开发效率高，模块之间交互采用本地方法调用、容易部署、容易测试。但缺点也很明显：全部功能集成在一个工程中，大于大型项目不易开发、扩展和维护。版本迭代速度逐渐变慢，修改一个地方就要将整个]]></description><category></category></item><item><title><![CDATA[八大排序总结（java）]]></title><link>https://blog.youkuaiyun.com/qq_45473439/article/details/123944521</link><guid>https://blog.youkuaiyun.com/qq_45473439/article/details/123944521</guid><author>qq_45473439</author><pubDate>Sun, 03 Apr 2022 21:08:30 +0800</pubDate><description><![CDATA[冒泡排序

代码实现
package sort;

import java.util.Arrays;

/**
 * @author lixiangxiang
 * @description 冒泡排序
 * @date 2021/4/25 20:47
 */
public class bubble {

    public static void main(String[] args) {
        int[] arr = {3, 9, -1, 10, -2};
        int temp =]]></description><category></category></item><item><title><![CDATA[垃圾收集器与内存分配策略]]></title><link>https://blog.youkuaiyun.com/qq_45473439/article/details/123781289</link><guid>https://blog.youkuaiyun.com/qq_45473439/article/details/123781289</guid><author>qq_45473439</author><pubDate>Sun, 27 Mar 2022 20:56:58 +0800</pubDate><description><![CDATA[垃圾收集器与内存分配策略
概述

垃圾收集器需要完成的三件事

哪些内存需要回收？
什么时候回收？
如何回收？



java内存运行时区域的各个部分**，java的程序计数器、虚拟机栈、本地方法栈**3个区域生命周期与线程一致。每一个栈帧中分配多少内存基本上是在类结构确定下来时就已知的，因此这几个区域的内存分配和回收都具备确定性，在这几个区域内就不需要过多考虑如何回收的问题，当方法结束或者线程结束时，内存自然也跟着回收了。
​	而java堆和方法区这两个区域有着很显著的不确定性：一个接口的多个实现类需要的]]></description><category></category></item><item><title><![CDATA[redis 缓存穿透 缓存击穿 缓存雪崩介绍及解决方案]]></title><link>https://blog.youkuaiyun.com/qq_45473439/article/details/123617310</link><guid>https://blog.youkuaiyun.com/qq_45473439/article/details/123617310</guid><author>qq_45473439</author><pubDate>Sun, 20 Mar 2022 17:44:02 +0800</pubDate><description><![CDATA[一、前言
在我们日常的开发中，无不都是使用数据库来进行数据的存储，由于一般的系统任务中通常不会存在高并发的情况，所以这样看起来并没有什么问题，可是一旦涉及大数据量的需求，比如一些商品抢购的情景，或者是主页访问量瞬间较大的时候，单一使用数据库来保存数据的系统会因为面向磁盘，磁盘读/写速度比较慢的问题而存在严重的性能弊端，一瞬间成千上万的请求到来，需要系统在极短的时间内完成成千上万次的读/写操作，这个时候往往不是数据库能够承受的，极其容易造成数据库系统瘫痪，最终导致服务宕机的严重生产问题。
为了克服上述的问题，]]></description><category></category></item><item><title><![CDATA[Mysql B+树索引介绍 及 页内储存结构]]></title><link>https://blog.youkuaiyun.com/qq_45473439/article/details/123445631</link><guid>https://blog.youkuaiyun.com/qq_45473439/article/details/123445631</guid><author>qq_45473439</author><pubDate>Sat, 12 Mar 2022 16:21:54 +0800</pubDate><description><![CDATA[B+树 基本介绍
概述
Mysql 的默认储存引擎 是InnoDB，索引是储存引擎快速搜索数据的关键，而InnoDB使用的索引数据结构就是B+树。
索引使用最形象的比喻就是目录，可以帮助mysql在大量数据中定位到我们想要的数据。
今天要介绍的就是开发工作中最经常接触到的 B+树索引。
B+树本质上是指的一种数据结构，它是由二叉查找树，平衡二叉树 和 B树演化而来，要想掌握它，我们必须先了解这三种数据结构。
二叉排序树
适用场景
先看一个需求
给你一个数列 (7, 3, 10, 12, 5, 1, 9)，要]]></description><category></category></item><item><title><![CDATA[订单超时实现方案总结]]></title><link>https://blog.youkuaiyun.com/qq_45473439/article/details/123315976</link><guid>https://blog.youkuaiyun.com/qq_45473439/article/details/123315976</guid><author>qq_45473439</author><pubDate>Sun, 06 Mar 2022 19:48:54 +0800</pubDate><description><![CDATA[订单超时实现方案总结
订单超时是一个经典的业务场景，在商城系统中很常见。
常见的实现方案有以下几种

定时轮询
被动取消
redis 过期回调
延时消息

一、 定时轮询
实现方法: 开启一个定时任务，过一段时间轮询下数据库，将超时的订单关闭。
优点：

实现方法简单

缺点：
1. 时效性差，跟轮询时间差有关，轮询时间差越大，订单取消时间误差越大。
2. 效率低。
3. 对数据库压力大。如果设置的轮询间隔时间小，需要频繁读写数据库。

二、被动取消
实现方法: 当用户查询信息时，我们再去判断是否超时。
优]]></description><category></category></item></channel></rss>