![](https://img-blog.csdnimg.cn/20200626145904551.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
Java
文章平均质量分 82
阅读JDK底层,熟悉底层代码的设计模式,一年熟悉JDK
碧水悠萝
打造自身的知识体系,深化技能,分享技能
展开
-
IDEA Maven cannot access环境配置
参考:真正解决Could not transfer artifact org.springframework.boot:spring-boot-starter-parent:pom-Dmaven.wagon.http.ssl.insecure=true -Dmaven.wagon.http.ssl.allowall=true进入carcerts所在文件目录 执行命令keytool -import -alias cacerts -keystore cacerts -...原创 2021-02-21 12:31:44 · 1184 阅读 · 1 评论 -
浅谈数据缓存
什么数据需要缓存 热点数据、不易修改数据。建议缓存失效时间至多设置为7天。超过7天,再重新生成热点数据。 三级缓存三级缓存分为堆内存、堆外存、硬盘。什么样的数据适合放在一级缓存?数据量小的热点数据。 什么样的数据适合放在二级缓存?很少被修改的数据; 不是很重要的数据,允许出现偶尔并发的数据; 不会被并发访问的数据; 参考数据。 什么样的数据适合放在三级缓存?数据量大,且访问频率低的数据。 缓存使用会遇到什么问题?缓存并发问题,导致数据错误;缓存命中率低的问题...原创 2020-12-26 17:38:10 · 427 阅读 · 0 评论 -
分布式理解
一、什么是分布式二、分布式导致的问题原创 2020-11-20 17:23:02 · 107 阅读 · 0 评论 -
Class文件解析
如图是编译后的Class文件,其中有代表文件类型的魔数、次版本号、主版本号、常量池、访问标志、索引集合、字段表集合、方法表集合、属性表集合。原创 2020-07-31 16:12:17 · 123 阅读 · 0 评论 -
学会去写好代码
一、为什么需要写好代码(一)维护成本(二)扩展新需求(三)定位问题二、什么是好代码(一)易维护(二)易扩展(三)问题少(四)占用资源少(五)安全三、怎样写好代码(一)减少硬编码(二)利用好设计模式,让代码具有良好的扩展性(三)利用好代码检查工具,PMD、Findbugs、checkstyle、sourcemoniter、codeDex、圈深度等...原创 2020-07-09 14:27:42 · 411 阅读 · 0 评论 -
设计模式-Java-工厂模式
why?what?how?一、应用场景当需要创建的对象是一系列相互关联或相互依赖的产品族时,便可以使用抽象工厂模式。说的更明白一点,就是一个继承体系中,如果存在着多个等级结构(即存在着多个抽象类),并且分属各个等级结构中的实现类之间存在着一定的关联或者约束,就可以使用抽象工厂模式。假如各个等级结构中的实现类之间不存在关联或约束,则使用多个独立的工厂来对产品进行创建,则更合适一点。二、什么是定义一个创建对象的接口,让子类决定实例化哪个类,而对象的创建统一交由工厂去生产,有良好的封装性,既做到了原创 2020-07-04 20:51:17 · 107 阅读 · 0 评论 -
设计模式-Java-单例模式
一、应用场景一般会在以下两种情况下采用单例模式:资源共享的情况下,避免由于资源操作时导致的性能或损耗等。 控制资源的情况下,方便资源之间的互相通信。场景举例:为了方便线程池对池中的线程进行管理,一般线程池也会采用单例模式。 操作系统的文件系统,也是大的单例模式实现的具体例子,一个操作系统只能有一个文件系统。 外部资源:每台计算机有若干个打印机,但只能有一个PrinterSpooler,以避免两个打印作业同时输出到打印机。内部资源:大多数软件都有一个(或多个)属性文件存放系统配置,这样的.原创 2020-07-03 18:59:21 · 89 阅读 · 0 评论 -
Java的数据结构
谈Java数据结构之前先聊聊C的数据结构常见的数据结构有线性表、链表、队列、堆栈、树、图等像压缩可以选择用树像数据库索引可以选择用B+树Java代码实例Stack的代码package com.fuping.liuqu.demo.test;import java.util.Stack;public class DataStructureDemo { public static void main(String[] args) { Stack<St原创 2020-06-30 22:10:31 · 145 阅读 · 0 评论 -
如何巧用自定义注解
一、为什么需要自定义注解Spring或者Dropwized框架提供了很多内部定义好的注解,可以实现各种各样的功能,但框架提供的注解,并不能满足我们所有的业务场景,有些场景需要我们根据业务自定义更方便业务的注解。二、什么自定义注解package com.fuping.liuqu.demo.annotation;import java.lang.annotation.*;@Documented@Target(ElementType.METHOD)@Retention(Retentio.原创 2020-06-29 21:56:28 · 152 阅读 · 0 评论 -
Java服务相关内存问题
一、堆内存随意创建内存缓存,服务总体堆内存占用很难估量 内存缓存的维护,需要有删除机制,否则很容易导致内存溢出 内存缓存创建时,注意存的对象的大小,例如缓存大的数组或者大的字符串,很容易导致full gc或者永久代空间不足二、堆外存在缓存分层时,配置不合理,例如使用Ehcache时,堆内、堆外不合理在服务启动时禁止system.gc,但是在代码中大量使用类似ByteBuffer.allocateDirect()的代码,直接在堆外存储中创建对象,导致缓存无法释放三、年轻代需要根据业务调原创 2020-06-27 21:30:17 · 100 阅读 · 0 评论 -
Java服务性能优化
Java服务优化总体思路上一、内存优化1、堆内存乱用2、堆外存乱用3、Eden区与survivor区比例优化4、garbage collect优化二、IO优化1、网络IO外部依赖服务的访问 socket连接 路由2、文件IO文件读取page cache读取文件写入文件一行行写入,改为到一定量写入或者到一定时间写入,仿照Kafka的思路线程乱用,例如隔5分钟重新创建一次线程池,那就会导致大量的线程并未销毁,会生成大量的time_wait...原创 2020-06-13 18:10:23 · 257 阅读 · 0 评论 -
浅谈代码如何进行分层设计
一、分层的目标1、各分层代码边界清晰;2、后期各层之间需要更好的维护扩展。二、传统的分层MVC分层三、业务自定义分层1、业务层次分层各数据对象的分层设计2、设计结构分层 关于缓存使用的分层 关于枚举类的分层 四、分层的禁忌跨层调用 分层边界...原创 2020-06-26 14:25:58 · 1080 阅读 · 0 评论 -
StringBuffer和StringBuilder源码解读
StringBuffer和StringBuilder的UML图如下StringBuffer和StringBuilder的区别1、线程安全2、缓冲区3、性能StringBuffer和StringBuilder均是继承自AbstractStringBuildercapacity和length的区别扩容机制capacity*2+2原创 2020-06-22 19:05:01 · 131 阅读 · 0 评论 -
Java-类加载机制
JDK提供了三层类加载器:引导类加载器、扩展类加载器、应用类加载器,用户可根据需要自定义类加载器。一、双亲委派机制当某个类加载器需要加载某个.class文件时,它首先把这个任务委托给他的上级类加载器,递归这个操作,如果上级的类加载器没有加载,自己才会去加载这个类。如果引导类加载器(BootstrapClassLoader)未加载到,再由扩展类加载器(ExtClassLoader)加载,而扩展类加载器如果未加载到,再交由应用加载器(AppClassLoader)加载。BootstrapClassL原创 2020-06-21 22:24:48 · 378 阅读 · 0 评论 -
JVM知识体系
一、JVM内存结构JVM由Java堆、方法区、Java虚拟机栈、本地方法栈、程序计数器五部分组成,Java堆由TLAB(Thread Local Allocate Buffer)、Eden、Survivor、Old Generation、Perm Generation几部分组成。二、Garbage Collection算法Young Generation采用的是Copying、Generational Collection(分代收集)算法算法Old Generation常规采用Mark.原创 2020-06-21 19:48:06 · 137 阅读 · 0 评论 -
Java线程感想
一、线程的创建创建线程目前有以下四种方式:继承Thread类package com.fuping.liuqu.demo.thread;public class CustomizeThread extends Thread{ @Override public synchronized void start() { super.start(); } @Override public void run() { super.原创 2020-06-20 14:50:35 · 196 阅读 · 0 评论