自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(189)
  • 收藏
  • 关注

原创 单例模式、指令重排序、锁、有序性

因为Synchronized块中的代码相当于是单线程执行的,而因为这个语义的存在,单线程执行的执行结果是保证不能被改变的,因此Synchronized代码块包裹的代码是有序的代码。这里的有序指的是宏观的有序。这段代码我们可以看到,即优化了性能,在多线程情况下,如果实例不为空了,则直接返回了。首先我们需要先好好理解一下加锁保证的有序性和volatile关键字防止指令重排序保证的有序性的区别。首先我们需要明确一点:那就是加锁是无法防止指令重排序的。这条语句时,这里是会发生一个指令重排序的问题的。

2023-07-15 15:06:40 1398

原创 spring源码的简单梳理之bean的初始化过程

我们都知道spring中最核心的就是容器的概念,而交于spring管理的对象称为bean对象。在spring中我们这次以xml配置bean的方式进行简单模拟spring创建bean的初始化过程。我们可以看到一个bean是一个标签所扩住的。而每个bean标签中可能存在多个property标签去代表这个bean中引用的其他的bean对象的属性,表示引用关系。我们假设想自己写一个简单的spring bean初始化的源码,我们该怎么写呢?1、首先我们先来一起研究一下一个xml文件中bean的结构。

2023-06-05 20:54:35 565

原创 Java异步任务编排

Async的是可以指定线程池,使用一个新的线程。不带Async的是使用串行前面那个线程继续执行。

2023-03-04 17:09:28 1861 1

原创 缓存原理的学习

在如今这个微服务分布式的大环境下,集群分布式部署 几乎 已经是我们每个人都熟知的了。缓存也一样,对我们来说 ,如果只是一个单体应用 , 那只要 有本地缓存就足以了,但是倘若分布式部署了很多台机器上,那我们该如何缓存呢,如果依然用本地缓存,那我们不同机器之间的缓存数据该如何同步呢。这样就需要我们的分布式缓存出场了。下面我将分别介绍 本地缓存 和 分布式缓存。

2022-12-31 18:25:16 589

原创 Java23种设计模式之第三弹-工厂模式

简单工厂也称为静态工厂。是一种创建型模式。在简单工厂中,可以根据传入参数的不同返回不同类的对象实例。简单工厂是一个专门的工厂类,用来创建不同其他类的实例对象。这些实例对象通常他们的父类是同一个抽象类或者接口。相当于加了一层。在一个工厂类中生产各种产品,对单一产品的修改又或者增加产品都可能会影响到之前创建其他产品的逻辑。所以我们要加一层将创建产品的过程移至子类生产,每个工厂子类对应一个产品的生产。产品的增加和删除不会影响到其他产品的产出单个产品逻辑修改只需要在对应的工厂类修改即可,不需要动其他的工厂。

2022-11-26 15:15:53 1795

原创 jdk8新特性

1.使用情景:当要传递给Lambda体的操作,已经有实现的方法了,可以使用方法引用。2.方法引用本质上就是Lambda表达式,而我们的Lambda表达式作为函数式接口的实例。所以方法引用,也是函数式接口的实例。3.使用格式: 类(或者对象):: 方法名4.具体分为如下三种情况。对象::非静态方法。类::静态方法。类::非静态方法。5.方法引用使用要求:要求接口中的抽象方法的形参列表和返回值类型与方法引用的方法的形参列表和返回值类型要相同。针对情况1、和情况2。

2022-11-08 14:40:07 455

原创 Java反射、注解、枚举

values(): 返回一个数组,即枚举类中的所有对象valueOf(String str) 找指定名的对象 , 如果提供的str,在枚举类对象中没有,则抛异常。toString() 默认返回枚举类对象名称。

2022-10-30 23:26:42 256

原创 JVM探究

什么是JVMJVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。Java虚拟机包括一套字节码指令集、一组寄存器、一个栈、一个垃圾回收堆和一个存储方法域。 JVM屏蔽了与具体操作系统平台相关的信息,使Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。JVM在执行字节码时,实际上最终还是把字节码解释成具体平台上的机器指令执行。.

2022-08-07 17:07:37 125

原创 ZooKeeper深入探究

zookeeper是什么Zookeeper 是一个开源的分布式协调服务框架 ,主要用来解决分布式集群中应用系统的一致性问题和数据管理问题Zookeeper特点Zookeeper 本质上是一个分布式文件系统, 适合存放小文件,也可以理解为一个数据库Zookeeper是一个集群Zookeeper 中存储的其实是一个又一个 Znode, Znode 是 Zookeeper 中的节点Znode 是有路径的, 例如 /data/host1 , /data/host2 , 这个路径也可以理解为是Znod

2022-08-07 17:07:17 184

原创 多线程知识点总结之温故而知新

1、程序:一段编程语言指令的集合 组成的静态代码即为程序。2、进程:运行着的程序即为进程,进程是一个动态的概念。3、线程:是进程中的一条执行路径。通过上述我们一定了解到这三者的概念区别了吧~了解后我们就需要知道为什么要有多线程?多线程能用来做什么呢?多个线程并行执行,也就引出了我们的并行的概念~那与并行相关的我们不由得会想到并发~那么并发与并行有什么关系或区别呢?1、并行:多个CPU同时执行多个任务。是同一时刻的2、并发:一个CPU采用时间片的方式同时执行多个任务。是宏观上的同时。了解了并行

2022-08-07 17:04:38 278

原创 多线程浅谈

程序:用某种语言编写的一种指令的集合,即一段静态代码进程:是程序的一次执行过程。或是正在运行的一个程序,一个动态的过程。线程:进程进一步细化的结果,是一个程序内部的一条执行路径虚拟机栈和程序计数器是每一个线程一份方法区和堆是一个进程一份,多个线程共享一个进程中的方法区和堆。............

2022-08-03 20:25:55 112

原创 ElasticSearch浅谈

下载安装下载elasticsearch-7.6.1下载elasticsearch-head-master启动elasticsearch.bat启动可能会报错 , 报错需要在elasticsearch-7.6.1\config\elasticsearch.yml这个文件中配置xpack.ml.enabled: false然后在

2022-07-31 19:53:35 700

原创 SQL优化总结

SQL优化总结sql编写过程与执行过程# 编写顺序select ... from ... join ... on ... where ... group by ... having ... order by ... limit ...# 执行顺序from ... on ... join ... where ... group by ... having ... select ... order by ... limit索引结构B+树:小的在左 , 大的在右B树和B+树的区别:关键字的

2022-07-31 19:52:43 150

原创 Java23种设计模式之第二弹-策略模式

设计模式

2022-06-18 18:35:12 675

原创 Java的23种设计模式之第一弹-单例模式

Java的23种设计模式

2022-06-16 21:04:22 198

原创 多平台同步的Markdown编辑器推荐

我之前用typora,但是typora虽然对Markdown语法的支持性极高,但是唯一的缺点是不能同步到其他平台,想要同步,需要自己设置图等转为在线,使用起来还是存在着不足。后转为有道云笔记,有道云笔记支持在线同步,支持网页编辑,可以说很符合我的需求了,但是他唯一的缺点是对md语法的支持度不是很高,个人不是很喜欢有道云编辑器的md编辑器。最后我推荐的是 我来 这块产品 , 该产品支持多端同步的同时,对md语法支持度也非常高,同时页面设计也很好看。个人比较喜欢。https://www.wolai.com/

2022-06-13 13:37:16 1132

原创 编写静态多数据源代码并做定时任务实现数据库数据同步

首先我们在SpringBoot的配置文件中将两个数据源配置出来server: port: 8083spring: datasource: remote : driver-class-name: com.mysql.cj.jdbc.Driver jdbc-url: jdbc:mysql://21.33.322.22/greer?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serv

2022-02-22 10:51:12 1339

原创 easyexcel开发中的一些问题

问题一:在easyexcel中读取excel文件并持久化到数据库 , 我们如果在监听器中的invoke()方法中直接调用mapper层的保存方法将数据保存到数据库的话会出现一个问题 , 那就是有多少条数据我们就需要操作数据库执行多少次保存方法 , 这样的话会导致我们的保存效率很差解决方式是:我们在监听器中新增一个数据列表用于保存easyexcel从excel文件中读取的数据 , 然后我们批量进行导入问题二:但是这样我们就又存在另外一个问题 , 那就是我们的数据量如果特别大了 , 我们全部保存到l

2022-02-16 23:34:47 3283 1

原创 easyexcel读取文件内容封装到对象发现全部是空怎么办

先来看看我的代码package com.starcpdk.easyexcel;import com.alibaba.excel.EasyExcel;import com.starcpdk.easyexcel.dto.ExcelStudentDto;import com.starcpdk.easyexcel.dto.listener.ExcelStudentDtoListener;import org.junit.Test;public class ExcelReadTest { @

2022-02-16 21:34:40 1173

原创 Vue的模板文件中至少要有一个逻辑块且只能有一个逻辑块

<template> <div class="app-container"> </div></template><script>export default { data() { return { } }, created() { }, methods: { }}</script>在templete标签下面至少要有一个div标签

2022-02-13 23:53:12 270

原创 mybatisPlus常用注解

@TableName(value = “正真得表名”)这个注解加到实体类上 , 用于指定他与那个表做映射@TabelId(type = “IdType.ASSIGN_ID”)这个注解是加在实体类中主键字段上的 , ASSIGN_ID就是雪花算法。@TableId这个注解是 标识一个字段为主键的注解 , 用于实体类中的主键字段上 , 在主键字段上添加这个注解 , mybatisplus就会将这个字段识别为主键 , 并且在执行sql时就会为这个主键采用自动生成策略生成主键值添加到数据库中@Tab

2022-01-23 18:18:10 5172

原创 mybatisPlus主键生成策略未生效的原因

我们在使用mybatisplus进行插入操作时候 , 正常来说mybatisPlus会自动给我们对id采用雪花算法生成值但是我们发现 , 我们的insert语句的sql执行没带着id , 这是为什么呢因为mybatisPlus默认只会认字段名为id的才会默认进行主键生成策略如果我们的数据表的主键名不叫id , 那么我们在实体类中的主键字段上需要加一个注解去标识这个字段就是主键字段 , 让mybatisPlus对这个主键字段执行主键生成策略这个注解就是@TableId , 这个注解加载主键字段上面

2022-01-23 16:38:02 2782

原创 Java中方法参数引用传递or值传递

参考文章:https://blog.csdn.net/w372426096/article/details/82216742Java中没有引用传递?我发现我一直的误区是Java中用传递List集合或者传递对象就是引用传递 , 我理解的引用传递就是实参的值会跟随形参的改变而改变。但是我忘了最重要的一点 , 引用传递和值传递的本质区别是实参传递给形参的时候会不会进行拷贝一份副本给形参。在Java中我们传递一个基本数据类型很明显不会有任何问题 , 无疑就是值传递歧义在于传递一个对象的问题到底是值传递还是

2022-01-14 11:07:38 177

原创 常用排序算法浅谈

这篇文章中会介绍以下几种排序算法选择排序思想:找到最小的元素的下标 , 将最小元素与当前轮对应的下标的元素进行交换 , 然后进入下一轮package test;public class Test { public static void main(String[] args) { int[] arr = {1 , 3 , 2 , 6 , 5 , 7 , 3 , 4 , 4}; selectSoft(arr); for (int i

2021-10-29 15:31:05 169

原创 Vue项目整体添加加载中Loading页面

因为Vue通过axios请求后端数据 , 请求过程始终是异步的 , 开始想着用一个变量标识 , 进而让他显示加载中或者隐藏掉加载中的界面后来发现页面中多模块都发起了不同的请求,这样的话 , 全部是异步的 , 该什么时候隐藏加载中模块就不得而知了因此基于上面的问题 , 我在拦截器中进行了处理让其在request请求拦截器中进行展示加载中页面让其在response响应拦截器中进行隐藏加载中页面代码如下这是我的发起请求的封装的工具类import axios from 'axios'import

2021-09-28 15:21:35 3156

原创 JAVA面试

什么是面向对象面向过程更注重每一个步骤及顺序面向对象更注重有哪儿些参与者(对象)、以及各自需要做什么面向过程比较直接高效面向对象更易于扩展和维护继承、封装 、 多态封装: 封装的意义在于明确标识出允许外部使用的所有成员函数和数据项内部细节对外部调用透明、外部调用无须修改或者关心内部实现典型封装场景:JavaBean的属性私有,提供getset对外访问,因为属性的赋值或者获取逻辑只能由JavaBean本身决定,而不能由外部胡乱修改ORM框架:操作数据库 , 我们不需要关心链接是

2021-07-01 14:22:52 112

原创 解决宿舍路由器校园网共享登陆问题

我们在学校使用校园网通常有两种方式使用网线使用路由器连接无线网使用网线的话不存在校园网共享登陆的问题但是使用路由器我们会发现 , 如果宿舍内的一个小伙伴连上无线网 并且进行了登陆 , 那么其他人连上这个校园网就可以直接连接到校外网了 , 这样的话所有人所用的网络就全部都是来源最初登陆的那个人的账号所登录的网络 , 也就是所有人使用的网络全部是走的最初那个登陆的小伙伴的账号校园网的 , 这样的话我们的校园网可能很快就被用完了如下是解决方案:解决方式我们是将路由器当做交换机使用首先我们先将网

2021-06-15 11:39:41 6112 3

原创 nginx如何配置使服务器资源可以让用户输入域名就可以以目录树的方式访问到

首先看看效果这样的效果怎么实现的呢我们首先需要对nginx的配置进行修改做这样一个配置 , 我们的服务器 root配置的那个目录就可以以目录树的方式展示给用户了

2021-05-16 11:34:53 124

原创 github或者gitee第三方登录

首先我们需要在github或者gitee上申请一个应用根据以上的图片在gitee中申请我们的一个应用注意:申请完成后我们就可以开始写代码了这里是我的代码 , 大家跟着改一改就可以了先来看一下我的项目结构 , 这部分只在github包中有涉及写一个controllerpackage com.starcpdk.blogservice.github.controller;import com.alibaba.fastjson.JSON;import com.alibaba.fastj

2021-03-20 22:24:25 1072

原创 Vue踩坑之二级路由下静态资源加载失败

在使用vue开发过程中意外发现 , 当我的路由加到二级时我的页面背景突然没了? 这是怎么回事呢?让我们先来复现一下问题吧起初我的登陆页面的路由是这样子的我的背景图片是在外部的一个css中写着的这个外部css文件我是在index.html中全局引入的 , 按理来说 , 在全局引入了css , 那么我的所有组件 , 所有路由都应该可以访问到我自己写的这个css的内容的 , 也就是说我不管写什么路径都应该可以看到自己的背景图片的给大家先看下我的index.html文件中是怎么引入的这个外部css

2021-03-11 17:25:37 2681 4

原创 vue中通过props实现父组件向子组件传递参数

首先我们看一个例子下面的例子是父组件中的引入HelloWorld这个子组件在子组件标签中用单项绑定绑定一个变量在这里 , msg就是子组件中接受父组件变量值的变量text 就是在父组件中的data中定义的一个变量这里的意思就是 , 把父组件中的变量text的值传递给子组件的变量msg在子组件中 , 我们使用props: [‘msg’],去获取父组件传递的值并将值赋值给子组件中的msg这个变量这样 , 在子组件中就可以通过this.msg去拿到父组件传递的那个值了这里需要注意 , 在子组件

2021-03-03 21:35:25 1137 1

原创 滚动侦测 ,让右下角的内容在页面最上方不显示 , 随鼠标下滑而显示

下载插件下载后把图中两个js文件引入自己的项目中然后在组件中引入这个js在mounted的钩子函数中添加这部分内容// 滚动侦测 var waypoint = new Waypoint({ element: document.getElementById('waypoint'), // 这里代表检测的什么标签 handler: function(direction) { if (direction == "down"){ // 滚动

2021-03-03 20:14:48 242 1

原创 回到顶部实现

添加如下js代码即可 , #toTopButton锁定到一个button , 用于确定点击哪儿个按钮触发这个事件$('#toTopButton').click(function () { $(window).scrollTop(0 , 500) // 第一个参数是滚动到什么位置 , 第二个参数是滚动的时间})...

2021-03-03 19:30:41 103 1

原创 网页生成二维码

插件官网下载后导入将里面得js文件copy到自己得项目中然后在自己得项目组建中引入js文件最后就是使用我们需要在钩子函数mounted中添加如下代码// 生成二维码的图标 var qrcode = new QRCode("qrcode", { // 这里的test就是指定元素的id , 就是生成得二维码要放到哪儿个标签下面 text: "http://jindo.dev.naver.com/collie", width: 100, hei

2021-03-03 19:20:58 371 1

原创 通过网页内容生成目录

下载安装命令npm install --save tocbot下载后将dist目录下面的内容copy到自己的项目目录下然后在组件中引入这个插件的css和js在组件的mounted钩子函数中添加这段代码// 生成目录插件初始化 tocbot.init({ // Where to render the table of contents. tocSelector: '.js-toc', // 生成的目录放在哪儿 , 这里用css选中

2021-03-03 16:15:12 768 2

原创 文章内容排版以及代码高亮

代码高亮官网进入官网后下载js和css文件下载后将css和js文件引入到项目中这里我用的是vue , 引入方式如下引入后代码即可高亮了事例代码<pre><code class="language-css">p { color: red }</code></pre>效果文章内容排版官网下载后将typo.css引入项目即可......

2021-03-03 14:39:58 205 1

原创 vue集成MarkDown编辑器插件

安装mavon-editor插件npm install mavon-editor --save在main.js中引入mavon-editor// 导入markdown编辑器import mavonEditor from "mavon-editor";import "mavon-editor/dist/css/index.css";3// 使用MarkDown编辑器Vue.use(mavonEditor);在组件中使用<template> <div cla.

2021-03-02 15:14:19 1237 2

原创 对导航栏的滚动侦测实现导航栏随也没内容下滑后固定

我们常常看到一些网站的内容下滑时 , 导航栏就固定在顶部 , 这样的功能是怎样实现的呢?我这里是vue的实现在vue的钩子函数中将下面的代码粘贴进去 ,然后我们在自己导航栏的那个标签上加上一个id = "inner"的属性mounted() { //导航栏随页面滚动检测 // 在页面中的nav标签加上id="inner"这洋一个属性 let obj11 = document.getElementById("inner"); let top11 = ge

2021-03-02 14:40:19 385

原创 vue+semanticUI构建项目+页面动态炫酷效果

在Vue项目中 , 需要全局引用的js代码在index.html中引入即可项目构建页面看板娘音乐播放组件页面搞笑标题炫酷页面点击效果页面动画网页建站时间天气插件

2021-02-25 13:37:42 1363

原创 网页中天气显示

我们常常会看到在网页中的导航栏处有一个天气的显示这样的一个效果是通过一些第三方天气插件实现的 ,这里为大家讲解的是html实现和vue实现这里的插件是从天气网插件找到的 天气插件网HTML实现<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"&

2021-02-25 13:20:55 1388

分布式缓存模板使用,内部直接套用即可

缓存分布式手动实现 方式 , 套用即可。

2023-01-01

空空如也

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

TA关注的人

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