- 博客(27)
- 收藏
- 关注
原创 Java8 Stream流操作
Java 8 是一个非常成功的版本,这个版本新增的Stream,配合同版本出现的 Lambda ,给我们操作集合(Collection)提供了极大的便利。那么什么是Stream?Stream将要处理的元素集合看作一种流,在流的过程中,借助Stream API对流中的元素进行操作,比如:筛选、排序、聚合等。Stream可以由数组或集合创建,对流的操作分为两种:1. 中间操作,每次返回一个新的流,可以有多个。2. 终端操作,每个流只能进行一次终端操作,终端操作结束后流无法再次使用。...
2022-09-01 11:09:26
3283
1
原创 JDK1.8新特性之Optional
在我们的开发中,NullPointerException可谓是随时随处可见,为了避免空指针异常,我们常常需要进行一些防御式的检查,所以在代码中常常可见if(obj!= null) 这样的判断。幸好在JDK1.8中,java为我们提供了一个Optional类,Optional类能让我们省掉繁琐的非空的判断。下面先说一下Optional中为我们提供的方法。......
2022-08-17 16:09:10
550
原创 创建型:原型模式
一、什么是原型模式: 原型模式主要用于对象的创建,使用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象。UML类图如下: 原型模式的核心是就是原型类 Prototype,Prototype 类需要具备以下两个条件:(1)实现 Cloneable 接口:在 Java 中 Cloneable 接口的作用就是在运行时通知虚拟机可以安全地在实现了 Cloneable 接口的类上使用 clone() 方法,只有在实现了 Cloneable 的类才可以被拷贝,否则在运行时会抛出 Clone
2022-05-29 23:37:36
139
原创 创建型:建造者模式
参考链接: Java设计模式之创建型:建造者模式一、什么是建造者模式: 建造者模式将复杂产品的创建步骤分解在在不同的方法中,使得创建过程更加清晰,从而更精确控制复杂对象的产生过程;通过隔离复杂对象的构建与使用,也就是将产品的创建与产品本身分离开来,使得同样的构建过程可以创建不同的对象;并且每个具体建造者都相互独立,因此可以很方便地替换具体建造者或增加新的具体建造者,用户使用不同的具体建造者即可得到不同的产品对象。 但建造者模式的缺陷是要求创建的产品具有较多的共同点、组成部分相似,如果产品之
2022-05-29 22:41:41
101
原创 JAVA设计模式总结之六大设计原则
1.单一职责 一个类,只有一个引起它变化的原因。应该只有一个职责。每一个职责都是变化的一个轴线,如果一个类有一个以上的职责,这些职责就耦合在了一起。这会导致脆弱的设计。当一个职责发生变化时,可能会影响其它的职责。另外,多个职责耦合在一起,会影响复用性。例如:要实现逻辑和界面的分离。 简单通俗的来说:一个类只负责一项职责。 问题:比如一个类T负责两个不同的职责:职责P1,职责P2。当由于职责P1需求发生改变而需要修改类T时,有可能会导致原本运行正常的职责P2功能发生故障。 解决方法:
2022-05-03 00:38:33
258
原创 创建型:Java工厂模式
1、工厂模式介绍 在面向对象编程中,创建对象实例最常用的方式就是通过 new 操作符构造一个对象实例,但在某些情况下,new 操作符直接生成对象会存在一些问题。举例来说,对象的创建需要一系列的步骤:可能需要计算或取得对象的初始位置、选择生成哪个子对象实例、或在生成之前必须先生成一些辅助对象。 在这些情况,新对象的建立就是一个 “过程”,而不仅仅是一个操作,就像一部大机器中的一个齿轮传动。 针对上面这种情况,我们如何轻松方便地构造对象实例,而不必关心构造对象示例的细节和复杂过程?解决方案就是使用
2022-05-01 21:17:48
1139
原创 创建型:Java单例模式
一.单例模式的定义: 单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例。在计算机系统中,线程池、缓存、日志对象、对话框、打印机、显卡的驱动程序对象常被设计成单例。这些应用都或多或少具有资源管理器的功能。每台计算机可以有若干个打印机,但只能有一个Printer Spooler,以避免两个打印作业同时输出到打印机中。每台计算机可以有若干通信端口,系统应当集中管理这些通信端口,以避免一个通信端口同时被两个请求同时调用。总之,选择单例模式就是为了避免不一致状态。二.单例模式的特点
2022-04-30 23:35:52
904
原创 java常用垃圾回收器G1和CMS的区别
1 概述 从jdk1.8为界限,几种常用的垃圾回收器如下图所示:注意: 对于Serial-Serial Old 和Parallel Scavenge-Parallel Old这两种垃圾回收器,新生代都采用复制回收算法,老年代采用标记整理算法,区别在于回收时采用一个还是多个线程,缺点也都很一致,就是会产生STW。 虽然CMS垃圾回收器比其他两种好,但是java8之前还算是默认使用的是PS-PO回收器。2 ParNew-CMS(ConcurrentMarkSweep)回收器 与上图
2022-04-10 21:41:04
3860
原创 JVM垃圾回收器
1 HotSpot的算法实现1.1 枚举根节点 以可达性分析中从 GC Roots 节点找引用链这个操作为例,可作为 GC Roots 的节点主要在全局性的引用(例如常量或类静态属性)与执行上下文(例如栈帧中的本地变量表)中,现在很多应用仅仅方法区就有数百兆,如果要逐个检查这里面的引用,那么必然会消耗很多时间。 另外,可达性分析对执行时间的敏感还体现在 GC 停顿上,因为这项分析工作必须不可以出现分析过程中对象引用关系还在不断变化的情况,否则分析结果准确性就无法得到保证。这点是导致 GC 进行时必
2022-04-05 21:39:35
1055
原创 JVM垃圾回收机制
1 垃圾回收区域 GC主要关注于堆中(重点关注堆)和方法区的垃圾收集 引申点:虚拟机栈,本地方法栈,程序计数器不用考虑GC;不会发生OOM的区域只有程序计数器。 Java 内存运行时区域中的程序计数器、虚拟机栈、本地方法栈随线程而生灭;栈中的栈帧随着方法的进入和退出而有条不紊地执行着出栈和入栈操作。每一个栈帧中分配多少内存基本上是在类结构确定下来时就已知的(尽管在运行期会由 JIT 编译器进行一些优化),因此这几个区域的内存分配和回收都具备确定性,不需要过多考虑回收的问题,因为方法结束或者线程结
2022-04-05 00:10:34
11103
原创 JVM的解释器和即时编译器JIT
参考网址 https://www.cnblogs.com/linghu-java/p/8589843.html.1 什么是Java编译器 Java编译器:将Java源文件(.java文件)编译成字节码文件(.class文件,是特殊的二进制文件,二进制字节码文件),这种字节码就是JVM的“机器语言”。javac.exe可以简单看成是Java编译器。2 JVM内的解释器和即时编译器器 什么是机器码? 机器码就是用二进制代码表示的计算机能直接识别和执行的一种机器指令的集合。 而解释器和即时编.
2022-03-24 20:46:54
2463
3
原创 JVM1.8 内存模型(运行时数据区)
1 JVM内存模型图 根据JVM规范,JVM内存共分为五个部分。方法区、堆、虚拟机栈、本地方法栈、程序计数器。其中程序计数器、虚拟机栈、本地方法栈是线程私有的。方法区、堆是线程公有的。1.1 JDK1.8内存模型概览 1.8同1.7相比,最大的差别就是元空间取代了永久代。元空间的本质和永久代类似,都是堆JVM规范中方法区的实现。不过元空间与永久代之间最大的区别在于:元空间并不存在虚拟机中,而是使用本地内存。2 运行时数据区2.1 程序计数器2.1.1 什么是程序计数器 程序计数器是一
2022-03-24 19:55:18
2371
原创 Java虚拟机之类加载机制原理详解
1 JVM基本概念1.1 概述 JVM是可运行Java代码的虚拟计算机,JVM是运行在操作系统之上的,它与硬件没有直接的交互。JVM说到底,其实就是在物理机上运行的程序,同时他依托物理机而拥有了完善的硬件架构和指令系统。1.2 运行过程 Java源文件,通过编译器,能够生产相应的.Class文件,也就是字节码文件,而字节码文件又通过Java虚拟机中的解释器,编译成特定机器上的机器码 。也就是如下: • Java源文件—->编译器—->字节码文件 • 字节码文件
2022-03-22 19:24:09
1561
原创 MYSQL数据库内容详解
MYSQL数据库内容详解:整理记录下mysql的常用知识 参考链接:https://www.cnblogs.com/williamjie/p/11081592.html.1 为什么用自增列作为主键1、如果我们定义了主键(PRIMARY KEY),那么InnoDB会选择主键作为聚集索引。如果没有显式定义主键,则InnoDB会选择第一个不包含有NULL值的唯一索引作为主键索引。如果也没有这样的唯一索引,则InnoDB会选择内置6字节长的ROWID作为隐含的聚集索引(ROWID随着行记录的写入而主键递
2021-09-02 20:47:21
383
原创 004Java基础之JAVA集合详解
JAVA集合详解1 基础知识详解参考链接: java集合超详解https://blog.csdn.net/feiyanaffection/article/details/81394745.2 集合扩容当底层实现涉及到扩容时,容器或重新分配一段更大的连续内存(如果是离散分配则不需要重新分配,离散分配都是插入新元素时动态分配内存),要将容器原来的数据全部复制到新的内存上,这无疑使效率大大降低。listArrayList、Vector默认初始容量为10Vector:线程安全,但速度慢 底层数
2021-05-10 00:47:51
83
原创 003Java基础之JAVA垃圾回收器与垃圾回收算法
JAVA垃圾回收器与垃圾回收算法自己本来想整理下的,看见大佬写的确实太好,直接引用下,抱下大佬的大腿.链接: JAVA垃圾回收器与垃圾回收算法.
2021-05-08 00:21:44
73
原创 002Java基础之Java对象的四种引用:强引用、软引用、弱引用和虚引用
java对象的四种引用:强引用、软引用、弱引用和虚引用在JDK1.2之前,创建的对象只有在处于可触及(reachable)的状态下,才能被程序使用。也就是说,若一个对象不被任何变量引用,那么程序就无法再使用这个对象。垃圾回收器一旦发现这些无用对象,就会对其进行回收。但是,在某些情况下,我们会希望有些对象不需要被立即回收,或者说从全局的角度来说没有立即回收的必要性。比如缓存系统的设计,在内存不吃紧或者说为了提高运行效率的情况下,一些暂时不用的对象仍然可放置在内存中,而不是立即进行回收。为了满足这种要求,从
2021-05-08 00:10:59
139
原创 001Java基础之JVM内存模型
一 概述对于 Java 程序员来说,在虚拟机自动内存管理机制下,不再需要像C/C++程序开发程序员这样为内一个 new 操作去写对应的 delete/free 操作,不容易出现内存泄漏和内存溢出问题。正是因为 Java 程序员把内存控制权利交给 Java 虚拟机,一旦出现内存泄漏和溢出方面的问题,如果不了解虚拟机是怎样使用内存的,那么排查错误将会是一个非常艰巨的任务。二 运行时数据区域Java 虚拟机在执行 Java 程序的过程中会把它管理的内存划分成若干个不同的数据区域。JDK. 1.8 和之前的版
2021-05-07 00:55:26
110
原创 Java 工程师从初级到高级(写给自己,共勉)
Java 工程师从初级到高级(写给自己,共勉)java作为一门经久不衰的代码语言,想成为一名初级搬砖的Java开发简单,但是想深入研究想成为一名高级工程师就很难了。自从学习Java两年以来,我一直把Java当成一个挣钱的手艺,本质上跟其它工作没有区别。比如工人靠贩卖力气挣钱,商人靠贩卖商品赚钱,而程序员靠贩卖代码赚钱。但是就算是一门手艺也有高下之分,一个Java中级工程师的薪资差不多顶两个初级工程师,而一个高级工程师能顶两个中级工程师,下面就谈下我对Java低中高级别的理解,以此激励自己学习。初级工程
2021-04-23 20:19:15
823
6
原创 服务器知识学习
服务器学习:服务器知识工作学习记录linux命令用来查看日志关键字:1、查看日志 前 n行:cat 文件名 | head -n 数量cat test.log | head -n 200 # 查看test.log前200行2、查看日志 尾 n行:cat 文件名 | tail -n 数量 cat test.log | tail -n 200 # 查看test.log倒数200行3、根据 关键词 查看日志 并返回关键词所在行:方法一:cat 路径/文件名 | grep 关键词c
2021-01-05 19:34:24
167
原创 数据库SQL学习
数据库SQL工作学习:整理下工作中遇到到一下有难度的SQL1 in和exists的区别:通常来说能用exists解决的就绝对不用in,因为in的时候字段多了会引起索引不生效,影响搜索的效率,而exists不会影响索引1、 exists的用法select a.* from t_review_blacklist a WHEREnot exists (select 1 from t_baidu_blacklist_add b where b.t_review_blacklist_id = a.i
2021-01-05 19:12:43
189
原创 maven或gradle项目管理软件依赖配置
java依赖配置当我们部署项目时需要添加依赖时有时候不知道在项目中添加依赖,项目组大佬教我的一招分享并记录下来maven在线官方仓库网站官方仓库:https://mvnrepository.com/进入官网可以在搜索框搜索我们需要引用的依赖,找到需要的版本之后点击进入就可以看到引入方式已经帮我们写好了,包含各种项目管理工具的引入方式,只需要复制粘贴到项目中即可,避免在网上花费时间找jar包引入这个网站好像需要外网才能访问,因为公司是接入外网的,使用起来比较方便,如果没有外网的同学还是使用阿里
2021-01-05 16:27:23
154
原创 Java后台返回PDF文件预览下载
Java后台返回PDF文件预览下载开始的代码的系统代码为:ResponseEntity<byte[]> onePdf = s3Wrapper.download(contractEntity.getContractUrl()); out.write(onePdf.getBody()); response.setContentType("application/pdf"); response.setH
2020-12-30 18:51:03
3238
4
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人