设计模式合集
什么是设计模式:
一个问题通常有N种方法来解答,其中肯定有一种解法是最优的,这个最优的解法被人总结出来了,称之为设计模式
设计模式有20多种,对应20多种软件开发种会遇到的问题
是具体问题的最优解决方案
主要关注该设计模式:1. 可以解决什么问题; 2. 设计模式的写法
单例设计模式
确保一个类只有一个对象
示例:
饿汉式单例
懒汉式单例
饿汉式单例拿对象时,对象就创建好了
私有类的构造器
定义一个类变量记住类的一个对象
定义一个类方法,返回对象
示例:
12345678910111213public class A { //2. 定义一个类变量记住类的一个对象 private static A a = new A(); //1. 必须私有类的构造器 private A() { } //3. 定义一个类方法,返回对象 public static A getObject() { return a; }}
单例设计模式的应用场景查看Jav ...
Java常用API介绍
StringJoiner类在使用String类型来对字符串进行拼接的时候,往往效率是很慢的。所以我们才会改用StringBuilder和StringBuffer来进行操作。但是代码会变得繁琐。
但是在JDK8开始推出了StringJoiner,跟StringBuilder一样,也是用来操作字符串的,也可以看成是一个容器,创建之后里面的内容是可变的。
好处:不仅能提高字符串的操作效率,并且在有些场景下使用它操作字符串,代码会更简洁。
示例:
1234567//可以指定拼接字符串时用的间隔符public StringJoiner(间隔符号, 开始符号, 结束符号)StringJoiner s = new StringJoiner(",", "[", "]");s.add("java1");s.add("java2");s.add("java3");//输出:[java1,java2,java3]
Math类Math是一个工具类,里面提供的都是对数据进行操作的一些静态 ...
java学习笔记7-String类型注意事项
String的注意事项
String的对象是不可变字符串对象
结论:每次试图改变字符串对象实际上是新产生了新的字符串对象,变量每次都是指向了新的字符串对象,之前字符串对象的内容确实是没有改变的。因此说String的对象是不可变的。
只要是以双引号:”…”方式写出的字符串对象,会在堆内存中的字符串常量池中存储。
s1与s2都是”…”方式创建的,都存储在堆内存中的常量池中。先前s1已经创建了”ABC”字符串对象,故后面创建的s2对象会直接指向s1创建的字符串对象。该情况下s1和s2的地址是一样的。
但是通过new方式创建字符串对象,每new一次都会产生一个新的对象放在堆内存中。
123String s1 = "ABC";String s2 = "ABC";System.out.println(s1 == s2); //true
有趣的思考题示例1解析:String s2 = new String("abc");如下行代码运行时创建了:2个对象
首先是”abc”在堆内存中的常量池中被创建,new String() 在堆 ...
Excel实用方法汇总[持续更新]
最近工作一直在用到Excel表格,打算将一些遇到的一些实用的方法和技巧整理下来,方便后续工作中使用。
需求将时间转成时间戳有些时候将Excel表格导入到数据库中,经常会发现时间格式不匹配,需要将时间格式转换成时间戳的格式来存储。
转换公式
1= INT((A2-70*365-19)*86400-8*3600)
公式说明:
(A2-70*365-19)求出天数
70*365-19中的70是指1900-1970年中的70年
-19是为了减去闰年多出来的19天
N*86400-8*3600是为了将天数换算成秒
N*86400换算成一天的总秒数
-8*3600减去中国的北京时区UTC+8,北京时间距离格林尼治时间有8小时的时差。
注意:Excel的日期实际上是序列值,它以1900-1-1=1为始,每过一天序列值加1;Unix时间戳是从1970-1-1 0:00:00开始到现在的秒数。
将时间戳转换成时间
话不多说,先上公式:
1=TEXT((B2+8*3600)/86400+70*365+19,"yyyy-mm-dd hh:mm:ss")
公 ...
用sql生成规定时间段内的随机时间
最近工作中处理表格比较多,记录一条最近在工作中发现的实用sql语句,方便后续使用。
需求最近整理表格的时候碰到一个需求,要生成一个时间段内的随机时间。网上找到了很多教程,这里挑选一条简洁实用的。
12345678910UPDATE table_nameSET create_time = ( from_unixtime( unix_timestamp('2010-08-08 08:00:00') + floor( rand() * ( unix_timestamp('2021-11-15 20:00:00') - unix_timestamp('2010-08-08 08:00:00') + 1 ) ) ))
这一条语句核心是用from_unixtime,unix_timestamp和rand 函数。
代码说明:
from_unixtime: 用来将时间戳转换成传统的日期格式。
unix_timestamp: ...
如何在服务器上搭建JIRA
本文介绍如何在Linux服务器上搭建JIRA,以及JIRA中数据的备份和恢复。
顺带一提,我在安装过程中也遇到大大小小不少问题,我也会把我遇到的这些问题进行汇总,希望对你有所帮助。
系统配置本地环境
Mac操作系统
FileZilla软件
jira官网(这里我们使用的是jira 7) https://www.atlassian.com/software/jira/update
Jira升级工具
https://pan.baidu.com/s/1RZ_4t7VSvNQdsOKNDpwMFQ
提取码:veo6
服务器环境
CentOS 7.6 64位
Java 8
Mysql & MariaDB
Nginx
搭建环境安装java 8使用Linux安装java一直以来都很方便,只需要yum安装即可。
12345#下载javayum -y install java#查看下载的java版本java -version
如果输入java -version之后显示为1.8.0_xxx就说明java8已经安装成功。
安装Mysql&MariaDB安装jira之前我们还需要数 ...
java学习笔记5-数组
自用的学习笔记,若有错误欢迎指出。
数组的定义
数组是相同类型数据的有序集合。
数组描述的是相同类型的若干个数据,按照一定的先后次序排列组合而成。
其中,每一饿数据称作一个数组元素,每个数组元素可以通过一个下标来访问它们。
首先,必须声明数组变量,才能在程序中使用数组。
1234//首选方案dataType[] = arrayRefVar;//效果相同,但不是首选方案dataType = arrayRefVar[];
Java语言使用new操作符来创建数组
12dataType[] arrayRefVar = new dataType[arraySize];int[] nums = new int[10];
数组的元素是通过索引访问的,数组索引从0开始。
获取数组长度arrays.length。
数组的四个基本特点
其长度是确定的。数组一但被创建,它的大小就是不可以改变的。
其元素必须是相同类型,不允许出现混合类型。
数组中的元素可以是任何数据类型,包括基本类型和引用类型。
数组变量属于引用类型,数组也可以看成是对象,数组中的每一个元素相当于该对象的成员变量。数组本身就是 ...
将hexo博客部署到腾讯云以及用Nginx来部署ssl证书
我们之前已经成功建立好了hexo博客并且将博客部署到GitHub上面。但是如果想要自己的博客更加正规一些,就还是需要运用到国内的云服务器平台。下面我就来给大家介绍一下如何将自己的博客部署到腾讯云的服务器上。
注意:在部署在腾讯云之前,先要确保你所注册的博客的域名是已经审核通过的。
参考教程B站:教你如何用腾讯云服务器+hexo 搭建属于自己的博客
Blog:fuchenchenle
系统配置
本地环境
Mac操作系统
git, Node.js, hexo…
已经拥有本地的静态网站
FileZilla软件
服务器配置
腾讯云CentOS 7.6 服务器
git, Nginx, 创建git用户
腾讯云服务器配置登陆腾讯云服务器首先我们要先登陆进腾讯云的操作页面中。
使用root账户登陆的时候,可以去站内信中去找当时购买服务器时所发的邮件,上面会给你root账户的初始密码。
就这样,我们就进入到了腾讯云的操作页面上。
云服务器配置Git
安装依赖库
1yum install curl-devel expat-devel gettext-devel openssl-devel ...
java学习笔记4-java方法
自用的学习笔记,若有错误欢迎指出。
java方法
java方法是语句的集合,它们在一起执行一个功能。
方法是解决一类问题的步骤的有序组合
方法包含于类或者对象中
方法在程序中被创建,在其他地方被引用
设计方法的原则:方法本意是功能块,就是实现某个功能的语句块集合。我们设计方法的时候,最好保持方法的原子性。就是一个方法只能完成一个功能,这样利于我们后期的扩展。
12345678910111213public class Demo01 { //main方法 public static void main(String[] args) { //实际参数:实际上传递给方法的参数 int sum = add(88, 48); System.out.println(sum); } //参数a & b 为形式参数 public static int add(int a, int b){ return a + b; }}
方法的定义 ...
java学习笔记3-流程控制
自用的学习笔记,若有错误欢迎指出。
java包机制为了更好地组织类,java提供了包机制,用于区别类名的命名空间。
包语句的语法格式为:
1package pkg1[.pkg2[.pkg3...]];
一般利用公司域名倒序来作为包名字。例如:www.baidu.com,如果要建包的话:com.baidu.www这样来命名。
导入包当我们需要调用一些函数或者某一个包的成员的时候,我们需要在java程序中明确的导入该包。使用import关键字来实现包导入。
12import package1[.package2...].(classname|*);import java.util.Date;
使用*来导入这个包下面的所有类
1import com.shadowprism.base.*;
JavaDoc
javadoc命令是用来生成自己的API文档的。
参数信息
@author 作者名
@version 版本号
@since 指明需要最早使用的JDK版本
@param 参数名
@return 返回值情况
@throws 异常抛出情况
文档注释可以给类加注释的同时也可以给方法加 ...