自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

程序猿踩坑集锦

程序员的成长历程,记录技术学习的点点滴滴

  • 博客(189)
  • 资源 (3)
  • 收藏
  • 关注

原创 java 中Synchronized 和 Lock 的区别

1、synchronized和lock的用法区别synchronized:在需要同步的对象中加入此控制,synchronized可以加在方法上,也可以加在特定代码块中,括号中表示需要锁的对象。lock:一般使用ReentrantLock类做为锁。在加锁和解锁处需要通过lock()和unlock()显示指出。所以一般会在finally块中写unlock()以防死锁。2、synchronized和lock性能区别synchronized是托管给JVM执行的,而lock是java写的控制锁的代码.

2021-04-01 13:59:28 4278

原创 红黑树与B树、B+树

一、红黑树1、红黑树的特性(1)每个节点或者是黑色,或者是红色。(2)根节点是黑色。(3)每个叶子节点(NIL)是黑色。 [注意:这里叶子节点,是指为空(NIL或NULL)的叶子节点!](4)如果一个节点是红色的,则它的子节点必须是黑色的。(5)从一个节点到该节点的子孙节点的所有路径上包含相同数目的黑节点。[这里指到叶子节点的路径]包含n个内部节点的红黑树的高度是 O(log(n)).如图:2、红黑树的使用场景java中使用到红黑树的有TreeSet和JDK1.8的HashMap

2021-04-01 11:17:55 7832

原创 五分钟解决Java线程池 面试所有问题

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

2021-03-31 18:43:48 587

原创 Java中阻塞队列类型介绍

Java中的几种阻塞队列Java中的BlockingQueue接口是一个线程安全的存取队列,适用于生产者消费者的应用场景中,支持两个附加操作:生产者线程会一直不断的往阻塞队列中放入数据,直到队列满了为止。队列满了后,生产者线程阻塞等待消费者线程取出数据。 消费者线程会一直不断的从阻塞队列中取出数据,直到队列空了为止。队列空了后,消费者线程阻塞等待生产者线程放入数据。BlockingQueue接口BlockingQueue提供四种不同的处理方法。 抛出异常 返回特殊值 .

2021-03-31 18:02:26 2298

原创 线程池的shutdown()与shutdownNow()方法的区别

老习惯先上结论:shutdown只是将线程池的状态设置为SHUTWDOWN状态,正在执行的任务会继续执行下去,没有被执行的则中断。而shutdownNow则是将线程池的状态设置为STOP,正在执行的任务则被停止,没被执行任务的则返回。分析源码在源码层面上,shutdown调用的是advanceRunState(SHUTDOWN),而shutdownNow调用的是(STOP) shutdown调用的事中断空闲的Workers,而shutdownNow调用的是中断所有的Workers .

2021-03-31 17:01:08 4717 1

原创 RocketMQ 面试常问问题及答案

1. RocketMQ是什么?RocketMQ 是阿里巴巴在2012年开源的分布式消息中间件,目前已经捐赠给 Apache 软件基金会,并于2017年9月25日成为 Apache 的顶级项目。作为经历过多次阿里巴巴双十一这种“超级工程”的洗礼并有稳定出色表现的国产中间件,具有高性能、低延时和高可靠等特性。主要用来提升性能、系统解耦、流量肖峰等。2. RocketMQ有什么特点?1. 灵活可扩展性RocketMQ 天然支持集群,其核心四组件(Name Server、Broker、...

2021-03-26 16:11:27 5780

转载 Synchronized实现原理

一.同步的基本思想目的:为了保证共享数据在同一时刻只被一个线程使用,我们有一种很简单的实现思想,就是1.在共享数据里保存一个锁 ,当没有线程访问时,锁是空的。2.当有第一个线程访问时,就 在锁里保存这个线程的标识 并允许这个线程访问共享数据。3.在当前线程释放共享数据之前,如果再有其他线程想要访问共享数据,就要 等待锁释放 。Jvm同步的实现jvm中有以下三种锁(由上到下越来越“重量级”):偏向锁轻量级锁重量级锁重量级锁二.Synchronized 原理JVM规范

2021-03-25 16:33:57 329

原创 Java并发工具类介绍

概述在JDK的并发包(java.util.concurrent)中,为我们提供了几个非常重要的并发工具类,分别为CountDownLatch、CyclicBarrier、Semaphore和Exchanger。先上总结1、CountDownLatch,它是一种计数器的方式保证线程同步;它不去控制多个子线程之间的前后关系,只保证某一线程能够在这些子线程执行完成后再执行。2、CyclicBarrier,通过设置屏障的方式使得多线程同步,能够控制多个线程在屏障处等等其他线程也执行到屏障点,可以实现

2021-02-25 11:38:05 517 1

原创 redis的淘汰机制简述

我们都知道redis缓存时可以设置过期时间,那么redis是如何识别这个key已经过期并将该key清掉呢?当redis的内存满了之后,为什么还可以继续写缓存呢?而某些key又会被清掉,是什么原因呢?以上问题就涉及到了redis的过期策略和淘汰机制,我们可以来了解一下。redis为什么要有淘汰机制?  redis淘汰机制的存在是为了更好的使用内存,用一定的缓存丢失来换取内存的使用效率。redis的过期策略  redis有两种过期策略,定期删除和惰性删除 定期删除:redis每个1

2020-12-08 10:20:24 457

转载 redis实现分布式锁的几种方式

1. redis加锁分类redis能用的的加锁命令分表是INCR、SETNX、SET2. 第一种锁命令INCR这种加锁的思路是, key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 INCR 操作进行加一。然后其它用户在执行 INCR 操作进行加一时,如果返回的数大于 1 ,说明这个锁正在被使用当中。1、 客户端A请求服务器获取key的值为1表示获取了锁2、 客户端B也去请求服务器获取key的值为2表示获取锁失败3、 客户端A执行代码完成,删除锁4、 客户端B.

2020-12-08 09:43:16 2533

转载 面试题:java 的双亲委派模式了解么?

什么是双亲委派机制当某个类加载器需要加载某个.class文件时,它首先把这个任务委托给他的上级类加载器,递归这个操作,如果上级的类加载器没有加载,自己才会去加载这个类。双亲委派机制的作用1、防止重复加载同一个.class。通过委托去向上面问一问,加载过了,就不用再加载一遍。保证数据安全。2、保证核心.class不能被篡改。通过委托方式,不会去篡改核心.clas,即使篡改也不会去加载,即使加载也不会是同一个.class对象了。不同的加载器加载同一个.class也不是同一个Class对象。这样保证

2020-11-05 16:13:35 622

原创 Redis常见的5种不同的数据类型详解

一、前言Redis除了可以存储键还可以存储常见的5种数据类型,分别是:String、List、Set、Hash、ZSet。对于Redis的命令有一部分是可以公用的,但是还有一些其他的命令是属于特殊使用的。首先看看一张关于Redis5种数据结构的对比:下边就分别介绍5中国不同的数据结构类型。二、String字符串类型Redis中的String类型就是一个由字节组成的序列,他和其他编程语言或者其他键值对存储提供的字符串操作非常相似。一个String类型的实例,其中键为hello,值为

2020-11-05 15:54:37 1975 1

原创 HashMap 实现原理

HashMap的实现原理:利用key的hashCode重新hash计算出当前对象的元素在数组中的下标 存储时,如果出现hash值相同的key,此时有两种情况。(1)如果key相同,则覆盖原始值;(2)如果key不同(出现冲突),则将当前的key-value放入链表中 获取时,直接找到hash值对应的下标,在进一步判断key是否相同,从而找到对应值。 理解了以上过程就不难明白HashMap是如何解决hash冲突的问题,核心就是使用了数组的存储方式,然后将冲突的key的对象放入链表中,一旦发现冲突就在

2020-11-04 15:44:40 141

转载 Redis集群的三种集群模式介绍

一、主从模式通过持久化功能,Redis保证了即使在服务器重启的情况下也不会损失(或少量损失)数据,因为持久化会把内存中数据保存到硬盘上,重启会从硬盘上加载数据。但是由于数据是存储在一台服务器上的,如果这台服务器出现硬盘故障等问题,也会导致数据丢失。为了避免单点故障,通常的做法是将数据库复制多个副本以部署在不同的服务器上,这样即使有一台服务器出现故障,其他服务器依然可以继续提供服务。为此, Redis 提供了复制(replication)功能,可以实现当一台数据库中的数据更新后,自动将更新的数据同步到其

2020-11-04 14:06:13 628 1

转载 Redis的优点和缺点

1、为什么要使用Redis?速度快,完全基于内存,使用C语言实现,网络层使用epoll解决高并发问题,单线程模型避免了不必要的上下文切换及竞争条件;注意:单线程仅仅是说在网络请求这一模块上用一个线程处理客户端的请求,像持久化它就会重开一个线程/进程去进行处理丰富的数据类型,Redis有8种数据类型,当然常用的主要是 String、Hash、List、Set、 SortSet 这5种类型,他们都是基于键值的方式组织数据。每一种数据类型提供了非常丰富的操作命令,可以满足绝大部分需求,如果有.

2020-10-28 23:38:59 7072

原创 正确区分@Autowire和@Resource注解的区别

大家都知道这两个注解可以实现bean的注入@Autowired 这个是spring的注解    org.springframework.beans.factory.annotation.Autowired@Resource 这属于java自带的注解   javax.annotation.Resource@Autowired默认是按照类型来注入的,默认情况下要求依赖对象必须存在。如果允许依赖对象为null,需设置required属性为false,需要按名字注入的话可以跟@Qualifi.

2020-10-28 23:29:40 1432

原创 五分钟快速理解数据库设计三大范式

数据库设计范式什么是范式:简言之就是,数据库设计对数据的存储性能,还有开发人员对数据的操作都有莫大的关系。所以建立科学的,规范的的数据库是需要满足一些规范的来优化数据数据存储方式。在关系型数据库中这些规范就可以称为范式。什么是三大范式:第一范式:当关系模式R的所有属性都不能再分解为更基本的数据单位时,称R是满足第一范式的,简记为1NF。满足第一范式是关系模式规范化的最低要求,否则,将有很多基本操作在这样的关系模式中实现不了。第二范式:如果关系模式R满足第一范式,并且R得所有非主属性都完全

2020-10-26 15:38:41 311

原创 用java五分钟 pdf转word 轻松搞定

最近家人有个pdf 文档需要转成word ,我觉得很轻松就在网上搜索工具,竟然没有找到好用的工具,有几个像样的竟然需要银子??pdf转换这么难吗?为什么需要花钱才能解决?强大的java,好用的apache 工具系列解决不了么?所以决定研究一下。首先找到了apache pdf 解析的依赖包:<dependency> <groupId>o...

2020-08-28 11:05:09 17834 13

原创 Spring boot 入门教程-自定义注解

1.定义注解接口@Documented@Retention(RUNTIME)@Target(METHOD)public @interface MyLog { String value() default "";}@Target(ElementType.TYPE)//接口、类、枚举、注解@Target(ElementType.FIELD)//字段、枚举的常量@Target(ElementType.METHOD)//方法@Target(ElementT...

2020-07-29 15:19:49 299

转载 Spring Boot 核心的 25 个注解

1、@SpringBootApplication这是 Spring Boot 最最最核心的注解,用在 Spring Boot 主类上,标识这是一个 Spring Boot 应用,用来开启 Spring Boot 的各项能力。其实这个注解就是@SpringBootConfiguration、@EnableAutoConfiguration、@ComponentScan这三个注解的组合,也可以用这三个注解来代替@SpringBootApplication注解。2、@EnableAuto...

2020-07-29 13:30:23 226

转载 三分钟搞懂 MySQL 隔离级别

三种bug:脏读:例:insert into T values (4, '牛D');,然后没commit。其他进程SELECT读取到的数据是未commit的数据。(数据库只修改了内存没修改外存)不可重复读:例:一个事务范围内两个相同的查询却返回了不同数据(因为中间有进程修改了值并且提交成功)幻读:例:某个事务在读取某个范围的数据,但是另一个事务又向这个范围的数据去插入数据,导致多次读取的时候,数据的行数不一致。READ UNCIMMITTED(未提交读) 在这种隔

2020-06-28 15:08:02 349

原创 面试官:请谈谈数据库的优化

一:简介MySQL性能优化是通过优化各个方面的,不仅仅是优化SQL语句这一方面,而是通过各各方面的优化,每个地方优化一些,这样整体性能就会有明显的提升。二:优化方式1. 优化数据库表结构的设计为什么数据库表的设计会影响性能?字段的数据类型:不同的数据类型的存储和检索方式不同,对应的性能也不同,所以说要合理的选用字段的数据类型。比如人的年龄用无符号的unsigned tinyint即可,没必要用integer数据类型的长度:数据库最终要写到磁盘上,所以字段的长度也会影响着磁盘的I/O操..

2020-06-28 14:19:17 815

原创 分布式事务常用解决方案

常见解决方案分布式事物解决方案可以使用全局事物2pc(两段提交协议)、3pc(三段提交协议),tcc补偿机制、提供回滚接口、分布式数据库 LCN 核心采用3PC+TCC补偿机制什么是XA接口XA–eXtended Architecture 在事务中意为分布式事务XA由协调者(coordinator,一般为transaction manager)和参与者(participa...

2020-04-16 17:44:22 401

原创 windows7 本地搭建ELK 收集项目运行日志

ELK简介ELK是Elasticsearch+Logstash+Kibana简称Elasticsearch 是一个分布式的搜索和分析引擎,可以用于全文检索、结构化检索和分析,并能将这三者结合起来。Elasticsearch 基于 Lucene 开发,现在是使用最广的开源搜索引擎之一。Logstash 简单来说就是一根具备实时数据传输能力的管道,负责将数据信息从管道的输入端传输到管道的输...

2020-04-01 16:50:36 785

原创 Spring Cloud 分布式事务详解及LCN解决方案

在微服务如火如荼的情况下,越来越多的项目开始尝试改造成微服务架构,微服务即带来了项目开发的方便性,又提高了运维难度以及网络不可靠的概率.在说微服务的优缺点时,有对比才会更加明显,首先说一下单体式结构单体式架构在单体式架构中,系统通常采用分层架构模式(MVC),持久化层、表示层,业务逻辑层。架构主要存在以下问题:系统内部互相访问,耦合紧密导致难以维护; 各业务领域需要采用相同的技术...

2020-01-10 17:41:15 1632

原创 ftp命令解决文件的上传和下载

Linux中如何使用ftp命令,包括如何连接ftp服务器,上传or下载文件以及创建文件夹。虽然现在有很多ftp桌面应用(例如:FlashFXP),但是在服务器、SSH、远程会话中掌握命令行ftp的使用还是很有必要的。1.ftp命令  使用格式:ftp [-v] [-d] [-i] [-n] [-g] [-s:filename] [-a] [-w:windowsize] [computer...

2019-10-25 15:39:06 1066

转载 缓存穿透、缓存击穿、缓存雪崩、缓存预热、缓存更新、缓存降级区别和解决方案

一、缓存处理流程前台请求,后台先从缓存中取数据,取到直接返回结果,取不到时从数据库中取,数据库取到更新缓存,并返回结果,数据库也没取到,那直接返回空结果。二、缓存穿透描述:缓存穿透是指缓存和数据库中都没有的数据,而用户不断发起请求,如发起为id为“-1”的数据或id为特别大不存在的数据。这时的用户很可能是攻击者,攻击会导...

2019-10-18 16:47:49 470

原创 十分钟弄懂SQL 索引及优化

索引概念和作用索引是一种使记录有序化的技术,它可以指定按某列/某几列预先排序,从而大大提高查询速度(类似于汉语词典中按照拼音或者笔画查找)。索引的主要作用是加快数据查找速度,提高数据库的性能。MySQL 索引类型从物理存储角度上,索引可以分为聚集索引和非聚集索引。1.聚集索引(Clustered Index)聚集索引决定数据在磁盘上的物理排序,一个表只能有一个聚集索...

2019-10-18 11:12:06 3496

原创 十分钟弄懂 java 中==、equals、hashCode 的区别

先来个总结:==运算符是判断两个对象是不是同一个对象,即他们的地址是否相等 object类中equals与==是等效的 覆写equals更多的是追求两个对象在逻辑上的相等,你可以说是值相等,也可说是内容相等。(覆盖以后,覆盖equals时总要覆盖hashCode ) hashCode用于返回对象的hash值,主要用于查找的快捷性,因为hashCode也是在Object对象中就有的,所以所...

2019-10-14 16:34:49 414 1

转载 Redis 持久化机制RDB和AOF区别

Redis支持两种方式的持久化,一种是RDB方式,一种是AOF方式。可以单独使用其中一种或将二者结合使用。一、RDBRDB方式的持久化是通过快照(snapshotting)完成的,当符合一定条件时Redis会自动将内存中的所有数据进行快照并存储在硬盘上。进行快照的条件可以由用户在配置文件中自定义,由两个参数构成:时间和改动的键的个数。当在指定的时间内被更改的键的个数大于指定的数值时就会进...

2019-10-09 22:53:03 319

原创 centos 7如何优雅的安装mysql 5.7

1、进入官网下载 需要的mysql 版本https://dev.mysql.com/downloads/mysql/我这边下的是mysql-5.7.27-linux-glibc2.12-x86_64.tar.gz2、将mysql安装到/usr/local/mysql下# 解压tar -zxvfmysql-5.7.22-linux-glibc2.12-x86_6...

2019-10-09 09:48:28 268

原创 将外部 jar 安装到本地仓库 使用maven

mvn install:install-file -Dfile=C:\\Users\\admin\Desktop\\lib\\xxx-api-1.0.0.39.jar -DgroupId=com.other.dsp -DartifactId=dsp -Dversion=1.0.0 -Dpackaging=jar-Dfile:文件在本地的存放位置-DgroupId:<groupI...

2019-08-23 19:20:57 322

原创 Spring Boot 文件通过zip压缩包 批量下载

最近项目中新增了一个需求:要求批量下载之前信息导出的word 文件,也就是批量下载。数据是保存在ES 中,导出word 的功能也是写好的。我的思路:传入数据ID分别导出word 文件到服务器某个文件夹。 根据文件地址将所有文件打包成zip文件到服务器某个地址 根据zip文件地址进行下载存在问题:批量导出word 文档,由于数据量大可能会非常耗时。解决:采用的异步方式分...

2019-06-05 11:18:43 10131 3

原创 Spring boot 入门教程-CORS 跨域支持

CORS(Cross-Origin Resource Sharing)”跨域资源共享”,是一个W3C标准,它允许浏览器向跨域服务器发送Ajax请求,打破了Ajax只能访问本站内的资源限制。我们在开发中都会遇到前端请求后台服务器出现跨域错误,下面就讲一下如何让SpringBoot项目支持CORS跨域。第一步 搭建SpringBoot项目,Spring 4.2提供了@CrossOrigion注解实...

2019-05-13 16:14:02 391

原创 SpringBoot 事务注解@Transactional

SpringBoot提供了非常方便的事务操作,通过注解就可以实现事务的回滚,非常方便快捷,下面我们就说一下如何进行事务操作。1. 事务说明在Spring中,事务有两种实现方式,分别是编程式事务管理和声明式事务管理两种方式。编程式事务管理: 编程式事务管理使用TransactionTemplate或者直接使用底层的PlatformTransactionManager。对于编程式事务管理,...

2019-04-25 13:47:09 28442

原创 Spring boot 入门教程-集成Mybatis-Plus

简介MyBatis-Plus(简称 MP)是一个MyBatis的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。愿景我们的愿景是成为 MyBatis 最好的搭档,就像魂斗罗中的 1P、2P,基友搭配,效率翻倍。#特性无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑 损耗小:启动即会自动注入基本 CURD,性能基本...

2019-04-15 10:57:08 1647

转载 Maven scope 属性介绍

scope的属性详解:1.compile:默认值 他表示被依赖项目需要参与当前项目的编译,还有后续的测试,运行周期也参与其中,是一个比较强的依赖。打包的时候通常需要包含进去。2.test:依赖项目仅仅参与测试相关的工作,包括测试代码的编译和执行,不会被打包,例如:junit。3.runtime:表示被依赖项目无需参与项目的编译,不过后期的测试和运行周期需要...

2019-04-03 17:18:21 332

原创 使用POI 导出word模板文件

maven依赖<dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.16</version></dependency>自定义XWPFDocu...

2019-03-21 11:29:32 5281 15

原创 CentOS7 安装node.js

一、切换目录到/usr/local/src    命令行:cd/usr/local/src二、下载node.js(我这里下载的是二进制的源码)  命令行:wget https://nodejs.org/dist/latest-v10.x/node-v10.15.2-linux-x64.tar.gz三、解压压缩包  命令行:tar -zxvf node-v10.1...

2019-03-05 15:30:17 858

原创 CentOS 7 设置开机启动

1、赋予脚本可执行权限(/opt/script/start.sh是你的脚本路径)chmod +x /opt/script/start.sh 2、打开/etc/rc.d/rc.local文件,在末尾增加如下内容/opt/script/start.sh 3、在centos7中,/etc/rc.d/rc.local的权限被降低了,所以需要执行如下命令赋予其可执行权限chmod ...

2019-02-27 17:44:38 309

Spring boot 入门高清视频教程(附源码,笔记)

Spring boot 入门高清视频教程(附源码,笔记),适合新手学习 !!

2018-06-01

Ibatis/mybatis代码生成工具

ibatis 和 mybatis 的代码生成工具

2017-05-19

Spring与quartz整合实例

2017-04-18

空空如也

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

TA关注的人

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