自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 带思考的JVM内部锁升级过程

1、为什么讲这个?总结AQS之后,对这方面顺带的复习一下。以下几个高频问题出发对象在内存中的内存布局是什么样的描述synchronized和ReentrantLock的底层实现和重入的底层原理谈谈AQS,为什么AQS底层是CAS+volatile描述下锁的四种状态和锁升级过程?Object o = new Object() 在内存中占用多少字节?自旋锁是不是一定比重量级锁效率高?打开偏向锁是否效率一定会提升?重量级锁到底重在哪里?重量级锁什么时候比轻量级锁效率高,同样反之呢?2、

2021-09-06 17:45:07 226

原创 AQS底层原理

1、AQS能干嘛?是什么?能干嘛:加锁就会有阻塞,有阻塞就需要排队,实现排队必然需要有某种形式的队列来进行管理。是什么?废话:抽象的队列同步器翻译一下:AQS是用来构建锁或者其它同步器组件的重量级基础框架及整个JUC体系的基石,通过内置的FIFO队列来完成资源获取线程的排队工作,并通过一个int类变量表示持有锁的状态。2、前置知识2.1 可重入锁举个例子:你开锁进入你家房子之后,里面的房间不需要再开锁才能进去,所有房间对你畅通无阻。当然如果你跟你老婆吵架了不让上床另当别论。可重入锁有名递归

2021-05-23 17:10:25 626 4

原创 RocketMq的控制台安装以及RocketMqTemplate的使用

跟别的mq一样,RocketMq也有自己的控制台,本章讲解控制台的安装以及在实际开发中RocketMq的使用。1、RocketMq控制台安装首先进入github中RocketMq控制台的源码中:添加链接描述将其下载下来,如图:可以直接通过down的方式也可以通过git去拉,这里简单为主就直接下载了,如图:下载好了之后解压到我们本地,目录是这样的:然后进入rockemq-console,这个就是我们控制台的源码了,在使用之前需要修改一下console中的配置,配置成我们自己的rocketmq-s

2020-09-06 22:03:18 2103

转载 HTTPS为什么安全

本文将分两个专题去理解HTTPS。专题一:HTTPS为什么安全1、http为什么不安全?http协议属于明文传输协议,交互过程以及数据传输都没有进行加密,通信双方也没有进行任何认证,通信过程非常容易遭遇劫持、监听、篡改,严重情况下,会造成恶意的流量劫持等问题,甚至造成个人隐私泄露(比如银行卡卡号和密码泄露)等严重的安全问题。可以把http通信比喻成寄送信件一样,A给B寄信,信件在寄送过程中,会经过很多的邮递员之手,他们可以拆开信读取里面的内容(因为http是明文传输的)。A的信件里面的任何内容(包括

2020-06-24 15:30:19 234

原创 根据密码解密pdf文件,转换成没密码的pdf ,然后获取pdf的目录数据

业务背景:需要将加密的pdf解密,然后获取到pdf文件的目录数据import com.itextpdf.text.pdf.PdfReader;import com.itextpdf.text.pdf.PdfStamper;import org.apache.pdfbox.io.RandomAccessBuffer;import org.apache.pdfbox.pdfparser.PDFParser;import org.apache.pdfbox.pdmodel.PDDocument;imp

2020-06-10 10:57:31 391

原创 业务问题:用java将加密的pdf文件转化为图片问题,支持png,jpg,pdf互转

项目业务描述:内部的一些pdf文件是加密的,要把pdf解密并进行转图片操作,并且像素不能受影响。看了一些网页上好像没有太好的方法,一般都用spire这种第三方的库,超过10页还要收费。决定自己实现一个。使用ImageMagick和ghostscript,作为pdf转图片的插件。准备环境:1、linux环境下安装ImageMagick和ghostscriptyum install -y ...

2020-04-24 17:10:22 378

原创 小白也能看懂的Cookie跟Session的区别

1、什么是Cookie?首先为了能充分理解为什么引入Cookie和Cookie是什么,先看了例子。不然官网上定义的概念不太容易看懂。eg:我今天想找老王吃放,打电话给老王Me:老王啊,上次白剽很爽,今天再一起吃个饭呗?老王:今天有点事啊,下次再约呗Me:我插,有啥事比吃饭还重要啊,你这日子过退步了老王:额,在哪里吃?Me:上海和平饭店。。。。旁边的烧烤店老王:我靠,我听和平饭店还爽...

2020-04-20 09:58:22 513

原创 扒一扒ThreadLocal原理及应用

先总述,后分析深挖过ThreadLocal之后,一句话概括:Synchronized用于线程间的数据共享,而ThreadLocal则用于线程间的数据隔离。所以ThreadLocal的应用场合,最适合的是按线程多实例(每个线程对应一个实例)的对象的访问,并且这个对象很多地方都要用到。  数据隔离的秘诀其实是这样的,Thread有个TheadLocalMap类型的属性,叫做threadLocals...

2020-04-17 22:56:03 289

原创 java基础返璞归真--谈谈对多态的理解

记得这个问题当初只是在校招的时候才会问题,后来无意中听到同事面试一个社招提到这个问题?引起了我的思考,谈谈想法1、什么是多态?某一类事物的多种存在形态。例如:动物中的猫、狗猫这个对象对应的类型是猫类型, 猫 x = new 猫();同时猫也属于动物中的一种。也可以把猫称为动物。动物 x = new 猫() ; //父类型引用指向子类对象。动物是猫和狗具体事物中抽取出来的父类型,父类型...

2020-04-17 16:52:02 133

原创 业务:pdf转图片问题(解决非标准pdf转图片空白问题)

业务说明:由于业务相关要求,对接第三方PDF文件转JPG之后上传服务器,同时还进行ocr识别。看了一下CSDN上面的一些帖子,大部分都无法处理非标准的PDF文件,比如用打印机扫描的PDF文件可能是歪着的,就会转换图片失败。前提:使用Ghostscript转换。需要先安装gs软件,然后将path: D:/gs/bin/gs9.23/bin/gswin32c 写入到gsPath配置文件中。后面进行...

2020-03-18 16:35:02 1751

原创 用Redis实现分布式锁以及redission使用

记上一篇用ZK实现分布式所之后,现在在将redis实现分布式版本补上。相比与ZK的方式简单很多。先看下,redis分布式是怎么演变的来的,redission如何使用的。首先导入Redisson 和 StringRedisTemplate的依赖包。 <!--redisson依赖--> <dependency> <groupId>org.redisson...

2020-02-22 19:17:14 1645

原创 多线程及并发面试基础(5)——Java中各种锁机制

1、公平锁/非公平锁公平锁:是指多个线程按照申请锁的顺序来获取锁,类似排队打饭,先到先得。非公平锁:是指多个线程获取锁的顺序并不是按照申请锁的顺序,有可能后申请的线程比先申请的线程优先获取锁在高并发的情况下,有可能会造成优先级反转或者饥饿现象举个例子:如果是公平锁,那么各个线程交替执行。非公平锁就是看哪个线程牛逼抢到的快准狠就它执行,不交替。看代码:设置公平锁:public clas...

2020-02-10 11:50:23 222

原创 多线程及并发面试基础(8)——线程池原理及运用

接上一节讲的阻塞队列的生产者消费问题之后,接下来将就阻塞队列的另外一个使用案列——线程池原理以及使用。1、为什么要使用线程池在我们实际的生产中,线程池的使用频率及高。那么我们在回顾一下为什么要使用线程池呢?线程池做的工作主要是控制运行的线程的数量,处理过程中将任务加入队列,然后在线程创建后启动这些任务,如果先生超过了最大数量,超出的数量的线程排队等候,等其他线程执行完毕,再从队列中取出任...

2020-02-09 22:17:40 217

原创 多线程及并发面试基础(7)——阻塞队列

1、阻塞队列定义:顾名思义,首先它是一个队列,而一个阻塞队列在数据结构中所起的作用大致如下线程1往阻塞队列中添加元素二线程2从队列中移除元素当阻塞队列是空时,从队列中获取元素的操作将会被阻塞.获取当阻塞队列是空时,从队列中获取元素的操作将会被阻塞当阻塞队列是满时,往队列中添加元素的操作将会被阻塞.添加当阻塞队列是满时,往队列中添加元素的操作将会被阻塞.2、为什么用?有什么好处?在...

2020-02-09 21:28:11 331

原创 多线程及并发面试基础(6)——CountDownLatch/CyclicBarrier/Semaphore

CountDownLatch定义:让一些线程阻塞直到另一些线程完成一些列操作之后才被唤醒。即使门闩的意思,给定一个数,当这个数被减到0时才能开始运行另一个线程。主要有两个方法一个是await方法等待,一个是countDown方法让门闩减一。可以简单理解为:从自助餐拿的吃的必须吃完才会开门放人离开,不然打断腿。代码:假如拿了5个蛋糕,必须吃完才可以走。/*** * CountDown...

2020-02-09 20:59:16 353

原创 多线程及并发面试基础(4)——谈谈集合类(Arraylist)

1、谈谈ArraylistA. ArrayList 底层数据结构是数组,数组的特点就是可以快速随机访问,直接根据下标定位,缺点是插入和删除速度比较慢,需要移动元素。B. ArrayList 每次扩容之后的大小为之前的 1.5 倍。默认初始容量大小为 10。ArrayList只不过是对数组的包装,因为数组在内存中分配时必须指定长度,且一旦分配好后便无法再增加长度,即不可能在原数组后面再接上一段的...

2020-02-09 20:47:57 141

原创 多线程及并发面试基础(3)——CAS中的ABA问题

什么时ABA问题CAS算法实现的一个重要前提需要取出内存中中某时刻的数据并在当下时刻进行比较并替换,如果在这个时刻时间差中会导致数据的变化。例如:线程A从内存中读取值为1,这个时候线程2也读取了值1,线程B第一次把这个值修改为2,第二次又把这个值修改为1。然后线程A想对变量进行修改,首先进行CAS操作发现内存中的值确实是1,然后线程A操作成功。尽管线程A的CAS操作成功,但是不代表这个中间的...

2020-02-09 20:24:01 173

原创 多线程及并发面试基础(2)——volatile不保证原子性的解决方案

接上上一讲volatile的内容,我们说volatile有三个特性。其中一个不保证原子性。那么并发下面对num++之类简单运算且不用synchronized怎么实现呢?我们使用并发包下面的原子操作类。代码如下:class myData1{ volatile AtomicInteger atomicInteger = new AtomicInteger(0); void add(){...

2020-02-09 20:02:58 255

原创 多线程及并发面试基础(1)——谈谈volatile的理解

对多线程及并发面试基础的小总结针对面试中的问题,用理论–代码–总结讲各个问题讲清楚。1、谈谈你对volatile的理解 volatile是Java虚拟机提供的**轻量级**的同步机制。为什么这里是轻量级,而我们要把synchronized当做是重量级的锁。首先看看volatile的三个理论:保证可见性不保证原子性(该点正是volatile是轻量级的同步机制的原因)禁止指令重排1...

2020-02-09 19:09:50 264

原创 ZooKeeper实现分布式锁

针对面试的一些题目:先给出Zookeeper分布式锁的实现1、为什么要用分布式锁、用在哪里?2、怎么出来的?3、有没有手写过一分分布锁衍生题目1、高并发系统里面如何高效的只允许一个线程修改一条记录2、分布式情况下,怎么解决订单号生成的重复问题?先思考一个问题:什么是分布式锁?为什么需要分布式锁?用synchronized和ReentrantLock不就好么?单机版本部署所有的服...

2020-01-24 20:08:17 504

原创 linux机器变慢排查方式以及CPU占用过高排查优化

生产上遇见linux异常变慢如何排查?基本上出现慢的问题,90%的可能都是cpu或者内存出现了问题。使用命令查看定位机器的性能细节。1、查案整体机器性能使用top命令。1.1 cpu1.2 mem1.3 id=idle 机器空闲率,越高越好1.4 load average:系统负载。后面 三个值,分别是系统1分钟,5分钟,15分钟的系统平均负载率。通过计算算出平均负载率。1.5 ...

2020-01-24 11:45:40 1506 2

原创 mysql之如何设计一个关系型数据库

1、数据库架构问题1:思考一下如果是你设计一个数据库,你会怎么设置?首先这里要知道数据库有什么核心功能?程序实例( 管理逻辑存储)存储管理缓存机制(优化执行效率)SQL解析日志管理权限划分(多用户管理)容错机制索引管理(优化查询效率)锁管理(支持并发)2、数据库执行顺序① 连接器:身份及权限认证② 查询缓存(即将淘汰)③ 分析器词法分析:提取关键词(要干嘛...

2020-01-07 15:33:15 336

原创 Mysq之索引(二)——存储引擎和聚集索引、非聚集索引

1、 什么是存储引擎存储引擎说白了就是如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法。在Oracle 和SQL Server等数据库中只有一种存储引擎,所有数据存储管理机制都是一样的。而MySql数据库提供了多种存储引擎。如下图:工作一般主要使用两种:InnoDB和MyISAM。InnoDB 事务型数据库的首选引擎,支持事务安全表(ACID),支持行锁定和外键...

2020-01-07 15:26:32 246

原创 Mysq之索引(一)——索引数据结构

线上满查询sql,优化? 看下sql查询条件,索引失效,慢sql日志。为什么加索引之后效率就高了很多倍。1、索引是帮助Mysql高效获取数据的排好序的数据结构。select * from t where t.col2=89 limit 1如果不加索引的话查询一条一条往下,需要查询6次才可以找到。经过了6次磁盘I/O,效率不高。如果对col2建立了索引了之后,假如索引的数据结构如上面二叉...

2020-01-07 11:36:29 197

原创 手写一个简单的springMVC技术预热

1、spring和springMVC的关系和区别 spring 主要是对bean的管理, 最大的用处就是通过IOC/AOP解耦;SpringMVC是基于Spring功能之上添加的Web框架,想用SpringMVC必须先依赖Spring。springmvc主要关注mvc(三层model、view、controller),核心类DispatchServlet。2、DispatcherSe...

2020-01-06 14:52:58 362

原创 Java高并发编程笔记(一)同步器

本篇主要总结同步器的相关例子:包括synchronized、volatile、原子变量类(AtomicXxx)、CountDownLatch、ReentrantLock和ThreadLocal。还涉及到wait和notify/notifyAll。以及一些面试题如:生产者、消费者问题回忆关于线程的几个基本知识点:线程的概念(程序中不同的执行路径可以放到不同的CPU中同步运行); 如何启...

2019-12-26 17:18:03 484 1

原创 写两个线程,线程1添加10个元素到容器,线程2对元素个数做监控,个数为5时,线程2给出提示并结束

思路:开启两个线程,线程t1添加元素,线程t2监控元素个数为5。如何保证元素个数为5的时候t2执行,这里就思考如何再元素个数为5的时候t2拿到锁执行,t1等待。直到t2执行完之后t1再拿到锁。第一种方法:public class waitFiveSecondTest { volatile List list = new ArrayList<>(); pu...

2019-12-25 10:39:59 551 1

原创 浅谈volatile基本原理

内存可见性  volatile是Java提供的一种轻量级的同步机制,在并发编程中,它也扮演着比较重要的角色。同synchronized相比(synchronized通常称为重量级锁),volatile更轻量级,相比使用synchronized所带来的庞大开销,倘若能恰当的合理的使用volatile,自然是美事一桩。  为了能比较清晰彻底的理解volatile,我们一步一步来分析。首先来看看...

2019-12-24 17:44:35 143

原创 TCP的流量控制——滑动窗口

TCP利用滑动窗口实现流量控制。一般来说,我们总是希望数据传输的更快一些。但是如果发送方把数据发送的很快,接受方就可能来不及接收,这就会造成数据的丢失。 所谓的流量控制就是让发送发的发送速率不要太快,要让接受方来得及接收数据。一般用于流量控制使用停止等待和滑动窗口进行流量控制。下面使用TCP流量控制举例,假设主机A和主机B,TCP发送的每个报文包含100字节。接受方主机B通知...

2019-12-24 17:01:00 714

原创 TCP的拥塞控制看这篇就足够了

先介绍拥塞控制的基本条件: 在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络性能就要变坏,这种情况叫做拥塞。在计算机网络中的链路容量(即带宽)、交换节点中的缓存和处理机等,都是网络资源 若出现拥塞而不进行控制,整个网络的吞吐量将随输入负荷的增大而下降。好吧,一本正经果然不适合刚开始想学习的人。举个例子:交通十字路口是有红路灯的,如果没有按...

2019-12-22 18:25:12 897

原创 Spring事务注解实现的原理

Spring事务注解是个典型的Spring AOP的注解。方法上面加上@Transactional,方法就有了事务的能力。面试中:基于动态代理讲更多的东西。。。。为什么呢?--->其实里面核心也是动态代理。在一个使用了ProfitDetailService对象方法上面加入了@Transactional注解,正常来说我们导入的应该是ProfitDetailServiceImp对...

2019-12-09 17:05:29 4616

原创 【java设计模式】之 代理(Proxy)模式(上)

先来看下代理模式的定义和目的 定义:给目标对象提供一个代理对象,并由代理对象控制对目标对象的引用 目的:1、通过引入代理对象的方式来简介访问目标对象,防止直接访问目标对象给系统带来不必要的复杂性 2、通过代理对象对原有的业务增强好吧,这看上去完全不像人话,那我举个例子把这个说成人话把。如下: 张三现在...

2019-12-09 14:43:04 209

原创 【java设计模式】之 代理(Proxy)模式(下)

接上一篇代理(Proxy)模式,看下proxy内部到底做了什么处理。通过上篇的代码debug,如图p发现这里调用proxy发现如下图中的$Proxy0和$Proxy1代理类,如何来的呢?先回顾一些知识:类的完整生命周期如图:一般类的完整生命周期从源文件开始,然后通过javac编译成字节码文件,然后通过类加载机制在元空间(1.7之前为方法区)生成class对象,然后new出实例化...

2019-12-09 14:42:12 156

原创 使用SUBSTRING_INDEX将数据库某字段分割然后赋给另外一个字段

业务场景:历史数据展示的时候数据根据sort字段排序,sort字段定义为double(20,0) ,第三方传过来的数据sort又存在小数点的情况,比如传过来的3.25,3.5在数据库存储的时候都是3。导致排序展示的时候乱序。比较好处理的是,因为项目还存储了页码,见下图。这里将page_first_to_last中的字段根据—分割并将值赋值给sort,即可完美解决历史数据问题。UPDAT...

2019-12-04 16:01:36 351

原创 记一次对接第三方数据传输nginx出现“504 Gateway Time-out”的解决方法

业务场景:第三发团队直接将数据通过http请求将数据通过接口传给我们,然后我们再进行入库。项目涉及到大量图片信息,不仅要去第三方fastDFS服务器上下载图片还有对图片进行ocr识别导致图片数据量很大时,会报错504服务相应超时。项目中使用了nginx,所以这里解决超时问题要修改nginx配置文件。1.问题分析nginx访问出现504 Gateway Time-out,一般是由于程序执行时间...

2019-12-04 15:46:37 1157

转载 记一次解决OutOfMemoryError:Java heap space

业务场景:项目中涉及到大量图片导出,另外中途使用I/O对图片进行了处理,图片个数过多导致内存溢出。https://blog.csdn.net/lyflyyvip/article/details/82288719使用OutOfMemoryError神器jvisualvm(从cmd进入)看一下内存情况,跟这篇博客业务情况很类似,但是不同的是内存溢出的问题并不是相关少部分代码导致的。实际业...

2019-12-04 15:40:02 215

原创 mybatis中使用_parameter获取参数进行条件查询

业务场景:数据查询业务逻辑改变,但是要兼容历史数据。而当前逻辑的数据需要根据某些条件去判断是否查询。使用_parameter获取参数进行判断mapper:Integer getNoFJEvidenceNum(@Param("case_id") String case_id, @Param("isFj") int isFj); //isFj就是当前逻辑判断查询条件xml:&...

2019-12-04 15:14:14 895

原创 给图片添加水印,并支持浏览器下载输出

业务需求:给图片新增水印,并支持浏览器下载导出成zip包。1、第一反应,通过画笔给图片新增加水印,图片新增水印成功,但是通过IO流导出到浏览器下载的时候中文变成方格,检查了一遍文字格式都是UTF-8的也不知道问题再哪里。所以这种方法,暂时只支持单一的对图片新增水印功能,不支持IO流的读写输出中文乱码,遇见想通过问题的哪位大佬可以帮答一下。系统是Windows的。public clas...

2019-11-08 18:09:45 544

原创 谈谈Spring IOC原理

SpringIoc就是控制反转或者叫依赖注入 :就是创建组件和使用分离。然而这是句废话,面试说了跟没说一样的效果。我们从IOC的基本思想出发,为什么要有IOC的概念。首先,举个例子,图片从慕课网视频上面copy过来的,只要能弄懂,不择手段。DI举例,如果要设计一个行李箱的话,最底层为轮子,轮子设计好了之后设计底盘,然后直到设计完成行李箱的过程,那么如果中途XX公司的设计师忽然改了轮子设...

2019-10-21 14:59:06 238

原创 GET 和 POST 请求的优缺点、区别

首先GET和POST是HTTP请求的两种基本方法,要说它们的区别,接触过WEB开发的人都能说出一二。一般来说,我们会从三个点回答1、GET把参数包含在URL中,POST通过request body传递参数。所以相比GET,POST要更加安全2、数据库层面GET具有幂等性和安全性,POST不符合3、其他层面:GET可以被缓存、被存储,而POST不行但是很可惜,这不是面试官想...

2019-10-21 14:41:47 6197 2

数据结构中的顺序表储存

数据结构中顺序表的储存结构,数据的查找,添加,删除.优点:可以直接通过下标查找到要找的数据,密度大.缺点:删除和添加要移动大量的元素,会产生碎片

2014-01-02

空空如也

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

TA关注的人

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