<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[i2295301的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/i2295301</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; i2295301]]></copyright><item><title><![CDATA[2021-09-23各个国家简称以及收手机区号]]></title><link>https://blog.youkuaiyun.com/i2295301/article/details/120441578</link><guid>https://blog.youkuaiyun.com/i2295301/article/details/120441578</guid><author>i2295301</author><pubDate>Thu, 23 Sep 2021 19:29:46 +0800</pubDate><description><![CDATA[Countries and Regions
			国家或地区
			国际域名缩写
			电话代码
			时差
		Angola
			安哥拉
			AO
			244
			-7
		Afghanistan
			阿富汗
			AF
			93
			0
		Albania
			阿尔巴尼亚
			AL
			355
			-7
		Algeria
			阿尔及利亚
			DZ
			213
			-8
		Andorra
			安道尔共和国
			AD
			376
			-8
		Anguilla
..]]></description><category></category></item><item><title><![CDATA[转：Mybatis与JDBC批量插入数据库哪个更快]]></title><link>https://blog.youkuaiyun.com/i2295301/article/details/114929872</link><guid>https://blog.youkuaiyun.com/i2295301/article/details/114929872</guid><author>i2295301</author><pubDate>Wed, 17 Mar 2021 14:41:00 +0800</pubDate><description><![CDATA[转自

http://www.cnblogs.com/fnz0/p/5713102.html,

https://www.cnblogs.com/wxw7blog/p/8706797.html



[转]:

不知道自己什么时候才有这种钻研精神- -。

1背景

系统中需要批量生成单据数据到数据库表，所以采用批量插入数据库的方式。由于系统中ORM操作集成使用的是Mybatis来完成的。



在Mybatis中操作一般使用批量插入的方式如下：

&lt;insertid="ins...]]></description><category></category></item><item><title><![CDATA[2021-01-18-Redis问题]]></title><link>https://blog.youkuaiyun.com/i2295301/article/details/112787065</link><guid>https://blog.youkuaiyun.com/i2295301/article/details/112787065</guid><author>i2295301</author><pubDate>Mon, 18 Jan 2021 16:09:07 +0800</pubDate><description><![CDATA[1.跳表的设计好处？
2.redis部署方式，版本之间差异
3.redis集群/原子性(key会不会在设置时同时分布在不同的redis-server，这时怎么保证事务性，及原子性)
4.redis集群get的时候，不是先算hash？而是分到某个节点上后找不到值再move，重定向？？set的时候，可以利用hashtag
...]]></description><category></category></item><item><title><![CDATA[测试分析及调优（转）]]></title><link>https://blog.youkuaiyun.com/i2295301/article/details/111768000</link><guid>https://blog.youkuaiyun.com/i2295301/article/details/111768000</guid><author>i2295301</author><pubDate>Sat, 26 Dec 2020 19:11:49 +0800</pubDate><description><![CDATA[转：https://help.aliyun.com/document_detail/29342.html?spm=a2c4g.11186623.6.612.5oUhZg



适用对象和范围

适用于需要进行性能分析及调优的工作。 预期读者为测试管理人员、测试实施人员、技术支持人员、项目质量管理人员、项目管理人员等系统技术质量相关人员。

性能分析

前提
	性能分析的前提除了需要丰富的性能测试监控（如PTS自身的客户侧监控、基础类监控-阿里云监控、应用类监控-ARMS监控等），还需要具备相关的技术知识..]]></description><category></category></item><item><title><![CDATA[转载：Java的wait()、notify()学习三部曲之一：JVM源码分析]]></title><link>https://blog.youkuaiyun.com/i2295301/article/details/111373341</link><guid>https://blog.youkuaiyun.com/i2295301/article/details/111373341</guid><author>i2295301</author><pubDate>Fri, 18 Dec 2020 15:46:24 +0800</pubDate><description><![CDATA[转载：https://blog.youkuaiyun.com/boling_cavalry/article/details/77793224

其它参考：https://blog.youkuaiyun.com/qq_26222859/article/details/53930941



综述

Java的wait()、notify()学习三部曲由三篇文章组成，内容分别是：
一、通过阅读openjdk8的源码，分析和理解wait，notify在JVM中的具体执行过程；
二、修改JVM源码，编译构建成新的JVM，把我们感兴趣的...]]></description><category></category></item><item><title><![CDATA[volatile底层原理]]></title><link>https://blog.youkuaiyun.com/i2295301/article/details/111151182</link><guid>https://blog.youkuaiyun.com/i2295301/article/details/111151182</guid><author>i2295301</author><pubDate>Mon, 14 Dec 2020 10:23:05 +0800</pubDate><description><![CDATA[一段代码来演示问题背景
	volatile解决内存可见性问题
	Java内存模型原子操作
	总线加锁太慢？MESI缓存一致性协议（总线嗅探机制）
	彻底掌握volatile底层原理
1、多线程环境下共享变量的线程安全问题





点击运行，会有如下输出：


thread1 action...
thread2 action...
thread2 end

可以知道的是，线程1在无限空转，只有当flag=true才会跳出，但是线程2对flag的改变，线程1却感知不到。。。

使用top命令也可以看到有一个.]]></description><category></category></item><item><title><![CDATA[深入理解Java内存模型（一）——基础]]></title><link>https://blog.youkuaiyun.com/i2295301/article/details/111150879</link><guid>https://blog.youkuaiyun.com/i2295301/article/details/111150879</guid><author>i2295301</author><pubDate>Mon, 14 Dec 2020 10:12:16 +0800</pubDate><description><![CDATA[转载自并发编程网 – ifeve.com本文链接地址:深入理解Java内存模型（一）——基础





并发编程模型的分类

在并发编程中，我们需要处理两个关键问题：线程之间如何通信及线程之间如何同步（这里的线程是指并发执行的活动实体）。通信是指线程之间以何种机制来交换信息。在命令式编程中，线程之间的通信机制有两种：共享内存和消息传递。
在共享内存的并发模型里，线程之间共享程序的公共状态，线程之间通过写-读内存中的公共状态来隐式进行通信。在消息传递的并发模型里，线程之间没有公共状态，线程之间必须通过明...]]></description><category></category></item><item><title><![CDATA[如何查看java的汇编指令]]></title><link>https://blog.youkuaiyun.com/i2295301/article/details/111029890</link><guid>https://blog.youkuaiyun.com/i2295301/article/details/111029890</guid><author>i2295301</author><pubDate>Fri, 11 Dec 2020 10:58:37 +0800</pubDate><description><![CDATA[通过javap 命令，可以将字节码文件反编译。如通过下面的命令：


javac XXX.java

javap -c XXX.class


而有时候想看某些JDK底层实现，只是得到一些反编译的代码，那么我想要查看Java的汇编指令，查看Java代码最真实的运行细节,要该怎么做呢？

Java本身提供这个支持，但需要引入而外的包

Mac下(hsdis-amd64.dylib)：

链接: https://pan.baidu.com/s/1-evEb79T_d0r9lZBU5exeA 密码: vucm..]]></description><category></category></item><item><title><![CDATA[线程六种状态-2020-12-10]]></title><link>https://blog.youkuaiyun.com/i2295301/article/details/110953740</link><guid>https://blog.youkuaiyun.com/i2295301/article/details/110953740</guid><author>i2295301</author><pubDate>Thu, 10 Dec 2020 16:28:46 +0800</pubDate><description><![CDATA[ProcessOn画图：

线程一共有 6 种状态(NEW、RUNNABLE、BLOCKED、WAITING、 TIME_WAITING、TERMINATED)







线程中断/停止：

interrupt 方法： 线程中断(中断标识位设置 )

C源码 : thread.cpp



void Thread::interrupt(Thread* thread) {
trace("interrupt", thread);
debug_only(check_for_dangling_th...]]></description><category></category></item><item><title><![CDATA[JDK命令详解之jstat]]></title><link>https://blog.youkuaiyun.com/i2295301/article/details/109643462</link><guid>https://blog.youkuaiyun.com/i2295301/article/details/109643462</guid><author>i2295301</author><pubDate>Thu, 12 Nov 2020 15:23:16 +0800</pubDate><description><![CDATA[jstat是JDK自带的jvm监控命令，该命令可以查看堆内存各部分的使用量，以及加载类的数量。

　　命令的格式如下：

　　　　jstat [-命令选项] [vmid] [间隔时间/毫秒] [查询次数]

 常见的命令有

l class (类加载器)
	l compiler (JIT)
	l gc (GC堆状态)
	l gccapacity (各区大小)
	l gccause (最近一次GC统计和原因)
	l gcnew (新区统计)
	l gcnewcapacity (新区...]]></description><category></category></item><item><title><![CDATA[JVM(一)运行时区域]]></title><link>https://blog.youkuaiyun.com/i2295301/article/details/109353081</link><guid>https://blog.youkuaiyun.com/i2295301/article/details/109353081</guid><author>i2295301</author><pubDate>Thu, 29 Oct 2020 10:55:34 +0800</pubDate><description><![CDATA[1.JVM运行时数据区和内存模型:

参考：https://www.cnblogs.com/czwbig/p/11127124.html，写的很漂亮，转载一下，另外总结一下各个区域的异常溢出



对于这个图，虚拟机栈和本地方法栈相关的溢出少了个OutOfMemoryError,（也是书上的例子，做个总结）：

对于HotSpot虚拟机，-Xoss参数可设置本地方法栈大小，但是实际上没有效果，只能通过-Xss参数决定。(Classic虚拟机可以使用-Xoss参数，并生效)

如果设置参数不允许动态扩展...]]></description><category></category></item><item><title><![CDATA[javaagent的学习]]></title><link>https://blog.youkuaiyun.com/i2295301/article/details/108712436</link><guid>https://blog.youkuaiyun.com/i2295301/article/details/108712436</guid><author>i2295301</author><pubDate>Mon, 21 Sep 2020 16:12:14 +0800</pubDate><description><![CDATA[本文转载：https://www.cnblogs.com/rickiyang/p/11368932.html

原文应该用的是JDK1.6,如果你是使用JDK1.8，部分方法会少许不同

另外，学习javaagent之前最好对MANIFEST.MF,再熟悉一下



javaagent使用指南

今天打算写一下 Javaagent，一开始我对它的概念也比较陌生，后来在别人口中听到字节码插桩，bTrace，Arthas后面才逐渐了解到Java还提供了这么个工具。

JVM启动前静态Instrument#
..]]></description><category></category></item><item><title><![CDATA[记一次Spring的只读事务(mysql readonly)]]></title><link>https://blog.youkuaiyun.com/i2295301/article/details/108648489</link><guid>https://blog.youkuaiyun.com/i2295301/article/details/108648489</guid><author>i2295301</author><pubDate>Thu, 17 Sep 2020 18:26:38 +0800</pubDate><description><![CDATA[Spirng加只读事务最简捷方式：@Transactional(readOnly = true)

那么，加了这个玩意，到底起了什么作用呢？来看下源码：

Spring里带事务的service方法会先进入org.springframework.transaction.support.AbstractPlatformTransactionManager#getTransaction方法，

然后看次方法里的doBegin方法


	@Override
	public final TransactionStat]]></description><category></category></item><item><title><![CDATA[Spring编程事务和声明式事务]]></title><link>https://blog.youkuaiyun.com/i2295301/article/details/108520263</link><guid>https://blog.youkuaiyun.com/i2295301/article/details/108520263</guid><author>i2295301</author><pubDate>Thu, 10 Sep 2020 18:38:33 +0800</pubDate><description><![CDATA[1.声明式事务: 例如在XML文件里配置的事务


&lt;aop:config&gt;  
    &lt;aop:pointcut id="testService" expression="execution (* com.nnngu.service.MyBatisService.*(..))"/&gt;  
    &lt;aop:advisor advice-ref="advice" pointcut-ref="testService"/&gt;  
&lt;/aop:config&gt;  

或]]></description><category></category></item><item><title><![CDATA[Java时区问题(二)--为何Calendar设置timezone后时间戳没变]]></title><link>https://blog.youkuaiyun.com/i2295301/article/details/108438831</link><guid>https://blog.youkuaiyun.com/i2295301/article/details/108438831</guid><author>i2295301</author><pubDate>Sun, 06 Sep 2020 23:34:19 +0800</pubDate><description><![CDATA[问题：为何Calendar设置timezone后，时间戳没变

我想设置成雅加达时区（东7区，即北京时间-1h），我是这样设置时间戳的：


//我想设置成雅加达时区（东7区，即北京时间-1h）
Date now = new Date();
System.out.println(now);

Calendar cal1 = Calendar.getInstance(TimeZone.getTimeZone("Asia/Jakarta"));
Date date1 = cal1.getTime();
Sys.]]></description><category></category></item><item><title><![CDATA[RocketMq源码查看之一(NameSrv和Broker的启动配置)]]></title><link>https://blog.youkuaiyun.com/i2295301/article/details/108405574</link><guid>https://blog.youkuaiyun.com/i2295301/article/details/108405574</guid><author>i2295301</author><pubDate>Fri, 04 Sep 2020 18:28:39 +0800</pubDate><description><![CDATA[一、配置一下RocketMq的运行环境变量：

如果不配置或者配置错误，在启动的时候，可能会报错：找不到或无法加载主类

原因1：目录配错，即：ROCEKTMQ_HOME 配错，仔细核对一下，包括空格和 / 什么的，最好不要带空格

原因2： 有时Idea里配置的环境变量，需要重启一下Idea工具(我的windows电脑遇到了此情况)



二、配置ROCKETMQ_HOME, 可以直接配置或在IDEA的启动配置参数里配置：

rocketmq-running-config是我新创建的目录，该目录建议...]]></description><category></category></item><item><title><![CDATA[RocketMq源码查看之一(代码下载和目录介绍)]]></title><link>https://blog.youkuaiyun.com/i2295301/article/details/108405181</link><guid>https://blog.youkuaiyun.com/i2295301/article/details/108405181</guid><author>i2295301</author><pubDate>Fri, 04 Sep 2020 15:40:28 +0800</pubDate><description><![CDATA[为了更好的理解RocketMq内部的运转流程，还在装杯一波，看看源码，学习一下



一、下载源码，master分支：

https://github.com/apache/rocketmq



二、我是用Idea工具，直接导入Maven工程(使用的是Java8)





三、在rocket-mq目录下，可以执行mvn clean install: 清理、编译、部署到本地仓库

broker: 启动broker进程

client： producer、consumer的代码

common：公共代...]]></description><category></category></item><item><title><![CDATA[Java时区问题]]></title><link>https://blog.youkuaiyun.com/i2295301/article/details/108359486</link><guid>https://blog.youkuaiyun.com/i2295301/article/details/108359486</guid><author>i2295301</author><pubDate>Wed, 02 Sep 2020 11:57:46 +0800</pubDate><description><![CDATA[遇到的问题：

 1.背景:项目是做印尼的业务，所以经常遇到时区问题，timezone搞不好好容易出错，尤其是还款时间问题

  2.经过:同事用postman在mock的时候，传的repaidTime = "2020-09-02T11:26:48.289Z"(UTC时间，与北京相差8小时)

  3.问题: 日志里输出log时，发现时间变成了repaidTime = Wed Sep 02 19:26:48 WIB 2020,多了8小时



然后查看了参数，发现时间的格式需要探究一下,所...]]></description><category></category></item><item><title><![CDATA[Git常用命令]]></title><link>https://blog.youkuaiyun.com/i2295301/article/details/108255678</link><guid>https://blog.youkuaiyun.com/i2295301/article/details/108255678</guid><author>i2295301</author><pubDate>Thu, 27 Aug 2020 11:28:21 +0800</pubDate><description><![CDATA[转载https://www.jianshu.com/p/adfc541ebf81

并补充一些常用命令和说明

1.git个人信息填写


git config --global user.name "Lansir"
git config --global user.email "helloworldlgr@gmail"
git config --list //查看用户信息

2.创建版本库repository(本地库)


//1.创建一个项目目录
git init
//2.忽略文件
touch .git]]></description><category></category></item><item><title><![CDATA[Spring-SmartLifecycle  容器启动和关闭的时候执行操作]]></title><link>https://blog.youkuaiyun.com/i2295301/article/details/108234522</link><guid>https://blog.youkuaiyun.com/i2295301/article/details/108234522</guid><author>i2295301</author><pubDate>Wed, 26 Aug 2020 11:21:53 +0800</pubDate><description><![CDATA[有一些业务上需要在spring容器启动和关闭的时候做一些操作，那么可以自定义SmartLifecycle接口的实现类来扩展

比如RocketMq的接入



与@PostConstruct的区别：

@PostConstruct 是加在某个bean里的注解，是该bean实例化好后初始化之前即在initializeBean通过postProcessor（InitDestroyAnnotationBeanPostProcessor）调用



SmartLifecycle 和 lifeCyle 是接口...]]></description><category></category></item></channel></rss>