自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

程序员二胖

进击的梦想

  • 博客(73)
  • 资源 (3)
  • 收藏
  • 关注

原创 使用smart-doc生成api接口文档

【代码】使用smart-doc生成api接口文档。

2024-04-19 16:17:02 278

原创 GraphQL入门教程:构建更高效的APIs

在目录下创建.graphqls文件定义GraphQL模式。例如,): User): Booleanage: Intid: ID!age: Int。

2024-04-02 17:15:01 425

原创 react useMemo的使用

useMemo是 React 提供的一个钩子(Hook),用于优化性能,特别是在处理复杂的函数或计算密集型操作时。useMemo通过记住(缓存)一个函数的返回值来减少不必要的重复计算。当您使用useMemo时,只有当其依赖项发生变化时,才会重新计算这个记忆值。

2023-12-21 09:57:49 653

原创 java html转word、pdf(包含图片)

java html转word、pdf(包含图片)

2023-10-11 13:37:00 2109 1

原创 mysql8 修改数据存储位置

默认情况下,MySQL的数据库目录位于/var/lib/mysql。假设您想将数据库目录更改为/home/mysql,您可以使用以下命令来复制数据库目录。用下面的命令将原目录的selinux权限赋给新的目录。检查对比一下原目录和新目录的selinux权限。

2023-09-01 15:54:23 1752

原创 centos 定时脚本检测tomcat是否启动,未启动情况下重新启动

【代码】centos 定时脚本检测tomcat是否启动,未启动情况下重新启动。

2023-08-10 21:09:59 1245

原创 guava报错 java.lang.NoSuchMethodError: com.google.common.collect.ImmutableSet.of

同时删除本地maven仓库 com\google\collections\google-collections,不然还会报错。解决方法:首先查找pom文件是否引用冲突,删除 google-collections 依赖。在使用guava时 报错。

2023-06-05 22:54:38 787

原创 系统架构师--数据库系统

软考系统架构师 数据库系统

2022-08-21 11:18:06 316

原创 itext7生成pdf页脚页码

itext7生成pdf页脚页码

2022-07-05 15:30:19 1518 3

原创 Prometheus使用

prometheus、alertmanager、node_exporter、grafana

2022-06-01 00:16:35 747

原创 antd Upload组件上传状态一直处于uploading

antd Upload组件上传状态一直处于uploading对于受控模式,需要在 onChange 中始终 setState fileList,保证所有状态同步到 Upload 内import { UploadFile, UploadProps } from 'antd/es/upload/interface';...const [fileList, setFileList] = useState<UploadFile[]>([]);const uploadProps: Uplo

2022-01-13 15:59:59 5663

原创 使用useRef解决useState异步更新数据导致更新不及时问题

由于react hooks中useState更新值是异步的,所以会出现值更新不及时,可以使用useRef来解决这个问题定义useCallbackState函数import { useState, useRef, useEffect } from 'react';export function useCallbackState(state: any) { const cbRef = useRef(); const [data, setData] = useState(state);

2021-12-28 17:25:34 4647

原创 react antd使用TinyMCE富文本编辑器

1、引入tinymcenpm install --save @tinymce/tinymce-react2、将tinymce的文件放在public目录下​ tinymce下载地址:https://www.tiny.cloud/get-tiny/self-hosted/​ 语言包下载地址:https://www.tiny.cloud/get-tiny/language-packages/​ 语言包下载后放在tinymce\js\tinymce\langs下3、自定义组件import { Edi

2021-12-28 13:17:01 1873

原创 windows下配置nginx开机自启

先从官网下载nginx,解压到E:\nginx下载 Windows Service Wrapper工具,该工具可设置nginx为Windows服务,下载链接选择相应版本,这里选择了2.9.0 net4版本将下载的WinSW.NET4.exe放在E:\nginx目录下,并改名成nginx-service.exe,然后分别创建nginx-service.exe.config,nginx-service.xml文件,把这两个文件放在Nginx安装目录下nginx-service.exe.c..

2021-09-15 16:12:48 320

原创 centos7安装harbor2.0

安装docker安装依赖包yum -y install yum-utils device-mapper-persistent- data lvm2添加yum源yum-config-manager \--add-repo \ https://download.docker.com/linux/centos/docker-ce.repo安装 Docker 服务# 查询docker版本yum list docker-ce --showduplicates|sort -r

2021-09-15 15:56:28 383

原创 vue中解决 Cannot read property ‘stylus‘ of undefined 报错问题

安装stylus和stylus-loader版本如下//版本如下"stylus": "^0.54.8","stylus-loader": "^3.0.1",项目启动报错TypeError: Cannot read property 'stylus' of undefined at Object.module.exports (F:\项目目录\node_modules\stylus-loader\index.js:29:37)查看stylus-loader\index.js:29:37

2021-06-15 22:48:09 5328 4

原创 vue v-for数据循环实现每n项一分组换行

v-for 循环 实现每n项一分组换行<table> <tr v-for="(row,index) in sliceList(list,4)" :key="index"> <td v-for="(item,i) in row" :key="i"> {{item.attrA}} </td> </tr></table

2021-05-11 10:22:21 5902 2

原创 mysql数据库定时备份

1.创建数据库备份脚本先创建备份文件目录mkdir /usr/local/mysqlbackup在/usr/local目录下创建mysql_dump_script.sh脚本vim mysql_dump_script.sh#!/bin/bash. /etc/profile. ~/.bash_profile#保存备份个数,备份31天数据number=31#备份保存路径backup_dir=/usr/local/mysqlbackup#日期dd=`date +%Y-%m-%d-%

2021-01-20 00:26:15 161 1

原创 解决MySQL ERROR 1045 (28000)

在使用navicat连接数据库时,报错信息:MySQL ERROR 1045 (28000): Access denied for user ‘root’@’localhost’ (using password: YES),解决方法:1、修改mysql的登录设置vim /etc/my.cnf并在[mysqld]下面添加一句:skip-grant-tables(跳过数据库权限验证)保存并退出重启mysql并修改密码/etc/init.d/mysqld restart进入mysql[root

2021-01-19 22:07:03 163

原创 布隆过滤器的实现应用

概念布隆过滤器主要用于缓存穿透,一般我们会把数据放在Redis里缓存,请求过来先读缓存,有缓存的话直接返回,如果缓存中没有,再去访问数据库查询,然后再把数据库读取的数据放入缓存。但是如果有大量请求过来,而且都在访问一个不在缓存里的数据,这时这些大量请求都会到数据库,对数据库造成很大压力。可以用很多办法来解决这个问题,如分布式锁、布隆过滤器。布隆过滤器可以缓解缓存穿透问题,问什么说是缓解,而不是解决呢?这是因为布隆过滤器会有一定的误判率。布隆过滤器(Bloom Filter)本质上是由长度为 m 的位向

2021-01-11 15:44:25 637

原创 Redis的数据类型 - set、sorted_set

set保存多个字符串元素,但不允许有重复的元素,并且集合set是无序的,不能通过索引下标获取元素set除了基本的增删改查,还支持多个集合的取交集、并集、差集等操作,下面来看一下命令help @setsaddSADD key member [member ...]summary: Add one or more members to a setsince: 1.0.0添加元素127.0.0.1:6379[1]> del k1 (integer) 1127.0.0.1:6379[1

2020-12-15 23:56:42 389

原创 Redis位图Bitmaps详解

概念Redis提供的Bitmaps这个“数据结构”可以实现对位的操作。Bitmaps本身不是一种数据结构,实际上就是字符串,但是它可以对字符串的位进行操作。可以把Bitmaps想象成一个以位为单位的数组,数组中的每个单元只能存0或者1,数组的下标在bitmaps中叫做偏移量。单个bitmaps的最大长度是512MB,即2^32个比特位。例如字符串A 一个字节,对应的ASCII码是65,对应的二进制就是01000001,Bitmaps就是对A的二进制位进行操作。命令SETBIT

2020-12-09 00:16:16 787 2

原创 Redis的数据类型 - string、hash、list

字符串类型可以是字符类型、数值类型、bitmaps可以通过help @string 查看string相关命令SETset key value [expiration EX seconds|PX milliseconds] [NX|XX]设置值命令EX seconds:为键设置秒级过期时间PX milliseconds:为键设置毫秒级过期时间NX:键必须不存在,才可以设置成功,用于添加、分布式锁XX:与NX相反,键必须存在,才可以设置成功,用于更新例:set name hello

2020-12-07 23:43:54 203

原创 linux安装redis

yum -y install wgetcd /home/softwarewget https://download.redis.io/releases/redis-6.0.9.tar.gztar -zxvf redis-6.0.9.tar.gzcd redis-6.0.9.tar.gzyum -y install gccmake && make install PREFIX=/usr/local/redis如果报以下错误 structredi..

2020-12-07 17:21:48 131

原创 常用Java虚拟机参数

打印GC日志-XX:+PrintGCjdk9之后建议使用 -Xlog:gc[GC (Allocation Failure) 4676K->2628K(9728K), 0.0004307 secs][GC (Allocation Failure) 4676K->2628K(9728K), 0.0004717 secs][GC (Allocation Failure) 4676K->2628K(9728K), 0.0006033 secs][GC (Allocation F

2020-11-28 22:50:28 393

原创 JVM 方法区详解

栈、堆、方法区的交互关系从线程共享与否的角度来看ThreadLocal:如何保证多个线程在并发环境下的安全性?典型应用就是数据库连接管理,以及会话管理下面就涉及了对象的访问定位Person:存放在元空间,也可以说方法区person:存放在Java栈的局部变量表中new Person():存放在Java堆中方法区的理解《Java虚拟机规范》中明确说明:“尽管所有的方法区在逻辑上是属于堆的一部分,但一些简单的实现可能不会选择去进行垃圾收集或者进行压缩。”但对于HotSpotJVM而言,方

2020-11-28 22:47:55 234

原创 JVM 堆(heap)详解

堆的核心概念堆针对一个JVM进程来说是唯一的,也就是一个进程只有一个JVM,但是进程包含多个线程,他们是共享同一堆空间的。一个JVM实例只存在一个堆内存,堆也是Java内存管理的核心区域。Java堆区在JVM启动的时候即被创建,其空间大小也就确定了。是JVM管理的最大一块内存空间。堆内存的大小是可以调节的。《Java虚拟机规范》规定,堆可以处于物理上不连续的内存空间中,但在逻辑上它应该被视为连续的。所有的线程共享Java堆,在这里还可以划分线程私有的缓冲区(Thread Local Allo

2020-11-28 22:10:23 1165

原创 java四种引用类型(强引用 软引用 弱引用 虚引用)

强引"/;.l,“?:> k”强引用就是程序中一般使用的引用类型,强引用的对象是可触及的,不会被回收。强引用可以直接访问目标对象强引用所指向的对象在任何时候都不会被系统回收,虚拟机宁愿抛出OOM异常,也不会回收强引用所指的对象强引用可能会导致内存泄漏软引用如果一个对象只持有软引用,那么当堆空间不足时,就会被回收。软引用使用java.lang.ref.SoftReference类实现。下面演示软引用在堆内存不足的情况下被回收public class SoftRef {

2020-11-28 21:01:52 107

原创 JVM 本地方法接口、本地方法栈

本地方法接口什么是本地方法本地方法是一个非Java的方法,它的具体实现是非Java代码的实现在定义一个native method时,并不提供实现体(有些像定义一个Java interface),因为其实现体是由非java语言在外面实现的。本地接口的作用是融合不同的编程语言为Java所用,它的初衷是融合C/C++程序。代码举例说明Native方法是如何编写的public class IhaveNatives { public native void Native1(int x);

2020-11-28 18:22:52 86

原创 JVM虚拟机栈

虚拟机栈概述由于跨平台性的设计,Java的指令都是根据栈来设计的。不同平台CPU架构不同,所以不能设计为基于寄存器的。 优点是跨平台,指令集小,编译器容易实现,缺点是性能下降,实现同样的功能需要更多的指令。首先栈是运行时的单位,堆是存储的单位栈解决程序如何执行,如何处理数据堆解决的是数据存储问题,即数据怎么放,放在哪里Java虚拟机栈,早期也叫Java栈,每个线程创建时都会创建一个虚拟机栈,内部保存一个个栈帧,对应着一次次方法调用,生命周期和线程的一致,主管Java程序的运行,它保存方法的局部

2020-11-28 18:19:09 121

原创 JVM垃圾回收相关算法

GC的垃圾特指存在内存中的、不会被使用的对象,对这些垃圾回收,这样内存就会有区域被腾出来,如果大量不会被使用的对象一直占用空间,就会导致内存溢出。java是虚拟机负责垃圾回收,开发效率高,执行效率低,C++手工处理垃圾,容易忘记回收,内存泄漏回收多次非法访问开发效率低、执行 效率高引用计数法(Reference Couting)引用计数法的实现比较简单,就是一个对象,有几个引用指向了它,它的引用计数器就是几,当变成0是,就是没有任何一个引用指向它,这个对象就不可能再被使用。但是引用计数

2020-11-28 18:14:17 93

原创 对象的创建过程、内存布局、定位、分配

对象的创建过程当Java虚拟机遇到一条字节码new指令时,首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否加载、解析和初始化过。如果没有,先将class loading到内存linking过程:verification校验,preparation把类的静态变量设默认值,resolution将符号引用解析成直接引用intializing初始化,把类的静态变量设为初始值并执行静态代码块分配内存指针碰撞(Serial、ParNew等

2020-11-23 01:05:41 189

原创 MESI缓存一致性协议 伪共享 合并写 有序性 内存屏障

CPU Cache与Memory关系图先看一张存储器的层次结构图现在的处理器都是多核处理器,并且每个核都带有多个缓存,为什么需要缓存,是因为cpu的速度特别快,比内存快100数量级,所以在cpu与内存之间加了个缓存用来提高访问速度。现在假如有一个数在内存里,这个数他会被load到 L3缓存上,L1和L2是在CPU的内部的,这时候会产生一个情况,L3或者主存里面这个数会被load不同的cpu的内部,这个时候如果把cpu1的x修改成1,cpu2的x修改成2,就会产生数据不一致问题,多核同时访问同一个变量时

2020-11-22 12:12:06 499

原创 单例模式下为什么一定要加volatile关键字

有一道面试题,单例模式已经双重检查锁定(Double-Check-Lock)了,要不要加volatile关键字。以下是双重检查锁定来实现单例模式代码public class DoubleCheckLock { private static DoubleCheckLock INSTANCE; private DoubleCheckLock() { } public static DoubleCheckLock getInstance() { if (I

2020-11-19 00:42:07 1332 2

原创 使用ASM框架实现统计函数执行时间

定义ASM 是一个 Java 字节码操控框架。它能被用来动态生成类或者增强既有类的功能。ASM 可以直接产生二进制 class 文件,也可以在类被加载入 Java 虚拟机之前动态改变类行为。Java class 被存储在严格格式定义的 .class 文件里,这些类文件拥有足够的元数据来解析类中的所有元素:类名称、方法、属性以及 Java 字节码(指令)。ASM 从类文件中读入信息后,能够改变类行为,分析类信息,甚至能够根据用户要求生成新类。实现现在使用ASM框架,在不修改源代码的情况下实现统计函数执行

2020-11-18 22:31:37 691

原创 深入理解Class文件结构

深入理解Class文件结构概述我们都知道编写的Java的源码会先编译成Class文件,java虚拟机再将Class文件解释编译成对应平台的机器指令,所以能够解析Class文件的数据结构是非常有必要的。先编写一段java源码,定义一个类并实现一个接口,类内部定义了一个成员变量、一个类变量和一个sum方法。package com.changyy.jvm;public class Class...

2020-11-03 20:21:13 39 1

原创 从一个class文件深入理解Class文件结构

深入理解Class文件结构概述我们都知道编写的Java的源码会先编译成Class文件,java虚拟机再将Class文件解释编译成对应平台的机器指令,所以能够解析Class文件的数据结构是非常有必要的。先编写一段java源码,定义一个类并实现一个接口,类内部定义了一个成员变量、一个类变量和一个sum方法。package com.changyy.jvm;public class ClassTest implements IClassTest { private int n = 10

2020-11-03 17:03:34 385

原创 JVM 程序计数器

程序计数器(PC寄存器)介绍JVM中的程序计数寄存器(Program Counter Register)中,Register的命名源于CPU的寄存器,寄存器存储指令相关的现场信息。CPU只有把数据装载到寄存器才能够运行。这里,并非是广义上所指的物理寄存器,或许将其翻译为PC计数器(或指令计数器)会更加贴切(也称为程序钩子),并且也不容易引起一些不必要的误会。JVM中的PC寄存器是对物理PC寄存器的一种抽象模拟。程序计数器是一块很小的内存空间,几乎可以忽略不记。也是运行速度最快的存储区域。它可以被

2020-10-26 16:56:57 145

原创 JVM运行时数据区概述及线程

运行时数据区概述及线程运行时数据区概述内存是非常重要的系统资源,是硬盘和cpu的中间仓库及桥梁,承载着操作系统和应用程序的实时运行。JVM内存布局规定了JAVA在运行过程中内存申请、分配、管理的策略,保证了JVM的高效稳定运行。不同的jvm对于内存的划分方式和管理机制存在着部分差异(对于Hotspot主要指方法区)Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域有各自的用途,以及创建和销毁时间,有的区域随着虚拟机进程的启动而一直存在,有些区域则是依赖用于线

2020-10-26 10:53:08 115

原创 JVM类加载子系统

类加载子系统1、JVM整体架构简图完整图2、类加载器与类的加载过程类加载器子系统作用类加载器子系统负责从文件系统或者网络中加载Class文件,class文件在文件开头有特定的文件标识。ClassLoader只负责class文件的加载,至于它是否可以运行,则由Execution Engine(执行引擎)决定。加载的类信息存放于一块称为方法区的内存空间。除了类的信息外,方法区中还会存放运行时常量池信息,可能还包含字符串字面量和数字常量(这部分常量信息是Class文件中常量池部分的内存

2020-10-26 00:12:46 478

北大青鸟Ado.net教程ppt教程(附加桌面操作系统)

北大青鸟Ado.net教程ppt教程(附加桌面操作系统)

2015-06-16

SQLServer详解23个ppt

包含实现视图、存储过程、触发器、多表查询、子查询等

2015-06-16

基于C#开发的学员管理系统

对学员进行添加,修改和删除,用户的登录和退出,对成绩的查看、排序等功能

2015-06-09

空空如也

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

TA关注的人

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