<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[JaysenLeo]]></title><description><![CDATA[一个关于星辰大海的故事]]></description><link>https://blog.youkuaiyun.com/ChangerJJLee</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; ChangerJJLee]]></copyright><item><title><![CDATA[77_组合]]></title><link>https://blog.youkuaiyun.com/ChangerJJLee/article/details/135832034</link><guid>https://blog.youkuaiyun.com/ChangerJJLee/article/details/135832034</guid><author>ChangerJJLee</author><pubDate>Wed, 24 Jan 2024 21:52:42 +0800</pubDate><description><![CDATA[给定两个整数 n 和 k，返回范围[1, n]中所有可能的 k 个数的组合。你可以按任何顺序返回答案。]]></description><category></category></item><item><title><![CDATA[MySQL自增主键为何不连续]]></title><link>https://blog.youkuaiyun.com/ChangerJJLee/article/details/135722862</link><guid>https://blog.youkuaiyun.com/ChangerJJLee/article/details/135722862</guid><author>ChangerJJLee</author><pubDate>Sat, 20 Jan 2024 22:19:04 +0800</pubDate><description><![CDATA[自增值的存储原理

MyISAM引擎的自增值保存在数据文件中
InnoDB引擎的自增值，保存在内存里

MySQL 8.0版本后，才有了“自增值持久化”的能力，实现了“如果发生重启，表的自增值可以恢复为MySQL重启前的值”，具体情况是，在MySQL 8.0版本，将自增值的变更记录在了redo log中，重启的时候依靠redo log恢复重启之前的值
MySQL 5.7及之前版本，自增值保存在内存里，没有持久化。所以，每次重启后打开表时，都会去找当前自增值的最大值max(id)，然后将max(id)+1作为]]></description><category></category></item><item><title><![CDATA[53_最大子数组和]]></title><link>https://blog.youkuaiyun.com/ChangerJJLee/article/details/135638227</link><guid>https://blog.youkuaiyun.com/ChangerJJLee/article/details/135638227</guid><author>ChangerJJLee</author><pubDate>Tue, 16 Jan 2024 23:51:27 +0800</pubDate><description><![CDATA[给你一个整数数组 nums ，请你找出一个具有最大和的连续子数组（子数组最少包含一个元素），返回其最大和。子数组 是数组中的一个连续部分。]]></description><category></category></item><item><title><![CDATA[121_买卖股票的最佳时机]]></title><link>https://blog.youkuaiyun.com/ChangerJJLee/article/details/135637985</link><guid>https://blog.youkuaiyun.com/ChangerJJLee/article/details/135637985</guid><author>ChangerJJLee</author><pubDate>Tue, 16 Jan 2024 23:19:48 +0800</pubDate><description><![CDATA[数组开始递减的时候会找最小值，这个时候如果卖，那么卖的利润在降低，只有开始递增的时候计算差值，这个时候利润在升高，这个时候买入成本在升高。你只能选择某一天买入这只股票，并选择在未来的某一个不同的日子卖出该股票。设计一个算法来计算你所能获取的最大利润。给定一个数组 prices ，它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润，返回 0。]]></description><category></category></item><item><title><![CDATA[637_二叉树的层平均值]]></title><link>https://blog.youkuaiyun.com/ChangerJJLee/article/details/135636352</link><guid>https://blog.youkuaiyun.com/ChangerJJLee/article/details/135636352</guid><author>ChangerJJLee</author><pubDate>Tue, 16 Jan 2024 21:50:17 +0800</pubDate><description><![CDATA[给定一个非空二叉树的根节点 root , 以数组的形式返回每一层节点的平均值。与实际答案相差 10-5 以内的答案可以被接受。]]></description><category></category></item><item><title><![CDATA[515_在每个树行中找最大值]]></title><link>https://blog.youkuaiyun.com/ChangerJJLee/article/details/135635913</link><guid>https://blog.youkuaiyun.com/ChangerJJLee/article/details/135635913</guid><author>ChangerJJLee</author><pubDate>Tue, 16 Jan 2024 21:30:15 +0800</pubDate><description><![CDATA[给定一棵二叉树的根节点 root ，请找出该二叉树中每一层的最大值。1.层遍历时记录最大值。]]></description><category></category></item><item><title><![CDATA[199_二叉树的右视图]]></title><link>https://blog.youkuaiyun.com/ChangerJJLee/article/details/135635263</link><guid>https://blog.youkuaiyun.com/ChangerJJLee/article/details/135635263</guid><author>ChangerJJLee</author><pubDate>Tue, 16 Jan 2024 21:06:02 +0800</pubDate><description><![CDATA[给定一个二叉树的 根节点 root，想象自己站在它的右侧，按照从顶部到底部的顺序，返回从右侧所能看到的节点值。]]></description><category></category></item><item><title><![CDATA[103_二叉树的锯齿形层序遍历]]></title><link>https://blog.youkuaiyun.com/ChangerJJLee/article/details/135634672</link><guid>https://blog.youkuaiyun.com/ChangerJJLee/article/details/135634672</guid><author>ChangerJJLee</author><pubDate>Tue, 16 Jan 2024 20:40:31 +0800</pubDate><description><![CDATA[给你二叉树的根节点 root ，返回其节点值的 锯齿形层序遍历。（即先从左往右，再从右往左进行下一层遍历，以此类推，层与层之间交替进行）。利用双端队列的两端皆可添加元素的特性，设打印列表（双端队列）q。奇数层 则添加至 q 尾部。偶数层 则添加至 q 头部。]]></description><category></category></item><item><title><![CDATA[BFS（广度优先搜索）_层序遍历&最短路径_总结]]></title><link>https://blog.youkuaiyun.com/ChangerJJLee/article/details/135634126</link><guid>https://blog.youkuaiyun.com/ChangerJJLee/article/details/135634126</guid><author>ChangerJJLee</author><pubDate>Tue, 16 Jan 2024 20:17:34 +0800</pubDate><description><![CDATA[层序遍历
LeetCode 102. Binary Tree Level Order Traversal 二叉树的层序遍历（中等）
LeetCode 103. Binary Tree Zigzag Level Order Traversal 之字形层序遍历
LeetCode 199. Binary Tree Right Side View 找每一层的最右结点
LeetCode 515. Find Largest Value in Each Tree Row 计算每一层的最大值
LeetCode 637. A]]></description><category></category></item><item><title><![CDATA[docker命令拾遗(二)]]></title><link>https://blog.youkuaiyun.com/ChangerJJLee/article/details/120753207</link><guid>https://blog.youkuaiyun.com/ChangerJJLee/article/details/120753207</guid><author>ChangerJJLee</author><pubDate>Wed, 13 Oct 2021 21:50:49 +0800</pubDate><description><![CDATA[docker run ：创建一个新的容器并运行一个命令
语法
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

OPTIONS说明：
-a stdin: 指定标准输入输出内容类型，可选 STDIN/STDOUT/STDERR 三项；

-d: 后台运行容器，并返回容器ID；

-i: 以交互模式运行容器，通常与 -t 同时使用；

-P: 随机端口映射，容器内部端口随机映射到主机的端口

-p: 指定端口映射，格式为：主机(宿主)端口:容器端口

-t: 为容器重]]></description><category></category></item><item><title><![CDATA[go clone 大仓库导致Timeout]]></title><link>https://blog.youkuaiyun.com/ChangerJJLee/article/details/119920211</link><guid>https://blog.youkuaiyun.com/ChangerJJLee/article/details/119920211</guid><author>ChangerJJLee</author><pubDate>Wed, 25 Aug 2021 21:47:21 +0800</pubDate><description><![CDATA[先拉主库
git clone --depth 1 https://github.com/xxx/xxx.git

在拉其他分支
git fetch --depth 1 origin remote_other_branch

ref

git clone --depth=1时的一些问题


]]></description><category></category></item><item><title><![CDATA[编译时注入变量]]></title><link>https://blog.youkuaiyun.com/ChangerJJLee/article/details/119918782</link><guid>https://blog.youkuaiyun.com/ChangerJJLee/article/details/119918782</guid><author>ChangerJJLee</author><pubDate>Wed, 25 Aug 2021 21:10:11 +0800</pubDate><description><![CDATA[原理

golang程序在build时自动生成版本信息，使用 ./main --version可以查看版本和build时间
使用链接选项-X设置一个二进制文件中可以访问的变量

源码
package main

import (
	"fmt"
	"os"
	"github.com/deckarep/golang-set"
)

var version = "no version"

func main() {
	params := os.Args[1:]
	if len(params) == 0 {
		r]]></description><category></category></item><item><title><![CDATA[110_平衡二叉树]]></title><link>https://blog.youkuaiyun.com/ChangerJJLee/article/details/119918660</link><guid>https://blog.youkuaiyun.com/ChangerJJLee/article/details/119918660</guid><author>ChangerJJLee</author><pubDate>Wed, 25 Aug 2021 20:17:08 +0800</pubDate><description><![CDATA[// 给定一个二叉树，判断它是否是高度平衡的二叉树。
// 本题中，一棵高度平衡二叉树定义为：
// 一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。
package main

import "math"

/**
 * Definition for a binary tree node.
 */
type TreeNode struct {
	Val   int
	Left  *TreeNode
	Right *TreeNode
}

func isBalanced(node *Tree]]></description><category></category></item><item><title><![CDATA[107_二叉树的层序遍历 II]]></title><link>https://blog.youkuaiyun.com/ChangerJJLee/article/details/119918630</link><guid>https://blog.youkuaiyun.com/ChangerJJLee/article/details/119918630</guid><author>ChangerJJLee</author><pubDate>Wed, 25 Aug 2021 20:14:27 +0800</pubDate><description><![CDATA[package main

/**
 * Definition for a binary tree node.
 */
type TreeNode struct {
	Val   int
	Left  *TreeNode
	Right *TreeNode
}

func levelOrderBottom(root *TreeNode) [][]int {
	//深度优先遍历(dfs)
	result := make([][]int, 0)
	var preorder func(node *TreeNode,]]></description><category></category></item><item><title><![CDATA[104_二叉树的最大深度]]></title><link>https://blog.youkuaiyun.com/ChangerJJLee/article/details/119918598</link><guid>https://blog.youkuaiyun.com/ChangerJJLee/article/details/119918598</guid><author>ChangerJJLee</author><pubDate>Wed, 25 Aug 2021 20:13:17 +0800</pubDate><description><![CDATA[package main

/**
 * Definition for a binary tree node.
 */

type TreeNode struct {
	Val   int
	Left  *TreeNode
	Right *TreeNode
}

func maxDepth(root *TreeNode) int {
	if root == nil {
		return 0
	}
	l := maxDepth(root.Left)
	r := maxDepth(root.Right)
	//]]></description><category></category></item><item><title><![CDATA[102_二叉树的层序遍历]]></title><link>https://blog.youkuaiyun.com/ChangerJJLee/article/details/119918547</link><guid>https://blog.youkuaiyun.com/ChangerJJLee/article/details/119918547</guid><author>ChangerJJLee</author><pubDate>Wed, 25 Aug 2021 20:11:17 +0800</pubDate><description><![CDATA[方法一
package main

/**
 * Definition for a binary tree node.
 */
type TreeNode struct {
	Val   int
	Left  *TreeNode
	Right *TreeNode
}

// 总结： 前序遍历，遍历时记录层级，记录层级的值
func levelOrder(root *TreeNode) (res [][]int) {
	var preorder func(node *TreeNode, depath int)]]></description><category></category></item><item><title><![CDATA[range切片与数组的原理]]></title><link>https://blog.youkuaiyun.com/ChangerJJLee/article/details/109756617</link><guid>https://blog.youkuaiyun.com/ChangerJJLee/article/details/109756617</guid><author>ChangerJJLee</author><pubDate>Tue, 17 Nov 2020 22:45:54 +0800</pubDate><description><![CDATA[是否会出现无限循环

package main

import "fmt"

func main() {
	v := []int{1, 2, 3}
	for i := range v {
		v = append(v, i)
	}
	fmt.Println(v)
}


输出

[1 2 3 0 1 2]


原理


在遍历切片的时候，range语句声明之初，就将切片已经copy了一份，长度和内容

// The loop we generate:
//   for_temp := range
//  .]]></description><category></category></item><item><title><![CDATA[指针问题 之 range]]></title><link>https://blog.youkuaiyun.com/ChangerJJLee/article/details/109754561</link><guid>https://blog.youkuaiyun.com/ChangerJJLee/article/details/109754561</guid><author>ChangerJJLee</author><pubDate>Tue, 17 Nov 2020 21:40:08 +0800</pubDate><description><![CDATA[问题代码

package main

import "fmt"

type user struct {
	name string
	sex uint // 1 男 0 女
}

func main() {
	u := []user{
		{"Jansen",1},
		{"Lee",1},
		{"Leo Lee",0},
	}
	n := make([]*user,0,len(u))
	for _,v := range u{
		n = append(n, &amp;v)
	}
	fmt.Printl.]]></description><category></category></item><item><title><![CDATA[race问题]]></title><link>https://blog.youkuaiyun.com/ChangerJJLee/article/details/109689026</link><guid>https://blog.youkuaiyun.com/ChangerJJLee/article/details/109689026</guid><author>ChangerJJLee</author><pubDate>Sat, 14 Nov 2020 14:56:56 +0800</pubDate><description><![CDATA[package main

import "fmt"

func main() {
	total, sum := 0, 0
	for i := 1; i &lt;= 10; i++ {
		sum += i
		go func() {
			total += i
		}()
	}
	fmt.Printf("total:%d sum %d", total, sum)
}


第一个问题 total 为不确定值（不是你想要的），因为total的写入是在协程里，并且增量i是闭包直接带入，加之协程的调度并非顺序导致]]></description><category></category></item><item><title><![CDATA[微服务之Go-Micro（九）服务熔断和降级 hystrix-go 初见]]></title><link>https://blog.youkuaiyun.com/ChangerJJLee/article/details/109687850</link><guid>https://blog.youkuaiyun.com/ChangerJJLee/article/details/109687850</guid><author>ChangerJJLee</author><pubDate>Sat, 14 Nov 2020 11:06:17 +0800</pubDate><description><![CDATA[环境准备


github.com/afex/hystrix-go/hystrix
本工程源码地址


在装饰器出构建熔断降级逻辑

package wapper

import (
	"context"
	"fmt"
	"github.com/afex/hystrix-go/hystrix"
	"github.com/micro/go-micro/v2/client"
	"github.com/micro/go-micro/v2/metadata"
	"go-micro-service/service/.]]></description><category></category></item></channel></rss>