自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 常威,你还说你不会索引优化?MYSQL索引失效的常见场景与规避方法

前言你是否有过这样的困惑?啊~!索引怎么失效了? 为什么规定sql不能那样写?我这个sql没问题啊,为啥老大批斗我?的确在我们的日常开发中,一些sql语句的使用不当就会导致MYSQL的索引失效,因此大家可能去去检索了一些类似索引为何失效的文章。文章中绝大部分的内容笔者是认可的,不过部分举例中笔者认为用词太绝对了,并没有说明其中的原由,很多人不知道为什么。所以笔者绝对再整理一遍MySQL中索引失效的常见场景,并分析其中的原由供大家参考。MySQL索引失效的常见场景在验证下面的场景时,请准备足够多

2020-08-13 16:55:46 212

原创 Web 页面请求过程

1. DHCP 配置主机信息假设主机最开始没有 IP 地址以及其它信息,那么就需要先使用 DHCP 来获取。主机生成一个 DHCP 请求报文,并将这个报文放入具有目的端口 67 和源端口 68 的 UDP 报文段中该报文段则被放入在一个具有广播 IP 目的地址(255.255.255.255) 和源 IP 地址(0.0.0.0)的 IP 数据报中。该数据报则被放置在 MAC 帧中,该帧具有目的地址 FF:FF:FF:FF:FF:FF,将广播到与交换机连接的所有设备。连接在交换机

2020-08-10 14:17:29 273

原创 关于java中类的加载机制

类是在运行期间第一次使用时动态加载的,而不是一次性加载所有类。因为如果一次性加载,那么会占用很多的内存。类的生命周期包括以下 7 个阶段:加载(Loading)验证(Verification)准备(Preparation)解析(Resolution)初始化(Initialization)使用(Using)卸载(Unloading)类加载过程包含了加载、验证、准备、解析和初始化这 5 个阶段1. 加载加载是类加载的一个阶段,注意不要混淆。加载过程完成以下三件事:通过类的完

2020-08-05 17:14:31 224

原创 压力测试的分析

1.从压力测试说起压力测试的理解,xxx的性能10w/s,对你有意义么?    没有那家卖瓜的会说自己家的不甜,同样,没有哪个开源项目愿意告诉你在对它条件最苛刻的时候压力情况是多少,一般官网号称给你看的性能指标都是在最理想环境下的,毫无参考意义。举个栗子,Redis官网压测的例子,256字节的读速度11w/s,写速度8.1w/s,都知道redis优点是多变的数据结构,string、List、hash、set、sortset,实际工作稍微复杂的环境往往都是各种结构混合使用...

2020-07-27 16:09:19 888

转载 HashMap JDK1.7实现原理

深入浅出学Java——HashMap哈希表(hash table)也叫散列表,是一种非常重要的数据结构,应用场景及其丰富,许多缓存技术(比如memcached)的核心其实就是在内存中维护一张大的哈希表,本文会对java集合框架中HashMap的实现原理进行讲解,并对JDK7的HashMap源码进行分析。一、什么是哈希表在讨论哈希表之前,我们先大概了解下其他数据结构在新增,查找等基础操作执行性能数组:采用一段连续的存储单元来存储数据。对于指定下标的查找,时间复杂度为O(1);通过给定值进行查找,

2020-07-21 15:37:40 292

转载 HashMap JDK1.8实现原理

HashMap概述HashMap存储的是key-value的键值对,允许key为null,也允许value为null。HashMap内部为数组+链表的结构,会根据key的hashCode值来确定数组的索引(确认放在哪个桶里),如果遇到索引相同的key,桶的大小是2,如果一个key的hashCode是7,一个key的hashCode是3,那么他们就会被分到一个桶中(hash冲突),如果发生hash冲突,HashMap会将同一个桶中的数据以链表的形式存储,但是如果发生hash冲突的概率比较高,就会导致同一个桶

2020-07-21 15:14:36 139

原创 关于ArrayList的扩容机制

一.浅析 ArrayList 的构造函数ArrayList有三种方式来初始化,构造方法源码如下:/** * 默认初始容量大小 */ private static final int DEFAULT_CAPACITY = 10; private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {}; /** *默认构造函数,使用初始容量10构造一个空列表(无参数构造)

2020-07-20 15:57:50 703

转载 MySQL中的重做日志(redo log),回滚日志(undo log),以及二进制日志(binlog)的简单总结

MySQL中有六种日志文件,分别是:重做日志(redo log)、回滚日志(undo log)、二进制日志(binlog)、错误日志(errorlog)、慢查询日志(slow query log)、一般查询日志(general log),中继日志(relay log)。其中重做日志和回滚日志与事务操作息息相关,二进制日志也与事务操作...

2020-07-14 16:10:35 145

原创 基于ImportBeanDefinitionRegistrar接口实现bean的动态注入

Spring的官方也使用了ImportBeanDefinitionRegistrar的方式,实现了@Component、@Service等注解的动态注入机制那么如何去使用ImportBeanDefinitionRegistrar这个接口去实现bean的动态注入呢,接下来,让我来为大家揭晓1. 首先定义一个注解,MyMapper,用来标注需要被动态注入的bean,再定义需要被动态注入的bean TestMapper ,使用该注解标注package com.mercurius.annotation;i

2020-06-09 11:31:03 1597

原创 吃透设计模式第七篇-组合模式

1. 首先看一个需求编写程序展示一个学校院系结构:需求是这样,要在一个页面中展示出学校的院系组成,一个学校有多个学院, 一个学院有多个系。如图2. 传统方式解决学校院系展示3. 传统方式问题分析将学院看做是学校的子类,系是学院的子类,这样实际上是站在组织大小来进行分层次的实际上我们的要求是 :在一个页面中展示出学校的院系组成,一个学校有多个学院,一个学院有多个系, 因此这种方案,不能很好实现的管理的操作,比如对学院、系的添加,删除,遍历等解决方案:把学校、院、系都看做是组织结构,他们之间没

2020-06-08 20:56:51 654

原创 吃透设计模式第六篇-装饰者模式

装饰者模式:动态的将新功能附加到对象上。在对象功能扩展方面,它比继承更有弹性,装饰者模式也体现了开闭原则(ocp)这里提到的动态的将新功能附加到对象和 ocp 原则,读者可以从后续的代码演示中理解本文将以订购奶茶为范例,绘制uml图和java代码详细分析装饰者模式

2020-06-05 17:23:35 313

原创 吃透设计模式第五篇-适配器模式

设计模式的重要性对于程序员来说,相当于盾牌对于美国队长,暴风战斧相对于雷神,内裤对于绿巨人(绿巨人最强武器,手动狗头)来说,是必不可少的。在此,特别总结下23钟设计模式:创建型模式:单例模式、抽象工厂模式、原型模式、建造者模式、工厂模式。结构型模式:适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式。行为型模式:模版方法模式、命令模式、访问者模式、迭代器模式、观察者模式、中介者模式、备忘录模式、 解释器模式(Interpreter 模式)、状态模式、策略模式、职责链模式(责任链

2020-06-02 20:59:02 251

原创 吃透设计模式第四篇-建造者模式

设计模式的重要性对于程序员来说,相当于盾牌对于美国队长,暴风战斧相对于雷神,内裤对于绿巨人(绿巨人最强武器,手动狗头)来说,是必不可少的。在此,特别总结下23钟设计模式:创建型模式:单例模式、抽象工厂模式、原型模式、建造者模式、工厂模式。结构型模式:适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式。行为型模式:模版方法模式、命令模式、访问者模式、迭代器模式、观察者模式、中介者模式、备忘录模式、 解释器模式(Interpreter 模式)、状态模式、策略模式、职责链模式(责任链

2020-06-01 21:50:22 299

原创 吃透设计模式第三篇-原型模式

设计模式的重要性对于程序员来说,相当于盾牌对于美国队长,暴风战斧相对于雷神,内裤对于绿巨人(绿巨人最强武器,手动狗头)来说,是必不可少的。在此,特别总结下23钟设计模式:创建型模式:单例模式、抽象工厂模式、原型模式、建造者模式、工厂模式。结构型模式:适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式。行为型模式:模版方法模式、命令模式、访问者模式、迭代器模式、观察者模式、中介者模式、备忘录模式、 解释器模式(Interpreter 模式)、状态模式、策略模式、职责链模式(责任链

2020-05-29 16:51:08 289

原创 吃透设计模式第二篇-工厂模式

设计模式的重要性对于程序员来说,相当于盾牌对于美国队长,暴风战斧相对于雷神,内裤对于绿巨人(绿巨人最强武器,手动狗头)来说,是必不可少的。在此,特别总结下23钟设计模式:创建型模式:单例模式、抽象工厂模式、原型模式、建造者模式、工厂模式。结构型模式:适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式。行为型模式:模版方法模式、命令模式、访问者模式、迭代器模式、观察者模式、中介者模式、备忘录模式、 解释器模式(Interpreter 模式)、状态模式、策略模式、职责链模式(责任链

2020-05-29 14:05:41 250

原创 吃透设计模式第一篇-单例模式

设计模式的重要性对于程序员来说,相当于盾牌对于美国队长,暴风战斧相对于雷神,内裤对于绿巨人(绿巨人最强武器,手动狗头)来说,是必不可少的。在此,特别总结下23钟设计模式:创建型模式:单例模式、抽象工厂模式、原型模式、建造者模式、工厂模式。结构型模式:适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式。行为型模式:模版方法模式、命令模式、访问者模式、迭代器模式、观察者模式、中介者模式、备忘录模式、 解释器模式(Interpreter 模式)、状态模式、策略模式、职责链模式(责任链

2020-05-28 18:12:37 230 3

原创 关于设计模式的七大原则详解

1.1 设计模式的目的作为一个合格的程序员,在实际编程中,我们往往会去思考耦合性,内聚性以及可维护性,可扩展性,重用性,灵活性(不思考当我在放屁),以便于写出更好,更稳定,质量更高的程序。因而,设计模式诞生了!设计模式是为了让程序(软件),具有更好:代码重用性 (即:相同功能的代码,不用多次编写)可读性 (即:编程规范性, 便于其他程序员的阅读和理解)可扩展性(即:当需要增加新的功能时,非常的方便,称为可维护)可靠性 (即:当我们增加新的功能后,对原来的功能没有影响)使程序呈现高内聚,低耦合的

2020-05-27 22:12:14 338

原创 看完还不会spring中的面向切面,你来打我

本文主要介绍内容:面向切面编程的基本原理通过POJO创建切面使用@AspectJ注解为AspectJ切面注入依赖软件系统的功能需要用到应用程序的多个地方,但是我们又不想在每个点都明确调用它们。日志、 安全和事务管理的确都很重要,但它们是否为应用对象主动参与的行为呢?如果让应用对象只关注于自己所针对的业务领域问题,而其他方面 的问题由其他应用对象来处理,这会不会更好呢?在软件开发中,散布于应用中多处的功能被称为横切关注点(cross-cutting concern)。通常来讲,这些横切关注点从

2020-05-25 23:58:34 636 3

原创 关于spring中bean的生命周期的理解

在传统的Java应用中,bean的生命周期很简单。使用Java关键字new进行bean实例化,然后该bean就可以使用了。一旦该bean不再被使用, 则由Java自动进行垃圾回收。相比之下,Spring容器中的bean的生命周期就显得相对复杂多了。正确理解Spring bean的生命周期非常重要,因为你或许要利用Spring提供的 扩展点来自定义bean的创建过程。下图展示了bean装载到Spring应用上下文中的一个典型的生命周期过程。如图所示,bean在Spring容器中从创建到销毁经历了 若干阶

2020-05-22 09:13:52 486

原创 给大家分享一本好书《深入实践SpringBoot》

深入实践SpringBoot地址:https://pan.baidu.com/s/15Zk3QMBZb6l6D8L_9lkk6Q 提取码:wkoa

2020-05-21 11:21:30 839 1

原创 记录一次elasticJob基础组件的封装

1.1 分布式定时任务解决方案目前常见开源方案;elastic-job , xxl-job ,quartz , saturn, opencron , antares本篇文章主要针对性讲解elastic-job在开发中的使用,以及针对业务的封装,其他几种开源方案的讲解会在后续的文章中去讲解。1.2 关于elastic-jobelastic-job 是由当当网基于quartz 二次开发之后的分布式调度解决方案 , 由两个相对独立的子项目Elastic-Job-Lite和Elastic-Job-Clo

2020-05-20 17:44:02 455

原创 RabbitMQ 快速安装与配置

Rabbit快速安装与配置急速入门,在这里我们使用RabbitMQ 3.6.5 版本进行操作:环境搭建:官网地址:http://www.rabbitmq.com/环境描述:Linux(centos7 Redhat7)1. 首先在Linux上进行一些软件的准备工作,yum下来一些基础的软件包yum install build-essential openssl ope...

2020-05-08 15:41:26 334

原创 redis相关面试题,这应该是最全的了吧

Redis相关的面试题整理1. 什么是 Redis?Redis,全称 Remote Dictionary Server,是一个基于内存的高性能 Key-Value 数据库。另外,Redis 已经成为互联网公司在缓存组件选择的唯一,2.Redis 的数据类型字符串(String)、链表(lists)、哈希表(hash)、集合(set)、有序集合(Zset)3.使用 Redis 有哪些好处...

2020-04-28 10:36:02 902

原创 关于面试中Redis内存回收机制,正确的回答应该是...................

Redis内存回收机制主要体现在以下两个方面:1.删除到达时间的键对象。2.内存使用达到maxmemory上限时触发内存溢出控制策略。1.删除过期键对象Redis所有的键都可以设置过期属性,内部保存在过期字典中。由于进程内保存了大量的键,维护每个键精准的过期删除机制会导致消耗大量的CPU,对于单线程的Redis来说成本过高,因此Redis采用惰性删除和定时任务删除机制实现过期键的内存回收。...

2020-04-28 10:21:10 145

转载 redis为什么选择单线程工作模型

1、先说一下为什么出现进程,线程进程:在计算机发明之初就发现,在输入数据时(I/O速度慢),CPU是空闲的,这样就浪费了CPU资源,为了充分利用CPU资源,发明了进程,在输入程序A的数据时,程序B在占用CPU资源进行计算。线程:为了减少进程的上下文切换的损耗,满足人机交互的实时性,同时保留进程充分利用CPU资源的优点,出现了线程。2,redis为什么不用多线程(不划算呗)(1)...

2020-04-27 22:39:39 119

原创 主流数据库和主流缓存服务器的特性与功能

主流数据库和主流缓存服务器的特性与功能对比名称类型数据存储选项查询类型附加功能Redis使用内存存储 (in-memory)的非 关系数据库字符串、列表、集合、散列 表、有序集合每种数据类型都有自 己的专属命令,另外还 有批量操作(bulk operation)和不完全 (partial)的事务支持发布与订阅,主从复制 (master/slave replica...

2020-04-27 17:31:03 273

转载 缓存三巨头ehcache、memcache、redis我们该如何选择

 Ehcache在Java项目广泛的使用。它是一个开源的、设计于提高在数据从RDBMS中取出来的高花费、高延迟采取的一种缓存方案。正因为Ehcache具有健壮性(基于java开发)、被认证(具有apache 2.0  license)、充满特色(稍后会详细介...

2020-04-27 17:15:00 325

转载 你不知道的IO多路复用机制

文章转载自小狮子的csdn博客,详情请点击链接https://blog.csdn.net/baixiaoshi/article/details/48708347?utm_source=copy 高性能IO模型浅析 服务器端编程经常需要构造高性能的IO模型,...

2020-04-27 15:13:55 107

原创 关于你不知道的Redis复制原理

Redis复制Redis的持久化选项之深入理解AOF和RDB上一篇文章末尾我们提到了复制,本文将深入理解复制在Redis中的使用复制可以让其他服务器拥有一个不断地更新的数据副本,从而使得拥有数据副本的服务器可以用于处理客户端发送的读请求。关系数据库通常会使用一个主服务器(master)向多个从服
务器(slave)发送更新,并使用从服务器来处理所有读请求。Redis也采用了同样的方法来实现
...

2020-04-23 16:44:21 317

原创 Redis的持久化选项之深入理解AOF和RDB

Redis的持久化选项Redis提供了两种不同的持久化方法来将数据存储到硬盘里面。一种方法叫做快照(snapshotting),它可以将存在于某一时刻的所有数据都写入硬盘里面。另一种方法叫只追加文件(append-onlyfile,
AOF),它会在执行写命令时,将被执行的写命令复制到硬盘里面。这两种持久化方法既可以同
时使用,又可以单独使用,在某些情况下甚至可以两种方法都不使用,具体选择哪种持...

2020-04-23 15:26:50 929

原创 Lambda表达式还不够简洁?简洁代码的新语法糖 - 方法引用

在前面的文章里我们提到了Stream流和lambda表达式浅谈java8新特性之Stream流在使用Lambda表达式的时候,我们实际上传递进去的代码就是一种解决方案:拿什么参数做什么操作。那么考虑 一种情况:如果我们在Lambda中所指定的操作方案,已经有地方存在相同方案,那是否还有必要再写重复逻辑?1.1 冗余的Lambda场景来看一个简单的函数式接口以应用Lambda表达式:/*...

2020-03-26 15:18:56 243

原创 浅谈java8新特性之Stream流

浅谈java8新特性之Stream流1.1 引言:传统集合的多步遍历代码几乎所有的集合(如 Collection 接口或 Map 接口等)都支持直接或间接的遍历操作。而当我们需要对集合中的元 素进行操作的时候,除了必需的添加、删除、获取外,典型的就是集合遍历。例如: import java.util.ArrayList; import java.util.List; public cl...

2020-03-24 00:58:02 231

原创 nginx location的匹配规则

location 的匹配规则空格: 默认匹配,普通匹配location / {root /home;}=: 精确匹配location = /mercurius/img/aaa.png {root /home;}~*: 匹配正则表达式,不区分大小写#符合图片的显示location ~* .(GIF|jpg|png|jpeg) {root /home;}...

2020-03-23 16:35:42 85

原创 nginx日志切割

Nginx 日志切割-手动现有的日志都会存在 access.log 文件中,但是随着时间的推移,这个文件的内容会越来越多,体积会越来越大,不便于运维人员查看,所以我们可以通过把这个大的日志文件切割为多份不同的小文件作为日志,切割规则可以以天为单位,如果每天有几百G或者几个T的日志的话,则可以按需以每半天或者每小时对日志切割一下。具体步骤如下:创建一个shell可执行文件:cut_ngin...

2020-03-23 16:25:57 70

原创 nginx.conf 核心配置文件

nginx.conf 核心配置文件设置worker进程的用户,指的linux中的用户,会涉及到nginx操作目录或文件的一些权限,默认为nobodyuser root;worker进程工作数设置,一般来说CPU有几个,就设置几个,或者设置为N-1也行worker_processes 1;nginx 日志级别debug | info | notice | warn | er...

2020-03-23 16:03:35 76

原创 Nginx安装

nginx安装去官网http://nginx.org/下载对应的nginx包,推荐使用稳定版本上传nginx到linux系统安装依赖环境(1)安装gcc环境 yum install gcc-c++(2)安装PCRE库,用于解析正则表达式yum install -y pcre pcre-devel(3)zlib压缩和解压缩依赖yum install -y zlib ...

2020-03-23 15:21:53 66

原创 springboot日志使用

市面上的日志框架;JUL、JCL、Jboss-logging、logback、log4j、log4j2、slf4j…日志门面 (日志的抽象层)日志实现JCL(Jakarta Commons Logging) SLF4j(Simple Logging Facade for Java) jboss-loggingLog4j JUL(java.util.lo...

2019-07-05 15:46:55 104

原创 springboot自动配置的原理

1)、SpringBoot启动的时候加载主配置类,开启了自动配置功能 @EnableAutoConfiguration2)、@EnableAutoConfiguration 作用:利用EnableAutoConfigurationImportSelector给容器中导入一些组件?可以查看selectImports()方法的内容;List configurations = get...

2019-07-05 15:38:49 176

原创 springboot外部配置加载顺序

SpringBoot也可以从以下位置加载配置; 优先级从高到低;高优先级的配置覆盖低优先级的配置,所有的配置会形成互补配置1.命令行参数所有的配置都可以在命令行上进行指定java -jar spring-boot-02-config-02-0.0.1-SNAPSHOT.jar --server.port=8087 --server.context-path=/abc多个配置用空格分开; ...

2019-07-05 10:48:07 99

原创 springboot配置文件加载位置

springboot 启动会扫描以下位置的application.properties或者application.yml文件作为Spring boot的默认配置文件–file:./config/–file:./–classpath:/config/–classpath:/优先级由高到底,高优先级的配置会覆盖低优先级的配置;SpringBoot会从这四个位置全部加载主配置文件;互补配置;...

2019-07-05 10:37:30 59

技术面试必备基础知识 .pdf

java技术面试必备资源,设计java相关,涉及到redis,数据结构和算法,leecode题目解答等

2020-05-04

空空如也

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

TA关注的人

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