<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[BetterCbx的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/cbxazm</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; cbxazm]]></copyright><item><title><![CDATA[数据库事务并发问题求解答]]></title><link>https://blog.youkuaiyun.com/cbxazm/article/details/118256182</link><guid>https://blog.youkuaiyun.com/cbxazm/article/details/118256182</guid><author>cbxazm</author><pubDate>Sat, 26 Jun 2021 23:19:54 +0800</pubDate><description><![CDATA[这是我的数据库

这里我开启两个事务，数据库默认是RR隔离级别的。


]]></description><category></category></item><item><title><![CDATA[生成合法的括号]]></title><link>https://blog.youkuaiyun.com/cbxazm/article/details/109398703</link><guid>https://blog.youkuaiyun.com/cbxazm/article/details/109398703</guid><author>cbxazm</author><pubDate>Sat, 31 Oct 2020 10:08:14 +0800</pubDate><description><![CDATA[给定一个数字n，生成包含2n括号的合法序列
n=3
[((())), (()()), (())(), ()(()), ()()()]
暴力法
public List&lt;String&gt; generateParenthesis(int n ){
   List&lt;String&gt; res=new ArrayList&lt;&gt;();
   generateAll(new char[n*2],res,0);
   return res;
}

private void generateAll]]></description><category></category></item><item><title><![CDATA[树的前序遍历方法]]></title><link>https://blog.youkuaiyun.com/cbxazm/article/details/109307624</link><guid>https://blog.youkuaiyun.com/cbxazm/article/details/109307624</guid><author>cbxazm</author><pubDate>Tue, 27 Oct 2020 11:47:04 +0800</pubDate><description><![CDATA[递归
package com.cbx;

import com.cbx.LeetCode.树.TreeNode;

import java.util.ArrayList;
import java.util.List;

/**
 * @Author:cbx
 * @Date:2020/10/27/11:25
 */
public class preOrder {

    public List&lt;Integer&gt; preorderTraversal(TreeNode root) {
      ]]></description><category></category></item><item><title><![CDATA[整数转罗马数字]]></title><link>https://blog.youkuaiyun.com/cbxazm/article/details/109258657</link><guid>https://blog.youkuaiyun.com/cbxazm/article/details/109258657</guid><author>cbxazm</author><pubDate>Sat, 24 Oct 2020 14:03:30 +0800</pubDate><description><![CDATA[罗马数字包含以下七种字符： I， V， X， L，C，D 和 M。
字符          数值
I             1
V             5
X             10
L             50
C             100
D             500
M             1000

例如， 罗马数字 2 写做 II ，即为两个并列的 1。12 写做 XII ，即为 X + II 。 27 写做  XXVII, 即为 XX + V + II 。

通常]]></description><category></category></item><item><title><![CDATA[查找共同的字符串]]></title><link>https://blog.youkuaiyun.com/cbxazm/article/details/109258339</link><guid>https://blog.youkuaiyun.com/cbxazm/article/details/109258339</guid><author>cbxazm</author><pubDate>Sat, 24 Oct 2020 13:38:42 +0800</pubDate><description><![CDATA[“bella”,“abe”,“roer”
结果返回 e
public List&lt;String&gt; commonChars(String[] A) {
        int[] minfreq = new int[26];
        Arrays.fill(minfreq, Integer.MAX_VALUE);
        for (String word: A) {
            int[] freq = new int[26];
            int lengt]]></description><category></category></item><item><title><![CDATA[回退字符串]]></title><link>https://blog.youkuaiyun.com/cbxazm/article/details/109258118</link><guid>https://blog.youkuaiyun.com/cbxazm/article/details/109258118</guid><author>cbxazm</author><pubDate>Sat, 24 Oct 2020 13:32:05 +0800</pubDate><description><![CDATA[遇到#就后退一个字符串
“a##c” =="#a#c"
“y#fo##f” ==“y#f#o##f”
"#c"意思是这种情况就是生成 c
利用栈
 /**
     * 利用栈操作 开辟了额外的空间
     * @param S
     * @param T
     * @return
     */
    public boolean backspaceCompare(String S, String T) {
           return newStr(S).equals(newStr(T]]></description><category></category></item><item><title><![CDATA[划分字符串--尽可能多的划分片段]]></title><link>https://blog.youkuaiyun.com/cbxazm/article/details/109257888</link><guid>https://blog.youkuaiyun.com/cbxazm/article/details/109257888</guid><author>cbxazm</author><pubDate>Sat, 24 Oct 2020 13:03:42 +0800</pubDate><description><![CDATA[字符串 S 由小写字母组成。我们要把这个字符串划分为尽可能多的片段，同一字母最多出现在一个片段中。返回一个表示每个字符串片段的长度的列表
输入：S = “ababcbacadefegdehijhklij”
输出：[9,7,8]
解释：
划分结果为 “ababcbaca”, “defegde”, “hijhklij”。
每个字母最多出现在一个片段中。
像 “ababcbacadefegde”, “hijhklij” 的划分是错误的，因为划分的片段数较少。
public List&lt;Integer&gt; ]]></description><category></category></item><item><title><![CDATA[首尾交换链表]]></title><link>https://blog.youkuaiyun.com/cbxazm/article/details/109229667</link><guid>https://blog.youkuaiyun.com/cbxazm/article/details/109229667</guid><author>cbxazm</author><pubDate>Thu, 22 Oct 2020 20:18:02 +0800</pubDate><description><![CDATA[1-&gt;2-&gt;3-&gt;4-&gt;5 ==&gt; 1-&gt;5-&gt;2-&gt;4-&gt;3
使用线性表
将节点依次放入集合中，通过索引交换
 /**
     * 将链表的节点放入顺序表中，这样方便获取最后一个节点
     * 1-&gt;2-&gt;3-&gt;4
     * 1-&gt;4-&gt;2-&gt;3
     */
    public void recordList(ListNode head){
        if (head==null) return]]></description><category></category></item><item><title><![CDATA[两两交换链表中的节点]]></title><link>https://blog.youkuaiyun.com/cbxazm/article/details/109229535</link><guid>https://blog.youkuaiyun.com/cbxazm/article/details/109229535</guid><author>cbxazm</author><pubDate>Thu, 22 Oct 2020 20:13:24 +0800</pubDate><description><![CDATA[1-&gt;2-&gt;3-&gt;4-&gt;5 ==》 2-&gt;1-&gt;4-&gt;3-&gt;5
非递归求解
public ListNode swapPairs(ListNode head) {
        if (head==null||head.next==null) return head;
           ListNode pre=new ListNode(0);
           pre.next=head;
           ListNode temp=pre;
]]></description><category></category></item><item><title><![CDATA[java设计模式之观察者模式]]></title><link>https://blog.youkuaiyun.com/cbxazm/article/details/109220600</link><guid>https://blog.youkuaiyun.com/cbxazm/article/details/109220600</guid><author>cbxazm</author><pubDate>Thu, 22 Oct 2020 14:19:15 +0800</pubDate><description><![CDATA[定义
定义了对象之间的一对多依赖，让多个观察者对象同时监听某一个主题对象，
当主题对象发生变化时，它的所有依赖者收到通知并更新

package com.cbx.Observer;

import java.util.ArrayList;
import java.util.List;

/**
 * @Author:cbx
 * @Date:2020/10/22/14:02
 */
public class ObserverTest {
    public static void main(String[]]></description><category></category></item><item><title><![CDATA[反转链表]]></title><link>https://blog.youkuaiyun.com/cbxazm/article/details/109219962</link><guid>https://blog.youkuaiyun.com/cbxazm/article/details/109219962</guid><author>cbxazm</author><pubDate>Thu, 22 Oct 2020 13:20:49 +0800</pubDate><description><![CDATA[给定一个链表进行反转
1-&gt;2-&gt;3-&gt;4-&gt;null
null-&gt;4-&gt;3-&gt;2-&gt;1
双指针法
   public ListNode reverseList2(ListNode head){
         ListNode pre=null;
         ListNode cur=head;
         ListNode temp;
         while (cur!=null){
             temp=cur.next]]></description><category></category></item><item><title><![CDATA[回文子串]]></title><link>https://blog.youkuaiyun.com/cbxazm/article/details/109170638</link><guid>https://blog.youkuaiyun.com/cbxazm/article/details/109170638</guid><author>cbxazm</author><pubDate>Mon, 19 Oct 2020 22:20:26 +0800</pubDate><description><![CDATA[https://leetcode-cn.com/problems/palindromic-substrings/
输入：“aaa”
输出：6
解释：6个回文子串: “a”, “a”, “a”, “aa”, “aa”, “aaa”
package com.cbx.LeetCode.动态规划;

/**
 * @Author:cbx
 * @Date:2020/09/14/18:50
 * https://leetcode-cn.com/problems/palindromic-substrings/solut]]></description><category></category></item><item><title><![CDATA[Try catch fianlly包含return的情况]]></title><link>https://blog.youkuaiyun.com/cbxazm/article/details/109158990</link><guid>https://blog.youkuaiyun.com/cbxazm/article/details/109158990</guid><author>cbxazm</author><pubDate>Mon, 19 Oct 2020 13:41:08 +0800</pubDate><description><![CDATA[在我们的常规开发中，如果代码被try catch finally包含，发生异常之后，先去执行catch块，去处理一些逻辑，然后再执行finally块，一般用于关闭一些资源。
但是在含有return关键字后，就会出现一些不一样的情况。
1.正常情况
  //1.正常情况
    public void demo1(){
        try {
            int i=1/0;
        } catch (Exception e) {
            System.out.prin]]></description><category></category></item><item><title><![CDATA[欧几里得算法(求最大公约数)]]></title><link>https://blog.youkuaiyun.com/cbxazm/article/details/109122061</link><guid>https://blog.youkuaiyun.com/cbxazm/article/details/109122061</guid><author>cbxazm</author><pubDate>Fri, 16 Oct 2020 18:42:18 +0800</pubDate><description><![CDATA[package com.cbx;

/**
 * @Author:cbx
 * @Date:2020/10/16/18:36
 * 求最大公约数的经典算法
 */
public class BiggestCommonDivisor {
        public  static int commonDivisor(int m,int n){
                       if (n==0) return m;
                       int r=m%n;
      ]]></description><category></category></item><item><title><![CDATA[List可以边遍历边删除吗？]]></title><link>https://blog.youkuaiyun.com/cbxazm/article/details/109114459</link><guid>https://blog.youkuaiyun.com/cbxazm/article/details/109114459</guid><author>cbxazm</author><pubDate>Fri, 16 Oct 2020 15:22:46 +0800</pubDate><description><![CDATA[当问到List几个一边遍历一边删除时我想第一时间就会写出以下的代码

/**
 * @Author:cbx
 * @Date:2020/10/16/13:12
 */
public class TestList {
    public static void main(String[] args) {
        List&lt;String&gt; resList=new ArrayList&lt;&gt;();
        resList.add("james");
        resLi]]></description><category></category></item><item><title><![CDATA[ThreadLocal分析以及其解决的问题]]></title><link>https://blog.youkuaiyun.com/cbxazm/article/details/109050608</link><guid>https://blog.youkuaiyun.com/cbxazm/article/details/109050608</guid><author>cbxazm</author><pubDate>Tue, 13 Oct 2020 20:16:39 +0800</pubDate><description><![CDATA[什么是ThreadLocal
ThreadLocal是线程变量，填充的变量属于当前线程。对于其他线程是隔离的，ThreadLocal为变量在每个线程中都创建了一个副本，那么每个线程可以访问自己内部的副本变量。
如何使用ThreadLocal
/**
 * @Author:cbx
 * @Date:2020/10/13/16:27
 */
public class TestThreadLocal {
    public static void main(String[] args) {
        Th]]></description><category></category></item><item><title><![CDATA[java设计模式之单例模式]]></title><link>https://blog.youkuaiyun.com/cbxazm/article/details/109049089</link><guid>https://blog.youkuaiyun.com/cbxazm/article/details/109049089</guid><author>cbxazm</author><pubDate>Tue, 13 Oct 2020 14:08:55 +0800</pubDate><description><![CDATA[单例模式（Singleton Pattern）是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式，它提供了一种创建对象的最佳方式。
这种模式涉及到一个单一的类，该类负责创建自己的对象，同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式，可以直接访问，不需要实例化该类的对象。
注意：
1、单例类只能有一个实例。
2、单例类必须自己创建自己的唯一实例。
3、单例类必须给所有其他对象提供这一实例。
饿汉式
特点：

线程安全
反射不安全
反序列化不安全
静态的变量，在序列化的过]]></description><category></category></item><item><title><![CDATA[java设计者模式之策略模式]]></title><link>https://blog.youkuaiyun.com/cbxazm/article/details/109038379</link><guid>https://blog.youkuaiyun.com/cbxazm/article/details/109038379</guid><author>cbxazm</author><pubDate>Tue, 13 Oct 2020 12:50:12 +0800</pubDate><description><![CDATA[Java设计者模式之策略模式从模拟一个鸭子项目开始鸭子超类合理的创建标题，有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能，丰富你的文章UML 图表FLowchart流程图导出与导入导出导入
从模拟一个鸭子项目开始
我们从面向对象的角度来设计鸭子超类，扩展超类
鸭子超类
/**
 * @Author:cbx
 * @Date]]></description><category></category></item></channel></rss>