笔记
文章平均质量分 57
7仔要加油
再来一杯Java,谢谢
展开
-
Atomic包
Atomic包里的类基本都是使用Unsafe实现的,Unsafe只提供了三种CAS方法,compareAndSwapObject,compareAndSwapInt和compareAndSwapLong,AtomicBoolean是先把Boolean转换成整型,再使用compareAndSwapInt进行CAS,所以原子更新double也可以用类似的思路来实现。第一点需要满足的条件,就是需要大量的计算,并且当需要并行计算的时候,我们可以考虑使用 LongAccumulator。变量,也就是这个整型的值。原创 2023-04-05 17:46:32 · 416 阅读 · 0 评论 -
Springboot集成Webservice
简介Web Service是一个平台独立的,低耦合的,自包含的、基于可编程的web的应用程序,可使用开放的XML(标准通用标记语言下的一个子集)标准来描述、发布、发现、协调和配置这些应用程序,用于开发分布式的交互操作的应用程序Web Service技术, 能使得运行在不同机器上的不同应用无须借助附加的、专门的第三方软件或硬件, 就可相互交换数据或集成。依据Web Service规范实施的应用之间, 无论它们所使用的语言、 平台或内部协议是什么, 都可以相互交换数据。Web Service是自描述、 自包原创 2021-08-08 22:25:16 · 1557 阅读 · 0 评论 -
SpringBoot注解
@Autowired原创 2021-08-01 21:39:09 · 168 阅读 · 0 评论 -
雪花算法生成id
SnowFlake算法生成id的结果是一个64bit大小的整数,它的结构如下图:雪花生成的id有64位,其中第1位是符号位,第2至42位是41位的时间戳,第42位至52位是10位的工具机器,包括5位数据中心和5位机器id,第53位到64位是12位的序列号。SnowFlake可以保证:● 所有生成的id按时间趋势递增● 整个分布式系统内不会产生重复id(因为有datacenterId和workerId来做区分)...原创 2021-07-17 17:28:15 · 6818 阅读 · 3 评论 -
Thymeleaf格式化LocalDatetime时间格式
Thymeleaf格式化LocalDatetime时间格式不需要加入任何的格外的包,在spring-boot-starter-thymeleaf下已经存在关于融合java8time的包。否则引入<dependency> <groupId>org.thymeleaf.extras</groupId> <artifactId>thymeleaf-extras-java8time</artifactId> <vers原创 2021-07-11 23:32:21 · 476 阅读 · 0 评论 -
http中常用的状态码
http中常用的状态码这是一个jdk中的http包里的状态码,但是编译的时候却没有这个类,好像是在什么opeanjdk中才有吧,我也不是特别清楚,后来我在orcale的官网上找到的这个类,基本上包含了所有http的状态码。package org.xiaov.http;/** * @description: http协议的一些状态码 * @author: xiaovcloud * @date: 2021/2/1 14:29 * @version:1.0 */public class Cod原创 2021-02-21 14:48:00 · 193 阅读 · 0 评论 -
从无到有搭建一个自己的前后端分离的博客系统
前期的准备建表暂时想到了8张表xiaov_sys: 系统表xiaov_sys_log:系统的操作日志xiaov_sys_view:来访者xiaov_category:分类标签xiaov_article_info:文章信息xiaov_article_category:文章的分类标签xiaov_article_comment:文章的评论xiaov_comment:评论内容,is_about用来区别是不是处于关于我的评论creat database blog;use blog;## s原创 2020-12-19 14:57:50 · 333 阅读 · 2 评论 -
设计模式——模板模式
在模板模式(Template Pattern)中,一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。这种类型的设计模式属于行为型模式。主要解决的问题: 一些方法通用,却在每一个子类都重新写了这一方法。模板方法模式是基于”继承“的;优点:提高代码复用性将相同部分的代码放在抽象的父类中,而将不同的代码放入不同的子类中实现了反向控制通过一个父类调用其子类的操作,通过对子类的具体实现扩展不同的行为,实现了反向控制 & 符合“开闭原原创 2020-11-14 09:53:45 · 83 阅读 · 0 评论 -
线程池基础全概述
简介线程池就是首先创建一些线程,它们的集合称为线程池。使用线程池可以很好地提高性能,线程池在系统启动时即创建大量空闲的线程,程序将一个任务传给线程池,线程池就会启动一条线程来执行这个任务,执行结束以后,该线程并不会死亡,而是再次返回线程池中成为空闲状态,等待执行下一个任务。使用线程池的优势:降低系统资源消耗,通过重用已存在的线程,降低线程创建和销毁造成的消耗;提高系统响应速度,当有任务到达时,通过复用已存在的线程,无需等待新线程的创建便能立即执行;可以对线程进行管理:线程池可以提供定时、定期,原创 2020-09-15 18:19:03 · 91 阅读 · 0 评论 -
JVM初步入门
JVM的体系结构程序计数器一块较小的内存空间, 是当前线程所执行的字节码的行号指示器,每条线程都要有一个独立的 程序计数器,这类内存也称为“线程私有”的内存。正在执行 java 方法的话,计数器记录的是虚拟机字节码指令的地址(当前指令的地址)。如 果还是Native方法,则为空。栈是描述java方法执行的内存模型,每个方法在执行的同时都会创建一个栈帧(Stack Frame) 用于存储局部变量表、操作数栈、动态链接、方法出口等信息。每一个方法从调用直至执行完成的过程,就对应着一个栈帧在虚拟机栈中原创 2020-09-14 11:49:29 · 86 阅读 · 0 评论 -
正则表达式
正则表达式整理元字符代码说明.匹配除换行符以外的任意字符\w匹配字母或数字或下划线或汉字\s匹配任意的空白符\d匹配数字^匹配字符串的开始$匹配字符串的结束\b匹配字符串的结束重复代码说明*重复零次或更多次+重复一次或更多次?重复零次或一次{n}重复n次{n,}重复n次或更多次{n,m}重复n到m次POSIX 字符类(仅 US-ASCII)语法说明原创 2020-09-12 11:08:01 · 250 阅读 · 0 评论 -
排序算法——快速排序
快速排序时间复杂度:O(nlogn)最坏时间复杂度: O(n^2)最好时间复杂度: O(nlgn)空间复杂度:O(lgn)不稳定算法原理在排序的数组中选择一个基准,(我这里选择右边界的数作为基准)。伪造两个指针leftPtr和rightPtr,leftPtr指向第一个数,rightPtr指向基准值前面一个数。leftPtr向后扫描,找到第一个大于基准值的索引,rightPtr向前扫描,找到第一个小于基准值的索引,交换两个索引的值。当leftPtr>rightPtr的时候表示原创 2020-07-20 14:42:15 · 96 阅读 · 0 评论 -
Java实现cache的原理
package com.whpu.utils;import lombok.AllArgsConstructor;import lombok.Data;import lombok.NoArgsConstructor;import java.util.*;import java.util.concurrent.ConcurrentHashMap;public class CacheUtil { @Data @AllArgsConstructor @NoArgsCons原创 2020-07-17 17:04:15 · 238 阅读 · 0 评论 -
手把手教你IDEA集成tomcat
下载tomcat进入apache tomcat的官方网站下载,地址https://tomcat.apache.org/download-90.cgi下载好后,解压就可以了。新建web项目如果项目已经建好,请跳转点击跳转进入到界面后配置自己的Java版本,选择new 找到自己jdk目录,完成jdk的配置。这里我们主要讲解集成tomcat,最开始打开Application server这里应该什么都没有,我这里以前已经就新建过了。点击new后,点击Tomcat Server选择你刚才解压的原创 2020-06-28 16:39:44 · 1727 阅读 · 0 评论 -
排序算法——归并排序
归并排序时间复杂度:O(nlogn)最坏时间复杂度: O(nlgn)最好时间复杂度: O(nlgn)空间复杂度:O(n)稳定两路归并算法思路:分而治之(divide - conquer);每个递归过程涉及三个步骤分解: 把待排序的 n 个元素的序列分解成两个子序列, 每个子序列包括 n/2 个元素.治理: 对每个子序列分别调用归并排序MergeSort, 进行递归操作合并: 合并两个排好序的子序列,生成排序结果.代码实现:public class MergeSort {原创 2020-06-26 22:39:53 · 172 阅读 · 0 评论 -
面向对象的基本概念
面向对象三大特征封装利用抽象数据类型将数据和基于数据的操作封装在一起,使其构成一个不可分割的独立实体。数据被保护在抽象数据类型的内部,尽可能地隐藏内部的细节,只保留一些对外的接口使其与外部发生联系。用户无需关心对象内部的细节,但可以通过对象对外提供的接口来访问该对象。优点:减少耦合:可以独立地开发、测试、优化、使用、理解和修改减轻维护的负担:可以更容易被理解,并且在调试的时候可以不影响其他模块有效地调节性能:可以通过剖析来确定哪些模块影响了系统的性能提高软件的可重用性降原创 2020-06-22 13:39:14 · 188 阅读 · 0 评论 -
设计模式——观察者模式
当对象间存在一对多关系时,则使用观察者模式(Observer Pattern)。比如,当一个对象被修改时,则会自动通知依赖它的对象。观察者模式属于行为型模式。主要解决的问题:一个对象状态改变给其他对象通知的问题,而且要考虑到易用和低耦合,保证高度的协作。观察者模式所涉及的角色有:抽象主题(Subject):抽象主题角色把所有对观察者对象的引用保存在一个聚集(比如ArrayList对象)里,每个主题都可以有任何数量的观察者。抽象主题提供一个接口,可以增加和删除观察者对象,抽象主题角色又叫做抽象被观察者原创 2020-06-21 16:58:06 · 166 阅读 · 0 评论 -
设计模式——适配器模式详解
定义:将一个类的接口转成客户期望的另外一个接口。适配器模式使得原本由于接口不匹配而不能一起工作的那些类可以一起工作。由三个角色组成:Target目标角色,就是我们期待的接口Adaptee源角色,就是我们需要转换的角色,Adpater适配器角色,就是我们的核心角色,主要把源接口转成目标接口。例子如下:现有一个原有的Adaptee(需要适配的类)public class Adaptee { void adapteeRequest(){ System.out.printl原创 2020-06-21 11:30:21 · 138 阅读 · 0 评论 -
设计模式——三大工厂模式详解
简单工厂由三种角色组成:工厂角色:这是本模式的核心,含有一定的商业逻辑和判断逻辑。在java中它往往由一个具体类实现。抽象产品角色:它一般是具体产品继承的父类或者实现的接口。在java中由接口或者抽象类来实现。具体产品角色:工厂类所创建的对象就是此角色的实例。在java中由一个具体类实现。例子如下:现在有两个产品ProductImpl01和ProductImpl02分别实现Produc接口public interface Product { void getName();}p原创 2020-06-20 23:31:15 · 274 阅读 · 0 评论 -
设计模式——单例模式详解
单例模式定义保证一个类仅有一个实例,并提供一个访问它的全局访问点。单例模式属于创建型模式,它提供了一种创建对象的最佳方式。这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。特点1、单例类只能有一个实例。2、单例类必须自己创建自己的唯一实例。3、单例类必须给所有其他对象提供这一实例。为什么需要单例模式1.资源共享的情况下,避免由于资源操作时导致的性能或损耗等。如日志文件,应用配置。原创 2020-06-20 10:09:51 · 272 阅读 · 0 评论 -
排序算法——希尔排序
希尔排序时间复杂度:O(n^1.3)最坏时间复杂度:O(n^2)最好时间复杂度:O(n)不稳定希尔排序说起来也算是插入排序的一种改进,效率比较高,数据多时更加明显。算法代码:private static void sort2(int[] arr) { int count = 0; int h = 0; while (h <= arr.length / 3) { h = 3 * h + 1; } for (; h > 0; h =原创 2020-06-19 08:52:14 · 172 阅读 · 0 评论 -
排序算法——插入排序
插入排序时间复杂度:O(n^2)最坏时间复杂度:O(n^2)最好时间复杂度:O(n)稳定常见的插入排序算法:public static void sort2(int[] arr) { for (int i = 0; i < arr.length; i++) { for (int j = i; j > 0; j--) { if (arr[j] < arr[j - 1]) { Common.swa原创 2020-06-18 08:58:27 · 238 阅读 · 0 评论 -
Java中String类最详细
1、简介String代表的是字符串常量,他们的值在创建后不能更改。字符串缓冲区支持可变的字符串。因为String对象是不可变的,所以可以共享。源码分析:public final class String implements java.io.Serializable, Comparable<String>, CharSequence { /** The value is used for character storage. */ private final cha原创 2020-06-17 17:26:40 · 2277 阅读 · 0 评论 -
接口和抽象类最详细
抽象类**抽象方法:**没有方法体的方法,并且使用abstract关键字修饰的方法**抽象类:**用abstract修饰的类就是抽象类abstract class Demo4 { public void add(){ System.out.println("add..."); } public abstract void minus();}继承抽象类的子类必须重写父类所有的抽象方法。否则,该子类也必须声明为抽象类。最终,必须有子类实现该父类的抽象方法,否则原创 2020-06-16 23:21:24 · 358 阅读 · 0 评论 -
centOS中安装Java运行环境
一、安装JDK1.8(已编译的二进制包)1、卸载自带的jdk1.7 rpm -qa | grep java //查询所有通过rpm方式安装的软件,并搜索出跟java有关的 rpm -e --nodeps java-1.7.0-openjdk-1.7.0.79-2.5.5.4.el6.i686 //卸载jdk的文件 rpm -e --nodeps java-1.6.0-openjdk-1.6.0.35-1.13.7.1.el6_6.i686 //卸载jdk的文件2、将window中jdk原创 2020-06-09 07:13:10 · 346 阅读 · 0 评论 -
github退回到历史版本
用命令行模式 先查看版本号git reflog或者git log --pretty=oneline用命令行模式 恢复到某个版本号 git reset --hard <commit ID号>推送到远程githubgit push -f -u origin master...原创 2020-05-03 21:54:22 · 1857 阅读 · 0 评论 -
Linux终端命令(持续更新)
命令描述ls当前目录下的文件夹mv重命名pwd当前的目录的路径touch创建文件批量重命名:for i in ls;do mv $i $i.txt ;done原创 2020-04-20 20:39:26 · 490 阅读 · 0 评论 -
Java中创建对象的4种方法
通过new创建对象会创建几个完全不相同的对象实体类:package cn.xiaov.creatobject;public class Person { private String name; private int age; public String getName() { return name; } public vo...原创 2020-04-12 20:09:01 · 836 阅读 · 0 评论 -
关于Java反射的几个问题
1. 什么是反射?JAVA反射机制是在运行状态中,对于任意一个实体类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性。2. 反射的作用?通过反射可以使程序代码访问装载到JVM 中的类的内部信息,获取已装载类的属性信息,获取已装载类的方法,获取已装载类的构造方法信息3. 克隆、序列化和反序列化与反射在创建对象时的异同?clone克隆:对象必须实现Clone...原创 2020-04-12 16:40:30 · 157 阅读 · 0 评论 -
设计模式——单例模式
单例模式特点:单例类只能有一个实例单例类必须自己创建自己的唯一实例单例类必须给所有其他对象提供这一实例懒汉式单例描述:这种方式具备很好的 lazy loading,能够在多线程中很好的工作,但是,效率很低,99% 情况下不需要同步。优点:第一次调用才初始化,避免内存浪费。缺点:必须加锁 synchronized 才能保证单例,但加锁会影响效率。getInstance() 的性...原创 2020-04-10 14:07:57 · 149 阅读 · 0 评论 -
设计模式——抽象工厂
计算机包括内存(RAM)、CPU等硬件设备,根据图示的“产品等级结构-产品族”示意图,使用抽象工厂模式实现计算机设备创建过程并绘制相应的类图,并用面向对象语言编程模拟。类图:Java实现:package cn.xiaov.abstractfactory.computer;public class Computer { public static void main(Stri...原创 2020-04-03 21:40:35 · 5262 阅读 · 8 评论 -
多线程整理笔记,超级基础的知识点
多线程并发:指两个或多个事件在同-一个时间段内发生。 交替进行井行:指两个或多个事件在同一-时刻发生(同时发生)。 同时执行构造方法方法名描述Thread()分配一个新的 Thread对象。Thread(String name)分配一个新的 Thread对象Thread(Runnable target)分配一个新的 Thread对象。Thr...原创 2020-03-28 17:08:22 · 101 阅读 · 0 评论 -
将本地项目放在码云gitee上,保姆级教学
1.在码云上新建一个厂库2.打开本地目录文件夹,打开cmd3.使用 git init 命令初始化一个git 本地仓库此时会在本地创建一个 .git 的文件夹,该文件夹是隐藏文件夹。4.添加远程仓库,使用git remote add origin +厂库链接期间需要输入gitee上面的账号和密码。5.将文件保存到缓存区,使用git add . (. 表示所有的)或者git add --a...原创 2020-03-26 12:18:38 · 235 阅读 · 0 评论 -
设计模式——工厂方法
1.现需要设计一个程序来读取多种不同类型的图片格式,针对每一种图片格式都设计一个图片读取器(ImageReader),如GIF图片读取器(GifReadeer)用来读取GIF格式的图片、JPG图片读取器(JpgReadeer)用来读取JPG格式的图片。图片读取器对象通过图片读取器工厂(ImageReaderFactory)来创建,ImageReaderFactory是一个抽象类,用于定义创建图片读...原创 2020-03-25 23:01:01 · 2679 阅读 · 0 评论 -
数据结构和算法整理笔记(持续更新)
数据结构和算法参考视频:https://www.bilibili.com/video/av795586511、数组封装一个集合MyOrderArraypackage cn.xiaov;/** * 有序集合 */public class MyOrderArray { private int[] arr; //有效数据的长度 private int siz...原创 2020-03-23 13:15:08 · 239 阅读 · 0 评论 -
Java入门之配置环境变量
下载jdkhttps://www.oracle.com/java/technologies/javase-jdk11-downloads.html可以下载安装版(.exe),也可以下载绿色版(.zip)。安装或者解压完成之后。开打你jdk的安装路径复制这个路径,之后会用到。右键此电脑(如下图),选择 属性选择 高级系统设置选择 环境变量选择 新建,变量名为JAVA_HO...原创 2020-03-17 16:30:46 · 113 阅读 · 0 评论 -
集合框架整理笔记
List存放的数据可以重复,并且有顺序ArrayList底层是Object[]数组增删很慢,查询很快初始容量为10方法返回值描述add(Object o)boolean将指定的元素添加addAll(Collection c)boolean按照指定 collection 的迭代器所返回的元素顺序,将该 collection 中的所有元素添加到此列表的尾...原创 2020-03-16 14:05:15 · 306 阅读 · 0 评论 -
IDEA调试快捷键
F7 单步调试,进入函数内部Shift+F7 选择要进入的函数F8 单步调试,不进入函数内部Shift+F8 跳出函数Alt+F8 执行表达式查看结果Ctrl+F8 设置/取消当前行断点Ctrl+Shift+F8 查看断点Alt+F9 运行到断点F9 继续执行,进入下一个断点或执行完程序...原创 2020-03-15 14:57:37 · 528 阅读 · 0 评论 -
简单工厂
简单工厂简单工厂不属于一种设计模式,实际应用于较小的项目中。它包含如下角色:1.Factory 工厂角色2.Product 抽象产品3.ConcreteProduct 具体产品角色实例:麦当劳,可以选择芝士汉堡、鸡翅等食品。作为消费者(Client),你不需要考虑这些食品(对象)如何生产(对象创建)的,只需要提出你的选择,然后由麦当劳店(这个工厂来创建)去生产对应的产品。#incl...原创 2020-03-05 12:49:44 · 250 阅读 · 0 评论 -
工厂方法模式是简单工厂模式的延伸, 它拥有简单工厂的优点,弥补了简单工厂的缺点。
工厂方法模式是简单工厂模式的延伸, 它拥有简单工厂的优点,弥补了简单工厂的缺点。1、为什么工厂方法可以算得上是一种设计模式,而简单工厂严格地讲不算呢?是简单工厂因为只抽象了“产品”类,而没有抽象“工厂”类,,导致没有完全把他们解耦,真正的工厂设计模式是同时抽象出“工厂”类和“产品”类。而工厂方法模式克服了简单工厂会违背开-闭原则的缺点。2、根据工厂方法模式的架构机理,分析实现软件设计可扩...原创 2020-03-14 22:42:33 · 249 阅读 · 0 评论