202109-04 详解Java实现分治算法 目录一、前言二、分治算法介绍三、分治算法经典问题3.1、二分搜索3.2、快速排序3.3、归并排序(逆序数)3.4、最大子序列和3.5、最近点对四、结语一、前言在学习分治算法之前,问你一个问题,相信大家小时候都有存钱罐的经历,父母亲人如果给钱都会往自己的宝藏中存钱,我们每隔一段时间都会清点清点钱。但是一堆钱让你处理起来你可能觉得很复杂,因为数据相对于大脑有点庞大了,并且很容易算错,你可能会将它先分成几个小份算,然后... 继续阅读 >
202109-04 Java使用OpenFeign管理多个第三方服务调用 目录背景应用maven依赖配置和服务声明服务地址配置第三方服务配置接口声明和使用小结背景最近开发了一个统一调度类的项目,需要依赖多个第三方服务,这些服务都提供了HTTP接口供我调用。组件架构服务多、接口多,如何进行第三方服务管理和调用就成了问题。常用的服务间调用往往采用zk、Eureka等注册中心进行服务管理(SpringBoot常使用SpringCloud)。OpenFeign也是SpringCloud的解决方案之一。我们单独使用OpenFeign,无需对原有... 继续阅读 >
202109-04 一篇带你入门Java垃圾回收器 目录1垃圾回收算法1-1标记清除算法算法概述算法思想1-2标记整理算法1-3复制算法2JVM分代回收算法2-1概述2-2分代垃圾回收示例2-3分代垃圾回收的总结对象首先分配在伊甸园区域2-5垃圾回收案例分析2垃圾回收器2-1垃圾回收器概述2-2串行垃圾回收器2-3吞吐量优先的垃圾回收器2-4响应时间优先的垃圾回收器(CMS垃圾回收器)总结:第一阶段:串行垃圾回收器:jdk1.3.1之前Java虚拟机仅仅只支持Serial收集器第二阶段:并行垃... 继续阅读 >
202109-04 Java用自带的Image IO给图片添加水印 目录1. 文字水印2. 旋转文字3. 旋转坐标轴另外的写法1. 文字水印importsun.font.FontDesignMetrics;importjavax.imageio.ImageIO;importjava.awt.*;importjava.awt.image.BufferedImage;importjava.io.File;importjava.io.FileOutputStream;importjava.io.IOException;/***@AuthorChengJianSheng*@Date2021/6/10*/publicclassWatermarkUtil{publicstaticvoidmain(String[]args)t... 继续阅读 >
202109-04 java Nio使用NioSocket客户端与服务端交互实现方式 NioSocket客户端与服务端交互实现javaNio是jdk1.4新增的io方式—?nio(newIO),这种方式在目前来说算不算new,更合适的解释应该是non-blockIO。non-block是相对于传统的io方式来讲的。传统的Io方式是阻塞的,我们拿网络io来举例,传统的io模型如下:服务端主线程负责不断地server.accept(),如果没有客户端请求主线程就会阻塞,当客户端请求时,主线程会通过线程池创建一个新的线程执行。简单解释就是一个线程负责一个客户端... 继续阅读 >
202109-04 浅谈java socket的正确关闭姿势 javasocket对应的是网络协议中的tcp,tcp的三次握手、四次挥手、11中状态什么的这里就不说了,不知道大家平常使用socket的时候如果不注意的情况下,会不会遇到各种异常报错。例如:java.net.SocketException:socketisclosed错误提示的出现场景:自己主动关闭了socket,但是之后还从里面读写数据Softwarecausedconnectionabort:socketwriteerror错误提示的出现场景:对方已经关闭socket,依旧向对方写数据connectionreset... 继续阅读 >
202109-04 分析Java设计模式之组合模式 目录一、概述二、模式定义三、模式结构四、模式实现五、模式优缺点5.1、优点5.2、缺点六、模式适用场景七、模式总结一、概述我们对于这个图片肯定会非常熟悉,这两幅图片我们都可以看做是一个文件结构,对于这样的结构我们称之为树形结构。在数据结构中我们了解到可以通过调用某个方法来遍历整个树,当我们找到某个叶子节点后,就可以对叶子节点进行相关的操作。我们可以将这颗树理解成一个大的容器,容器里面包含很多的成员... 继续阅读 >
202108-31 浅析NIO系列之TCP 目录一、前言二、TCP特性三、IP网络层为何不保证数据包的可靠性四、TCP协议4.1、TCP包组成4.2、如何保证可靠性五、流量控制5.1、滑动窗口5.2、拥堵控制六、TCP状态七、消失的连接——TIME_WAIT一、前言在springboot2中,默认的web容器是netty,这说明“反应式”容器已经是大势所趋,无论是go语言的协从线程,还是java基于reactor线程模型,都是基于事件编程实现高并发的实例。在介绍NIO之前有必要了解下TCP协议,因为目... 继续阅读 >
202108-31 Java Shutdown Hook场景使用及源码分析 目录背景ShutdownHook介绍关闭钩子被调用场景注意事项实践ShutdownHook在Spring中的运用背景如果想在Java进程退出时,包括正常和异常退出,做一些额外处理工作,例如资源清理,对象销毁,内存数据持久化到磁盘,等待线程池处理完所有任务等等。特别是进程异常挂掉的情况,如果一些重要状态没及时保留下来,或线程池的任务没被处理完,有可能会造成严重问题。那该怎么办呢?Java中的ShutdownHook提供了比较好的方案。我... 继续阅读 >
202108-31 浅谈Java面向对象之内部类 目录内部类访问外部对象访问内部对象局部内部类匿名内部类静态内部类内部类内部类是定义在另一个类中的类,例如TalkingClock类中内嵌了TimePrinter类:classTalkingClock{privateintinterval;privatebooleanbeep;publicTalkingClock(intinterval,booleanbeep){}publicvoidstart(){}publicclassTimePrinterimplementsActionListener{publicvoidactionPerformed(ActionEventevent){}... 继续阅读 >
202108-31 教你用Java Swing做一个定时提醒工具 前言因为上下班的时候,老是忘记打卡(其实这不是重点,因为可以补卡嘛),重点是下班走的时候总是忘记关空调(谁最后走忘记关空调,罚100。。。)我一开始的做法是,在主机上贴个便签,写上关空调三个大字,坐在电脑旁,只要你眼睛稍微一瞥,就是看到。可是依旧是该忘还得忘,那么明显一个便签贴在那,走的时候死活看不到,我有什么办法!然后我就想做个弹窗提醒,一到下班的点,就弹窗提醒,然后就关空调,下班就关,总不会忘了... 继续阅读 >
202108-31 解析Java异步之call future 目录一、概述二、Callable、Executor与Future2.1、任务:Callable2.2、执行:ExecutorService2.3、结果:Future三、使用举例3.1、使用Future3.2、使用FutureTask四、总结一、概述我们大家都知道,在Java中创建线程主要有三种方式:继承Thread类;实现Runnable接口;实现Callable接口。而后两者的区别在于Callable接口中的call()方法可以异步地返回一个计算结果Future,并且一般需要配合ExecutorService... 继续阅读 >
202108-31 解析Java异步之call future 目录一、概述二、Callable、Executor与Future2.1、任务:Callable2.2、执行:ExecutorService2.3、结果:Future三、使用举例3.1、使用Future3.2、使用FutureTask四、总结一、概述我们大家都知道,在Java中创建线程主要有三种方式:继承Thread类;实现Runnable接口;实现Callable接口。而后两者的区别在于Callable接口中的call()方法可以异步地返回一个计算结果Future,并且一般需要配合ExecutorService... 继续阅读 >
202108-31 详解JAVA中的OPTIONAL 目录一、概述二、创建Optional实例2.1、访问Optional对象的值2.2、返回默认值2.3、orElse()和orElseGet()的不同之处2.4、返回异常三、转换值3.1、过滤值四、Optional类的链式方法五、Java9增强六、Optional应该怎样用?七、总结一、概述本质上,这是一个包含有可选值的包装类,这意味着Optional类既可以含有对象也可以为空。Optional是Java实现函数式编程的强劲一步,并且帮助在范式中实现。但是Optional的意义显然不止... 继续阅读 >
202108-31 解析Java中的static关键字 目录一.static关键字使用场景1.1、静态变量1.2、静态方法1.3、静态代码块1.4、静态内部类1.5、静态导入二.static变量和普通成员变量区别三.类的构造器到底是不是static方法?一.static关键字使用场景static关键字主要有以下5个使用场景:1.1、静态变量把一个变量声明为静态变量通常基于以下三个目的:作为共享变量使用减少对象的创建保留唯一副本第一种比较容易理解,由于static变量在内存中只会存在一个副本,所以其... 继续阅读 >
202108-31 Java内存模型之happens-before概念详解 简介happens-before是JMM的核心概念。理解happens-before是了解JMM的关键。1、设计意图JMM的设计需要考虑两个方面,分别是程序员角度和编译器、处理器角度:程序员角度,希望内存模型易于理解、易于编程。希望是一个强内存模型。编译器和处理器角度,希望减少对它们的束缚,以至于编译器和处理器可以做更多的性能优化。希望是一个弱内存模型。因此JSR-133专家组设计JMM的核心目标就两个:为程序员提供足够强的内存... 继续阅读 >