- 博客(58)
- 资源 (3)
- 问答 (1)
- 收藏
- 关注
原创 jvm学习
一,初识jvmjvm java virtual machine 顾名思义java虚拟机。用于执行jvm规范的代码的。也是java跨平台的实现支撑。二,jvm知识体系内存结构是jvm核心内容。其他,垃圾回收,性能调优,JVM自身优化技术,执行引擎,监控工具,类文件结构,类加载。都需要围绕内存结构。二.一内存模型。java运行时的数据区被java直接管理的区域叫运行时数据区,java将这个区域划分为了不同的区域。没被java管理的部分是操作系统的直接内存必须操作.
2022-04-15 19:10:18
809
原创 ASM
1,简介ASM 是一个 Java 字节码操控框架。它能被用来动态生成类或者增强既有类的功能。ASM 可以直接产生二进制 class 文件,也可以在类被加载入 Java 虚拟机之前动态改变类行为。Java class 被存储在严格格式定义的 .class 文件里,这些类文件拥有足够的元数据来解析类中的所有元素:类名称、方法、属性以及 Java 字节码(指令)。ASM 从类文件中读入信息后,能够改变类行为,分析类信息,甚至能够根据用户要求生成新类。与 BCEL 和 SERL不同(ASM 提供了与 BC.
2021-05-16 21:10:55
1937
4
原创 收藏mysql高性能
https://www.cnblogs.com/huchong/tag/MySQL%E9%AB%98%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%96%E7%B3%BB%E5%88%97/
2021-02-24 16:13:34
84
转载 SPRINGBOOT启动流程及其原理
SPRINGBOOT启动流程及其原理Spring Boot、Spring MVC 和 Spring 有什么区别? 一 springboot启动原理及相关流程概览 二 springboot的启动类入口 三 单单是SpringBootApplication接口用到了这些注解 1)@Configuration注解 2)@ComponentScan注解 3)@EnableAutoConfiguration AutoConfigurationPackage注解: Impo...
2021-02-23 10:06:26
3608
1
原创 互联网架构,如何进行容量设计?(转)
一、需求缘起互联网公司,这样的场景是否似曾相识:场景一:pm要做一个很大的运营活动,技术老大杀过来,问了两个问题:(1)机器能抗住么?(2)如果扛不住,需要加多少台机器?场景二:系统设计阶段,技术老大杀过来,又问了两个问题:(1)数据库需要分库么?(2)如果需要分库,需要分几个库?技术上来说,这些都是系统容量预估的问题,容量设计是架构师必备的技能之一。常见的容量评估包括数据量、并发量、带宽、CPU/MEM/DISK等,今天分享的内容,就以【并发量...
2021-02-08 14:35:46
162
1
原创 高并发高可用缓存架构解决方案
1.业务描述1)场景设计a)尝试模拟解决诸如淘宝、京东等早期架构形式b)考虑到大部分公司的TPQ高峰一般为促销或者秒杀场景2)场景问题a)如何进行容量设计架构设计三原则:合适原则、简单原则、演化原则,均在告诉我们架构的设计需要贴合场景,并需要保留一定的可成长性。容量设计的相关内容详见:待完成。b)初步了解各中间件的并发极限软件技术经过几十年的发展,新技术层出不穷,但是经过时间考验,已经被各种场景验证过的成熟技术其实更多。例如,高可用的主备方案、集群方案,高性能的负载均衡、
2021-02-08 14:31:52
281
1
原创 后端怎么防止重复提交?(常用的做法)
客户端的抖动,快速操作,网络通信或者服务器响应慢,造成服务器重复处理。防止重复提交,除了从前端控制,后台也需要控制。因为前端的限制不能解决彻底。接口实现,通常要求幂等性,保证多次重复提交只有一次有效。对于更新操作,达到幂等性很难。常用后端防止重复提交方案token访问请求到达服务器,服务器端生成token,分别保存在客户端和服务器。提交请求到达服务器,服务器端校验客户端带来的token与此时保存在服务器的token是否一致,如果一致,就继续操作,删除服务器的token。如果..
2021-02-08 09:17:38
2925
原创 通过自定义注解及拦截器实现重复提交拦截
(1)首先,需要自定义一个用于加在需要“防止重复提交”的请求方法上 的注解RepeatSubmit,该注解的定义代码很简单,就是一个常规的注解定义,如下代码所示:之后,是直接创建一个新的控制器SubmitController,并在其中创建一请求方法,用于处理前端用户提交的注册信息 请求,如下代码所示:其中,RegisterDto 为自定义的实体类,代码定义如下所示:(2)将注解加上去之后,接下来需要自定义一个拦截器RepeatSubmitInterceptor,用于拦截并获取 加了上述这个
2021-02-07 11:24:46
457
1
转载 分布式锁的三种实现方式
使用Redis作为分布式锁的一些注意点Redis实现分布式锁最近看分布式锁的过程中看到一篇不错的文章,特地的加工一番自己的理解:Redis分布式锁实现的三个核心要素:1.加锁最简单的方法是使用setnx命令。key是锁的唯一标识,按业务来决定命名,value为当前线程的线程ID。比如想要给一种商品的秒杀活动加锁,可以给key命名为 “lock_sale_ID” 。而value设置成什么呢?我们可以姑且设置成1。加锁的伪代码如下: setnx(key,1)当一个线程执行set...
2021-01-20 16:22:23
270
原创 Springboot 添加本地依赖并打包
在项目src同级建目录libs。将本地jar放入其中。pom里添加依赖。 <dependency> <groupId>com.xxxx</groupId> <artifactId>xxx</artifactId> <version>x.x.x</version> <scope>system<
2021-01-20 14:47:44
533
转载 RabbitMQ消费端限流
MQ三大主要功能:削峰、异步、解耦,这章主要是讲削峰,可以通过MQ消费端限流来实现。消费端限流主要是为了保证消费端的服务稳定性,防止超过消费端负载,将服务打挂,卡死。rabbitmq提供了一种qos(服务质量保证)功能,即在非自动确认消息的前提下,如果一定数目的消息(给channel或者consume设置Qos值)未被确认前,不进行消费新消息。使用:1.在消费端,通过channel.basicQos方法进行设置2.关闭自动ACK测试生产端:package com.vivo.demo
2021-01-19 14:57:37
465
原创 SpringBoot @Rabbitlistener重试机制 当retry 次数超过max-attempts 时的处理
原生rabbitMQ可以定义连接工厂。在redis或者数据库中记录重试次数,达到最大重试次数以后消息进入死信队列或者其他队列,再单独针对这些消息进行处理。不像rocketMq自带重试次数。springboot的里spring-rabbit中自带的retry功能。spring: rabbitmq: listener: simple: acknowledge-mode: auto # 自动ack retry: e..
2021-01-19 14:43:56
7350
4
原创 springboot 创建服务管理脚本
参考文章https://www.cnblogs.com/dzcici/p/13891840.html创建服务管理脚本。并添加keeper.sh 用于服务保活。
2021-01-16 12:33:38
99
原创 RabbitMq TTL 队列过期时间长的消息阻塞后面过期时间短的消息
利用RabbitMq的TTL time-to-live 来实现延时消费。延时时间设置到每条消息上的。而不是给队列的。实现方式为消息存活时间为动态用户页面可配置的。这就导致了一个问题:先用一条消息的存活时间是1天。后面又进了一条消息存活时间是1小时。结果一小时到了,发现这条消息并没有被转发到消费延时过期消息的队列。原因是尽管ttl是设给每条消息的。但是本质上,所有延时消息都还在一个队列里,对它过期时间的检测也是从头部开始的。它不会检测每一条消息是否过期。而是顺序检测。如果.
2020-12-07 10:01:57
1651
3
原创 利用jstat和jvisualVm远程查看jvm资源使用情况猜的各种坑
1,首先在服务器端的任意目录建立安全策略的文件jstatd.all.policy内容如下grant codebase "file:${java.home}/../lib/tools.jar" { permission java.security.AllPermission; };有文章写得是grant codebase "file:${JAVA_HOME}/lib/tools.jar" { permission java.security.AllPermission;
2020-12-02 11:24:53
361
原创 SpringBoot 使用 WebMvcConfigurer接口或者WebMvcConfigureSupport定义静态资源地址不生效
实现方法有继承 webmvcconfigureAdaptor 已过时。实现WebMvcConfigurer接口 和继承WebMvcConfigureSupport。@Configurationpublic class WebConfig implements WebMvcConfigurer { @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry..
2020-09-08 16:09:09
2125
原创 linux排查java进程占用CPU过高原因方法
一,top 命令查看cpu占用高的进程。进入top 按c可以看进程的启动命令。1.提取占用CPU过高的进程方法一:使用top查找到占用CPU高的进程的pidtop -d 1方法二:使用ps查找到tomcat运行的进程pidps -ef | grep tomcat二,查看该进程占用高的线程1. ps -mp 【替换为进程ID PID】 -o THREAD,tid,time如ps -mp 6304-o THREAD,tid,time找到c...
2020-08-21 10:11:00
1864
原创 LockFreeVector 基于AtomicReferenceArray 实现的无锁的集合
最近在学多线程,阻塞,非阻塞,其中无锁的概念引出了java.util.concurrent.atomic 包里的一些无锁对象,看到有人根据AtomicReferenceArray实现了无锁Vector代码如下:import java.util.AbstractList;import java.util.concurrent.atomic.AtomicReference;imp...
2020-04-30 17:19:39
348
1
原创 java使用Runtime.getRuntime设置系统时间
最近做项目需要实现时钟同步的功能, 服务器没有串口,用户准备使用USB转串口,但是设置系统时间JAVA本身并不支持。需自己去实现。实现方式1:利用Runtime.getRuntime.ext()System.getProperty("os.name") 获取当前操作系统。使用Runtime.getRuntime.ext()方法自己根据当前平台是windows还是linu...
2020-04-30 17:15:28
961
原创 springCloud 4 Eureka 高可用配置的坑
将之前已经搭好的注册中心server中添加两个配置文件application-peer1.yml和application-peer2.yml,各自设置自己的eureka.instance.hostname peer1 peer2.将defaultZone的url设置为对方。将项目打包为.jar文件,分别通过这两个配置文件为属性来分别启动项目以个用默认配置 (applicati...
2020-04-20 14:59:05
184
原创 java串口通讯
依赖 :rxtxcomm.jar需将 平台以来驱动提前放到javahome lib 下面相关的位置。下载地址放置位置包解压后内有 install.txt内有介绍。java实现代码package comm;import java.io.*;import java.util.*;import java.util.concurrent.BlockingQueue;impo...
2020-04-20 11:00:40
193
原创 java使用JNA设置系统时间
使用JNAwindows系统调用kernel32.dll库, inux系统调用libc.so库1. 环境 jdk1.7 windows7centos 72. 依赖的jar 本程序需要依赖JNA框架. jna.jar3. 接口import java.util.Date;public interface JNative ...
2020-04-20 10:39:05
2667
原创 为springboot创建守护线程,并开机启动
1,新建shell脚本为服务保活#!/bin/shwhile(true) do proc_num=$(ps -ef | grep XXXXXXXXX-0.0.1-SNAPSHOT.jar | grep -v "grep ") if [ $proc_num -eq 0 ] then echo "start third-party-video-server...." no...
2020-04-20 09:48:28
2067
原创 SpringCloud 3 Service Provider
上一章已经建好了Eureka Server这是还没有应用来注册这时我们新建一个服务提供者cloud-hello新建过程不再重复,和创建eureka server的过程一样。在启动类上加@EnableEurekaClient 注解。服务即会想注册中心注册。@EnableEurekaClient@SpringBootApplicationpublic c...
2020-04-19 23:50:56
268
原创 SpringCloud 2 Eureka Server
在父项目里新建module,同样为maven,也可以选择springInitializer。注意groupID和赋项目要相同。aircraftId 设置为 cloud-eureka然后修改pom 文件的parent为 上一章中的父项目。然后添加eureka server 依赖pom:<?xml version="1.0" encoding="UTF-8"?>...
2020-04-19 21:53:01
97
原创 springCloud 1 父项目创建
idea new project 选择 maven下一步设置groupid AircraftId 相关信息。直接一直下一步完成。删除掉src目录。隐藏 iml 文件 .idea文件夹 (看着乱,难受)修改pom文件。把一些通用的东西可以抽取到这个pom。这里定义springBoot版本 2.1.7对应的SpringCloud版本为Gree...
2020-04-19 21:29:45
238
原创 Docker 连不上镜像源
docker: Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: request canceled参考博文 :https://www.cnblogs.com/morgan363/p/12011404.html故障描述:[root@docker01 ~]# docker run cen...
2020-04-01 22:20:14
1662
转载 强大的java 工具包 Hutoool
原文:Hutool Doc简介Hutool是一个小而全的Java工具类库,通过静态方法封装,降低相关API的学习成本,提高工作效率,使Java拥有函数式语言般的优雅,让Java语言也可以“甜甜的”。Hutool中的工具方法来自于每个用户的精雕细琢,它涵盖了Java开发底层代码中的方方面面,它既是大型项目开发中解决小问题的利器,也是小型项目中的效率担当;Hutool是项目中“u...
2020-03-24 10:38:57
405
原创 SpringBoot集成ActiveMq
1. 创建一个springboot项目,添加依赖 <!--ActiveMq--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-st...
2020-03-15 10:03:56
169
原创 Java利用Socket实现modbus协议服务端。
整体思路:1,根据modbus报文结构抽象消息实体。2,利用SocketServer监听对外暴露的端口。3,收到新的socket链接丢给新线程去解析消息。4,实现相关的业务后利用socket输出流进行返回。...
2020-03-15 09:55:26
2558
转载 【转】java 中的while(true)和for(;;)的区别
今天研读Handler源码的时候发现在Looper死循环里面对消息循环的代码是这样子写的:public static void loop() { //获得一个 Looper 对象 final Looper me = myLooper(); // 拿到 looper 对应的 mQueue 对象 final MessageQueue queue = me.mQ...
2019-07-16 22:36:38
126
转载 多线程并发导致CPU100%的一种原因和解决办法
在用自定义线程池的时候,遇到cpu100%,经过验证后,发现问题来源于我定义的子线程。子线程的主要功能是从任务队列(LinkedBlockingQueue)里面持续拿出任务,并且执行。以下为令CPU100的代码。private class WorkThread extends Thread { @Override public void ru...
2019-05-31 14:47:58
10561
转载 解决虚拟机选择桥接模式连不上网
虚拟机装的 centos 7,使用桥接模式,且与主机在同一网段,主机与虚拟机可以互相ping通,且主机使用secureCRT可以连接虚拟机。主机可以上网,但是虚拟机里centos就是连不上网,以前都可以上网。再查了一堆资料都没解决后,总算找到一篇解决办法。原文:原文地址保证你Vmware里面的虚拟机是关机状态 右键点击电脑屏幕右下角小电脑图标,选择打开网络与共享中心,然后点...
2019-04-02 23:19:02
10003
原创 SimpleDateFormat 的线程安全问题
SimpleDateFormat 的作者在源码中就提到:* Date formats are not synchronized.* It is recommended to create separate format instances for each thread.* If multiple threads access a format concurrently, it must...
2019-03-29 20:16:04
171
原创 LockSupport
LockSupport 是提供比较底层的挂起阻塞线程的操作原语。有点类似于suspend()。主要的接口有LockSupport .park() 顾名思义park停车,就是把一个现场挂起。LockSupport .unpark(t1) 开车启动o.o与suspend的区别就是,suspend是不建议使用的有可能废除的。且如果一个线程没有被suspend,调用resume,则会...
2018-11-29 22:19:20
154
原创 CyclicBarrier 循环栅栏
CountDownLatch 倒计数只有一次,倒计数到0,则结束。有时候的需求是一批一批的倒计数比如主线程没十个子线程完成一次,则主线程继续执行一次,下次又来了十个线程完成,则主线程在执行一次。循环的倒计数,则需要用到循环栅栏CyclicBarrier 。构造方法为public CyclicBarrier(int parties, Runnable barrierAction)其中...
2018-11-29 21:46:17
184
原创 CountDownLatch 倒数计数器
即当前线程,等待CountDownLatch中的各子线程任务都完成后,在继续往下执行的任务下述demo新建一个倒数计数器10。每个线程计数器调用countDownLatch.countDown();倒计数一次。 主方法里,使用线程池分发了十个线程做子任务,并调用countDownLatch.await();方法等待倒计数完成。等十个子线程都完成后,倒计数为0,则主线程await...
2018-11-27 23:02:01
340
淘宝客微信小程序前台.zip
2020-03-29
TA创建的收藏夹 TA关注的收藏夹
TA关注的人