自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(18)
  • 收藏
  • 关注

原创 商品分库分表后分页查询解决方案

因为mysql非顺序存储,没有办法直接定位到具体的第n行,只能一行一行过滤,直到第n行。分库分表后,考虑基因法,如果依然有多维度查询,做数据冗余,有几个维度,冗余几份数据。单表深分页问题,如果id连续,通过标记法查询,如果不连续,通过子查询或者join的方式减少回表查询。但是有数据倾斜的问题,某些租户商品很多,热点商品也多。2.就算按照创建日志索引,减少回表,但是在深分页情况,依然需要扫描很多的数据。如果分表后,涉及非分表键的多维度查询,最好冗余数据,有几个维度,冗余几份。实际情况更复杂,最好ES查询。

2024-03-21 01:52:23 339 1

原创 java hashmap1.8扩容源码分析

我们知道同一个index中的entry的hashcode在原put运算时,结果必然一致。同理cap转为2进制为n位,那么hashcode在n-1位上的特征值都是一样的,但是第n位不一样,刚好resize中就利用了第n位的特征值,用来区分是在原index还是在原index+oldcap。简单总结:扩容时需要计算新tab的容量和临界点,并且通过遍历tab的方式将每个entry放到新的tab中,在这个过程中,红黑树可能转换为链表。那么思考一下,这个下标计算方式,满足新的tab的put计算方式吗,是的。

2024-03-16 06:09:24 364 1

原创 go:自动生成gorm表结构体代码

执行./gormt -g=true 使用gui运行程序,有其他方式运行具体见github。下载源代码,本人在mac下载最新会失败,建议去github找version下载。使用https://github.com/xxjwxc/gormt工具。在下载目录下执行make命令,不同系统对应。生成代码在./model下。生成二进制文件gormt。

2024-01-13 00:36:27 433

原创 mysql数据库,mybatis,mybatis-plus查询的注意事项

List<Product> productList = productService.list(new LambdaQueryWrapper<Product>().in(Product::getProdId, prodIds));简单说,mysql的查询会按照主键排序,当你需要参数的顺序关系时,请使用map,而不是直接for循环获取。例子:代码中的prodIds假设为 7,6,3查询后的list id排序为3,6,7如果此时你认为查询后的list还是按照之........

2022-02-07 11:09:55 1036

原创 Git学习教程

1.git 区域使用git checkout命令,目录就是工作区,使用add命令,将文件添加到暂存区,commit把文件提交到本地分支上(本地仓库)。2.git文件状态变化Untracked:没有被git跟踪的文件Unmodified:没有被修改的文件Modified:修改后的文件Staged:暂存文件我们在一个目录下使用git init命令,会把当前目录初始化为一个git项目,其中的文件都将是untracked装状态。我们对未被跟踪的文件进行操作都只会是untracked状态。使用g

2021-11-29 15:18:51 132

原创 Tomcat调用解析(EndPoint分析)

解析EndPoint调用过程:我们已知整个tomcat组件都是通过LifeCycle接口下的LifeCycleBase模版方法init调用initInternal完成初始化,调用start方法运行。LifeCycle LifeCycleBase tomcat组件那么EndPoint也不例外,不过EndPoint是通过Protocolhandler进行初始化的。Protocolhandler则是通过Connector进行初始化。其中Connector才继承了LifeCycl

2021-11-04 23:10:40 478

原创 java内部类引用外部变量

今天学习AQS时,发现在main方法中实例一个ReentrantLock,在线程内部类能够直接使用,当时就很奇怪,因为按照自己的理解,想要使用外部的变量,一般都是通过类的方法传递。后来查了下资料,方法中的内部类是可以直接使用外部变量的。但是有个前提就是该变量必须是final或者effectively final的。effectively final就是指变量初始化后没有被更改。对于基础数据类型,就是值不能被更改。对于引用类型,就是指向不能更改。也就是说我们可以在内部类直接使用lock,但是不能更

2021-10-19 00:59:27 2436

原创 银行家安全性算法实现(java)

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.

2021-09-23 00:02:28 389 1

原创 DFS+递归全排序

例:一个数组[1,2,3]全排序我们可以采用递归的思想:因为排序了第一个元素,剩下的两个元素也要排序。[1],[2,3]=>[2],[3]=>[3],[][2],[1,3]=>[1],[3]=>…[3],[1,2]=>[1],[2]…使用栈保存DFS时的元素,使用递归往下分离数组排序。1.for循环根元素 例如上面3个元素 循环3次2.除去本次循环次数对应元素 如i=0,取出a[0] 放入栈中3.将剩下的元素递归4.弹栈5.当递归的数组长度为0时,输出栈

2021-09-14 17:40:49 65

原创 java 雪花算法改造(带日期格式)毫秒级

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<0||sequence>sequenceMask){

2021-07-06 20:17:16 661

原创 Failed to decode downloaded font ,OTS parsing error: Failed to convert WOFF 2.0等问题

第一个是配置maven过滤器。src/main/resourcestrue/*.woff/.woff2**/.ttfsrc/main/resourcesfalse/*.woff/.woff2**/.ttf有可能是你写的filter破坏了文件,所以过滤器排除掉这些文件。第二个文件已被破坏,就去官网重新下载一份 。第三 如果重启项目还没成功 。清除浏览器缓存,再访问页面...

2021-05-07 21:31:42 204

原创 Spring源码阅读环境搭建-java: 程序包jdk.jfr不存在的报错解决方法

下载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.ziprepositories修改:repo

2021-04-26 23:59:22 4998 4

原创 nginx配置踩坑

如题:留意我上面的红色框 文件地址 和 sublime ngingx.conf 没有原点表示已经保存下面是 css js的统一代理到 localhost:8081下 (8081开启的是我后台的服务器 但是该无服务器对应路径并没有对应的js css文件) 所以按道理 如果浏览器 走了nginx代理 css js 是不会成功加载的但是:可以看出 配置确实没有生效 还是localhost:80我怀疑是我改了 nginx.conf 没有重新启动nginx所以现在我再去试一下结果如第二张图 一样还

2021-03-08 23:27:20 167

原创 哈希表的概念和设计

4.哈希表1.哈希表的基本概念哈希表适合用于储存一些关键字和存储地址存在某种函数关系的数据。储存地址=h(key);这样储存元素的数据结构就叫做哈希表。2.哈希表中的一些概念1.哈希函数和哈希地址假设存在m个储存空间,我们想要储存n个对象。那么哈希函数h(k)就是把关键字为ki的对象储存在相应的哈希地址中。此时的哈希表就是长度为m的(m<=n)的内存单元。2.哈希冲突对于两个关键字ki和kj(i!=j),并且ki!=kj,但是h(ki)=h(kj)的现象兼做哈希冲突,也叫做同义词

2020-07-21 20:33:36 537

原创 网络编程的理解和TCP三次握手和四次挥手详解

网络编程就是通过IP地址和端口号或者域名连接到另一台计算机上,使用规定的协议(HTTP)和数据传输方式(TCP/UDP)交换数据。比如:使用套接字来达到进程间通信TCP协议:提供可靠的,端到端的字节流的通信。是一种面向连接的协议。是字节流而不是报文流。UDP协议:是一种无连接、不可靠的传输协议。发送的是IP数据包。OSI模型是一个用于计算机互联的标准体系。一共分为七层:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。TCP/IP五层模型分别应用层、传输层、网络层、数据链

2020-07-21 01:16:38 200 1

原创 五种IO模型介绍

IO模型介绍1.阻塞IO模型用户线程发送io请求,内核查看数据是否就绪,在数据就绪之前,用户线程处于阻塞状态,会交出CPU。当数据就绪之后,内核拷贝数据到用户线程,并返回成功提示,用户线程解除block状态。典型例子:socket.read();2.非阻塞IO模型用户发起read操作后,不用等待会立即得到一个结果,数据没有准备好时,得到的是error。当数据准备好后,并且用户线程发送了IO请求,内核就会拷贝数据到用户线程中。与阻塞不同的点: 轮询会一直占用CPU,导致CPU的占用率很高。

2020-07-18 17:42:03 261

原创 jquery ajax教程

JQuery ajax定义和用法ajax() 方法通过 HTTP 请求加载远程数据。$.ajax({ url: "test.html", //ajax请求地址 cache: false,//(默认: true,dataType为script和jsonp时默认为false)设置为 false 将不缓存此页面,建议使用默认 type:"GET",//请求方式 "POST...

2020-04-10 15:03:42 104

原创 AJAX使用教程

AJAX使用教程1.XMLHttpRequest 和ActiveXObject 的创建:1.XMLHttpRequest 对象用于和服务器交换数据。2.向服务器发送请求如需将请求发送到服务器,我们使用 XMLHttpRequest 对象的 open() 和 send() 方法:var xmlhttp;if (window.XMLHttpRequest) {// code for I...

2020-04-10 14:38:07 69

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除