自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 记一次mysql双层分组统计

还有更复杂的:有一个mysql表(score),三个字段:id,name,score,class_id,写一个SQL,统计出每个班级的及格数量和不及格数量。(select class_id,case when score<60 then "不及格" else "及格" as cj from score)有一个mysql表(class),三个字段:id,name,sex,class_id,写一个SQL,统计出每个班级的男生数量和女生数量。

2023-06-21 17:46:33 247

原创 记一次使用MAT线上排查OutOfMemory:metaspace

2、复现内存溢出或者通过gc日志分析,当复现后,dump日志就生成在了指定的目录下面。一次上线后,通过日志发现有outOfmemory:metaSpace的异常日志。5、谷歌下载MAT工具(是单独的软件不依赖eclipse)6、点击leak suspects查看内存泄漏分析。3、下载dump文件和日志文件在本地。6、通过MAT工具加载dump文件。

2023-02-20 16:00:14 836 1

原创 记一次线上kafka消费的耗时太久导致触发rebalance然后导致重复消费问题

kafka消费的耗时太久导致触发rebalance然后导致重复消费问题

2022-12-26 17:25:40 1467

原创 redis的hash tag在业务开发中的应用

redis的hash tag在业务开发中的应

2022-10-28 11:46:52 402

原创 记一次使用Arthas排查:线上服务每次发版部署时,cpu飙高

问题定位参考文章:​​​​​【死磕JVM】用Arthas排查JVM内存 真爽!我从小用到大_牧小农的博客-CSDN博客_arthas 分析内存1、遇到的问题每次发版部署服务,线上服务器的cpu飙高超过100%2、排查思路找到一次服务发版的时候,利用公司提供的线上故障排查工具,其实是阿里开源的Arthas进行排查原因: C2 Compiler线程 占用大量cpu 热点方法会使用C2编译Jdk8 默认开启分层编译0:解释代码1:简单C1编译代码...

2022-03-22 19:46:21 587

原创 算法---栈的最小值

实现一个这样的栈,这个栈除了可以进行普通的push、pop操作以外,还可以进行getMin的操作,getMin方法被调用后,会返回当前栈的最小值。栈里面存放的都是 int 整数,并且数值的范围是 [-100000, 100000]。要求所有操作的时间复杂度是 O(1)。附加:如果空间复杂度也能O(1)的话可加分。一、时间 O(1) + 空间 O(n)这个要求其实也不难,我们可以用一个辅助栈来存放最小值。例如我们有两个栈 stack 和 helper,stack 是目标栈,helper 是辅助栈,用来存

2021-06-27 22:41:58 805

原创 算法-- 反转部分单向链表

给定一个单向链表的头节点head,以及两个整数from和to,在单向链表上把第from个节点到第to个节点这一部分进行反转。例如:1->2->3->4->5->null,from=2,to=4调整结果为:1->4->3->2->5->nullpublic class NodePartReverse { private static class Node { int val; Node next; public Node(int val) {

2021-06-27 21:36:27 160

原创 工作中使用 RSA+AES,数字签名和加解密总结

一、总结:私钥签名,公钥解签;公钥加密,私钥解密二、流程图三、RSA加解密代码:https://blog.csdn.net/huyuyang6688/article/details/799668711、加密、解密流程2、实现(1)RSA加密工具类 RSACrypt.javapackage club.easyshare.framework.utils;import java.security.InvalidKeyException;import java.securit.

2021-06-15 20:39:25 2508 2

原创 一道SQL面试题

* 文章表:article * id,read_num,user_id,content * 1,232,2,abc * 2,22,2,eee * 3,12,1,dfdf * 4,44,1,dfe* 问题:查找 每个作者阅读数最高的 文章id集合select id from article t1 join (select user_id,max(read_num) from article group by user_id) t2 on(t1.user_id=...

2021-04-09 23:30:41 101

原创 Kafka/RocketMQ 多线程消费时如何保证消费顺序

RocketMQ是用了两把锁:1)向 Broker 端请求锁定当前顺序消费的队列,防止在消费过程中被分配给其它消费者处理从而打乱消费顺序。2)RocketMQ 会为每个消息队列建一个对象锁,这样只要线程池中有该消息队列在处理,则需等待处理完才能进行下一次消费,保证在当前 Consumer 内,同一队列的消息进行串行消费。Kafkakafka 的消费类 KafkaConsumer 是非线程安全的,因此用户无法在多线程中共享一个 KafkaConsumer 实例,且 KafkaConsum.

2021-03-31 21:06:54 1032

原创 CompletebaleFuture 异步回调的原理和使用

CompletebaleFuture的底层原理是:Fork/joinPoll + Treiber stack(异步任务栈),可以实现:创建较少的线程(减少线程上下文切换)执行较多的任务(不耗时的任务)结论:当任务不是很耗时,多线程的作用不大,反而性能上比不上单线程。而在多线程中,推荐CompletableFuture去创建任务、开启线程操作,性能比用Callable与FutureTask组合好很多。同步调用的缺点我们假设一个电子商城用户购买商品的场景: 创建订单前的验证方法。/** *

2021-03-29 16:22:14 3432 1

原创 给定一个二叉树,返回所有从根结点到叶子节点的路径

给定一个二叉树,返回所有从根结点到叶子节点的路径。public class AllNodePath{private static class TreeNode{ int val; TreeNode left; TreeNode right; public TreeNode(int val){ this.val=val; }}public static void main(String[] args){ TreeNode root =...

2021-02-15 13:09:05 705

原创 为什么java main主线程退出了子线程还能运行;golang main结束所有协程都被结束了

最近看golang main函数结束,所有协程都被结束了结论是这样:A不是main程的情况下,在A程里开启B程,A程执行完,A程return之后,B程不受影响,不会挂掉。所有子协程与main程同级的,与main程伴生java主线程结束和子线程结束之间的关系Main线程是个非守护线程,不能设置成守护线程。这是因为,main线程是由java虚拟机在启动的时候创建的。main方法开始执行的时候,主线程已经创建好并在运行了。对于运行中的线程,调用Thread.setDaemon()会抛出异常Exc

2021-01-14 10:09:02 2066 1

原创 程序员必知之浮点数运算原理详解

  导读:浮点数运算是一个非常有技术含量的话题,不太容易掌握。许多程序员都不清楚使用==操作符比较float/double类型的话到底出现什么问题。 许多人使用float/double进行货币计算时经常会犯错。这篇文章是这一系列中的精华,所有的软件开发人员都应该读一下。  随着你经验的增长,你肯定 想去深入了解一些常见的东西的细节,浮点数运算就是其中之一。1. 什么是浮点数?  在计算机系统的发展过程中,曾经提出过多种方法表达实数。  【1】典型的比如相对于浮点数的定点数(Fixed Poi

2020-12-11 10:36:54 2967

原创 BigDecimal为什么能做到高精度计算

BigDecimal的底层数据结构使什么?它是怎么保证精度的?这曾经是一道阿里巴巴的面试题,由于在工作中使用最多的是BigDecimal的加、减、乘、除的的方法,还真没想过它的实现原理(完全是拿来主义惹的祸),乍这么一问还真有点懵。BigDecimal保证精度的解决思路其实极其的简单朴素,还是用一句话来解释:十进制整数在转化成二进制数时不会有精度问题,那么把十进制小数扩大N倍让它在整数的维度上进行计算,并保留相应的精度信息。为什么要使用BigDecimal?我想只要是从事过JAVA金融产品研发.

2020-12-11 09:59:19 3169 2

原创 kafka分区数设置多少合适

kafka的每个topic都可以创建多个partition,partition的数量无上限,并不会像replica一样受限于broker的数量,因此partition的数量可以随心所欲的设置。那确定partition的数量就需要思考一些权衡因素。越多的partition可以提供更高的吞吐量在kafka中,单个partition是kafka并行操作的最小单元。每个partition可以独立接收推送的消息以及被consumer消费,相当于topic的一个子通道,partition和topic的关系.

2020-11-23 10:10:35 20810 3

原创 TimingWheel 时间轮详解

在kafka中,有许多请求并不是立即返回,而且处理完一些异步操作或者等待某些条件达成后才返回,这些请求一般都会带有timeout参数,表示如果timeout时间后服务端还不满足返回的条件,就判定此次请求为超时,这时候kafka同样要返回超时的响应给客户端,这样客户端才知道此次请求超时了。比如ack=-1的producer请求,就需要等待所有的isr备份完成了才可以返回给客户端,或者到达timeout时间了返回超时响应给客户端。上面的场景,可以用延迟任务来实现。也就是定义一个任务,在timeout时间后执

2020-11-09 15:30:22 177

原创 TiDB适用和不适用场景

TiDB 的典型的应用场景是:(1) 原业务的 MySQL 的业务遇到单机容量或者性能瓶颈时,可以考虑使用 TiDB 无缝替换 MySQL。TiDB 可以提供如下特性:吞吐量、存储和计算能力的水平扩展 水平伸缩时不停服务 强一致性分布式 ACID 事务(2) 大数据量下,MySQL 复杂查询很慢。(3) 大数据量下,数据增长很快,接近单机处理的极限,不想分库分表或者使用数据库中间件等对业务侵入性较大、对业务有约束的 Sharding 方案。(4) 大数据量下,有高并发实时写入、.

2020-11-06 17:08:00 767

原创 MySQL 日志系统之 redo log 和 binlog

MySQL 日志系统之 redo log 和 binlog之前我们了解了一条查询语句的执行流程,并介绍了执行过程中涉及的处理模块。一条查询语句的执行过程一般是经过连接器、分析器、优化器、执行器等功能模块,最后到达存储引擎。那么,一条 SQL 更新语句的执行流程又是怎样的呢?首先我们创建一个表 user_info,主键为 id,创建语句如下:CREATE TABLE `T` ( `ID` int(11) NOT NULL, `c` int(11) DEFAULT NULL, PR

2020-11-05 16:06:00 451

原创 彻底理解数据库的MVCC原理

ReadView中是当前活跃的事务ID列表,称之为m_ids,其中最小值为up_limit_id,最大值为low_limit_id,事务ID是事务开启时InnoDB分配的,其大小决定了事务开启的先后顺序,因此我们可以通过ID的大小关系来决定版本记录的可见性,具体判断流程如下:如果被访问版本的trx_id小于m_ids中的最小值up_limit_id,说明生成该版本的事务在ReadView生成前就已经提交了,所以该版本可以被当前事务访问。 如果被访问版本的trx_...

2020-11-02 20:57:12 146

原创 select、poll、epoll之间的区别

在RC隔离级别下,每个SELECT语句开始时,都会重新将当前系统中的所有的活跃事务拷贝到一个列表生成ReadView。二者的区别就在于生成ReadView的时间点不同,一个是事务之后第一个SELECT语句开始、一个是事务中每条SELECT语句开始。ReadView中是当前活跃的事务ID列表,称之为m_ids,其中最小值为up_limit_id,最大值为low_limit_id,事务ID是事务开启时InnoDB分配的,其大小决定了事务开启的先后顺序,因此我们可以通...

2020-10-30 15:32:43 358 1

原创 Golang Map实现原理

https://www.jianshu.com/p/7782d82f5154https://cloud.tencent.com/developer/article/1468799

2020-10-29 15:12:40 161

原创 count(1) 比 count(*) 效果高吗?

MySQL count(1) 真的比 count(*) 快么?你也一直和我一样认为 count(1) 真的比 count(*) 快么?突然有一天和同事聊这个事情,被狠狠的鄙视了一把。那么你自己研究过没?如果我告诉你他们一样,你信么?有 Where 条件的 count,会根据扫码结果count 一下所有的行数,其性能更依赖于你的 Where 条件,所以文章我们仅针对没有 Where 的情况进行说明。MyISAM 引擎会把一个表的总行数记录了下来,所以在执行 count() 的时候会直接返回数量

2020-10-29 13:58:08 86

原创 leetcode239滑动窗口最大值

1. 例题Leetcode 239题目:输入: nums = [1,3,-1,-3,5,3,6,7], 和 k = 3输出: [3,3,5,5,6,7]解释:滑动窗口的位置 最大值--------------- -----[1 3 -1] -3 5 3 6 7 31 [3 -1 -3] 5 3 6 7 31 3 [-1 -3 5] 3 6 7...

2020-10-20 12:05:23 99

原创 正确理解mysql的间歇锁

看完这两篇文章,理解间歇锁:https://www.cnblogs.com/renolei/p/4673842.htmlhttps://www.cnblogs.com/crazylqy/p/7773492.html

2020-09-27 15:44:43 311

原创 MySQL 共享锁 (lock in share mode),排他锁 (for update)

共享锁 (lock in share mode)简介允许不同事务之前共享加锁读取,但不允许其它事务修改或者加入排他锁如果有修改必须等待一个事务提交完成,才可以执行,容易出现死锁共享锁事务之间的读取session1:start transaction;select * from test where id = 1 lock in share mode;session2:start transaction;select * from test where id = 1 lock

2020-09-24 10:52:07 771

原创 理解:Linux软连接和硬链接

1.Linux链接概念Linux链接分两种,一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic Link)。默认情况下,ln命令产生硬链接。【硬连接】硬连接指通过索引节点来进行连接。在Linux的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索引节点号(Inode Index)。在Linux中,多个文件名指向同一索引节点是存在的。一般这种连接就是硬连接。硬连接的作用是允许一个文件拥有多个有效路径名,这样用户就可以建立硬连接到重要文件,以防止“误

2020-09-09 13:48:04 582

原创 java线程上下文切换,用于理解java程序cpu损耗分析。

0 前言在过去单CPU时代,单任务在一个时间点只能执行单一程序。之后发展到多任务阶段,计算机能在同一时间点并行执行多任务或多进程。虽然并不是真正意义上的“同一时间点”,而是多个任务或进程共享一个CPU,并交由操作系统来完成多任务间对CPU的运行切换,以使得每个任务都有机会获得一定的时间片运行。再后来发展到多线程技术,使得在一个程序内部能拥有多个线程并行执行。一个线程的执行可以被认为是一个CPU在执行该程序。当一个程序运行在多线程下,就好像有多个CPU在同时执行该程序。多线程比多任务更加有挑战。.

2020-09-01 23:26:07 1379

原创 南北桥芯片的定义

北桥芯片(NorthBridge)是主板芯片组中起主导作用的组成部分,也称为主桥(HostBridge)。北桥是个人电脑主板芯片组两枚大规模芯片中的一枚。北桥被用来处理高速信号,通常处理CPU(处理器),RAM(内存),AGP端口或PCI Express,和南桥芯片之间的通信。南桥芯片(South Bridge)是主板bai芯片组的重要du组成部分,一般位于主板上离CPU插槽较zhi远的下方,PCI插槽的附近dao,这种布局是考虑到它所连接的I/O总线较多,离处理器远一点有利于布线。主板上南北桥芯片

2020-09-01 22:35:26 1874

原创 java 实现:求有序数组绝对值最小的数

问题:有一个有序数组,如何求绝对值最小的数。形如:-10 -5 -2 7 15 20, 绝对值最小为-2思路:1。没有正数的情况下,最右边就是绝对值最小的2。没有负数的情况下,最左边就是绝对值最小的。3。有正数负数有0的情况下,找到04。只有正数负数的情况下,找到分界点package alg;public class MinAbsVal { public static int getAbsoluteValue(int[] a) { if (a == null

2020-09-01 19:04:32 1166 1

原创 进程管理和P V操作

计算机的核心是CPU,它承担了所有的计算任务;而操作系统是计算机的管理者,它负责任务的调度、资源的分配和管理,统领整个计算机硬件。一、操作系统的相关定义1、操作系统的定义:操作系统是控制和管理计算机硬件和软件资源、合理的组织计算机流程以方便用户使用的程序的集合。2、操作系统的特点:(1) 并发性。 并发性和并行性是有区别的两个不同概念。并行性是指两个或多个事件在同一时刻发生,而并发性是指两个或多个事件在同一时间间隔内发生。并发在宏观上是同时发生的,而在微观上是交替执行的。(2)共享性。.

2020-09-01 15:32:02 3757

原创 java 复杂链表的复制

 题目描述:  输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)。  解题思路:  本题有以下三种解法:  第一种:先按照next复制,然后依次添加random指针,添加时需要定位random的位置,定位一次需要一次遍历,需要O(n^2)的复杂度。  第二种:先按照next复制,然后用一个hashmap保存原节点和复制后节点

2020-08-30 16:06:20 497

原创 Java 二分查找最右匹配

public static void main(String[] args) { int[] nums={1,2,3,4,5,5,5,6,7}; System.out.println(binSearch(nums,4)); } public static int binSearch(int[] nums,int target){ if(nums==null || nums.length==0){ return -..

2020-08-30 15:57:27 261

原创 Java 实现:判断二叉树A是否包含子树B

判断二叉树A是否包含子树B三种情况:1、二叉树A和B根节点相同2、B是A的左子树3、B是A的右子树/*题目输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)** */ /*思路** 先从根节点开始判断,* 1.如果根节点相同,则从头遍历* 2.如果根不同,则从左右两个遍历,任意一个含有B树都可以,如果失败则递归* doesTree1HasTree2函数负责递归两个遍历两个树,直到B树为空则返回true其余都是false**

2020-08-30 15:50:53 542

原创 java实现判断一个字符串中的括号是否对称(两种情形)

第一种情形: String str1 = "{({}[])}"; //true String str2 = "([]([{}]))"; //true String str3 = "[({[}])]"; //false String str = "{(})]"; //false代码实现:package com.company; import java.util.Stack; public class Main {

2020-08-26 23:38:32 1253 1

原创 Java 实现判断链表是否有环

public class LinkLoop { public static boolean hasLoop(Node n){ //定义两个指针tmp1,tmp2 Node tmp1 = n; Node tmp2 = n.next; while(tmp2!=null){ tmp1 = tmp1.next; //每次迭代时,指针1走一步,指针2走两步 tmp2 = tmp2.next.next; if(tmp2 == null)return false;//不存.

2020-08-25 18:34:49 554

原创 Java elasticsearch实战---分页查询问题:scroll api

写在前面因为工作上的需要,记录下spring-data-elasticsearch与spring的配置,以及对应的海量数据全量拉取的过程。1.需求:查询es近3个月数据取出并进行重新推送。问题:原使用java分页查询es。可是到1w条数据后就会自动停止无法查询1w之后的数据。1.解决方案在上述后台错误信息中可以清楚的看到错误原因:Result window is too large, from + size must be less than or equal to: [100.

2020-08-25 12:03:30 2739

原创 ES的Java API 批量插入数据 bulk

Settings settings = Settings.settingsBuilder().put("cluster.name", "es1").build();TransportClient client = TransportClient.builder().settings(settings).build();client.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("bigdata2"), .

2020-08-25 11:23:37 3873 2

原创 Java实现:在二叉树中找到累加和为指定值的最长路径长度

给定一棵二叉树的头节点head和一个32位整数sum,二叉树节点值类型为整型,求累加和为sum的最长路径长度。路径是指从某个节点往下,每次多选择一个孩子节点或者不选所形成的节点链。思路:HashMap<Integer, Integer> sumMap = new HashMap<>(); //记录累加和 和 累加和在路径中最早出现的层数//比如说level为5时,curSum = 13,target = 5,那么就要看之前有没有和为8的出现//发现了...

2020-08-24 19:14:59 338

原创 java 实现:字符串的所有排列的可能

题目描述:  输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。  输入描述:输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。  解题思路:  对于这个问题,我们同样可以采用分解的办法。要求整个字符串的排列,可以看成两步:第一步:求所有可能出现在第一个位置的字符,即把第一个字符与后面的字符依次交换。第二步:固定一个字符,求后面所有字符的排列。 

2020-08-24 16:47:02 652

空空如也

空空如也

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

TA关注的人

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