自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

idwarf.cn

欢迎可爱的你来访问我的个人网站idwarf.cn

  • 博客(62)
  • 收藏
  • 关注

原创 微信小程序调用微信支付接口

前言:应项目要求,需要使用微信小程序做支付,写完后告知手续费太高方案不予通过(宝宝心里苦,但宝宝不说)。此次开发在因站在巨人的肩膀上顺利完成。微信支付文档传送门:https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=7_31.开发工具:Eclipse+Tomcat+微信web开发工具2.开发环境:jav...

2018-07-06 15:13:42 75781 26

原创 【茫茫架构路】1. Class File字节码文件解析

字节码文件解析

2023-10-18 21:52:11 646

原创 图解系列 - Spring IOC

Spring IOC 流程

2023-05-15 16:38:47 93

原创 图解JVM Base JDK11(Draft)

2023-04-05 15:07:20 107

原创 一次线上MySQL vCPU飙升引发的思考

在一个漆黑的深夜,MySQL丛库的vCPU在做一个三点任务的时候突然飙升,从MySQL面板中可以查到是以下查询导致的。首先使用Explain查看一下执行计划以下是。从上图中可以看出使用了索引进行排序,而且使用的索引从变成了,且返回结果并未有任何变化。那么接下来看看查询时间的提升有多大呢。下面两张图告诉你:4.593s -> 0.01s。

2023-04-03 15:11:40 170

原创 Mac 编译并调试 OpenJDK11

鉴于目前Mac下编译openJDK的文章较为杂乱且步骤不够清晰明了,写下自己编译OpenJDK的过程,希望能帮助大家少走弯路。编译/调试 环境MacOS Big SurClion 2021.2IDEA 2021.2Terminal(Mac自带的终端)编译步骤下载源码进入https://hg.openjdk.java.net/jdk/选择你需要编译的版本。进入下载目录并解压选择你下载的压缩包对应的解压命令解压。打开终端并进入源码目录本次编译我的jdk源码目录为: /Users.

2021-08-21 19:26:40 710 1

原创 中间件-Kafka

Kafka是最初由Linkedin公司开发,是一个分布式、支持分区的(partition)、多副本的(replica)、多订阅者,基于zookeeper协调的分布式消息系统,可以实时的处理大量数据以满足各种需求场景。常见于web/nginx日志、访问日志,消息服务等等,Linkedin于2010年贡献给了Apache基金会并成为顶级开源项目。使用场景日志收集:一个公司可以用Kafka可以收集各种服务的log,通过kafka以统一接口服务的方式开放给各种 consumer,例如hadoop、Hbas.

2021-05-13 00:07:12 1062 5

原创 并发编程篇-java集合框架

HashMapJDK1.7 HashMapPUT方法详解: public V put(K key, V value) { //Entry<K,V>[] table,一个Entry数组 if (table == EMPTY_TABLE) { inflateTable(threshold); } if (key == null) return putForNullKey(value);

2021-05-09 18:56:14 195 4

原创 并发编程-Executors

线程池对线程进行统一分配、调优和监控。线程是稀缺资源,如果被无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性。线程从创建到执行,需要依赖操作系统完成用户空间到内核空间的切换,效率不高且占资源。如果并发的请求数量非常多,但每个线程执行的时间很短,这样就会频繁的创建和销毁线程,如此一来会大大降低系统的效率。可能出现服务器在为每个请求创建新线程和销毁线程上花费的时间和消耗的系统资源要比处理实际的用户请求的时间和资源更多。什么时候使用线程池?单个任务处理时间比较短。需要处理的任务数量很大

2021-05-06 13:55:54 108 1

原创 并发编程-Collections &&Queue

BlockingQueue队列:数据存储结构,由链表或数组实现,FIFO。ArrayBlockingQueue 由数组支持的有界队列LinkedBlockingQueue 由链接节点支持的可选有界队列PriorityBlockingQueue 由优先级堆支持的无界优先级队列DelayQueue 由优先级堆支持的、基于时间的调度队列BlockingQueue的核心是ReentrantLock 和 AQS中的Condition。ArrayBlockingQueue基于数组,不可扩容。

2021-05-05 18:43:05 90 2

原创 并发编程-AQS 共享锁实现原理

Semaphore控制访问特定资源的线程数目(permits)。可用场景:限流。//构造方法,默认fair为false,即非公平锁。Semaphore(int permits)Semaphore(int permits, boolean fair)获取资源Semaphore初始化的时候就将state的值设置为permits,默认为非公平锁。当有线程尝试获取锁时,会使用死循环(高并发下进行大量CAS会有失败的情况)将state-1表示可用数量,如果可用数量大于0,则进行CAS操作,将st

2021-05-04 18:05:32 301 2

原创 Redis篇-应用场景与优化

分布式锁在业务量不大的情况下,确保操作原子性可以使用synchronized,但是在集群模式下,synchronized并不能保证操作的原子性。分布式锁代码示例: //等价于jedis.setnx(),如果redis中存在key为"lock"时,会返回false,否则新增,并且返回true //加超时时间是为了防止程序宕机时,锁一直存在 String productLockKey = "lock_" + productId; String uuid

2021-05-02 14:56:13 220 1

原创 Redis篇-集群与核心原理

集群方案哨兵模式在redis3.0以前的版本要实现集群一般是借助哨兵sentinel工具来监控master节点的状态,如果master节点异常,则会做主从切换,将某一台slave作为master,哨兵的配置略微复杂,并且性能和高可用性等各方面表现一般,特别是在主从切换的瞬间存在访问瞬断的情况,而且哨兵模式只有一个主节点对外提供服务,没法支持很高的并发,且单个主节点内存也不宜设置得过大,否则会导致持久化文件过大,影响数据恢复或主从同步的效率。高可用集群模式由多个主从节点群组成的分布式服务器群,它具有复

2021-05-01 18:55:21 280 1

原创 Redis篇-持久化 主从与哨兵架构

持久化RDB在默认情况下, Redis 将内存数据库快照保存在名字为 dump.rdb 的二进制文件中。可通过修改redis.conf中的配置dbfilename dump.rdb去修改快照保存文件名。可以对 Redis 进行设置, 让它在“ N 秒内数据集至少有 M 个改动”这一条件被满足时, 自动保存一次数据集。save 60 1000还可以手动执行命令生成RDB快照,进入redis客户端执行命令save或bgsave可以生成dump.rdb文件,每次命令执行都会将所有redis内存快照到

2021-05-01 17:03:12 140 1

原创 Redis篇-数据结构及原理

String常用命令SET key value //存入字符串键值对MSET key value [key value ...] //批量存储字符串键值对SETNX key value //存入一个不存在的字符串键值对GET key //获取一个字符串键值MGET key [key ...] //批量获取字符串键值DEL key [key ...] //删除一个键EXPIRE key seconds //设置一个键的过期时间(秒)/

2021-05-01 10:08:00 125 1

原创 并发编程-Lock AQS

ReentrantLock实现JUC包下面的Lock,基于AQS实现,需手动加锁解锁。AbstractQueuedSynchronizer

2021-04-28 15:35:25 93

原创 并发编程-同步机制 synchronized

同步机制临界资源:多线程编程中,有可能会出现多个线程同时访问同一个共享(资源可以由多个线程同时访问)、可变(资源可以由多个线程同时访问)资源的情况,这个资源我们称之其为临界资源;这种资源可能是:对象、变量、文件等。由于线程执行的过程是不可控的,所以需要采用同步机制来协同对对象可变状态的访问。如何解决线程并发安全问题?序列化访问临界资源。即在同一时刻,只能有一个线程访问临界资源,也称作同步互斥访问。Java 中,提供了两种方式来实现同步互斥访问:synchronized 和 Lock。如何实现跨方

2021-04-27 18:24:52 175

原创 并发编程-volatile

volatile是Java虚拟机提供的轻量级的同步机制volatile的作用可见性:保证被volatile修饰的共享变量对所有线程总数可见的,也就是当一个线程修改了一个被volatile修饰共享变量的值,新值总是可以被其他线程立即得知。有序性:禁止指令重排序优化。volatile缓存可见性实现原理JMM内存交互层面:volatile修饰的变量的read、load、use操作和assign、store、write必须是连续的,即修改后必须立即同步会主内存,使用时必须从主内存刷新,由此保证v.

2021-04-27 00:42:40 101 1

原创 并发编程-缓存一致性协议和Java内存模型

并发编程为什么要使用并发编程?充分利用CPU的计算能力。方便进行业务拆分,提升应用性能。并发场景下存在哪些问题?上下文频繁切换。临界区线程安全问题,容易出现死锁,使用jstack可以排查死锁。/** * @author alex * @description : 并发死锁示例 * @date 2021年04月26日17:53 */public class DeadLockTest { public static final String A = "a"; pu

2021-04-26 18:25:25 174

原创 JVM篇-常量池

常量池字符串常量池String.hashCode字符串在JVM的存在形式字符串拼接底层原理intern底层

2021-04-22 18:31:01 146

原创 面试宝典

HahMapJDK8中的HashMap与JDK7的HashMap有什么不一样?JDK8中新增了红黑树,JDK8是通过数组+链表+红黑树来实现的JDK7中链表的插入是用的头插法,而JDK8中则改为了尾插法JDK8中的因为使用了红黑树保证了插入和查询了效率,所以实际上JDK8中的Hash算法实现的复杂度降低了JDK8中数组扩容的条件也发了变化,只会判断是否当前元素个数是否查过了阈值,而不再判断当前put进来的元素对应的数组下标位置是否有值。JDK7中是先扩容再添加新元素,JDK8中是先添加新元素然

2021-04-21 17:58:38 99

原创 分布式篇-zookeeper API与集群

客户端API的常规应用Zookeeper集群

2021-04-13 18:03:25 227

原创 分布式篇-zookeeper

什么是Zookeeper?ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务。它提供了分布式独享锁、选举、队列的接口。为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。其中分布锁和队列有Java和C两个版本,选举只有Java版本。znode节点zookeeper的数据基本单元,以树的方式呈现,每个节点都有唯一的路径,客户端基于路径上传节点数据,zookeeper收到后会实时通知监听此路径的客户端。...

2021-03-28 22:13:56 86

原创 JVM篇-字节码文件解析

知识点:魔数CAFEBABE:每一个Java Class文件都是以0x CAFEBABE开头的。Java这么做的原因就是为了快速判断一个文件是不是有可能为class文件,以及这个class文件有没有受损(文件受损,文件开头受损的可能性最大)。大端模式(高尾端):数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中。小端模式(低尾端):数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中。常量池:class文件中的常量池:静态的运行时常量池:动态的,可用HSDB

2021-01-21 09:26:38 212 1

原创 JVM篇-类加载机制

概念:虚拟机把描述类的数据从class文件加载到内存中,并对数据进行校验、解析转换和初始化,最终形成可被虚拟机直接使用的Java类型。–《深入理解Java虚拟机》名词解释符号引用(Sysmbolic Reference)以一组符号来描述所引用的目标,符号可以是任何形式的字面量,只要使用时能无歧义的定位到目标即可。符号引用与虚拟机实现的内存无关,引用的目标并不一定加载到内存中。各种虚拟机实现的内存布局可以各不相同,但是它们能接受的符号引用必须是一致的,因为符号引用的字面量形式明确定义在Java虚拟

2021-01-17 14:58:29 114

原创 JVM篇-类加载器

上文提到类加载过程阶段中的“通过一个类的全限定名来获取描述此类的二进制字节流”这个动作放到虚拟机外部去实现,以便让应用程序自己决定如何去获取所需要的类,实现这个动作的代码模块就是类加载器。类与类加载器任意一个类。都需要由加载它的类加载器和这个类本身一同确立其在java虚拟机的唯一性,每一个类加载器都拥有一个独立的类名称空间。即使两个类来源于同一个class文件,被同一个虚拟机加载,只要加载他们的类加载器不同,那这两个类就必定不相等。类加载器启动类加载器(Bootstrap ClassLoad.

2021-01-17 14:57:19 94 1

原创 springboot项目脚手架

如果本文对您有所帮助,动动小手,点赞不迷路~每次新建一个项目时,大量工作需要重复,所以做了一个基于springboot的脚手架项目。一个成熟的springboot项目应该包含哪些基本内容?token校验:对接口的安全性进行一定的保障;swagger文档:方便前后端联调;代码生成器:减轻开发中POJO类、CRUD工作量,加快开发速度;统一返回格式封装:包含基础返回数据格式和分页返回数据格式;常用工具类:看业务需求和工作中遇见比较好的工具类;全局异常配置:将错误信息返回给用户时便于理解。具

2020-12-07 11:50:03 4429 2

原创 并发编程之线程池

访问 https://www.idwarf.cn 获取更多java内容目的:减少系统维护的开销。解耦,运行和创建分开。线程可复用。使用:java.util.concurrent.Executors.此包中所定义的 Executor、ExecutorService、ScheduledExecutorService、ThreadFactory 和 Callable 类的工厂和实用方法。此类支持以下各种方法:创建并返回设置有常用配置字符串的 ExecutorService 的方法。创建.

2020-07-07 11:03:52 115

原创 并发编程之volatile

访问 https://www.idwarf.cn 获取更多java内容作用:让其他线程能够马上感知到某一线程多某个变量的修改。特性:同步线程工作内存、主内存的共享变量,保证了并发编程的可见性。禁止(多线程下)指令重排序(volatile之前的代码不能调整到他的后面,volatile之后的代码不能调整到他的前面),保证了并发编程的有序性。无法保证并发编程的原子性,基础数据类型可以保证原子性。本质是因为汇编指令lock。可见性先来看看下面这段代码 public static b.

2020-07-07 11:02:57 112

原创 并发编程之Synchronized

访问 https://www.idwarf.cn 获取更多java内容概念synchronized 是 Java 中的关键字,是利用锁的机制来实现同步的。锁机制有如下两种特性:互斥性:即在同一时间只允许一个线程持有某个对象锁,通过这种特性来实现多线程中的协调机制,这样在同一时间只有一个线程对需同步的代码块(复合操作)进行访问。互斥性我们也往往称为操作的原子性。可见性:必须确保在锁被释放之前,对共享变量所做的修改,对于随后获得该锁的另一个线程是可见的(即在获得锁时应获得最新共享变量的.

2020-07-07 11:01:44 126

原创 并发编程之Java内存模型

访问 https://www.idwarf.cn 获取更多java内容基本概念程序:指令和数据的有序集合,其本身没有任何运行的含义,是一个静态的概念。进程:程序在处理机上的一次执行过程,它是一个动态的概念(分配资源的基本单位)。线程:一个进程中可以包含若干个线程(独立运行和独立调度的基本单位)。JVM与线程JVM在java类被调用时启动,JVM是一个线程,在jvm线程被启动后会去启动其它线程(如main线程)。JVM内存区域方法区:各个线程共享的内存区域,它用于存储已被虚拟机加.

2020-07-07 11:00:15 110

原创 Java架构师之路

并发JMMsynchronizedvolatileDCL单例模式并发线程池框架SpringSpring IOCSpring AOPMyBatisTomcatSpringBoot分布式zookeeperDubboRabbitMqKafkaRedis性能调优ExplainMySQL事务和锁Java8JVMGC

2020-07-01 10:34:56 79

原创 Centos安装配置LDAP

# Centos安装配置LDAP图形界面LDAPAdmin安装地址:https://nchc.dl.sourceforge.net/project/ldapadmin/ldapadmin/1.8.3/LdapAdminExe-w64-1.8.3.zip## 环境搭建本次安装环境:centos6.5配置本地域名解析:```bash# echo "192.168.8.43 techsure.cn" >> /etc/hosts```解决依赖关系:```bash# yum gro

2020-06-18 18:18:50 550

原创 小程序开放能力之获取用户手机号

//TODO:

2020-05-19 22:18:51 190

原创 小程序开放能力之用户登录(Java)

微信小程序获取用户openid登录

2020-05-18 10:19:54 344 2

转载 MySQL储存树状结构

原文地址:http://mikehillyer.com/articles/managing-hierarchical-data-in-mysql介绍许多人都遇到过需要在MySQL中处理树状结构数据的情况,毫无疑问管理树状结构并不是关系型数据库的强项。关系型数据库的表并不是树状结构(比如XML)而是一种扁平结构。树状结构中的”父–子”关系并不被MySQL天生支持。在我们看来,树状结构是一类数据的集合,集合中每一个元素都有一个父节点和零或多个子节点(除了根节点,根节点没有父节点)。树状结构在很多程序中.

2020-05-13 13:05:42 993

原创 JDK14新特性(What's New In JDK 14)

JDK14新特性

2020-05-11 11:35:58 495

原创 JDK8-Lambda

JDK8新特性之Lambda表达式

2020-05-11 11:35:01 103

原创 JDK8-Stream

JDK8新特性之Stream

2020-05-11 11:34:00 98

原创 MySQL采坑记录

1.子查询使用order by再使用group by获取最新记录在MySQL5.7之后的版本,对子查询做了一定的优化,优化内容详情:https://yq.aliyun.com/articles/725035.7之前SELECT * FROM (SELECT * FROM T1 ORDER BY id DESC) GROUP `name`5.7之后可以通过limit来实现,但...

2019-07-30 11:34:06 192 1

空空如也

空空如也

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

TA关注的人

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