<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/gudejundd</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; gudejundd]]></copyright><item><title><![CDATA[### Error updating database. Cause: java.sql.SQLException: Incorrect string value: ‘\\xF0\\x9F\\xA6]]></title><link>https://blog.youkuaiyun.com/gudejundd/article/details/128673801</link><guid>https://blog.youkuaiyun.com/gudejundd/article/details/128673801</guid><author>gudejundd</author><pubDate>Fri, 13 Jan 2023 14:41:03 +0800</pubDate><description><![CDATA[mysql保存数据是报错：Incorrect string value]]></description><category></category></item><item><title><![CDATA[elastic-job分片介绍]]></title><link>https://blog.youkuaiyun.com/gudejundd/article/details/123084203</link><guid>https://blog.youkuaiyun.com/gudejundd/article/details/123084203</guid><author>gudejundd</author><pubDate>Wed, 23 Feb 2022 10:50:08 +0800</pubDate><description><![CDATA[分片
ElasticJob 中任务分片项的概念，使得任务可以在分布式的环境下运行，每台任务服务器只运行分配给该服务器的分片。 随着服务器的增加或宕机，ElasticJob 会近乎实时的感知服务器数量的变更，从而重新为分布式的任务服务器分配更加合理的任务分片项，使得任务可以随着资源的增加而提升效率。
任务的分布式执行，需要将一个任务拆分为多个独立的任务项，然后由分布式的服务器分别执行某一个或几个分片项。
举例说明，如果作业分为 4 片，用两台服务器执行，则每个服务器分到 2 片，分别负责作业的 50% 的负载]]></description><category></category></item><item><title><![CDATA[SchedulerX分布式定时任务MapReduce模型]]></title><link>https://blog.youkuaiyun.com/gudejundd/article/details/123077054</link><guid>https://blog.youkuaiyun.com/gudejundd/article/details/123077054</guid><author>gudejundd</author><pubDate>Tue, 22 Feb 2022 21:01:32 +0800</pubDate><description><![CDATA[Map模型
基于MapJobProcessor，调用Map方法，即可实现大数据分布式跑批的能力。
注意事项

SchedulerX不保证子任务一定执行一次，在特殊条件下会failover，可能会导致子任务重复执行，需要业务方自己实现幂等。
SchedulerX使用的是Hessian序列化框架，目前不支持LocalDateTime和BigDecimal。子任务中如果有如上两个数据结构，请替换其他的数据结构（特别是BigDecimal，序列化不会报错，反序列化会变成0）。

接口

执行方式

并行计算：最多支]]></description><category></category></item><item><title><![CDATA[分布式任务框架]]></title><link>https://blog.youkuaiyun.com/gudejundd/article/details/123075220</link><guid>https://blog.youkuaiyun.com/gudejundd/article/details/123075220</guid><author>gudejundd</author><pubDate>Tue, 22 Feb 2022 20:08:16 +0800</pubDate><description><![CDATA[quartz
quartz 的常见集群方案如下，通过在数据库中配置定时器信息， 以数据库悲观锁的方式达到同一个任务始终只有一个节点在运行，
保证节点高可用 (HA)， 如果某一个几点挂了， 其他节点可以顶上
缺点：
同一个任务只能有一个节点运行，其他节点将不执行任务，性能低，资源浪费
当碰到大量短任务时，各个节点频繁的竞争数据库锁，节点越多这种情况越严重。性能会很低下
quartz 的分布式仅解决了集群高可用的问题，并没有解决任务分片的问题，不能实现水平扩展

xxl-job
由个人开源的一个轻量级分布式任]]></description><category></category></item><item><title><![CDATA[如何使用Redis实现分布式锁]]></title><link>https://blog.youkuaiyun.com/gudejundd/article/details/119358795</link><guid>https://blog.youkuaiyun.com/gudejundd/article/details/119358795</guid><author>gudejundd</author><pubDate>Tue, 03 Aug 2021 21:03:18 +0800</pubDate><description><![CDATA[单机上的锁和分布式锁的联系与区别
我们先来看下单机上的锁。
对于在单机上运行的多线程程序来说，锁本身可以用一个变量表示。

变量值为 0 时，表示没有线程获取锁；
变量值为 1 时，表示已经有线程获取到锁了。

我们通常说的线程调用加锁和释放锁的操作，实际上，一个线程调用加锁操作，其实就是检查锁变量值是否为 0。如果是 0，就把锁的变量值设置为 1，表示获取到锁，如果不是 0，就返回错误信息，表示加锁失败，已经有别的线程获取到锁了。而一个线程调用释放锁操作，其实就是将锁变量的值置为 0，以便其它线程可以来获]]></description><category></category></item><item><title><![CDATA[redis原子操作]]></title><link>https://blog.youkuaiyun.com/gudejundd/article/details/119358399</link><guid>https://blog.youkuaiyun.com/gudejundd/article/details/119358399</guid><author>gudejundd</author><pubDate>Tue, 03 Aug 2021 20:34:51 +0800</pubDate><description><![CDATA[我们在使用 Redis 时，不可避免地会遇到并发访问的问题，比如说如果多个用户同时下单，就会对缓存在 Redis 中的商品库存并发更新。一旦有了并发写操作，数据就会被修改，如果我们没有对并发写请求做好控制，就可能导致数据被改错，影响到业务的正常使用（例如库存数据错误，导致下单异常）。
为了保证并发访问的正确性，Redis 提供了两种方法，分别是加锁和原子操作。
加锁是一种常用的方法，在读取数据前，客户端需要先获得锁，否则就无法进行操作。当一个客户端获得锁后，就会一直持有这把锁，直到客户端完成数据更新，才释放]]></description><category></category></item><item><title><![CDATA[如何解决缓存不一致？]]></title><link>https://blog.youkuaiyun.com/gudejundd/article/details/119358028</link><guid>https://blog.youkuaiyun.com/gudejundd/article/details/119358028</guid><author>gudejundd</author><pubDate>Tue, 03 Aug 2021 20:23:25 +0800</pubDate><description><![CDATA[缓存和数据库的数据不一致是如何发生的？
首先，我们得清楚“数据的一致性”具体是啥意思。其实，这里的“一致性”包含了两种情况：

缓存中有数据，那么，缓存的数据值需要和数据库中的值相同；
缓存中本身没有数据，那么，数据库中的值必须是最新值。

不符合这两种情况的，就属于缓存和数据库的数据不一致问题了。不过，当缓存的读写模式不同时，缓存数据不一致的发生情况不一样，我们的应对方法也会有所不同，所以，我们先按照缓存读写模式，来分别了解下不同模式下的缓存不一致情况。我在第 23 讲中讲过，根据是否接收写请求，我们可以]]></description><category></category></item><item><title><![CDATA[Redis数据类型及使用场景]]></title><link>https://blog.youkuaiyun.com/gudejundd/article/details/119331853</link><guid>https://blog.youkuaiyun.com/gudejundd/article/details/119331853</guid><author>gudejundd</author><pubDate>Mon, 02 Aug 2021 19:15:22 +0800</pubDate><description><![CDATA[Redis数据类型及使用场景


Redis数据类型及使用场景
Redis相比其它的KV数据库，其一大特点是支持丰富的数据类型。它一共支持5种数据类型，下面逐一介绍这5种数据类型及其使用场景和内部实现方式。


string
简介：Strings数据类型是最常用、简单的key-value类型，普通的key/ value 存储都可以归为此类。value不仅可以是字符串，也可以是数字。因为是二进制安全的，所以你完全可以把一个图片文件的内容作为string来存储。Redis的string可以完全实现目前memca]]></description><category></category></item><item><title><![CDATA[springboot duboo.reference.check不生效问题]]></title><link>https://blog.youkuaiyun.com/gudejundd/article/details/113886547</link><guid>https://blog.youkuaiyun.com/gudejundd/article/details/113886547</guid><author>gudejundd</author><pubDate>Sat, 20 Feb 2021 16:51:10 +0800</pubDate><description><![CDATA[前段时间遇到一个问题，调用dubbo服务经常出现空指针异常，重新一下就解决了， 后来定位到问题是dubbo服务没有找到，导致服务对象是null；经排查发现原因是dubbo服务没有配置check=false属性，看dubbo的配置文件里，已经配置了duboo.reference.check=false.查看其他一些文章也提到duboo.reference.check设置成false，后来换成dubbo.consumer.check=false,这样就能生效了。
为了搞清楚原因特地看了一下源码，原来consum]]></description><category></category></item><item><title><![CDATA[JRebel插件使用详解]]></title><link>https://blog.youkuaiyun.com/gudejundd/article/details/109318839</link><guid>https://blog.youkuaiyun.com/gudejundd/article/details/109318839</guid><author>gudejundd</author><pubDate>Tue, 27 Oct 2020 20:02:41 +0800</pubDate><description><![CDATA[简介
Jrebel 可快速实现热部署，节省了大量重启时间，提高了个人开发效率。
JRebel是一款JAVA虚拟机插件，它使得JAVA程序员能在不进行重部署的情况下，即时看到代码的改变对一个应用程序带来的影响。JRebel使你能即时分别看到代码、类和资源的变化，你可以一个个地上传而不是一次性全部部署。当程序员在开发环境中对任何一个类或者资源作出修改的时候，这个变化会直接反应在部署好的应用程序上，从而跳过了构建和部署的过程，可以省去大量的部署用的时间。
JRebel是一款JVM插件，它使得Java代码修改后不用]]></description><category></category></item><item><title><![CDATA[“零拷贝”是什么]]></title><link>https://blog.youkuaiyun.com/gudejundd/article/details/107034132</link><guid>https://blog.youkuaiyun.com/gudejundd/article/details/107034132</guid><author>gudejundd</author><pubDate>Tue, 30 Jun 2020 09:46:55 +0800</pubDate><description><![CDATA[前言


List item


I/O概念
 1.缓冲区
 2.虚拟内存
 3.mmap+write方式
 4.sendfile方式



Java零拷贝
1.MappedByteBuffer
2.DirectByteBuffer
3.Channel-to-Channel传输


Netty零拷贝


其他零拷贝


总结


前言
从字面意思理解就是数据不需要来回的拷贝，大大提升了系统的性能；这个词我们也经常在java nio，netty，kafka，RocketMQ等框架中听到，经常作为其提升性能的一]]></description><category></category></item><item><title><![CDATA[elasticsearch 深度分页问题]]></title><link>https://blog.youkuaiyun.com/gudejundd/article/details/104884464</link><guid>https://blog.youkuaiyun.com/gudejundd/article/details/104884464</guid><author>gudejundd</author><pubDate>Sun, 15 Mar 2020 20:41:46 +0800</pubDate><description><![CDATA[elasticsearch分页对于用过es的人应该都会使用 ，和数据库的分页类似，如下所示，通过from + size可以对数据进行分页。
{
    "from" : 0, 
    "size" : 10,
    "query" : {
        "term" : { "user" : "dejun" }
    }
} 

可以查询1-10条记录，不过由于es是分布式的，数据都是分布...]]></description><category></category></item><item><title><![CDATA[elasticsearch 数据类型text和keyword区别]]></title><link>https://blog.youkuaiyun.com/gudejundd/article/details/102544480</link><guid>https://blog.youkuaiyun.com/gudejundd/article/details/102544480</guid><author>gudejundd</author><pubDate>Mon, 14 Oct 2019 13:49:28 +0800</pubDate><description><![CDATA[在es 2.*版本里面是没有这两个字段，只有string字段。
5.*之后，把string字段设置为了过时字段，引入text，keyword字段
这两个字段都可以存储字符串使用，但建立索引和搜索的时候是不太一样的
keyword：存储数据时候，不会分词建立索引
text：存储数据时候，会自动分词，并生成索引（这是很智能的，但在有些字段里面是没用的，所以对于有些字段使用text则浪费了空间）。
所以...]]></description><category></category></item><item><title><![CDATA[java如何将中文转换成byte数组]]></title><link>https://blog.youkuaiyun.com/gudejundd/article/details/90575217</link><guid>https://blog.youkuaiyun.com/gudejundd/article/details/90575217</guid><author>gudejundd</author><pubDate>Sun, 26 May 2019 13:21:46 +0800</pubDate><description><![CDATA[作为一名程序员，有时候会在想，java是如何将一个中文字符，转化成一个byte数组，是如果从一个byte数组转化成字符的呢？ 其实大家都知道utf-8英文占1个字节，中文占3个字节，GBK中文英文都占2个字节，但是我想问，比如utf-8,有谁知道一个中文字符是如何在java中转换成一个byte数组的？
好了，下面进入我们的正题：
例如;中 这个字是如何转换成一个byte数组的？
String st...]]></description><category></category></item><item><title><![CDATA[阿里巴巴程序员常用的 15 款开发者工具]]></title><link>https://blog.youkuaiyun.com/gudejundd/article/details/89919596</link><guid>https://blog.youkuaiyun.com/gudejundd/article/details/89919596</guid><author>gudejundd</author><pubDate>Tue, 07 May 2019 13:54:48 +0800</pubDate><description><![CDATA[从人工到自动化，从重复到创新，技术演进的历程中，伴随着开发者工具类产品的发展。
阿里巴巴将自身在各类业务场景下的技术积淀，通过开源、云上实现或工具等形式对外开放，本文将精选了一些阿里巴巴的开发者工具，希望能帮助开发者们提高开发效率、更优雅的写代码。
由于开发者涉及的技术领域众多，笔者仅从自己熟悉的领域，以后端开发者的视角盘点平时可能用得到的工具。每个工具按照以下几点进行介绍：
工具名称和简介
使用...]]></description><category></category></item><item><title><![CDATA[javax.net.ssl.SSLException: Received fatal alert: protocol_version）解决办法]]></title><link>https://blog.youkuaiyun.com/gudejundd/article/details/89703410</link><guid>https://blog.youkuaiyun.com/gudejundd/article/details/89703410</guid><author>gudejundd</author><pubDate>Tue, 30 Apr 2019 09:36:17 +0800</pubDate><description><![CDATA[具体解决办法见：https://blog.youkuaiyun.com/gudejundd/article/details/89640741 讲解的很详细

]]></description><category></category></item><item><title><![CDATA[https如何设置TLS协议版本 javax.net.ssl.SSLException: Received fatal alert: protocol_version）]]></title><link>https://blog.youkuaiyun.com/gudejundd/article/details/89640741</link><guid>https://blog.youkuaiyun.com/gudejundd/article/details/89640741</guid><author>gudejundd</author><pubDate>Sun, 28 Apr 2019 17:21:41 +0800</pubDate><description><![CDATA[1.什么是TLS
SSL 是“Secure Sockets Layer”的缩写，中文叫做“安全套接层”。它是在上世纪90年代中期，由网景公司设计的。（顺便插一句，网景公司不光发明了 SSL，还发明了很多 Web 的基础设施——比如“CSS 样式表”和“JS 脚本”）
为啥要发明 SSL 这个协议捏？因为原先互联网上使用的 HTTP 协议是明文的，存在很多缺点——比如传输内容会被偷窥（嗅探）和篡改。...]]></description><category></category></item><item><title><![CDATA[maven jetty插件启动如何指定端口号]]></title><link>https://blog.youkuaiyun.com/gudejundd/article/details/89213388</link><guid>https://blog.youkuaiyun.com/gudejundd/article/details/89213388</guid><author>gudejundd</author><pubDate>Thu, 11 Apr 2019 16:13:33 +0800</pubDate><description><![CDATA[在jetty的maven插件中有两种方式设置jetty的端口（默认为:8080）。
第一种，通过命令行，在启动jetty的时候设置：mvn -Djetty.port=10086 jetty:run
第二种，是在maven的pom文件中进行设置：
&lt;plugin&gt;
        &lt;groupId&gt;org.mortbay.jetty&lt;/groupId&gt;
     ...]]></description><category></category></item><item><title><![CDATA[slf4j logback commons-logging log4j 冲突解决办法]]></title><link>https://blog.youkuaiyun.com/gudejundd/article/details/84105229</link><guid>https://blog.youkuaiyun.com/gudejundd/article/details/84105229</guid><author>gudejundd</author><pubDate>Fri, 16 Nov 2018 20:11:29 +0800</pubDate><description><![CDATA[首先介绍一下各个日志组件的作用以及用法，如果想要解决此类冲突的问题，首先要对它们有一定的了解，当你了解后，对于以后出现的这类问题能够迎刃而解，本文会用通俗易懂的语言给大家解释。
1.我们经常看到的日志组件有哪些？
	commons-logging log4j slf4j logback java.util.logging（JDK自带）


...]]></description><category></category></item><item><title><![CDATA[设计模式介绍及Java描述]]></title><link>https://blog.youkuaiyun.com/gudejundd/article/details/82977814</link><guid>https://blog.youkuaiyun.com/gudejundd/article/details/82977814</guid><author>gudejundd</author><pubDate>Tue, 09 Oct 2018 09:49:56 +0800</pubDate><description><![CDATA[文章比较长，读者可以通过顶端的目录选择要了解的模式，然后通过文章右边的按钮快速返回顶部重新选择一个新的模式浏览
博主精心准备了大量的示例代码。文章尽量提供与编程相关的例子，而不是像多数其他介绍的文章一样，提供一些感觉挺滑稽的例子（那样的例子可能看完觉得写得很好，然而还是不会用…）。
本文耗费了作者大量时间，还请亲们给个赞O(∩_∩)O~
也可以通过CTRL+F并输入要了解的模式并跳到对应位置。
文...]]></description><category></category></item></channel></rss>