设计模式【创建型模式】【工厂方法】

意图工厂方法模式 是一种创建型设计模式,其在父类种提供一个创建对象的方法,允许子类决定是实例化对象的类型。问题假设有一款物流管理应用,最初版本只能处理卡车运输,因此绝大部分代码都在位于名为 「卡车」的类种。一段时间之后,应用极受欢迎,每天都可以收到几十次海运公司的请求,希望可以应用支持海上物流功能。如果代码其余部分与现有类已存在耦合关系,那么向程序中添加新类其实并没有那么容易了。目前绝大部分代码都与「卡车」相关,在程序中添加「轮船」类需要修改全部代码,如果以后需要支持另外一种
分类: 其他 发布时间: 01-31 22:25 阅读次数: 0

LinkedList 插入和 ArrayList

分别是:10万、100万、1000万的数据在两种集合下面不同位置的插入效果!ArrayList 中间插入快。 LinkedList 头插、尾插快。一、数据结构Linked + List = 链表 + 列表 = LinkedList = 链表列表LinkedList,是基于链表实现,由双向链条next、prev,把数据节点穿插起来,所以在插入数据时,是不需要ArrayList那样扩容数组。二、源码分析1.初始化与ArrayList不同,LinkedList初始化不需要创
分类: 其他 发布时间: 01-31 22:24 阅读次数: 0

设计模式【创建型模式】【抽象工厂模式】

Abstract Factory意图抽象工厂模式是一种创建型设计模式,它能创建一系列相关的对象,而无需指定其具体类。问题如果正在开发一款家具模拟器,你的代码中包括一些类,用于表示: 一系列相关产品,例如椅子、沙发、和咖啡桌。 系列产品的不同变体,例如,你可以使用现代、维多利亚、装饰风艺术等风格生成椅子、沙发和咖啡桌。 系列产品及其不同变体这个就需要设法去单独生成每一件家具对象,这样才能确保风格一致,如果顾客收到家具风格不一样,他们就会投诉。现...
分类: 其他 发布时间: 01-31 22:24 阅读次数: 0

技术电子书【25日新增提醒】

25日新增2份技术资料, nginx学习思维导图 tomcat学习思维导图 计算机组成原理 学习思维导图 技术类电子书,使用分类名称当作「关键词」来获取对应材料目录 【2021-1-25】计算机组成原理 学习思维导图 java基础 AngularJS Docker Elasticsearch Git java框架 java进阶 Kylin Linux Ma...
分类: 其他 发布时间: 01-31 22:24 阅读次数: 0

JVM:调优相关

常见垃圾回收器组合参数设定(1.8)-XX:+UseSerialGC = Serial New (DefNew) + Serial Old小型程序。默认情况下不会是这种选项,HotSpot会根据计算及配置和JDK版本自动选择收集器-XX:+UseParNewGC = ParNew + SerialOld这个组合已经很少用(在某些版本中已经废弃)https://stackoverf...
分类: 其他 发布时间: 01-31 22:24 阅读次数: 0

基础知识汇总

1、Java、C 和 C艹 的区别面向过程:C语言面向过程。主要关注的是数据的流转面向对象:Java 和 C艹 面向对象。主要关注的是不同对象之间如何交互。Java把C艹的复杂语法、手动释放内存以及容易造成编程错误的指针等弊端都屏蔽了。2、基本数据类型及其包装类整型:byte(1)、short(2)、int(4)、long(8)、char(4) — ()内为字节数浮点型:...
分类: 其他 发布时间: 01-31 22:24 阅读次数: 0

linux下的select简直太奇葩了:1024限定的不只是监听的个数,还是文件描述符的最大值,注意,是值

我原来自以为对select就算不熟,基本原理和使用方法也略知一二了,做了一年多的服务器编程,好歹知道linux下的select不支持超过1024个的描述符,好歹知道可以通过内核编译来重设FD_SETSIZE,也敢大言不惭地说select函数的maxfd应该是监测的所有fd值中取最大的+1,甚至连世界上有select * from的语法都知道,结果,今天直接扎扎实实栽在了select上面了:我生生花...
分类: 其他 发布时间: 01-31 22:23 阅读次数: 0

常用设计模式及其在jdk中案例总结

观察者模式多个观察者监听同一个主题对象,是一种一对多的依赖关系,当主题对象发生变化时,会通知所有观察者对象。java.util.EventListenerjavax.servlet.http.HttpSessionBindingListenerjavax.servlet.http.HttpSessionAttributeListener装饰者模式Component 是一个接口或者是...
分类: 其他 发布时间: 01-31 22:23 阅读次数: 0

SpringBoot 2.2.2 源码详解(一):启动过程

1、springboot的入口程序@SpringBootApplicationpublic class StartupApplication { public static void main(String[] args) { SpringApplication.run(StartupApplication.class, args); }}当程序开始执行...
分类: 其他 发布时间: 01-31 22:22 阅读次数: 0

SpringBoot 2.2.2 源码(一):构造方法初始化

前言源码主要按照SpringBoot启动流程顺序跟踪,翻译部分重要注释,并解释重要源码SpringApplication 启动类注释启动步骤在初始化之前,会对启动类里的成员变量进行赋值,然后进行初始化primarySources:传入的primarySources里是在main方法里边传入的主类名称SpringDataApplication,将其转换为集合对象放入集合中。Web...
分类: 其他 发布时间: 01-31 22:22 阅读次数: 0

SpringBoot 2.2.2 源码(二):启动流程一

SpringBoot源码(一)在上一篇文章里,介绍了SpringBoot的初始化,在这一章节里将介绍run方法里面的内容跟踪进入run方法StopWatch该函数主要用来计算SpringBoot的启动时间ConfigurableApplicationContext接下来创建了一个ConfigurableApplicationContext对象,这个对象存储的是SpringBoot的...
分类: 其他 发布时间: 01-31 22:22 阅读次数: 0

SpringBoot 2.2.2 源码(二):启动流程二

上篇文章源码进行到如下位置命令行参数解析跟进DefaultApplicationArguments,不断追踪,会发现它是用来解析命令行参数的最终parse方法会返回命令行参数commandLineArgs环境配置prepareEnvironment进入prepareEnvironment方法继续追溯到getOrCreateEnvironment方法可以看到这里根据webA...
分类: 其他 发布时间: 01-31 22:21 阅读次数: 0

SpringBoot 2.2.2 源码详解(二):自动装配原理

1、在springboot的启动过程中,有一个步骤是创建上下文,如果不记得可以看下面的代码:public ConfigurableApplicationContext run(String... args) { StopWatch stopWatch = new StopWatch(); stopWatch.start(); ConfigurableApplicationContex...
分类: 其他 发布时间: 01-31 22:21 阅读次数: 0

SpringBoot 2.2.2 源码详解(三):SpringBoot内嵌tomcat

在使用springboot搭建一个web应用程序的时候,我们发现不需要自己搭建一个tomcat服务器,只需要引入spring-boot-starter-web,在应用启动时会自动启动嵌入式的tomcat作为服务器,下面来分析下源码的分析流程:之前已经讲过了自动装配的原理,其实tomcat的实现机制也是从自动装配开始的。1、ServletWebServerFactoryAutoConfigura...
分类: 其他 发布时间: 01-31 22:20 阅读次数: 0

springboot 2.2.2 源码详解(四):监听器

​ 在看springboot的源码过程中,发现内部使用了大量的监听器,下面来看下监听器的作用。在springboot的监听器有如下两类:# Run Listeners#事件发布运行监听器,是springboot中配置的唯一一个应用运行监听器,作用是通过一个多路广播器,将springboot运行状态的变化,构建成事件,并广播给各个监听器org.springframework.boot.Sp...
分类: 其他 发布时间: 01-31 22:20 阅读次数: 0

Spring源码概述

前置反射:程序运行状态时,能动态创建对象,操作对象(方法、属性)Spring 架构设计思想Spring创建对象过程:首先通过 BeanDefinationReader 接口将我们在profiles、annotation或者其他文件中的内容注入到Spring容器的bean信息中,在创建对象之前,先配置Spring的运行环境,然后通过BeanFactory创建实例对象。为了提高扩展性,我们希望...
分类: 其他 发布时间: 01-31 22:20 阅读次数: 0

工具类:扫描包下所有类

package whitecat;import java.io.File;import java.io.FileInputStream;import java.net.URL;import java.util.*;import java.util.jar.JarEntry;import java.util.jar.JarInputStream;/** * 名称空间实用工具 *...
分类: 其他 发布时间: 01-31 22:20 阅读次数: 0

redis(七):击穿、穿透、雪崩、分布式锁

击穿产生场景:如果一个key很长时间没有被访问,变为冷数据,则该key会从缓存中删除,如果刚好在这个时点下,发生了高并发请求该key,却发现缓存中没有该key,那么请求就会压到数据库上,这就是缓存击穿解决方案:由于redis是单进程单实例的,那么redis中请求必然是串行的,所以可以采取如下方案:当第一个请求发现redis中没有需要获取的key时,会通过setnx创建一把锁,并拿到该锁去数...
分类: 其他 发布时间: 01-31 22:20 阅读次数: 0

AQS以及并发锁,并发队列

AQS 抽象同步队列双向队列维护一个state:ReentrantLock —> 可重入次数 可指定公平或非公平 默认非公平ReentrantReadWriteLock —> 高16位读状态,低16位写状态 CAS实现读写分离 适合读多写少的场景Semaphore —> 信号个数CountDownlatch —> 计数器当前值获取资源:tryAcqu...
分类: 其他 发布时间: 01-31 22:19 阅读次数: 0

B树相关操作以及B+树

假设对 1 7 6 5 3 2 4 8 9 构建3阶B树B树的构建和删除节点的一个原则:坚决不能浪费指针域构建过程n阶B树分裂节点的索引 = n/2 (向上取整)每个节点存储元素个数 = n-1删除节点1、删除子节点情况1节点内元素数量 > n/2 (向下取整) ----> 直接删除情况2节点内元素数量 = n/2 (向下取整) 且兄弟节点 &...
分类: 其他 发布时间: 01-31 22:19 阅读次数: 0