<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[eve_z的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/eve_z</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; eve_z]]></copyright><item><title><![CDATA[mybatis一级缓存踩坑记录]]></title><link>https://blog.youkuaiyun.com/eve_z/article/details/112663191</link><guid>https://blog.youkuaiyun.com/eve_z/article/details/112663191</guid><author>eve_z</author><pubDate>Fri, 15 Jan 2021 13:58:51 +0800</pubDate><description><![CDATA[mybatis一级缓存踩坑记录坑分析处理方法mybatis一级缓存
坑
循环中用相同条件重复查询数据，并编辑查询结果返回的集合，导致查询结果重复



分析

mybatis一级缓存默认开启，重复查询使用同一条SqlSession会重复从一级缓存中读取数据
返回的集合对象是个List，在处理往list集合中插入数据，等同于往一级缓存中插入数据
导致再次查询时，从一级缓存中读取数据时，读取的数据是缓存中的脏数据

处理方法

不在循环中调用查询
开启查询语句的一级缓存刷新机制

mybatis一级缓存
1、一]]></description><category></category></item><item><title><![CDATA[java static笔试题]]></title><link>https://blog.youkuaiyun.com/eve_z/article/details/106259740</link><guid>https://blog.youkuaiyun.com/eve_z/article/details/106259740</guid><author>eve_z</author><pubDate>Thu, 21 May 2020 15:58:07 +0800</pubDate><description><![CDATA[class SingleTon {
    private static SingleTon singleTon = new SingleTon();
    public static int count1;
    public static int count2 = 0;

    private SingleTon() {
        count1++;
        count2++;
    }

    public static SingleTon getInstance() {
  ]]></description><category></category></item><item><title><![CDATA[jvm & tomcat 类加载]]></title><link>https://blog.youkuaiyun.com/eve_z/article/details/106136897</link><guid>https://blog.youkuaiyun.com/eve_z/article/details/106136897</guid><author>eve_z</author><pubDate>Fri, 15 May 2020 10:51:24 +0800</pubDate><description><![CDATA[jvm

bootstrap
ext
app
自定义

当JVM运行过程中，用户需要加载某些类时，会按照下面的步骤（父类委托机制）：
　　1 用户自己的类加载器，把加载请求传给父加载器，父加载器再传给其父加载器，一直到加载器树的顶层。
　　2 最顶层的类加载器首先针对其特定的位置加载，如果加载不到就转交给子类。
　　3 如果一直到底层的类加载都没有加载到，那么就会抛出异常ClassNotFoundException。
因此，按照这个过程可以想到，如果同样在CLASSPATH指定的目录中和自己工作目录中存放相]]></description><category></category></item><item><title><![CDATA[gc回收算法及触发条件]]></title><link>https://blog.youkuaiyun.com/eve_z/article/details/106136031</link><guid>https://blog.youkuaiyun.com/eve_z/article/details/106136031</guid><author>eve_z</author><pubDate>Fri, 15 May 2020 10:23:15 +0800</pubDate><description><![CDATA[minor gc

eden内存不足

full gc

元数据区内存不足
老年代内存不足
System.gc()方法的调用
其他

CMS GC时出现promotion failed和concurrent mode failure




]]></description><category></category></item><item><title><![CDATA[业务拆分中的垂直与水平]]></title><link>https://blog.youkuaiyun.com/eve_z/article/details/106135553</link><guid>https://blog.youkuaiyun.com/eve_z/article/details/106135553</guid><author>eve_z</author><pubDate>Fri, 15 May 2020 10:02:57 +0800</pubDate><description><![CDATA[程序拆分

垂直拆分：按照应用场景对系统进行划分（商户支付、用户支付）
水平拆分：按照业务对系统进行划分（支付中心）

数据库拆分

垂直拆分：分库、按字段分表
水平拆分：分表（流水表）


...]]></description><category></category></item><item><title><![CDATA[jvm 内存区域划分]]></title><link>https://blog.youkuaiyun.com/eve_z/article/details/106134802</link><guid>https://blog.youkuaiyun.com/eve_z/article/details/106134802</guid><author>eve_z</author><pubDate>Fri, 15 May 2020 09:32:39 +0800</pubDate><description><![CDATA[]]></description><category></category></item><item><title><![CDATA[java自动拆装箱（Integer）]]></title><link>https://blog.youkuaiyun.com/eve_z/article/details/106103652</link><guid>https://blog.youkuaiyun.com/eve_z/article/details/106103652</guid><author>eve_z</author><pubDate>Wed, 13 May 2020 18:01:58 +0800</pubDate><description><![CDATA[Integer a = 127;// 等价于 Integer a = Integer.valueOf(127);
int b = a;// 等价于 int b = a.intValue();




]]></description><category></category></item><item><title><![CDATA[Integer ==校验原理]]></title><link>https://blog.youkuaiyun.com/eve_z/article/details/106102794</link><guid>https://blog.youkuaiyun.com/eve_z/article/details/106102794</guid><author>eve_z</author><pubDate>Wed, 13 May 2020 17:43:42 +0800</pubDate><description><![CDATA[现象
Integer用==做校验时，只能支持-128~127
public class IntegerTest {
    @Test
    public void test() {
        Integer a = 127, b = 127;
        Assert.assertTrue(a == b);
        a = 128;
        b = 128;
        Assert.assertFalse(a == b);
        a = -127;
      ]]></description><category></category></item><item><title><![CDATA[分布式锁（redis，zookeeper）]]></title><link>https://blog.youkuaiyun.com/eve_z/article/details/106081180</link><guid>https://blog.youkuaiyun.com/eve_z/article/details/106081180</guid><author>eve_z</author><pubDate>Tue, 12 May 2020 17:40:25 +0800</pubDate><description><![CDATA[redis分布式锁
RedLock算法：这个场景是假设有一个redis cluster，有3个redis master实例。然后执行如下步骤获取一把锁：

获取当前时间戳，单位是毫秒；
跟上面类似，轮流尝试在每个master节点上创建锁，过期时间较短，一般就几十毫秒；
尝试在大多数节点上建立一个锁，比如3个节点就要求是2个节点（n / 2 +1）；
客户端计算建立好锁的时间，如果建立锁的时间小于超时时间，就算建立成功了；
要是锁建立失败了，那么就依次删除这个锁；
只要别人建立了一把分布式锁，你就得不断轮询去]]></description><category></category></item><item><title><![CDATA[分布式session]]></title><link>https://blog.youkuaiyun.com/eve_z/article/details/106080568</link><guid>https://blog.youkuaiyun.com/eve_z/article/details/106080568</guid><author>eve_z</author><pubDate>Tue, 12 May 2020 17:19:51 +0800</pubDate><description><![CDATA[tomcat + redis

在tomcat的lib中添加tomcat-redis-session-manager相关jar包
修改Context.xml

&lt;Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve" /&gt; &lt;Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager"]]></description><category></category></item><item><title><![CDATA[服务降级（dubbo-spring.cloud）]]></title><link>https://blog.youkuaiyun.com/eve_z/article/details/106050577</link><guid>https://blog.youkuaiyun.com/eve_z/article/details/106050577</guid><author>eve_z</author><pubDate>Mon, 11 May 2020 11:36:25 +0800</pubDate><description><![CDATA[dubbo服务降级
基于mock实现，在服务消费者配置配置mock，并在接口相同路径下实现接口的mock(命名规则：接口名称+Mock)
&lt;dubbo:reference id="demoService" check="false" interface="org.apache.dubbo.samples.basic.api.DemoService" mock="truel"/&gt;

springcloud服务降级
//TODO

...]]></description><category></category></item><item><title><![CDATA[windows命令]]></title><link>https://blog.youkuaiyun.com/eve_z/article/details/104733397</link><guid>https://blog.youkuaiyun.com/eve_z/article/details/104733397</guid><author>eve_z</author><pubDate>Sun, 08 Mar 2020 15:13:27 +0800</pubDate><description><![CDATA[一小时后关机
shutdown -s -t 3600


]]></description><category></category></item><item><title><![CDATA[spring事务]]></title><link>https://blog.youkuaiyun.com/eve_z/article/details/103895641</link><guid>https://blog.youkuaiyun.com/eve_z/article/details/103895641</guid><author>eve_z</author><pubDate>Wed, 08 Jan 2020 17:48:51 +0800</pubDate><description><![CDATA[spring事务传播行为
@Transactional 注解控制事务失效

数据库不支持事务
数据源未启用事务
类不被spring管理
方法不是public
参数设置不正确：propagation、rollback
类内部调用，本类@Transactional 注解的方法


...]]></description><category></category></item><item><title><![CDATA[spring默认单例bean]]></title><link>https://blog.youkuaiyun.com/eve_z/article/details/103891475</link><guid>https://blog.youkuaiyun.com/eve_z/article/details/103891475</guid><author>eve_z</author><pubDate>Wed, 08 Jan 2020 14:58:00 +0800</pubDate><description><![CDATA[单例bean的优劣势
单例bean的优势
由于不会每次都新创建新对象所以有一下几个性能上的优势：

减少了新生成实例的消耗
新生成实例消耗包括两方面，第一，Spring会通过反射或者cglib来生成bean实例这都是耗性能的操作，其次给对象分配内存也会涉及复杂算法。
减少jvm垃圾回收
由于不会给每个请求都新生成bean实例，所以自然回收的对象少了。
可以快速获取到bean
因为单例的获取bean...]]></description><category></category></item><item><title><![CDATA[dubbo 2.7.4负载均衡]]></title><link>https://blog.youkuaiyun.com/eve_z/article/details/103729621</link><guid>https://blog.youkuaiyun.com/eve_z/article/details/103729621</guid><author>eve_z</author><pubDate>Fri, 27 Dec 2019 15:46:08 +0800</pubDate><description><![CDATA[dubbo负载均衡
dubbo负载均衡器接口LoadBalance，提供了4种负载均衡实现：

基于权重随机算法的 RandomLoadBalance
基于最少活跃调用数算法的 LeastActiveLoadBalance
基于 hash 一致性的 ConsistentHashLoadBalance
基于加权轮询算法的 RoundRobinLoadBalance。

AbstractLoadBal...]]></description><category></category></item><item><title><![CDATA[logback pattern]]></title><link>https://blog.youkuaiyun.com/eve_z/article/details/103720084</link><guid>https://blog.youkuaiyun.com/eve_z/article/details/103720084</guid><author>eve_z</author><pubDate>Thu, 26 Dec 2019 17:55:13 +0800</pubDate><description><![CDATA[logback官网pattern

]]></description><category></category></item><item><title><![CDATA[Dubbo的集群容错]]></title><link>https://blog.youkuaiyun.com/eve_z/article/details/103678539</link><guid>https://blog.youkuaiyun.com/eve_z/article/details/103678539</guid><author>eve_z</author><pubDate>Tue, 24 Dec 2019 10:21:32 +0800</pubDate><description><![CDATA[Failover Cluster
失败自动切换，当出现失败，重试其它服务器。通常用于读操作，但重试会带来更长延迟。
Failfast Cluster
快速失败，只发起一次调用，失败立即报错。通常用于非幂等性的写操作，比如新增记录。
Failsafe Cluster
失败安全，出现异常时，直接忽略。通常用于写入审计日志等操作。
Failback Cluster
失败自动恢复，后台记录失败请求，定时...]]></description><category></category></item><item><title><![CDATA[httpclient 4.5 超时设置]]></title><link>https://blog.youkuaiyun.com/eve_z/article/details/103634187</link><guid>https://blog.youkuaiyun.com/eve_z/article/details/103634187</guid><author>eve_z</author><pubDate>Fri, 20 Dec 2019 16:10:52 +0800</pubDate><description><![CDATA[网上搜索httpclient超时设置：
CloseableHttpClient httpClient = HttpClients.createDefault();
HttpGet httpGet=newHttpGet("http://www.baidu.com");//HTTP Get请求(POST雷同)
RequestConfig requestConfig = RequestConfig.cu...]]></description><category></category></item><item><title><![CDATA[java引用]]></title><link>https://blog.youkuaiyun.com/eve_z/article/details/103479804</link><guid>https://blog.youkuaiyun.com/eve_z/article/details/103479804</guid><author>eve_z</author><pubDate>Tue, 10 Dec 2019 17:47:09 +0800</pubDate><description><![CDATA[java引用

虚引用（PhantomReference）

形同虚设，随时可能被垃圾回收器回收
无法通过虚引用来获取一个对象的实例。为一个对象设置虚引用关联的唯一目的就是能在这个对象被收集器回收时收到一个系统通知


弱引用（WeakReference

在gc时进行回收


软引用（SoftReference）

在内存空间不足时，进行回收


强引用（StrongReference）

内存...]]></description><category></category></item><item><title><![CDATA[spi机制(java,springboot,dubbo)]]></title><link>https://blog.youkuaiyun.com/eve_z/article/details/103470973</link><guid>https://blog.youkuaiyun.com/eve_z/article/details/103470973</guid><author>eve_z</author><pubDate>Tue, 10 Dec 2019 10:57:14 +0800</pubDate><description><![CDATA[spi机制
SPI的全名为Service Provider Interface，为某个接口寻找服务实现的机制。
Java SPI约定

在jar包的META-INF/services/目录里同时创建一个以服务接口命名的文件。该文件里就是实现该服务接口的具体实现类。
外部程序装配这个模块的时候，通过该jar包META-INF/services/里的配置文件找到具体的实现类名，并装载实例化，完成模块的...]]></description><category></category></item></channel></rss>