自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 ZooKeeper系列:zk中的watch

Watch就是监听,观察。其实就是客户端注册watch,然后服务端发生节点数据变化的时候会触发watch事件,接着回调客户端。

2022-10-10 13:10:38 896 1

原创 堪称一站式管理平台,同时支持Linux、MySQL、Redis、MongoDB可视化管理

mayfly-go号称Web版Linux、数据库、Redis、MongoDB统一管理操作平台,是一款开源的可视化管理工具。Linux系统管理:支持查看Linux系统信息和进程管理,内置了Web版的SSH终端工具。数据库管理:目前仅支持MySQL和PostgreSQL,类似于简化版的Navicat,功能不多但基本能满足我们的数据库管理需求。Redis管理:支持Redis服务信息的查看及数据管理。MongoDB管理:支持MongoDB服务信息的查看及数据管理。

2022-10-10 13:09:39 971

原创 Java 做项目能用到 Map 哪些功能?这篇总结全了

这篇文章给大家盘点了一下 Map 的整个体系中都有哪些实现类,并针以最常使用的 HashMap 为切入点,介绍了 Map 这种数据结构在开发中常会使用到的功能。这篇文章主要是让新手快速入门或者是让老手在开发中快速查询参考,对于 Map 底层的数据结构实现、怎么解决哈希碰撞、怎么扩容这些并没涉及,这块面试的时候还精彩被问到,在会使用 Map 的基础上,一定要再看看这方面的知识。

2022-10-10 13:07:41 1009

原创 聊一聊安全且正确使用缓存的那些事 —— 关于缓存可靠性、关乎数据一致性

而没有设置过期时间的数据,通常是要求常驻内存的,往往是一些配置数据或者是一些需要当做白名单含义使用的数据(比如用户信息,如果用户信息不在缓存里,则说明用户不存在),这种如果强行将其删除,可能会造成业务层面的一些逻辑异常。有些人盯上了论坛的内容,便搞了个爬虫程序,模拟帖子ID的生成规则,调用查询详情接口并传入自己生成的ID去遍历挖取系统内的帖子数据,这样导致很多传入的ID是无效的、系统内并不存在对应ID的帖子数据。为了限制缓存的数量,很多的缓存记录都会设置一定的有效期,到期后自动失效。

2022-10-10 09:14:23 440

原创 靠这份文档,掌握百分之八十拿下阿里P8架构师岗,Java面试PDF

面试官通常会在短短两小时内对面试者的知识结构进行全面了解,面试者在回答问题时如果拖泥带水且不能直击问题的本质,则很难充分表现自己,最终影响面试结果。针对这种情况,本文在讲解知识点时不拖泥带水,力求精简,详细介绍了Java程序员面试时常被问及的核心知识点。本文是对Java程序员面试必备知识点的总结,详细讲解了JVM原理、多线程、数据结构和算法、分布式缓存、设计模式等内容,希望读者能通过阅读本书对Java的基础原理有更深入、全面的理解。添加图片注释,不超过 140 字(可选)关注公众号即可获得全套面试资料。

2022-10-09 15:45:17 155

原创 GitHub上超牛的《Java面试突击版》,分享PDF离线版

本文是对Java程序员面试必备知识点的总结,详细讲解了JVM原理、多线程、数据结构和算法、分布式缓存、设计模式等内容,希望读者能通过阅读本书对Java的基础原理有更深入、全面的理解。面试官通常会在短短两小时内对面试者的知识结构进行全面了解,面试者在回答问题时如果拖泥带水且不能直击问题的本质,则很难充分表现自己,最终影响面试结果。针对这种情况,本文在讲解知识点时不拖泥带水,力求精简,详细介绍了Java程序员面试时常被问及的核心知识点不论是校招还是社招都避免不了各种面试。

2022-10-09 15:41:53 417

原创 剑指Java面试:面试官能问到的问题,都被我收集在这份PDF文档里

本文是对Java程序员面试必备知识点的总结,详细讲解了JVM原理、多线程、数据结构和算法、分布式缓存、设计模式等内容,希望读者能通过阅读本书对Java的基础原理有更深入、全面的理解。面试官通常会在短短两小时内对面试者的知识结构进行全面了解,面试者在回答问题时如果拖泥带水且不能直击问题的本质,则很难充分表现自己,最终影响面试结果。针对这种情况,本文在讲解知识点时不拖泥带水,力求精简,详细介绍了Java程序员面试时常被问及的核心知识点拿到这个PDF之后,面试官所问到的知识点相信你都能答得上来!

2022-10-09 14:13:24 342

原创 excel百万数据如何导入导出?

因为你所创建的book,Sheet,row,cell等在写入到Excel之前,都是存放在内存中的(这还没有算Excel的一些样式格式等等),可想而知,内存不溢出就有点不科学了!限制了用户的下载数量每次最多只能有四个人同时下载,并且控制每个用户最大的导出数据最多只能是20w,与此同时他们也是使用的JDBC分批导入,但是并没有手动控制事务。2、其次就是往DB里插入,怎么去插入这20w条数据,当然不能一条一条的循环,应该批量插入这20w条数据,同样也不能使用Mybatis的批量插入语,因为效率也低。

2022-10-09 13:43:14 2528

原创 程序员初学者频繁使用count(*),被组长批评后怒怼:性能并不拉垮

mysql用count方法查全表数据,在不同的存储引擎里实现不同,myisam有专门字段记录全表的行数,直接读这个字段就好了。而innodb则需要一行行去算。性能方面count(*) ≈ count(1) > count(主键id) > count(普通索引列) > count(未加索引列),但哪怕是性能最好的count(*),由于实现上就需要一行行去算,所以数据量大的时候就是不给力。

2022-10-09 13:35:24 407

原创 满地坑,细数List的10个坑

由于篇幅的限制,我们只对一些在业务开发中常见的关键点进行梳理和介绍在实际的工作中,我们不单单是要清除不同类型容器的特性,还要选择适合的容器才能做到事半功倍。我们主要介绍了Arrays.asList转换过程中的一些坑,以及因为操作不当造成的OOM和异常,到最后介绍了线程安全类CopyOnWriteArrayList的一些坑,让我们认识到在丰富的API下藏着许多的陷阱。在使用的过程中,需要更加充分的考虑避免这些隐患的发生。最后一张思维导图来回顾一下~

2022-10-09 13:30:33 184

原创 答应我, 不要再用 if (obj = null) 判空了

相信不少小伙伴已经被java的NPE(Null Pointer Exception)所谓的空指针异常搞的头昏脑涨,有大佬说过“防止 NPE,是程序员的基本修养。”但是修养归修养,也是我们程序员最头疼的问题之一,那么我们今天就要尽可能的利用Java8的新特性 Optional来尽量简化代码同时高效处理NPE(Null Pointer Exception 空指针异常)

2022-10-09 13:28:32 236

原创 开源杂谈 : 理解开源框架的定制思路

作为开源软件,是有可能无法满足业务场景的.这一篇主要从思想的角度来看 ,如何对开源框架进行深度的改造. 主要以 SpringMVC DispatchServlet 的定制为案例.对于开源框架的深度定制其实是无赖之举 ,定制的目的是为了不破坏原有的逻辑,其实前后置处理器和链表中插入才是最合适的.不然别人出现个漏洞升级了 ,你代码就得完蛋。

2022-10-09 09:16:54 737

原创 好用到爆,IDEA版Postman面世了,功能非常强大

号称是IDEA版本的Postman。它是一个功能强大的Restful API工具包插件,可以根据已有的方法快速生成接口调试用例。它有一个漂亮的界面来完成请求、检查服务器响应、存储你的API请求和导出API请求,该插件能帮助你在IDEA内更快更高效地调试API!下面是使用调试mall项目API接口的一张效果图,用起来还是非常方便的!今天体验了一把这个插件,体验确实不错,开发人员用来调试接口基本够用了!尤其是它能根据接口代码直接生成调试信息,并且能根据接口直接定位代码,确实提高了开发人员的效率!

2022-10-08 15:35:12 369

原创 一文快速上手高性能网络框架netty

在使用netty之前,我们首先要知道netty的优势在哪,它能解决什么问题。我们不妨直接引用netty官网上最顶部的内容:翻译一下就是:netty是一款的的网络程序框架,支持开发可维护的的面向协议的服务器和客户端。pipline。

2022-10-08 13:56:24 505

原创 SpringBoot 优雅地实现文件的上传和下载

这里使用 mybatis-plus 的代码生成工具自动生成 controller、entity、service、mapper,极大地提高代码开发效率。新建 index.html 文件,分别引入 bootstrap 的 css 和 Thymeleaf 的命名空间。1.先根据文件 id 查询文件信息,然后根据文件所在路径和文件名获取 file 对象。1.先根据文件 id 查询文件信息,然后根据文件所在路径和文件名获取文件输入流。是一个上传文件的组件,该组件封装了一些上传文件的方法。3.删除数据库中该文件信息。

2022-10-08 13:55:07 3157 4

原创 一招给你的log4j2日志穿件”花衣服“

大家项目中打印在Console中的日志是什么样的呢?是否都是清一色的黑色字体,如下图所示,这样会导致一些关键日志信息,比如error、warn日志被忽视掉,那有什么办法可以修改Console中日志的样式,让一些关键日志能够显著的被找到?本文讲解了log4j2框架下如何美化你输出的日志,不过这只针对控制台输出的日志起效,文件中的日志并不生效,希望大家都用起来呀。

2022-10-08 13:41:42 533

原创 2022年Java核心面试题全解析

自动装箱是将一个java定义的基本数据类型赋值给相应封装类的变量。拆箱与装箱是相反的操作,自动拆箱则是将一个封装类的变量赋值给相应基本数据类型的变量。

2022-10-08 11:14:22 374

原创 在Tomcat中启用虚拟线程特性

趁着国庆前后阅读了虚拟线程相关的源码,写了一篇《虚拟线程 - VirtualThread源码透视》,里面介绍了虚拟线程的实现原理和使用示例。线程池甚至可以设计为一个完全自定义的虚拟线程调度器,可以参考前面一篇文章,这里不再赘述。的线程池是最终调用看到的控制台输出的虚拟线程名称是一个空字符串。实现比较简单,就是在控制台打印一些虚拟线程和载体线程的一些信息,然后返回。还没有适配虚拟线程,主要是没有改造监视器锁的引用导致虚拟线程。)使用的是还是旧的规范,对应的类是。,这只是其中一个接口,大部分和。

2022-10-08 09:46:16 1513 1

原创 从SpringBoot启动,阅读源码设计

上下文接口抽象实现,核心的API,对应用上下文中的公共能力做了实现;

2022-10-08 09:44:42 126

原创 聊一聊作为高并发系统基石之一的缓存,会用很简单,用好才是技术活

本篇文章的内容中,我们对缓存的各个方面进行了一个简单的阐述与了解,也可以看出缓存对于一个软件系统的重要价值。通过对缓存的合理、充分利用,可以大大的增强我们的系统承压性能、提升产品的用户体验。缓存作为高并发系统中的神兵利器被广泛使用,堪称高并发系统的基石之一。而缓存的内容还远远不止我们本篇文档中所介绍的这些、它是一个非常宏大的命题。为了能够将缓存的方方面面彻底的讲透、讲全,在接下来的一段时间里,我会以系列专栏的形式,从不同的角度对缓存的方方面面进行探讨。

2022-10-08 09:43:11 338

原创 Spring Cloud Alibaba Sentinel 整合 nacos 进行规则持久化

在使用过程中我们发现在Sentinel 控制台中配置了规则之后,随着服务的重启,配置的规则也随之消失。Sentinel 控制台控制台默认是将这些规则保存在内存中,服务没了,规则也没了。试想一下如果我们配置了很多规划或者是因为某种原因服务挂掉了,那我们配置的数据也就丢失了,显然这不是我们想要的。Sentinel将规则存储在文件、数据库或者配置中心当中,Sentinel默认提供的数据源有file、zookeeper、Redis、consul、apollo、nacos,当然也可以自己自定义数据源。

2022-10-07 11:31:16 1016

原创 springMVC源码探索之RequestMappingHandlerMapping

RequestMappingHandlerMapping是AbstractHandlerMethodMapping 抽象类的唯一实现类,它的作用 是根据在Controller中的@RequestMapping注解生成RequestMappingInfo。

2022-10-07 11:05:28 449

原创 有 List 了为什么还要有 Set?Java 容器 Set 的核心通关指南

Set 跟 List 的主要区别是不允许重复对象,这在有些场景会减少复杂度,提高程序的效率。Set 中的HashSet 是无序集合,不能像 List 一样使元素的排列顺序和插入顺序保存一致,想要使用有序 Set 可以选择 LinkedHashSet 和 TreeSet,TreeSet 更是能让我们指定比较器,让元素在插入时就进行好排序。不过这里介绍的 Set 容器都不是线程安全的,等讲到 Java 并发时咱们会在介绍 Set 相关的并发容器。

2022-10-07 10:11:38 893

原创 MySQL千万级数据的表如何优化

这里先说明一下,网上很多人说阿里规定500w数据就要分库分表。实际上,这个500w并不是定义死的,而是与MySQL的配置以及机器的硬件有关。MySQL为了提升性能,会将表的索引装载到内存中。但是当表的数据到达一定的量的时候,会导致内存无法存储这些索引,无法存储索引,就只能进行磁盘IO,从而导致性能下降。

2022-10-07 10:06:22 182

原创 Mysql大数据表处理方案

当我们业务数据库表中的数据越来越多,如果你也和我遇到了以下类似场景,那让我们一起来解决这个问题。

2022-10-07 10:04:42 698

原创 SpringBoot 事务不回滚?怎么解决?

本文我们介绍了 5 种事务不自动回滚的场景和相应的解决方案,开发者应该根据自己的实际情况,选择合适自己解决方案进行处理。

2022-10-07 10:02:28 840

原创 说一下 Spring 事务传播机制?

Spring 事务传播机制是包含多个事务的方法在相互调用时,事务是如何在这些方法间传播的。事务的传播级别有 7 个,支持当前事务的:REQUIRED、SUPPORTS、MANDATORY;不支持当前事务的:REQUIRES_NEW、NOT_SUPPORTED、NEVER,以及嵌套事务 NESTED,其中 REQUIRED 是默认的事务传播级别。

2022-10-07 10:00:55 132

原创 《Thinking In Java》作者:不要使用并发

今天纯粹就是带你们来读读书的~最近除了工作,特地买回了自己很喜欢的作者新发售的一本书《On Java》,作者是我的老朋友布鲁斯·埃克尔,在Java领域很有名,你可能没听过他的名字,但极有可能听过他的另一本书《Thinking In Java》,我想很多Java工程师都读过这本书,可以说是Java编程思想的良心之作。

2022-10-07 09:50:45 77

原创 Alibaba 新产 SpringBoot 深度历险,把基础,进阶,项目实战,源码全讲清楚了

SpringBoot 虽然入门快,你也可能在网上看了很多遍【一天或者两天精通 SpringBoot】,但就是精通不了,简历上也不敢写精通 SpringBoot。这样的话不管是面试还是跟老板谈薪资上都会少一分底气,吃了“不硬”的亏!下面给大家分享一份超 nice 的 Spring Boot 笔记,这份笔记把 SpringBoot 基础,进阶,项目实战,源码全讲清楚了。

2022-10-06 16:20:16 313

原创 阿里高工熬夜 18 天码出 Java150K 字面试宝典

最近也是一直有粉丝朋友私聊我说,面试了很长时间,一直拿不到 Offer,有没有一份内容全面,题目高频的面试题库,需要系统的梳理一下自己的技术栈!我的内心:这我上哪儿整去啊!没办法好歹也是坐拥 5W 粉丝的小博主,粉丝就是我的上帝,于是熬夜 18 天为大家整理了一份 Java 全栈面试进阶宝典!希望对大家有所帮助!

2022-10-06 16:12:57 101

原创 SpringBoot 整合 Minio 上传文件

MinIO与传统的存储和其他的对象存储不同的是:它一开始就针对性能要求更高的私有云标准进行软件架构设计。所以他采用了更易用的方式进行设计,它能实现对象存储所需要的全部功能,在性能上也更加强劲,它不会为了更多的业务功能而妥协,失去MinIO的易用性、高效性。这样的结果所带来的好处是:它能够更简单的实现局有弹性伸缩能力的原生对象存储服务。同时,它在机器学习、大数据、私有云、混合云等方面的存储技术上也独树一帜。MinIO 是一款高性能、分布式的对象存储系统. 它是一款软件产品, 可以100%的运行在标准硬件。

2022-10-06 13:15:00 466 1

原创 ExecutorService、Callable、Future实现有返回结果的多线程原理解析

以上就是执行线程任务run方法后,如何将线程任务结果返回给主线程,其实,还少一个地方补充,就是如何将FutureTask任务丢给线程执行,我们这里用到了线程池, 但是execute(ftask)底层同样是使用一个了线程通过执行start方法开启一个线程,这个新运行的线程最终会执行FutureTask的run方法。因此,我自定义了一个实现Callable接口的类,该类的重写了call方法,我们在执行多线程时希望返回什么样的结果,就可以在该重写的call方法定义。

2022-10-06 13:12:57 195

原创 我说HashMap初始容量是16,面试官让我回去等通知

原因就是HashMap的所有修改方法都没有加锁,导致在多线程情况下,无法保证数据一致性和安全性。比如:一个线程删除了一个key,由于没有加锁,其他线程无法及时感知到,还继续能查到这个key,无法保证数据的一致性。比如:一个线程添加完一个元素,由于没有加锁,其他线程无法及时感知到,另一个线程正在扩容,扩容后就把上一个线程添加的元素弄丢了,无法保证数据的安全性。

2022-10-06 13:11:21 175

原创 我说HashMap初始容量是16,面试官让我回去等通知

原因就是HashMap的所有修改方法都没有加锁,导致在多线程情况下,无法保证数据一致性和安全性。比如:一个线程删除了一个key,由于没有加锁,其他线程无法及时感知到,还继续能查到这个key,无法保证数据的一致性。比如:一个线程添加完一个元素,由于没有加锁,其他线程无法及时感知到,另一个线程正在扩容,扩容后就把上一个线程添加的元素弄丢了,无法保证数据的安全性。

2022-10-06 13:08:13 470

原创 SpringBoot 2.x整合Log4j2日志

公司的spring boot项目不是使用默认的logback作为日志框架,而是log4j2, 主要原因是logback出现过一个生产问题导致,具体什么问题难以追溯了。本文主要讲解下SpringBoot 2.x如何更换springboot的日志框架为log4j2, 以及log4j2的配置。本次演示采用的springboot 版本为2.7.x。 需要排除掉logback日志框架的依赖 引入log4j2的依赖 添加log4j2配置文件 在classpath下添加或者文件,建议使用log4

2022-10-06 13:05:53 275

原创 为什么很多程序员不用switch,而是大量的if else?

说来也是巧最近在看 Dubbo 源码,然后发现了一处很奇怪的代码,刚好和这个 switch 和 if else 有关! 让我们来看一下这段代码,它属于 ChannelEventRunnable,这个 runnable 是 Dubbo IO 线程创建,将此任务扔到业务线程池中处理。​添加图片注释,不超过 140 字(可选)看到没,把 state == ChannelState.RECEIVED 拎出来独立一个 if,而其他的 state 还是放在 switch 里面判断。​添加图片注释,不超过 140 字(可

2022-10-05 15:01:51 142

原创 InnoDB自增原理都搞不清楚,还怎么CRUD?

不推荐显式指定自增列数据,因为在5.7以及之前的版本,如果通过update语句显式指定一个比SELECT MAX(*ai_col*)还大的自增列值,后续insert语句可能会抛"Duplicate entry"错误,这一点在8.0版本之后也有了改变,如果通过显式的update语句显式指定一个比SELECT MAX(*ai_col*)还大的自增列值,那该值就会被持久化,后续的自增列值都从该值开始生成。在这种场景下,因为同时可能有其他的插入语句执行,因此x和y的值是不确定的,下一个自增值也是未知的。

2022-10-05 14:58:48 93

原创 全网显示 IP 归属地,用上这个开源库,实现也太简单了

细心的小伙伴可能会发现,最近蘑菇新上线了 IP 属地的功能,小伙伴在发表动态、发表评论以及聊天的时候,都会显示自己的 IP 属地信息​添加图片注释,不超过 140 字(可选)动态显示IP属地在蘑菇群聊中,也 可 以 展 示 IP 属 地,下面是小伙伴们在交流群中显示的​添加图片注释,不超过 140 字(可选)下面,我就来讲讲,Java 中是如何获取 IP 属地的,主要分为以下几步通过 HttpServletRequest 对象,获 取 用户的 IP 地址通过 IP 地址,获取对应的省份、城市首先需要写一个

2022-10-05 14:55:19 121

原创 Mall电商实战项目全面升级,支持最新版SpringBoot,干掉循环依赖

在升级SpringBoot 2.6.x版本的时候,其实Swagger就有一定的兼容性问题,需要在配置中添加BeanPostProcessor这个Bean,具体可以参考升级 SpringBoot 2.6.x 版本后,Swagger 没法用了。既然官方都禁止使用了,我们还是从源头上解决循环依赖的好,如何优雅地解决循环依赖问题具体可以参考mall-tiny升级支持SpringBoot 2.7.0 中的解决循环依赖部分,mall项目也使用了这种优雅的方式。为什么升级该版本呢?

2022-10-05 14:21:46 317

原创 阿里顶级技术官 500 页网络协议手记,限时开源

网络协议为计算机网络中进行数据交换而建立的规则、标准或约定的集合。例如,网络中一个微机用户和一个大型主机的操作员进行通信,由于这两个数据终端所用字符集不同,因此操作员所输入的命令彼此不认识。为了能进行通信,规定每个终端都要将各自字符集中的字符先变换为标准字符集的字符后,才进入网络传送,到达目的终端之后,再变换为该终端字符集的字符。下面就给大家分享一份由阿里技术官写出来的网络协议手记,

2022-10-05 14:16:04 71

空空如也

空空如也

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

TA关注的人

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