-
重新精读《Java 编程思想》系列之组合与继承
所属栏目:[大数据] 日期:2021-05-21 热度:171
Java 复用代码的两种方式组合与继承。 组合 组合只需将对象引用置于新类中即可。 比如我们有一个B类,它具有一个say方法,我们在A类中使用B类的方法,就是组合。 public class B { public void say(){ }}public class A { public void combo(){ B b = new B([详细]
-
Java 设计模式之工厂模式
所属栏目:[大数据] 日期:2021-05-21 热度:52
工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。我们只关[详细]
-
Java实现上传文件到指定服务器指定目录
所属栏目:[大数据] 日期:2021-05-21 热度:141
前言需求 使用freemarker生成的静态文件,统一存储在某个服务器上。本来一开始打算使用ftp实现的,奈何老连接不上,改用jsch。毕竟有现成的就很舒服,在此介绍给大家。 具体实现 引入的pom dependencygroupIdch.ethz.ganymed/groupIdartifactIdganymed-ssh2/[详细]
-
SpringBoot 发送邮件功能实现
所属栏目:[大数据] 日期:2021-05-21 热度:141
背景 有个小伙伴问我你以前发邮件功能怎么弄的。然后我就给他找了个demo,正好在此也写一下,分享给大家。 理清痛点 发送邮件,大家可以想一下,坑的地方在哪? 我觉得是三个吧。 第一:邮件白名单问题。 第二:邮件超时问题。 第三:邮件带附件问题。 我下[详细]
-
重新精读《Java 编程思想》系列之向上转型与向下转型
所属栏目:[大数据] 日期:2021-05-21 热度:133
前言 今天重读了一下向上转型与向下转型,有些新的体会,了解了向上转型的好处,及如何向下转型。在此分享给大家。 向上转型 向上转型是用来表现新类和基类之间的关系。在传统中,由导出类转型成基类,在继承图中是向上移动的。因此称作向上转型。由于向上转[详细]
-
单例模式中,你不知道的事~~
所属栏目:[大数据] 日期:2021-05-21 热度:152
单例模式可以说只要是一个合格的开发都会写,但是如果要深究,小小的单例模式可以牵扯到很多东西,比如:多线程是否安全?是否懒加载?性能等等。还有你知道几种单例模式的写法呢?如何防止反射破坏单例模式? 一、 单例模式 1.1 定义 单例模式就是在程序运[详细]
-
Java 泛型详解
所属栏目:[大数据] 日期:2021-05-21 热度:153
1. 概述 泛型在java中有很重要的地位,在面向对象编程及各种设计模式中有非常广泛的应用。 什么是泛型?为什么要使用泛型? 泛型,即“参数化类型”。一提到参数,最熟悉的就是定义方法时有形参,然后调用此方法时传递实参。那么参数化类型怎么理解呢?@H_40[详细]
-
net.sf.json将string转为map
所属栏目:[大数据] 日期:2021-05-21 热度:154
背景 改一个以前的项目,项目里只有这个包,虽然我想用gson或者fastjson,然而并不想引入新的jar。于是使用这个,特此记录,感觉贼不好用。 实现代码 entity.getData()的值:{aaa:bbb} JSONObject jsonObject = JSONObject.fromObject(entity.getData());Map[详细]
-
Java 中序列化与反序列化
所属栏目:[大数据] 日期:2021-05-21 热度:172
一、 序列化和反序列化概念 Serialization(序列化)是一种将对象以一连串的字节描述的过程;反序列化deserialization是一种将这些字节重建成一个对象的过程。将程序中的对象,放入文件中保存就是序列化,将文件中的字节码重新转成对象就是反序列化。 二、[详细]
-
Java 设计模式之抽象工厂模式
所属栏目:[大数据] 日期:2021-05-21 热度:109
抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式指定它[详细]
-
重新精读《Java 编程思想》系列之final关键字
所属栏目:[大数据] 日期:2021-05-21 热度:67
在java中final关键字标识无法被修改。接下来从final修饰数据、方法和类进行介绍。 final数据 final用来告知编译器这一块数据是恒定不变的。数据恒定不变又如下作用: 1、一个永不改变的编译时常量。 2、一个在运行时被初始化的值,而你不希望他改变。 编译器[详细]
-
Java 设计模式之单例模式
所属栏目:[大数据] 日期:2021-05-21 热度:167
单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对[详细]
-
为什么说 Java 中只有值传递?
所属栏目:[大数据] 日期:2021-05-21 热度:175
对于初学者来说,要想把这个问题回答正确,是比较难的。在第二天整理答案的时候,我发现我竟然无法通过简单的语言把这个事情描述的很容易理解,遗憾的是,我也没有在网上找到哪篇文章可以把这个事情讲解的通俗易懂。所以,就有了我写这篇文章的初衷。这篇文[详细]
-
为什么局部内部类和匿名内部类只能访问 final 的局部变量?
所属栏目:[大数据] 日期:2021-05-21 热度:148
首先,我们看一个局部内部类的例子: class OutClass { private int age = 12; public void outPrint(final int x) { class InClass { public void InPrint() { System.out.println(x); System.out.println(age); } } new InClass().InPrint(); }} 这里有一个[详细]
-
瞬间教你学会使用java中list的retainAll方法
所属栏目:[大数据] 日期:2021-05-21 热度:104
retainAll方法简介 当我们有两个list集合的时候,我们可以使用retainAll方法求得两个list集合的子集。retainAll是Collection接口中提供的一个方法,各个实现类有自己的实现方式,我们这里介绍ArrayList的实现方式。 retainAll源码深入 可以看到collection接[详细]
-
jdk默认垃圾收集器
所属栏目:[大数据] 日期:2021-05-21 热度:119
jdk1.7 默认垃圾收集器Parallel Scavenge(新生代)+Parallel Old(老年代)。 jdk1.8 默认垃圾收集器Parallel Scavenge(新生代)+Parallel Old(老年代)。 jdk1.9 默认垃圾收集器G1。 -XX:+PrintCommandLineFlagsjvm参数可查看默认设置收集器类型。 -XX:+[详细]
-
JVM年轻代,老年代,永久代详解
所属栏目:[大数据] 日期:2021-05-21 热度:198
前言 最近被问到了这个问题,解释的不是很清晰,有一些概念略微模糊,在此进行整理和记录,分享给大家。本篇文章主要讲解内存区域的年轻代,老年代和永久代,略微提及一些垃圾回收算法,下面是正文。 堆整体 堆主要用于存放各种类的实例对象和数组。在java中[详细]
-
震惊!java中日期格式化的大坑!
所属栏目:[大数据] 日期:2021-05-21 热度:104
前言 我们都知道在java中进行日期格式化使用simpledateformat。通过格式 yyyy-MM-dd 等来进行格式化,但是你知道其中微小的坑吗? yyyy 和 YYYY 示例代码 @Test public void testWeekBasedYear() { Calendar calendar = Calendar.getInstance(); // 2019-12-[详细]
-
一篇blog带你了解java中的锁
所属栏目:[大数据] 日期:2021-05-21 热度:129
前言 最近在复习锁这一块,对java中的锁进行整理,本文介绍各种锁,希望给大家带来帮助。 Java 的锁 乐观锁 乐观锁是一种乐观思想,即认为读多写少,遇到并发写的可能性低,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下[详细]
-
java 为什么重写equals一定要重写hashcode?
所属栏目:[大数据] 日期:2021-05-21 热度:178
前言 最近复习,又看到了这个问题,在此记录和整理,通过例子来说明这种情况的原因,使大家可以清晰明白这个问题。 初步探索 首先我们要了解equals方法是什么,hashcode方法是什么。 equals方法 equals 是java的obejct类的一个方法,equals的源码如下: publ[详细]
-
为什么wait和notify只能在synchronized中?
所属栏目:[大数据] 日期:2021-05-21 热度:156
前言 wait和notify必须在synchronized块中,否则会抛出IllegalMonitorStateException。 原因 代码示例 class BlockingQueue { QueueString buffer = new LinkedListString(); public void give(String data) { buffer.add(data); notify(); } public String[详细]
-
java中wait和notify的虚假唤醒问题
所属栏目:[大数据] 日期:2021-05-21 热度:84
前言 本篇博客来自?https://www.cnblogs.com/clover-forever/p/12616869.html 自己在此记录一下,方便日后复习。 虚假唤醒的概念 jdk官方文档解释: ? ? ? 所以说在wait和notify一块使用时, 如果使用if作为条件时,会有虚假唤醒的情况发生,所以必须使用whi[详细]
-
常见的java内存溢出情况
所属栏目:[大数据] 日期:2021-05-21 热度:98
堆溢出 java.lang.OutOfMemoryError: Java heap space —-JVM Heap(堆)溢出 JVM 在启动的时候会自动设置 JVM Heap 的值,其初始空间(即-Xms)是物理内存的1/64,最大空间(-Xmx)不可超过物理内存。可以利用 JVM提供的 -Xmn -Xms -Xmx 等选项可进行设置。[详细]
-
一文带你学会国产加密算法SM4的java实现方案
所属栏目:[大数据] 日期:2021-05-21 热度:50
前言 今天给大家带来一个国产SM4加密解密算法的java后端解决方案,代码完整,可以直接使用,希望给大家带来帮助,尤其是做政府系统的开发人员,可以直接应用到项目中进行加密解密。 画重点!是SM4哦,不是SM。哈哈,各位要在知识里遨游,不要想歪。正文开始~[详细]
-
Java 反射修改类的常量值、静态变量值、属性值
所属栏目:[大数据] 日期:2021-05-21 热度:173
前言 有的时候,我们需要修改一个变量的值,但变量也许存在于 Jar 包中或其他位置,导致我们不能从代码层面进行修改,于是我们就用到了下面的场景,通过反射来进行修改变量的值。 定义一个实体类 class Bean{ private static final Integer INT_VALUE = 100;[详细]