Java
文章平均质量分 90
学习java基础
Listen-Y
学无止境
展开
-
Java~阅读《深入理解Java虚拟机》知识点总结
文章目录前言第一部分(Java程序内部机制)1.1Java运行时一个类是什么时候被加载的?1.2JVM一个类的加载过程?1.3一个类被初始化的过程的注意点1.4继承时父子类的初始化顺序是怎样的?1.5究竟什么是类加载器?1.6JVM有哪些类加载器?1.7JVM中不同的类加载器加载哪些文件?1.8JVM三层类加载器之间的关系是继承吗?1.9你了解JVM类加载的双亲委派模型吗?1.10JDK为什么要设计双亲委派模型,有什么好处?1.11可以打破JVM双亲委派模型吗?如何打破JVM双亲委派模型?1.12如何自定义原创 2021-12-01 20:52:31 · 2387 阅读 · 25 评论 -
Java~新时代程序员的编码风格:lambda表达式、函数式接口、Stream流式计算、链式编程、异步调用
文章目录前言Lambda表达式前言如果有同学去逛一些新出来的开源项目和框架,你肯定会看到大量的lambda表达式、函数式接口、链式编程、Stream流式计算。所以现在如果还不熟悉这几个技术,你就会发现看源码非常吃力。Lambda表达式基本语法: (parameters) -> expression 或 (parameters) ->{ statements; }Lambda表达式由三部分组成:paramaters:类似方法中的形参列表,这里的参数是函数式接口里的参数。这里的参数类原创 2021-04-02 09:10:45 · 698 阅读 · 0 评论 -
Java~stream处理中map与flatMap的比较和使用案例
文章目录前言共同点和区别共同点区别使用案例前言使用Java8的新特性Stream流式处理,可以提高对于集合的一些操作效率,再配合lambda表达式,可以极致的简化代码,尤其还有并行流这个东东,可以去 了解一下,在一些场合还是可以提高效率的,而且编码起来也不费事。并且流式处理的核心就是一个浅拷贝和引用管道,其内部实现了一个引用管道ReferencePipeline, 他把需要处理的数据的引用拷贝了一份,然后处理数据,最后收集结果也是将这些引用放到了另一个集合中。今天要讲的就是stream处理中的map原创 2021-03-20 20:18:38 · 3651 阅读 · 8 评论 -
Java~ForkJoinPool + parallelStream实现并行快速处理数据流
文章目录ForkJoinPoolinvoke、execute和submit区别parallelStream实现快速处理数据流ForkJoinPool说起ForkJoinPool先说Fork/Join框架我们通过Fork和Join这两个单词来理解一下Fork/Join框架。Fork就是把一个大任务切分 为若干子任务并行的执行,Join就是合并这些子任务的执行结果,最后得到这个大任务的结 果。比如计算1+2+…+10000,可以分割成10个子任务,每个子任务分别对1000个数进行求和, 最终汇总这10个子原创 2021-03-11 23:23:52 · 5432 阅读 · 3 评论 -
Java~ LocalDate、LocalTime、LocalDateTime、DateTimeFormatter的学习和使用
文章目录前言获取日期API日期的计算加法操作减法操作比较日期和时间ISO标准日期格式转换String转日期其他好玩的API前言此篇博客借鉴与博主: 某科学的南条内容中也有自己的思考和总结众所周知,SimpleDateFormat在多线程环境下是不安全的, 因为其内部使用的是一个calendar对象, 那么在多线程环境下使用同一个对象去修改不同的数据必然会造成不安全问题。解决办法就是使用Java8提供LocalDate、LocalTime、LocalDateTime、DateTimeFormat原创 2021-03-04 19:27:08 · 874 阅读 · 1 评论 -
Java~基于fluent-hc快速构建Http请求,结合failsafe实现异常重试
文章目录所需依赖实现failsafe安全失败构建Get请求构建Post请求自定义响应处理所需依赖 <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>fluent-hc</artifactId> <version>4.5.10</version>原创 2021-02-26 11:29:09 · 1038 阅读 · 0 评论 -
Java~集合中的fail-fast(快速失败)机制
文章目录简介modCount和expectedModCountmodCount是如何被修改的fail-fast(快速失败)和fail-safe(安全失败)比较fail-fast解决什么问题如何解决fail-fast事件简介我们知道Java中Collection接口下的很多集合都是线程不安全的, 比如 java.util.ArrayList不是线程安全的, 因此如果在使用迭代器的过程中有其他线程修改了list,那么将抛出ConcurrentModificationException,这就是所谓fail-f原创 2021-02-10 10:23:34 · 2877 阅读 · 3 评论 -
Java~序列化和反序列化为什么要实现Serializable接口
文章目录序列化和反序列化什么时候需要用到序列化和反序列化呢?为什么要实现 Serializable 接口?为什么还要指定serialVersionUID的值?不指定serialVersionUID出现的问题Java 序列化的其他特性static 属性为什么不会被序列化?序列化和反序列化序列化:把对象转换为字节序列的过程称为对象的序列化.反序列化:把字节序列恢复为对象的过程称为对象的反序列化.什么时候需要用到序列化和反序列化呢?在本地 JVM 里运行下 Java 实例,这个时候是不需要什么序列化和反原创 2021-02-07 19:43:57 · 583 阅读 · 0 评论 -
Java~探究JDK1.8新特性Stream的使用
文章目录何为Stream好处深入Stream对比Collection获取数据源Collection获取流Map获取流数组获取流常用方法的使用(重点)延时方法过滤:filter映射:map取前几个:limit跳过前几个:skip终结方法统计个数:count消费元素forEach何为StreamStream是流的概念, 我们只知道IO流是程序与计算机交互的方式, 而Stream就是得益于Lambda所带来的函数式编程的思想, 将集合中的数据看成一个流, 方便我们对其进行遍历筛选操作比如传统的List或者原创 2021-02-01 14:25:27 · 592 阅读 · 0 评论 -
Java~如何避免死锁,如何检测死锁
文章目录死锁互斥条件不可剥夺条件请求与保持条件循环等待条件如何避免死锁如何检测死锁Jconsole查看死锁Jstack查看死锁:死锁Java中当我们的开发涉及到多线程的时候,这个时候就很容易遇到死锁问题首先了解一下死锁的四个必要条件互斥条件进程要求对所分配的资源(如打印机)进行排他性控制,即在一段时间内某资源仅为一个进程所占有。此时若有其他进程请求该资源,则请求进程只能等待。不可剥夺条件进程所获得的资源在未使用完毕之前,不能被其他进程强行夺走,即只能由获得该资源的进程自己来释放(只能是主动原创 2021-01-26 22:24:42 · 568 阅读 · 2 评论 -
Java~重写equals的时候为啥需要重写hashCode
文章目录hashCode方法的定义equals方法的定义那为何重写equals就得重写hashCodehashCode方法的定义相同的对象,返回的hashCode一定是一样的因为每一个对象在堆上初始化的时候就会设置属于它本身的对象头, 在对象头中就会有它自身hashcode值, 这就像是一个对象的身份ID一样,同一个对象的ID一定是相同的equals方法的定义当两个对象调equals返回true,则两个对象的hashcode是一致的因为默认的equals方法比较的还是hashcode的值原创 2021-01-24 14:10:32 · 339 阅读 · 0 评论 -
Java~内存泄漏与内存溢出的区别和解决方案
文章目录对比内存溢出和内存泄露的案例分析栈内存溢出的原因对比内存泄露 : 指程序在申请内存后,无法释放已申请的内存空间(指分配出去的内存无法被gc回收)。一次内存泄露危害可以忽略,但内存泄露堆积后果很严重,无论多少内存,迟早会被占光。内存溢出 指程序要求的内存超出了系统所能分配的范围,出现out of memory;比如申请一个long类型,但给了它一个int才能存放的数,就会出现内存溢出,或者是创建一个大的对象,而堆内存放不下这个对象,这也是内存溢出。对于内存溢出在Java中有俩种溢出, 一原创 2021-01-09 15:02:17 · 777 阅读 · 0 评论 -
JVM性能调优~GC性能指标和七大常见垃圾回收器
文章目录GC性能指标HotSpot虚拟机上的垃圾收集垃圾收集器Serial收集器(新生代收集器,串行GC)ParNew收集器(新生代收集器,并行GC)Parallel Scavenge(PS)收集器(新生代收集器,并行GC)Serial Old收集器(老年代收集器,串行GC)Parallel Old收集器(老年代收集器,并行GC)CMS收集器(老年代收集器,并发GC)收集过程G1收集器(唯一一款全区域的并发垃圾回收器)GC性能指标吞吐量: 工作线程运行时间占比总运行时间之比暂停时间: 在执行垃圾回收原创 2020-12-30 12:08:44 · 878 阅读 · 0 评论 -
Java~深度剖析synchronized与ObjectMonitor、volatile和内存屏障
文章目录synchronized的三种应用方式理解Java对象头与Monitor可以得出结论Java虚拟机对synchronized的优化偏向锁轻量级锁锁消除锁粗化总结volatilevolatile与内存屏障总结在Java中, 造成线程安全问题的主要原因就是JMM内存模型, 其让每个线程都有自己的工作内存, 而每个工作内存中的数据都是统一由进程汇总完全复制得来, 俺么当他们自己内存中数据放回到进程中内存的是就会出现数据不一致的问题因此为了解决这个问题,我们可能需要这样一个方案,当存在多个线程操作共享原创 2020-12-25 16:16:31 · 1319 阅读 · 1 评论 -
纠结了很久的一个问题, 内部类和静态内部类在使用上有啥区别
文章目录历史信息对比历史信息Java中的内部类是在Jdk1.1版本之后增加的,内部类是Java语言中一个比较重要的概念,如果能把内部类运用好,那么会明显增强Java程序的灵活性。内部类无论是静态还是非静态, 本质上都是写在内部的一个类, 比如下面代码public class Demo { class Test { }}对比我们都知道Java的类是有封装性的, 比如我们将一个属性或者方法写成是private修饰的, 那么只能在类的内部进行使用,原创 2020-12-24 19:25:55 · 1915 阅读 · 5 评论 -
Java~面向对象编程中对象的生命周期(对象的创建过程,终结阶段,强引用、软引用、弱引用、虚引用 )
文章目录创建阶段类加载检查分配内存初始化设置对象头执行方法引用派遣应用阶段不可见阶段不可达阶段收集阶段finalize()方法终结阶段强引用,软引用,弱引用,虚引用强引用(Strong Reference)软引用(Soft Reference)弱引用(Weak Reference)虚引用(Phantom Reference)对象空间重新分配阶段在Java中,对象的生命周期包括以下几个阶段创建阶段java是面向对象的编程语言,那么对象的创建过程用代码体现就是Person person = new原创 2020-12-21 17:04:29 · 840 阅读 · 0 评论 -
Java~当HashMap中key为对象时为何要重写hashCode和equals
文章目录HashMap存储结构HashMap存储结构HashMap是以键值对的形式进行存储, 其内部是一个数组+单链表+红黑树的存储方式, 在put新增数据的时候首先要使用HashCode得到其哈希值, 然后在使用哈希函数散列到数组中的具体的一个位置, 然后遍历单链表, 如果key相同, 就覆盖value, 如果key不同就加在链表的尾部, 如果这个单链表的长度大于8并且数组长度大于64, 就将这个链表扩容成红黑树好, 那我们有这样一个需求, HashMap中key是new的一个对象,我们观察下面代原创 2020-12-05 15:47:02 · 1221 阅读 · 1 评论 -
Java~对比基于JDK和CGLIB实现的动态代理
文章目录简述动态代理JDK的动态代理实现CGLIB的动态代理Spring中的动态代理简述动态代理想要理解动态代理就得先知道代理模式和静态代理代理模式顾名思义和我们生活中找代理人差不多, 处理的还是我们的是, 但是让他们帮我们去直接面对去处理问题, 而静态代理是一个代理者只能服务一个对象, 而动态代理就是这个代理者是万能的, 可以代理所有对象JDK的动态代理也叫做基于接口的代理模式是JDK官方提供的一种依据类对象和反射得来的代理对象, 所以这种实现方式生成代理对象快, 效率高, 但是要求也高原创 2020-11-30 16:34:50 · 325 阅读 · 0 评论 -
复习JVM和JMM
文章目录JVM位置JVM体系结构类加载过程加载链接类加载时机双签委派模型沙箱安全本地方法栈程序计数器方法区栈堆年轻代与老年代永久代堆内存调优常见垃圾收集器与算法垃圾收集算法JMM内存模型JMM指令JMM规则模型特征Happen-Before(先行发生规则)JVM位置在操作系统之上,java开发环境之下,而操作系统之下是硬件体系也正是因为java是运用在操作系统之上, 所有会有native方法, 这个方法是操作操作系统的东西,jvm是处理不了的, 所以使用native方法区调用操作系统的c++/c代码原创 2020-11-29 17:57:50 · 356 阅读 · 0 评论 -
SpringBoot~什么是微服务架构,为什么使用SpringBoot实现微服务是较好的选择?
文章目录微服务架构微服务架构的特点总结为什么使用SpringBoot实现微服务是较好的选择?SpringBoot项目结构分析微服务架构想要理解微服务就要知道什么是系统架构设计, 因为微服务架构设计是将系统架构设计进行了分离.系统架构设计描述了在应用系统的内部,如何根据业务、技术、组织、灵活性、可扩展性以及可维护性等多种因素,将应用系统划分成不同的部分,并使这些部分彼此之间相互分工、相互协作,从而为用户提供某种特定的价值的方式。这个整体就是一个系统架构设计的思想前面说到微服务架构设计是将系统架构设计原创 2020-11-12 10:28:06 · 1742 阅读 · 2 评论 -
Java~并发容器ConcurrentHashMap、ConcurrentLinkedQueue、阻塞队列BlockingQueue的实现原理与使用
文章目录ConcurrentHashMap对比HashMap和HashTableConcurrentHashMap的结构原理get操作put操作size操作ConcurrentLinkedQueueConcurrentLinkedQueue的结构原理入队列出队列阻塞队列BlockingQueueJava里的六个阻塞队列(了解)ConcurrentHashMap对比HashMap和HashTable在并发编程中使用HashMap可能导致程数据序数据出错严重还会导致死循环。而使用线程安全的HashTabl原创 2020-10-14 14:33:23 · 639 阅读 · 0 评论 -
Java~处理器和Java实现原子操作的原理
文章目录原子操作处理器实现原子操作的原理使用总线锁保证原子性使用缓存锁定保证原子性Java如何实现原子操作使用循环CAS实现原子操作使用CAS的三个问题使用锁机制实现原子操作原子操作原子(atomic)本意是“不能被进一步分割的最小粒子”’,而原子操作(atomic operation)意为“不可被中断的一个或一系列操作”。处理器实现原子操作的原理使用总线锁保证原子性如果多个处理器同时对共享变量进行读改写操作(i++就是经典的读改写操作),那么共享变量就会被多个处理器同时进行操作,这样读改写原创 2020-10-12 22:22:01 · 372 阅读 · 0 评论 -
Java~util包中Timer的使用, 演示cancel方法 和 对比schedule和scheduleAtFixedRate方法
文章目录Timer常见问题方法schedule(Timer Task task, long delay)方法schedule(Timer Task task, long delay, long period)cancel方法TimerTask类的cancel()方法Timer类的cancel()方法timer.cancel的最常见一个问题对比schedule和scheduleAtFixedRate方法TimerTimer类的主要作用就是设置计划任务,但封装任务的类却是TimerTask类执行计划任务原创 2020-10-11 16:30:16 · 1994 阅读 · 5 评论 -
Java~多线程ReentrantLock的公平锁和非公平锁 ,结合Condition实现部分路通知和选择路通知
文章目录ReentrantLock演示ReentrantLock的同步功能ReentrantLock的公平锁与非公平锁代码演示Condition对象监视器演示Condition的等待与通知实现部分路通知和选择路通知ReentrantLock在Java多线程中,可以使用synchronized关键字来实现线程之间同步互斥,但在JDK1.5中新增加了ReentrantLock类也能达到同样的效果,并且在扩展功能上也更加强大,比如具有嗅探锁定、多路分支通知等功能,而且在使用上也比 synchronized更原创 2020-10-10 16:01:37 · 446 阅读 · 0 评论 -
Java~通过管道进行线程间通信: (字节流与字符流)
文章目录字节流代码演示字符流代码演示在Java语言中提供了各种各样的输人/输出流Stream,使我们能够很方便地对数据进行操作,其中管道流(pipeStream)是一种特殊的流,用于在不同线程间直接传送数据。一个线程发送数据到输出管道,另一个线程从输人管道中读数据。通过使用管道,实现不同线程间的通信,而无须借助于类似临时文件之类的东西。在Java的JDK中提供了4个类来使线程间可以进行通信:字节流: PipedInputStream和PipedOutputStream字符流: PipedRe原创 2020-10-08 21:15:11 · 1007 阅读 · 1 评论 -
Java~多线程关键字volatile和synchronized的特性比较
文章目录比较volatile的非原子特性使用原子类来进行++操作原子类也不一定是线程安全的关键字synchronized代码块有volatile同步变量的功能比较线程安全主要就是原子性和可见性俩个方面, Java中的同步机制就是围绕这俩个方面来确保线程的安全.通过使用volatile关键字,是强制的从公共内存中读取变量的值, 是线程同步的轻量级实现, 所以volatile性能肯定比synchronized要好,并且 volatile只能修饰于变量,而synchronized可以修饰方法,以及代码原创 2020-10-04 22:05:46 · 623 阅读 · 1 评论 -
Java~使用synchronized修饰静态方法带来的问题 与 同步synchronized代码块不使用String作为锁对象的原因
文章目录使用synchronized修饰静态方法带来的问题同步synchronized代码块不使用String作为锁对象的原因使用synchronized修饰静态方法带来的问题直接上代码/** * Created with IntelliJ IDEA. * Description: If you don't work hard, you will a loser. * User: Listen-Y. * Date: 2020-09-29 * Time: 11:39 */public原创 2020-09-29 20:08:27 · 788 阅读 · 1 评论 -
Java~源码分析为什么ArrayList是线程不安全的, 如何将其变为线程安全的
文章目录ArrayList不是线程安全的,使用一个案例演示结果分析需要线程安全怎么办?源码分析其为何安全?ArrayList不是线程安全的,使用一个案例演示任务类import java.util.List;/** * Created with IntelliJ IDEA. * Description: If you don't work hard, you will a loser. * User: Listen-Y. * Date: 2020-09-27 * Time: 15:42原创 2020-09-27 16:18:44 · 1289 阅读 · 0 评论 -
Java~集合HashMap中关键点源码剖析: 八个成员变量, 三个构造方法, 六个成员方法
文章目录HashMap简介HashMap继承关系HashMap集合类的成员成员变量构造方法构造一个空的 `HashMap` ,默认初始容量(16)和默认负载因子(0.75)。构造一个具有指定的初始容量和使用默认负载因子(0.75) HashMap。构造一个具有指定的初始容量和负载因子的 HashMap。成员方法hash函数put增加方法将链表转换为红黑树的treeifyBin方法扩容方法_resize删除方法(remove)查找元素方法(get)上述红黑树节点调用的是getTreeNode方法通过树形节点的原创 2020-09-26 19:59:05 · 501 阅读 · 0 评论 -
算法~回溯思想 (附带4道例题)
文章目录回溯电话号码的字母组合组合总和活字印刷N皇后回溯回溯是一种通过穷举所有可能情况来找到所有解的算法。如果一个候选解最后被发现并不是可行解,回溯算法会舍弃它,并在前面的一些步骤做出一些修改,并重新尝试找到可行解。回溯算法一般会结合在搜索算法中。电话号码的字母组合给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。示例:输入:“23”输出:[“ad”, “ae”, “af”, “bd”, “be”,原创 2020-09-25 11:29:26 · 543 阅读 · 0 评论 -
算法~广度优先搜索(Breadth First Search)一石激起干层浪(附带6道练习题)
文章目录广度优先搜索模型出迷宫员工的重要性N叉树的遍历腐烂的橘子单词接龙打开转盘锁广度优先搜索模型BFS() {1.建立起始步骤,队列初始化2.遍历队列中的每一种可能,whlie(队列不为空)通过队头元素带出下一步的所有可能,并且依次入队判断当前情况是否达成目标:按照目标要求处理逻辑继续遍历队列中的剩余情况}出迷宫假设有一个迷宫,里面有障碍物,迷宫用二维矩阵表示,标记为O的地方表示可以通过,标记为1的地方表示障碍物,不能通过。现在给一个迷宫出口,让你判断是否可以从入口进来之后,走出迷宫,原创 2020-09-23 23:52:55 · 786 阅读 · 0 评论 -
算法~深度优先搜索(Depth First Search)一条道走到黑 (附带5道例题)
文章目录深度优先搜索扑克与盒子员工的重要性图像渲染被围绕的区域岛屿的数量深度优先搜索深度优先搜索的方法是,从矩阵中某顶点v出发:(1)访问顶点v;(2)依次从v的未被访问的邻接点出发,对矩阵进行深度优先遍历;直至图中和v有路径相通的顶点都被访问;(3)若此时图中尚有顶点未被访问,则从一个未被访问的顶点出发,重新进行深度优先搜索,直到矩阵中需要被访问的顶点均被访问过为止。扑克与盒子题目描述假如有编号为1 ~ 3的3张扑克牌和编号为1~3的3个盒子,现在需要将3张牌分别放到3个盒子中去,且每个原创 2020-09-21 22:46:05 · 768 阅读 · 0 评论 -
动态规划(三)背包问题、回文串分割(Palindrome Partitioning)、编辑距离(Edit Distance)、不同子序列(Distinct Subsequences)
文章目录背包问题背包问题原创 2020-09-14 15:40:32 · 477 阅读 · 0 评论 -
动态规划(二)三角矩阵(Triangle)、路径总数(Unique Paths)、路径总数2(Unique Paths II)、最小路径和(Minimum Path Sum)
文章目录三角矩阵(Triangle)路径总数(Unique Paths)路径总数2(Unique Paths II)最小路径和(Minimum Path Sum)三角矩阵(Triangle)题目描述:链接:https://www.nowcoder.com/questionTerminal/2b7995aa4f7949d99674d975489cb7da来源:牛客网给出一个三角形,计算从三角形顶部到底部的最小路径和,每一步都可以移动到下面一行相邻的数字,例如,给出的三角形如下:[[2],[3原创 2020-09-12 16:06:08 · 618 阅读 · 1 评论 -
Java~简单实现弹出式菜单JPopupMenu, 结合鼠标事件处理演示其功能
文章目录JPopupMenu简单演示JPopupMenuJPopupMenu弹出式菜单和下拉式菜单一样,都通过调用add()方法添加JMenuItem菜单项,但它默认是不可见的。如果想要显示出来,则必须调用它的show(Component invoker,int x,int y)方法,该方法中参数invoker表示JPopupMenu菜单显示位置的参考组件,x和y表示invoker组件坐标空间中的一个坐标,显示的是JPopupMenu菜单的左上角坐标。使用这个最重要的就是这个顶级窗口和JPopupM原创 2020-09-08 20:02:51 · 2984 阅读 · 0 评论 -
Java~Swing中最常见的中间容器有两种:JPanel和JScrollPane的使用
文章目录JPanelJScrollPane代码演示在JScrollPane中插入表格JPanelJPanel和AWT中的Panel组件使用方法基本一致,它是一个无边框,不能被移动、放大、缩小或者关闭的面板,它的默认布局管理器是FlowLayout。当然也可以使用JPanel带参数的构造函数JPanel(LayoutManager layout)或者它的setLayout()方法为其制定布局管理器。JScrollPane与JPanel不同的是,JScrollPane是一个带有滚动条的面板容器,而原创 2020-09-07 22:38:40 · 1516 阅读 · 0 评论 -
Java~Swing中下拉式菜单JMenuBar(菜单栏)、JMenu(菜单)和JMenuItem(菜单项)的使用
文章目录下拉式菜单三个关键组件的介绍代码演示下拉式菜单在GUI程序中,创建下拉式菜单需要使用三个组件:JMenuBar(菜单栏)、JMenu(单)JMenuItem(菜单项),以记事本为例,这三个组件在菜单中对应的位置如图所示。三个关键组件的介绍1)JMenuBar:JMenuBar表示一个水平的菜单栏,它用来管理菜单,不参与同用户的交互式操作。菜单栏可以放在容器的任何位置,但通常情况下会使用顶级窗口(如JFrame、JDialog)的setJMenuBar(JMenuBar menuBar)原创 2020-09-06 23:12:14 · 7631 阅读 · 0 评论 -
Java~使用URL建立资源连接实现网络图片爬取
文章目录核心API实现演示核心APIInputStreamFileOutputStreamURLPatternMatcher使用url的openStream获取网络资源输入流对象传给inputStream使用Pattern的compile指定我们需要的资源格式使用Matcher匹配器, 将我们获取的所有资源与我们compile指定的格式相匹配将每个资源链接再次使用url获取其inputStream对象最后将inputStream中的资源使用fileoutPutStream传输给电原创 2020-09-04 22:22:56 · 683 阅读 · 0 评论 -
Java~设计模式之工厂模式与抽象工厂模式
文章目录工厂模式接口实例1实例二工厂演示工厂设计模式的优点JDK 中的工厂设计模式实例抽象工厂模式Computer接口实例1实例2抽象工厂Computer工厂工厂生成器演示工厂模式工厂模式顾名思义就好比一个大的工厂里面有很多部门, 你只需要把你想要的东西交给这个工厂, 其他不用你管, 这个工厂就会给你生成出来你想要的东西, 就好比我下面代码的例子, 你说你想要手机, 你把配置给工厂说, 工厂就会判断这个HUAWEI手机还是苹果手机 最后创建手机 返回给你工厂模式一种创建对象的模式,它被广泛应用在jd原创 2020-08-28 16:01:07 · 450 阅读 · 0 评论 -
我的第一个项目OnlineMusic设计文档
文章目录项目简介开发环境和技术栈整体框架数据库设计项目简介OnlineMusic是基于 BS 架构实现的 web 项目, 用户只有网络的就可以听到自己喜欢听的音乐, 看自己喜欢看的MV, 主要实现功能如下:登录、注册、注销上传音乐、视频删除某一个音乐或视频信息删除选中的音乐或视频信息查询音乐或视频(包含查找指定/模糊匹配查询)添加音乐或视频到“喜欢列表”。查询喜欢的音乐或视频(包含查找指定/模糊匹配查询)开发环境和技术栈Java、MySQL、Maven、Tomcat、Http原创 2020-08-28 09:09:39 · 627 阅读 · 0 评论