<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[v慕言的博客]]></title><description><![CDATA[致力于把看似复杂的事情变简单]]></description><link>https://blog.youkuaiyun.com/sinat_28809019</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; sinat_28809019]]></copyright><item><title><![CDATA[IDEA 插件常用-2026版]]></title><link>https://blog.youkuaiyun.com/sinat_28809019/article/details/161162363</link><guid>https://blog.youkuaiyun.com/sinat_28809019/article/details/161162363</guid><author>sinat_28809019</author><pubDate>Sun, 17 May 2026 12:23:19 +0800</pubDate><description><![CDATA[LombokGitToolBoxSonarLintMyBatisX.ignoreAI 相关插件这次没有单独放进这 10 个里，不是因为没用，而是更依赖个人习惯、团队预算和账号条件。相对来说，上面这 10 个更偏稳定、通用、装上就能直接提效。如果你也有自己长期保留的 IDEA 插件组合，欢迎交流。]]></description><category></category></item><item><title><![CDATA[Java开发手册提炼]]></title><link>https://blog.youkuaiyun.com/sinat_28809019/article/details/126135216</link><guid>https://blog.youkuaiyun.com/sinat_28809019/article/details/126135216</guid><author>sinat_28809019</author><pubDate>Wed, 03 Aug 2022 10:22:20 +0800</pubDate><description><![CDATA[说明：大而全的常量类，杂乱无章，使用查找功能才能定位到修改的常量，不利于理解，也不利于维护。接口和实现类的命名有两套规则： 1）【强制】对于 Service 和 DAO 类，基于 SOA 的理念，暴露出来的服务一定是接口，内部的实现类用 Impl 的后缀与接口区别。【强制】在 long 或者 Long 赋值时，数值后使用大写的 L，不能是小写的 l，小写容易跟数字 混淆，造成误解。说明：Long a = 2l;2）【推荐】如果是形容能力的接口名称，取对应的形容词为接口名（通常是–able 的形容词）。...]]></description><category></category></item><item><title><![CDATA[MySQL中的锁]]></title><link>https://blog.youkuaiyun.com/sinat_28809019/article/details/124090686</link><guid>https://blog.youkuaiyun.com/sinat_28809019/article/details/124090686</guid><author>sinat_28809019</author><pubDate>Mon, 11 Apr 2022 14:44:35 +0800</pubDate><description><![CDATA[MySQL中的锁全局锁语法注意点和存在的问题表级锁表锁元数据锁（meta data lock，MDL）意向锁意向锁所解决的问题行级锁行锁
锁是计算机协调多个进程或线程并发访问某一资源的机制。
MySQL中的锁，按照锁的粒度分，分为以下三类：
&nbsp;&nbsp;全局锁：锁定数据库中的所有表。
&nbsp;&nbsp;表级锁：每次操作锁住整张表。
&nbsp;&nbsp;行级锁：每次操作锁住对应的行数据。
全局锁
典型的使用场景是做全库的逻辑备份，
加锁后整个实例就处于只读状态，后续的DML的写语句，DD]]></description><category></category></item><item><title><![CDATA[CAS与synchronized]]></title><link>https://blog.youkuaiyun.com/sinat_28809019/article/details/122197994</link><guid>https://blog.youkuaiyun.com/sinat_28809019/article/details/122197994</guid><author>sinat_28809019</author><pubDate>Tue, 28 Dec 2021 17:15:50 +0800</pubDate><description><![CDATA[synchronized
代表的是一种阻塞式的锁，得不到锁会进入阻塞队列，等待线程进行唤醒，有上下文切换的开销。
原子变量是非阻塞式的，有冲突一直循环重试。
public final int incrementAndGet() {
	for(;;) {
	int current = get();
	int next = current + 1;
	if(compareAndSet(current, next))
	return next;
	}
}

基于CAS可以实现乐观非阻塞式算法，还可以悲观阻塞式算法]]></description><category></category></item><item><title><![CDATA[postgresql 与 mysql 区别与联系]]></title><link>https://blog.youkuaiyun.com/sinat_28809019/article/details/121489368</link><guid>https://blog.youkuaiyun.com/sinat_28809019/article/details/121489368</guid><author>sinat_28809019</author><pubDate>Tue, 23 Nov 2021 11:23:00 +0800</pubDate><description><![CDATA[读已提交是PostgreSQL中的默认隔离级别

]]></description><category></category></item><item><title><![CDATA[获取JSONObject中深层嵌套的key_value]]></title><link>https://blog.youkuaiyun.com/sinat_28809019/article/details/120228228</link><guid>https://blog.youkuaiyun.com/sinat_28809019/article/details/120228228</guid><author>sinat_28809019</author><pubDate>Fri, 10 Sep 2021 19:14:47 +0800</pubDate><description><![CDATA[//取出datas里的，data里的description
 JSONObject data  = datas.getJSONObject("data");
 String description = data.get("description").toString();

//取出datas里的，data里的，creator里的name
JSONObject data  = datas.getJSONObject("data");
JSONObject creator = data.getJSONObj.]]></description><category></category></item><item><title><![CDATA[结果集封装]]></title><link>https://blog.youkuaiyun.com/sinat_28809019/article/details/119879295</link><guid>https://blog.youkuaiyun.com/sinat_28809019/article/details/119879295</guid><author>sinat_28809019</author><pubDate>Mon, 23 Aug 2021 22:34:44 +0800</pubDate><description><![CDATA[@Data
public class Result implements Serializable {
    private String code;
    private String msg;
    private Object data;
    public static Result succ(Object data) {
        Result m = new Result();
        m.setCode("0");
        m.setData(data);
   ]]></description><category></category></item><item><title><![CDATA[树]]></title><link>https://blog.youkuaiyun.com/sinat_28809019/article/details/119743738</link><guid>https://blog.youkuaiyun.com/sinat_28809019/article/details/119743738</guid><author>sinat_28809019</author><pubDate>Mon, 16 Aug 2021 22:28:55 +0800</pubDate><description><![CDATA[树  1、基本结构
1、基本结构
public class BinaryTree&lt;Key extends Comparable&lt;Key&gt;, Value&gt; {
    //记录根结点
    private Node root;
    //记录树中元素的个数
    private int N;
    private class Node {
        //存储键
        public Key key;
        //存储值
        private Va]]></description><category></category></item><item><title><![CDATA[线程池中终止任务]]></title><link>https://blog.youkuaiyun.com/sinat_28809019/article/details/119727349</link><guid>https://blog.youkuaiyun.com/sinat_28809019/article/details/119727349</guid><author>sinat_28809019</author><pubDate>Mon, 16 Aug 2021 10:33:38 +0800</pubDate><description><![CDATA[待完善
【1】关于线程池中终止任务
【2】面试官：如何停止一个正在运行的线程？我又懵了

]]></description><category></category></item><item><title><![CDATA[自定义Spring IOC总结]]></title><link>https://blog.youkuaiyun.com/sinat_28809019/article/details/119715365</link><guid>https://blog.youkuaiyun.com/sinat_28809019/article/details/119715365</guid><author>sinat_28809019</author><pubDate>Sun, 15 Aug 2021 16:19:55 +0800</pubDate><description><![CDATA[自定义Spring IOC总结1、定义bean相关的pojo类1）PropertyValue类2）MutablePropertyValues类3）BeanDefinition类2、定义注册表相关类1）BeanDefinitionRegistry接口2）SimpleBeanDefinitionRegistry类3、定义解析器相关类1）BeanDefinitionReader接口2）XmlBeanDefinitionReader类4、IOC容器相关类1）BeanFactory接口2）ApplicationCon]]></description><category></category></item><item><title><![CDATA[一个事务与线程池线程的bug]]></title><link>https://blog.youkuaiyun.com/sinat_28809019/article/details/119680298</link><guid>https://blog.youkuaiyun.com/sinat_28809019/article/details/119680298</guid><author>sinat_28809019</author><pubDate>Fri, 13 Aug 2021 17:24:36 +0800</pubDate><description><![CDATA[创建一个线程池核心线程为比如4，用改线程池执行restTemplate远程调用接口获取返回结果，并保存再数据库中。
将7个任务提交。
此时，通过调用另一个方法 ，修改数据库里未执行的任务的状态，从而取消任务。
改取消任务方法添加了@Transcationl事务注解。
当执行取消任务时候，发现这种情况，提交的任务为7，线程池核心线程为4，这时候4个核心线程中有一个还没返回数据，就调用了下面的任务，下面没取消的任务，同样没返回结果。

...]]></description><category></category></item><item><title><![CDATA[抽象类与final总结]]></title><link>https://blog.youkuaiyun.com/sinat_28809019/article/details/119651803</link><guid>https://blog.youkuaiyun.com/sinat_28809019/article/details/119651803</guid><author>sinat_28809019</author><pubDate>Thu, 12 Aug 2021 19:27:20 +0800</pubDate><description><![CDATA[抽象类与final总结一、抽象类1、为什么要用抽象类2、抽象类的基本原则二、final1、为什么要用final2、final的基本原则
一、抽象类
1、为什么要用抽象类
  当我们在做子类共性功能抽取时，有些方法在父类中并没有具体的体现，这个时候就需要抽象类了。在Java中，一个没有方法体的方法应该定义为抽象方法，而类中如果有抽象方法，该类必须定义为抽象类。
2、抽象类的基本原则
1）抽象类和抽象方法必须使用 abstract 关键字修饰
2）抽象类中不一定有抽象方法，有抽象方法的类一定是抽象类
3）抽象类]]></description><category></category></item><item><title><![CDATA[配置不同环境多个application.properties或application.yml]]></title><link>https://blog.youkuaiyun.com/sinat_28809019/article/details/119612977</link><guid>https://blog.youkuaiyun.com/sinat_28809019/article/details/119612977</guid><author>sinat_28809019</author><pubDate>Wed, 11 Aug 2021 17:46:33 +0800</pubDate><description><![CDATA[【参考博客】
【1】：profile根据不同环境打不同application.properties资源包

]]></description><category></category></item><item><title><![CDATA[线程池参数配置与Linux CPU]]></title><link>https://blog.youkuaiyun.com/sinat_28809019/article/details/119597397</link><guid>https://blog.youkuaiyun.com/sinat_28809019/article/details/119597397</guid><author>sinat_28809019</author><pubDate>Wed, 11 Aug 2021 10:36:32 +0800</pubDate><description><![CDATA[1、线程池核心线程数配置
1）核心线程计算
计算密集型：cpu的个数+1。
IO密集型：2*cpu个数 + 1
2）linux查看cpu核数
	查看物理CPU个数
	cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l
	
	每个物理CPU中core的个数(即核数)
	cat /proc/cpuinfo| grep "cpu cores"| uniq
	
	逻辑CPU的个数 ，这个是我们的机器总的cpu的个数，也是设置线程池大小的时候考虑的cpu的]]></description><category></category></item><item><title><![CDATA[解决数据库存取时间的问题]]></title><link>https://blog.youkuaiyun.com/sinat_28809019/article/details/119576322</link><guid>https://blog.youkuaiyun.com/sinat_28809019/article/details/119576322</guid><author>sinat_28809019</author><pubDate>Tue, 10 Aug 2021 18:19:03 +0800</pubDate><description><![CDATA[参考博客
【1】：将时间写入数据库时,秒带小数点问题
【2】：@JsonFormat与@DateTimeFormat注解的使用

]]></description><category></category></item><item><title><![CDATA[multiPartFile.transferTo(file) 第二次调用就报错FileNotFound-踩坑记录]]></title><link>https://blog.youkuaiyun.com/sinat_28809019/article/details/119535282</link><guid>https://blog.youkuaiyun.com/sinat_28809019/article/details/119535282</guid><author>sinat_28809019</author><pubDate>Mon, 09 Aug 2021 12:43:40 +0800</pubDate><description><![CDATA[今天写代码遇到一个坑，第一次调用multiPartFile.transferTo(file) 正常运行，第二次就报错FileNotFound。并指向了C盘一个很深的目录。
看了很多博客的解决办法都不管用，最后找到解决方案如下：
替换multiPartFile.transferTo(file)
使用FileUtils.copyInputStreamToFile(multiPartFile.getInputStream(), file);将文件流复制到创建的file中
需要导入包：
&lt;dependency]]></description><category></category></item><item><title><![CDATA[数据结构之符号表]]></title><link>https://blog.youkuaiyun.com/sinat_28809019/article/details/119523539</link><guid>https://blog.youkuaiyun.com/sinat_28809019/article/details/119523539</guid><author>sinat_28809019</author><pubDate>Sun, 08 Aug 2021 23:55:42 +0800</pubDate><description><![CDATA[符号表的基本结构基本结构有序符号表
基本结构
public class OrderSymbolTable&lt;Key extends Comparable&lt;Key&gt;,Value&gt; {
    //记录首结点
    private Node head;
    //记录符号表中元素的个数
    private int N;
    private class Node{
        //键
        public Key key;
        //值
        pu]]></description><category></category></item><item><title><![CDATA[行为型设计模式总结]]></title><link>https://blog.youkuaiyun.com/sinat_28809019/article/details/119488973</link><guid>https://blog.youkuaiyun.com/sinat_28809019/article/details/119488973</guid><author>sinat_28809019</author><pubDate>Sat, 07 Aug 2021 16:45:31 +0800</pubDate><description><![CDATA[行为型设计模式总结3、行为型设计模式3.1、责任链模式3.2、策略模式
3、行为型设计模式
3.1、责任链模式
3.2、策略模式

]]></description><category></category></item><item><title><![CDATA[结构型设计模式总结]]></title><link>https://blog.youkuaiyun.com/sinat_28809019/article/details/119488883</link><guid>https://blog.youkuaiyun.com/sinat_28809019/article/details/119488883</guid><author>sinat_28809019</author><pubDate>Sat, 07 Aug 2021 16:41:36 +0800</pubDate><description><![CDATA[结构型设计模式1、代理模式2、适配器模式3、装饰器模式4、桥接模式5、组外观模式6、组合模式
1、代理模式
2、适配器模式
3、装饰器模式
4、桥接模式
5、组外观模式
6、组合模式

]]></description><category></category></item><item><title><![CDATA[创建型设计模式总结]]></title><link>https://blog.youkuaiyun.com/sinat_28809019/article/details/119488530</link><guid>https://blog.youkuaiyun.com/sinat_28809019/article/details/119488530</guid><author>sinat_28809019</author><pubDate>Sat, 07 Aug 2021 16:30:41 +0800</pubDate><description><![CDATA[创建型设计模式1、单例模式1.1 饿汉式 （静态常量）1.2 饿汉式（静态代码块）1.3懒汉式 线程不安全1.4 懒汉式 线程安全，同步方法1.5 懒汉式 线程安全，同步代码块1.6 双重检查【推荐】1.7 静态内部类【推荐】1.8枚举【推荐】2、工厂模式（简单工厂、抽象工厂、工厂方法）
1、单例模式
  所谓类的单例设计模式，就是采取一定的方法保证在整个的软件系统中，对某个类只能存在一个对象实例 ，并且该类只提供一个取得其对象实例的方法静态方法 。
1.1 饿汉式 （静态常量）
  结论：可用，类加载时创]]></description><category></category></item></channel></rss>