自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

程序员旭阳的专栏

欢迎关注个人公众号【JAVA旭阳】交流

  • 博客(70)
  • 收藏
  • 关注

原创 Spring项目中用了这种解耦模式,经理对我刮目相看

不知道大家在项目中有没有遇到过这样的场景,根据传入的类型,调用接口不同的实现类或者说服务,比如根据文件的类型使用 CSV解析器或者JSON解析器,在调用的客户端一般都是用if else去做判断,比如类型等于JSON,我就用JSON解析器,那如果新加一个类型的解析器,是不是调用的客户端还要修改呢?这显然太耦合了,本文就介绍一种方法,服务定位模式来解决,它帮助我们消除紧耦合实现及其依赖性,并提出将服务与其具体类解耦。我们通过使用服务定位器模式实现了一种扩展 Spring 控制反转的绝妙方法。

2023-01-09 11:01:12 330

原创 【架构设计】如何让你的应用做到高内聚、低耦合?

最近review公司的代码,发现代码耦合程度特别高,修改一处,不知不觉就把其他地方影响到了,这就让我思考该如何让我们写的代码足够内聚,减少耦合呢?"高内聚、松耦合"是一个非常重要的设计思想,能够有效地提高代码的可读性和可维护性,缩小功能改动导致的代码改动范围。它可以用来指导不同粒度代码的设计与开发,比如系统、模块、类,甚至是函数,也可以应用到不同的开发场景中,比如微服务、框架、组件、类库等。本文我们来探讨下如何让我们的应用做到高内聚。

2023-01-06 16:02:54 763

原创 【架构设计】你的应用该如何分层呢?

最近review公司的代码,发现现在整个代码层级十分混乱,一个service类的长度甚至达到了5000多行。而且各种分层模型DTO、VO乱用, 最终出现逻辑不清晰、各模块相互依赖、代码扩展性差、改动一处就牵一发而动全身等问题。我们在吸取了阿里巴巴的分层规范以及网上的一些经验后,重新梳理总结了属于我们项目的分层规范。

2023-01-05 10:25:01 244

原创 5个接口性能提升的通用技巧

作为后端开发人员,我们总是在编写各种API,无论是为前端web提供数据支持的,还是提供内部使用的RPC API。这些API在服务初期可能表现不错,但随着用户数量的增长,一开始响应很快的API越来越慢,直到用户抱怨:“你的系统太糟糕了。” 我只是浏览网页。为什么这么慢?”。这时候你就需要考虑如何优化你的API性能了。要想提高你的API的性能,我们首先要知道哪些问题会导致接口响应慢。API设计需要考虑很多方面。开发语言层面只占一小部分。哪个部分设计不好就会成为性能瓶颈。数据库慢查询复杂的业务逻辑。

2023-01-02 20:01:57 244

原创 90%的Java开发人员都会犯的5个错误

作为一名java开发程序员,不知道大家有没有遇到过一些匪夷所思的bug。这些错误通常需要您几个小时才能解决。当你找到它们的时候,你可能会默默地骂自己是个傻瓜。是的,这些可笑的bug基本上都是你忽略了一些基础知识造成的。其实都是很低级的错误。今天,我总结一些常见的编码错误,然后给出解决方案。希望大家在日常编码中能够避免这样的问题。欢迎关注微信公众号「JAVA旭阳」交流和学习本文总结了在开发过程中很容易犯的5个错误,希望大家养成良好的编码习惯。欢迎关注微信公众号「JAVA旭阳」交流和学习程序员成神之路。

2022-12-28 21:13:49 353

原创 丧心病狂,竟有Thread.sleep(0)这种神仙写法?

最近在网上看到了一段代码,让我感到很迷茫。他在代码中使用了,让线程休眠时间为0秒,具体代码如下。int i = 0;try {}}}sleep了0秒,不就是不睡觉吗?我的第一反应是这段代码没什么用,但是看到他的注释又引起了我的兴趣。经过一番研究,看似无用的一段代码,其实大有文章。欢迎关注微信公众号「JAVA旭阳」交流和学习不是什么无用的代码。sleep方法可用于在 java 代码中放置一个安全点。可以提前在长循环中触发GC,避免GC线程长时间等待,从而避免达到拉长GC时间的目的。

2022-12-27 22:36:15 201

原创 正确理解和使用JAVA中的字符串常量池

研究表明,Java堆中对象占据最大比重的就是字符串对象,所以弄清楚字符串知识很重要,本文主要重点聊聊字符串常量池。Java中的字符串常量池是Java堆中的一块特殊存储区域,用于存储字符串。它的实现是为了提高字符串操作的性能并节省内存。它也被称为或。那让我来看看究竟是怎么一回事吧。欢迎关注微信公众号「JAVA旭阳」交流和学习其实在 Java 7 之前,JVM将放置在PermGen空间中,它具有固定大小——它不能在运行时扩展,也不符合垃圾回收的条件。在PermGen。

2022-12-26 21:55:25 276

原创 【架构设计】你的类足够“专一”吗

软件设计SOLID原则中有一个最基础的原则就是单一职责原则,我想绝大部分的程序员都知道,而且都理解它的意思,甚至觉得很简单。但是往往“看懂”和“会用”是两回事,而“用好”更是难上加难。好比我们项目,一开始一直和大家强调类的单一职责,随着业务不断发展,不同的同事都往这个类“添砖加瓦”,最终导致一个类5000多行,如下图所示,连IDE都受不了,变得卡顿,可想后面维护成本有多大了,究竟为什么会这样呢?又该如何解决呢?

2022-12-25 21:19:10 1385

原创 为什么更推荐使用组合而非继承关系?

最近在看公司项目的代码,看到了大量的继承体系,而且还是继承了多层,维护、阅读都十分的困难。在查阅了一些资料以后,包括《Effective Java》一书中的第16条提到“组合优先于继承”。那继承到底会暴露什么问题呢?为什么更推荐优先使用组合呢?欢迎关注微信公众号「JAVA旭阳」交流和学习不知道大家项目中继承用的多吗?其实在JDK中就有许多违反这条原则的地方,比如栈Stack类并不是Vector,不应该有继承关系,但是实际上就是继承自Vector。

2022-12-24 22:08:13 570

原创 软件设计中最关键的“开闭原则”,究竟指什么呢?

软件设计原则中有一条很关键的原则是开闭原则,就是所谓的对扩展开放,对修改关闭。个人觉得这条原则是非常重要的,直接关系到你的设计是否具备良好的扩展性,但也是相对比较难以理解和掌握的,究竟怎样的代码改动才被定义为“扩展”?怎样的代码改动才被定义为“修改”?怎么才算满足或违反“开闭原则”?别急,本文将展开详细阐述。欢迎关注微信公众号「JAVA旭阳」交流和学习本文讲解了软件设计中个人认为最重要的一个设计原则,开闭原则,即对扩展开放,对修改关闭,这会指导我们写出扩展性良好的代码,设计出扩展性更好的架构。

2022-12-23 09:32:16 493

原创 IntelliJ IDEA中我最爱的10个快捷操作

IntelliJ IDEA提供了一些Java的快捷键,同样也可以帮助我们提高日常的开发效率。关于这些快捷操作,你知道那几个呢?

2022-12-22 10:04:56 269

原创 推荐8个提高工作效率的IntelliJ插件

IntelliJ目前已经成为市面上最受欢迎的Java开发工具,这得益于里面非常丰富的插件机制。本文我将分享在日常开发中我经常使用的5个插件,它们可以帮助您提高工作效率。

2022-12-21 10:00:15 205

原创 8个Spring事务失效的场景,你碰到过几种?

作为Java开发工程师,相信大家对Spring种事务的使用并不陌生。但是你可能只是停留在基础的使用层面上,在遇到一些比较特殊的场景,事务可能没有生效,直接在生产上暴露了,这可能就会导致比较严重的生产事故。今天,我们就简单来说下Spring事务的原理,然后总结一下spring事务失败的场景,并提出对应的解决方案。本文简单阐述了下Spring中事务实现的原理,同时列举了8种Spring事务失败的场景,相信很多朋友可能都遇到过, 失败的原因也有详细说明。希望大家对Spring事务有一个新的认识。

2022-12-20 12:34:31 672

原创 Spring中11个最常用的扩展点,你知道几个?

在使用spring的过程中,我们有没有发现它的扩展能力很强呢?由于这个优势的存在,使得spring具有很强的包容性,所以很多第三方应用或者框架可以很容易的投入到spring的怀抱中。今天我们主要来学习Spring中很常用的11个扩展点,你用过几个呢?Spring MVC拦截器,它可以获得和等web对象实例。Spring MVC拦截器的顶层接口是preHandle在目标方法执行之前执行执行目标方法后执行的postHandle在请求完成时执行为了方便,我们一般继承,它实现了。

2022-12-19 17:22:08 1578

原创 如何在SpringBoot中优雅地重试调用第三方API?

作为后端程序员,我们的日常工作就是调用一些第三方服务,将数据存入数据库,返回信息给前端。但你不能保证所有的事情一直都很顺利。像有些第三方API,偶尔会出现超时。此时,我们要重试几次,这取决于你的重试策略。}}// 递归调用}}@Slf4jif (!}}}看看上面这段代码,我认为它可以正常工作,当retryTimes。

2022-12-16 13:52:17 1058 1

原创 JAVA中生成随机数Random VS ThreadLocalRandom性能比较

大家项目中如果有生成随机数的需求,我想大多都会选择使用Random来实现,它内部使用了CAS来实现。实际上,JDK1.7之后,提供了另外一个生成随机数的类ThreadLocalRandom,那么他们二者之间的性能是怎么样的呢?本文讲解了JDK中提供的两种生成随机数的方式,一个是JDK 1.0引入的Random类,另外一个是JDK1.7引入的类,由于底层的实现机制不同,的性能是远高于Random,建议后面大家在技术选型的时候优先使用。如果本文对你有帮助的话,请留下一个赞吧。

2022-12-14 23:51:10 548

原创 JAVA中的注解可以继承吗?

注解想必大家都用过,也叫元数据,是一种代码级别的注释,可以对类或者方法等元素做标记说明,比如Spring框架中的@Service,@Component等。那么今天我想问大家的是类被继承了,注解能否继承呢?可能会和大家想的不一样,感兴趣的可以往下看。自定义注解可以通过标记元注解@Inherited实现注解的继承,不过这只适用于类。如果要继承定义在接口或方法上的注解,可以使用Spring的工具类。如果本文对你有帮助的话,请留下一个赞吧欢迎关注个人公众号——JAVA旭阳程序员成神之路。

2022-12-13 16:55:46 584

原创 大数据时代,数据仓库究竟是干嘛的?

无论你是否专门从事大数据开发,作为一个开发人员,应该都听说过数据仓库的概念,那你知道为什么会出现数据仓库?数据仓库究竟是干嘛的吗?有什么价值和意义呢?那么本文就带到入门,揭开数据仓库的面纱。本文通过例子讲清楚了数据仓库的来源,以及在企业应用中的必要性,主要是为了构建一个面向分析的集成化数据环境,分析结果可以为企业提供决策支持,真正实现数据驱动决策的目的。实际上数据仓库的建设远比上面提到的复杂,需要花费很大的成本,因此需要考虑清楚。如果本文对你有帮助的话,请留下一个赞吧。

2022-12-12 14:11:37 1948 4

原创 Hadoop如何保证自己的江湖地位?Yarn功不可没

任何计算任务的运行都离不开计算资源,比如CPU、内存等,那么如何对于计算资源的管理调度就成为了一个重点。大数据领域中的Hadoop之所以一家独大,深受市场的欢迎,和他们设计了一个通用的资源管理调度平台Yarn密不可分,那Yarn是如何做进行资源管理的呢?它的通用性体现在哪里呢?它是如何保证Hadoop绝对的统治地位的呢?希望看了本文你心中有了答案。在早期的Hadoop 1.0时代是没有Yarn这东西的,计算任务MapReduce程序分发到大数据集群中是通过和JobTracker。

2022-12-11 10:17:42 432

原创 分布式计算MapReduce究竟是怎么一回事?

如果要对文件中的内容进行统计,大家觉得怎么做呢?一般的思路都是将不同地方的文件数据读取到内存中,最后集中进行统计。如果数据量少还好,但是面对海量数据、大数据的场景这样真的合适吗?不合适的话,那有什么比较好的方式进行计算呢?不急,看完本文给你答案。是一个分布式计算框架,用于轻松编写分布式应用程序,这些应用程序以可靠,容错的方式并行处理大型硬件集群(数千个节点)上的大量数据(多TB数据集)。MapReduce是一种面向海量数据处理的一种指导思想,也是一种用于对大规模数据进行分布式计算的编程模型。

2022-12-10 17:54:40 359

原创 大数据HDFS凭啥能存下百亿数据?

大家平时经常用的百度网盘存放电影、照片、文档等,那有想过百度网盘是如何存下那么多文件的呢?难到是用一台计算机器存的吗?那得多大磁盘啊?显然不是的,那本文就带大家揭秘。HDFS(Hadoop分布式文件系统。它是核心组件之一,作为大数据生态圈最底层的分布式存储服务而存在。也可以说大数据首先要解决的问题就是海量数据的存储问题。HDFS主要是解决大数据如何存储问题的。分布式意味着是HDFS是横跨在多台计算机上的存储系统。

2022-12-10 09:24:23 1652

原创 记一次InputStream流读取不完整留下的惨痛教训

首先,问问大家下面这段流读取的代码是否存在问题呢?try {// 根据inputStream的长度创建字节数组// 调用read 读取字节数组}实际上的确是有问题的,而且在线上环境结结实实的坑了我们一把。在代码编写过程中,available()方法仅用于估算接收数据的总长度或数据块的长度,不要用于任何需要准确计算的场合,更不要用于开辟一个可以刚好容纳所有数据的缓冲区。对于调用InputStream.read(…),务必进行循环调用,直至返回-1,无论输入数据源是网络数据还是本地文件。

2022-12-08 19:31:03 2005

原创 当我们说大数据Hadoop,究竟在说什么?

提到大数据,大抵逃不过两个问题,一个是海量的数据该如何存储,另外一个就是那么多数据该如何进行查询计算呢。好在这些问题前人都有了解决方案,而Hadoop就是其中的佼佼者,是目前市面上最流行的一个大数据软件,那它包括哪些内容呢?有什么特点呢?提到Hadoop,大家的理解是什么?狭义上理解,Hadoop指的是Apache软件基金会的一款用java语言实现,开源的软件,允许用户使用简单的编程模型实现跨机器集群对海量数据进行分布式计算处理。广义上,Hadoop指的是围绕Hadoop打造的大数据生态圈,如下图所示, 其

2022-12-07 23:10:03 322

原创 深刻理解JAVA并发中的有序性问题和解决之道

Java并发情况下总是会遇到各种意向不到的问题,比如下面的代码: 线程1中如果发现,那么r1的值等于,否则等于1,然后将结果保存到对象中线程2中先修改,然后设置那大家觉得中的可能是多少呢?r1值等于4, 这个大家都能想到, CPU先执行了线程2,然后执行线程1r1值等于1,这个也容易理解,CPU先执行了线程1,然后执行线程2那我如果说r1值有可能等于0,大家可能觉得离谱,不信的话,我们验证下。由于并发问题出现的概率比较低,我们可以使用提供的框架进行压测,就能够出现各种可能的情况。生成压测工程

2022-12-04 11:03:40 409 1

原创 适配器模式(Adapter Pattern)

定义将一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够一起工作。 代码实现目标角色:public interface Target { //目标角色生产上已经稳定使用的接口 void request();}目标角色实现类:public class ConcreteTarget implements Target { @Overri

2017-12-19 17:33:32 669

转载 自定义JQuery插件----深入理解

一.介绍 插件编写的目的是给已经有的一系列方法或函数做一个封装,以便在其他地方重复使用,方便后期维护。 JQuery除了提供一个简单、有效的方式进行管理元素以及脚本,它还还提供了例外一种机制:即给核心模块增加自己的方法和额外的功能。通过这种机制,Jquery允许我们自己创建属于我们自己的插件,提高我们在开发过程中的效率。1.1JQuery的插件分为3中类型: (1)封装对象

2013-09-09 13:00:53 1146

原创 MySQL中在含有GROUP BY的SELECT语句中显示COUNT()为0的结果

mysql> select * from t1;+-------+------+| level | name |+-------+------+| 1 | a || 1 | b || 1 | c || 2 | a || 2 | b || 4 | a || 5 | b |+----

2013-08-30 18:50:55 4972

原创 一个关于JTabel的DefaultCellEditor渲染很棒的例子

import java.awt.Color;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent; import javax.swing.JCheckBox;import javax.swing.JFrame;import javax.swing.JScrollPane;import

2013-08-27 12:32:25 1968 1

转载 使用com.sun.awt.AWTUtilities这个类出现错误

When using com.sun.awt.AWTUtilities, Eclipse gives a error:- Access restriction: The method setWindowOpacity(Window, float) from the type AWTUtilities is not accessible due to restriction on r

2013-08-25 10:36:09 2316

转载 Swing 不规则窗体的制作

终极解决之道经过反复的研究探索,终于获得了一个完美的解决方法:不用shape、不用抓图、不用workaround,真正的、彻底的、完全的、随意的在桌面上任意绘图、涂鸦、撒野,真正的属于程序员的Freedom!下面就来一起揭开这层窗户纸吧! 在程序中依次设置以下几个参数:设置窗口完全透明:AWTUtilities.setWindowOpaque(frame, false);设置窗

2013-08-23 19:13:30 3045 1

原创 窗口最大化

1、JFrame 窗口最大化,在构造函数中 添加如下代码this.setExtendedState(JFrame.MAXIMIZED_BOTH);2、JInternalFrame窗口最大化,需要在添加到JFrame的DesktopPane之后设置,代码如下:bookFrame.setMaximum(true);bookFrame是JInternalFrame的实例化对象3、

2013-08-20 09:59:08 1015

转载 Swing 实现文件选择器的显示,及图片(blob类型)在数据库的输入,输出问题

通过文件选择器,选择图片文件并把图片文件 存入 数据库的 blob类型字段中   及直接从数据库中读取图片文件(Blob --> 图片)    步骤:      1、创建文件选择器,获取选择的图片文件         //声明文件,表示要存入数组的图片文件,做为全局变量           File file = null;                  

2013-08-19 13:43:27 1460 1

转载 java.util.Date、java.sql.Date、java.sql.Time、java.sql.Timestamp区别和总结

java.lang.Object ....|__java.util.Date ..........|__java.sql.Date/java.sql.Timestamp /java.sql.Time 【父类】java.util.Date日期格式为:年月日时分秒 【子类】java.sql.Date日期格式为:年月日[只存储日期数据不存储时间数据] 【子类】java.sql.T

2013-08-14 17:07:42 1874

转载 Swing双缓冲机制

public void paint(Graphics g) { // 在重绘函数中实现双缓冲机制 offScreenImage = this.createImage(WIDTH, HEIGHT); // 获得截取图片的画布 gImage = offScreenImage.ge

2013-08-12 00:35:54 1961

转载 java的Frame和JFrame中的paint方法区别

我们知道,Java中每次重绘都会调用paint方法。 public void paint(Graphics g) ...{    //super.paint(g);    Color c = g.getColor();    g.setColor(new Color(50,150,50));    g.fillOval(tankPos.x, tankPos.y, tankWid,

2013-08-12 00:31:08 1322

转载 java.util.ConcurrentModificationException异常的处理

java.util.ConcurrentModificationException异常1、今天在写一个带缓存功能的访问代理程序时出现了java.util.ConcurrentModificationException异常,因为该异常是非捕获型异常而且很少见,所以费了些时间才找到问题所在,原来在通过Iterator进行遍历的时候,如果直接对HashMap进行操作后,再继续用之前的Iterat

2013-08-12 00:22:44 908

转载 设置JFrame的背景图片,实现Jtable 透明

JFrame的背景图片:把这段代码加在JFrame的构造函数中JPanel panel = new JPanel(){public void paintComponent(Graphics g){  try{   g.drawImage(ImageIO.read(new   File("图片路径")),0                       ,0,this.

2013-08-07 10:12:35 2837

转载 Java Swing中读取/写入图片到MySQL中类型转换

图片等二进制数据文件写入到数据库1、获取到 字节数组File headerFile = new File(FileName);FileInputStream inputStream = newFileInputStream(headerFile);byte[] imageData = new byte[inputStream.available()];inputStream.r

2013-08-06 18:44:03 2147 1

原创 Jsmooth Java文件打包成exe文件(可以在没安装JDK的环境下运行)

最近用Java Swing做了一个小小的界面项目,想要把它打包成exe可执行文件,上网络搜索到了可以使用Jsmooth打包,挺方便的。现在,将网络上的资料总结下,并说说自己遇到的问题。----------------------------------------------------------------------------------------------------------

2013-08-06 18:37:05 4252 1

转载 漂亮的Swing界面 --substance.jar

1.将substance.jar添加到类路径中2.将下列代码添加到你的程序的主执行类的main()方法中: try { UIManager.setLookAndFeel(new SubstanceLookAndFeel()); JFrame.setDefaultLookAndFeelDecorated(true);

2013-08-01 00:31:19 5995 1

空空如也

空空如也

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

TA关注的人

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