<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[di_ko的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/di_ko</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; di_ko]]></copyright><item><title><![CDATA[470. 用 Rand7() 实现 Rand10()]]></title><link>https://blog.youkuaiyun.com/di_ko/article/details/123163502</link><guid>https://blog.youkuaiyun.com/di_ko/article/details/123163502</guid><author>di_ko</author><pubDate>Sun, 27 Feb 2022 14:12:00 +0800</pubDate><description><![CDATA[思路：

1、用Rand10()实现Rand7()比较容易（大数实现小数）：

第一次就命中的p：7/10

第二次命中的p：3/10+7/10

第三次命中的p：+

以此类推：根据等比数列公式得出：





2、用Rand7()实现Rand10()（小数实现大数）：

将小数映射为大数，并且要求在区间[x,y]内得数都能等概率获得

(RandX()-1)*X+RandY()可以等概率获得区间[1,X*Y]内的数



3、现在只有Rand7()，则第一步：(Rand7()-1)*7+Rand7()得]]></description><category></category></item><item><title><![CDATA[Spring Session 利用 Redis来支持HttpSession]]></title><link>https://blog.youkuaiyun.com/di_ko/article/details/122238268</link><guid>https://blog.youkuaiyun.com/di_ko/article/details/122238268</guid><author>di_ko</author><pubDate>Thu, 30 Dec 2021 15:36:59 +0800</pubDate><description><![CDATA[1、配置Config


@EnableRedisHttpSession
public class SessionConfig{
	@Bean
	public LettuceConnectionFactory connectionFactory(){
		return new LettuceConnectionFactory();
	}
}

@EnableRedisHttpSession注解的作用：

1）创建了一个Spring Bean

2）springSessionRepositoryFilter过]]></description><category></category></item><item><title><![CDATA[Springboot中获取路径的方式]]></title><link>https://blog.youkuaiyun.com/di_ko/article/details/122230407</link><guid>https://blog.youkuaiyun.com/di_ko/article/details/122230407</guid><author>di_ko</author><pubDate>Thu, 30 Dec 2021 10:41:50 +0800</pubDate><description><![CDATA[前置条件：

http://127.0.0.1:9001/aiforce/authentication/sso





1）request.getContextPath()

/aiforce



2）request.getServletPath()

/authentication/sso

只返回传递到servlet的路径



3）request.getPathInfo()

/authentication/sso

只返回传递到servlet的路径



4）request.getRequest]]></description><category></category></item><item><title><![CDATA[518. 零钱兑换 II（中等）]]></title><link>https://blog.youkuaiyun.com/di_ko/article/details/119395056</link><guid>https://blog.youkuaiyun.com/di_ko/article/details/119395056</guid><author>di_ko</author><pubDate>Wed, 04 Aug 2021 22:51:09 +0800</pubDate><description><![CDATA[思路：

背包问题，选和不选两种选择



代码：

二维数组


class Solution {
    public int change(int amount, int[] coins) {
		int n=coins.length;
		int[][] dp=new int[n+1][amount+1];
		
		for(int i=0;i&lt;=n;i++){
		//余额为0时只有“无为而治”一种解法
			dp[i][0]=1;
		}
		
		//注意这里是取得到n的，也取得到amo]]></description><category></category></item><item><title><![CDATA[亮点5：redis在项目中的运用]]></title><link>https://blog.youkuaiyun.com/di_ko/article/details/118652906</link><guid>https://blog.youkuaiyun.com/di_ko/article/details/118652906</guid><author>di_ko</author><pubDate>Sun, 11 Jul 2021 12:28:50 +0800</pubDate><description><![CDATA[]]></description><category></category></item><item><title><![CDATA[145. 二叉树的后序遍历（简单）]]></title><link>https://blog.youkuaiyun.com/di_ko/article/details/118110270</link><guid>https://blog.youkuaiyun.com/di_ko/article/details/118110270</guid><author>di_ko</author><pubDate>Tue, 22 Jun 2021 16:41:36 +0800</pubDate><description><![CDATA[思路：

递归

迭代（中等、难）



代码：


class Solution {
    public List&lt;Integer&gt; postorderTraversal(TreeNode root) {
		Deque&lt;TreeNode&gt; stack=new LinkedList&lt;&gt;();
		LinkedList&lt;Integer&gt; res=new LinkedList&lt;&gt;();
		if(root==null){
			return re.]]></description><category></category></item><item><title><![CDATA[144. 二叉树的前序遍历（简单）]]></title><link>https://blog.youkuaiyun.com/di_ko/article/details/118081960</link><guid>https://blog.youkuaiyun.com/di_ko/article/details/118081960</guid><author>di_ko</author><pubDate>Mon, 21 Jun 2021 10:58:32 +0800</pubDate><description><![CDATA[思路：

1.递归

2.迭代



代码：

递归：


class Solution {
    List&lt;Integer&gt; list=new ArrayList&lt;&gt;();
    public List&lt;Integer&gt; preorderTraversal(TreeNode root) {
		
		if(root==null){
			return new ArrayList&lt;&gt;();
		}
		
		list.add(root.val);
		p.]]></description><category></category></item><item><title><![CDATA[48. 旋转图像（中等）]]></title><link>https://blog.youkuaiyun.com/di_ko/article/details/118067677</link><guid>https://blog.youkuaiyun.com/di_ko/article/details/118067677</guid><author>di_ko</author><pubDate>Sun, 20 Jun 2021 11:25:18 +0800</pubDate><description><![CDATA[思路：

进行2次翻转即可：

水平翻转+主对角线翻转



代码：


class Solution {
    public void rotate(int[][] matrix) {
		int n=matrix.length;
		
		//水平翻转，只遍历行的一半即可
		for(int i=0;i&lt;n/2;i++){
			for(int j=0;j&lt;n;j++){
				int temp=matrix[i][j];
				matrix[i][j]=matrix[n-i-1][.]]></description><category></category></item><item><title><![CDATA[85. 最大矩形（困难）]]></title><link>https://blog.youkuaiyun.com/di_ko/article/details/118067251</link><guid>https://blog.youkuaiyun.com/di_ko/article/details/118067251</guid><author>di_ko</author><pubDate>Sun, 20 Jun 2021 10:56:57 +0800</pubDate><description><![CDATA[思路：

类比84题，是84题的延续：

相当于每一层都根据上一层加高度，每一层都算出最大面积



代码：


]]></description><category></category></item><item><title><![CDATA[电商系统架构图]]></title><link>https://blog.youkuaiyun.com/di_ko/article/details/118058182</link><guid>https://blog.youkuaiyun.com/di_ko/article/details/118058182</guid><author>di_ko</author><pubDate>Sat, 19 Jun 2021 19:41:19 +0800</pubDate><description><![CDATA[]]></description><category></category></item><item><title><![CDATA[21.秒杀服务（sentinel熔断降级）]]></title><link>https://blog.youkuaiyun.com/di_ko/article/details/118058080</link><guid>https://blog.youkuaiyun.com/di_ko/article/details/118058080</guid><author>di_ko</author><pubDate>Sat, 19 Jun 2021 19:40:21 +0800</pubDate><description><![CDATA[前端限流、恶意请求拦截：判断是否登录



秒杀系统有2种模式：

1）结合前面的订单服务，只是QPS增高了而已



2）方法二的流程：

判断登录--&gt;合法性校验--&gt;获取信号量--&gt;放入mq中





熔断：





降级：









限流：





熔断限流的功能使用spring cloud 的sentinel实现：









自定义拦截信息：







使用Sentinel保护Feign，也就是熔断：

先在xml中打开senti...]]></description><category></category></item><item><title><![CDATA[75. 颜色分类（中等）]]></title><link>https://blog.youkuaiyun.com/di_ko/article/details/118017497</link><guid>https://blog.youkuaiyun.com/di_ko/article/details/118017497</guid><author>di_ko</author><pubDate>Fri, 18 Jun 2021 10:30:03 +0800</pubDate><description><![CDATA[思路：

方法一：暴力

方法二：循环不变量



代码：

暴力


]]></description><category></category></item><item><title><![CDATA[239. 滑动窗口最大值（困难）]]></title><link>https://blog.youkuaiyun.com/di_ko/article/details/117949095</link><guid>https://blog.youkuaiyun.com/di_ko/article/details/117949095</guid><author>di_ko</author><pubDate>Wed, 16 Jun 2021 10:14:31 +0800</pubDate><description><![CDATA[思路：

优先队列



代码：


class Solution {
    public int[] maxSlidingWindow(int[] nums, int k) {
		int n=nums.length;
		//int[]数组中0为元素，1为下标
		PriorityQueue&lt;int[]&gt; queue=new PriorityQueue&lt;int[]&gt;(new Comparator&lt;int[]&gt;(){
			public int compare(in.]]></description><category></category></item><item><title><![CDATA[739. 每日温度（中等）]]></title><link>https://blog.youkuaiyun.com/di_ko/article/details/117948079</link><guid>https://blog.youkuaiyun.com/di_ko/article/details/117948079</guid><author>di_ko</author><pubDate>Wed, 16 Jun 2021 09:44:49 +0800</pubDate><description><![CDATA[思路：

使用栈，来存储不大于的温度的下标



代码：


class Solution {
    public int[] dailyTemperatures(int[] T) {
		int n=T.length;
		Deque&lt;Integer&gt; stack=new ArrayDeque&lt;&gt;();
		stack.addLast(0);
		
		int[] res=new int[n];
		for(int i=1;i&lt;n;i++){
			//栈中存的是下标
	.]]></description><category></category></item><item><title><![CDATA[617. 合并二叉树（简单）]]></title><link>https://blog.youkuaiyun.com/di_ko/article/details/117947159</link><guid>https://blog.youkuaiyun.com/di_ko/article/details/117947159</guid><author>di_ko</author><pubDate>Wed, 16 Jun 2021 09:23:02 +0800</pubDate><description><![CDATA[思路：

深度优先遍历

分别遍历两个二叉树的左节点，右节点，分别相加



代码：


class Solution {
    public TreeNode mergeTrees(TreeNode root1, TreeNode root2) {
		if(root1==null){
			return root2;
		}
		if(root2==null){
			return root1;
		}
		
		TreeNode merge=new TreeNode(root1.val+root2.]]></description><category></category></item><item><title><![CDATA[581. 最短无序连续子数组（中等）]]></title><link>https://blog.youkuaiyun.com/di_ko/article/details/117920419</link><guid>https://blog.youkuaiyun.com/di_ko/article/details/117920419</guid><author>di_ko</author><pubDate>Tue, 15 Jun 2021 16:41:44 +0800</pubDate><description><![CDATA[思路：

1.创建一个新array，保存排好序的数组，逐个比较哪个下标的值变化了

2.双指针



代码：


public class Solution {
    public int findUnsortedSubarray(int[] nums) {
		int min=Integer.MAX_VALUE,max=Integer.MIN_VALUE;
		boolean flag=false;
		
		for(int i=1;i&lt;nums.length;i++){
			if(nums[.]]></description><category></category></item><item><title><![CDATA[543. 二叉树的直径（简单）]]></title><link>https://blog.youkuaiyun.com/di_ko/article/details/117918716</link><guid>https://blog.youkuaiyun.com/di_ko/article/details/117918716</guid><author>di_ko</author><pubDate>Tue, 15 Jun 2021 09:51:19 +0800</pubDate><description><![CDATA[思路：

后序遍历，只是直径指的是边，而不是节点的个数



代码：


class Solution {
	int max=0;
    public int diameterOfBinaryTree(TreeNode root) {
		depth(root);
		return max;
    }
	
	private int depth(TreeNode root){
		if(root==null){
			return 0;
		}
		
		int left=depth(root.left.]]></description><category></category></item><item><title><![CDATA[647. 回文子串（中等）]]></title><link>https://blog.youkuaiyun.com/di_ko/article/details/117898977</link><guid>https://blog.youkuaiyun.com/di_ko/article/details/117898977</guid><author>di_ko</author><pubDate>Mon, 14 Jun 2021 11:02:59 +0800</pubDate><description><![CDATA[思路：

借鉴5.最长回文字串的写法



代码：


class Solution {
    public int countSubstrings(String s) {
		int len=s.length();
		// if(len&lt;2){
		// 	return 1;
		// }
		int count=0;
		boolean[][] dp=new boolean[len][len];
		
		//初始化
		for(int i=0;i&lt;len;i++){
			dp[i].]]></description><category></category></item><item><title><![CDATA[560. 和为K的子数组（中等）]]></title><link>https://blog.youkuaiyun.com/di_ko/article/details/117898660</link><guid>https://blog.youkuaiyun.com/di_ko/article/details/117898660</guid><author>di_ko</author><pubDate>Mon, 14 Jun 2021 10:45:30 +0800</pubDate><description><![CDATA[思路：

1.前缀和

2.前缀和+哈希表



代码：

前缀和


class Solution {
    public int subarraySum(int[] nums, int k) {
		int n=nums.length;
		int sum=0;
		
		int[] dp=new int[n+1];
		dp[0]=0;
		
		//计算前缀和
		for(int i=1;i&lt;=n;i++){
			//dp[i]代表不包括当前数nums[i]的前缀和
			dp[i]=d.]]></description><category></category></item><item><title><![CDATA[494. 目标和（中等）]]></title><link>https://blog.youkuaiyun.com/di_ko/article/details/117898376</link><guid>https://blog.youkuaiyun.com/di_ko/article/details/117898376</guid><author>di_ko</author><pubDate>Mon, 14 Jun 2021 10:06:01 +0800</pubDate><description><![CDATA[思路：

0-1背包问题，回溯（深度优先遍历）



代码：


class Solution {
	int count=0;
    public int findTargetSumWays(int[] nums, int target) {
		dfs(nums,target,0,0);
		return count;
    }
	
	private void dfs(int[] nums,int target,int index,int sum){
		//index==nums.length表示.]]></description><category></category></item></channel></rss>