目录

chen 的个人博客

VX:TiAmo151028
Phone:13403656751
Email:zxydczzs@gmail.com

存档: 2021 年 09 月 (10)

Java设计模式 有更新!

设计模式简介 设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。 设计模式是一套被反复使用的、多数人知晓的、经过分类编目的代码设计经验的总结。使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码可靠性。毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如果大厦的一块块砖石一样。项目中合理的运用设计模式可以完美地解决很多问题,每种模式在现实中都有相应的原理来与之对应,每种模式都描述了一个在我们周围不断重复发生的问题,以及该问题的核心解决方案,这也是设计模式能被广泛应用的原因。------摘自菜鸟教程 设计模式的类型 根据设计模式的参考书 Design Patterns - Elements of Reusable Object-Oriented Software(中文译名:设计模式-可复用的面向对象软件元素)中所提到的,总共有 23 种设计模....

Layui下线

Layui 镜像站:https://layui.11dz.cn/

Linux搭建confluence企业级WIKI(破解) 有更新!

前言 从今天开始安装 confluence 的小伙伴一定要记得安装固定版本,因为在八月底 confluence 的某些版本有缺陷,经过身份验证的攻击者(在某些情况下未经身份验证的攻击者)通过构造恶意请求,造成 OGNL 注入,实现远程代码执行,所以官方给出了几个修复这个问题的版本,附截图和连接: https://confluence.atlassian.com/doc/confluence-security-advisory-2021-08-25-1077906215.html https://www.huaweicloud.com/notice/2021/20210826160403127.html 我这里安装的是 confluence v7.4.11 版本。 一、安装 MySQL 1、去官网下载 rpm 包,建议下载好在传到服务器中。 https://downloads.mysql.com/archives/community/ 描述一下我们下载了那些 rpm 2、上传至/usr/local/src 目录下,如下图所示。 3、安装,需要联网,使用如下命令: 1yum inst....

MacOS brew安装mysql报错【tar: Error opening archive: Failed to open xxx】 有更新!

解决方案 更改环境变量,将 HOMEBREW_BOTTLE_DOMAIN 改正确即可。 1echo 'export HOMEBREW_BOTTLE_DOMAIN=https://mirrors.ustc.edu.cn/homebrew-bottles/bottles' >> ~/.zshrc 2source ~/.zshrc 此刻 brew 已经换源为中科大源。 参考资料:https://www.cnblogs.com/zupernova/p/15138881.html

悲观锁、乐观锁、自旋锁、读写锁、共享锁、排它锁、统一锁、分段锁。 有更新!

悲观锁 1、定义 具有强烈的独占和排它特性,它指的是对数据被外界(包括本系统当前的其他食物,以及来自外部系统的事务处理)修改持保守态度,因此,在整个数据处理过程中,将数据处于锁定状态。 2、Java 悲观锁实现之 synchronized synchronized 就是典型的悲观锁,相当于不管哪一个线程(例如线程 A),运行到这个方法时,都要检查有没有其他线程 B 或者 C、D 等正在用这个方法(或者该类的其他同步方法),有的话要等正在使用 synchronized 方法的线程 B 或者 C、D 运行完这个方法后再运行此线程 A,没有的话,锁定调用者,然后直接运行。 补充 1/** 2 * @author ZhangXiaoYu 3 * @date 2021/5/13 9:25 4 */ 5public class Thumbnail { 6 Object obj = new Object(); 7 //synchronized修饰普通方法,锁对象是this对象。 8 public synchronized void test(){ 9 10 } 11 12 //sy....

MacOS安装brew

网上搜了好多安装 brew 的方式,包括官网的方式、中科大镜像啊啥的都不行,最后找到了一种可行的方案。 终端执行下方命令,会让你选择镜像源,我选择的是清华大学镜像源,然后等待就好了。 1/bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)" 2

MacOS启动SpringBoot项目时报错【Logging system failed to initialize using configuration from 'logback.xml '】 有更新!

由于是第一次操作 MacOS 系统,在将 Java 环境变量配置好,IDEA 等一系列都安装好后,把项目代码拉了下来,然后运行,结果报错 1Logging system failed to initialize using configuration from 'logback.xml ' 反复找解决方案,最终定位到了 logback.xml 中创建日志文件目录的问题,因为原先在 windows 环境下,logback.xml 中的日志文件存放在/home/xxx 目录下,切换到了 MacOS 系统后由于 home 是不允许创建任何东西的,所以需要以下步骤。 1、进入根目录; 2、编辑 auto_master 文件 1sunshiqiang@sunshiqiangdeMac-mini / % cd / 2sunshiqiang@sunshiqiangdeMac-mini / % sudo vim /etc/auto_master 3、将 home 一行注释掉。 1# 2# Automounter master map 3# 4+auto_master # Use directory....

简单学习数据结构 有更新!

数据结构简介 数据结构是为实现对计算机数据有效使用的各种数据组织形式,服务于各类计算机操作。不同的数据结构具有各自对应的适用场景,旨在降低各种算法计算的时间与空间复杂度,达到最佳的任务执行效率。 常见的数据结构可分为[线性数据结构]和[非线性数据结构],线性数据结构:[数组]、[链表]、[栈]、[队列];非线性数据结构:[树]、[图]、[散列表]、[堆]。 数组 数组是将相同类型的元素存储与连续内存空间的数据结构,其长度不可变。 1// 初始化一个长度为5的数组arr 2int[] arr = new int[5]; 3// 元素赋值 4arr[0] = 1; 5arr[1] = 2; 6arr[2] = 3; 7arr[3] = 4; 8arr[4] = 5; 或者可以使用直接赋值的初始化方法 1int[] arr = {1,2,3,4,5}; 可变数组 [可变数组]是经常使用的数据结构,其基于数组和扩容机制实现,相比普通数组更加灵活。常用操作有:访问元素、添加元素、删除元素。 1// 初始化可变数组 2List<Integer> arr = new ArrayLis....

Stack && LinkedList 有更新!

栈是一种具有[先入后出]特点的抽象数据结构,可以使用数组或链表实现。 1Stack<Integer> stack = new Stack<>(); 我们知道 Java 是不推荐使用 Vector 以及它的子类 Stack 的,因为有更好的替代品,比如:ArrayList、LinkedList,CopyOnWriteArrayList......,当然它也有它的有点,就是它是线程安全的,但也得结合使用场景,比如在单线程无竞争的场景它就是额外的开销了,但是在多线程的环境下也有更好的替代它实现线程安全的方法,所以这里不建议使用。 栈的特性:先入后出也可以使用 LinkedList 来实现,具体实现方法: Stack 1/** 2 * @author ZhangXiaoYu 3 * @date 2021/9/6 11:50 4 */ 5public class TestStack { 6 public static void main(String[] args) { 7 //栈,先入后出,最先入栈的最后出栈。 8 Stack<Integer&g....

volatile关键字与内存可见性 有更新!

1package com.zxy.demo.thread; 2 3import lombok.Data; 4 5/** 6 * @author ZhangXiaoYu 7 * @date 2021/9/2 9:26 8 */ 9public class ThreadDemo1 { 10 //volatile关键字与内存可见性 11 /* 12 * new一个线程子类实例并start,线程内部睡眠200毫秒后将flag设置为true 13 * 主线程使用while循环,如果线程子类的成员变量flag为true时,输出一句话后break出循环。 14 * 问题1:在主线程while循环时,flag已经为true,却没有跳出循环,为什么? 15 * 这是内存可见性的问题。当多个线程操作共享数据时,彼此不可见。 16 * 基本可以理解为,ThreadDemo线程先从主存中把数据读取过来,读取到的是false,然后修改为true,就在还未来得及把true同步到主存 17 * 时,main进来了,这是main读取到的还是false,所以形成死循环,就在main循环时,ThreadD....