- 博客(110)
- 资源 (1)
- 收藏
- 关注
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 Explain详解与MySQL索引优化最佳实践
使用EXPLAIN关键字可以模拟优化器执行SQL语句,分析你的查询语句或是结构的性能瓶颈在 select 语句之前增加 explain 关键字,MySQL 会在查询上设置一个标记,执行查询会返回执行计划的信息,而不是执行这条SQL注意:如果 from 中包含子查询,仍会执行该子查询,将结果放入临时表中like KK%相当于=常量,%KK和%KK% 相当于范围-- mysql5.7关闭ONLY_FULL_GROUP_BY报错本文文档:【有道云笔记】01-Explain详解与索引优化最佳实践有道云笔记。
2024-08-04 18:49:44
801
原创 Spring事务
当我们在某个方法上加了@Transactional注解后,就表示该方法在调用时会开启Spring事务,而这个方法所在的类所对应的Bean对象会是该类的代理对象。如果存在,则利用事务管理器(TransactionMananger)新建一个数据库连接。执行target.test(),执行程序员所写的业务逻辑代码,也就是执行sql。判断当前执行的方法是否存在@Transactional注解。修改数据库连接的autocommit为false。执行完了之后如果没有出现异常,则提交,否则回滚。
2024-08-27 09:42:16
255
原创 AOP大致流程
代理类中还会有一个target属性,该属性的值为被代理对象(也就是通过UserService类推断构造方法实例化出来的对象,进行了依赖注入、初始化等步骤的对象)UserService代理对象.test()--->执行切面逻辑--->target.test(),注意target对象不是代理对象,而是被代理对象。当我们从Spring容器得到UserService的Bean对象时,拿到的就是UserServiceProxy所生成的对象,也就是代理对象。执行切面逻辑(@Before)找出所有的切面Bean。
2024-08-26 10:45:52
204
原创 Spring推断构造方法
需要重视的是,如果Spring选择了一个有参的构造方法,Spring在调用这个有参构造方法时,需要传入参数,那这个参数是怎么来的呢?如果一个类存在多个构造方法,Spring不知道如何选择,就会看是否有无参的构造方法,因为无参构造方法本身表示了一种默认的意义。如果一个类只存在一个构造方法,不管该构造方法是无参构造方法,还是有参构造方法,Spring都会用这个构造方法。这些构造方法中,存在一个无参的构造方法,那么Spring就会用这个无参的构造方法。确定用哪个构造方法,确定入参的Bean对象,这个过程就叫做。
2024-08-26 10:41:41
293
原创 Spring中Bean的创建过程
紧接着,Spring会判断该对象是否实现了InitializingBean接口,如果实现了,就表示当前对象必须实现该接口中的afterPropertiesSet()方法,那Spring就会调用当前对象中的afterPropertiesSet()方法(最后,Spring会判断当前对象需不需要进行AOP,如果不需要那么Bean就创建完了,如果需要进行AOP,则会进行动态代理并生成一个代理对象做为Bean(那么Spring到底是如何来创建一个Bean的呢,这个就是Bean创建的生命周期,大致过程如下。
2024-08-25 22:41:58
344
原创 Spring中是如何创建一个对象
其实不管是AnnotationConfigApplicationContext还是ClassPathXmlApplicationContext,目前,我们都可以简单的将它们理解为就是用来创建Java对象的,比如调用getBean()就会去创建对象(此处不严谨,getBean可能也不会去创建对象,后续课程详解)。这样,但调用context.getBean("userService")时,就可以根据"userService"找到UserService类,从而就可以去创建对象了。
2024-08-25 22:40:23
267
原创 最新CSS3定位元素
学习盒模型,页面版式主要由三个属性控制:position属性,控制元素位置关系。display属性,控制元素堆叠,并排,还是不在页面上出现。float属性,提供控制的方式,以便把元素组成多栏布局。
2024-08-24 15:49:19
1212
原创 CSS3页面布局-三栏-中栏流动布局
控制两个外包装容器的外边距,一个包围三栏,一个包围左栏和中栏。实现三栏布局且中栏内容区不固定的核心问题就是处理右栏的定位,并在中栏内容区大小改变时控制右栏与布局的关系。
2024-08-23 17:12:04
329
原创 Tomcat热加载和热部署
在项目开发过程中,经常要改动Java/JSP 文件,但是又不想重新启动Tomcat,有两种方式:热加载和热部署。热部署表示重新部署应⽤,它的执行主体是Host。热加载表示重新加载class,它的执行主体是Context。思考:Tomcat 是如何用后台线程来实现热加载和热部署的?
2024-08-22 23:01:15
984
原创 Tomcat性能调优
你会看到 Tomcat 中的各种连接器,展开“http-nio-8080”,你会看到这个连接器上的统计信息,其中 maxTime 表示最长的响应时间,processingTime 表示平均响应时间,requestCount 表示吞吐量,errorCount 就是错误数。理论上我们可以通过公式 线程数 = CPU 核心数 *(1+平均等待时间/平均工作时间),计算出一个理想值,这个值只具有指导意义,因为它受到各种资源的限制,实际场景中,我们需要在理想值的基础上进行压测,来获得最佳线程数。
2024-08-21 17:39:43
716
原创 Tomcat 线程模型详解
I/O要解决什么问题I/O:在计算机内存与外部设备之间拷贝数据的过程。到底采取何种选择就是I/O模型需要解决的事情了。以网络数据读取为例来分析,会涉及两个对象,一个是调用这个I/O操作的用户线程,另一个是操作系统内核。一个进程的地址空间分为用户空间和内核空间,基于安全上的考虑,用户程序只能访问用户空间,内核程序可以访问整个进程空间,只有内核可以直接访问各种硬件资源,比如磁盘和网卡。不同的I/O模型对于这2个步骤有着不同的实现步骤。其中信号驱动式IO在实际中并不常用。
2024-08-21 17:33:59
983
原创 Tomcat整体架构及其设计精髓分析
本专题讲解的Tomcat版本: apache-tomcat-9.0.55 , Tomcat9源码阅读环境搭建,查看我的其他博文。官方文档:Apache Tomcat 9 (9.0.93) - Documentation IndexTomcat是Apache Software Foundation(Apache软件基金会)开发的一款开源的Java Servlet容器。它是一种Web服务器,用于在服务器端运行Java Servlet和JavaServer Pages (JSP)技术。它可以为Java Web应用
2024-08-20 14:38:58
992
原创 GraalVM与SpringBoot
spring 6.0和spring boot3.0都会基于jdk17构建,spring官方也写的很清晰,会继续维护和升级spring 2.的版本,如果有人不愿意升级,一样可以使用老的版本。比如阿里开源的jdk8,11,就有非侵入式携程,在高并发项目中性能比jdk17要强。而云原生的虚拟机则应该是Oracle公司主导,因为国外开发者,大多不会强制限定一定是Java语言,喜欢多语言开发,所以应该来说比较受欢迎,而国内则不同。所以到底是Oracle公司在引导Java了,还是有可能国内的公司引导了,这个都不好说!
2024-08-19 15:43:55
325
原创 让Java性能提升的JIT深度剖析
跨语言(语言无关性):JVM只识别字节码,所以JVM其实跟语言是解耦的,也就是没有直接关联,JVM运行不是翻译Java文件,而是识别class文件,这个一般称之为字节码。还有像Groovy 、Kotlin、Scala等等语言,它们其实也是编译成字节码,所以它们也可以在JVM上面跑,这个就是JVM的跨语言特征。Java的跨语言性一定程度上奠定了非常强大的java语言生态圈。Java程序在运行的时候,主要就是执行字节码指令,一般这些指令会按照顺序解释执行,这种就是解释执行。
2024-08-19 15:42:42
1425
原创 为Java开疆拓土的ZGC深度剖析
ZGC(The Z Garbage Collector)是JDK 11停顿时间不超过10ms(JDK16已经达到不超过1ms);停顿时间不会随着堆的大小,或者活跃对象的大小而增加;支持8MB~4TB级别的堆,JDK15后已经可以支持16TB。这么去想,如果使用ZGC来做Java项目,像对STW敏感的证券系统,游戏的系统都可以去用Java来做(以前都是C或者C++的市场),所以ZGC的出现就是为了抢占其他语言的市场(卷!
2024-08-18 10:00:33
607
原创 阿里巴巴Arthas详解
/字符串常量池:"计算机"和"技术" 堆内存:str1引用的对象"计算机技术"//堆内存中还有个StringBuilder的对象,但是会被gc回收,StringBuilder的toString方法会new String(),这个String才是真正返回的对象引用String str2 = new StringBuilder("计算机").append("技术").toString();//没有出现"计算机技术"字面量,所以不会在常量池里生成"计算机技术"对象//true。
2024-08-17 21:37:01
910
原创 垃圾收集器G1&ZGC详解
G1 (Garbage-First)是一款面向服务器的垃圾收集器,主要针对配备多颗处理器及大容量内存的机器. 以极高概率满足GC停顿时间要求的同时,还具备高吞吐量性能特征.G1将Java堆划分为多个大小相等的独立区域(),JVM目标是不超过2048个Region(JVM源码里TARGET_REGION_NUMBER 定义),实际可以超过该值,但是不推荐。
2024-08-15 23:47:00
858
原创 Java垃圾收集底层算法实现
在并发标记的过程中,因为标记期间应用线程还在继续跑,对象间的引用可能发生变化,多标和漏标的情况就有可能发生。漏标的问题主要引入了三色标记算法来解决。
2024-08-14 21:09:56
930
原创 Java垃圾收集器ParNew&CMS
分代收集理论当前虚拟机的垃圾收集都采用分代收集算法,这种算法没有什么新的思想,只是根据对象存活周期的不同将内存分为几块。一般将java堆分为新生代和老年代,这样我们就可以根据各个年代的特点选择合适的垃圾收集算法。比如在新生代中,每次收集都会有大量对象(近99%)死去,所以可以选择复制算法,只需要付出少量对象的复制成本就可以完成每次垃圾收集。而老年代的对象存活几率是比较高的,而且没有额外的空间对它进行分配担保,所以我们必须选择“标记-清除”或“标记-整理”算法进行垃圾收集。
2024-08-14 21:05:15
1423
原创 Java中class文件结构分析二
第17个常量池:01 00 15 28 4C 6A 61 76 61 2F 6C 61 6E 67 2F 53 74 72 69 6E 67 3B 29 5601:tag位表示的是utf8类型的字面量常量00 15 二个字节表示的是字面量常量的长度为21接下来21个字节: 28 4C 6A 61 76 61 2F 6C 61 6E 67 2F 53 74 72 69 6E 67 3B 29 56 表示字符串 (Ljava/lang/String;)V。
2024-08-13 10:28:15
760
原创 Java中class文件结构分析一
22为常量池类型的nameAndType类型,分别指向我们的常量池第#5(utf-8类型的常量)的位置表示我们的字段的名称userName,#6指向的是常量池第六个位置,类型是utf-8类型的值为:Ljava/lang/String;6A 61 76 61 2F 6C 61 6E 67 2F 4F 62 6A 65 63 74 字面量的值为:java/lang/Object。第十个常量分析:01 00 0F 4C 69 6E 65 4E 75 6D 62 65 72 54 61 62 6C 65。
2024-08-13 10:03:49
917
原创 一文彻底理解position定位问题,让新手彻底不迷糊
CSS布局核心是position属性,对元素盒子应用这个属性,可以相对于它在常规文档流中的位置重新定位。position属性有4个值:static,relative,absolute,fixed.
2024-08-12 23:18:15
605
原创 JVM内存模型深度剖析与优化
对象在堆内部挪动的过程其实是复制,原有区域对象还在,一般不直接清理,JVM内部清理过程只是将对象分配指针移动到区域的头位置即可,比如扫描s0区域,扫到gcroot引用的非垃圾对象是将这些对象复制到s1或老年代,最后扫描完了将s0区域的对象分配指针移动到区域的起始位置即可,s0区域之前对象并不直接清理,当有新对象分配了,原有区域里的对象也就被清除了。
2024-08-11 18:21:14
573
原创 从JDK源码级别彻底剖析JVM类加载机制
commonLoader:Tomcat最基本的类加载器,加载路径中的class可以被Tomcat容器本身以及各个Webapp访问;catalinaLoader:Tomcat容器私有的类加载器,加载路径中的class对于Webapp不可见;sharedLoader:各个Webapp共享的类加载器,加载路径中的class对于所有Webapp可见,但是对于Tomcat容器不可见;
2024-08-10 10:32:09
728
原创 CSS3下拉菜单实现
2.a链接,显示为块状撑满,字体颜色#555,背景色#eee,内边距上下0.2em左右1em,边框颜色透明。3.二级菜单列表临时显示,显示为块状,相对于父亲绝对定位,左边与父菜单对齐,顶边与父菜单底对齐。8.列表中的a显示为块状,边框右侧为实线,背景延伸内边距盒子,下划线去掉。3.a伪类悬停,字体颜色#fff,背景色#aaa.4.a伪类点击,背景色#fff,字体颜色#ccc。2.二级菜单内部a去掉右边框,上边框实线。5.整体菜单样式设置内边距,外边距为0.7.列表为左浮动,去掉点,相对定位。
2024-08-09 17:44:17
401
poi3.17实现word转html(可以作为流读取)
2018-12-05
编程十年,行情不好,要转行吗?
2024-08-03
TA创建的收藏夹 TA关注的收藏夹
TA关注的人