自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(12)
  • 收藏
  • 关注

原创 spring源码之Ioc容器加载过程详解

一、前言针对于spring源码的初步学习,我认为首先应该掌握四大块,基于四大块全部掌握的基础上在进行扩展深入研究学习,具体四块如下:1.Ioc容器加载的过程2.spring如何解决循环依赖3.spring Aop的实现4.spring 事务管理实现我觉得如果掌握了上面的四点,那么我们基本上就可以很自豪的说精通spring了,也算掌握了spring大概一半的内容了。本文主要研究Ioc容器的加载过程。二、什么是Ioc容器?我们常说Ioc是一个容器,是的,ioc就是一个容器,并

2020-09-23 15:22:04 985

原创 sql优化之order by,group by,limit,join

一、前提准备创建一个employees表,一个主键索引,一个联合索引,表结构如下:-- 创建表CREATE TABLE `employees` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(24) NOT NULL DEFAULT '' COMMENT '姓名', `age` int(11) NOT NULL DEFAULT '0' COMMENT '年龄', `position` varchar(20) NOT N

2020-08-03 14:55:41 1071

原创 sql优化实战之全值匹配和范围查询

一、前提准备创建一个employees表,一个主键索引,一个联合索引,表结构如下:-- 创建表CREATE TABLE `employees` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(24) NOT NULL DEFAULT '' COMMENT '姓名', `age` int(11) NOT NULL DEFAULT '0' COMMENT '年龄', `position` varchar(20) NOT N

2020-07-31 11:13:26 3658 3

原创 sql优化之Explain sql详解

一、Explain 工具介绍使用Explain可以查看sql的性能瓶颈信息,并根据结果进行sql的相关优化。在select 语句前加上explain关键字,执行的时候并不会真正执行sql语句,而是返回sql查询语句对应的执行计划信息。当然如果select语句的from后面有一个子查询的话,就会执行子查询了并把结果放到一个临时表中。有三张表:-- 演员表 CREATE TABLE `actor` ( `id` INT ( 11 ) NOT NULL, `name` VARCHAR (

2020-07-22 13:52:38 30552 4

原创 Mysql优化之索引详解

一、什么是索引我们知道,mysql数据库中表的数据都是存在磁盘上的,而我们在平常进行sql查询时,通常都是读取磁盘上的数据到内存中。在这个过程中最耗时的操作就是磁盘I/O。所谓的mysql优化 查询优化等最本质的优化原则就是减少磁盘I/O次数,从而提高数据库查询的效率。而索引就是帮助我们解决这个问题的一种方式,什么是索引?索引就是帮助Mysql高效获取磁盘数据的一种排好序的数据结构。既然索引是一种数据结构,那么到底什么样的数据结构可以作为索引呢?一般常用的数据结构有一下几种:二叉树 红黑树

2020-07-20 18:17:39 262

原创 垃圾回收算法与垃圾回收器详解

一、垃圾回收算法一般对jvm的垃圾回收算法都是基于分代收集思想实现的,基于jvm的堆内存分代的划分,一般根据对象在堆中的存活周期,划分为年轻代和老年代,基于不同代的特点选择最合适的垃圾回收算法,一般有三种算法:下面仔细分析下各种算法1.标记-复制标记-复制算法是通过标记出非垃圾对象(存活对象),并且把存活对象复制到堆中另外一块空白内存中,然后把原来的内存空间全部回收掉。一般用于年轻代标记复制算法一般把内存分为大小相等的两块,一块用于分配对象,一块作为保留内存空间(暂时不使用)。.

2020-07-01 18:14:15 286

原创 jvm之对象的创建与内存模型解析

一、对象的创建之前一篇详细分析过类的加载,本篇主要记录分析对象的创建步骤以及jvm内存的分配。直接上图显而易见,对象的创建大致经过7个步骤:1.类是否加载判断,如果想要创建一个类的实例对象,首先这个类是要被加载完成之后才可以,所以第一步就要判断类是否被加载过,若未被加载,则先加载类。2.内存分配,创建对象之前首先需要在堆中分配一块足够大的内存空间,具体多大,这个在对应的类加载完成之后,jvm就已经可以确定这类的对象需要占用多大的内存了,所以只要在堆内存中划分一块确定的内存空间即可。内

2020-06-22 16:06:31 340

原创 并发篇之线程池

一、线程池在java中,“做事”一般是由线程来做的。在程序运行过程中,每一个请求过来,都会分配一个线程处理请求,处理完之后,线程被销毁。所以锁,程序运行中,有很多的线程在不断的被创建和销毁,而线程的创建和销毁会带来大量的系统开销,特别是在请求量巨大的时候,这写开销显得尤为严重。因此,线程池应运而生,线程池是一种池化技术,用来缓存线程,进行线程的管理,优化和调度,线程池中不仅有线程,还有任务。例如:工厂的老板,在生产一件产品时,去外面招一个工人来生产,生产完成后把工人辞退,再次生产,则中心招人

2020-06-18 15:45:16 299 1

原创 jvm之类加载机制解析

一、程序如何运行的首先,我们都知道,java程序写好之后,打成jar包或者war,然后丢到服务器上启动运行,但是,到底是怎么运行的呢?java虚拟机在这里面怎么工作的?又是谁推动jvm的运转工作?jvm底层是使用C++语言实现的,首先C++会帮我们创建jvm,然后把程序代码丢到jvm内存中,并且调用main方法,用以启动程序。在把程序代码丢入到jvm内存中的过程就是对类的加载,在程序执行中,只有被加载好的类才能拿来使用。那么类加载,需要一个专门用来加载类的工具,我们称之为类加载器。.

2020-06-11 17:26:17 265 1

原创 并发篇之synchronized

一、什么是synchronized这是java中的一个关键字,是java中的内置锁,是一个依赖于操作系统的mutex lock互斥锁实现的。既然是互斥特性,通常我们用来协调线程同步的,保证同一时间只有一个线程可以访问该关键字修饰的代码块,从而达到保证线程安全的目的。我们应该知道volatile也是一个关键字,它保证了程序执行的有序性,共享变量的可见性,但是并不保证原子性。我们可以看成synchronized的出世是为了弥补volatile的不足,因为它可以保证原子性。基于synch...

2020-06-10 11:47:45 238

原创 并发篇之线程

一、线程和进程进程:我们知道计算机的核心是cpu,承担了所有计算任务,是计算机硬件的组成之一,其他的还有内存等等。在它之上运行着一个管家,起着承上启下的作用,我们称之为操作系统,它负责任务的调度,资源的分配和管理。而在操作系统之上,运行的是应用程序,是某种功能集的集合。每一个应用程序都可以看成一个进程,它有自己独立的内存区域,操作系统是以进程为独立单位分配硬件资源的,也是以进程为独立单位进行任务调度的,例如jvm,它就是一个进程,有自己的内存区域。进程中包含了一系列的线程。线程:一个进程

2020-06-08 16:21:40 167

原创 内存泄漏

java中内存泄漏是指不被程序使用的对象或者变量仍然占用内存的情况。虽然java中引入了垃圾回收机制,会把不可达(不被程序调用的对象)的对象回收,即从内存中清除,但是还是会发生内存泄漏。比如:创建一个短生命周期的对象(我们在这简称短对象),在创建一个长生命周期的对象(长对象),然后用长对象调用短对象,当短对象结束,就会发生内存泄露,因为短对象已经不被程序使用了,但是因为它还在被长对象调用,

2017-03-27 18:22:03 545

空空如也

空空如也

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

TA关注的人

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