自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

KnifeBlade的博客

全栈之路

  • 博客(89)
  • 收藏
  • 关注

原创 Spring源码(三)

AOP(1)获取增强方法或增强器:扫描所有beanDefinition,获取所有标注了@Aspect注解的类 ;解析其中的增强方法,存入缓存(advisorsCache);

2020-01-18 09:14:13 367

原创 Spring源码(二)

Student student = (Student)beanFactory.getBean("beanName");(1)beanName转换:因为传入的beanName可能是beanName,也可能是别名,也可能是factoryBean,因此需要根据别名或者factoryBean获取到真实的beanName.(2)调用getSingleton()获取单例bean:首先检查单例缓存(si...

2020-01-15 09:01:23 479

原创 数据结构与算法 — 递归解决八皇后问题

问题描述:在一个8行8列的棋盘上,每一行放置一个皇后,使任意两个皇后不在同一列或同一条直线上。package 递归;import java.util.Arrays;/** * @author lyq on 2019-12-25 2:21 下午 * @desc 八皇后问题:使用一维数组表示位置信息,数组下标代表第几个皇后及第几行,对应下标的值代表位于该行的第几列。 */publ...

2019-12-25 15:42:09 458

原创 数据结构与算法 — 前缀、中缀、后缀表达式

问题描述:给定字符串表达式,如:"74 * 2+2-33",要求计算结果,假定表达式中仅包含"+、-、、/"四种运算符。package 栈;import java.util.Stack;/** * @author lyq on 2019-12-24 9:53 上午 * @desc 栈实现表达式(只含+、-、*、"\")计算器 * 实现思路: * 创建两个栈分别用于存放 操作...

2019-12-24 11:49:57 556

原创 数据结构与算法 — 约瑟夫问题

问题描述:编号为1、2、… n 的小朋友围成一圈,从编号为k( 1< k < n) 的小朋友开始报数,报到m的小朋友出列,该小朋友的下一位重新开始从0开始报数,数到m的小朋友再次出列,依次类推,直到所有小朋友出列。由此产生一个出列编号的队列。package 链表;/** * @author lyq on 2019-12-23 10:42 下午 * @desc 利用单向环形...

2019-12-23 23:48:07 473

原创 Nginx

Nginx简介Nginx是一种高性能的Http服务器和反向代理Web服务器,其优势是占用内存小、支持高并发等。正向代理与反向代理正向代理:当客户端访问无法直接访问的资源时(如:谷歌),需要架设一个代理服务器,用于将请求转发至目标服务器;对于用户来说访问的还是目标资源的地址,但是真正的访问请求是由代理服务器转发至目标服务器的,因此目标服务器接收到的请求都来自代理服务器,起到了屏蔽客户端...

2019-12-23 15:44:34 140

原创 Spring源码(一)

Spring配置文件读取,创建BeanFactory:使用Resource接口的各种实现类(classPathResource、FileSystemResource等)将spring配置文件转化为Resource对象;Resource resource = new ClassPathResource("spring-config.xml");通过DocumentLoader对象或其实...

2019-12-22 18:14:12 138

原创 每天一条linux命令

(1)linux命令:使用查看系统进程ps:a:显示当前终端所有进程;u:以用户为主的格式显示信息;x:显示当前用户在当前终端下的所有进程;-e:显示系统内所有进程;-l:使用long格式输出信息;-f:显示进程完整信息; 常用组合:ps aux:简单信息ps -elf:详细信息ps aux | grep 进程名称:过滤显示指定进程信息top:对进程动态排名,每...

2019-12-20 15:11:14 174

原创 Redis — 高可用架构

TODO

2019-12-18 15:20:09 208

原创 Redis — 基础概念

Redis特点:- 数据操作基于内存,速度快;- 单线程执行客户端请求,避免并发问题;- 支持持久化,防止数据丢失;- 数据类型丰富,应用场景多;- 支持高可用架构搭建。常用数据类型及操作:String:字符串- set key value;- getset key value;- expire key value;- get key;- setnx key value...

2019-12-17 22:25:58 113

原创 Redis — 应用场景及实现

热点数据缓存计数器分布式锁分布式全局递增序列排行榜点赞、签到、收藏Tag消息队列

2019-12-17 15:26:01 322

原创 python — 基础

1、基本数据类型:(1)Number:int、float除法运算(/)默认结果为浮点型,//运算符可以返回整形;**表示乘方;%表示取模;+=、-=、/=、*=;(2)字符串:"..."、'...'str[n|-n]:获取变量str指定[倒数]指定位置上的字符;str[m:n]:获取变量strm-n位置的字符串(不能以负数开头、n为负数时m表示截取长度);...

2019-11-25 13:43:40 260

原创 Error attempting to get column '×××' from result set. Cause: java.sql.SQLFeatureNotSupported

Mybatis与LocalDateTime不兼容问题的解决方案

2019-10-18 10:52:32 3507

原创 适配器模式

适配器继承或依赖已有的对象,实现想要的目标接口,消除由于接口不匹配所造成的类的兼容性问题;提高了类的复用,增加了类的透明度。1、类适配器:// 已有类class Origin{ public void run(){ System.out.println("i am running"); }}// 扩展接口interface ExpandInterfa...

2019-10-09 17:06:23 85

原创 建造者模式

需要生成复杂内部结构时使用,即将多个简单的对象一步一步构建称为一个复杂对象。class Person{ private String name; private int age; public String getName() { return name; } public void setName(String name) { ...

2019-10-09 16:51:39 93

原创 工厂模式

提供一种创建对象的最佳方式,在创建对象时不提供对外暴露创建逻辑,并且通过一个共同的接口来指向新创建的对象;定义一个创建对象的接口,让子类来决定实例化哪一个具体的工厂类,延迟到子类去执行,主要解决选择接口的问题,扩展性高,只增加相应工厂类即可,知道名称即可创建对象,屏蔽具体的实现,调用者只关心接口;增加需求时,需要增加具体类与工厂实现,导致类个数成倍增加,增加系统复杂度。1、工厂方法模式:i...

2019-10-09 16:46:58 88

原创 单例模式

单例模式属于创建型模式,解决某个类频繁的创建与销毁。该模式保证了其对象在JVM中只有一个实例对象存在。必须保证私有化构造函数,只能有一个实例对象存在。通过减少new关键字的使用,降低系统内存的使用频率,同时减轻GC工作;避免了资源的多重使用。1、懒汉式: public static class Demo1{ private static Object obj = ne...

2019-10-09 16:41:26 96

原创 Bean的生命周期

1、实例化一个Bean--也就是我们常说的new;2、按照Spring上下文对实例化的Bean进行配置--也就是IOC注入;3、如果这个Bean已经实现了BeanNameAware接口,会调用它实现的setBeanName(String)方法,此处传递的就是Spring配置文件中Bean的id值4、如果这个Bean已经实现了BeanFactoryAware接口,会调用它实现的s...

2019-10-03 16:11:49 90

原创 vue动态挂载路由

   后台管理系统中根据用户权限显示不同菜单是很基础的需求,使用vue开发通常我们是遍历路由(this.$router.options.routes)生成用户菜单,vue中提供了addRouter()方法用于动态挂载路由,我们可以根据用户权限结合该方法实现用户路由动态生成。代码如下:(1) router.js:该文件中初始化一个VueRouter对象,并挂载一些...

2019-09-27 11:20:07 4777 2

原创 nginx部署vue项目

1、安装nginx服务器:(1)下载nginx安装包并解压:下载链接;(2)进入nginx解压目录中编译安装:./configure --prefix=/usr/local/nginx(必须先建好目录)makemake install(3)进入usr/local/nginx/sbin目录运行nginx:./nginx,访问80端口即可看到nginx启动成功;2、打包vue项...

2019-09-24 10:57:12 412

原创 nginx小结

1、一款高性能的Http Web服务器和反向代理服务器。2、优点:采用事件驱动模型(多路IO复用)支持百万级别高并发、模块化开发。3、负载均衡配置: # 负载均衡配置 upstream test { # server 配置多个服务实例地址,weight表示权重,根据服务器性能设置不同值以接收不同比重的请求 server 127.0.0.1:8080 weight=...

2019-09-24 09:40:08 174

原创 SpringBoot自动配置原理及自定义启动器依赖

Springboot的出现为基于Spring的企业级开发带来了极大的便利,引入相关的依赖无需做多余的配置即可使用其功能,这便依赖于其自动配置的特性。下面追踪源码理解深入理解Springboot自动配置原理。Springboot的自动配置属性依赖于注解@EnableAutoConfiguration(@SpringBootApplication组合注解之一):该注解的定义中,除了元注解还剩...

2019-09-20 11:10:11 1139

原创 Springboot中读取配置信息的三种方式

1、通过@Value("${param}")方式读取:application.yml文件中定义配置项如下: user: name: lyq在类中通过 @Value("${user.name}") 即可读取到配置的值。2、将配置信息映射为Java Bean:application.xml: user: name: lyq age: 18---启动类添加注解:@En...

2019-09-18 10:35:08 2077

原创 Spring中的条件注解

Spring中提供了多种条件注解以实现在满足特定条件的时候才向Sping容器中注入指定的bean;Springboot中自动配置的原理也是基于各种条件注解,当我们引入某个依赖导致满足了注入某些特定bean的条件,这些bean就会被自动注入Spring容器中供我们使用。@Conditional:该注解通常与@Configuration注解组合使用,当满足特定条件时才将该配置类中申明的bean...

2019-09-17 11:37:56 401

原创 Springboot中通过@import注解导入Java类声明为bean的三种方式

直接导入普通Java类: public class Car1 { public void say(){ System.out.println("i am car1"); } } --- @Configuration @Import(value = {Car1.class}) public class AutoConfig { } --- ...

2019-09-17 10:03:18 1966

原创 《深入理解Java虚拟机》读书笔记

1、对象创建的过程:当jvm收到new指令时,会检查常量池中参数类型的类是否被加载,如果没有先执行类加载;在堆中为对象分配内存空间(一个对象所占用的内存空间在编译时就已经确定);空间分配主要有两种方式:指针碰撞与空闲列表,具体使用哪种方式由jvm的垃圾回收方式决定;由于线程共享堆空间,为解决并发问题引入的"本地线程分配缓冲"的概念;内存空间初始化:即属性赋零值;设置对象头:包括类型信息...

2019-09-15 17:15:09 125

原创 定位Java进程中最耗费CPU的线程并定位堆栈信息

1、获取Java进程的ID,可通过jps、ps等命令:2、top -Hp pid找出该进程中最耗费CPU的线程:TIME+ 列表示各个线程所花费的CPU时间,此处选取id为26939的线程进行分析。3、将ID转换为十六进制(在jstack输出的堆栈信息中线程ID为十六进制格式):4、打印进程9094的堆栈中线程id为2389的信息:可以看到当前线程主要花费的时间在阻塞等待上。...

2019-09-15 16:48:50 498

原创 搭建基于Rabbitmq + ELK分布式日志收集平台

1、sudo docker run -d -p 9200:9200 -p 9300:9300 --name es -e "discovery.type=single-node" elasticsearch:7.3.12、sudo docker run -d -p 5601:5601 --link es -e ELASTICSEARCH_URL=http://es:9200 --name k...

2019-09-12 16:56:20 3265 1

原创 Mysql学习笔记

1、Mysql一条SQL语句从客户端发出到返回结果集的字符集变化过程:character_set_client => character_set_connection => character_set_results2、常用字符集对应编码字节数:ASCII:1个字节GBK:2个字节Unicode:2个字节utf-8:变长编码,1-4个节点uft-16:变长编码,2...

2019-09-09 10:17:52 153

原创 springboot中的异常捕获与处理

服务端对外暴露的接口不可避免的会出现异常,无论是系统异常还是业务异常,出现异常后如何处理对用户提供友好的提示信息是我们所必须处理的。以下提供借助spring注解@ControllerAdvice实现对控制层、业务层异常的统一处理。(1)在前后端分离的开发模式中,后端不再作视图跳转,仅用作为前端返回数据,我们多使用@Controller + @ResponseBody或直接使用@RestCo...

2019-08-01 00:12:24 3583

原创 springboot2.X引入actuator依赖无法查看endpoint

springboot1.X中引入actuator依赖后我们就可以通过对应的endpoint查看与应用相关的信息,springboot2.X以后需进行如下配置才可访问:management: endpoints: web: base-path: /actuator exposure: include: "*"...

2019-06-22 17:50:33 2769

原创 springboot异步任务

springboot中默认所有的执行都是同步的,我们可以通过注解的形式很便捷的实现任务的异步执行。所谓的异步就是在主线程之外开启一条子线程来执行任务,我们可以使用线程池来实现对异步任务的管理。(1)创建异步任务配置类,初始化线程池: package com.blade.demo.config; import org.springframework.context.annotation...

2019-06-11 21:31:02 961

原创 mybatis.generator.1.3.6与tk.mybatis通过mapper使用细节

如何在springboot项目中集成mybatis.generator插件的教程在网上已经很多了,这里只是分享一个使用时的细节。我们在逆向工程生成实体类时,通常需要将我们表名中的前缀去掉,1.3.6版本后添加了一个属性可以实现此功能,如下: <table tableName="base_%" enableCountByExample="fals...

2019-06-07 17:05:23 1002

原创 双栈实现队列、双队列实现栈

双栈实现队列import java.util.Stack;/** * 双栈实现队列 * * @author lyq * @create 5/7/19 */public class StackQueue { private Stack<Integer> stack1 = new Stack<>(); private Stack<...

2019-05-07 17:17:13 957

原创 赫夫曼树

qq

2019-05-07 13:50:04 488 1

原创 平衡二叉树

搜索二叉树是一种特殊的二叉树数据结构,它的特征是任意一个节点的值大于其左节点的值而小于等于其右节点的值。二叉树综合了数组和链表的特点,在数据的增删以及查询方面都有不俗的表现。但是一种特殊情况是如果我们向二叉树中插入的数据本身就是有序的,这是二叉树就会转换为"一边深"的线性结构,这时数据的查询就会演变为普通的线性查找,无疑是不能接受的,因此就引入的平衡二叉树的概念:当数据插入时,通过旋转保证树的平...

2019-05-06 23:25:03 235

原创 循环队列

队列是一种先进先出的数据结构,插入操作发生在队列尾部,删除操作发生在队列头部。package dataStructure.sortTest;/** * 队列 * * @author lyq * @create 5/6/19 */public class MyQueue { /** * 存放数据的数组 */ private int[] da...

2019-05-06 13:31:50 148

原创 归并排序

排序思想:通过递归将一个无序数组转换为两个有序数组两两合并的形式实现最终有序排列。import java.util.Arrays;/** * 归并排序 * * @author lyq * @create 19-5-5 */public class MergeSort { public static void main(String[] args) { ...

2019-05-05 23:28:52 85

原创 希尔排序

排序思想:为解决普通插入排序中,一旦在靠后位置出现较小数时,需要进行多次比较的问题,引入步长的概念,利用步长对数组元素进行分组,对每个分组中的元素分别进行插入排序,这样可以时较小的数很快交换到靠前的位置,减少比较次数。时间复杂度:O(n^(1.3—2))package dataStructure.sortTest;import java.util.Arrays;/** * 希尔排序...

2019-05-05 14:05:58 104

原创 栈及双栈实现的队列

package dataStructure.sortTest;/** * @author lyq * @create 5/1/19 */public class MyStack { /** * 栈的大小 */ private int size; /** * 栈顶指针 */ private int top; ...

2019-05-01 09:31:42 161

空空如也

空空如也

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

TA关注的人

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