自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 java: 程序包sun.net不存在

项目启动报错java: 程序包sun.net不存在。

2024-02-22 15:45:58 209

原创 问题点List

1、CacheBuilder

2023-08-04 16:55:36 594

原创 mongo语句

db.getCollection('order_info').find({'user_key':'b2111f7b7de0e8fc531a7a284d4ad051'}); db.getCollection('order_info').find({'order_id':'HHs230711ffed7c3499de'});

2023-07-20 10:47:25 603

原创 常用写法示例

1、计算总金额。

2023-06-12 20:38:10 618

原创 @JsonIgnore & @JSONField

代码格式序列化为Json时不包含该属性。

2023-05-18 14:24:31 256

原创 java: 找不到符号 符号: 类 BASE64Encoder 位置: 程序包 sun.misc

java: 找不到符号 符号: 类 BASE64Encoder 位置: 程序包 sun.misc。依图如下,修改jdk对应的版本即可。

2023-03-15 14:37:51 3525

原创 java.io.IOException: Broken pipe

我们设置的超时时间是100S,由于当日单量比较大,看日志发现,拉取了3分钟才拉完,拉完之后返回给获取数据服务时,获取数据的服务已关闭服务连接,所以报了这个错,其实报错的字面意思描述也挺明确的。线上环境,拉取对账单,走的接口的形式,当天单量比较大,就出现了,拉取订单超时,报了个错java.io.IOException: Broken pipe。在此记录此问题,如果你不巧也遇到了此问题,希望能帮你提供一个解决思路。可适当改长你们调用方式的 ReadTimeout 时间。吧超时时间设置为大于3分钟就ok了。

2023-03-03 16:52:15 1124

原创 并发乐观锁

尝试了加锁和内存缓存数据等方式进行解决,效果依然不佳,只能减少出现乐观锁的次数,不能避免乐观锁。采取的是 mq 的方式,获取到订单结果的返回码时,发到一个消息队列里,异步进行消费保存。这种大数据量的操作数据库,还是采用mongo缓存好一点,定期存数,不实时更新数据。,当量很大时,多节点多线程对同一条数据进行操作时,会报乐观锁异常。保存的过程中,相同的返回码会累加数据总数,统计批量订单的返回码总数。

2023-02-27 16:48:41 99

原创 sql常用记录

统计sql: 总数、按条件统计总数。

2023-02-17 15:04:02 142

原创 Update空指针

对一个实体vo做更新时报了空指针异常,因为 vo 里有一个非空字段没有给值,hibernate 在更新时报了空指针。记录。

2023-01-10 23:36:05 330

原创 一些对账的坑

前期一般是用方式②,因为前期数据比较少,很快就能对完了,随着业务量逐渐增多,有时候会出现某一个渠道对账单数据获取异常等问题,造成逐条比对时数据卡单,然后后面就会卡一大波数据比对不了,对接过支付渠道的可能都知道,凡是交互的订单都是需要后期对账的,应为偶尔会有一笔银行掉单的单子,造成渠道方和本地的订单数据不一致,所以这时候对账就显得尤其重要了。其实,如果你们对接可很多渠道方,可以选择:① 分渠道进行对账,② 也可以用总的数据顺序进行逐条比对。② 拿本地的数据和渠道方数据比对。这两种数据会有两种的差异数据。

2022-12-31 17:41:15 133

原创 数据库 varchar 类型应该设计多长?

尽管 InnoDB 是动态存储的, 但别的数据库引擎不一定是如此,有的可能会使用固定长度的行,或者固定大小的内存表, 内存表即为 SQL 查询中产生的临时表,它通常会为 varchar 类型分配最大的空间,比如 utf-8 编码下, 内存表可能要为 VARCHAR(255) 分配 2+3×255 字节 (2 是因为存的是字节长度而不是字符长度), 如果行数非常多,这也会带来性能问题。其实在今天来说多一个字节也没什么区别, 但为了兼容性, 通常的数据库设计中还是会出现很多 VARCHAR(255)。

2022-11-29 22:58:09 4695

原创 日常记记录

日常

2022-11-14 14:47:36 65

原创 .p12 .pfx .cer 证书

A方:需要 B 方的公钥和 A 自己的私钥, A 自己的私钥用来做加密,然后 B 用 A 给过来的公钥做解密。B方:需要 A 方的公钥和 B 自己的私钥, B 自己的私钥用来做加密,然后 A 用 B 给过来的公钥做解密。② 私钥证书:.p12 .pfx 结尾的私钥。① 公私钥证书:.cer 结尾的公钥。...

2022-08-10 13:47:35 791

原创 CAUSE: 加载证书时出错PKCS12 key store mac invalid - wrong password

CAUSE: 加载证书时出错PKCS12 key store mac invalid - wrong password

2022-08-05 20:02:12 1666

原创 快照读和当前读

普通的 select 语句。执行方式是生成 readview,直接利用 MVCC 机制来读取,并不会对记录进行加锁。它是基于多版本并发控制即 MVCC机制,既然是多版本,那么快照读读到的数据不一定是当前最新的数据,有可能是之前历史版本的数据。如下的操作是快照读:不加锁的 select 操作(事务级别不是串行化,串行化的是当前读)它读取的记录都是数据库中当前的最新版本,会对当前读取的数据进行加锁,防止其他事务修改数据,这种锁是一种悲观锁。如下操作都是当前读:select lock in share

2022-06-02 08:46:06 9424 2

原创 show processlist 命令

show processlist 命令用于显示哪些线程正在运行。

2022-06-02 07:51:00 371

原创 MySQL 优化

如果对于有 where 条件,又想走索引用 limit 的,必须设计一个索引,将 where 放第一位,limit 用到的主键放第 2 位,而且只能 select 主键!这样能完美解决 MySQL 的分页问题了。到了 100 万的数据,160 万数据,15G 表,190M 索引,就算走索引,limit 都得差不多 0.5 秒。所以分页最好别让别人看到 10万 条以后的数据, 要不然就算用索引也会很慢。...

2022-05-29 19:14:47 599

原创 项目启动 xfire-all-1.2.6 jar 包冲突解决版本

我们再倒入一个新项目的时候,经常会遇到 jar 包版本冲突,下面是一个小栗子:加上排除这个就好了<exclusion> <groupId>javax.activation</groupId> <artifactId>activation</artifactId></exclusion>...

2022-05-28 10:37:39 361

原创 执行计划 explain

1、一个SQL 语句之前加上 explain 就可以看其执行计划,然后对其做相应的优化了。2、下面是我 explain 之后的结果截图,你能看到都是有哪些列。3、执行计划包含的信息:id,select_type,table,partitions,type,possible_keys,key,key_len,ref,rows,filtered,Extra官方文档对其有详细的解释:MySQL :: MySQL 5.7 Reference Manual :: 8.8.2 EXPLAIN Out

2022-05-28 09:35:19 281

原创 order by

记录一片写的很好的博客,备用看一遍就理解:order by详解 - 知乎

2022-05-26 21:34:06 210

原创 B树和 B+树

1、B树(B-tree)B 树(B-tree)是一种自平衡的树,能够保持数据有序。一个单节点可以存储多个键值对。 这种数据结构能够让查找数据、顺序访问、插入数据及删除的动作,都在对数时间内完成。 B 树,概括来说是一个一般化的二叉查找树(binarysearchtree),可以拥有多于 2 个子节点。1.1 与自平衡二叉查找树不同平衡二叉树每个节点最多有 2 子节点,B 树可以有更多的子节点。 B 树为系统大块数据的读写操作做了优化。B 树减少定位记录时所经历的中间过程,从而加快存取速度..

2022-05-26 08:54:53 612

原创 @ControllerAdvice

HttpMessageConverter 是一个消息转换的工具,有两方面的功能:1、将服务端返回的对象序列化为 JSON 字符串。2、将前端传来的 JSON 字符串反序列化为 Java 对象。所有的 JSON 生成都离不开相关的 HttpMessageConverter。SpringMVC 自动配置了 Jackson 和 Gson 的 HttpMessageConverter,所以,如果用户使用 jackson 和 gosn 的话,没有其他额外配置,则只需要添加依赖即可。Jackson

2022-05-25 10:15:32 291

原创 数据库索引

1、索引的好处:是为了提高查询速度。但是只有加了索引的字段查询速度才会有提高。2、索引的原理是把硬盘的 io 次数降下来。硬盘的 io 与内存比起来是很费时的。3、一次磁盘 io 带来的影响磁盘的一些基本参数如下:7200转/分钟120转/s与磁盘交互慢在查找的过程,磁盘读的过程是快的,(统称延迟时间)。一次 io 的延迟时间 = 平均寻道时间(大概需要 5ms)+ 平均延迟时间(4ms)加起来就是 9ms。9ms 对于人的感知是很慢的,但是对于计算机来说是很长的,

2022-05-25 08:54:22 102

原创 \uFEFF

1、问题今天在做下载 Excel 文件,解析数据时,遇到一个奇葩问题。文件格式大致长这样我们是要解析这个 Excel 文件,然后用 map.get("订单号") 这种方式获取每一列的值,结果后面列都能正常获取,只有第一列获取结果为 null 。后来控制台打印结果看起来也正常,把打印的结果复制在粘贴到代码里之后发现多了一个 \uFEFF 符号,也就是要用 map.get("\uFEFF订单号") 这种方式才能获取到值。2、分析原因经过和提供 Excel 文件的第三方沟通他们的原因:

2022-05-18 20:05:17 406

原创 多版本并发控制(MVCC)

多版本并发控制 (MVCC)MVCC (multi-version concurrency control) 多版本并发控制。 MVCC 是一种并发控制的方法。 在数据库管理系统中,实现对数据库的并发访问,主要是为了提高数据库的并发性能。InnoDB 引擎支持 MVCC,因为 myIsam 不支持事务所以也不支持 MVCC。 在编程语言中实现事务内存。 为事务分配单向增长的时间戳,为每个修改保存一个版本,版本与事务的时间戳关联,读操作只读该事务开始前的数据库的快照。 InnoDB 的 .

2022-05-02 08:24:36 901

原创 redolog 和 bin log

我们常见的一条更新语句,如果你想细究其执行流程的话,必须要先了解 redolog 、binlog,下面我们就来了解一下这俩 CP。redolog 重做日志在 MySQL里如果每一次的更新操作都需要写进磁盘,然后磁盘也要找到对应的那条记录,然后再更新,整个过程 IO 成本、查找成本都很高。为了解决这个问题,MySQL 的设计者就用了 WAL 技术来提升更新效率。WAL技术,WAL 的全称是 Write-Ahead Logging,它的关键点就是先写日志(这个日志就是 redo log),再写磁盘。

2022-05-01 15:57:52 910

原创 MySQL 8:行锁

行锁行锁是针对数据库表中行记录的锁,是锁一行或者多行。MySQL 的行锁是基于索引加载的,所以行锁是要加在索引响应的行上。加行锁的目的是为了减少锁冲突,提升业务的并发度。示例 1 :比如事务 A 更新了一行数据,而此时事务 B 也要更新同一行数据,则必须等待事务 A 操作完成之后才能进行更新操作。示例 2 :数据库表中有一个主键索引和一个普通索引,SQL 语句基于索引查询,命中两条记录。此时行锁就锁定两条记录,当其他事务访问数据库同一张表时,被锁定的记录不能被访问,其他的记录都可以访问到。

2022-04-25 07:44:18 1781

原创 MySQL 7:表锁

数据库设计的初衷是处理并发问题的,作为多用户共享的资源,当出现并发访问时,数据库需要合理地控制资源的访问规则。而锁就是用来实现这个访问规则的重要数据结构。根据加锁的范围,MySQL 里面的锁大致可以分为全局锁、表锁、行锁。这篇我们来学习表锁。MySQL 里表级锁有两种:表锁 元数据锁(meta data lock ,MDL).表锁语法结构:lock table 表名字1 read(write),表名字2 read(write);比如有俩表 t1、t2,给 t1 加读锁,给 t2

2022-04-24 08:02:50 1328

原创 MySQL 6:全局锁

数据库设计的初衷是处理并发问题的,作为多用户共享的资源,当出现并发访问时,数据库需要合理地控制资源的访问规则。而锁就是用来实现这个访问规则的重要数据结构。根据加锁的范围,MySQL 里面的锁大致可以分为全局锁、表锁、行锁。这篇我们先来学习全局锁。全局锁全局锁就是对整个数据库加锁。当我们对数据库加了读锁之后,其他任何的请求都不能对数据库加写锁了,当我们对数据库加了写锁之后,后续其他任何的请求都不能对数据库加读锁和写锁了。FTWRLMySQL 提供了一个加全局读锁的方法,Flush

2022-04-23 09:19:28 1531

原创 @Transient

遇到的问题报错大概是长这样的, Unknown column 'xxx.fileId' in 'field list' ,因为这个 fileId 只是想作为一个临时变量用一下,并不想存入实体类对应的表中。这个属性在实体类中没有加@Transient 注解,于是就报错了。用法我们来看看@Transient 注解:@transient就是需要给某个 javabean 添加一个属性,而这个属性我们又不希望它存到数据库中去,仅仅是做个临时变量用一下。不修改已经存在数据库中数据的数据结构。那...

2022-04-21 07:59:48 3370

原创 MySQL 5:索引(下)

这篇我们接上篇,来继续学习索引。我们先来看一个问题在下面这个表 T 中,如果我执行 select * from T where k between 3 and 5,需要执行几次树的搜索操作,会扫描多少行呢?这个表的初始化建表语句如下:create table T (id int primary key,k int NOT NULL DEFAULT 0,s varchar(16) NOT NULL DEFAULT ' ',index k(k))engine=InnoDB;

2022-04-17 10:12:19 574

原创 RabbitMQ 2:RabbitMQ的基础(下)

下面是几个要用到的名词解释,我们来了解一下。1、代理服务 Broker我们知道如果要使用 RabbitMQ,必须先要安装一个 RabbitMQ 服务。这个服务就是 Broker,中文叫做代理,因为 MQ 服务器帮我们对消息做了存储和转发。一般情况下为了保证服务的高可用,需要多个 Broker。2、连接 Connection无论生产者或是服务者都需要与 Broker 建立连接,这个连接就是 Connection ,它是一个 TCP 的长连接。3、信道 Channel为了节省服务器资源,

2022-04-16 21:45:00 1970

原创 RabbitMQ 1:RabbitMQ的基础(上)

简介RabbitMQ 是一种轻量级的、功能非常强大的工具,可用来构建十分简单抑或异常复杂的分布式软件架构。是一款消息中间件。 RabbitMQ 成为时下最流行的消息代理服务器( message broker )之一。 作为一款由 Erlang 语言开发的开源软件项目, RabbitMQ 具有自由度以及灵活性,RabbitMQ 的特性及好处:① 开源 ② 平台和供应商无关性 作为实现了具有平台和供应商无关性的高级消息队列协议 (Advanced Message Queuing Prot

2022-04-16 17:24:06 2395

原创 MySQL 4:索引(上)

1、索引索引的作用:是为了提高查询效率的,就像书的目录一样。 索引是为了提高查询效率,而可以用于提高读写效率的数据结构有很多种,这里我们先看三种常见的数据结构: ① 哈希表 ② 有序数组 ③ 搜索树 2 、索引三种模型的区别2.1 哈希表:哈希表是以一种键值对的形式存储数据结构的,即 key-value形式,在查找时,我们只需要输入待查找的 key 就可以找到其对应的 value。 哈希的思路就是把值放在数组里,用一个哈希函数(hash function)把 ..

2022-04-15 08:32:01 980

原创 时间复杂度

1、常量阶Ο(1)只要代码的执行时间不随 n 的增大而增长,这样代码的时间复杂度都记作 O(1)。或者说,一般情况下,只要算法中不存在循环语句、递归语句,即使有成千上万行的代码,其时间复杂度也是Ο(1)2、对数阶O(logn)i=1; while (i <= n) { i = i * 2; }i 的取值是一个首项为 1,整体是一个公差为 2 的等比数列:2º·2¹·2²·2³····2ⁿⁿ = n,其中 nn 即为项数,求对数即 nn=log2^n。也就是当循

2022-04-13 20:34:30 360

原创 MySQL 3:事务的隔离级别

事务。事务事务:就是要保证一组数据库操作要么全部成功要么全部失败。 在 MySQL 中,事务是在引擎层实现的,在前面 Mysql1 讲中的架构图中我们已经知道, MySQL 支持多引擎,但是并不是所有的引擎都支持事务。比如 MySQL 原生的 MyISAM 引擎就不支持事务,所以现在我们用 InnoDB 比较多。下面我们以 InnoDB

2022-04-11 22:36:23 1085

原创 RabbitMQ 之死信队列

一个延迟队列(正常的队列),延时队列配置了过期时间即延时时间一个死信的队列① 一个消息 绑了一个 routingKey,这个 routingKey 绑到一个延时交换机上,这个交换机绑到一个延时队列上② 给延时队列绑定死信的交换机③ 延时队列里的消息变为死信后通过这个绑定的死信交换机去到死信队列里④ 死信队列其实也是一个正常队列只是绑定了死信的交换机接受死信(达成一个延迟的效果)⑤ 正常消费死信队列里的消息...

2022-04-08 20:56:12 1341

原创 MySQL 2:一条更新 SQL 语句的执行流程

1、上期回顾:一条 SQL 查询语句的一般执行流程是经过连接器、分析器、优化器、执行器等功能模块,然后到达存储引擎。接下来我们来看下一条更新语句的执行流程:我们经常会听 DBA 同事说,MySQL可以恢复到一定时间内的任意一秒的状态,下面我们就来探秘一下它是怎么做到的。我们还从一条更新语句开始看:下面是一个创建语句,创建一个表 Test ,一个主键 id,和一个整型字段 ccreate table Test(id int primary key, c int);如果想要将 id=

2022-04-01 22:39:35 1132

原创 MySQL 1:MySQL的基础架构

先来上一张图基础架构图,下面再做一些简单的介绍1、连接器首先,我们需要先连接到这个服务上,这时候和我们打交道的就是连接器。连接器负责和客户端建立连接、获取权限、维持和管理连接。连接的过程我们输入用户名、密码即建立连接。此时有两种情况:① 如果用户名或密码不对,你就会收到一个"Access denied for user"的错误,然后客户端程序结束执行。② 如果用户名密码认证通过,连接器会到权限表里面查出你拥有的权限。之后,这个连接里面的权限判断逻辑,都将依赖于此时读到的权限.

2022-03-30 19:58:54 790

空空如也

空空如也

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

TA关注的人

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