自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

渣渣想逆袭

一个在互联网苟且偷生的渣渣

  • 博客(245)
  • 资源 (3)
  • 问答 (1)
  • 收藏
  • 关注

原创 JVM深入解析

Java运行时数据区:Java虚拟机在执行Java程序的过程中会将其管理的内存划分为若干个不同的数据区域,这些区域有各自的用途、创建和销毁的时间,有些区域随虚拟机进程的启动而存在,有些区域则是依赖用户线程的启动和结束来建立和销毁。Java虚拟机所管理的内存包括以下几个运行时数据区域,如图:1、程序计数器:指向当前线程正在执行的字节码指令。线程私有的。2、虚拟机栈:虚拟机栈是Java执...

2020-03-07 12:04:43 177

原创 K8S架构解析

每个微服务通过 Docker 进行发布,随着业务的发展,系统中遍布着各种各样的容器。于是,容器的资源调度,部署运行,扩容缩容就是我们要面临的问题。基于 Kubernetes 作为容器集群的管理平台被广泛应用,今天我们一起来看看 Kubernetes 的架构中有那些常用的组件以及运行原理。Kubernetes 架构概述Kubernetes 是用来管理容器集群的平台。既然是管理集群,那么就...

2020-02-17 17:13:13 2232

原创 HashMap和CurrentHashMap

哈希表(hash table)也叫散列表,是一种非常重要的数据结构,应用场景及其丰富,许多缓存技术(比如memcached)的核心其实就是在内存中维护一张大的哈希表。一、什么是哈希表在讨论哈希表之前,我们先大概了解下其他数据结构在新增,查找等基础操作执行性能 数组 采用一段连续的存储单元来存储数据。对于指定下标的查找,时间复杂度为O(1); 通过给定值进行查找,需要遍历数组,...

2019-10-08 16:34:38 505

原创 Maven的核心概念

定义当前Maven项目隶属的实际项目。系统依赖范围,使用system范围的依赖时必须通过systemPath元素显示的指定依赖文件的路径,不依赖Maven仓库解析,所以可能会造成建构的不可移植(即就是在你的电脑上可能没问题,但是到别人电脑上那就说不清楚了),有点类似provided ,注意这个system谨慎使用。用来统一存储所有Maven共享构建的位置,说白了就是用来存放jar包的,我们本地每次编译的时候没有对应jar包是编译通不过的,我们一个项目中是需要很多jar的依赖的,这时候就知道仓库的重要性了。.

2022-08-14 23:31:36 175

原创 解决maven依赖冲突

比如当我们项目中,引用了A的依赖,A的依赖通常又会引入B的jar包,B可能还会引入C的jar包。这样,当你在pom.xml文件中添加了A的依赖,Maven会自动的帮你把所有相关的依赖都添加进来。这里随便举一个例子,比如我们为了实现导入导出功能我们可能会引入poi当你引入它的时候,它其实还会映入其它jar包就这样一层层的,Maven会自动的帮你把所有相关的依赖都添加进来。传递性依赖会给项目引入很多依赖,简化项目依赖管理,但是也会带来问题。最明显的就是容易发生依赖冲突。...

2022-08-14 12:26:34 1224

原创 浅谈Maven依赖的作用域scope

依赖作用域在开发中一定不要忽略,选择合理的作用域能让你项目的依赖更加合理和“干净”。看了本篇后,赶紧去看看你项目的依赖引用是否合理吧。

2022-08-14 11:42:20 277

转载 彻底弄透Java处理GMT/UTC日期时间

平时工作中遇到时间如何处理?用Date还是JDK 8之后的日期时间API?如何解决跨时区转换等等头大问题。A哥向来管生管养,管杀管埋,因此本文就带你领略一下,Java是如何实现GMT和UTC的?众所周知,JDK以版本8为界,有两套处理日期/时间的API:虽然我一直鼓励弃用Date而支持在项目中只使用JSR 310日期时间类型,但是呢,由于Date依旧有庞大的存量用户,所以本文也不落单,对二者的实现均进行阐述。Date类型实现java.util.Date在JDK 1.0就已存在,用于表

2022-04-20 11:08:15 11364 2

原创 Mysql的索引为什么使用B+树而不使用跳表?

在我们的印象中,mysql数据表里无非就是存储一行行的数据。跟个excel似的。直接遍历这一行行数据,性能就是O(n),比较慢。为了加速查询,使用了B+树来做索引,将查询性能优化到了O(lg(n))。但问题就来了,查询数据性能在 lg(n) 级别的数据结构有很多,比如redis的zset里用到的跳表,也是lg(n),并且实现还贼简单。那为什么mysql的索引,不使用跳表呢?我们今天就来聊聊这个话题。B+树的结构之前的一篇文章里,已经提到过B+树的结构了。文章不长,如果没看过,建议

2022-04-19 23:36:04 132 1

原创 Git使用Merge和Rebase

git rebase命令常常因为江湖上关于它是一种Git魔法命令的名声而导致Git新手对它敬而远之,但是事实上如果一个团队能够正确使用的话,它确实可以让生活变得更简单。在这篇文章中我们会比较git rebase和经常与之相提并论的git merge命令,并且在真实典型的Git工作流程中识别潜在的可使用rebase的场景。概念概述首先我们应该明白git rebase是用来处理git merge命令所处理的同样的问题。这两个命令都用于把一个分支的变更整合进另一个分支——只不过他们达成同样目的的方式不同。

2022-04-05 23:48:30 15953 1

原创 MySQL中count(*)比count(1)快?

先说结论:这两个性能差别不大。1.实践我准备了一张有 100W 条数据的表,表结构如下:CREATE TABLE `user` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `username` varchar(255) DEFAULT NULL, `address` varchar(255) DEFAULT NULL, `password` varchar(255) DEFAULT NULL, PRIMARY KEY (

2022-04-05 22:01:08 151

原创 为什么不建议在MySQL中使用UTF-8?

看到一篇文章讲到emoji文字占4个字节,通常要用utf-8去接收才行,其他编码可能会出错。我突然想到去年操作MySQL把utf8改成utf8mb4的事儿。嗯?他本身不就是utf8编码么!那我当时还改个锤子?难道,MySQL的utf8不是真正的UTF-8编码吗??! 卧槽这。。MySQL有bug!带着疑问查询了很多相关材料,才发现这竟然是MySQL的一个历史遗留问题~~ 我笑了,没想到这么牛B的MySQL也会有这段往事。一、报错将emoji文字直接写入SQL中,执行 insert .

2020-11-23 17:13:38 262

原创 MySQL中in到底走不走索引?

explain介绍mysql中explain关键字可以模拟MySQL优化器执行SQL语句,是一个可以很好的分析SQL语句或表结构的性能瓶颈。explain的使用方法:explain + sql语句,下面我们先来执行下explain语句EXPLAIN SELECT * FROM `user` WHERE created_time > "2020-03-08";执行结果如下:可以看到有几个返回参数:id、select_type、table、partitions、type、p.

2020-11-08 23:50:03 42142 12

原创 系统性能提升利刃 | 缓存技术使用

目录导读缘起:为何使用缓存CPU瓶颈IO瓶颈选择本地缓存和分布式缓存的考量点本地缓存的优缺点和应用场景分布式缓存的优缺点和应用场景选择缓存框架的衡量标准缓存框架使用过程的知识点缓存命中率缓存更新策略缓存过期策略其他影响命中率的因素缓存穿透缓存击穿缓存雪崩保证业务数据一致性的策略小结导读按照现在流行的互联网分层架构模型,最简单的架构当属Web响应层+DB存储层的架构。从最开始的单机混合部署Web和DB,到后来将二者拆分到不同.

2020-10-12 16:23:39 374 1

原创 HTTPS 的工作原理

当你打开浏览器,访问某个网站,如果网址旁有个小锁,代表访问的网址是安全的,反之不安全。当我们没有看到那个小锁的小图标的时候,需要提高警惕,不要随意输入个人重要的资料。所有的银行和支付相关的网站都是100%使用HTTPS的。我们为什么需要HTTPS?主要有三个原因: 1、保护隐私(Privacy):所有信息都是加密传播,第三方无法窃听数据。如果使用HTTP明文传输数据的话,很...

2020-05-05 13:15:53 555 1

原创 深入分析AQS实现原理

简单解释一下J.U.C,是JDK中提供的并发工具包,java.util.concurrent。里面提供了很多并发编程中很常用的实用工具类,比如atomic原子操作、比如lock同步锁、fork/join等。从Lock作为切入点我想以lock作为切入点来讲解AQS,毕竟同步锁是解决线程安全问题的通用手段,也是我们工作中用得比较多的方式。Lock APILock是一个接口,方法定义如下...

2020-05-05 12:54:35 877

原创 ThreadLocal的使用及原理分析

什么是ThreadLocalThreadLocal,简单翻译过来就是本地线程,但是直接这么翻译很难理解ThreadLocal的作用,如果换一种说法,可以称为线程本地存储。简单来说,就是ThreadLocal为共享变量在每个线程中都创建一个副本,每个线程可以访问自己内部的副本变量。这样做的好处是可以保证共享变量在多线程环境下访问的线程安全性ThreadLocal的使用没有使用Thread...

2020-05-05 12:51:24 385

原创 Volatile的作用及原理

内容导航volatile的作用 什么是可见性 volatile源码分析volatile的作用在多线程中,volatile和synchronized都起到非常重要的作用,synchronized是通过加锁来实现线程的安全性。而volatile的主要作用是在多处理器开发中保证共享变量对于多线程的可见性。可见性的意思是,当一个线程修改一个共享变量时,另外一个线程能读取到修改以后的值。接下...

2020-05-05 12:48:01 3305

原创 Synchronized原理分析

内容导航什么时候需要用Synchronized synchronized的使用 synchronized的实现原理分析什么时候需要用Synchronized想必大家对synchronized都不陌生,主要作用是在多个线程操作共享数据的时候,保证对共享数据访问的线程安全性。比如在下面这个图片中,两个线程对于i这个共享变量同时做i++递增操作,那么这个时候对于i这个值来说就存在...

2020-05-05 11:52:27 202

原创 一致性Hash算法(环形思想)

这里拿Redis来举个例子,实际一致性Hash算法应用广泛一、Redis集群的使用我们在使用Redis的时候,为了保证Redis的高可用,提高Redis的读写性能,最简单的方式我们会做主从复制,组成Master-Master或者Master-Slave的形式,或者搭建Redis集群,进行数据的读写分离,类似于数据库的主从复制和读写分离。如下所示:同样类似于数据库,当单表数据大...

2020-05-03 20:20:59 2413

原创 数据库的事务以及事务隔离级别

学习数据库的时候常常会接触到事务, ACID等概念,那么到底什么是数据库的事务,数据库事务又具有哪些特点,和ACID有怎样的关系,事务的隔离级别又是做什么的呢?。事务及其四大特性?事务(Transaction):访问并可能更新数据库中各种数据项的一个程序执行单元(unit),它通常由高级数据库操纵语言或编程语言(如SQL,C++或Java)书写的用户程序的执行所引起。当在数据库中更改数据成...

2020-04-28 15:31:43 471 1

原创 JVM性能调优监控工具jps、jstack、jmap、jhat、hprof使用详解

现实企业级Java应用开发、维护中,有时候我们会碰到下面这些问题:OutOfMemoryError,内存不足 内存泄露 线程死锁 锁争用(Lock Contention) Java进程消耗CPU过高 ......这些问题在日常开发、维护中可能被很多人忽视(比如有的人遇到上面的问题只是重启服务器或者调大内存,而不会深究问题根源),但能够理解并解决这些问题是Java程序员进阶的必...

2020-04-28 09:11:14 232

原创 JAVA反射,Class.forName和ClassLoader的区别

一看名字就知道了,一个是类的创建,一个类加载器二再看下Class.forName源码,调用了ClassLoader@CallerSensitive public static Class<?> forName(String className) throws ClassNotFoundException { ...

2020-04-19 22:50:04 267

原创 ThreadPoolExecutor拒绝策略

前言谈到java的线程池最熟悉的莫过于ExecutorService接口了,jdk1.5新增的java.util.concurrent包下的这个api,大大的简化了多线程代码的开发。而不论你用FixedThreadPool还是CachedThreadPool其背后实现都是ThreadPoolExecutor。ThreadPoolExecutor是一个典型的缓存池化设计的产物,因为池子有大小,当...

2020-04-18 22:51:04 956

原创 如何保证APP与服务端通信安全

前言最近公司外包给别人做的一个APP项目上线了,拿到源码一看那代码质量真是一言难尽啊!刚上线用户比较少倒也没出啥问题,不过随着用户慢慢变多,问题逐渐暴露出来了。最严重的问题就是我们的APP与服务器的通信接口没有加密处理被人抓包了,有人非法请求我们的接口获取数据。怎么处理这个问题呢?领导又把这个光荣而艰巨的任务分给了我,没办法只能硬着头皮上啊,经过几天摸索终于总结出了一套还算安全的A...

2020-04-18 19:17:24 3366 3

原创 Nginx服务器的负载均衡策略

一、关于Nginx的负载均衡在服务器集群中,Nginx起到一个代理服务器的角色(即反向代理),为了避免单独一个服务器压力过大,将来自用户的请求转发给不同的服务器。详情请查看我的另一篇博客。二、Nginx负载均衡策略负载均衡用于从“upstream”模块定义的后端服务器列表中选取一台服务器接受用户的请求。一个最基本的upstream模块是这样的,模块内的server是服务器列表:...

2020-04-18 18:39:51 341

原创 MySQL索引的原理,B+树、聚集索引和二级索引的结构分析

索引是一种用于快速查询行的数据结构,就像一本书的目录就是一个索引,如果想在一本书中找到某个主题,一般会先找到对应页码。在mysql中,存储引擎用类似的方法使用索引,先在索引中找到对应值,然后根据匹配的索引记录找到对应的行。我们首先了解一下索引的几种类型和索引的结构。索引类型B树大多数存储引擎都支持B树索引。b树通常意味着所有的值都是按顺序存储的,并且每一个叶子也到根的距离相同。B树...

2020-04-10 17:25:12 575

原创 触发FullGC的几个条件

1.年轻代存活的对象太多,老年代了放不下01.示例代码public class DemoTest1 { public static void main(String[] args) { byte[] array1 = new byte[4 * 1024 * 1024]; array1 = null;​ byte[] array2 ...

2020-04-09 23:06:28 2467

原创 Spring事务之7种传播行为

Spring在TransactionDefinition接口中规定了7种类型的事务传播行为。事务传播行为是Spring框架独有的事务增强特性,他不属于的事务实际提供方数据库行为。这是Spring为我们提供的强大的工具箱,使用事务传播行可以为我们的开发工作提供许多便利。但是人们对他的误解也颇多,你一定也听过“service方法事务最好不要嵌套”的传言。要想正确的使用工具首先需要了解工具。本文对七种事...

2020-04-09 15:47:58 298

原创 Logback配置,提升TPS

通过阅读本篇文章将了解到1.日志输出到文件并根据LEVEL级别将日志分类保存到不同文件 2.通过异步输出日志减少磁盘IO提高性能 3.异步输出日志的原理配置文件logback-spring.xmlSpringBoot工程自带logback和slf4j的依赖,所以重点放在编写配置文件上,需要引入什么依赖,日志依赖冲突统统都不需要我们管了。logback框架会默认加载classpa...

2020-04-05 22:10:09 192

原创 MySQL索引失效的情况

索引并不是时时都会生效的,比如以下几种情况,将导致索引失效:1.如果条件中有or,即使其中有条件带索引也不会使用(这也是为什么尽量少用or的原因)  注意:要想使用or,又想让索引生效,只能将or条件中的每个列都加上索引  2.对于多列索引,不是使用的第一部分,则不会使用索引(复合索引,索引匹配规则)  3.like查询是以%开头 4.如果列类型是字符串,那一定要...

2020-03-28 19:41:40 225

原创 Spring事务管理

一、Spring事务介绍Spring事务优点对不同的api进行统一编程模型,如JTA,JDBC,Hibernate,JPA,JDO... 支持声明式事务 简化编程式事务api 对spring数据层的完美抽象Spring事务的传播性PROPAGATION_REQUIRED 如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到这个事务中PROPAGATIO...

2020-03-28 19:35:44 228

原创 Spring中@Resource和@Autowire的区别

1、@Autowired@Autowired默认byType自动注入,如果实例结果不唯一,那么将会抛出异常@Autowired可与@Qualifier("beanName")搭配使用,注入指定bean。@Autowired@Qualifier("baseDao")private BaseDao baseDao;如,同一个接口,两个实现类,就可以使用该方式指定注入。@Au...

2020-03-27 17:02:45 10003

原创 接口幂等性的解决方案

在编程中,幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同。幂等函数指的是那些使用相同参数重复执行也能获得相同结果的函数。这些函数不会影响系统状态,也不用担心重复执行会对系统造成改变。比如说getIdCard()函数和setTrue()函数就是幂等函数。幂等在我的理解里就是,一个操作不论被执行多少次,产生的效果和返回的结果都是一样的。一个幂等的操作典型如:把编号为5的记录的...

2020-03-27 01:09:42 310

原创 集群环境下Redis分布式锁

一、前言  在上一篇文章中,已经介绍了基于Redis实现分布式锁的正确姿势,但是上篇文章存在一定的缺陷——它加锁只作用在一个Redis节点上,如果通过sentinel保证高可用,如果master节点由于某些原因发生了主从切换,那么就会出现锁丢失的情况:客户端1在Redis的master节点上拿到了锁 Master宕机了,存储锁的key还没有来得及同步到Slave上 master故障,...

2020-03-27 00:43:10 413

原创 Feign的Ribbon超时配置和Hystrix的超时配置优先级

先看下我的配置:ribbon: MaxAutoRetries: 1 #最大重试次数,当Eureka中可以找到服务,但是服务连不上时将会重试 MaxAutoRetriesNextServer: 1 #切换实例的重试次数 OkToRetryOnAllOperations: false # 对所有的操作请求都进行重试,如果是get则可以,如果是post,put等操作没有实现幂等的情况...

2020-03-26 23:48:43 2070 1

原创 Java线程池原理解析

一、为什么要用线程池 降低资源消耗。通过重复利用已创建的线程降低线程创建、销毁线程造成的消耗。 提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。 提高线程的可管理性。线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一的分配、调优和监控二、ThreadPoolExecutor线程池类参数详解参数 说...

2020-03-26 21:48:26 97

原创 ThreadLocal的用途

声明:本文使用的是JDK 1.8首先我们来看一下JDK的文档介绍:/** * This class provides thread-local variables. These variables differ from * their normal counterparts in that each thread that accesses one (via its * {@c...

2020-03-24 23:15:40 126

原创 乐观锁、悲观锁

我今天就简单聊一下乐观锁和悲观锁,他们对应的实现 CAS ,Synchronized,ReentrantLockCAS(Compare And Swap 比较并且替换)是乐观锁的一种实现方式,是一种轻量级锁,JUC 中很多工具类的实现就是基于 CAS 的。CAS 是怎么实现线程安全的?线程在读取数据时不进行加锁,在准备写回数据时,先去查询原值,操作的时候比较原值是否修改,若未...

2020-03-24 16:19:40 111

原创 JVM类加载过程与双亲委派

Class 文件需要加载到虚拟机中之后才能运行和使用,那么虚拟机是如何加载这些 Class 文件呢?系统加载 Class 类型的文件主要三步:加载->连接->初始化。连接过程又可分为三步:验证->准备->解析。类加载过程加载类加载过程的第一步,主要完成下面3件事情: 通过全类名获取定义此类的二进制字节流 将字节流所代表的静态存储结构转换为...

2020-03-24 01:04:12 166

原创 Spring Cloud 总结

首先我给大家看一张图,如果大家对这张图有些地方不太理解的话,我希望你们看完我这篇文章会恍然大悟。什么是Spring Cloud构建分布式系统不需要复杂和容易出错。Spring Cloud 为最常见的分布式系统模式提供了一种简单且易于接受的编程模型,帮助开发人员构建有弹性的、可靠的、协调的应用程序。Spring Cloud 构建于 Spring Boot 之上,使得开发者很容易入手并...

2020-03-24 00:35:12 247

java繁简转换工具类

java繁简转换的工具类,提供使用

2016-04-26

Acronis Disk Director Suitev10

一套硬盘工具,可以在不损失资料的情况下对现有硬盘进行重新分区或者调整,可以对于损坏的分区进行修复,还可以轻松的实现多系统的安装和启动。支持Windows 95 / 98 / Me / NT (包括服务器版)/ 2000 (包括服务器以及高级版) / XP 以及 2003服务器。

2013-04-10

百度地图API

百度地图API是为开发者免费提供的一套基于百度地图服务的应用接口,包括JavaScript API、Web服务API、Android SDK、iOS SDK、定位SDK、车联网API、LBS云等多种开发工具与服务,提供基本地图展现、搜索、定位、逆/地理编码、路线规划、LBS云存储与检索等功能,适用于PC端、移动端、服务器等多种设备,多操作系统下的地图应用开发。

2013-04-10

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

TA关注的人

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