<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[IMBA_09的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/IMBA_09</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; IMBA_09]]></copyright><item><title><![CDATA[bdntoy 使用手册]]></title><link>https://blog.youkuaiyun.com/IMBA_09/article/details/140051421</link><guid>https://blog.youkuaiyun.com/IMBA_09/article/details/140051421</guid><author>IMBA_09</author><pubDate>Sun, 30 Jun 2024 19:47:59 +0800</pubDate><description><![CDATA[bdntoy快速使用]]></description><category></category></item><item><title><![CDATA[如何配置小程序服务器域名]]></title><link>https://blog.youkuaiyun.com/IMBA_09/article/details/140040284</link><guid>https://blog.youkuaiyun.com/IMBA_09/article/details/140040284</guid><author>IMBA_09</author><pubDate>Fri, 28 Jun 2024 12:32:49 +0800</pubDate><description><![CDATA[小程序服务器域名的配置。]]></description><category></category></item><item><title><![CDATA[Resolv: 简单实用的Go语言2D碰撞检测函数库]]></title><link>https://blog.youkuaiyun.com/IMBA_09/article/details/137361386</link><guid>https://blog.youkuaiyun.com/IMBA_09/article/details/137361386</guid><author>IMBA_09</author><pubDate>Thu, 04 Apr 2024 00:36:40 +0800</pubDate><description><![CDATA[在内部检查形状相交时，执行分离轴定理（SAT）碰撞测试（当与凸多边形相交测试时），这代表了 Resolv 更低效的窄相位部分。在这个例子中，首先创建空间 Space 对象，并创建各种物体（玩家，墙壁等），将这些物体加入到此空间中，在 Update 函数中每帧去检测玩家是否与空间中的其他物体有碰撞，并移动玩家，最后更新玩家的位置。注：“解析”按照作者的说法是解析碰撞，根据作者给出的案例来看，应该是能够解析出物体的碰撞点。注意：resolv 库仍然在开发中，但应该在实际场景中足够稳定。]]></description><category></category></item><item><title><![CDATA[Go 反序列化 JSON 中类型不确定的字段]]></title><link>https://blog.youkuaiyun.com/IMBA_09/article/details/136773569</link><guid>https://blog.youkuaiyun.com/IMBA_09/article/details/136773569</guid><author>IMBA_09</author><pubDate>Sun, 17 Mar 2024 11:53:25 +0800</pubDate><description><![CDATA[Go 反序列化 JSON 中类型不确定的字段。]]></description><category></category></item><item><title><![CDATA[对系统的 Go 版本进行升级]]></title><link>https://blog.youkuaiyun.com/IMBA_09/article/details/134731808</link><guid>https://blog.youkuaiyun.com/IMBA_09/article/details/134731808</guid><author>IMBA_09</author><pubDate>Fri, 01 Dec 2023 12:36:04 +0800</pubDate><description><![CDATA[对系统的 Go 版本进行快速升级的方法]]></description><category></category></item><item><title><![CDATA[Redis big key]]></title><link>https://blog.youkuaiyun.com/IMBA_09/article/details/117389786</link><guid>https://blog.youkuaiyun.com/IMBA_09/article/details/117389786</guid><author>IMBA_09</author><pubDate>Sat, 29 May 2021 19:17:49 +0800</pubDate><description><![CDATA[1、什么是 big key？
对于不同的数据类型，big key 定义不同：

字符串类型：它的big体现在单个value值很大，一般认为超过10KB就是bigkey。非字符串类型：哈希、列表、集合、有序集合，它们的big体现在元素个数太多。建议把集合类型的元素个数控制在1万个以下。
2、 big key 的危害：

影响性能，容易产生阻塞。

在 Redis 基本 IO 模型中，主要是主线程在执行操作，任何耗时的操作，例如 bigkey、全量返回等操作，都是潜在的性能瓶颈。AOF 重写过程中：主进程 fo]]></description><category></category></item><item><title><![CDATA[手写一个简单的 Redis 客户端]]></title><link>https://blog.youkuaiyun.com/IMBA_09/article/details/117389676</link><guid>https://blog.youkuaiyun.com/IMBA_09/article/details/117389676</guid><author>IMBA_09</author><pubDate>Sat, 29 May 2021 19:07:44 +0800</pubDate><description><![CDATA[RESP 协议
RESP 协议，全称 Redis 序列化协议（Redis Serialization Protocol） 是 Redis 客户端和服务器用来通信的文本协议，其特点是简单直观。优势在于实现简单，解析性能好。
​
五种基本的Redis协议数据结构的最小单元类型：每个单元类型以【/r/n】结尾

单行字符串

以【+】开头，+OK\r\n表示字符串OK
多行字符串

以【$】开头，后面是字符串长度。
数值

以【:】开头，后面是整数字符串，:10086表示数值10086
错误信息

以【-】开头，]]></description><category></category></item><item><title><![CDATA[建议生产环境禁用 replace into]]></title><link>https://blog.youkuaiyun.com/IMBA_09/article/details/116865263</link><guid>https://blog.youkuaiyun.com/IMBA_09/article/details/116865263</guid><author>IMBA_09</author><pubDate>Sat, 15 May 2021 22:20:06 +0800</pubDate><description><![CDATA[在生产中，经常会有同学喜欢使用一条SQL语句执行更新/插入操作（解决唯一键冲突）。

比如下面的例子：利用唯一键：(code, name) 更新学生表的学号和姓名。


	当唯一键存在时，就会更新，当不存在时就会插入数据。
	

&lt;insertid="replaceBatch"parameterType="java.util.List"&gt;
replaceintostudent(code,name,address,)
VALUES
&lt;foreachcollec...]]></description><category></category></item><item><title><![CDATA[查找线上日志却不小心引起了事故]]></title><link>https://blog.youkuaiyun.com/IMBA_09/article/details/116572808</link><guid>https://blog.youkuaiyun.com/IMBA_09/article/details/116572808</guid><author>IMBA_09</author><pubDate>Sun, 09 May 2021 23:09:25 +0800</pubDate><description><![CDATA[1、查找线上日志却不小心引起了事故。
小赵为了排查线上的一个问题，登录到 DOCKER 容器上，用 VI 命令打开一个日志文件，过了一会儿，发现了告警：容器重启！一个查看日志的命令却导致了机器重启，这是为什么呢？
2、不建议用 vi 命令查看大文件
VI 工具的定位是编辑器，在加载文件的时候，需要将其全部加载到内存中。如果文件太大，为了将文件全部加载到内存中，就需要消耗的大量的内存空间，可能会影响部署在机器上的其他应用，严重导致机器卡顿。而容器有健康检查，如果检测到容器不能提供服务时，就会把自动将容器重启，]]></description><category></category></item><item><title><![CDATA[MyBatis 多条件查询的三种实现]]></title><link>https://blog.youkuaiyun.com/IMBA_09/article/details/115053101</link><guid>https://blog.youkuaiyun.com/IMBA_09/article/details/115053101</guid><author>IMBA_09</author><pubDate>Sun, 21 Mar 2021 18:09:17 +0800</pubDate><description><![CDATA[预计阅读时间 5 分钟

在开发中，经常遇到根据搜索条件查询的情况。可以利用 MyBatis 中的动态SQL的特性来实现多条件选择查询。
1、多条件查询的实现方式
根据 MAPPER接口 入参的不同形式，有三种方法来实现：
1.1、条件入参为实体类
&nbsp;&nbsp;&nbsp;&nbsp;/**&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;条件查询BO&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;condition&n.]]></description><category></category></item><item><title><![CDATA[入参太多导致的烦恼]]></title><link>https://blog.youkuaiyun.com/IMBA_09/article/details/113763632</link><guid>https://blog.youkuaiyun.com/IMBA_09/article/details/113763632</guid><author>IMBA_09</author><pubDate>Mon, 08 Feb 2021 22:38:11 +0800</pubDate><description><![CDATA[入参太多导致的烦恼

代码的坏味道之一：过长参数列表

入参设计的几点建议：

方法的参数列表应该尽量避免重复，减少调用者的使用难度。

何为重复？就是这个参数 A 可以通过另外一个参数 B 轻松获得，所以不应该辛苦调用者再去找出参数 A。这里可以去除参数 A，使获取参数 A 的「**责任转移」**到方法。

并且参数列表越短就越容易理解。

为什么参数会有很多？过长参数列可能是将多个算法并到一个函数中时发生的。函数中的入参可以用来控制最终选用哪个算法去执行。
入参太多的缺点

太长的参数列难以理解，增加理]]></description><category></category></item><item><title><![CDATA[我有N种方法消除 if-else，而你却无可奈何（第三篇：责任链模式）]]></title><link>https://blog.youkuaiyun.com/IMBA_09/article/details/113763333</link><guid>https://blog.youkuaiyun.com/IMBA_09/article/details/113763333</guid><author>IMBA_09</author><pubDate>Mon, 08 Feb 2021 22:37:36 +0800</pubDate><description><![CDATA[我有N种方法消除 if-else，而你却无可奈何（第三篇：责任链模式）
实例：烹饪。周六中午一个人吃饭，我就煮了面和一个番茄蛋汤。让我们来看看煮面和做汤的流程：

煮面的流程：烧水 --&gt; 煮，等会沸腾之后，就把面放进沸腾的水中煮熟。
做番茄蛋汤的流程：处理鸡蛋 --&gt; 处理番茄 --&gt; 烧水 --&gt; 煮，先处理鸡蛋和番茄，同时可以把水烧开，最后将鸡蛋和番茄放入热水中煮

用 if-else 来实现周六的午饭：

if (烹饪面) {
  烧水;
  放入面;
  煮;
  
} e]]></description><category></category></item><item><title><![CDATA[关于 Cookie 的那些事儿]]></title><link>https://blog.youkuaiyun.com/IMBA_09/article/details/113705340</link><guid>https://blog.youkuaiyun.com/IMBA_09/article/details/113705340</guid><author>IMBA_09</author><pubDate>Fri, 05 Feb 2021 22:56:22 +0800</pubDate><description><![CDATA[带着问题去学习：

什么是 Cookie？
Cookie的作用？
Cookie 的工作机制？
Cookie 的使用场景？
后端处理 Cookie 实战

1、什么是Cookie？

服务端向客服端写入的信息片段，用于保存客户端的状态，为 key-value 键值对的格式。因为 HTTP 是无状态协议，即服务器无法判断客户端的身份（是否为同一浏览器），所以需要 Cookie 来保存客户端的信息。
比如：使用门禁卡进入公司的大门，卡就相当于 Cookie。这里就存在一个问题，门禁卡被别人捡到了，别人就可以冒充你]]></description><category></category></item><item><title><![CDATA[我有N种方法消除 if-else，而你却无可奈何（第二篇：表驱动编程方法）]]></title><link>https://blog.youkuaiyun.com/IMBA_09/article/details/113063105</link><guid>https://blog.youkuaiyun.com/IMBA_09/article/details/113063105</guid><author>IMBA_09</author><pubDate>Sat, 23 Jan 2021 21:59:29 +0800</pubDate><description><![CDATA[重构的唯一目的是：用较小的工作量，创造更大的价值。

本文主要内容：通过一个简单的代码示例，利用表驱动的编程方法、策略模式和工厂模式等对 if-else 语句进行改进。
先看一个具体的例子：设计一个程序，通过不同的渠道（移动，联通…）发送消息。
用 if-else 实现
在 MsgServiceIml 类实现了 MsgService 消息服务接口，重写发送消息的方法 send。目前使用「中国移动」和「联通」两种渠道发消息，下面的代码所示：
public class MsgServiceImpl imple.]]></description><category></category></item><item><title><![CDATA[我有N种方法消除 if-else，而你却无可奈何（第一篇：增强可读性）]]></title><link>https://blog.youkuaiyun.com/IMBA_09/article/details/112757693</link><guid>https://blog.youkuaiyun.com/IMBA_09/article/details/112757693</guid><author>IMBA_09</author><pubDate>Sun, 17 Jan 2021 20:58:08 +0800</pubDate><description><![CDATA[重构技术就是以微小的步伐修改程序。重构有风险，修改需谨慎。修改越多，出错越多，重构必须系统化进行。

何时要消除代码中的 if-else：

可读性差
扩展性不强，违反单一职责原则，开闭原则。
不符合SOLID原则中的”开闭原则“ ——对扩展开放，对更改封闭。每次都需要修改原有代码（对更改没有封闭）,不断的添加”if else"。

有以下十种方法来消除代码中的 if-else 语句：

1、卫语句
2、使用 SWTICH CASE 语句
3、提炼方法
4、表驱动（事件委托处理模型）
5、策略模式（可结合.]]></description><category></category></item><item><title><![CDATA[「maven」从一次 maven 排除问题中找到解决问题的方法论。]]></title><link>https://blog.youkuaiyun.com/IMBA_09/article/details/112059247</link><guid>https://blog.youkuaiyun.com/IMBA_09/article/details/112059247</guid><author>IMBA_09</author><pubDate>Fri, 01 Jan 2021 11:55:02 +0800</pubDate><description><![CDATA[开发中遇到了报错该如何处理？

百度呀，google呀，都太泛化了，搜索出来的可能有很多个解决方法，但可能只有一种方法来解决你的问题。

解决访问的方法：找到错误信息，分析错误原因，逐一排除，最后便是答案。

一次解决错误的过程

找到错误信息

某一次 SpringBoot 项目启动过程中报错，没有任何日志，就程序结束了。

如何捕捉到错误，查看错误信息？如下：


try{

SpringApplication.run(Application.class,args);

}catch(Excep...]]></description><category></category></item><item><title><![CDATA[实用简单的MyBatis 的批量操作]]></title><link>https://blog.youkuaiyun.com/IMBA_09/article/details/110358090</link><guid>https://blog.youkuaiyun.com/IMBA_09/article/details/110358090</guid><author>IMBA_09</author><pubDate>Sun, 29 Nov 2020 23:47:39 +0800</pubDate><description><![CDATA[阿里巴巴编程规范：
【推荐】循环体中的语句要考量性能，以下操作尽量移至循环体外处理，如定义对象、变 量、获取数据库连接，进行不必要的 try-catch 操作(这个 try-catch 是否可以移至循环体外)。

在有些场景中，我们需要批量对数据进行增删改操作利用MyBatis 的 FOREACH 标签，我们可以动态地创建多条SQL语句。

foreach 元素的功能非常强大，它允许你指定一个集合，声明可以在元素体内使用的集合项（item）和索引（index）变量。它也允许你指定开头与结尾的字符串以及集合项]]></description><category></category></item><item><title><![CDATA[Java8 Stream 流]]></title><link>https://blog.youkuaiyun.com/IMBA_09/article/details/109966314</link><guid>https://blog.youkuaiyun.com/IMBA_09/article/details/109966314</guid><author>IMBA_09</author><pubDate>Sun, 22 Nov 2020 22:11:16 +0800</pubDate><description><![CDATA[Stream 流
看之前：需要一些Lambda语法知识，可以查看参考资料中的文章：万字详解，JDK1.8的Lambda、Stream和日期的使用详解。
正文
Java8 API Stream 允许你以声明性方式处理数据集合或数组(通过查询语句来表达。
Stream 的特点：

Stream 自己不会存储数据
Stream 不会改变源对象，他们会返回一个持有结果的新对象
Stream 操作是延迟执行的，意味着他们只会在需要结果的时候才会执行。
Stream 只能消费一次，消费完毕之后就会关闭。

Stream]]></description><category></category></item><item><title><![CDATA[【Redis实战】Redis 简单实战]]></title><link>https://blog.youkuaiyun.com/IMBA_09/article/details/109691127</link><guid>https://blog.youkuaiyun.com/IMBA_09/article/details/109691127</guid><author>IMBA_09</author><pubDate>Sat, 14 Nov 2020 15:05:24 +0800</pubDate><description><![CDATA[Redis 实战
1、Navigation Session
需求：用户60秒内访问的N个网站页面，或许包含当前 TA 正在看或者感兴趣的东西。由此可以推荐对应的广告，使得用户更容易对投放的广告感兴趣。
利用Redis可以简单实现:
MULTI
RPUSH pagewviews.user:&lt;userid&gt; http://.....
EXPIRE pagewviews.user:&lt;userid&gt; 60
EXEC

2、Redis 缓存常用数据
图片：String，hash 数据类型
3、]]></description><category></category></item><item><title><![CDATA[MySQL存储Java对象]]></title><link>https://blog.youkuaiyun.com/IMBA_09/article/details/109564605</link><guid>https://blog.youkuaiyun.com/IMBA_09/article/details/109564605</guid><author>IMBA_09</author><pubDate>Sun, 08 Nov 2020 20:49:51 +0800</pubDate><description><![CDATA[1、存储Java对象的方法
下面有三种方式，可以存储Java对象。

1、将Java对象中的每一个字段都存入表中。

优点：每个字段都可以被检索
缺点：针对每个需要存储的对象，都要创建数据表。一个类对应一张表


2、将Java对象序列化之后，存入Blob字段或者Text。

优点：可以存储超大的对象，并且没有大小限制
缺点：Blob数据类型的缺点，检索上存在问题


3、保存为JSON字符串，使用VARCHAR数据类型存储

优点：可以存储完整的对象，反序列化也很方便。
缺点：不方便检索内容，需要提前估计]]></description><category></category></item></channel></rss>