自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 redis分布式锁的使用(实践随笔)

1.问题环境公司开发的过程中,打卡的功能,由于c端前端,未做无法节流的操作会造成一秒多次的请求,但是完成打卡的接口又不能屏蔽,因为需要从该接口中获得相应的数据信息,因此针对于写的操作我们需要使用分布式锁。2.分布式锁的使用的是redis使用setNx进行key值的插入,代码如下 boolean redisLock = this.setIfAbsent(ACCOMPANY_POST_ + userClockInRecordId, 1 + ""); try{ i

2022-01-19 23:23:53 806

原创 1.JVM的体系结构、类加载机制、双亲委派机制

1.JVM的体系结构图2.类实例化过程如上图,student类进行javac编译成class文件,然后当这个类被实例化的时候,会向类加载器发出初始化请求,初始化请求之后,会生成一个该类的模板,也就是getClass()方法,之后进行实例化生成对应的对象地址,放在栈中,真正的数据放入堆中。ps可以看出getClass()获得的hashCode一定相同,当时栈中存放的地址不相同。3.类加载器的种类启动类加载器(BootStrapClassLoader):这个类加载器负责放在java_home/jr

2021-09-22 12:42:44 170

原创 juc并发08公平锁和非公平锁

可重入锁中,默认为NonfairSync()非公平锁,给一个boolean参数来判断构造的是非公平锁还是公平锁,如下图1.非公平锁可能会造成线程饿死的情况,也就是一个资源都得不到但是它的执行效率高2.公平锁雨露均沾也就是不会出现线程饿死的情况但是执行效率没有非公平锁效率高,因为他会去判断是否所有线程都得到了资源3.公平锁:多个线程按照申请锁的顺序去获得锁,线程会直接进入队列去排队,永远都是队列的第一位才能得到锁。优点:所有的线程都能得到资源,不会饿死在队列中。缺点:吞吐量会下降很多

2021-09-08 17:05:08 229

原创 juc并发07锁的八种情况

8种锁:1.标准访问,先打印短信还是邮件2.停留4秒在短信方法内,先打印短信还是邮件3.新增普通的hello方法,先是打短信还是hello4.现在有两部手机,先打印短信还是邮件5.两个静态同步方法,1部手机,先打印短信还是邮件6.两个静态同步方法,2部手机,先打印短信还是邮件7.1个静态同步方法,1个普通同步方法,1部手机,先打印短信还是邮件8.1个静态同步方法,1个普通同步方法,2部手机,先打印短信还是邮件一、标准访问,先打印短信还是邮件资源类创建线程操作方法结果,因为当前

2021-09-08 16:49:43 154

原创 文件分片下载、断点下载、学习总结附源码

源码下载提取码:gh841.实际开发中我们遇到过大的文件下载时候便可以使用分片下载的功能,实质就是采用了多线程进行并行的文件分片下载,最后进行文件合并2.后端总体实现思路第一次进行文件信息的探测请求获取文件的大小等信息...

2021-09-03 21:10:26 3010

原创 大文件上传、分片上传、断点续传、学习总结

源码下载地址提取码 gh481.学习了一周的大文件分片上传和断点续传等,最终效果可以做到570M的文件在10s左右完成上传2.实现思路前端实现思路,这里是直接使用别人的前端代码,但是我们也可以总结自己的思路,可以在react 和vue中进行实现,其实不难。后端实现思路3.后端实现代码package com.minjiang.controller;import org.apache.commons.fileupload.FileItem;import org.apache.comm

2021-09-03 14:06:30 342 2

原创 juc并发06HashMap和HashSet线程不安全以及解决方案

1.线程不安全演示代码 HashMap<String, String> map = new HashMap<>(); for (int i = 0; i < 10; i++) { String key = String.valueOf(i); new Thread(() -> { map.put(key,UUID.randomUUID().toString(

2021-08-27 09:32:22 487

原创 juc并发05 线程通信-异常演示(arraylist线程不安全)(写时复制技术)

1.为什么arrarlist线程不安全?我们点开arraylist的add方法可以看见,add方法上是没有synchronized方法的(当然也没有添加lock),因此arraylist是线程不安全的由于arratlist底层是一个数组,在我们新增一个元素时,后进行数组扩容,也就会调用源码中的grow()函数进行数组的扩容,但在多线程的情况下,会出现同时扩容同一个数量的数组,就会抛出ConcurrentModificationException异常问题,也就是线程不安全。2.解决arraylist线

2021-08-23 16:06:10 113

原创 juc并发04 线程间通信

1.实现线程通信例子第一步创建资源类,在资源类中创属性和操作方法第二步在资源类操作方法(1)判断(2)干活(3)通知第三步创建多个线程调用资源类的操作方法例子有两个线程,实现对一个初始值是0的变量,其中一个线程实现+1,另外一个线程-1,让这个变量一直在 0 ,1中进行徘徊在+1的操作中判断变量是否是0如果不是调用object中的wait方法让其进行等待,然后让另外一个线程进行-1之后使用object.notify方法进行+1线程的唤醒操作例子代码//第一步创建资源类,定义属性和操

2021-08-23 15:47:24 82

原创 juc并发03 Lock接口

1.官方文档简介2.可重入锁广义上的可重入锁指的是可重复可递归调用的锁,在外层使用锁之后,在内层仍然可以使用,并且不发生死锁(前提得是同一个对象或者class),这样的锁就叫做可重入锁。实现可重入锁代码:public class ReentrantTest implements Runnable { public synchronized void get() { System.out.println(Thread.currentThread().getName());

2021-08-23 15:39:33 132

原创 juc学习02 synchronized和synchronized实现案例

1.synchronized是java中的关键字,是一种同步锁,他修饰的对象有以下几种修饰一个代码块,被修饰的代码块被称为同步语句,其作用的范围是大括号{}括起来的代码,作用的对象是调用这个代码块的对象修饰一个方法,被修饰的方法称为同步方法,其作用范围是整个方法,作用的对象是调用这个方法的对象虽然可以使用synchronized来定义方法,但synchronized并不属于方法定义的一部分,因此,synchronized关键字不能被继承。如果在父类中的某个方法使用了synchronized关键字,而

2021-08-23 11:41:46 127

原创 juc并发学习01 线程和进程

1.什么是juc?juc就是java.util.concurrent工具包的简称,这是处理线程的工具包,jdk1.5开始出现2.什么是进程和线程进程是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础,在当代面向线程设计的计算机机构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础,程序是指令、数据及其组织形式的描述,进程

2021-08-23 11:28:12 93

原创 js 判断两个日期相距几天(yyyy-MM-dd)格式

1.主方法入口,其中获得今天日期方法在下面一个代码块 getIsExpire = () => { const endDt = 20210807; //结束时间格式 let day1 = new Date(this.getToDay()); //获取今天的日期 //将结束时间yyyyMMdd转换为yyyy-MM-dd格式 let day2 = new Date(endDt.slice(0,4) + "-" + endDt.slice(4,6) + "-" + endD

2021-08-07 11:29:58 1144

原创 grpc(java)入门使用

1.最近由于目前公司微服务使用到grpc可是grpc一般使用在go语言上,因此国内基本没有什么关于grpc在java的完整教程,因此我也对grpc进行了一些资料查找和学习,只能说可以使用,原理就不深入了。2.grpc官网3.创建父工程,作为如果你学习到了grpc还没使用父工程进行项目创建,建议可以现去学习一下关于父工程统一定义版本等相关学习4.创建工程引入依赖父工程pom依赖```xml```go<?xml version="1.0" encoding="UTF-8"?>&lt

2021-06-29 09:06:09 2697 2

原创 nacos集群化部署,nginx(docker版)步骤详解

1.配置环境nacos版本:1.4.1linux:centos7linux配置:内存4G,防火墙已关闭(如果是云服务器记得开放防火墙端口,切记!!)JDK版本1.8工具:xshell、xftp2.环境部署naocos下载地址nacos安装包某盘资源地址提取码:gh84选择linux的tar包安装JDK1.8环境教程将nacos安装包放入root文件夹下并解压,如下图3.切换mysql持久化将nacos-mysql.sql的sql语句在自己的mysql的nacos_config

2021-06-10 10:07:27 618 2

原创 nacos 持久化配置各种坑解决方案

1.环境nacos版本:1.4.1mysql:8.0.23 并且使用docker 启动linux防火墙已关闭2.mysql如何在docker启动,启动命令:docker run --name mysql -v /conf/mysql:/etc/mysql/conf.d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7ps:–name mysql 启动名称 -v /conf/mysql:/etc/mysql/conf.d 配置文件拷贝

2021-06-09 15:50:19 1690

原创 js中什么是赋值、浅拷贝、深拷贝?

1.通宵凌晨刷到一个B站老师讲解什么是浅拷贝 深拷贝 赋值三大区别 感觉学到了,随笔一篇2.先弄清楚js的基本数据类型string number boolean undefined null 这五种其他都是引用类型3.搞清楚堆和栈的关系,首先堆存放的是基本数据类型,而栈存放的是引用数据类型例如对象,栈中存放的是地址不是数据,这个地址指向堆,然而堆中放的是真实数据。4.什么是赋值呢?就是我们把一个对象赋值给一个新对象时,只不过是把对象在栈中的地址赋值给了新对象5.什么是浅拷贝?会在堆中重新创建内存,不

2021-05-22 05:30:02 167

原创 navicat连接腾讯云轻应用服务器docker启动mysql失败经验

1.docker pull mysql:5.72.运行mysql命令:dockerrun--namemysql-p3306:3306-eMYSQL_ROOT_PASSWORD=123456-dmysql:5.73.启动发现4.第一步进入mysql: dockerexec-itmysql/bin/bashps:mysql为你dokcer启动的name输入密码登录mysql -uroot -p123456让root可以被所有ip连接,刷新权限...

2021-02-27 18:06:59 443

原创 cloud学习-Ribbon的了解和手写轮询算法

1.ribbon默认自带的负载规则:默认的是轮询2.手写一个负载均衡的算法原理+JUC(CAS+自旋转锁的复习)(1)首先先在8001和8002controller里面写一个接口(2)去到@LoadBalanced注解(3)创建我们自己的接口(4)LoadBalancer的实现类(5)消费者访问controller的编写(6)测试具体代码可参考git地址:https://github.com/guantongxue/cloud2020...

2021-01-23 21:24:17 114

原创 swagger观看学习,操作步骤

1.使用maven导入jar包在maven 网址输入springfox-swag2.创建一个springboot项目,集成springweb3.导入相关依赖springfox swagger2 springfox ui<!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger2 --><dependency> <groupId>io.springfox</gro

2020-11-24 01:40:32 2837

原创 数据库复习心得:三范式

1.第一范式:保证每一张表的原子性假如你用一张用户表:表中有以下三个字段 用户id 用户姓名 用户地址那么我们添加三个值 用户id:1 用户姓名 :战三 用户地址 :中国福建那么我们可以将其地址分为国籍,地区,这样第一次设计的数据库就不满足第一范式,我们要保证每一个字段都不可拆分,保证其原子性2.第二范式:在第一范式的基础上,保证每一张表只做一件事继续以用户表为例,该表我们是存用户的信息,那么假如我们在该表上添加该用户的成绩成绩我们应该放在一张单独的成绩表中,不应该放在用户表中,这样

2020-11-18 17:08:14 137

原创 spring_IOC容器底层原理和实现过程

1.原理内容(1)IOC底层原理(2)IOC接口(BeanFactory)(3)IOC操作Bean管理(基于xml)(4)IOC操作Bean管理(基于详解)2.什么是IOC(1)控制反转,把对象创建和对象之间的调用过程,交给spring进行管理(2)使用IOC目的:为了耦合度降低(3)做入门案例就是IOC实现3.IOC底层原理xml解析、工厂模式、反射3.画图讲解IOC底层原理(1)原始方式,缺点:耦合度太高了(2)工厂模式目的:耦合度降低到最低限度4.IOC过程(1)第

2020-09-28 16:41:56 1016

转载 IDEA 如何搭建maven 安装、下载、配置(图文)

1.下载 maven 压缩包输入网址 www.apache.org会看到以下界面住下划看到以下界面然后看到这个界面选择下载这个版本下载后解压 maven 压缩包 (文件路径不建议用有中文的,最好自己新建一个那样方便好多)然后创建本地仓库 MavenRepository然后打开 conf文件夹中 修改里面的 settings.xml 文件 (Notepad++、记事本、等等打开修改)加上这段 E:/ideaMaven/MavenRepository 【E:/idea

2020-07-18 20:23:05 236

转载 ajax与重定向

网上有不少说法ajax的请求url浏览器不会重定向的说法是片面的,正常是这样的:当服务器将302响应发给浏览器时,浏览器并不是直接进行ajax回调处理,而是先执行302重定向——从Response Headers中读取Location信息,然后向Location中的Url发出请求,在收到这个请求的响应后才会进行ajax回调处理。大致流程如下:ajax -> browser -> s...

2020-02-17 09:24:53 191

原创 jsp forward语法

格式:<jsp:forward page=“test.jsp”/>运行时将会生成俩个Servlet文件一个是当前运行的jsp文件的Servlet,一个是跳转的jsp文件Servlet

2019-04-06 19:32:49 354

转载 两种include的区别

<%@include%>和jsp:include的区别,发现了一些东西的。<%@include%>:页面请求之前预编译,所有代码包含进来之后,一起进行处理,把所有代码合在一起,编译成一个servletjsp:include:所有代码分别处理,在页面被请求的时候才编译,被编译成多个servlet,页面语法相对独立,处理完成之后再将代码的显示结果(处理结果)组合进来。JS...

2019-04-06 19:17:06 329

原创 实训总结(图书管理系统java)

实训总结(图书管理系统java)1设计任务完成用户登录验证,图书品类的增、删、查、改并保存到数据库中,打印购买图书订单,并将购买图书订单信息数据保存到数据库中。2总体设计序号 类名 说明1 SX1 主类:主程序入口2 UserView 完成用户登录验证,以及获取用户名和密码3 BSView 用户进行1.Book表的增删查改 2.图书购买 功能选择...

2019-02-04 15:15:15 19768 4

空空如也

空空如也

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

TA关注的人

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