Java
文章平均质量分 67
Lucifer Zhao
热爱软件开发,渴望提升自我;
希望我的指尖具有改变世界的力量
展开
-
格式化json字符串换行缩进工具类
json格式化工具,让json字符串换行缩进显示原创 2023-03-03 18:37:36 · 1000 阅读 · 0 评论 -
Nacos注册中心
常用注册中心:Nacos、Eureka、Zookeeper、Consul、Etcd....原创 2022-10-26 22:17:40 · 288 阅读 · 0 评论 -
对齐填充@Contended
对齐填充Padding(不够64字节用0填充)是用来解决伪共享问题,保证一个缓存行只读取一个数据,避免多个线程竞争同一个缓存行带来性能问题。CPU缓存是由多个缓存行组成的,缓存行是CPU和内存之间交互的最小单元,每个缓存行大小是64个字节,每次CPU读取数据以块为单位64个字节,一次读取一块数据(猜想上下位的数据也是需要的),避免多次交互,一个缓存行可以缓存多个数据(比如:X, Y, Z三个数据),当多个线程情况下,如果线程A修改数据X,线程B需要修改数据Y,但是都处于同一个缓存行,这时候会存在缓存行竞争,原创 2022-06-12 23:45:34 · 342 阅读 · 0 评论 -
ConcurrentHashMap
ConcurrentHashMap和HashMap原理基本类似,只是在HashMap的基础上需要支持并发操作,保证多线程情况下对HashMap操作的安全性。当某个线程对集合内的元素进行数据操作时,会锁定这个元素,如果其他线程操作的数据hash得到相同的位置,就必须等到这个线程释放锁之后才能进行操作。原创 2022-05-30 00:22:52 · 8600 阅读 · 0 评论 -
网络通信模型
五种IO模型阻塞IO、非阻塞IO、IO复用、信号驱动、异步IO五种IO模型的目的都是为了提升服务端并行处理的连接数量阻塞IO如果远程服务端数据没有准备好,进程或线程会处于阻塞状态,直到数据准备好或者报错非阻塞IO和阻塞IO相对,如果数据没有准备好,直接返回EWOULDBLOCK,不会阻塞客户端进程/线程,但是客户端进程/线程需要不断的轮循去查看内核数据是否准备好相比阻塞IO,在一定程度上优化并提升了服务端同时处理的连接数量,但是不管数据是否准备好,都需要针对每一个socket原创 2021-05-24 20:37:11 · 387 阅读 · 0 评论 -
Spring前世今生与Spring编程思想
Spring不仅是一个框架,还是一个生态。Spring类似一个全家桶。Spring中一切都是围绕Bean来实现和完成的。Spring能干什么?管理这些POJO的Bean,我们不需要自己new对象。简化开发。Spring简化开发四个基本策略:基于POJO的轻量级和最小侵入性编程。 通过依赖注入和面向接口松耦合。 基于切面和惯性进行声明式编程。 通过切面和模板减少样板式代码。Spring中的编程思想:Spring思想 应用场景(特点) 归纳 OOP .原创 2021-04-13 20:11:08 · 114 阅读 · 0 评论 -
设计模式——单例模式(Singleton Pattern)
确保一个类在任何情况下都只有一个实例被返回,并提供一个全局访问点。隐藏其所有构造方法,所有构造方法私有。属于创建型模式。ServletContext、ServletConfig、ApplicationContext、DBPool优点:在内存中只有一个实例,减少内存开销。 避免对资源的多重占用。 设置了全局访问点,控制了访问。缺点:没有接口,扩展困难,违背了开闭原则。注意事项:私有化构造器 保证线程安全 延迟加载 防止序列化和反序列化破坏单例 防御反射攻击破坏单例1.原创 2021-03-18 22:15:34 · 98 阅读 · 0 评论 -
设计模式——工厂模式(Factory Pattern)
设计模式总览不用设计模式并非不可以,但是使用设计模式可以更好地解决实际问题,设计模式最重要的是解耦,设计模式可以将业务需求转技术实现。能够写出更优雅的代码 用好设计模式就是架构师,不然就是码农 设计模式遵循七大设计原则设计模式分为创建型、结构型、行为型三大类。简单工厂模式简单工厂模式是指由一个工厂对象决定创建出哪一种产品类型的实例。属于创建型模式,但不属于GOF 23种设计模式之一。应用场景:简单工厂类适合创建对象较少的场景,客户端只用传入工厂类的参数(需要创建的类),不用关注原创 2021-03-15 22:32:07 · 134 阅读 · 0 评论 -
七大软件设计原则
注意:这七大设计原则传输的是一种思想,并非要求全部遵循,而是在满足要求的条件下尽量满足原则。1. 开闭原则定义:一个软件实体如类、模块、函数应该对扩展开放,对修改关闭。用抽象构建框架,用实现扩展细节。优点:提高系统的可复用性和可维护性。2. 依赖倒置原则高层模块不应该低层模块,二者都应该依赖其抽象。抽象不应该依赖其细节, 细节应该依赖其抽象。针对接口编程,不要针对实现编程。优点:减少类之间的耦合性,系统系统稳定性,提高代码可读性和可维护性,降低修改程序可能造成的风险。3. 单一职原创 2021-03-14 18:30:52 · 94 阅读 · 0 评论 -
五、注解
1. 概念定义:注解(Annotation),也叫元数据,一种代码级别的说明,它是JDK1.5之后版本引入的一个特性,与类、接口、枚举在同一个层次,它可以声明在包、类、方法、字段、局部变量、方法参数等之前,用来对这些元素进行声明、解释。作用分类:编写文档:通过代码里标识的注解可以生成文档【生成javadoc文档】 编译检查:通过代码里标识的注解让编译器能够实现基本的编译检查【比如Overrice】 代码分析:通过代码里标识的注解对代码进行分析【使用反射机制】JDK预定义的注解:@Ove原创 2021-03-07 23:05:19 · 66 阅读 · 0 评论 -
四、反射机制
1. 定义反向探知,在程序运行过程中动态获取类的相关属性。 对于给定的一个类,可以获取类的所有属性和方法。2. 使用public class User { public void sayHello() { System.out.println("hello"); }}public class Test { public static void main(String[] args) throws Exception { Class&原创 2021-03-07 18:10:14 · 116 阅读 · 4 评论 -
三、泛型
1. 目的指定存放的数据类型,统一类型避免类型转换异常。泛型只在编译阶段有效,编译之后JVM会采取去泛型化措施。可以增加代码的灵活度。2. 泛型通配符2.1 无边界通配符?通用通配符,可以匹配任意类型public class Test { public static void main(String[] args) throws Exception { List<String> list = new ArrayList<String>原创 2021-03-03 22:38:43 · 67 阅读 · 1 评论 -
二、集合(List/Set/Map)
集合概览Iterator迭代1.Collection接口1.1 List接口ArrayList无参构造List list = new ArrayList();//源码分析private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {};public ArrayList() { this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;}原创 2021-03-03 21:29:53 · 100 阅读 · 0 评论 -
一、数据结构
1.数组char[] cs = new char[]{'a','b','c','d'};char[] cs1 = new char[4];cs1[0] = 'a';注意:注意数组下标越界char[] cs = new char[]{'a','b','c','d'};System.out.println(cs[4]);特点:1.内存地址连续,使用之前必须指定数组长度2.可以通过下标访问的方式访问成员,查询效率高3.增删操作会给系统带来性能消耗--因为只能把需要保留的数据拷贝到一原创 2021-02-27 19:40:27 · 88 阅读 · 0 评论