自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(207)
  • 资源 (9)
  • 收藏
  • 关注

原创 【AQS】ReentrantLock可重入锁源码解析

AbstractQueuedSynchronizerAQS全程为 AbstractQueuedSynchronizer、抽象队列同步器。是j.u.c包下的一个抽象类,同时也是juc下并发同步工具的基础。像ReentrantLock,Semaphore,CountDownLatch都是基于AQS实现的。CASCAS全程为 Compare And Set 或 Compare And Swap。即比较并交换。是AQS实现的基础。CAS在实现的时候,有三个值。一个是内存值 V,一个是期望值E,一个是更新值 U

2021-09-11 15:08:12 222

原创 Windows上安装单机版Nacos

Windows上安装单机版Nacos文章目录Windows上安装单机版Nacos下载Nacos解压安装包部署Nacos创建数据库初始化数据库修改数据库配置启动Nacos访问Nacos服务登录服务列表Nacos官网:https://nacos.io/zh-cn/下载Nacos到github (https://github.com/alibaba/nacos)下载安装程序,点击releas...

2019-10-25 17:18:43 14796 7

原创 Nacos的自动刷新和多环境管理

Nacos的自动刷新和多环境管理文章目录Nacos的自动刷新和多环境管理自动刷新修改主程序测试结果关闭自动刷新多环境profile管理profile粒度控制加载配置源码分析多环境Group管理默认配置Develop配置测试结果多环境namespace管理概述默认命名空间自定义命名空间完整配置Nacos配置测试结果自动刷新所谓自动刷新,通俗说就是指当我们在Nacos配置中心管理界面修改之后,相...

2019-10-25 17:17:41 9940 5

原创 Nacos多配置加载和共享配置

Nacos多配置加载和共享配置中文文档:https://github.com/alibaba/spring-cloud-alibaba/wiki/Nacos-config文章目录Nacos多配置加载和共享配置多配置文件加载控制页面添加配置bootstrap.properties测试结果共享配置Nacos控制台主程序测试配置的优先级完全关闭配置完整配置参考通过前两小节,我们已经掌握了Nac...

2019-10-25 17:17:35 24243 3

原创 Nacos的数据持久化

Nacos的数据持久化文章目录Nacos的数据持久化目录结构单机模式支持mysql数据库存储表Nacos部署文档:https://nacos.io/zh-cn/docs/deployment.html按照我们之前使用本地启动方式来测试Nacos,如果没有进行数据持久化配置的话,那么默认是使用嵌入式数据库来存储数据的。目录结构我们下载下来的Nacos包,解压之后如下:以Windows为...

2019-10-25 17:17:24 2198

原创 博客导航 -- Spring+SpringMVC+Mybatis+SpringCloud

Spring + SpringMVC 教程《Spring in action 4》(一)初识Spring《Spring in action 4》(二)装配Bean《Spring in action 4》(三)高级装配《Spring in action 4》(四)面向切面的Spring《Spring in action 4》(五)SpringMVC起步《Spring in action...

2019-09-27 20:36:56 591

原创 综合案例SpringBoot+shiro+Quartz+RabbitMq+Redis实现自动化订单管理系统+部署和源码

前端LayUI + ECharts后端:SpringBoot,MyBatisPlus,Mysql,Redis,Shiro,Quartz,Swagger2,RabbitMQ技术:SpringBoot整合上述插件实现权限管理,定时任务,MybatisPlus分页,统一数据交互Bean,自定义注解,切面编程AOP,全局异常处理,自定义Filter,Excel导入导出,邮件通知,Swagger2...

2019-04-22 11:31:17 829 3

原创 浅谈OAuth2.0授权码模式

浅谈OAuth2.0授权码模式

2023-09-19 10:09:09 206

原创 使用sharding-jdbc实现水平分库分表和读写分离

使用 Sharding-Jdbc 实现 读写分离和水平分表服务器准备我们克隆四台虚拟机 【 可参考克隆虚拟机】。ip地址分别为:192.168.17.123192.168.17.124192.168.17.125192.168.17.126在四台机器上分别按照好mysql。【可以现在一台服务器上按照好,然后克隆三个】。克隆之后需要修改mysql服务的UUID。否则后面搭建主从复制时会出现问题。# find / -name 'auto.cnf'# vim /data/mysql/

2022-04-14 00:04:54 1431

原创 【JVM】之运行时数据区 Runtime Data Areas

Runtime Data Areas官方文档:https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-2.html#jvms-2.5概述官方解释The Java Virtual Machine defines various run-time data areas that are used during execution of a program. Some of these data areas are created on Jav

2021-11-16 21:54:45 1596

原创 【JVM】之类加载子系统

Java & JVMJava是跨平台的语言,JVM是跨语言的平台。Java【write once,run anywhere】一次编译到处运行。由于Java经过前端编译器[Javac]生成的是字节码class文件,而这个class文件在不同平台的虚拟机都是可以运行的,这也就是Java语言称为是跨平台的语言的原因。JVM是跨语言的平台,与其说JVM是JVM,不如说是CVM(个人理解),即Class VM. 因为如今的JVM已经不再是转为Java而用的,JVM可以加载运行所有符合规范的class文

2021-11-15 22:49:30 700

原创 【Java基础】之集合

集合集合继承图Collection继承图常用方法1. add:添加元素2. remove:删除指定元素,或指定下标。重载;3. contains:查找指定元素是否存在4. size:获取元素的个数5. isEmpty:判断集合是否为空;6. clear:清空7. addAll:添加多个元素;8. containsAll:查找多个元素是否同时存在;9. removeAll:删除多个元素;注意:remove方法的重载;// List 中有一个重载方法。remove()pub

2021-11-14 23:04:26 697

原创 使用Java实现一个缓存

啥也不说,直接上代码,欢迎指正。package com.example.demo.cache;/** * @className: JdkCache * @description: TODO 类描述 * @author: Yang.H * @date: 2021/8/2014:26 **/import lombok.extern.slf4j.Slf4j;import java.util.Date;import java.util.Map;import java.util.concu

2021-08-22 15:24:22 287

原创 Linux常用查询文件或日志命令

常见查询文件内容命令汇总如下:cat filename 查看日志,会打开整个文件,直接跑到最后面。tac filename 查看日志,会打开整个文件,倒序显示,不常用。more filename 查看日志,可以上下翻页,上下行移动显示。 空格翻页,回车按行向下翻。less filename 查看日志, 和more命令类似,按空格快速向下翻,鼠标滚轮可以控制上下翻。 pageUp 和 pageDown 上下翻页。tail -f filename 查看文件,实时显示最后一页。

2021-04-12 21:04:20 285

原创 Java实现二维数组的排列组合

今天同事在做一个需求的时候,需要设计到二维数组的排列组合为题,就趁这个机会,实现了这个功能,现记录一下;public static void main(String[] args) { List<String[]> list = new ArrayList<>(); list.add(new String[]{"A", "B", "C"}); list.add(new String[]{"D", "E", "F"});

2021-03-18 10:19:11 1440

原创 JDC 的 ACCESS_TOKEN 授权流程

JDC 的 ACCESS_TOKEN 授权流程这里统一为JDC授权流程。最近在对接国外版的天猫和京东,在对接API直接,授权需要token的获取。像LAZADA,Shopee,和JD Central 这三家的接口,其token的授权流程类似,这里统一记录一下。授权文档地址https://jos.jd.co.th/home/home#/doc/common/77基本流程:链接平台地址,携带上必要的参数以及重定向地址。平台会返回302响应,将浏览器重定向到商家登录授权页面。商家登录授权后,平台

2021-01-30 15:29:29 1518

原创 AES加密 + Base64编码

AES 加密依赖:<dependency> <groupId>commons-net</groupId> <artifactId>commons-net</artifactId> <version>3.6</version></dependency>加密代码public class EncryptUtils { // AES加密要求key必须要128个比特位(这里需要长

2021-01-06 17:42:23 3084 1

原创 将项目打包成jar包

打jar包第一步:新建一个普通的java项目第二步:编写逻辑代码第三步:使用ctrl + shift + alt + s 进行设置第四步:创建jar第四步: 将 include in project build 勾选第五步:编译打包项目查询打包结果:测试,新建一个普通项目,然后将其导入将jar导入测试:第二种:使用命令行进行打jar包jar -cvf demo.jar ./*需要进入到class文件的目录中,进入到父级目录,parkJar 文件夹中执行命令

2021-01-04 11:27:09 4958 3

原创 使用idea快速导出maven依赖的jar包

IDEA 批量导出Maven项目依赖的jar包需求:需要将一个maven包封装成普通的jar给其他项目用,则需要将maven包中的所有jar全部导入,如果一个一个去找,太过于麻烦,下面可以使用idea完成这个功能。如上图所示。第一步:打开maven的侧边控制栏。第二步:点击M 图标。即会弹出Run Anything 的输入框。第三步:点击右边的project 下拉框,选择需要操作的项目模块。第四部:其次执行命令 mvn dependency:copy-dependencies -Doutp

2021-01-04 10:56:24 5252 2

原创 @Autowired和 @Qualifier 无法注入的问题 NoSuchBeanDefinitionException

@Autowired和 @Qualifier 注解错误如下:Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type ‘com.xxx.xxx.xxx.callable.ITaskRunable’ available: expected at least 1 bean which qualifies as autowire candidate. Depen

2020-09-22 14:25:13 1979

转载 [navicat premium] [IM002] [Microsoft][ODBC 驱动程序管理器] 未发现数据源名称并且未指定默认驱动程序

https://blog.csdn.net/weixin_42207959/article/details/85019659

2020-09-04 10:15:28 519

原创 IDEA 自动删除类中无用的import包 和 自动导入包

IDEA 自动删除类中无用的import包 和 自动导入包手动导包,将光标移动到需要导入的类上,使用 ctrl + enter 进行选包导入。手动删包,即手动把多余的包删除,使用 Ctrl + Alt + O 进行删除。可以使用Idea的自动导包删包功能。第一步:crtl + alt + s 调出设置面板;第二步:进行个性化设置;如图:增加没有歧义的包。即当需要导入的包没有多个备选项时,Idea会自动帮你导入。优化导入的包。即当前project 中存在导入多余的包,Idea会自动帮你删

2020-08-31 11:20:13 3547

原创 HTTP协议

## 常见网络协议的端口 ##1.http :802.smtp:253.pop3:1104.ftp:235.https:443Tomcat【可以修复Tomcat的端口号】Tomcat的目录层次结构-bin:存放启动和关闭Tomcat的脚本文件。-conf:存放Tomcat服务器的各种配置文件。-lib:存放To...

2020-08-29 22:48:55 325

原创 使用动态代理技术实现ORM工具

使用动态代理技术实现ORM工具源代码仓库:https://gitee.com/ooyhao/public-code-repository代理模式分为静态代理和动态代理。而代理模式中,又分为两种,一种是基于实现接口的:jdk动态代理,一种是基于继承类的:cglib动态代理。正常都是继续指定的实现类,通过代理模式来增强,而像类似于mybatis 根据接口来创建实现类并实现指定功能的确实不常见。所以,这里主要是演示如何使用JDK动态代理技术来实现SQL操作功能。涉及到技术点:如何在基于代理模式创建指

2020-08-29 16:38:22 377

原创 并发编程之 Semaphore信号量

Semaphore信号量。允许多个线程同时访问。信号量为多线程写作提供了更加强大的控制方法。从广义上将,信号量是对锁的扩展。无论内部锁synchronized还是重入锁ReentrantLock,一次都只允许一个线程访问同一个资源,而信号量却可以指定多个线程,同时访问某一资源。信号量主要提供了一下构造方法:public Semaphore(int permits) { sync = new NonfairSync(permits);}public Semaphore(int permits,

2020-08-02 14:51:12 335

原创 并发编程之 CountDownLatch &CyclicBarrier & Exchanger

CountDownLatch一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。用给定的计数初始化CountDownLatch。由于调用了countDown()方法,所以在当计数器到达零之前,await方法会一直处于阻塞状态。之后,会释放所有等待的线程,await的所有后续调用都将立即返回。这种现象只出现一次—计数无法被重置。package org.example.juc.CountDownLatch;import java.util.concurrent.Coun

2020-08-02 14:50:13 217

原创 并发编程之线程池ThreadPoolExecutor& Executors

线程池线程池的结构上面是线程池的继承结构。首先Excutor 和 ExecutorService 都是接口,而 AbstractExecutorService 是抽象类,均无法实例化,所以我们使用的是 ThreadPoolExecutor 类。ThreadPoolExecutor先看非常重要的全参构造函数/** * Creates a new {@code ThreadPoolExecutor} with the given initial * parameters. * * @para

2020-08-02 14:45:36 259

原创 并发编程之Lock

Lock我们先看一张Lock锁的继承结构图:Lock,顾名思义就是锁。这是一个接口,用于控制线程安全的一种方式。public interface Lock { void lock(); void lockInterruptibly() throws InterruptedException; boolean tryLock(); boolean tryLock(long time, TimeUnit unit) throws InterruptedException;

2020-08-02 14:41:22 247

原创 并发编程之单例模式,volatile和 synchronized

部分参考:https://www.cnblogs.com/limingluzhu/p/5156659.html单例模式单例模式是众多设计模式中,可以说是最熟悉的了,但是由于单例模式的特殊性,我们需要在任何环境下,获取到的都是同一个实例,下面我们来看看。首先,单例类有一下几个特点。私有化的构造函数(防止外部自行创建实例)私有化的静态全局变量(保存全局唯一实例)公有的静态方法获取单例实例(返回单例实例)众所周知,单例模式分为饿汉式和懒汉式,所谓饿汉式其实就是在类加载的时候,就把单例实例创建.

2020-08-02 14:38:43 527

原创 并发编程之死锁

死锁死锁就是两个或以上线程互相争抢对方资源,导致没有任何一个线程能获得所需所有资源的一种僵持状态。死锁下的线程是 BLOCKED 状态。下面我们来使用Synchronized 关键字 造一个死锁。ServiceOne类:public class ServiceOne { private ServiceTwo serviceTwo; private final Object LOCK_ONE = new Object(); public void setServiceTwo(

2020-08-02 14:32:35 379

原创 并发编程之线程和线程组

线程Thread如何创建线程创建线程的两种方式:这里其实需要注意,说是说创建线程可以通过继承Thread和实现Runnable接口来创建,我们先看看一下。1.继承Thread类,并重写run方法class IThread extends Thread { @Override public void run() { super.run(); }}IThread thread = new IThread();thread.start();2.实现Run

2020-08-02 14:28:32 456

原创 并发编程之多线程基础知识

概念整理在学习多线程之前,我们需要知道什么是线程,当然也少不了需要知道什么是进程。这里仅仅是放两句比较简单的话,有个印象就行,毕竟线程和进程的概念网上一大堆,记大多其实也没啥用。但是呢,面试的时候又喜欢问一些概念性的东西,所以这里还是需要把比较重要的概念记录一下。进程和线程进程:运行中的程序,是资源分配的最小单位。进程相当于是一个容器,里面可以包含许多线程。线程:是CPU调度的最小单位,线程相当于轻量级的进程。知道了进程和线程的概念之后,我们在看一下什么是并发,什么是并行。并行和并发并

2020-08-02 10:23:10 158

原创 HashMap的参数总结

HashMap的参数总结通过前面的解析,我们大致把HashMap的数据结构,put方法的存储过程,get及相关方法的查询过程和remove方法的移除过程解析了一遍,接下来我们看一下面试中常会问到的参数,其实我们前面都接触到了,只是这里单独拿出来总结一下。默认初始化容量/** * The default initial capacity - MUST be a power of two. ...

2020-05-05 13:28:49 3769

原创 HashMap的remove相关方法

HashMap的remove相关方法前面增加和查询都解析完了,这里我们看一下跟删除相关的方法。Remove keypublic V remove(Object key) { Node<K,V> e; return (e = removeNode(hash(key), key, null, false, true)) == null ? null : e.value...

2020-05-05 13:28:18 1087

原创 HashMap的get,containKey, containsValue方法

HashMap的get,containKey, containsValue方法前面我们基本把put方法的过程解析完了,这一篇我们看一下与查询有关的方法。get 方法下面我们先看一下通过key获取value的方法get。public V get(Object key) { Node<K,V> e; return (e = getNode(hash(key), ke...

2020-05-05 13:27:48 1850

原创 HashMap的putVal方法和resize

HashMap的putVal方法和resize声明重要声明:由于本人内功不够,本文未有涉及红黑树如何添加元素,仅用简明思路和方法来了解HashMap的存值过程,备以今后面试等场景。以博客记之,便于后续翻阅,不适深究者putVal 方法解析其实HashMap的简单存储过程已经在前面一篇文章演示过了,这里主要是来看一下putVal方法。首先,先看一下putVal方法的源码:final V ...

2020-05-04 17:03:13 338

原创 初试HashMap的put存储过程

在正式深入了解HashMap之前,我们先按照一个简单的例子来走一遍HashMap的put方法的存储过程。案例HashMap<String,Object> hashMap = new HashMap<>();hashMap.put("name","ooyhao");hashMap.put("gender","男");源码分析下面我们通过分析上面的两行代码,来进行...

2020-05-04 11:38:33 524 3

原创 java基础之ArrayList源码分析

ArrayList源码分析部分参考自:https://www.cnblogs.com/aflyun/p/6444913.htmlhttps://www.cnblogs.com/ysocean/p/8622264.html#_label0概述ArrayList底层是由数组实现的,是一个自动扩容的数组。(由于数组的长度是固定的,扩容时其实是进行数组复制)public class Arr...

2020-04-25 17:31:31 247

原创 如何让网页一秒变灰白

4月4日,一个举国哀悼的日子,全网基本所有网页都变成了灰白色,但对于程序员的我来说,在伤心的同时,想到了这是怎么实现的呢?不可能每个网页都去改页面吧。之前没有搜索到,但是恰好到b站上看到有up主分享这个,原来只是加了一点点css样式即可,如下:html{ filter: grayscale(100%);}如下,我们引入一张美图:<!DOCTYPE html>&...

2020-04-08 15:50:21 621

原创 Java基础之 String类 源码分析

String 类部分参考自:https://www.cnblogs.com/ysocean/p/8571426.html#_label0定义String类是一个不可变类。其一旦被赋值,就不能别修改了。我们先来看一下源码:public final class String implements java.io.Serializable, Comparable<String>...

2020-04-08 11:03:43 309

使用Vue实现TodoMVC

使用vue进行开发,实现了广为人知的todomvc案例,结合了vue中的方法,计算属性,侦听器,系统指令与自定义指令,以及数据的双向绑定。利用这个案例可以很好的锻炼到我们vue的基础知识。

2018-11-24

使用Nodejs+BootStrap搭建一个简单的留言板

通过使用Nodejs搭建一个简单的留言板系统,进行留言。是一个初学者练习的好例子

2018-11-06

全套EasyUI示例源码

这里是一整套EasyUI的示例源码,三十几个组件全部包括在内。笔记可以留言向我要

2018-08-28

SSM+EasyUI DataGrid 实现增删改查,分页,排序

使用SSM框架+EasyUI DataGrid数据表格实现了基本的增删改查,以及对数据分页,排序功能的实现。是一个对于后台管理的很好的例子,因为一般企业后台管理都是使用EasyUI等框架快速搭建,而且DataGrid是EasyUI最重要的组件。

2018-08-06

教你如何搭建JavaWeb项目并配置Tomcat

通过视频的方式把之前学到的通过Idea简单搭建一个JavaWeb项目,并配置tomcat,首页运行分享给大家

2018-08-04

仿京东商城(部分功能)前端+后台

仿京东商城部分功能,从注册登录,首页展示,搜索框,到页面的详情,加入购物车,将购物车存储到redis中。后台使用Spring+SpringMVC+MyBatis+Redis实现。对初学者是一个非常好的联系项目,不大也不小,而且先后台都有涉及。

2018-07-22

MySql + JDBC +EasyUI DataGrid实现数据表格的展示和分页

使用JDBC实现数据库工具类,使用工具类连接数据库,使用EasyUI连接后台实现数据表格的展示和分页功能

2018-07-22

Java 版仿QQ

使用Java 多线程,IO流,网络编程,GUI,集合等知识实现一个Java JDK版仿QQ聊天室,实现了单独聊天和群聊。

2018-07-18

JavaScript基础笔记

JavaScript基础知识笔记,从变量,运算符,函数,对象,到Date,String,Array对象,基本数据包装类。

2018-07-18

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除