12 2022 档案

摘要:【架构设计】保持简单轻量设计的三个原则——DRY,KISS, YAGNI前言 一个软件轻量简单的软件架构是非常重要的,它可以让我们花最小的代价就能满足业务上的需求。那如何保证轻量简单呢?那今天就和大家分享下这其中的秘密,也就是3个重要的指导原则,KISS原则,YAGNI原则和DRY原则,你们都知道并且理解吗? 欢迎关注微信公众号「JAVA旭阳」交流和学习 KISS原则 阅读全文
posted @ 2022-12-29 22:12 JAVA旭阳 阅读(781) 评论(0) 推荐(2)
摘要:90%的Java开发人员都会犯的5个错误前言 作为一名java开发程序员,不知道大家有没有遇到过一些匪夷所思的bug。这些错误通常需要您几个小时才能解决。当你找到它们的时候,你可能会默默地骂自己是个傻瓜。是的,这些可笑的bug基本上都是你忽略了一些基础知识造成的。其实都是很低级的错误。今天,我总结一些常见的编码错误,然后给出解决方案。希望 阅读全文
posted @ 2022-12-28 21:11 JAVA旭阳 阅读(1660) 评论(4) 推荐(3)
摘要:丧心病狂,竟有Thread.sleep(0)这种神仙写法?前言 最近在网上看到了一段代码,让我感到很迷茫。他在代码中使用了 Thread.sleep(0),让线程休眠时间为0秒,具体代码如下。 int i = 0; while (i<10000000) { // business logic //prevent long time gc if (i % 3 阅读全文
posted @ 2022-12-27 22:34 JAVA旭阳 阅读(3135) 评论(5) 推荐(3)
摘要:正确理解和使用JAVA中的字符串常量池前言 研究表明,Java堆中对象占据最大比重的就是字符串对象,所以弄清楚字符串知识很重要,本文主要重点聊聊字符串常量池。Java中的字符串常量池是Java堆中的一块特殊存储区域,用于存储字符串。它的实现是为了提高字符串操作的性能并节省内存。它也被称为String Intern Pool或String 阅读全文
posted @ 2022-12-26 21:53 JAVA旭阳 阅读(809) 评论(0) 推荐(0)
摘要:【架构设计】你的类足够“专一”吗前言 软件设计SOLID原则中有一个最基础的原则就是单一职责原则,我想绝大部分的程序员都知道,而且都理解它的意思,甚至觉得很简单。但是往往“看懂”和“会用”是两回事,而“用好”更是难上加难。好比我们项目,一开始一直和大家强调类的单一职责,随着业务不断发展,不同的同事都往这个类“添砖加瓦”,最终导致一 阅读全文
posted @ 2022-12-25 21:16 JAVA旭阳 阅读(356) 评论(1) 推荐(0)
摘要:为什么更推荐使用组合而非继承关系?前言 最近在看公司项目的代码,看到了大量的继承体系,而且还是继承了多层,维护、阅读都十分的困难。在查阅了一些资料以后,包括《Effective Java》一书中的第16条提到“组合优先于继承”。那继承到底会暴露什么问题呢?为什么更推荐优先使用组合呢? 欢迎关注微信公众号「JAVA旭阳」交流和学习 继 阅读全文
posted @ 2022-12-24 22:04 JAVA旭阳 阅读(1415) 评论(3) 推荐(6)
摘要:软件设计中最关键的“开闭原则”,究竟指什么呢?前言 软件设计原则中有一条很关键的原则是开闭原则,就是所谓的对扩展开放,对修改关闭。个人觉得这条原则是非常重要的,直接关系到你的设计是否具备良好的扩展性,但也是相对比较难以理解和掌握的,究竟怎样的代码改动才被定义为“扩展”?怎样的代码改动才被定义为“修改”?怎么才算满足或违反“开闭原则”?别急,本文 阅读全文
posted @ 2022-12-23 09:30 JAVA旭阳 阅读(590) 评论(2) 推荐(3)
摘要:IntelliJ IDEA中我最爱的10个快捷操作前言 欢迎关注微信公众号「JAVA旭阳」交流和学习 IntelliJ IDEA提供了一些Java的快捷键,同样也可以帮助我们提高日常的开发效率。关于这些快捷操作,你知道那几个呢? 1. psvm/main快速生成 main() 方法 在日常开发中,我们经常需要写main()方法,这时候您也可以使用m 阅读全文
posted @ 2022-12-22 10:02 JAVA旭阳 阅读(410) 评论(0) 推荐(0)
摘要:推荐8个提高工作效率的IntelliJ插件前言 欢迎关注微信公众号「JAVA旭阳」交流和学习 IntelliJ目前已经成为市面上最受欢迎的Java开发工具,这得益于里面非常丰富的插件机制。本文我将分享在日常开发中我经常使用的5个插件,它们可以帮助您提高工作效率。 1. GenerateAllSetter 作为开发人员,我们总是需要new() 阅读全文
posted @ 2022-12-21 09:56 JAVA旭阳 阅读(1381) 评论(4) 推荐(4)
摘要:8个Spring事务失效的场景,你碰到过几种?前言 作为Java开发工程师,相信大家对Spring种事务的使用并不陌生。但是你可能只是停留在基础的使用层面上,在遇到一些比较特殊的场景,事务可能没有生效,直接在生产上暴露了,这可能就会导致比较严重的生产事故。今天,我们就简单来说下Spring事务的原理,然后总结一下spring事务失败的场景,并提 阅读全文
posted @ 2022-12-20 12:31 JAVA旭阳 阅读(1177) 评论(2) 推荐(2)
摘要:Spring中11个最常用的扩展点,你知道几个?前言 在使用spring的过程中,我们有没有发现它的扩展能力很强呢? 由于这个优势的存在,使得spring具有很强的包容性,所以很多第三方应用或者框架可以很容易的投入到spring的怀抱中。今天我们主要来学习Spring中很常用的11个扩展点,你用过几个呢? 1. 类型转换器 如果接口中接收参数的实 阅读全文
posted @ 2022-12-19 17:13 JAVA旭阳 阅读(1714) 评论(0) 推荐(3)
摘要:如何在SpringBoot中优雅地重试调用第三方API?前言 作为后端程序员,我们的日常工作就是调用一些第三方服务,将数据存入数据库,返回信息给前端。但你不能保证所有的事情一直都很顺利。像有些第三方API,偶尔会出现超时。此时,我们要重试几次,这取决于你的重试策略。 下面举一个我在日常开发中多次看到的例子: public interface OutSou 阅读全文
posted @ 2022-12-16 13:43 JAVA旭阳 阅读(1511) 评论(0) 推荐(2)
摘要:JAVA中生成随机数Random VS ThreadLocalRandom性能比较前言 大家项目中如果有生成随机数的需求,我想大多都会选择使用Random来实现,它内部使用了CAS来实现。 实际上,JDK1.7之后,提供了另外一个生成随机数的类ThreadLocalRandom,那么他们二者之间的性能是怎么样的呢? Random的使用 Random类是JDK提供的生成随机数的类, 阅读全文
posted @ 2022-12-14 23:49 JAVA旭阳 阅读(660) 评论(0) 推荐(0)
摘要:JAVA中的注解可以继承吗?前言 注解想必大家都用过,也叫元数据,是一种代码级别的注释,可以对类或者方法等元素做标记说明,比如Spring框架中的@Service,@Component等。那么今天我想问大家的是类被继承了,注解能否继承呢?可能会和大家想的不一样,感兴趣的可以往下看。 简单注解继承演示 我们不妨来验证下注解的继承 阅读全文
posted @ 2022-12-13 16:50 JAVA旭阳 阅读(1062) 评论(0) 推荐(0)
摘要:大数据时代,数据仓库究竟是干嘛的?前言 无论你是否专门从事大数据开发,作为一个开发人员,应该都听说过数据仓库的概念,那你知道为什么会出现数据仓库?数据仓库究竟是干嘛的吗?有什么价值和意义呢?那么本文就带到入门,揭开数据仓库的面纱。 数据仓库的由来 数据仓库为何而来,主要解决什么问题的? 先下结论:为了分析数据而来,分析结果为企业决策 阅读全文
posted @ 2022-12-12 14:09 JAVA旭阳 阅读(1147) 评论(0) 推荐(3)
摘要:你不知道的Map家族中的那些冷门容器概述 本篇文章主要讲解下Map家族中3个相对冷门的容器,分别是WeakHashMap、EnumMap、IdentityHashMap, 想必大家在平时的工作中也很少用到,或者压根不知道他们的特性以及适用场景,本篇文章就带你一探究竟。 WeakHashMap 介绍 WeakHashMap称为弱三列映射 阅读全文
posted @ 2022-12-11 23:28 JAVA旭阳 阅读(362) 评论(0) 推荐(2)
摘要:Hadoop如何保证自己的江湖地位?Yarn功不可没前言 任何计算任务的运行都离不开计算资源,比如CPU、内存等,那么如何对于计算资源的管理调度就成为了一个重点。大数据领域中的Hadoop之所以一家独大,深受市场的欢迎,和他们设计了一个通用的资源管理调度平台Yarn密不可分,那Yarn是如何做进行资源管理的呢?它的通用性体现在哪里呢?它是如何保证Ha 阅读全文
posted @ 2022-12-11 10:15 JAVA旭阳 阅读(264) 评论(0) 推荐(0)
摘要:分布式计算MapReduce究竟是怎么一回事?前言 如果要对文件中的内容进行统计,大家觉得怎么做呢?一般的思路都是将不同地方的文件数据读取到内存中,最后集中进行统计。如果数据量少还好,但是面对海量数据、大数据的场景这样真的合适吗?不合适的话,那有什么比较好的方式进行计算呢?不急,看完本文给你答案。 分布式计算思想 我们打开思路,既然文件数据遍布 阅读全文
posted @ 2022-12-10 17:51 JAVA旭阳 阅读(338) 评论(0) 推荐(0)
摘要:大数据HDFS凭啥能存下百亿数据?欢迎关注大数据系列课程 前言 大家平时经常用的百度网盘存放电影、照片、文档等,那有想过百度网盘是如何存下那么多文件的呢?难到是用一台计算机器存的吗?那得多大磁盘啊?显然不是的,那本文就带大家揭秘。 分布式存储思想 既然一台机器的存储所需的磁盘有上限瓶颈,那么我们能否利用多台机器形成一个整体用来存储呢 阅读全文
posted @ 2022-12-09 21:08 JAVA旭阳 阅读(307) 评论(0) 推荐(0)
摘要:一步步带你设计MySQL索引数据结构前言 MySQL的索引是一个非常重要的知识点,也基本上是面试必考的一个技术点,所以非常重要。那你了解MySQL索引的数据结构是怎么样的吗?为什么要采用这样的数据结构? 现在化身为MySQL的架构师,一步步迭代设计出MySQL的索引结构,保证你再也忘记不了索引的结构了,轻松通过面试。 索引介绍 MyS 阅读全文
posted @ 2022-12-08 23:55 JAVA旭阳 阅读(630) 评论(0) 推荐(0)
摘要:记一次InputStream流读取不完整留下的惨痛教训前言 首先,问问大家下面这段流读取的代码是否存在问题呢? inputStream = .... try { // 根据inputStream的长度创建字节数组 byte[] arrayOfByte = new byte[inputStream.available()]; // 调用read 读取字节 阅读全文
posted @ 2022-12-08 16:54 JAVA旭阳 阅读(1188) 评论(0) 推荐(2)
摘要:当我们说大数据Hadoop,究竟在说什么?前言 提到大数据,大抵逃不过两个问题,一个是海量的数据该如何存储,另外一个就是那么多数据该如何进行查询计算呢。好在这些问题前人都有了解决方案,而Hadoop就是其中的佼佼者,是目前市面上最流行的一个大数据软件,那它包括哪些内容呢?有什么特点呢? Hadoop介绍 提到Hadoop,大家的理解是什么? 阅读全文
posted @ 2022-12-08 07:52 JAVA旭阳 阅读(88) 评论(0) 推荐(0)
摘要:【JUC】交换器Exchanger详解前言 JDK中提供了不少的同步工具,现在分享一个相对比较冷门的同步工具——交换器(Exchanger)。你知道Exchanger的作用是什么吗?实现机制是什么?可以用来做什么呢? Exchanger介绍 交换器(Exchanger),顾名思义,用于两个线程之间进行数据交换的。 简单来说,就是一个线程 阅读全文
posted @ 2022-12-07 20:18 JAVA旭阳 阅读(262) 评论(1) 推荐(0)
摘要:上帝视角一览大数据开发体系前言 不知道大家有没有过在百度搜索旅游的关键字,不久就可能收到机票的推销的经验。如今是大数据的时代,数据的价值越来越重要。数据即资产,想必大家都听说过。最近公司的项目中也用到了一些大数据的技术,本文对大数据相关的知识体系做了一个整体的梳理。 什么是大数据 大数据,你可能就简单理解为数据量大,那是多大 阅读全文
posted @ 2022-12-07 10:58 JAVA旭阳 阅读(931) 评论(0) 推荐(4)
摘要:看完这篇,还不懂JAVA内存模型(JMM)算我输欢迎关注专栏【JAVA并发】 前言 开篇一个例子,我看看都有谁会?如果不会的,或者不知道原理的,还是老老实实看完这篇文章吧。 @Slf4j(topic = "c.VolatileTest") public class VolatileTest { static boolean run = true; 阅读全文
posted @ 2022-12-06 20:18 JAVA旭阳 阅读(794) 评论(0) 推荐(1)
摘要:盘点JAVA中基于CAS实现的原子类, 你知道哪些?前言 JDK中提供了一系列的基于CAS实现的原子类,CAS 的全称是Compare-And-Swap,底层是lock cmpxchg指令,可以在单核和多核 CPU 下都能够保证比较交换的原子性。所以说,这些原子类都是线程安全的,而且是无锁并发,线程不会频繁上下文切换,所以在某些场景下性能是优于加锁。 阅读全文
posted @ 2022-12-06 10:37 JAVA旭阳 阅读(718) 评论(0) 推荐(1)
摘要:深刻理解JAVA并发中的有序性问题和解决之道问题 Java并发情况下总是会遇到各种意向不到的问题,比如下面的代码: int num = 0; boolean ready = false; // 线程1 执行此方法 public void actor1(I_Result r) { if(ready) { r.r1 = num + num; } 阅读全文
posted @ 2022-12-05 23:00 JAVA旭阳 阅读(347) 评论(0) 推荐(2)
摘要:乐观锁思想在JAVA中的实现——CAS前言 生活中我们看待一个事物总有不同的态度,比如半瓶水,悲观的人会觉得只有半瓶水了,而乐观的人则会认为还有半瓶水呢。很多技术思想往往源于生活,因此在多个线程并发访问数据的时候,有了悲观锁和乐观锁。 悲观锁认为这个数据肯定会被其他线程给修改了,那我就给它上锁,只能自己访问,要等我访问完,其他人才能访问 阅读全文
posted @ 2022-12-05 16:27 JAVA旭阳 阅读(349) 评论(0) 推荐(0)
摘要:【JUC】循环屏障CyclicBarrier详解欢迎关注专栏【JAVA并发】 前言 jdk中提供了许多的并发工具类,大家可能比较熟悉的有CountDownLatch,主要用来阻塞一个线程运行,直到其他线程运行完毕。而jdk还有一个功能类似并发工具类CyclicBarrier,你知道它的作用吗?和CountDownLatch有什么区别呢? 对于Co 阅读全文
posted @ 2022-12-01 11:56 JAVA旭阳 阅读(183) 评论(0) 推荐(0)