<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[codecuter的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/codecuter</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; codecuter]]></copyright><item><title><![CDATA[商品分库分表后分页查询解决方案]]></title><link>https://blog.youkuaiyun.com/codecuter/article/details/136892908</link><guid>https://blog.youkuaiyun.com/codecuter/article/details/136892908</guid><author>codecuter</author><pubDate>Thu, 21 Mar 2024 01:52:23 +0800</pubDate><description><![CDATA[因为mysql非顺序存储，没有办法直接定位到具体的第n行，只能一行一行过滤，直到第n行。分库分表后，考虑基因法，如果依然有多维度查询，做数据冗余，有几个维度，冗余几份数据。单表深分页问题，如果id连续，通过标记法查询，如果不连续，通过子查询或者join的方式减少回表查询。但是有数据倾斜的问题，某些租户商品很多，热点商品也多。2.就算按照创建日志索引，减少回表，但是在深分页情况，依然需要扫描很多的数据。如果分表后，涉及非分表键的多维度查询，最好冗余数据，有几个维度，冗余几份。实际情况更复杂，最好ES查询。]]></description><category></category></item><item><title><![CDATA[java hashmap1.8扩容源码分析]]></title><link>https://blog.youkuaiyun.com/codecuter/article/details/136753811</link><guid>https://blog.youkuaiyun.com/codecuter/article/details/136753811</guid><author>codecuter</author><pubDate>Sat, 16 Mar 2024 06:09:24 +0800</pubDate><description><![CDATA[我们知道同一个index中的entry的hashcode在原put运算时，结果必然一致。同理cap转为2进制为n位，那么hashcode在n-1位上的特征值都是一样的，但是第n位不一样，刚好resize中就利用了第n位的特征值，用来区分是在原index还是在原index+oldcap。简单总结:扩容时需要计算新tab的容量和临界点，并且通过遍历tab的方式将每个entry放到新的tab中，在这个过程中，红黑树可能转换为链表。那么思考一下，这个下标计算方式，满足新的tab的put计算方式吗，是的。]]></description><category></category></item><item><title><![CDATA[go:自动生成gorm表结构体代码]]></title><link>https://blog.youkuaiyun.com/codecuter/article/details/135564316</link><guid>https://blog.youkuaiyun.com/codecuter/article/details/135564316</guid><author>codecuter</author><pubDate>Sat, 13 Jan 2024 00:36:27 +0800</pubDate><description><![CDATA[执行./gormt -g=true 使用gui运行程序，有其他方式运行具体见github。下载源代码，本人在mac下载最新会失败，建议去github找version下载。使用https://github.com/xxjwxc/gormt工具。在下载目录下执行make命令，不同系统对应。生成代码在./model下。生成二进制文件gormt。]]></description><category></category></item><item><title><![CDATA[mysql数据库,mybatis,mybatis-plus查询的注意事项]]></title><link>https://blog.youkuaiyun.com/codecuter/article/details/122805737</link><guid>https://blog.youkuaiyun.com/codecuter/article/details/122805737</guid><author>codecuter</author><pubDate>Mon, 07 Feb 2022 11:09:55 +0800</pubDate><description><![CDATA[List&lt;Product&gt; productList = productService.list(new LambdaQueryWrapper&lt;Product&gt;().in(Product::getProdId, prodIds));

简单说，mysql的查询会按照主键排序，当你需要参数的顺序关系时，请使用map，而不是直接for循环获取。
例子：
代码中的prodIds假设为 7，6，3
查询后的list id排序为3，6，7
如果此时你认为查询后的list还是按照之........]]></description><category></category></item><item><title><![CDATA[Git学习教程]]></title><link>https://blog.youkuaiyun.com/codecuter/article/details/121610840</link><guid>https://blog.youkuaiyun.com/codecuter/article/details/121610840</guid><author>codecuter</author><pubDate>Mon, 29 Nov 2021 15:18:51 +0800</pubDate><description><![CDATA[1.git 区域

使用git checkout命令，目录就是工作区，使用add命令，将文件添加到暂存区，commit把文件提交到本地分支上（本地仓库）。
2.git文件状态变化


Untracked：没有被git跟踪的文件
Unmodified:没有被修改的文件
Modified：修改后的文件
Staged：暂存文件

我们在一个目录下使用git init命令，会把当前目录初始化为一个git项目，其中的文件都将是untracked装状态。我们对未被跟踪的文件进行操作都只会是untracked状态。使用g]]></description><category></category></item><item><title><![CDATA[Tomcat调用解析（EndPoint分析）]]></title><link>https://blog.youkuaiyun.com/codecuter/article/details/121153435</link><guid>https://blog.youkuaiyun.com/codecuter/article/details/121153435</guid><author>codecuter</author><pubDate>Thu, 04 Nov 2021 23:10:40 +0800</pubDate><description><![CDATA[解析EndPoint调用过程：
我们已知整个tomcat组件都是通过LifeCycle接口下的LifeCycleBase模版方法init调用initInternal完成初始化，调用start方法运行。

LifeCycle

 LifeCycleBase



 		tomcat组件




那么EndPoint也不例外，不过EndPoint是通过Protocolhandler进行初始化的。
Protocolhandler则是通过Connector进行初始化。
其中Connector才继承了LifeCycl]]></description><category></category></item><item><title><![CDATA[java内部类引用外部变量]]></title><link>https://blog.youkuaiyun.com/codecuter/article/details/120837907</link><guid>https://blog.youkuaiyun.com/codecuter/article/details/120837907</guid><author>codecuter</author><pubDate>Tue, 19 Oct 2021 00:59:27 +0800</pubDate><description><![CDATA[今天学习AQS时，发现在main方法中实例一个ReentrantLock，在线程内部类能够直接使用，当时就很奇怪，因为按照自己的理解，想要使用外部的变量，一般都是通过类的方法传递。
后来查了下资料，方法中的内部类是可以直接使用外部变量的。
但是有个前提就是该变量必须是final或者effectively final的。
effectively final就是指变量初始化后没有被更改。
对于基础数据类型，就是值不能被更改。
对于引用类型，就是指向不能更改。
也就是说我们可以在内部类直接使用lock，但是不能更]]></description><category></category></item><item><title><![CDATA[银行家安全性算法实现（java）]]></title><link>https://blog.youkuaiyun.com/codecuter/article/details/120424776</link><guid>https://blog.youkuaiyun.com/codecuter/article/details/120424776</guid><author>codecuter</author><pubDate>Thu, 23 Sep 2021 00:02:28 +0800</pubDate><description><![CDATA[import java.util.Vector;
import java.util.function.DoubleToIntFunction;

public class BankerClass {
    int []resource = {10, 5, 7};
    int available[] = {3, 3, 2};
    int work[];
    int allow[][] = {{0, 1, 0}, {2, 0, 0}, {3, 0, 2}, {2, 1, 1}, {0, 0, 2.]]></description><category></category></item><item><title><![CDATA[DFS+递归全排序]]></title><link>https://blog.youkuaiyun.com/codecuter/article/details/120292514</link><guid>https://blog.youkuaiyun.com/codecuter/article/details/120292514</guid><author>codecuter</author><pubDate>Tue, 14 Sep 2021 17:40:49 +0800</pubDate><description><![CDATA[例：一个数组[1,2,3]全排序
我们可以采用递归的思想：
因为排序了第一个元素，剩下的两个元素也要排序。
[1],[2,3]=&gt;[2],[3]=&gt;[3],[]
[2],[1,3]=&gt;[1],[3]=&gt;…
[3],[1,2]=&gt;[1],[2]…

使用栈保存DFS时的元素，使用递归往下分离数组排序。
1.for循环根元素 例如上面3个元素 循环3次
2.除去本次循环次数对应元素 如i=0，取出a[0] 放入栈中
3.将剩下的元素递归
4.弹栈
5.当递归的数组长度为0时，输出栈]]></description><category></category></item><item><title><![CDATA[java 雪花算法改造（带日期格式）毫秒级]]></title><link>https://blog.youkuaiyun.com/codecuter/article/details/118528795</link><guid>https://blog.youkuaiyun.com/codecuter/article/details/118528795</guid><author>codecuter</author><pubDate>Tue, 06 Jul 2021 20:17:16 +0800</pubDate><description><![CDATA[import java.util.Date;

public class MySnowFlake {
    private long lastTimestamp = -1L;
    private int sequence;
    private final int sequenceMask=999;
    public MySnowFlake(Integer sequence){
        if (sequence&lt;0||sequence&gt;sequenceMask){
     ]]></description><category></category></item><item><title><![CDATA[Failed to decode downloaded font ,OTS parsing error: Failed to convert WOFF 2.0等问题]]></title><link>https://blog.youkuaiyun.com/codecuter/article/details/116503184</link><guid>https://blog.youkuaiyun.com/codecuter/article/details/116503184</guid><author>codecuter</author><pubDate>Fri, 07 May 2021 21:31:42 +0800</pubDate><description><![CDATA[第一个是配置maven过滤器。


src/main/resources
true

/*.woff
/.woff2
**/.ttf



src/main/resources
false

/*.woff
/.woff2
**/.ttf



有可能是你写的filter破坏了文件，所以过滤器排除掉这些文件。
第二个文件已被破坏，就去官网重新下载一份 。
第三 如果重启项目还没成功 。清除浏览器缓存，再访问页面

...]]></description><category></category></item><item><title><![CDATA[Spring源码阅读环境搭建-java: 程序包jdk.jfr不存在的报错解决方法]]></title><link>https://blog.youkuaiyun.com/codecuter/article/details/116177416</link><guid>https://blog.youkuaiyun.com/codecuter/article/details/116177416</guid><author>codecuter</author><pubDate>Mon, 26 Apr 2021 23:59:22 +0800</pubDate><description><![CDATA[下载Spring-Framework。
这个是 gitee spring镜像 每天更新一次
压缩后打开/gradle/wrapper下的properties文件
查看distributionUrl用的哪个版本的gradle 先到网上下载 然后使用下载的gradle包本地引入 不然直接下载很慢
我这里是gradle-6.8.3-bin.zip.
本地引入例子：distributionUrl=file:///H:/android/gradle-6.8.3-bin.zip
repositories修改：
repo]]></description><category></category></item><item><title><![CDATA[nginx配置踩坑]]></title><link>https://blog.youkuaiyun.com/codecuter/article/details/114555053</link><guid>https://blog.youkuaiyun.com/codecuter/article/details/114555053</guid><author>codecuter</author><pubDate>Mon, 08 Mar 2021 23:27:20 +0800</pubDate><description><![CDATA[如题：

留意我上面的红色框 文件地址 和 sublime ngingx.conf 没有原点表示已经保存
下面是 css js的统一代理到 localhost:8081下 （8081开启的是我后台的服务器 但是该无服务器对应路径并没有对应的js css文件) 所以按道理 如果浏览器 走了nginx代理 css js 是不会成功加载的
但是：

可以看出 配置确实没有生效 还是localhost:80
我怀疑是我改了 nginx.conf 没有重新启动nginx
所以现在我再去试一下

结果如第二张图 一样还]]></description><category></category></item><item><title><![CDATA[哈希表的概念和设计]]></title><link>https://blog.youkuaiyun.com/codecuter/article/details/107498142</link><guid>https://blog.youkuaiyun.com/codecuter/article/details/107498142</guid><author>codecuter</author><pubDate>Tue, 21 Jul 2020 20:33:36 +0800</pubDate><description><![CDATA[4.哈希表
1.哈希表的基本概念
哈希表适合用于储存一些关键字和存储地址存在某种函数关系的数据。
储存地址=h（key）；
这样储存元素的数据结构就叫做哈希表。
2.哈希表中的一些概念
1.哈希函数和哈希地址
假设存在m个储存空间，我们想要储存n个对象。
那么哈希函数h(k)就是把关键字为ki的对象储存在相应的哈希地址中。
此时的哈希表就是长度为m的（m&lt;=n）的内存单元。
2.哈希冲突
对于两个关键字ki和kj（i!=j），并且ki！=kj，但是h(ki)=h(kj)的现象兼做哈希冲突，也叫做同义词]]></description><category></category></item><item><title><![CDATA[网络编程的理解和TCP三次握手和四次挥手详解]]></title><link>https://blog.youkuaiyun.com/codecuter/article/details/107479304</link><guid>https://blog.youkuaiyun.com/codecuter/article/details/107479304</guid><author>codecuter</author><pubDate>Tue, 21 Jul 2020 01:16:38 +0800</pubDate><description><![CDATA[网络编程就是通过IP地址和端口号或者域名连接到另一台计算机上，使用规定的协议(HTTP)和数据传输方式(TCP/UDP)交换数据。
比如：使用套接字来达到进程间通信
TCP协议：
提供可靠的，端到端的字节流的通信。是一种面向连接的协议。是字节流而不是报文流。
UDP协议：
是一种无连接、不可靠的传输协议。发送的是IP数据包。
OSI模型
是一个用于计算机互联的标准体系。
一共分为七层：
物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。

TCP/IP五层模型

分别应用层、传输层、网络层、数据链]]></description><category></category></item><item><title><![CDATA[五种IO模型介绍]]></title><link>https://blog.youkuaiyun.com/codecuter/article/details/107432544</link><guid>https://blog.youkuaiyun.com/codecuter/article/details/107432544</guid><author>codecuter</author><pubDate>Sat, 18 Jul 2020 17:42:03 +0800</pubDate><description><![CDATA[IO模型介绍
1.阻塞IO模型

用户线程发送io请求，内核查看数据是否就绪，在数据就绪之前，用户线程处于阻塞状态，会交出CPU。当数据就绪之后，内核拷贝数据到用户线程，并返回成功提示，用户线程解除block状态。
典型例子：
socket.read();
2.非阻塞IO模型

用户发起read操作后，不用等待会立即得到一个结果，数据没有准备好时，得到的是error。当数据准备好后，并且用户线程发送了IO请求，内核就会拷贝数据到用户线程中。
与阻塞不同的点： 轮询会一直占用CPU，导致CPU的占用率很高。
]]></description><category></category></item><item><title><![CDATA[jquery ajax教程]]></title><link>https://blog.youkuaiyun.com/codecuter/article/details/105433492</link><guid>https://blog.youkuaiyun.com/codecuter/article/details/105433492</guid><author>codecuter</author><pubDate>Fri, 10 Apr 2020 15:03:42 +0800</pubDate><description><![CDATA[JQuery ajax
定义和用法
ajax() 方法通过 HTTP 请求加载远程数据。
$.ajax({
    url: "test.html",  //ajax请求地址
    cache: false,//(默认: true,dataType为script和jsonp时默认为false)设置为 false 将不缓存此页面，建议使用默认
    type:"GET",//请求方式 "POST...]]></description><category></category></item><item><title><![CDATA[AJAX使用教程]]></title><link>https://blog.youkuaiyun.com/codecuter/article/details/105433189</link><guid>https://blog.youkuaiyun.com/codecuter/article/details/105433189</guid><author>codecuter</author><pubDate>Fri, 10 Apr 2020 14:38:07 +0800</pubDate><description><![CDATA[AJAX使用教程
1.XMLHttpRequest 和ActiveXObject 的创建：
1.XMLHttpRequest 对象用于和服务器交换数据。
2.向服务器发送请求
如需将请求发送到服务器，我们使用 XMLHttpRequest 对象的 open() 和 send() 方法：
var xmlhttp;
if (window.XMLHttpRequest)
  {// code for I...]]></description><category></category></item></channel></rss>