- 博客(138)
- 收藏
- 关注
原创 JVM调优参数、方法、工具以及案例总结
这种文章挺难写的,一是JVM参数巨多,二是内容枯燥乏味,但是想理解JVM调优又是没法避开的环节,本文主要用来总结梳理便于以后翻阅,主要围绕四个大的方面展开,分别是JVM调优参数、JVM调优方法(流程)、JVM调优工具、JVM调优案例,调优案例目前正在分析,会在将来补上。垃圾回收有关参数参数部分,这儿只是做一个总结,处理器组合参数-XX:+UseSerialGC = Serial New (DefNew) + Serial Old适用于小型程序。默认情况下不会是这种选项,HotSpot会
2022-03-28 15:57:46
506
原创 Java并发面试题整理
1、并发编程三要素?2、实现可见性的方法有哪些?3、多线程的价值?4、创建线程的有哪些方式?5、创建线程的三种方式的对比?6、线程的状态流转图7、Java 线程具有五中基本状态8、什么是线程池?有哪几种创建方式?9、四种线程池的创建:10、线程池的优点?11、常用的并发工具类有哪些?12、CyclicBarrier 和 CountDownLatch 的区别13、synchronized 的作用?14、volatile 关键字的作用15、什么是 CAS
2022-03-28 15:04:29
1884
原创 AVA网络编程基本功之Servlet与Servlet容器
Servlet与Servlet容器关系Servlet比较这两个的区别, 就得先搞清楚Servlet 的含义, Servlet (/ˈsərvlit/ ) 翻译成中文就是小型应用程序或者小服务程序, 与之相类似的是Server (/ˈsɜːrvər/), 翻译过来是服务器的意思, 可见这二者承担类似的功能,但是Servlet更轻量,web开发的本质就一句话:客户端和服务器交换数据。于是使用 Java 的 Socket 套接字进行编程,去处理客户端来的 tcp 请求,经过编解码处理读取请求体,获取请
2022-03-28 14:37:33
1725
原创 阿里程序员总结出的Java并发组件(详细)-高并发与多线程
Java并发组件一之CountDownLatch使用场景:一个或N个线程,等待其它线程完成某项操作之后才能继续往下执行。CountDownLatch描述的是,一个或N个线程等待其他线程的关系。使用方法:设CountDownLatch个数:CountDownLatch countDownLatch=new CountDownLatch(3); 在等待线程中await:countDownLatch.await(); 在其他线程中减少count值:countDownLatch.getCount
2022-03-28 13:54:21
834
原创 高并发之ReentrantLock、CountDownLatch、CyclicBarrier(一)
本系列研究总结高并发下的几种同步锁的使用以及之间的区别,分别是:ReentrantLock、CountDownLatch、CyclicBarrier、Phaser、ReadWriteLock、StampedLock、Semaphore、Exchanger、LockSupport。由于博客园对博客字数的要求限制,会分为三个篇幅:ReentrantLockReentrantLock重入锁,是实现Lock接口的一个类,也是在实际编程中使用频率很高的一个锁,支持重入性,表示能够对共享资源能够重复加锁,即当前
2022-03-28 13:52:27
329
原创 高并发之Phaser、ReadWriteLock、StampedLock(二)
PhaserPhaser是JDK7开始引入的一个同步工具类,适用于一些需要分阶段的任务的处理。它的功能与CyclicBarrier和CountDownLatch有些类似,功能上与 CountDownLatch 和 CyclicBarrier类似但支持的场景更加灵活类似于一个多阶段的栅栏,并且功能更强大,我们来比较下这三者的功能:同步器 作用 CountDownLatch 倒数计数器,初始时设定计数器值,线程可以在计数器上等待,当计数器值归0后,所有等待的线程继续执行 Cycli.
2022-03-28 13:52:17
152
原创 高并发之Semaphore、Exchanger、LockSupport(三)
Semaphore信号量(Semaphore),有时被称为信号灯,是在多线程环境下使用的一种设施, 它负责协调各个线程, 以保证它们能够正确、合理的使用公共资源。Semaphore分为单值和多值两种,前者只能被一个线程获得,后者可以被若干个线程获得。情境引入以一个停车场是运作为例。为了简单起见,假设停车场只有三个车位,一开始三个车位都是空的。这是如果同时来了五辆车,看门人允许其中三辆不受阻碍的进入,然后放下车拦,剩下的车则必须在入口等待,此后来的车也都不得不在入口处等待。这时,有一辆车离开停
2022-03-28 13:52:07
157
原创 吊爆天,面对阿里面试官他是这样回答Spring AOP介绍与使用的
Spring AOP介绍与使用AOP:Aspect Oriented Programming 面向切面编程OOP:Object Oriented Programming 面向对象编程面向切面编程:基于OOP基础之上新的编程思想,OOP面向的主要对象是类,而AOP面向的主要对象是切面,在处理日志、安全管理、事务管理等方面有非常重要的作用。AOP是Spring中重要的核心点,虽然IOC容器没有依赖AOP,但是AOP提供了非常强大的功能,用来对IOC做补充。通俗点说的话就是在程序运行期间,将某段代码动
2022-03-27 15:17:38
117
原创 详细的解析SpringMVC他两交配的问题
详解SpringMVC一、什么是MVC?MVC是模型(Model)、视图(View)、控制器(Controller)的简写,是一种软件设计规范。就是将业务逻辑、数据、显示分离的方法来组织代码。MVC主要作用是降低了视图与业务逻辑间的双向偶合。MVC不是一种设计模式,MVC是一种架构模式。当然不同的MVC存在差异。Model(模型):数据模型,提供要展示的数据,因此包含数据和行为,可以认为是领域模型或JavaBean组件(包含数据和行为),不过现在一般都分离开来:Value Object(数据.
2022-03-27 15:03:34
72
原创 我们来详细的认识认识Spring
Spring初识1、框架框架就是一些类和接口的集合,通过这些类和接口协调来完成一系列的程序实现。JAVA框架可以分为三层:表示层,业务层和物理层。框架又叫做开发中的半成品,它不能提供整个WEB应用程序的所有东西,但是有了框架,我们就可以集中精力进行业务逻辑的开发而不用去关心它的技术实现以及一些辅助的业务逻辑。大家熟知的Structs和Spring就是表示层和业务层框架的强力代表。(说的太官方了) 人话: 框架就是某些个人或者组织定义了一系列的类或者接口,提前定义好了一些实现,用户可以在这
2022-03-27 14:43:01
148
原创 Mybatis报错:Could not find resource mybatis-conf.xml
Mybatis报错:Could not find resource mybatis-conf.xml报错截图:报错内容:java.io.IOException: Could not find resource mybatis-conf.xml at org.apache.ibatis.io.Resources.getResourceAsStream(Resources.java:114) at org.apache.ibatis.io.Resources.getResourceAsS
2022-03-27 14:27:43
1698
原创 高级程序员师傅的师傅:详解Mybatis拦截器(从使用到源码)
详解Mybatis拦截器(从使用到源码)MyBatis提供了一种插件(plugin)的功能,虽然叫做插件,但其实这是拦截器功能。本文从配置到源码进行分析.一、拦截器介绍MyBatis 允许你在已映射语句执行过程中的某一点进行拦截调用。默认情况下,MyBatis 允许使用插件来拦截的方法调用包括:Executor (update, query, flushStatements, commit, rollback, getTransaction, close, isClosed) Para
2022-03-27 14:21:51
1305
原创 最新阿里面试官与我的对战—索引有关的问题以及知识点索引概念
阿里面试中关于索引有关的问题以及知识点索引概念索引概念、索引模型我们是怎么聊到索引的呢,是因为我提到我们的业务量比较大,每天大概有几百万的新数据生成,于是有了以下对话:面试官:你们每天这么大的数据量,都是保存在关系型数据库中吗?我:是的,我们线上使用的是MySQL数据库面试官:每天几百万数据,一个月就是几千万了,那你们有没有对于查询做一些优化呢?我:我们在数据库中创建了一些索引(我现在非常后悔我当时说了这句话)。这里可以看到,阿里的面试官并不会像有一些公司一样拿着题库一道一.
2022-03-27 14:06:54
93
原创 吊爆了,一篇带你学好(MySQL设计之Schema与数据类型优化)
一、数据类型优化1、更小通常更好应该尽量使用可以正确存储数据的最小数据类型,更小的数据类型通常更快,因为它们占用更少的磁盘、内存和CPU缓存,并且处理时需要的CPU周期更少,但是要确保没有低估需要存储的值的范围,如果无法确认哪个数据类型,就选择认为不会超过范围的最小类型。案例:设计两张表,设计不同的数据类型,查看表的容量2、简单就好简单数据类型的操作通常需要更少的CPU周期,例如,1、整型比字符操作代价更低,因为字符集和校对规则是字符比较比整型比较更复杂2、使用mysql自建类型
2022-03-27 13:03:48
242
原创 看过来,看过来,最经典的MySQL调优之索引优化
一、索引基本知识1、索引的优点1、减少了服务器需要扫描的数据量2、帮助服务器避免排序和临时表例子:select * from emp orde by sal desc;那么执行顺序:所以有索引的话就不会创建零时表,临时表中,磁盘零时表比内存临时表更加的消耗性能。3、将随机IO变成顺序IO如何理解随机IO与顺序IO呢?如图:这是一个磁盘,B是几何扇区(仅做标记,无特殊含义),A是磁道,C是扇区(sector,是物理读写的基本单位,通常是512字节),
2022-03-27 13:03:39
2162
原创 阿里顶级程序员轻松带你掌握MySQL调优之查询优化
一、查询慢的原因1、网络(1)网络丢包,重传这个比较容易理解。当SQL 从客户端发送到数据库,执行完毕,数据库将结果返回给客户端,这个将数据返回给客户端的过程本质是网络包传输。因为链路的不稳定性,如果在传输过程中发送丢包会导致数据包重传,进而增加数据传输时间。从客户端来看,就会觉得SQL 执行慢。(2)网卡满 比如大字段如果公司业务体量很大,比如平时每天300w订单的电商平台,平台大促(双十一,618)的时候极有可能出现网卡被打满。网卡带宽被占满类似各种节假日高速公路收费站(网卡)拥堵导
2022-03-27 13:03:31
558
原创 阿里高级程序员:MySQL调优之分区表
一、分区表的应用场景1、为什么是用分区表?表非常大以至于无法全部都放在内存中,或者只在表的最后部分有热点数据,其他均是历史数据,分区表是指根据一定规则,将数据库中的一张表分解成多个更小的,容易管理的部分。从逻辑上看,只有一张表,但是底层却是由多个物理分区组成。2、使用分区表的好处(1)数据更容易维护批量删除大量数据可以使用清除整个分区的方式 对一个独立分区进行优化、检查、修复等操作(2)高效利用设备数据可以分布在不同的物理设备上,高效地利用多个硬件设备,和单个磁盘或者文件系
2022-03-27 13:03:21
407
原创 哇塞,最详细的MySQL调优性能监控之performance schema
一、performance_schema的介绍performance:性能schema:图(表)示,以大纲或模型的形式表示计划或理论。MySQL的performance schema 用于监控MySQL server在一个较低级别的运行过程中的资源消耗、资源等待等情况。特点1、提供了一种在数据库运行时实时检查server的内部执行情况的方法。performance_schema 数据库中的表使用performance_schema存储引擎。该数据库主要关注数据库运行过程中的性能相关的
2022-03-26 11:30:00
500
原创 浅析虚拟机内存管理模型
Java虚拟机在执行Java程序的过程中会把Java程序所管理的内存划分为若干个不同的数据区域,这些区域可以划分为5各部分:虚拟机栈、堆、方法区、本地方法栈、程序计数器,如图:虚拟机栈Java虚拟机栈(Java Virtual Machine Stack)是线程私有的,它的生命周期与线程相同。也就是,每个方法被执行的时候,Java虚拟机都会同步创建一个栈帧 (Stack Frame)用于存储局部变量表、操作数栈、动态连接、方法出口等信息。每一个方法被调用直至执行完毕的过程,就对应着一个栈帧在虚拟
2022-03-25 15:47:54
1786
原创 JVM垃圾回收之三色标记
三色标记法是一种垃圾回收法,它可以让JVM不发生或仅短时间发生STW(Stop The World),从而达到清除JVM内存垃圾的目的。JVM中的CMS、G1垃圾回收器所使用垃圾回收算法即为三色标记法。三色标记算法思想三色标记法将对象的颜色分为了黑、灰、白,三种颜色。白色:该对象没有被标记过。(对象垃圾)灰色:该对象已经被标记过了,但该对象下的属性没有全被标记完。(GC需要从此对象中去寻找垃圾)黑色:该对象已经被标记过了,且该对象下的属性也全部都被标记过了。(程序所需要的对象)算
2022-03-25 15:36:19
412
原创 JVM的八大原子指令
JMM数据同步八大原子操作lock(锁定):作用于主内存的变量,把一个变量标记为一条线程独占状态unlock(解锁):作用于主内存的变量,把一个处于锁定状态的变量释放出来,释放后的变量才可以被其他线程锁定read(读取):作用于主内存的变量,把一个变量值从主内存传输到线程的工作内存中,以便随后的load动作使用load(载入):作用于工作内存的变量,它把read操作从主内存中得到的变量值放入工作内存的变量副本中use(使用):作用于工作内存的变量,把工作内存中的一个变量值传递给执行引擎
2022-03-25 15:31:39
497
原创 JVM虚拟机Class类文件研究分析
前言为了研究Class文件,先编写一个最简单的代码:package com.courage; public class T0100_ByteCode01 { }之所以说最简单,是因为这个类里面任何方法,变量都没有,看看编译之后Class文件的16进制代码:在解读上面的Class文件(后面没有特殊生命的话都是指16进制)之前,需要先学习几个前置知识,Java 虚拟机规范规定 Class 文件格式采用一种类似与 C 语言结构体的微结构体来存储数据,这种伪结构体中只有两种数据类型:无符
2022-03-25 15:26:27
67
原创 JVM类加载与双亲委派机制被打破
前言前文已经讲了虚拟机将java文件编译成class文件后的格式java文件经过编译,形成class文件,那么虚拟机如何将这些Class文件读取到内存中呢?加载的时机JVM 会在程序第一次主动引用类的时候加载该类,被动引用时并不会引发类加载的操作。也就是说,JVM 并不是在一开始就把一个程序就所有的类都加载到内存中,而是到不得不用的时候才把它加载进来,而且只加载一次。一个类的生命周期如图所示:上图中的加载、验证、准备、初始化、卸载这几个步骤是相对固定的,但是初始化这一步不一定,他
2022-03-25 15:21:53
205
原创 内存屏障在CPU、JVM、JDK中的实现
前言内存屏障(英语:Memory barrier),也称内存栅栏,内存栅障,屏障指令等,是一类同步屏障指令,它使得 CPU 或编译器在对内存进行操作的时候, 严格按照一定的顺序来执行, 也就是说在内存屏障之前的指令和内存屏障之后的指令不会由于系统优化等原因而导致乱序。大多数现代计算机为了提高性能而采取乱序执行,这使得内存屏障成为必须。语义上,内存屏障之前的所有写操作都要写入内存;内存屏障之后的读操作都可以获得同步屏障之前的写操作的结果。因此,对于敏感的程序块,写操作之后、读操作之前可以插入内存屏
2022-03-25 15:17:48
143
原创 JAVA对象分析之偏向锁、轻量级锁、重量级锁升级过程
在HotSpot虚拟机里,对象在堆内存中的存储布局可以划分为三个部分:对象头(Header)实例数据(Instance Data)对齐填充(Padding)。对象头HotSpot虚拟机(后面没有说明的话默认是这个虚拟机)对象头包括三部分:1、Mark Word2、指向类的指针3、数组长度(只有数组对象才有)对象头之Mark WordMark Word记录了对象和锁有关的信息,当这个对象被synchronized关键字当成同步锁时,围绕这个锁的一系列操作都和Mark W
2022-03-25 15:13:38
526
原创 LVS负载均衡理论以及算法概要
一、 LVS简介LVS是Linux Virtual Server的简称,也就是Linux虚拟服务器, 由章文嵩博士发起的自由软件项目,通过LVS提供的负载均衡技术和Linux操作系统实现一个高性能、高可用的服务器群集,它具有良好可靠性、可扩展性和可操作性。从而以低廉的成本实现最优的服务性能。LVS 是一个实现负载均衡集群的开源软件项目,LVS 架构从逻辑上可分为调度层、Server 集群层和共享存储。负载均衡(LB) 集群的架构和原理很简单,就是当用户的请求过来时,会直接分发到 Director S
2022-03-25 13:06:51
200
原创 为什么MySQL索引使用B+树(点赞收藏吧)
聚簇索引与非聚簇索引不同的存储引擎,数据文件和索引文件位置是不同的,但是都是在磁盘上而不是内存上,根据索引文件、数据文件是否放在一起而有了分类:聚簇索引:数据文件和索引文件放在一起,例如:innodb每一个数据库在磁盘上都会有一个对应的文件:进去其中一个文件夹:这其中:.frm:存储的是表结构 .ibd:存储数据文件和索引文件注意:mysql的innodb默认会将数据文件以及索引文件放在表格空间中,不会为每一个单独的表保存一份数据文件,如果需要单独保存,
2022-03-25 13:06:32
95
原创 进阶面试的必看的ORM架构之 ORM简介
1、什么是ORMORM,即Object-Relational Mapping(对象关系映射),它的作用是在关系型数据库和业务实体对象之间作一个映射,这样,我们在具体的操作业务对象的时候,就不需要再去和复杂的SQL语句打交道,只需简单的操作对象的属性和方法。2、为什么会出现ORM思想先从项目中数据流存储形式这个角度说起.简单拿MVC这种分层模式.来说. Model作为数据承载实体. 在用户界面层和业务逻辑层之间数据实现面向对象OO形式传递. 当我们需要通过Control层分发请求把数据持久化时我们
2022-03-25 07:00:00
2454
原创 七个开源的 Spring Boot 前后端分离项目
前后端分离已经在慢慢走进各公司的技术栈,根据松哥了解到的消息,不少公司都已经切换到这个技术栈上面了。即使贵司目前没有切换到这个技术栈上面,松哥也非常建议大家学习一下前后端分离开发,以免在公司干了两三年,SSH 框架用的滚瓜烂熟,出来却发现自己依然没有任何优势!其实前后端分离本身并不难,后段提供接口,前端做数据展示,关键是这种思想。很多人做惯了前后端不分的开发,在做前后端分离的时候,很容易带进来一些前后端不分时候的开发思路,结果做出来的产品不伦不类,因此松哥这里给大家整理了几个开源的前后端分离项目,帮助大
2022-03-24 16:00:26
687
原创 最受欢迎的几个开源项目,牛逼呀
小程序开发框架mpvue是一个使用 Vue.js 开发小程序的前端框架,目前支持微信小程序、百度智能小程序,头条小程序和支付宝小程序。框架基于Vue.js,修改了的运行时框架 runtime 和代码编译器 compiler 实现,使其可运行在小程序环境中,从而为小程序开发引入了Vue.js开发体验。主要特性使用mpvue开发小程序,你将在小程序技术体系的基础上获取到这样一些能力:彻底的组件化开发能力:提高代码复用性 完整的Vue.js开发体验 方便的Vuex数据...
2022-03-24 15:50:48
223
原创 开源项目中的 Java 异常处理示例
关于 Java 异常处理的 9 个技巧是:1. 仅在异常情况下使用异常2. 对可恢复的条件使用检查异常,对编程错误使用运行时异常3. 避免不必要地使用检查异常4. 支持使用标准异常5. 抛出适合抽象的异常6.记录每个方法抛出的所有异常7. 在详细消息中包含故障捕获信息8. 力求失败的原子性9. 不要忽视异常1. 仅在异常情况下使用异常这一项主要是关于避免对普通控制流使用异常。例如,不要使用异常来终止循环控制流:try{ Iterator<Foo>...
2022-03-24 15:22:23
246
原创 Java 18 中的新特性---JDK 19:Java 19 初具规模
Java 18 孵化了一个矢量 API,预览 switch 表达式的模式匹配,采用 UTF-8 作为默认字符集,包括一个简单的 Web 服务器等等。Java Development Kit (JDK) 18 现在作为正式的生产版本提供。新版本的标准 Java 有九个新特性,包括一个简单的 Web 服务器和另一个用于switch.OpenJDK 页面列出了以下正式针对 JDK 18 的功能:服务提供者接口、简单的 Web 服务器、矢量 API 的第三个孵化器、代码片段、核心反射的重新实现、U...
2022-03-24 14:39:41
1051
原创 阿里高级面试官对javaMYsql面试提过的问题和最精准的答案
MySQL怎么创建存储过程MySQL 存储过程是从 MySQL5.0 开始增加的新功能。存储过程的优点有一箩筐。不过最主要的还是执行效率和SQL 代码封装。特别是 SQL 代码封装功能,如果没有存储过程,在外部程序访问数据库时,要组织很多 SQL 语句。特别是业务逻辑复杂的时候,一大堆的 SQL 和条件夹杂在代码中,让人不寒而栗。现在有了 MySQL 存储过程,业务逻辑可以封装存储过程中,这样不仅容易维护,而且执行效率也高。一、创建MySQL存储过程下面代码创建了一个叫pr_add 的MySQL 存
2022-03-24 13:49:42
392
原创 java面试官看到这些面试答案只会点头:过了过了,明天直接上班
zookeeper 是什么?zookeeper 是一个分布式的,开放源码的分布式应用程序协调服务,是 google chubby 的开源实现,是 hadoop 和 hbase 的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。说明:本文限于篇幅,故而只展示部分的面试内容,完整的Java面试学习文档小编已经帮你整理好了,有需要的朋友私信我{需要}即可免费领取Java、大厂面试学习资料哦!zookeeper 怎么保证主从节点的状态...
2022-03-24 13:24:03
2933
原创 JVM性能调优~JVM内存整理及GC回收
JVM作为Java语言的基础,虽然平时工作中真正运用到的时候可能并不多,一个程序员想要上升到高级层次,那就必须知道Java到底是怎么运行的,这就逃不开JVM。想要告别增删改查和简单开发,而是去做Java性能分析和调优工作,那么,Java虚拟机绝对是一把助力的利剑。学习Java虚拟机的原因,本质是让你了解Java程序是如何被执行且优化的。这样一来,你才可以从内部入手,达到高效编程的目的。同时,你也可以为学习更深层、更核心的Java技术打好基础。且对于面试BAT等一线互联网大厂时JVM是必问常问的高频点之一
2022-03-23 19:56:22
757
原创 JVM内存区域划分附带PDF
前言:对 Java 程序员来说我们不用自己手动管理对象内存的申请与释放,全部交由 Java 虚拟机(JVM)来管理内存的分配与回收。因此,日常开发中我们不用关心内存分配与回收,减少了很多繁琐的工作,大大提高了开发效率。也正是因为如此,一旦出内存泄漏和溢出方面的问题,如果不了解 JVM 内部的内存结构、工作机制,那么排查问题将变得异常艰难。接下来,我们一起学习 JVM 内存区域的划分、作用以及可能产生的问题。根据 Java 虚拟机规范,Java 虚拟机在执行 Java 程序的过程中会把它所管
2022-03-23 19:52:19
580
原创 java后端Nginx问题与解析
Nginx日志分割与Nginx日志分析脚本nginx日志切割脚本:vi /root/cutlog.sh#!/bin/bashI=`ps aux | grep nginx | grep root | grep -v 'grep nginx' | awk '{print $14}'` #查找nginx进程if [ $I == /usr/local/nginx/sbin/nginx ];thenACCLOG=`cat /usr/local/nginx/conf/nginx.conf | g
2022-03-23 19:24:05
726
原创 想成为高级程序员MYSQL的那些知识你需要全懂
MySql常用命令登录mysql mysql -u username -p数据库授权 grant all privileges on *.* to iCache@'192.168.101.221' identified by 'operator@cacheDB#3'远程登录 mysql -h ip地址 -u usename -p #operator@cacheDB#3列出数据库 show databases;进入数据库 use databases列出表 show tables;列出列..
2022-03-23 16:08:19
1321
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人