- 博客(304)
- 资源 (3)
- 收藏
- 关注
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 推荐一个Java全能学习+面试指南的站点,yyds
从这出的docsify部署,再到用vuepress部署,然后再使用一些主题reco,最后到现在的主题hope,折腾路上真的很难,有时候没解决,查各种也没查到解决办法,好之,结果还是不错的,达到了自己理想的效果,后续也会持续不断完善自己的网站!另外,最近创建了一个编程资料共享群,不定期分享最新资料,有需要的朋友可以扫码进群xiaobear_docsify地址:https://yhx1001.github.io/xiaobear_docsify/#/部分内容有密码,公众号回复密码。
2023-07-14 16:18:05
308
1
原创 Java中大对象复用的目标和注意点,以及优化方案
最后我们总结一下:首先,我们看了比较老的 JDK 版本中,String 为了复用引起的内容泄漏问题,所以我们平常的编码中,一定要注意大对象的回收,及时切断与它的联系。接下来,我们看了 Java 中集合的一些扩容操作,如果你知道确切的集合大小,就可以指定一个初始值,避免耗时的扩容操作。针对大对象,我们有结构纬度的优化和时间维度的优化两种方法:从结构纬度来说,通过把对象切分成合适的粒度,可以把操作集中在小数据结构上,减少时间处理成本;通过把对象进行压缩、转换,或者提取热点数据。
2024-08-24 15:29:28
571
原创 重新认识一下,从BIO到NIO,再到AIO,响应式编程
今天,我们讲到了BIO、NIO、AIO 等概念和基本的编程模型 Reactor,我们了解到:BIO 的线程模型是一个连接对应一个线程的,非常浪费资源;NIO通过对关键事件的监听,通过主动通知的方式完成非阻塞操作,但它对事件本身的处理依然是阻塞的;AIO 完全是异步非阻塞的,但现实中使用很少。使用 Netty 的多 Acceptor 模式和多线程模式,我们能够方便地完成类似 AIO 这样的操作。Netty 的事件触发机制使用了高效的 ET 模式,使得支持的连接更多,性能更高。
2024-08-22 12:57:34
801
原创 案例分析:常用的Java代码优化法则
代码优化方法从缓冲、缓存、池化对象、大对象复用、并行计算、锁优化、NIO 等优化方法,它们对性能的提升往往是质的飞跃。但语言本身对性能也是有影响的,比如就有很多公司就因为语言的特性由 Java 切换到 Golang。对于 Java 语言来说,也有它的一套优化法则,这些细微的性能差异,经过多次调用和迭代,会产生越来越大的影响。今天我们一起看看一些常用的代码优化法则,从而在编码中保持好的习惯,让代码保持最优状态。
2024-08-21 12:23:31
995
原创 案例分析:多线程锁该如何优化?
Java 中的 synchronized 有偏向锁、轻量级锁、重量级锁三种形式,分别对应了锁只被一个线程持有、不同线程交替持有锁、多线程竞争锁三种情况。描述重量级锁底层使用的 Monitor 实现,里面涉及到了用户态和内核态的切换、进程的上下文切换,成本较高,性能比较低。轻量级锁线程加锁的时间是错开的(也就是没有竞争),可以使用轻量级锁来优化。轻量级修改了对象头的锁标志,相对重量级锁性能提升很多。每次修改都是 CAS 操作,保证原子性偏向锁。
2024-08-20 12:50:09
844
原创 一次性下发100w的优惠券/短信/二维码,兼顾线程池参数可配置
针对6.18,11.11这种场景,平台一次性发布500w张优惠券,或者对于锁单用户统一发下100w张确认信息,同时我们平时有抢购茅台的场景,京东一次性发布10w个验证码,主要是针对高并发多线程大数据批处理任务的场景,一般用于二维码、优惠券、邮件、短信等场景。前面我们已经提到了其他的场景,比如二维码、优惠券、短信、邮件、理财产品收益等场景,那我们怎么才会坐到通用呢?能否做到通用的设计或工具类,给团队赋能,一开始我们肯定是一次性编写或思考不到,考虑不周的,需要我们先针对某个场景进行编写之后,后续再做到更完美!
2024-08-04 11:01:33
66
1
原创 BigDecimal你了解吗,遇到过哪些坑?
Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算。双精度浮点型变量double可以处理16位有效数,但在实际应用中,可能需要对更大或者更小的数进行运算和处理。一般情况下,对于那些不需要准确计算精度的数字,我们可以直接使用Float和Double处理,但是Double.valueOf(String) 和Float.valueOf(String)会丢失精度。所以开发中,如果我们需要精确计算的结果,则必须使用BigDecimal类来操作。
2024-08-02 12:23:38
547
原创 案例分析:并行计算让你的代码“飞”起来
现在的电脑,往往都有多颗核,即使是一部手机,也往往配备了并行处理器,通过多进程和多线程的手段,就可以让多个 CPU 核同时工作,加快任务的执行。Java 提供了非常丰富的 API,来支持多线程开发。对我们 Java 程序员来说,。但它如何应用到业务场景中?又有哪些注意事项?今天将从一个并行获取数据的例子开始,逐步讲解这个面试中最频繁的知识点。
2024-08-01 20:00:31
779
原创 通过三种不同的系统架构案例加深理解认识
主要是分享了三种不同的系统架构案例。互联网应用系统架构,看一个互联网应用系统的架构是如何设计的,如何利用各种各样的分布式技术,构建一个分布式互联网系统。分布式数据库的架构设计案例,它的架构考量点主要是什么,一个分布式的数据库如何实现高可用、高性能、可伸缩等一系列的分布式特性的。编程框架的架构设计,开发工程师每天在编程的时候都要使用编程框架进行开发。那么架构师除了要做这种整体的架构,还要考虑如何为开发工程师去设计一个易用强大的编程框架。
2024-07-30 12:28:42
593
1
原创 【毕设项目推荐】基于Spring Boot+Vue的宠物领养系统
宠物在人类生活中扮演着越来越重要的角色,它们不仅能给人们带来欢乐和陪伴,还能减轻人们的压力和孤独感。同时,随着城市化进程的加快,越来越多的宠物流浪到了城市街头,给城市管理和环境卫生带来了一定的困扰。宠物领养的意义是为收养机构提供一个方便且便捷的管理系统,包括宠物信息管理、领养者信息管理、宠物收养申请处理等功能,减少手工管理的工作量和人工错误;为领养者提供一个方便的查找和筛选宠物的平台,可以根据不同的需求和条件搜索符合要求的宠物信息,减少了去收容所实地寻找的时间和成本;
2024-06-28 19:23:31
888
原创 毕业设计目前现状及避坑指南
这篇文章其实在前天的时候就想写了,但是想了想又没写了,但今天已经有好几个同学来找我说这个事情,所以决定写下这篇毕业设计避坑指南吧。自己接触接私单也差不多两年时间了,也接触了很多同学和商家,就聊聊这个行业目前的情况哈。
2024-04-23 01:53:40
801
2
原创 面试官:HashMap为什么是线程不安全的?
今天我们主要讲解为什么 HashMap 是线程不安全的?而对于 HashMap,相信你一定并不陌生,HashMap 是我们平时工作和学习中用得非常非常多的一个容器,也是 Map 最主要的实现类之一,但是它自身并不具备线程安全的特点,可以从多种情况中体现出来,下面我们就对此进行具体的分析。
2024-04-05 20:02:55
218
原创 ConcurrentHashMap在Java 7和Java 8中有何不同?
在 Java 8 中,对于 ConcurrentHashMap 这个常用的工具类进行了很大的升级,对比之前 Java 7 版本在诸多方面都进行了调整和变化。不过,在 Java 7 中的 Segment 的设计思想依然具有参考和学习的价值,所以在很多情况下面试官都会问你:ConcurrentHashMap 在 Java 7 和 Java 8 中的结构分别是什么?它们有什么相同点和不同点?所以本课时就对 ConcurrentHashMap 在这两个版本的特点和性质进行对比和介绍。
2024-04-04 03:45:50
125
原创 数据库分析查询语句Explain详解,一步一步带你分析字段的含义
EXPLAIN 关键字可以模拟优化器执行 SQL 语句,分析你的查询语句或是结构的性能瓶颈在 select 语句之前增加 explain 关键字 ,MySQL 会在查询上设置一个标记,执行查询会返回执行计划的信息,而不是执行这条 SQL注意:如果 from 中包含子查询,仍会执行该子查询,将结果放入临时表中官网:https://dev.mysql.com/doc/refman/5.7/en/explain-extended.html。
2024-03-31 11:43:45
117
原创 【毕设项目推荐】SpringBoot的图书馆管理系统
借阅记录中可以进行借阅者,书籍详情,未归还书籍的查询;(4)一般用户,只能查询图书,并进行借书操作(提出借书申请),每个用户最多借阅8本,即当目前借书已经是8本,则不能再借书了,只有还书后,才可以再借阅。(3)管理员可以实现对注册用户的管理(查询、删除、密码修改)、用户的借书申请的确定和还书操作,并实现对图书的创建、查询、修改和删除等有关的操作。登录后,系统会根据用户ID自动判别用户类别,如果是r开头的,为读者登录,如果是m开头的则为管理员。除了个人信息更改,还包括用户管理,书籍管理,借阅管理三大模块。
2024-03-28 12:42:49
672
原创 分享SQL的7种进阶用法
在MySQL中ORDER BY排序除了可以用ASC和DESC之外,还可以使用自定义排序方式来实现。('咱们结婚吧', '靳东', 43.2, '2013-04-12'),('四大名捕', '刘亦菲', 62.5, '2013-12-21'),('猎场', '靳东', 68.5, '2017-11-03'),('芳华', '范冰冰', 55.0, '2017-09-15'),('功夫瑜伽', '成龙', 91.8, '2017-01-28'),
2024-03-18 10:41:33
438
原创 案例分析:分库分表后,我的应用崩溃了
今天以 Spring Boot 项目常见的分层结构,介绍了每一层可能会引起的内存问题,我们把结论归结为一点,那就是保持输入集或者结果集的简洁。一次性获取非常多的数据,会让中间过程变得非常不可控。最后,我们分析了一个驱动层的数据库中间件,以及对内存使用的一些问题。很多时候我们把这些耗时又耗内存的操作,写了非常复杂的 SQL 语句,然后扔给最底层的数据库去解决,这种情况大多数认为换汤不换药,不过是把具体的问题冲突,转移到另一个场景而已。
2024-03-14 00:00:55
864
1
原创 MySQL大表优化方案(应该是最完整最全的了)
水平拆分是通过某种策略将数据分片来存储,分库内分表和分库两部分,每片数据会分散到不同的MySQL表或库,达到分布式的效果,能够支持非常大的数据量。前面的表分区本质上也是一种特殊的库内分表库内分表,仅仅是单纯的解决了单一表数据过大的问题,由于没有把表的数据分布到不同的机器上,因此对于减轻MySQL服务器的压力来说,并没有太大的作用,大家还是竞争同一个物理机上的IO、CPU、网络,这个就要通过分库来解决前面垂直拆分的用户表如果进行水平拆分,结果是:实际情况中往往会是垂直拆分和水平拆分的结合,即将。
2024-03-13 23:20:59
4546
原创 遇到问题不要慌,轻松搞定内存泄露
今天介绍了很多 Linux 命令,用于定位分析问题,所有的命令都是可以实际操作的,能够让你详细地把握整个 JVM 乃至操作系统的运行状况。其中,jinfo、jstat、jstack、jhsdb(jmap)等是经常被使用的一些工具,尤其是 jmap,在分析处理内存泄漏问题的时候,是必须的。同时还介绍了保留现场的工具和辅助分析的方法论,遇到问题不要慌,记得隔离保存现场。接下来我们看了一个实际的例子,由于 SWAP 的启用造成的服务卡顿。SWAP 会引起很多问题,在高并发服务中一般是关掉它。
2024-01-16 22:17:06
880
原创 Synchronized 和 ReentrantLock 的实现原理是什么?它们有什么区别?
今天讲了 synchronized 和 ReentrantLock 的实现过程,然后讲了 synchronized 和 ReentrantLock 的区别,最后通过源码的方式讲了 ReentrantLock 加锁和解锁的执行流程。接着又讲了 JDK 1.6 中的锁优化,包括自适应式自旋锁的实现过程,以及 synchronized 的三种锁状态和锁升级的执行流程。synchronized 刚开始为偏向锁,随着锁竞争越来越激烈,会升级为轻量级锁和重量级锁。如果大多数锁被不同的线程所争抢就不建议使用偏向锁了。
2024-01-16 21:58:20
995
原创 【搜索引擎设计:信息搜索怎么避免大海捞针?
PageRank 算法我们现在看起来平平无奇,但是正是这个算法造就了 Google 近 2 万亿美元的商业帝国。在 Google 之前,Yahoo 已经是互联网最大的搜索引擎公司。按照一般的商业规律,如果一个创新公司不能带来十倍的效率或者体验提升,就根本没有机会挑战现有的巨头。而 Google 刚一出现,就给 Yahoo 和旧有的搜索引擎世界带来摧枯拉朽的扫荡,用户体验的提升不止十倍,这其中的秘诀正是 PageRank。
2024-01-13 20:52:15
1392
原创 Java并查集设计以及路径压缩实现
并查集是一种树型的数据结构 ,并查集可以高效地进行如下操作:- 查询元素p和元素q是否属于同一组- 合并元素p和元素q所在的组
2024-01-13 20:10:20
1097
原创 B-树和B+树的特性,以及B+树在数据库中的应用
由于B+树在非叶子结点上不包含真正的数据,只当做索引使用,因此在内存相同的情况下,能够存放更多的key。由于B树的每一个节点都包含key和value,因此我们根据key查找value时,只需要找到key所在的位置,就能找到value,但B+树只有叶子结点存储数据,索引每一次查找,都必须一次一次,一直找到树的最大深度处,也就是叶子结点的深度,才能找到value。在实际应用中B树的阶数一般都比较大(通常大于100),所以,即使存储大量的数据,B树的高度仍然比较小,这样在某些应用场景下,就可以体现出它的优势。
2024-01-11 12:59:17
1189
原创 Java平衡树--红黑树,如何平衡化以及操作实现
红链接均为左连接没有任何一个节点同时和两条红链接相连该树是完美黑色平衡的,即是任意空链接到根节点的路径上的黑链接数量相同。
2024-01-11 12:57:15
1243
原创 Java平衡树--查找树的新建与树的实现
一棵2-3查找树要么为空,要么满足满足下面两个要求:2-结点含有一个键(及其对应的值)和两条链,左链接指向2-3树中的键都小于该结点,右链接指向的2-3树中的键都大于该结点。3-结点含有两个键(及其对应的值)和三条链,左链接指向的2-3树中的键都小于该结点,中链接指向的2-3树中的键都位于该结点的两个键之间,右链接指向的2-3树中的键都大于该结点。
2024-01-10 13:23:31
920
原创 详解 ThreadPoolExecutor 的参数含义及源码执行流程?
new RejectedExecutionHandler() { // 添加自定义拒绝策略@Override// 业务处理方法System.out.println("执行自定义拒绝策略");});i < 6;i++) {});执行自定义拒绝策略可以看出线程池执行了自定义的拒绝策略,我们可以在 rejectedExecution 中添加自己业务处理的代码。
2024-01-10 13:21:04
1090
原创 Java二叉树的遍历以及最大深度问题
树是我们计算机中非常重要的一种数据结构,同时使用树这种数据结构,可以描述现实生活中的很多事物,例如家谱、单位的组织架构、等等。树是由n(n>=1)个有限结点组成一个具有层次关系的集合。把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。每个结点有零个或多个子结点;没有父结点的结点为根结点;每一个非根结点只有一个父结点;每个结点及其后代结点整体上可以看做是一棵树,称为当前结点的父结点的一个子树;
2024-01-07 23:01:00
1100
原创 数据结构与算法——符号表API设计及有序符号表设计
符号表最主要的目的就是将一个键和一个值联系起来,符号表能够将存储的数据元素是一个键和一个值共同组成的键值对数据,我们可以根据键来查找对应的值。符号表中,键具有唯一性。
2024-01-01 20:47:49
464
原创 Zookeeper注册中心实战
Spring Cloud Zookeeper通过自动配置和绑定到 Spring 环境和其他 Spring 编程模型习惯用法,为 Spring Boot 应用程序提供通过一些简单的注释,您可以快速启用和配置应用程序内的常见模式,并使用 Zookeeper 构建大型分布式系统。提供的模式包括服务发现和分布式配置。官方地址:https://spring.io/projects/spring-cloud-zookeeper#lea。
2024-01-01 20:42:52
1572
原创 线性表之队列API设计思路
Java学习手册+面试指南:https://javaxiaobear.cn队列是一种基于先进先出(FIFO)的数据结构,是一种只能在一端进行插入,在另一端进行删除操作的特殊线性表,它按照先进先出的原则存储数据,先进入的数据,在读取数据时先读被读出来。
2023-12-29 11:31:51
410
原创 线性表:顺序表的实现以及遍历扩容
Java学习手册+面试指南:https://javaxiaobear.cn顺序表是在计算机内存中以数组的形式保存的线性表,线性表的顺序存储是指用一组地址连续的存储单元,依次存储线性表中的各个元素、使得线性表中再逻辑结构上响铃的数据元素存储在相邻的物理存储单元中,即通过数据元素物理存储的相邻关系来反映数据元素之间逻辑上的相邻关系。
2023-12-29 10:53:18
1006
原创 栈:从简单栈到解决经典栈问题
Java学习手册+面试指南:https://javaxiaobear.cn栈是一种基于先进后出(FILO)的数据结构,是一种只能在一端进行插入和删除操作的特殊线性表。它按照先进后出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来)。我们称数据进入到栈的动作为压栈,数据从栈中出去的动作为弹栈。
2023-12-29 10:49:18
377
原创 链表:如何利用“假头,新指针,双指针”解决链表问题
链表是一种线性数据结构,其中的每个元素实际上是一个单独的对象,而所有对象都通过每个元素中的引用字段链接在一起。链表是一种物理存储单元上非连续、非顺序的存储结构,其物理结构不能只管的表示数据元素的逻辑顺序,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列的结点(链表中的每一个元素称为结点)组成,结点可以在运行时动态生成。
2023-12-28 22:29:50
890
原创 Java 17 变量与运算符最全解读2w字
Java各整数类型有固定的表数范围和字段长度,不受具体操作系统的影响,以保证Java程序的可移植性。定义long类型的变量,赋值时需要以"l"或"L"作为后缀。Java程序中变量通常声明为int型,除非不足以表示较大的数,才使用long。Java的整型常量默认为`` int ``型。
2023-12-28 13:53:42
1007
《小熊学Java 面试手册》v1.0.pdf
2023-10-13
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人