自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 深入理解关键字 volatile

Java 提供了一种较为轻量级的可见性和有序性问题的解决方案,那就是使用关键字。由于使用不会引起上下文的切换和调度,所以对性能的影响较小,开销较低。从并发三要素的角度看,可以保证其修饰的变量的和,无法保证(不能保证完全的原子性,只能保证单次读/写操作具有原子性,即无法保证复合操作的原子性)

2023-08-06 13:40:09 100

原创 Java中如何将一个类改造成不可变类

如果不可变类包含其他可变对象,并且这些对象在外部被使用,需要提供深度拷贝方法以确保不会影响原始对象。如果类中有返回引用类型的方法,确保返回的是副本或不可变对象,而不是内部可变对象的引用。对于包含可变对象的字段,确保在类内部正确处理这些对象,不暴露它们的引用给外部。字段是一个引用类型,我们在构造方法中创建一个它的副本,以确保外部不能修改原始的。等)或者是其他不可变对象。如果字段是引用类型,确保其指向的对象是不可变的。在不可变类中,所有字段都应该是不可修改的。方法,确保相等的对象具有相同的哈希码和相等的属性。

2023-08-06 10:14:18 198

原创 解决并发问题的方法有哪些

CAS操作是基于底层硬件指令的原子性保证,它利用了CPU提供的CAS指令,实现了在单个CPU指令周期内对内存的读取、比较和写入操作,从而保证了操作的原子性。在多线程环境下,CAS可以解决共享变量的并发问题,保证操作的原子性,避免使用锁带来的性能开销。局部变量在每个线程中都有自己的副本,每个线程在访问局部变量时都操作自己的副本,不会对其他线程产生影响。方法对计数器进行原子性的自增操作,无需使用锁,从而实现了线程安全的计数功能。都是私有的和final的,并且没有提供任何修改其状态的方法,因此该类是不可变的。

2023-08-06 10:10:20 1026

原创 多个线程读写同一共享变量是否存在并发问题?

CPU缓存是为了加快处理器对内存的访问速度而引入的,它位于CPU内部,速度比主内存快得多。每个CPU核心都有自己的缓存,这意味着每个线程在不同的核心上运行时可能访问不同的缓存。在JMM中,每个线程都有自己的线程栈,线程间的共享变量存储在主内存中。的值时,这个修改可能会仅反映在该核心的缓存中,并不会立即更新主内存。由于线程具有各自的线程栈,它们可能会在不同的CPU核心上运行,并且每个核心有自己的CPU缓存。应该为0,但由于竞态条件,最终结果可能会是一个随机值,因为两个线程可能会同时读取和写入。

2023-08-06 09:27:52 395

原创 ArrayList 源码解析

是Java的原生方法,它是由JVM底层实现的,通常会高度优化。因此,它的执行速度很快,比使用循环逐个复制数组元素的方式要高效得多。如果采用遍历复制的方式,每次移动元素都会触发内存分配和释放,增加了额外的开销。这种方式利用底层内存块之间的复制,效率非常高,特别适合大规模数据的复制操作。扩容的方式是创建一个更大的数组,然后将原数组中的元素复制到新数组中。方法将删除位置后面的元素都向前移动一位,实现了删除操作。最后,将最后一个元素置为。可以一次性将需要移动的元素块整体复制,避免了频繁的内存分配,节省了时间。

2023-08-05 10:18:10 50

原创 RSA加密算法

因此,在实际应用中,通常会使用RSA与对称加密算法(如AES)相结合,以充分发挥各自的优势。RSA主要用于密钥协商和数字签名,而对称加密算法用于加密数据传输。RSA算法使用两个密钥:公钥(Public Key)和私钥(Private Key),其中公钥用于加密数据,私钥用于解密数据。RSA算法的安全性基于大整数因数分解问题,即在已知n的情况下,找到p和q的值。当n非常大时,对其进行因数分解非常困难,因为RSA的安全性依赖于这种数学难题的复杂性。因此,使用足够大的密钥长度可以确保RSA算法的安全性。

2023-08-03 18:56:56 185

原创 文件加密传输,常见的加密技术

SSL/TLS:SSL(Secure Socket Layer)和其继任者TLS(Transport Layer Security)是用于在客户端和服务器之间进行加密通信的协议。它使用SSH协议提供的加密和认证功能,保护文件在传输过程中的安全性。VPN使用加密隧道来传输文件和其他数据,确保数据在互联网上的传输是安全的。ECC(椭圆曲线加密):ECC是一种非对称加密算法,与RSA相比,它提供相同安全级别下更短的密钥长度,因此更适合在资源受限的环境中使用。文件传输时,可以使用多种加密技术来确保数据的安全性。

2023-08-03 18:51:39 1149

原创 AES(高级加密标准)

请注意,此处使用ECB模式是为了简单起见,但在实际应用中,应该优先使用带有初始化向量(IV)的CBC模式,以提供更好的安全性。请注意,在实际应用中,应该使用更安全的方法生成和管理密钥,并避免在源代码中硬编码密钥。灵活性:AES支持不同长度的密钥,可根据实际需求选择128位、192位或256位的密钥长度。AES的解密过程与加密过程类似,但是加密轮的顺序相反,即从最终轮开始逆向操作直到初始轮。初始化密钥扩展:根据密钥的长度,将其扩展为不同的轮密钥,以用于后续的加密轮数。对象,这是执行AES加密所需的对象。

2023-08-03 18:44:49 1610

原创 SpringCloud与dubbo 技术选型

一、架构完整度对比核心组件 Dubbo SpringCloud 服务注册中心 zookeeper Spring Cloud Netflix Eureka 服务调用方式 RPC REST API 服务网关 无 Spring Cloud Netflix Zuul 断路器 不完善 Spring Cloud Netflix Hysrix 分布式配置 无 Spring Cloud Config 分布式追

2020-06-07 11:46:34 811

原创 MySQL:查询优化

一、查询慢的原因 通常来讲MySQL数据库查询需要经历的周期:从客户端,到服务端,然后在服务器上进行解析,生成执行计划,执行,并返回结果给客户端。这里涉及到网络、IO、cpu、上下文切换、系统调用、生成统计信息、锁等待时间等流程,如图所示:二、优化数据访问 1、查询不需要的记录,优化方案:在查询后面添加limit 2、多表关联时返回...

2020-02-14 18:30:34 171

原创 mysql:索引优化细节

一、细节优化 1、当使用索引列进行查询的时候尽量不要使用表达式,把计算放到业务层而不是数据库层,比如: select * from actor where actor_id + 4 = 5; 应该改为: select * from actor where actor_id = 1; 2、尽量使用主键查询,而不...

2020-02-12 20:54:17 356

转载 mysql:索引基本知识

一、索引的优点 1、减少不必要数据的扫描; 2、帮助服务器避免排序和临时表 3、将随机io变成顺序io二、索引的用处 1、快速查找匹配WHERE子句的行; 2、在多个索引之间进行选择,mysql通常会使用找到最少行的索引(虽然可以创建多个索引,但是mysql只会选择其中一个,这也就解释组合索引出现);...

2020-02-10 20:10:01 122

原创 mysql:explain

一、介绍 explain提供查询SQL语句执行的细节,从而能快速的实现对SQL语句的优化,提高SQL的执行效率 官网地址: https://dev.mysql.com/doc/refman/5.5/en/explain-output.html二、字段介绍Column JSON Name Meaning id select_id ...

2020-02-10 13:39:15 122

原创 Mysql:表结构优化

一、数据类型的选择 简单规则: 1、字符长度设置更小更好; 2、类型越简单越好,越简单使用的CPU越少;比如存储时间字段采用varchar类型与datatime类型对比; 3、尽量避免使用null;因为可为null的列使得索引、索引统计和值比较都更加复杂; 实际细节: ...

2020-02-10 12:38:30 189

原创 Mysql 自带检测工具:show profile

一、介绍 SHOW PROFILE和SHOW PROFILES是mysql自带的一种性能分析工具,表示当前会话过程中执行的语句资源使用信息。 注意:SHOW PROFILE和SHOW PROFILES,在以后的版本就被取消了,改为 :Performance Schema 执行语句格式: SHOW PROFILE [type ...

2020-02-09 16:59:45 413

转载 Nginx配置详解

序言Nginx是lgor Sysoev为俄罗斯访问量第二的rambler.ru站点设计开发的。从2004年发布至今,凭借开源的力量,已经接近成熟与完善。Nginx功能丰富,可作为HTTP服务器,也可作为反向代理服务器,邮件服务器。支持FastCGI、SSL、Virtual Host、URL Rewrite、Gzip等功能。并且支持很多第三方的模块扩展。Nginx的稳定性、功

2017-09-14 19:33:19 140

转载 Nginx代理功能与负载均衡详解

Nginx代理功能与负载均衡详解序言Nginx的代理功能与负载均衡功能是最常被用到的,关于nginx的基本语法常识与配置已在上篇文章中有说明,这篇就开门见山,先描述一些关于代理功能的配置,再说明负载均衡详细。Nginx代理服务的配置说明1、上一篇中我们在http模块中有下面的配置,当代理遇到状态码为404时,我们把404页面导向百度。erro

2017-09-14 19:28:45 162

原创 Reader 和 Writer

InputStream和OutputStream是面向直接形式的I/O,Reader和Writer是面向字符的I/O。注意:InputStreamReader可以将InputStream转换为Reader,而OutputStreamWriter可以把OutputStream转换为Writer。来源与去处 相应java1.1类InputStream Reader适配器:I

2017-09-14 11:46:56 257

转载 IO

Java中的流,可以从不同的角度进行分类。按照数据流的方向不同可以分为:输入流和输出流。按照处理数据单位不同可以分为:字节流和字符流。按照实现功能不同可以分为:节点流和处理流。 输出流: 输入流:因此输入和输出都是从程序的角度来说的。字节流:一次读入或读出是8位二进制。字符流:一次读入或读出是16位二进制。字节流和字符流的原理是相同的,只不过处理

2017-09-14 11:44:10 150

原创 Java中对象的引用

在java中赋值的过程中,可能会出现不是将值赋值给另个变量,而是“”引用"从一个地方复制到另一个地方。public class Tank {public int level;}public class Test {public static void main(String[] args) {Tank t1 = new Tank();Tank

2016-09-05 00:02:01 219

空空如也

空空如也

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

TA关注的人

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