自定义博客皮肤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)
  • 收藏
  • 关注

原创 Hystrix面试要点总结

一般是微服务或者涉及到调用外部系统的场景(有I/O操作)。

2024-01-11 16:33:18 455

原创 2024最新面试经验分享

叫什么,毕业于哪个学校,多少年经验,目前就职于哪家公司,公司主要是做啥的,你在公司主要是做啥的,项目特点(web项目?分布式项目?大数据实时分析项目),业余写博客?刷leetcode?写开源项目?

2024-01-11 16:23:29 2084

原创 分布式ID解决方案

专门搞一张表用来生成主键,甚至可以单独部署一个MySQL实例用来做这个事情。所有需要主键的地方都统一从这张表获取。优点是简单,缺点就是并发不高,并且会出现单点故障。

2024-01-11 16:00:35 475

原创 MySQL分库分表知识总结

col_9、col_10,其中col_1 - col_5是热点列,而col_6 - col_10则用的比较少,于是将table_1拆分成两张表table_1和table_2,table_1包含col_1 - col_5,table_2包含col_6 - col_10。另外,使用一致性Hash算法来路由,在扩容或者缩容时,需要迁移的数据会更少。水平拆分需要配合水平分表来使用,例如db_1和db_2都有t_user表,通过路由规则来决定是访问db_1的t_user表还是访问db_2的t_user表。

2024-01-11 15:59:46 797

原创 经典系统设计题:大型抢红包系统设计

尽量不要在每个拆红包的请求中都去修改红包记录的状态(比如扣减金额),因为红包记录只有一条,只能串行的去执行,当拆分出大量红包时(比如春晚红包,几百万个),会严重影响拆红包的效率。发红包阶段,新建一张临时表,表名和红包id对应,将拆分的金额存入到表中,每个金额都有一个自增id(从1开始),假如拆分出了100个金额,那么id就是1到100,然后hash(用户id)来获取金额id从而决定金额,最简单的就是用户id % 份数。好在,我们在抢红包阶段已经过滤了大部分无效请求,能到这个阶段的都是已经抢到了红包的。

2024-01-11 15:53:16 1047

原创 经典系统设计题:如何实现短链接

飞书面试的原题,因为没有事先准备过,所以答得不好,一搜才发现是个高频场景题。

2024-01-11 15:52:15 374

原创 MySQL索引下推

无索引下推时:name列使用模糊查询,会使查询无法使用索引中name右边的列。查询在二级索引中用name去匹配,拿到主键后回表(聚集索引)查询所有符合条件的列,上述步骤由存储引擎完成,存储引擎将查询到的数据返回给服务器层,服务器层在内存构建临时表,然后用age进行过滤并得到符合条件的数据。索引下推:即使name使用模糊查询,在二级索引匹配时也可以使用age,这样二级索引匹配到的主键可能会更少,回表的次数也会更少,提高了性能。场景:使用二级索引(非聚集索引)查询的时候。

2023-10-18 17:37:57 141

原创 看了很多01背包问题的资料都没搞懂,那你试试这篇?

的背包,就是为容量为w的背包铺路,我们最终关心的是容量为w的背包。例如:一个物品的价值是-2,但对应的位置依然初始化为0,那么取最大值的时候,就会取0而不是-2了,所以要初始化为负无穷。在推导的时候一定是取价值最大的数,如果题目给的价值都是正整数,那么其他下标都初始化为0就可以了,因为0就是最小的了,不会影响取最大价值的结果。表示从下标为0到i的物品里任意组合,放入容量为j的背包,价值总和的最大值。我们约定,物品i的重量为w[i],物品i的价值为v[i]。将物品0往各种容量的背包里放,能放进去,

2023-04-12 16:15:23 666 2

原创 Java程序内存占用优化实践

在我的项目里,所有Java进程的Thread总共占了八百多MB的内存,有点哈人,所以优化方向已经很明确了,那就是减少线程数量。到了私有化部署,有的客户连个技术人员都没有,只想一键启动就能用,于是将所有服务放在一台物理机上制作母盘,实施安装时省时省力,还能清公司的服务器库存。为了搞清楚原因,我使用NMT追踪Java进程内存使用情况,NMT全称Native Memory Tracking,是HotSpot虚拟机的功能,可跟踪HotSpot虚拟机的内部内存使用情况。大家都说是内存泄漏了,我不信!

2023-04-11 15:35:37 2568

原创 十进制转十六进制,Java代码示例与转换思路

接下来一直重复上面的步骤,直到取完了所有比特位,我们已经知道了后面取到的都是0,所以158用十六进制表示就是0000009e,十六进制一般会在前面加上0x作为标识,于是变成0x0000009e,通常我们都会省略高位的0,简写成0x9e,甚至有时候连0x也不要,直接变成9e。如何将它转换成十六进制的形式?十六进制用数字0、1、2、3、4、5、6、7、8、9和字母A、B、C、D、E、F(a、b、c、d、e、f)表示,其中A ~ F对应十进制的10 ~ 15。二进制数字占一个比特位,十六进制数字占四个比特位。

2023-03-04 23:24:13 603

原创 快速排序Java代码示例

快排、java、sort、partition、枢轴、pivot、时间复杂度、递归、优化

2023-02-14 15:14:45 752

原创 AQS(AbstractQueuedSynchronizer)是什么?

AQS全称AbstractQueuedSynchronizer,位于java.util.concurrent.locks包下,它是一个用来构建锁和同步器的框架,使用AQS能简单且高效的构造出应用广泛的大量同步器,像ReentrantLock、ReentrantReadWriteLock、Semaphore、CountDownLatch等等都是基于AQS的,我们自己也能利用AQS非常轻松的构造出符合自己需求的同步器。

2023-02-03 13:57:41 464

原创 通过堆转储快照定位JVM堆内存OOM的问题

通过堆转储快照定位JVM堆内存OOM的问题。获取堆转储快照,dump文件,Eclipse Memory Analyzer的使用方法。

2023-02-01 14:53:38 384

原创 JVM自动内存管理核心知识速览

JVM自动内存管理核心知识速览,包括内存空间的划分、对象的内存布局、垃圾收集等知识点。

2023-02-01 10:53:27 416

原创 一文搞懂JDK8 HashMap源码

HashMap的源码非常经典,里面用到了哈希表、链表、红黑树等数据结构,而且又是用纯Java实现的,所以成为了Java程序员必读的源码之一。。废话少说,直接看代码,我这里只摘录重点部分。

2023-01-30 14:35:02 280

原创 深入理解Elasticsearch分片

了解分片的基本原理,对Elasticsearch性能调优有帮助。

2022-12-29 14:18:23 3088

原创 Elasticsearch性能优化实践

搜索的时候,时间作为一个必须的搜索条件(这其实跟时序数据库类似),根据时间跨度解析出涉及到的索引,这样能缩小搜索的范围,如果可以,我们可以对时间跨度进行限制,比如规定时间跨度不能超过3天,这样最多只会搜索4个索引。上文提到过,我们有3个data node,我决定再增加一个data node,一共4个,2个是存放热索引的热数据节点,2个是存放冷索引的冷数据节点,一开始数据写入到热节点,一天之后,从热节点迁移到冷节点。所以我将当天的索引定义为热数据索引,其他索引全部是冷数据索引,超过30天的索引会被删除。

2022-11-18 18:20:37 1892 5

原创 JNA踩坑记录之java.lang.UnsatisfiedLinkError: Unable to load library:Native library not found in resource

我使用jna调dll格式的C++动态库,结果一直报`java.lang.UnsatisfiedLinkError: Unable to load library:Native library not found in resource path`。原因:1. jvm位数和编译dll文件的环境的位数不一样。2. Native.load用的是相对路径,但dll文件没放在`System.getProperty("java.library.path")`所返回的目录列表之一。3. 缺少jna所需要的系统库。

2022-11-09 11:10:55 7384

原创 MySQL主从复制和读写分离的原理与实战

ROW格式虽然可以为数据库的恢复和复制带来更好的可靠性,但是不能忽略的一点是,这会带来二进制文件大小的增加,有些语句下的ROW格式可能需要更大的容量。InnoDB存储引擎的默认事务隔离级别是REPEATABLE READ,其实也是因为二进制日志文件格式的关系,如果使用READ COMMITTED事务隔离级别,会出现类似丢失更新的现象,从而出现主从数据库数据不一致。Mycat是一款用Java语言编写的MySQL数据库网络协议的开源中间件,利用它可以实现MySQL的读写分离。下面是它的部署和使用步骤。

2022-11-02 18:17:30 393

原创 flink historyserver踩坑记录

两年后,我又开始搞flink了!这次又是接手别人的项目,估计又有不少的坑要踩。这不,问题来了。生产环境的某个job每跑7天就会挂掉,由于没有任何日志,所以不知道发生了什么。我们的flink是跑在yarn上,记录日志的方法有很多,我这里选择flink historyserver。没有historyserver时,flink的web UI只在job运行时能用,开启historyserver之后就算job挂掉了,也能通过web UI看历史job的元数据和异常信息。

2022-10-26 16:04:36 1664

原创 RandomAccessFile读性能优化

公司的日志采集器是我自己开发的,没用开源产品。日志采集虽然是个小功能,但是要想写好也没那么容易。对于一个日志采集器来说,它应该稳定、可控、占用尽量少的资源。因为日志采集器是和核心业务服务部署在同一台服务器上,如果它工作时CPU和内存占用率飙升、重度磁盘I/O,显然是不合适的,毕竟只是一个辅助功能,不能因小失大。在生产环境运行时发现部分服务日志过多,日志采集器的采集速度跟不上,日志上报有较大延迟。在对我自己编写的代码进行优化后,我想看看jdk的代码有没有优化的空间。

2022-10-19 10:24:48 1577

原创 Elasticsearch RESTful API大全(持续更新中)

本文将Elasticsearch的常用RESTful API整理在一起,想用的时候直接复制粘贴,提高开发效率。

2022-10-12 18:03:35 780

原创 串的模式匹配算法

串的模式匹配算法、朴素的模式匹配算法、KMP模式匹配算法、思路、图解、代码示例、时间复杂度、算法的改进

2022-10-12 17:28:41 705

原创 散列表(哈希表)概述

散列表、哈希表、Hash Table、散列冲突、哈希冲突、散列函数、哈希函数、直接定址法、数字分析法、平方取中法、折叠法、除留余数法、随机数发、处理冲突的方法、开放定址法、再散列函数法、链地址法、公共溢出区法、散列表查找性能分析

2022-09-13 15:46:40 1088

原创 B+树在MySQL InnoDB存储引擎中的应用

多路查找树,2-3树,2-3-4树,B树,B+树,InnoDB存储引擎,聚簇索引,回表,覆盖索引

2022-08-24 18:30:05 399

原创 Java程序优雅关机

在Java代码中,可以通过Runtime.getRuntime().addShutdownHook()添加进程停止时的钩子来实现优雅关机。addShutdownHook方法的参数是Thread,我们可以指定进程收到停止信号后所要做的事情(Runnable接口的实现类的匿名对象)。有一点要注意,进程在收到SIGTERM这个信号后,其他用户线程都停止了,只有addShutdownHook指定的线程在工作。15代表SIGTERM,表示正常停止进程,进程可以在退出前完成一些收尾工作;, 实在退出不了再用。...

2022-08-10 14:08:03 849

原创 堆排序图解与代码示例

简单选择排序的缺点、堆排序、满二叉树、完全二叉树、堆数据结构、图解、思路、代码示例、时间复杂度、测试用例

2022-07-22 15:34:09 572

原创 SpringBoot2.7.0集成Redisson操作Redis脚本

SpringBoot、Redisson、Redis、Lua、eval、evalsha、script

2022-07-15 18:14:28 1316

原创 Java程序如何实现只启动一个进程?

有时候,我们希望自己的程序在某台服务器上只启动一个进程,启动多个进程可能会引起一些问题。web项目可以通过端口冲突来实现,非web项目可以通过文件排他锁实现。

2022-07-15 10:44:04 732

原创 平衡二叉树(AVL树)图解与代码示例

平衡二叉树、AVL树、AVLTree、插入、删除、insert、delete、左旋、右旋、平衡因子、代码示例、Java、测试用例

2022-07-10 20:28:14 2667 1

原创 希尔排序Java代码示例

希尔排序、测试用例、元素移动次数、直接插入排序、简单插入排序、对比

2022-06-08 16:21:32 237

原创 直接插入排序Java代码示例与解析

直接插入排序、时间复杂度、单元测试、正序、逆序、解析

2022-06-06 16:01:15 107

原创 斐波那契查找的思路与代码实现

斐波那契查找、思路、图解、代码示例、时间复杂度、单元测试、优劣

2022-06-04 14:38:11 209

原创 插值查找的思路与代码示例

插值查找的思路、代码示例、时间复杂度、测试用例、适用场景

2022-06-01 22:34:18 176

原创 MySQL锁使用不当导致死锁的问题分析和解决

异常信息测试工程师反馈数据不一致,查看日志发现如下异常信息。### Error updating database. Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLTransactionRollbackException: Deadlock found when trying to get lock; try restarting transaction### The error may involve com.hst.mds.alarmcenter.dao

2022-04-12 15:22:09 923

原创 彻底搞懂同步、异步、阻塞、非阻塞的区别

这几个概念经常被人提及,但是很少有人能真正说清他们之间的联系和区别。我花了点时间整理了很多大佬和书上的观点,变成自己的知识。分层看待有时候,之所以大家意见有分歧,很有可能是因为看待问题的层次不同,说的不是同一个问题,从而一直鸡同鸭讲。比如,你说的同步、异步、阻塞、非阻塞是指I/O层面的,我说的是软件框架层面的。这里我直接贴知乎大佬“灵剑”的原话:业界知名的<<UNIX环境高级编程>>一书中也有关于这个问题需要从多个层面理解的描述:介绍完需要从不同层次看待这个问题之后,我们再

2022-03-11 11:28:36 445

原创 maven docker:build内存溢出问题定位

maven docker:build内存溢出问题定位。当你在/etc/profile里配置了DOCKER_HOST后,你的docker命令操作的是远程主机上的docker进程。/etc/profile里配置的环境变量在shell脚本中不起作用。最终,在同事的推荐下,使用strace命令(这玩意号称linux进程照妖镜)跟踪进程产生的系统调用,发现java进程一直在访问前端的node_modules文件夹,由于node_modules的层级结构又深又复杂,所以产生了大量的系统调用。

2022-03-11 11:06:01 1975

原创 web项目性能瓶颈定位与性能优化思路

功能跑通后再压测性能充分压榨CPU利用多核善于利用多核心的优势,如果有4个核心,而你只用到了2个核心,还有2个核心白白浪费了。CPU占用率一般来说,单个核心的占用率达到80%才算合格,不用全部占满,因为多多少少要留点余地。例如,服务器CPU核心数是4,满载是400%,那CPU占用率达到320%才算合格。使用非阻塞IO如果CPU一直有大量空闲,那就要检查瓶颈是否在IO。使用非阻塞IO代替阻塞IO。锁优化能不使用锁就不使用锁,能少使用锁就少使用锁,优先使用轻量级锁。优化算法如果代码中有一些

2022-01-18 11:53:45 216

原创 使用Docker部署Flink Session Cluster

Docker Hub地址Flink官网地址拉取Flink镜像,可以指定版本号:docker pull flink:1.10.0创建Flink network:docker network create flink-network创建并启动JobManager容器:docker run -d --name=jobmanager --network flink-network --publish 8081:8081 --publish 6123:6123 --env FLINK_PROPERT

2021-09-30 19:04:43 340

原创 使用Docker部署Kafka

使用bitnami的kafka镜像,参考文档拉取镜像:docker pull bitnami/kafka:2.4.1https://raw.githubusercontent.com/bitnami/bitnami-docker-kafka/master/docker-compose.yml

2021-09-29 19:43:09 3369 1

空空如也

空空如也

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

TA关注的人

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