![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
DeepIn
文章平均质量分 94
MayMatrix
J2EE .
展开
-
编程新手该如何调优程序?程序员必备性能调优利器——火焰图
本文主要分享火焰图使用技巧,介绍 systemtap 的原理机制,如何使用火焰图快速定位性能问题原因,同时加深对 systemtap 的理解。让我们回想一下,曾经作为编程新手的我们是如何调优程序的?通常是在没有数据的情况下依靠主观臆断来瞎蒙,稍微有些经验的同学则会对差异代码进行二分或者逐段调试。这种定位问题的方式不仅耗时耗力,而且还不具有通用性,当遇到其他类似的性能问题时,需要重复踩坑、填坑,那么如何避免这种情况呢?俗语有曰:兵欲善其事必先利其器,个人认为,程序员定位性能问题也需要一件“利器”。.转载 2021-06-16 17:48:53 · 426 阅读 · 0 评论 -
Apache Tomcat 8.5 安全配置与高并发优化
优化配置参考一(APR与内存配置)第一步:配置user登录tomcat 参考:https://www.cnblogs.com/kevincaptain/p/10370794.html第二步:性能优化 2.1tomcat的运行模式有3种:bio: tomcat7.0默认的模式,性能非常低下,没有经过任何优化处理和支持.阻塞式I/O操作,表示Tomcat使用的是传统Java I/O操作(即java.io包及其子包)。Tomcat7以下版本默认情况下是以bio模式运行的,..转载 2021-03-24 11:05:59 · 1327 阅读 · 0 评论 -
Tomcat配置优化 maxTread maxConnections 理解
properties.yml配置: (spring版本2.1.3RELEASE) 能点住ctrl左键点击跳转说明配置是正确的server:#tomcat配置tomcat:# 当所有线程都在使用时,建立连接的请求的等待队列长度,默认100accept-count: 1000# 线程池维持最小线程数,默认10min-spare-threads: 4# 允许最大连接数,默认10000,当达到临界值时,系统可能会基于accept-count继续接受连接max-connections: 10000转载 2021-03-24 11:00:57 · 1996 阅读 · 0 评论 -
java并发编程基础:CLH锁的原理及实现
CLH、MCS 队列锁简介一、自旋锁简介通常情况下解决多线程共享资源逻辑一致性问题有两种方式:互斥锁:当发现资源被占用的时候,会阻塞自己直到资源解除占用,然后再次尝试获取; 自旋锁:当发现占用时,一直尝试获取锁(线程没有被挂起的过程,也就没有线程调度切换的消耗);对于这两种方式没有优劣之分,只有是否适合当前的场景;具体的对比就不在继续深入了,如果你很感兴趣可以查看《多处理器编程的艺术》提取码:rznn ;但是如果竞争非常激烈的时候,使用自旋锁就会产生一些额外的问题:可能导...转载 2021-03-12 16:27:38 · 307 阅读 · 0 评论 -
java并发编程之核心:AQS进阶
如果你想深入研究Java并发的话,那么AQS一定是绕不开的一块知识点,Java并发包很多的同步工具类底层都是基于AQS来实现的,比如我们工作中经常用的Lock工具ReentrantLock、栅栏CountDownLatch、信号量Semaphore等,而且关于AQS的知识点也是面试中经常考察的内容,所以,无论是为了更好的使用还是为了应付面试,深入学习AQS都很有必要。CASCAS是乐观锁的一种思想,它假设线程对资源的访问是没有冲突的,同时所有的线程执行都不需要等待,可以持续执行。如果有冲...转载 2021-03-12 16:21:12 · 132 阅读 · 0 评论 -
java并发编程核心:AQS详解#总结
AQS概述:AQS原理AQS:AbstractQuenedSynchronizer抽象的队列式同步器。是除了java自带的synchronized关键字之外的锁机制。AQS的全称为(AbstractQueuedSynchronizer),这个类在java.util.concurrent.locks包AQS的核心思想是,如果被请求的共享资源空闲,则将当前请求资源的线程设置为有效的工作线程,并将共享资源设置为锁定状态,如果被请求的共享资源被占用,那么就需要一套线程阻塞等待以及被唤醒时锁分配的机.转载 2021-03-12 16:17:18 · 185 阅读 · 0 评论 -
java并发编程核心:AQS原理及API
从ReentrantLock的实现看AQS的原理及应用前言Java中的大部分同步类(Lock、Semaphore、ReentrantLock等)都是基于AbstractQueuedSynchronizer(简称为AQS)实现的。AQS是一种提供了原子式管理同步状态、阻塞和唤醒线程功能以及队列模型的简单框架。本文会从应用层逐渐深入到原理层,并通过ReentrantLock的基本特性和ReentrantLock与AQS的关联,来深入解读AQS相关独占锁的知识点,同时采取问答的模式来帮助大家理解AQ.转载 2021-03-12 16:15:58 · 195 阅读 · 0 评论 -
Spring AOP:搞清楚advice的执行顺序
文章目录目录 AOP的核心概念 模拟aspect advice的执行过程 同一aspect,不同advice的执行顺序 不同aspect,advice的执行顺序 同一aspect,相同advice的执行顺序 Transactional Aspect的优先级 AOP的核心概念要完全理解Spring AOP首先要理解AOP的核心概念和术语,这些术语并不是Spring指定的,而且很不幸,这些术语并不能直观理解,但是,如果Spring使用自己的术语,那将更加令人困惑。A.转载 2020-09-11 17:04:11 · 706 阅读 · 0 评论 -
【Filter操作Request/Response数据】HttpServletRequestWrapper使用技巧(自定义session和缓存InputStream)
一、前言 javax.servlet.http.HttpServletRequestWrapper 是一个开发者可以继承的类,我们可以重写相应的方法来实现session的自定义以及缓存InputStream,在程序中可以多次获取request body的内容。二、自定义seesionimport javax.servlet.http.*;public class CustomizeHttpServletRequest extends HttpServletRequestWrapper {转载 2020-09-11 16:33:47 · 1041 阅读 · 0 评论 -
【Filter操作Request/Response数据】java使用Filter过滤器对Response返回值进行修改
有时候在开发过程中会有这样一个场景,有时需要对返回的数据进行处理。比如加密啊,添加某些标记啊等等。这种情况我们可以通过过滤器去处理。过滤器是什么就不介绍了,百度一下,你就知道。看看代码吧:返回值输出代理类:这个类主要是为了吧Response里面的返回值获取到,因为直接Response没有提供直接拿到返回值的方法。所以要通过代理来取得返回值package com.channel.filter; import java.io.ByteArrayOutputStream;import j转载 2020-09-11 16:24:01 · 2420 阅读 · 1 评论 -
SpringBoot之Configuration注解功能列表
在SpringBoot中可以通过@Configuration对某个类注解将该类申明为配置类,以此在代替先前spring版本中配置xml中的功能,并且增加了可读性与维护性。并且在注解类中的类方法中可以通过@Bean对该类方法返回的对象注入到Spring容器中,其方法名也是该对象在spring容器中的对象名。//简单的配置类及对象注入到spring容器中。@Configurationpublic class DemoConfiguration { @Bean() public Stri转载 2020-07-30 19:48:27 · 510 阅读 · 1 评论 -
SpringBoot解耦的扩展机制 Spring Factories功能详解
SpringBoot解耦的扩展机制 Spring Factories介绍及使用https://blog.csdn.net/truelove12358/article/details/107697845Spring Factories功能详解:组件提供者如何编写出仅需系统开发者进行包引入就可以对spring进行bean注入等操作? 其实在spring库中有提供自动化配置的库spring-boot-autoconfigure,我们只需要引入这个库包就可以对已引入的AOP、JDBC、TX..转载 2020-07-30 19:44:15 · 381 阅读 · 0 评论 -
SpringBoot解耦的扩展机制 Spring Factories介绍及使用
Spring Boot中有一种非常解耦的扩展机制:Spring Factories。这种扩展机制实际上是仿照Java中的SPI扩展机制来实现的。什么是 SPI机制SPI的全名为Service Provider Interface.大多数开发人员可能不熟悉,因为这个是针对厂商或者插件的。在java.util.ServiceLoader的文档里有比较详细的介绍。简单的总结下java SPI机制的思想。我们系统里抽象的各个模块,往往有很多不同的实现方案,比如日志模块的方案,xml解析模块、jdbc模块的转载 2020-07-30 19:28:58 · 1132 阅读 · 0 评论 -
Java中的SPI机制
1 SPI是什么SPI全称Service Provider Interface,是Java提供的一套用来被第三方实现或者扩展的API,它可以用来启用框架扩展和替换组件。整体机制图如下:Java SPI 实际上是“基于接口的编程+策略模式+配置文件”组合实现的动态加载机制。系统设计的各个抽象,往往有很多不同的实现方案,在面向的对象的设计里,一般推荐模块之间基于接口编程,模块之间不对实现类进行硬编码。一旦代码里涉及具体的实现类,就违反了可拔插的原则,如果需要替换一种实现,就需要修改代码.转载 2020-07-30 19:17:22 · 345 阅读 · 0 评论 -
Java NIO浅析
NIO(Non-blocking I/O,在Java领域,也称为New I/O),是一种同步非阻塞的I/O模型,也是I/O多路复用的基础,已经被越来越多地应用到大型应用服务器,成为解决高并发与大量连接、I/O处理问题的有效方式。那么NIO的本质是什么样的呢?它是怎样与事件模型结合来解放线程、提高系统吞吐的呢?本文会从传统的阻塞I/O和线程池模型面临的问题讲起,然后对比几种常见I/O模型,一步步分析NIO怎么利用事件模型处理I/O,解决线程池瓶颈处理海量连接,包括利用面向事件的方式编写服务端/客户端程转载 2020-06-04 15:08:45 · 162 阅读 · 0 评论 -
什么是内存屏障(Memory Barrier)以及在java中的应用
1. 指令重排序程序在运行时内存实际的访问顺序和程序代码编写的访问顺序不一定一致,这就是内存乱序访问。内存乱序访问行为出现的理由是为了提升程序运行时的性能。这种内存乱序问题主要是由两种原因引起的:编译器在编译时进行了编译优化,导致指令重排; 在多cpu环境下,为了尽可能地避免处理器访问主内存的时间开销,处理器大多会利用缓存(cache)以提高性能。在这种模型下会存在一个现象,即缓存中的数据与主内存的数据并不是实时同步的,各CPU(或CPU核心)间缓存的数据也不是实时同步的。这导致在同一个时间点,各转载 2020-06-02 15:05:28 · 2393 阅读 · 0 评论 -
Java中的BlockingQueue
1 Java中的阻塞队列1.1 简介一种支持两个附加操作的队列,是一系列阻塞队列类的接口当存取条件不满足时,阻塞在操作处 队列满时,阻塞存储元素的线程,直到队列可用 队列空时,获取元素的线程会等待队列非空 阻塞队列常用于生产者/消费者场景,生产者是向队列里存元素的线程,消费者是从队列里取元素的线程.阻塞队列就是生产者存储元素、消费者获取元素的容器BlockingQueue继承体系阻塞队列不可用时,两个附加操作提供了4种处理方式 抛出异...转载 2020-05-29 14:18:07 · 587 阅读 · 0 评论 -
※HashMap底层实现原理(全)
HashMap底层实现原理(上)本来想先在专栏里简单的说一下二叉树,红黑树的内容后再说HashMap的,但看到评论区里不断的出现HashMap这个词,怕大家等得着急,本篇文章就先说说HashMap吧,前面讲ArrayList和LinkedList时把源码说得很细,只要理解了这两块内容,本篇内容也很好理解,先来看看HashMap在Map这个大家族中的位置。上图中,白色部分是接口,黄色部分是要重点了解的,最好是看一遍源码,绿色部分已经过时,不常用了,但是面试中可能会问到。这里先简单的说一下这几个Ma转载 2020-05-29 12:48:03 · 485 阅读 · 0 评论 -
深入理解HashMap底层原理剖析(JDK1.8) 扩容方法resize()
接下来会从以下几个方面介绍 HashMap 源码相关知识: 1、HashMap 存储结构 2、HashMap 各常量、成员变量作用 3、HashMap 几种构造方法 4、HashMap put 及其相关方法 5、HashMap get 及其相关方法 6、HashMap remove 及其相关方法 7、HashMap 扩容方法 resize() 介绍方法时会包含方法实现相关细节。 先来看一下 HashMap 的继承图: HashMap 根据键的转载 2020-05-29 12:41:59 · 1844 阅读 · 0 评论 -
Java中HashMap底层原理源码分析
在介绍HashMap的同时,我会把它和HashTable以及ConcurrentHashMap的区别也说一下,不过本文主要是介绍HashMap,其实它们的原理差不多,都是数组加链表的形式存储数据,另外本文所介绍的都是JDK1.8版本的。在介绍之前,先看下Map家族的继承体系图:其中,TreeMap是基于树实现...转载 2020-05-07 21:31:09 · 192 阅读 · 0 评论 -
Lucene底层 索引原理
基于Lucene检索引擎我们开发了自己的全文检索系统,承担起后台PB级、万亿条数据记录的检索工作,这里向大家分享下Lucene底层...转载 2020-04-29 17:53:32 · 413 阅读 · 0 评论 -
Lucene索引过程中 内存管理与数据存储
Lucene的索引过程分两个阶段,第一阶段把文档索引到内存中;第二阶段,即内存满了,就把内存中的数据刷新到硬盘上。 倒排索引信息在内存存储方式 Lucene有各种Field,比如StringField,Tex...转载 2020-04-29 17:44:57 · 875 阅读 · 0 评论 -
Lucene索引存储结构
内存管理 与 数据存储索引文档的总体结构 索引(index):Lucene的索引由许多个文件组成,这些文件放在同一个目录下 段(segment):一个Lucene的索引由多个段组成,段与段之间是独立的。添加新的文档时可以生成新的段,达到阈值(段的个数,段中包含的文件数等)时,不同的段可以合并。在文件夹下,具有相同前缀的文件属于同一个段segments...转载 2020-04-29 17:41:30 · 2567 阅读 · 1 评论 -
elasticsearch的核心概念、分布式特性
1、lucene和elasticsearch的前世今生lucene,最先进、功能最强大的搜索库,直接基于lucene开发,非常复杂,api复杂(实现一些简单的功能,写大量的java代码),需要深入理解原理(各种索引结构)elasticsearch,基于lucene,隐藏复杂性,提供简单易用的restful api接口、java api接口(还有其他语言的api接口)(1)分布式的文档存储引擎...转载 2020-04-26 10:52:00 · 291 阅读 · 0 评论 -
Lucene、solr以及elasticsearch之间的区别和联系
首先分别说明三者的概念:Lucene是一套信息检索工具包,并不包含搜索引擎系统,它包含了索引结构、读写索引工具、相关性工具、排序等功能,因此在使用Lucene时仍需要关注搜索引擎系统,例如数据获取、解析、分词等方面的东西。而solr和elasticsearch都是基于该工具包做的一些封装。Solr是一个有HT...转载 2020-04-26 10:08:20 · 1874 阅读 · 0 评论 -
什么是"零拷贝"技术
前言从字面意思理解就是数据不需要来回的拷贝,大大提升了系统的性能;这个词我们也经常在java nio,netty,kafka,RocketMQ等框架中听到,经常作为其提升性能的一大亮点;下面从I/O的几个概念开始,进而在分析零拷贝。I/O概念1、缓冲区缓冲区是所有I/O的基础,I/O讲的无非就是把数据移进或移出缓冲区;进程执行I/O操作,就是向操作系统发出请求,让它要么把缓冲区的数...转载 2020-01-16 15:00:31 · 3537 阅读 · 1 评论