轻松理解设计模式(创建型):2、工厂方法模式
前言
设计模式,是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。它描述了在软件设计过程中的一些不断重复发生的问题,以及该问题的解决方案。也就是说,它是解决特定问题的一系列套路,是前辈们的代码设计经验的总结,具有一定的普遍性,可以反复使用。其目的是为了提高代码的可重用性、代码的可读性和代码的可靠性。
经过汇总的23种设计模式它是总结了面向对象设计当中最有价值的经验。对之前来讲可能是对其中部分设计模式还是相对来说熟悉的但仔细琢磨还是会有些疑问,正好在目前相对来说有更多的业余时间,可以来一次重新学习设计模式!
本篇内容在工厂方法模式之前还加了一段关于简单工厂模式的介绍以及相关实现,再引入到工厂方法模式
简单工厂在聊工厂方法模式之前,先了解简单工厂模式,它虽然不属于23种之一但它是工厂模式家族里最基础的一种编码概念
简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂 ...
LeetCode初级算法之其他:191.位1的个数
题目信息
题目地址:https://leetcode-cn.com/problems/number-of-1-bits/
编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为 ‘1’ 的个数(也被称为汉明重量)。
提示:
请注意,在某些语言(如 Java)中,没有无符号整数类型。在这种情况下,输入和输出都将被指定为有符号整数类型,并且不应影响您的实现,因为无论整数是有符号的还是无符号的,其内部的二进制表示形式都是相同的。
在 Java 中,编译器使用二进制补码记法来表示有符号整数。因此,在上面的 示例 3 中,输入表示有符号整数 -3。
示例 1:
123输入:00000000000000000000000000001011输出:3解释:输入的二进制串 00000000000000000000000000001011 中,共有三位为 '1'。
示例 2:
123输入:00000000000000000000000010000000输出:1解释:输入的二进制串 00000000000000000000000010000000  ...
轻松理解设计模式(创建型):1.单例模式
前言
设计模式,是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。它描述了在软件设计过程中的一些不断重复发生的问题,以及该问题的解决方案。也就是说,它是解决特定问题的一系列套路,是前辈们的代码设计经验的总结,具有一定的普遍性,可以反复使用。其目的是为了提高代码的可重用性、代码的可读性和代码的可靠性。
经过汇总的23种设计模式它是总结了面向对象设计当中最有价值的经验。对之前来讲可能是对其中部分设计模式还是相对来说熟悉的但仔细琢磨还是会有些疑问,正好在目前相对来说有更多的业余时间,可以来一次重新学习设计模式!
设计模式的一篇单例模式,内容包含2点一是模式的定义与目的,二是Java具体实现与疑问
定义对于单例模式大家应该还算比较熟悉,可能很多时候需要手写啊啥的。
先还是体会下最初的定义
单例模式最初的定义出现于《设计模式》(艾迪生维斯理, 1994):“保证一个类仅有一个实例,并提供一个访问它的全局访问点。”
我们可以从中得到两个信息:
保证一个类仅仅只能有一个实例
也就是不能被其他外界实例化。那么构造方法得私有private,且对象此实例属于类也就是static成 ...
LeetCode初级算法之数学问题:13.罗马数字转整数
题目信息
题目地址:https://leetcode-cn.com/problems/roman-to-integer/
罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。
12345678字符          数值I             1V             5X             10L             50C             100D             500M             1000
例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II 。 27 写做  XXVII, 即为 XX + V + II 。
通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做 IIII,而是 IV。数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4 。同样地,数字 9 表示为 IX。这个特殊的规则只适用于以下六种情况:
I 可以放在 V (5) 和 X (10) 的左边,来表示 4 和 9。
X 可以放在 L (50) 和 C  ...
LeetCode初级算法之数学问题:326.3的幂
题目信息
题目地址:https://leetcode-cn.com/problems/power-of-three
给定一个整数,写一个函数来判断它是否是3 的幂次方。如果是,返回 true ;否则,返回 false 。整数 n 是 3 的幂次方需满足:存在整数 x 使得 n == 3^x
示例1:
12输入:n = 27输出:true
示例2:
12输入:n = 0输出:false
示例3:
12输入:n = 9输出:true
示例4:
12输入:n = 45输出:false
提示:
-2^31 <= n <= 2^31 - 1
进阶:
你能不使用循环或者递归来完成本题吗?
题解一:迭代看到这题第一想法就是循环降幂(除3)一值可以到最终0次幂也就是等于1说明它是3的幂。
1234567891011public boolean isPowerOfThree(int n) {    if(n <= 0) return false;    while(n != 1){        if(n%3 == 0) ...
RedisTemplate存储乱码问题
前言
这个东西以前也是经常处理,但是懒得记,今天弄自己网盘项目的登录用Redis也遇到这个,记录下自己常用的解决方式
问题比如像下面,存值存一个字符串类型
出现这个问题的原因是两边序列化不一致。
解决方式
配置RedisTemplate的序列化方式
如果key和value都是存字符串类型则设置序列化为StringRedisSerializer
123RedisSerializer stringSerializer = new StringRedisSerializer();redisTemplate.setKeySerializer(stringSerializer);redisTemplate.setValueSerializer(stringSerializer);
如果key参数放字符串,value放对象
12redisTemplate.setKeySerializer(new StringRedisSerializer());redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializ ...
Spring Initializr加载失败
前言
本来是看下SpringBoot几个基本组件引入的依赖,使用Idea的Spring Initializr进行初始化项目,但从他这个默认的地址去拉取父项目会有网络问题
解决方式最好就是用自定义地址,改成国内镜像地址,这里用阿里的:https://start.aliyun.com/  , 改完之后就比较快了
Docker基础
一、Docker简介
1.1 虚拟化技术虚拟化技术是一种计算机资源管理技术,是将计算机的各种实体资源,如服务器、网络、内存及存储等,予以抽象、转换后呈现出来。虚拟化技术打破了计算机实体结构间的,不可切割的障碍。使用户可以比原本的组态更好的方式,来应用这些资源。
虚拟化技术主要作用:
高性能的物理硬件产能过剩和老的旧的硬件产能过低的重组重用,透明化底层物理硬件
软件跨环境迁移问题(代码的水土不服)
在一台主机上实现多个操作系统,关键技术就是硬件的虚拟化。
1.2 什么是Docker首先,我们先来看几个问题:
1.合作开发的时候,在本机可以跑,别人的电脑跑不起来
	这里我们拿Java Web应用程序举例,我们一个Java Web应用程序涉及很多东西,比如JDK、tomcat、spring等等。当这些其中某一项版本不一致的时候,可能就会导致应用程序跑不起来这种情况。Docker则将程序直接打包成镜像,直接运行在容器中即可。
2.服务器自己的程序挂了,结果发现是别人程序出了问题把内存吃完了,自己程序因为内存不够就挂了
	这种也是一种比较常见的情况,如果你的程序重要性不是特别高的话,公 ...

