自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(101)
  • 资源 (1)
  • 收藏
  • 关注

原创 三万字讲透Redis

Redis应用场景缓存使用,减轻DB压力 DB使用,用于临时存储数据(字典表,购买记录) 解决分布式场景下Session分离问题(登录信息) 任务队列(秒杀、抢红包等等) 乐观锁 应用排行榜 zset 签到 bitmap 分布式锁 冷热数据交换

2022-10-05 23:22:30 1053 1

原创 一篇文章彻底搞懂java AOP、@Before、@After、@AfterReturning、@AfterThrowing、@Around的使用、Spring AOP详解

Advice,确切地说它应该被理解为增强,前面也一直在强调方法的增强,那么接下来我们来看看在Spring AOP中是如何去实现方法的增强的。

2022-08-27 01:23:50 12941 2

原创 Dubbo实战运用Demo、SpringBoot整合Dubbo、Dubbo中超时重试和负载均衡策略

Dubbo默认采用的是随机负载策略。

2022-08-25 08:00:00 9003

原创 一文搞懂shell脚本

一系列的shell命令的集合, 还可以加入一些逻辑操作(if else for) 将这些命令放入一个文件中.

2022-06-28 21:20:25 1468 1

原创 【docker】一篇文章搞懂docker容器管理——docker容器管理命令大全

docker容器技术指Docker是一个由GO语言写的程序运行的“容器”(Linux containers, LXCs) containers的中文解释是集装箱。 Docker则实现了一种应用程序级别的隔离,它改变我们基本的开发、操作单元,由直接操作虚拟主机(VM),转换 到操作程序运行的“容器”上来。

2022-06-01 07:30:00 8929

原创 【docker一】docker是什么、为什么使用Docker、docker镜像搜索、获取、删除、查看、导出导入、查看历史详细信息

Docker是一个开源的容器引擎,它基于LCX容器技术,使用Go语言开发。 源代码托管在Github上,并遵从Apache2.0协议。Docker采用C/S架构,其可以轻松的为任何应用创建一个轻量级的、可移植的、自给自足的容器。Docker就是一种快速解决生产问题的一种技术手段,开发,运行和部署应用程序的开放管理平台。 **开发人员**能利用docker 开发和运行应用程序 **运维人员**能利用docker 部署和管理应用程序

2022-05-30 23:15:12 8603

原创 【solidity三】Solidity中继承、创建合约和外部调用、合约事件event、solidity中元祖的使用、new、delete关键字的使用、solisity创建合约和外部调用

编译器为自动为所有的`public的状态变量`创建访问函数。下面的合约例子中,编译器会生成一个名叫data的无参,返回值是uint的类型的值data。状态变量的初始化可以在定义时完成。

2022-05-19 07:45:00 2011

原创 【solidity二】固定长度数组、动态长度数组、字符串之间的转换、solidity字典hash表的使用、solidity——memory、storage使用注意项、solidity状态变量、局部变量

复杂类型,不同于之前`值类型`,占的空间更大,超过256字节,因为拷贝它们占用更多的空间,如`数组(arrays)`和`数据结构(struct)`,他们在Solidity中有一个额外的属性,即数据的存储位置:`memory`和`storage`。

2022-05-17 20:44:36 12087

原创 [DEPRECATION WARNING] github.com/qiniu/api.v7 is deprecated. And the repository is moved to github.c

[DEPRECATION WARNING] github.com/qiniu/api.v7 is deprecated. And the repository is moved to github.com/qiniu/api.v7 now

2022-05-17 09:56:49 771

原创 【一】solidity基本数据类型使用、主要关键字学习、address使用、 view,constant,pure讲解、public、private

定义在合约之内,但是在函数之外的变量,我们叫做`状态变量`,这些变量是会上传到区块链上保存的。下面这个合约中的message就是状态变量。

2022-05-17 07:30:00 1435

原创 golang后端动态生成图片、一文搞懂image/draw使用、一张图片粘贴到另一张图片上、根据url获取图片内容、在图片周围画线、invalidJPEGformat: missingSOImarke

golang image/draw 的使用

2022-05-14 08:15:00 6632 3

原创 区块链必知基础知识、POS、POW、DPOS、公有链、私有链、联盟链

**去中⼼化** 所有参与其中的⽹络节点共同维护,⽆需中⼼节点调控。 **不可篡改** 整个链条按照时间顺序和哈希指针链接起来,环环相扣。 **匿名性** 私钥和地址是使⽤⽹络的所有条件,⽆需身份验证。**可溯源** 所有写⼊区块的数据需多⽅验证,公开透明。

2022-05-10 07:15:00 5131 2

原创 【密码学五】数字签名、RSA实现数字签名和验证

**验证数字签名**这一行为一般是由消息的接收者Bob来完成的,但也可以由需要验证消息的第三方来完成,这里的第三方我们暂且将其命名为验证者Victor。验证签名就是检查该消息的签名是否真的属于Alice,验证的结果可以是成功或者失败,成功就意味着这个签名是属于Alice的,失败则意味着这个签名不是属于Alice的。

2022-05-08 17:04:00 2762

原创 【密码学四】非对称加密----RSA的使用、golang中使用rsa加解密

在对称密码中,由于加密和解密的密钥是相同的,因此必须向接收者配送密钥。用于解密的密钥必须被配送给接收者,这一问题称为密钥配送问题。如果使用非对称加密也可以称为公钥密码,则无需向接收者配送用于解密的密钥,这样就解决了密钥配送问题。可以说非对称加密是密码学历史上最伟大的发明。非对称加密中,密钥分为加密密钥和解密密钥两种。发送者用加密密钥对消息进行加密,接收者用解密密钥对密文进行解密。要理解公钥密码,清楚地区分加密密钥和解密密钥是非常重要的。加密密钥是发送者加密时使用的,而解密密钥则是接收者解密时使用的。

2022-05-08 08:30:00 2914

原创 【密码学三】分组密码是如何迭代的、ECB、CBC、CFB、OFB、CTR的异同以及应如何选择

DES和AES都属于分组密码,它们只能加密固定长度的明文。如果需要加密任意长度的明文,就需要对分组密码进行迭代,而分组密码的迭代方法就称为分组密码的“模式”。分组密码有很多种模式,如果模式的选择不恰当,就无法保证机密性。例如,如果使用ECB模式,明文中的一些规律就可以通过密文被识别出来。

2022-05-06 22:03:42 11051

原创 【密码学二】一文读懂对称加密-----DES、3DES、AES、golang实现对称加密

现代的密码都是建立在计算机的基础之上的,这是因为现代的密码所处理的数据量非常大,而且密码算法也非常复杂,不借助计算机的力量就无法完成加密和解密的操作。计算机的操作对象并不是文字,而是由0和1排列而成的**比特序列**。无论是文字、图像、声音、视频还是程序,在计算机中都是用比特序列来表示的。执行加密操作的程序,就是将表示明文的比特序列转换为表示密文的比特序列。将现实世界中的东西映射为比特序列的操作称为编码(encoding)

2022-05-05 23:26:31 1304

原创 【密码学一】密码学概念、密码学初体验

一、密码学1、密码信息安全常识与威胁不要使用保密的密码算法使用低强度的密码比不进行任何加密更危险任何密码总有一天都会被破解密码只是信息安全的一部分不要使用保密的密码算法很多企业都有下面这样的想法:“由公司自己开发一种密码算法,并将这种算法保密,这样就能保证安全。然而,这样的想法却是大错特错,使用保密的密码算法是无法获得高安全性的。我们不应该制作或使用任何保密的密码算法,而是应该使用那些已经公开的、被公认为强度较高的密码算法。这样做的原因主要有以下两点:密码算法的秘密早晚会公诸

2022-05-04 21:04:28 8060 1

原创 golang依赖注入wire使用 执行wire命令时报错:bash: wire: command not found

bash: wire: command not found

2022-04-18 21:20:59 6986

原创 “github.com/go-pg/pg/v10“查询时自动给表名称加s、es或者ies

"github.com/go-pg/pg/v10"查询时自动给表名称加s、es或者ies

2022-02-23 16:00:20 1656

原创 golang将数组切分成n个子数组、每个子数组的size固定

将数组切分成n个子数组

2022-02-18 10:41:04 2787

原创 Redis常见面试题、Redis命名规范、Redis支持事务么、缓存穿透、缓存击穿、缓存雪崩

缓存穿透:key对应的数据在数据源并不存在,每次针对此key的请求从缓存获取不到,请求都会到数据源,从而可能压垮数据源。

2022-01-25 23:58:22 680

原创 Redis主从复制架构简介、主从复制的应用场景

默认情况下,每台Redis服务器都是主节点;且一个主节点可以有多个从节点(或没有从节点),但一个从节点只能有一个主节点。

2022-01-17 18:00:00 902

原创 Redis持久化策略有哪些——AOF和RDB分别的优缺点

由于redis是一个内存数据库,所有的数据都是保存在内存当中的,内存当中的数据极易丢失,所以redis的数据持久化就显得尤为重要,在redis当中,提供了两种数据持久化的方式,分别为RDB以及AOF,且Redis默认开启的数据持久化方式为RDB方式。

2022-01-17 08:45:00 655

原创 Redis的数据类型、以及常用操作命令

redis当中一共支持五种数据类型,分别是:- string字符串- list列表- set集合- hash表- zset有序集合

2022-01-16 15:38:47 672

原创 TiDB整体架构详解、TiDB核心特性——水平扩展、高可用

TiDB 集群主要包括三个核心组件:TiDB Server,PD Server 和 TiKV Server。此外,还有用于解决用户复杂 OLAP 需求的 TiSpark 组件和简化云上部署管理的 TiDB Operator 组件。

2022-01-14 22:55:46 4970

原创 MySQL升级版、分布式MySQL、MySQLPlus——TiDB、SQL,NoSQL,NewSQL比较、为什么需要NewSQL?

传统关系型数据库历史比较久,目前RDBMS的代表为Oracle、MySQL、PostgreSQL,在数据库领域也是“辈份”比较高的,其广泛应用在各行各业,RDBMS大多为本地存储或共享存储。但是此类数据库存在着一些问题,如自身容量的限制。随着业务量不断增加,容量渐渐成为瓶颈,此时DBA会通过多次的库表sharding,以此来缓解容量问题。大量的分库分表,不仅耗费了大量人力,还使得业务访问数据库的路由逻辑变得复杂。除此之外,RDBMS伸缩性比较差,通常集群扩容缩容成本较高,且不满足分布式的事务。

2022-01-14 08:30:00 856

原创 从MySQL到NewSQL、传统关系型数据库的缺点、传统关系型数据库如何应对业务爆发式的数据增长

如今的数据库种类繁多,RDBMS(关系型数据库)、NoSQL(Not Only SQL)、NewSQL,在数据库领域均有一席之地,可谓百家争鸣之势。那么我们为什么要学习使用TiDB呢?接下来就从我们最熟悉的MySQL的使用说起!

2022-01-13 22:18:25 4561

原创 Spark框架概述、 Spark 框架模块详解、Spark 是什么、Spark 四大特点——速度快、易于使用、通用性强、运行方式多样

Spark 是加州大学伯克利分校AMP实验室(Algorithms Machines and People Lab)开发的通用大数据出来框架。Spark生态童也称为BDAS,是伯克利AMP实验室所开发的,力图在算法(Algorithms)、机器(Machines)和人(Person)三种之间通过大规模集成来展现大数据应用的一个开源平台。AMP实验室运用大数据、云计算等各种资源以及各种灵活的技术方案,对海量数据进行分析并转化为有用的信息,让人们更好地了解世界。

2022-01-11 22:03:52 10121

原创 HBase底层存储数据的文件格式是什么?StoreFiles(HFile)详解

StoreFile是HBase存储数据的文件格式。

2022-01-11 08:00:00 2758

原创 理解布隆过滤器

布隆过滤器是一种数据结构,是一种比较巧妙的概率型数据结构。它的特点是高效地插入和查询。但我们要检查一个key是否在某个结构中存在时,通过使用布隆过滤器,我们可以快速了解到「这个key一定不存在或者可能存在」。

2022-01-10 14:15:00 869

原创 LSM树——Log-Structured Merge-Tree数据结构、LSM树设计思想、LSM的数据写入操作、LSM的数据查询操作

传统关系型数据库,一般都选择使用B+树作为索引结构,而在大数据场景下,HBase、Kudu这些存储引擎选择的是LSM树。LSM树,即日志结构合并树(Log-Structured Merge-Tree)。

2022-01-10 07:00:00 4682

原创 常见数据结构详细图解、树的高度、深度、层数、跳表、二叉搜索树、平衡二叉树、红黑树、B树、B+树

树中的每个节点,它的左子树中所有关键字值小于该节点关键字值,右子树中所有关键字值大于该节点关键字值

2022-01-08 10:00:00 4057

原创 HBase的协处理器(Coprocessor)、HBase如何使用二级索引、observer协处理器、 endpoint协处理器、Hbase 协处理器加载方式

HBase 在 0.92 之后引入了协处理器(coprocessors),实现一些激动人心的新特性:能够轻易建立二次索引、复杂过滤器(谓词下推)以及访问控制等

2022-01-08 08:00:00 4356

原创 HBase Master工作机制、Master上线、Master下线

master只维护表和region的元数据,而不参与表数据IO的过程

2022-01-07 18:15:00 1023

原创 HBase 读数据流程和存储数据流程、MemStore溢写合并、In-memory compaction介绍、compaction策略详解

为了提高HBase的写入速度,数据都是先写入到MemStore(内存)结构中,V2.0 MemStore也会进行Compaction

2022-01-07 18:00:00 1400

原创 Hbase Region管理、region分配、region server上线、region server下线、Region分裂、自动分区和手动分区

Master记录了当前有哪些可用的region server,以及当前哪些region分配给了哪些region server,哪些region还没有分配。当需要分配的新的region,并且有一个region server上有可用空间时,master就给这个region server发送一个装载请求,把region分配给这个region server。region server得到请求后,就开始对此region提供服务。

2022-01-07 18:00:00 2115

原创 Apache Phoenix简介

Apache Phoenix让Hadoop中支持低延迟OLTP和业务操作分析

2022-01-05 17:45:00 3251

原创 HBase ROWKEY设计原则、如何优化?Rowkey如何设计?

如果ROWKEY设计的都是按照顺序递增(例如:时间戳),这样会有很多的数据写入时,负载都在一台机器上。我们尽量应当将写入大压力均衡到各RegionServerr

2022-01-04 21:13:50 772

原创 HBase架构、大数据之HBase架构与逻辑、从零开始学HBase

Client、Master Server、Region Server

2022-01-03 17:47:50 563

原创 HDFS对比HBase、Hive对比Hbase

Hive和Hbase是两种基于Hadoop的不同技术 Hive是一种类SQL的引擎,并且运行MapReduce任务 Hbase是一种在Hadoop之上的NoSQL的Key/value数据库 这两种工具是可以同时使用的。就像用Google来搜索,用FaceBook进行社交一样,Hive可以用来进行统计查询,HBase可以用来进行实时查询,数据也 可以从Hive写到HBase,或者从HBase写回Hive

2022-01-02 22:07:37 1640

locks框架:接口.pdf

这份资源旨在介绍 Java Locks 框架中的 Lock 接口及其相关内容。Lock 接口是 Locks 框架的核心,提供了更加灵活和可控的线程同步机制,用于替代传统的 synchronized 关键字。 Lock 接口概述: 简要介绍 Lock 接口,解释其在多线程编程中的作用和优势。比较 Lock 接口与传统 synchronized 关键字的不同之处。 常用 Lock 接口实现类: 详细讲解 Lock 接口的一些常用实现类,如 ReentrantLock、ReadWriteLock、StampedLock 等。解释它们的特点和适用场景。 Lock 接口的基本用法: 深入探讨如何使用 Lock 接口来保护共享资源。演示如何通过 lock 和 unlock 方法来实现线程的同步和互斥。 可重入性和重入锁: 解释 Lock 接口的可重入性,讲解同一个线程多次获取锁的机制,避免死锁。介绍 ReentrantLock 的实现原理。 Condition 条件变量: 介绍 Lock 接口中的 Condition,它可以实现更复杂的线程等待和通知机制。解释如何使用 await、signal 和 signalAll 方法。 通过这份资源,您将获得关于 Locks 框架中 Lock 接口的深入理解,从基本用法到高级功能,从可重入性到条件变量。

2023-08-09

locks框架_ReentrantLock.pdf

这份资源旨在详细讲解 Java 中的 Locks 框架,特别关注 ReentrantLock 的使用和原理。Locks 框架提供了比传统的 synchronized 关键字更强大、更灵活的线程同步机制,而 ReentrantLock 是其中的一种重要实现。 Locks 框架概述: 简要介绍 Locks 框架,解释其在多线程编程中的作用和优势。比较 Locks 框架与传统 synchronized 关键字的不同之处。 ReentrantLock 简介: 详细讲解 ReentrantLock 的概念和特点。解释为什么它被称为“可重入锁”,以及如何解决传统锁可能的问题。 ReentrantLock 的基本用法: 深入探讨如何使用 ReentrantLock 来保护共享资源。演示如何通过 lock 和 unlock 方法来实现线程的同步和互斥。 ReentrantLock 的高级功能: 介绍 ReentrantLock 的高级特性,如条件变量、公平性等。讲解如何使用 ReentrantLock 实现更复杂的线程同步逻辑。 通过这份资源,您将获得关于 Locks 框架和 ReentrantLock 的深入理解,从基本用法到高级功能,从对比分析到最佳实践。

2023-08-09

java基础编程必须知道的:SPI、反射、位运算

SPI(Service Provider Interface)是 Java 中一种基于接口的服务发现机制,旨在实现代码解耦和可扩展性。通过 SPI,开发者可以定义一组接口,而具体的实现则由不同的提供者来提供,实现了解耦的目的。 SPI 机制使得程序在不修改源代码的情况下,可以动态地加载不同的服务提供者。这样可以让应用程序在运行时选择不同的实现,从而实现了动态的可扩展性。 典型的用例包括数据库驱动程序的加载、日志框架的实现选择等。例如,在 JDBC 中,不同数据库厂商提供了不同的 JDBC 驱动程序,通过 SPI 机制可以根据需要选择合适的驱动程序。 SPI(Service Provider Interface)是 Java 中一种实现代码解耦和可扩展性的机制。通过定义接口和提供者,在运行时动态加载不同的实现,可以实现灵活的应用扩展。对于 Java 基础编程,了解 SPI 机制能够帮助您更好地理解和使用不同的服务提供者,以及实现动态扩展功能。

2023-08-09

java高级编程必须知道的集合详细讲解

这份资源旨在为您提供关于 Java 集合框架的详细讲解,涵盖了集合的类型、特性、应用场景以及使用方法。通过深入学习,您将建立坚实的集合框架知识,能够更好地选择和应用适合的集合来满足不同的编程需求。 集合框架的迭代和遍历: 解释如何使用迭代器和增强 for 循环来遍历集合中的元素。讲解如何避免在遍历过程中发生并发修改异常。 集合框架的性能和选择: 探讨集合框架中各种实现类的性能比较,讲解如何根据需求选择合适的集合类型。介绍优化集合性能的方法。 集合类型: 详细介绍集合框架中的各种集合类型,包括 List、Set、Map 以及 Queue 等。解释它们的特点、用途以及适用场景。 通过这份资源,您将获得全面的 Java 集合框架知识,从不同类型的集合到它们的实现类,从基本操作到性能优化。无论您是初学者还是有经验的开发者,这些内容都将为您提供实用的指导,帮助您更好地应用集合框架来解决编程问题。

2023-08-09

java并发编程:线程基础

本资源致力于向您介绍 Java 并发编程中的线程基础,涵盖了多线程编程的核心概念、线程的创建和管理,以及线程间通信的基本方法。通过深入学习,您将建立扎实的多线程编程基础,能够更好地理解和应用多线程编程。 多线程概述: 简要介绍多线程编程的重要性和应用场景。解释为什么多线程可以提高程序性能和资源利用率。 线程的创建: 详细讲解线程的创建方式,包括继承 Thread 类和实现 Runnable 接口。演示如何通过这些方式来创建和启动线程。 线程的生命周期: 解释线程的生命周期,包括新建、就绪、运行、阻塞和终止等状态。探讨线程在不同状态间的转换和原因。 线程的优先级和命名: 介绍线程的优先级概念,解释如何设置线程的优先级。讲解线程命名的重要性以及如何为线程设置有意义的名称。 线程的同步与阻塞: 引入多线程访问共享资源可能导致的问题,如竞态条件和数据不一致。介绍如何使用 synchronized 关键字来实现线程的同步和阻塞。 线程间通信: 详解线程间通信的方法,包括 wait、notify 和 notifyAll 方法的使用。讲解如何通过这些方法实现线程的协作和同步。

2023-08-09

java并发编程理论基础精讲

本资源为您提供了关于 Java 并发编程理论基础的精讲,涵盖了多线程编程的核心概念、基本原理以及在 Java 中的应用。通过深入学习,您将建立坚实的并发编程基础,能够更好地理解和应对多线程编程中的挑战。 并发编程概述: 引入并发编程的基本概念,解释为什么多线程编程在现代应用中至关重要。 线程和进程: 解释线程和进程的区别,介绍线程的概念、特点和创建方式。 共享资源与竞态条件: 详解共享资源在多线程环境中的问题,引出竞态条件的概念。 对象锁和监视器: 介绍对象锁的概念,解释如何使用 synchronized 关键字来实现对象级别的同步。 线程间通信: 详细讲解多线程之间如何进行通信,包括等待和通知机制、线程间的数据传递等。 死锁和解决: 介绍死锁的概念,解释死锁产生的原因和充要条件。 并发编程模型: 介绍不同的并发编程模型,如多生产者多消费者、读者写者、线程池等。 volatile 关键字: 解释 volatile 关键字的作用,探讨如何使用 volatile 实现线程间的可见性和有序性。 通过这份资源,将为您提供实用的指导,帮助您构建更稳定、可靠的多线程应用程序。

2023-08-09

java并发编程综合讲解

这份资源为您提供了关于 Java 并发编程的全面讲解,着重介绍了 JUC(java.util.concurrent)库中的核心概念、工具和最佳实践。通过深入学习,您将能够更好地理解并发编程的挑战,掌握构建高性能、高可伸缩性的并发应用所需的技能。 在资源内容中,我们将涵盖以下关键方面: 首先,我们将简要概述 JUC 库的重要性以及它在现代多核处理器环境中的作用。随后,我们将深入讨论线程池的原理和应用。您将了解线程池如何管理线程的创建、复用和销毁,以及如何通过适当的配置来提高系统的性能和响应能力。 其次,我们将介绍并发集合类的使用。您将了解如何在多线程环境下安全地进行数据访问,以及如何避免并发访问所带来的问题。我们将详细介绍 JUC 提供的线程安全集合类,如 ConcurrentHashMap 和 ConcurrentLinkedQueue,以及它们在实际应用中的用法。 通过这份资源,您将获得全面的 Java 并发编程知识,从基础概念到高级应用,从工具使用到最佳实践。无论您是初学者还是有经验的开发者,这些内容都将为您提供实用的指导,帮助您构建高性能、稳定的多线程应用程序。

2023-08-09

java编发编程:JUC综合讲解

Java 并发编程在现代软件开发中占据重要地位,尤其是在多核处理器的时代。JUC(java.util.concurrent)库是 Java 标准库的一部分,提供了丰富的多线程并发工具,旨在帮助开发者编写高性能、高可伸缩性的并发程序。下面综合介绍 JUC 库的几个核心概念以及它们在并发编程中的重要性。 1. 线程池(ThreadPoolExecutor): 线程池是 JUC 中最重要的组件之一,它解决了频繁创建和销毁线程所带来的性能开销问题。 2. 并发集合类(Concurrent Collections): JUC 提供了线程安全的并发集合类,如 ConcurrentHashMap、ConcurrentLinkedQueue 等。 3. 原子操作(Atomic Operations): 原子操作是不可再分割的基本操作,JUC 提供了一系列原子操作类,如 AtomicInteger、AtomicLong 等。 4. 同步器(Synchronizers):JUC 中的同步器主要通过 AQS(AbstractQueuedSynchronizer)提供支持。

2023-08-09

java并发编程:juc、aqs

在现代软件开发中,多核处理器的普及使得并发编程成为开发者不可忽视的技能。Java 并发编程中的 JUC(java.util.concurrent)库以及其核心组件 AQS(AbstractQueuedSynchronizer)在构建高性能、可伸缩性的多线程应用方面具有重要的地位。 AQS 是 JUC 中的核心组件,它提供了一个框架,让开发者能够轻松地构建自定义的同步器。通过继承 AQS,可以实现不同的同步机制,如独占锁、共享锁等。 高效的等待队列: AQS 内部维护了一个等待队列,用于管理等待锁的线程。这个队列的实现基于链表,可以高效地管理大量的等待线程,实现线程的排队和唤醒。 JUC 和 AQS 在 Java 并发编程中扮演着至关重要的角色。JUC 提供了丰富的多线程并发工具,可以帮助开发者构建高性能、可伸缩性的多线程应用。而 AQS 则是 JUC 的核心组件,提供了自定义同步器的框架,使得开发者能够灵活地实现各种同步机制。深入理解和掌握 JUC 和 AQS,可以让开发者更好地应对多线程并发编程中的挑战,提高程序性能和稳定性。

2023-08-09

java并发编程:juc线程池

在当今计算机软件开发领域,多核处理器的广泛应用使得并发编程成为开发者必备的技能之一。而了解 Java 并发编程以及其中的 JUC(java.util.concurrent)线程池,对于构建高性能、高可伸缩性的应用程序具有重要意义。 多核处理器的出现使得并发执行成为一种重要的优化手段。了解并发编程和线程池的工作原理,可以让您充分利用多核处理器,同时处理多个任务,提高系统的性能和响应速度。JUC 线程池管理线程的创建、复用和销毁,有效地减少了线程频繁创建和销毁所带来的开销,从而提高了系统资源的利用率。 不了解并发编程和线程池的开发者可能会面临多线程竞争、死锁等问题。通过深入了解 Java 并发编程和 JUC 线程池,您可以更好地管理线程之间的协作和同步,充分发挥多核处理器的优势,确保程序稳定运行。 了解 Java 并发编程和 JUC 线程池是现代软件开发者的必备知识。通过掌握并发编程的原理、实践和线程池的应用,您可以提高程序性能、利用硬件优势,同时编写高质量、可维护的代码。这不仅有助于满足现代应用对并发处理的需求,还能提升您的就业竞争力和职业发展机会。

2023-08-09

java垃圾回收知识全集

Java 垃圾回收(Garbage Collection,简称 GC)是现代编程语言中的重要特性,为开发人员提供了自动化内存管理的能力。它通过自动识别和回收不再使用的内存,减轻了程序员手动释放内存的负担,提高了应用程序的稳定性和性能。深入理解 Java 垃圾回收对于编写高效、可靠的应用程序至关重要。以下资源将帮助您掌握 Java 垃圾回收的核心概念、工作原理以及最佳实践。 Java 垃圾回收是编写高效、稳定应用程序的关键一环。通过以上资源,您将获得全面的垃圾回收知识,从基本概念到高级实践应用。无论您是初学者还是有经验的开发者,这些资源都将助您在 Java 开发中更加游刃有余,写出高性能、优质的应用程序。

2023-08-09

区块链应用操作员资料整理

区块链技术的广泛应用正在引发全球范围内的关注和需求增长。为了帮助区块链应用操作员高效地掌握和应用这一技术,我们特别整理了一份详尽而全面的资料,旨在为其提供实用的知识和指导。这份资料涵盖了从基础概念到实际应用操作的方方面面,为操作员提供了必要的资源,以便在区块链领域取得成功。 区块链基础知识: 资料首先从最基础的概念入手,解释了什么是区块链、其工作原理和核心组成部分。 智能合约操作: 在资料中,我们详细讨论了智能合约的部署、测试和执行。 交易与链上操作: 这些操作是区块链应用中至关重要的一部分,我们提供了步骤和示例来帮助操作员掌握这些技能。 身份与权限管理: 在资料中,我们探讨了如何在区块链上管理身份和权限。涵盖了数字身份的概念、认证和授权的机制,以及如何在应用中实现这些功能。 隐私保护与加密: 我们讨论了隐私币、零知识证明等隐私保护方法,帮助操作员确保数据安全。 这份资料整理旨在为区块链应用操作员提供全面、系统的学习资源。无论是初学者还是有经验的操作员,都能从中受益。我们相信,通过这份资料的学习,操作员将能够更加自信地在区块链领域发挥作用,并在日益发展的技术浪潮中取得成功。

2023-08-09

上海区块链应用操作员考试准备手册

这份区块链应用操作员培训手册专为准备参加区块链高级考试的人员而编写。手册从应用设计、应用测试、应用操作、应用运维等不同模块入手,详细涵盖了每个模块的重点内容。它旨在帮助考生在考试前充分了解并掌握必要的知识,以便在考试中取得优异成绩。 准备参加区块链高级考试的人员:这份手册为考生提供了系统性的应用设计、测试、操作和运维知识,帮助他们在考试中取得优异成绩。 手册内容由区块链领域的专家撰写,涵盖了应用实践经验和最佳方法。每个模块的重点内容都基于实际情况进行了划分,确保考生掌握必要知识。 这份手册将成为您准备区块链高级考试的有力工具,帮助您在考试中脱颖而出。 作者已经通过了上海区块链应用操作员的考试,并通过该手册取得了优良的成绩。这份手册可以为备考的学院提供很大的帮助,可以为学员提供复习备考指南,提高效率,而不是没有目的的学习。

2023-08-09

java中关键字Object详解

Object是Java编程中的基础类,所有类都直接或间接地继承了它,并从它继承了一些方法,如equals()、toString()和getClass()等。 首先,Object类是Java中的根源,它定义了所有Java类的通用行为,如Object类的toString方法。由于所有的Java类都直接或间接地继承了Object类,因此,Object类中的方法可以被任何Java类所调用和使用。 其次,Object类是实现Java泛型的基础,Java中的泛型是一种提供给Java程序员们使用的编程技术,它允许程序员们编写出使用一种或多种类型作为参数、返回结果或变量的类、接口以及方法,并且可以在运行时进行类型安全性检查。 此外,在开发过程中,Object类在一些特殊情况下非常有用。比如,如果我们需要创建一个数组来存放不同类型的Java对象,那么就可以使用Object类来存储数组元素。 总之,Object是Java中的一个核心类,不仅是Java中所有其他类的根,也是Java泛型的实现基础。熟练掌握和灵活使用Object类和其相关的方法能够帮助开发人员更好地理解和使用Java编程语言。

2023-07-04

java关键字ArrayList详解

ArrayList是Java中的一种常见的数据结构,它实现了List接口,是线程不安全的动态数组。它的容量可以自动增长,因此可以方便地插入、删除和查找数据,是Java集合框架中广泛使用的一种结构。 ArrayList的优势在于灵活性和运行速度,它可以自动扩展,支持任何类型的元素并且元素索引从0开始。通过使用ArrayList,开发人员可以通过添加和删除元素来动态修改数组的大小,使其适应不同的应用程序场景。并且,由于ArrayList底层是使用数组实现的,因此它的访问速度非常快。 另一方面,由于ArrayList是线程不安全的,因此在使用ArrayList时需要注意多线程同步问题,可以通过使用线程安全的Collections.synchronizedList()方法来创建线程安全的ArrayList。 总之,ArrayList是Java中一种很有用的数据结构,同时也是Java集合框架中最常用的一种结构。通过使用ArrayList,开发人员既可以动态地添加和删除元素,也可以快速访问元素。在开发过程中,如果要使用ArrayList,请注意考虑多线程安全问题。

2023-07-04

java中HashMap详解

HashMap是Java中非常常用的一种数据结构,它实现了Map接口,用于存储键值对。HashMap内部使用哈希表来实现,通过将键映射到哈希表中的一个位置来快速查找和插入元素。 HashMap的主要特点是: 非线程安全:如果多个线程同时访问同一个HashMap实例,可能会导致数据不一致的问题。因此,在使用HashMap时需要进行同步处理或者使用线程安全的HashMap实现类。 动态扩容:当HashMap中的元素数量超过了容量(默认为16)与负载因子(默认为0.75)的乘积时,HashMap会自动扩容,即创建一个新的数组,并将原来的元素重新映射到新的数组中。 高性能:由于使用了哈希表,HashMap在查找、插入和删除元素时具有较高的性能。但是,如果哈希函数的设计不合理,可能会导致哈希冲突,从而影响性能。 无序:HashMap中的元素没有固定的顺序,可以通过迭代器或for-each循环遍历元素。 总之,HashMap是一种非常实用的数据结构,可以用于存储键值对,并且具有较高的性能和灵活性。但是,在使用HashMap时需要注意线程安全问题,并合理设计哈希函数以避免哈希冲突。

2023-07-04

java关键字Synchronized详解

ava中的关键字synchronized是一种用于实现线程同步的机制。它可以确保在同一时刻,只有一个线程能够访问被synchronized修饰的代码块或方法。这种机制可以有效地避免多线程环境下的数据竞争和不一致问题。 在Java中,锁膨胀(Lock Inversion)是一个重要的概念。当一个对象被多个线程同时持有锁时,可能会导致锁膨胀现象。锁膨胀是指原本互斥的两个锁,由于某些原因,变得不再互斥。这会导致原本同步的代码段出现竞态条件,从而引发程序错误。 为了避免锁膨胀,Java提供了一种称为“偏向锁”的优化策略。偏向锁的主要目的是减少锁竞争,提高并发性能。当一个对象首次被创建时,JVM会自动为其分配偏向锁。此时,如果其他线程试图获取该对象的锁,JVM会将对象头中的Mark Word(指向对象头的指针)设置为偏向锁标识。这样,只有当前线程才能访问该对象,其他线程需要等待偏向锁失效后才能继续执行。 当一个线程释放偏向锁时,JVM会将其替换为普通锁。这意味着,如果有其他线程正在等待这个对象的锁,它们将不得不重新竞争这个锁。这种竞争可能导致锁膨胀现象的发生。

2023-07-04

dubbo协议、netty框架总结

Dubbo是一个开源的分布式服务框架,旨在帮助开发人员快速而简单地设计分布式应用程序。Dubbo基于服务端-客户端模型,实现了基于可扩展的协议和服务的动态伸缩以及安全性等特性。Dubbo协议以及Netty框架是Dubbo的两个重要组成部分,在应用程序开发中起到至关重要的作用。 Dubbo协议是Dubbo框架中必不可少的一个组成部分,用于实现分布式应用程序之间的通信。Dubbo协议使用基于请求和响应的方式来实现请求和响应之间的通信,支持TCP、HTTP和WebService等协议。Dubbo协议结构简单,易于使用,同时还支持自定义编解码和协议扩展。 其次,Netty框架是一种可扩展、高性能的网络应用程序框架,同时也是Dubbo框架中的重要组成部分。Netty框架实现了事件驱动和异步编程的机制,具有较好的吞吐量和可扩展性。由于其轻量级、易于使用的特性,Netty框架被广泛应用于分布式系统、Web应用程序和实时数据传输等领域。 总之,Dubbo协议和Netty框架是实现Dubbo框架的两个关键要素,Dubbo协议实现了分布式应用程序之间的通信,而Netty框架提供了高性能的网络应用程序框架。

2023-07-04

Redis经典面试题:redis是单线程架构还是多线程架构

Redis是一种快速而灵活的内存数据库,以其快速读取速度、灵活的数据结构等特点而著称。 首先,Redis是单线程架构,因为对于许多请求Redis都能高效完成并返回较为明确的结果。 Redis大部分操作是基于内存完成的,因此,单个CPU内存的读取速度非常快。单线程可以处理大部分请求,而且并发性的表现足够强大。此外,为了提升单线程的运行效率,Redis使用了Event Loop机制,这种机制可以以非常高效的方式轮询所有的事件,并且在管理和计算事件时不会阻塞同时进行的其他数据请求。 缓存穿透、缓存雪崩以及缓存击穿。缓存穿透主要是当客户端请求不存在的或者非法的数据属性时,请求不通过缓存服务器,而是直接到达数据源服务器,消耗大量资源,降低了数据库的性能。其中缓存雪崩是指当缓存服务器中的多个缓存项同时失效或故障状态时,导致客户端请求落到数据源的请求,这将导致服务器爆发大量的流量请求,从而造成数据库崩溃;而缓存击穿则是指当一个高访问频率的请求请求一个不存在的缓存项,这个请求会直接传递给数据源服务器,这将导致服务器爆发大量的请求,从而造成数据库崩溃。

2023-07-04

数据库 OLAP、OLTP的介绍和比较

OLAP (Online Analytical Processing) 和OLTP (Online Transaction Processing)是两种不同的数据库处理方式。OLTP用于管理数据中心的业务处理,OLAP则用于数据库分析和信息提取。这篇文章将介绍OLAP、OLTP的概念、优缺点,并对两种不同的处理方式进行比较。 OLTP主要用于处理短期交易数据,因此,它的数据流通常很大,但经常需要被更新。OLTP通常是面向在线处理的,关注的是事务性处理。因此,其重点在于保证数据的完整性、可用性和一致性。相应地,OLTP的数据模型会更加标准化,更加简单。 它需要有效地支持高容量事务处理。 相反,OLAP是进行交互式的查询和多维度分析的处理方法,是OLTP的补充部分。 OLAP支持高度抽象的、多角度的查询和分析,需要支持快速查询、并发和处理可超大数据量。它注重数据的聚合和分析,希望从大量和广泛的数据中发现规律和内容。因此,OLAP的数据模型相对而言比较复杂,涉及不同维度属性,并且这些属性可以关联或不关联。 OLAP不注重实时性,重点在于数据的分析。

2023-07-04

深入理解java类加载机制

本资源主要介绍了Java字节码和类加载的详细过程。字节码是Java程序在编译之后的中间代码表现形式。而类加载是Java程序执行过程中的一个重要的组成部分,它实现了程序的动态加载和运行。 在字节码方面,我们将从Java语言的语法和编译原理等重要内容出发,全面解读字节码在Java程序的开发和运行中的应用。我们将详细讲解字节码文件的结构、语法和格式,以及字节码指令的定义和应用,并通过大量实例进行编程详解,帮助开发人员深入了解Java字节码的使用方法和技巧。 在类加载方面,我们将深入探讨Java程序的类加载原理和流程,包括加载、验证、准备、解析和初始化等五个环节的详细解析,并对其强调点进行详细讲解。我们将详细介绍Java虚拟机中类的生命周期并探讨类加载时的各种问题和应急措施。此外,我们还会探讨Java程序的类加载器和双亲委派机制,以及自定义类加载器和类卸载的实现原理和应用方法。 总的来说,本资源将为Java程序员提供全面的Java字节码和类加载原理和实践经验。通过学习本资源,开发人员将获得更多Java编程语言的中间处理过程的知识和应用技巧,以及具备在高并发、大数据、并行计算、分布式系统等技能

2023-07-04

java并发理论基础、可见性、原子性、有序性详解

本资源涵盖了Java并发编程的理论基础和实践,主要包括可见性、原子性和有序性的详细介绍,以及多线程的使用原因、好处和坏处等方面的内容。 Java并发编程是一种高效的编程技术,通过多线程实现将计算过程中不必要的等待时间用于处理其它工作,从而提高了计算机的利用效率。但同时,多线程编程也带来了不少挑战,诸如线程安全、性能问题等,需要程序员采取适当的方法加以解决。 在Java并发理论基础方面,我们将会探讨并发编程的定义、多线程、共享变量和多线程间的互斥同步等理论概念。同时,我们也详细阐述了Java编程中的并发原理和机制。在可见性、原子性和有序性等方面,我们将深入讲解每个概念的意义和实现原理,通过例子和代码实现进行深入的解读。 在为什么要使用多线程方面,我们将探讨多线程的应用场景和意义,比如在计算密集型操作和IO密集型操作中的使用优势等。如IO密集型操作特点,通常会有大量的等待时间,我们可以采用多线程实现各任务之间的并行处理,提高处理效率;而在计算密集型操作中,多核CPU可以同时运行多个任务,从而更快地完成任务。我们还将讲解Java多线程开发的好处和坏处,并探讨如何尽量减少由多线程带来的问题。

2023-07-04

mysql中的事务、锁讲解和操作

这份资源主要介绍MySQL数据库系统中事务和锁的相关知识。MySQL是一种开源的关系型数据库,是Web应用程序开发中最为常用的数据库之一。在这里,我们通过对MySQL事务和锁的分类进行深入的研究,来帮助开发人员更好地了解和应用这些基础的数据库概念。 关于MySQL的事务,我们会深入探讨事务的定义、ACID属性、事务的相关隔离级别以及事务的执行流程等重要内容。同时,我们还会介绍到MySQL中的事务日志以及如何进行事务的管理和调优。而对于MySQL中的锁,我们将会介绍基础锁和高级锁的分类、锁的应用场景、锁的竞争和冲突问题、锁的常见应用案例、以及针对锁的调优方法等几个重要话题。我们会具体探讨到排它锁和共享锁的定义、意义和实现;介绍到锁冲突和死锁的危害,并从不同维度介绍MySQL中的多种锁类型的应用场景和选择方法。 以上内容,将涵盖MySQL事务和锁的核心原理和实践所需的知识点。无论您是新手还是专业开发人员,本资源都将为您提供丰富的知识储备和实际应用技巧,让您在实际项目中更好地运用MySQL的事务和锁功能,提高您的工作效率和开发水平。

2023-07-04

备考软考-快速口诀记录整理.docx

项目信息管理师备考口诀

2021-12-16

空空如也

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

TA关注的人

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