自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Element-UI+VUE 实现按钮权限管理

前端朋友遇到项目中的一个问题,就是需要根据后台接口返回的数据,来判断当前用户的操作权限。比如有删除权限,就显示对应的删除按钮,没有这个权限,就置为不可点击状态,或者就是直接隐藏。作为一个后台开发工作者来讲,对于前端的一个技术,涉猎并不是很深,只能通过官方文档或者百度先简单了解下。经过一系列的调查 得知,想实现这么一个功能,比较简单的就是使用VUE中的状态管理(有没有其他更好的方法,暂时还不知道...

2019-12-10 10:05:44 21039 16

原创 Redis经典8问

经历几年开发经验之后,再去面试,缓存问题是不可避免的,现在最常见的缓存就应该是Redis了,下面是在面试中最常见的Redis的8个问题。一、为什么要使用 Redis ?主要可以从两个方面来考虑:性能和并发1、性能:如果我们在项目中碰到需要执行耗时特别久,且结果不频繁变动的SQL,就特别合适将查询结果放入到缓存中,以便下次查询的时候能够快速的相应;2、并发:在大并发的情况下,所有的请...

2019-10-22 17:23:08 204

原创 IDEA 中导入Eclipse 的 maven 项目,及 IDEA 将SpringBoot 打成 jar 包

背景:本人使用MacBook Air 做开发,内存比较小,只有4G。开始用Eclipse的时候还是非常流畅的,但随着时间的流逝 Eclipse越来越卡,代码有变动的情况下,每次保存都需要十秒朝上的事件,对于一名程序员来讲,真的是太浪费时间。早就听说IDEA 非常好用,所以这次就来试试怎么样。版本:由于第一次使用,所以直接就下载了最新的版本,也是为了了解IDEA相对于Eclipse的优势在哪里。...

2019-09-22 18:41:29 1613

原创 观察者模式Observer Pattern

观察者模式定义了对象之间的一对多依赖,让多个观察者对象同时监听一个主体,当主体对象发生变化时,它的所有观察者都会收到通知。观察者模式也叫发布订阅模式,主要用于在关联行为之间建立一套触发机制的场景。下面通过我们平时最常用的键盘鼠标相关的监听事件作为例子,来熟悉观察者模式。一、首先创建Event类public class Event {// 事件源,事件是由谁发起的,保存起来 ...

2019-09-15 17:32:06 176

原创 装饰器模式 Decorator Pattern

装饰者模式(Decorator Pattern)是指在不改变元祐对象的基础上将功能附加到对象上,提供了比继承更有弹性的方案(即扩展原有对象的功能),属于结构型模式。装饰者模式适用于以下场景:扩展一个类的功能或给一个类添加附加的职责。 动态的给一个对象添加功能,这些功能可以再动态地撤销。以日常生活中一个小例子来讲解装饰者模式的应用。如:我们在平时的上班的早上,很多人可能都是起的比较晚,走在路...

2019-09-08 16:45:26 155

原创 Tomcat优化

工作几年,后台服务器用的一直用的都是tomcat,虽然其他的服务器(如 jboss)在开发中使用过,但是生产环境中都是用的tomcat,而面试过程中也是tomcat居多,由此来总结下tomcat服务器的优化方法。一、内存优化在开发过程中基本都是使用默认的配置,而在一些项目中经常会遇到内存溢出的错误,这种情况可能是你在循环中创建对象等占据大量的内存,或是其他代码不规范导致的。但是如果代码一切...

2019-09-07 19:24:53 102

原创 MySQL事务隔离级别

今天回顾一下MySQL的事务隔离级别,MySQL的事务隔离级别分为以下四种:read uncommitted : 读未提交,即脏读。一个事务可以读取到另一个事务修改并未提交的数据; read committed : 读已提交,可以解决脏读。一个事务修改并提交之后才能被另一个事务读取(不可重复读); repeatable read : 可重复读。在一个事务的两次查询中,被另一个事务修改了数据...

2019-09-05 15:40:27 618 1

原创 二叉树

一、定义二叉树是 n 个节点的有限集合,该集合或者为空集(空二叉树),或者由一个根节点和两棵互不相交的、分被称为根节点的左子树和右子树组成。下图为一棵普通的二叉树:二、二叉树的特点由二叉树定义以及图示分析得出二叉树有以下特点:每个节点最多有两棵子树,所以二叉树中不存在度大于2的节点。 左子树和右子树是有顺序的,次序不能任意颠倒。 即使树中某节点只有一棵树,也要区分它是左子树...

2019-09-04 17:16:02 484

原创 Adapter Pattern 适配器模式

适配器模式将某个类的接口转化成客户端期望的另一个接口表示,目的是消除由于接口不匹配所造成的类的兼容问题,约摸有一种亡羊补牢的感觉。主要分三类:类的适配器模式、对象的适配器模式、接口的适配器模式。一、类的适配器模式1、创建原始类public class Source { public void method1(){ System.out.println("Sourc...

2019-09-04 11:08:13 105

原创 VUE脚手架搭建+Element 组件库table

由于目前vue的使用率挺高的,所以就基于前后端分离的思想搭建一个vue脚手架项目,并实现一个简单的表格功能。其中包含的技术点有vue脚手架的搭建、父子组件引用、父子组件之间的传参以及整合Element UI 组件库等。一、vue 脚手架搭建先安装 node [ 脚手架项目需要用到 node 中的 npm ],不会的可以进行百度,此处不做讲解。 安装全局 vue-cli ,在命令行执行以下...

2019-09-01 12:29:08 1181

原创 Nginx 反向代理

Nginx 是一个高性能的http 和反向代理服务器,用于把客户端请求分发给后台的web 容器。下载安装的话,可以到官网去下载安装。一、配置文件#工作进程,一般设置为CPU的核数woker_processes 2#在高并发情况下,通过设置cpu粘性来降低由于多CPU核切换造成的寄存器等现场重建带来的性能损耗。worker_cpu_affinity 0001 0010 0100 1...

2019-08-27 11:05:50 215

原创 冒泡排序

今天再来回顾一下冒泡排序。冒泡排序(Bubble Sort) 是一中最基本的算法,也应该是最熟悉和最常见的算法了。何为冒泡?就像是我们在刚刚打开一瓶雪碧的时候(尤其是你摇晃几下之后再打开),里面有非常的气泡咕噜咕噜地冒出来,总体来说是一个一个的冒出来的,所以我们熟知的冒泡排序可以简单的理解为一个一个的排列。而冒泡排序就是按照一定的规则进行排序的(由小到大或者由大到小),先用一个例子来解释...

2019-08-26 16:46:38 262

原创 synchronized 关键字

在 JVM 中,对象在内存中的布局分为三块区域:对象头、实例数据、和对齐填充。Java对象头 是实现 synchronized 对象锁的基础。synchronized 的对象锁,其指针指向的是一个 monitor(监视器) 对象的起始地址,每一个对象都一个 monitor 。 其中 monitor 可以与对象一起创建、销毁,或者当线程试图获取对象时自动生成。monitor 是由 Objec...

2019-08-26 10:10:42 92

原创 Template Method Pattern 模版方法模式

模版方法模式又称为模版模式,是指定义了一个算法的骨架,并允许子类为一个或者多个步骤提供实现。模版模式使得子类可以在不改变算法结构的情况下,重新定义算法的某些步骤,属于行为性设计模式。模版模式适应于以下场景:一次性实现一个算法的不变部分,并将可变的行为交给子类来实现。 个子类中公共的行为被提取出来并集中到一个公共的父类中,从而避免代码重复。我们的日常生活中,此类的应用场景非常多,比如办理...

2019-08-24 11:44:27 130

原创 码云仓库使用说明

最近有朋友公司使用码云作代码仓库,因为本人一直都是在使用SVN作为版本控制工具,用起来也习惯了,对于码云却是不怎么了解。由于朋友的求助,所以就研究了下,在此记录基本的用法。由于本人对码云没有什么研究,能否像SVN一样作为版本的控制我也是不知道的,所以一下实例只用于拉取和上传。使用码云 我这边以命令为例(有没有像SVN一样的界面,我还没有研究),如果是 Mac 可以直接使用,如果是 Window...

2019-08-23 16:53:14 5000

原创 RESTful规范

RESTful 是一种架构的规范与约束、原则,符合这种规范的架构就是 RESTful 架构。一、动词+宾语 结构RESTful 的核心思想就是客户端发出的数据操作指令都是“动词+宾语”的结构。比如 GET /articles 这个命令,GET 是动词,articles 是宾语。动词通常就是五种HTTP方法,对应CRUD操作。 GET:读取(read) POST:新建(c...

2019-08-22 17:32:10 340

原创 Facade Pattern外观模式

外观模式(Facade Pattern)隐藏系统的复杂性,并向客户端提供了一个可以访问系统的接口。这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性。举个例子,比如我们最习以为常吃饭,如果是自己做的话,那么需要经历买菜、洗菜、切菜、炒菜、吃、善后工作等,这几个顺序是肯定不能乱的,而且缺一不可。刚上了一天的班想吃个饭还要这么麻烦,想想就累。那么怎么解决呢?简单的做法...

2019-08-22 16:25:22 116

原创 简述一条SQL是如何执行的

在我们平时的开发之中,SQL 是避免不了的,随着工作年限的增加熟练度也是成正比的,但是一条SQL是怎么执行的却又可能还不怎么清楚。以MySQL为例大致可以分为七步:一、查询缓存当我们运行一条SQL语句的时候,首先会查询缓存中是否有数据(查询条件与上次完全一致),如果缓存中已经有了上次查询的数据就直接把缓存中的数据返回「8.0 取消了缓存机制」。如果不想让我们查询的数据存储到缓存的话,可...

2019-08-22 15:29:07 1252

原创 反射相关知识梳理

在平时的工作当中,反射用的并不是很多,但在各个框架中却都能见到它的身影。一、通过反射获取类的方式// 1、通过类名直接获取Class c1 = Student.class;// 2、通过对象引用获取Class c2 = stu.getClass();// 3、通过权限定名获取Class c3 = Class.forName("com.xiang.Student");// 前提...

2019-08-21 15:40:22 187

原创 TreeSet源码解析

TreeSet 的实现方式与HashSet 的实现方式非常类似,一如既往的先来一波源码,有助于理解:public class TreeSet<E> extends AbstractSet<E> implements NavigableSet<E>, Cloneable, java.io.Serializable { /** * The b...

2019-08-20 15:44:29 120

原创 HashSet源码解析

通过之前对其他的集合的再读及整理,HashSet 相对来说就比较简单了,直接上源码看下构造函数:public class HashSet<E> extends AbstractSet<E> implements Set<E>, Cloneable, java.io.Serializable { static final long serialVer...

2019-08-20 10:52:17 118

原创 Hashtable源码解析

Hashtable 算是平时用的比较少的一个集合了,先从继承、实现关系 及 构造函数来简单的了解一下public class Hashtable<K,V> extends Dictionary<K,V> implements Map<K,V>, Cloneable, java.io.Serializable { /** * The h...

2019-08-19 22:36:04 178

原创 TreeMap 源码解析

之前了解了ArrayList、LinkedList、HashMap、ConcurrentHashMap,接下来再来了解下TreeMap。TreeMap 底层直接维护了一个红黑树,按照惯例,先从继承 及构造函数开始。public class TreeMap<K,V> extends AbstractMap<K,V> implements NavigableMap<...

2019-08-19 11:45:14 141

原创 Strategy Pattern 策略模式

策略模式是指定义了算法家族并将其封装起来,让它们之间可以相互替换,而不影响使用此算法的用户。策略模式的应用场景如下 系统中有很多类,这些类之间区别仅仅在于行为不同。 一个系统需要动态的在几种算法中选择其中的一种来执行。 举个例子,基本所有的人都有在网上买过东西(比如 服装、书、车票等),在我们选中某个或者某些商品之后,选择付款时会让我们选择付款方式,如:支付宝、银联、微信等...

2019-08-18 19:35:43 119

原创 Delegate Pattern 委派模式

委派模式不属于GoF 23种设计模式。委派模式的基本作用就是负责任务的派遣和调用,跟代理模式很像,可以看成一种特殊情况下的静态的全权代理。但是,代理模式注重过程,委派模式注重结果。委派模式在Spring种的应用场景非常多,我们最熟悉的DispatcherServlet就用到了委派模式。文中会简单模仿下DispatcherServlet的实现。在现实生活中也常有委派模式的发生场景,如 Boss ...

2019-08-18 16:56:40 179

原创 B+树 数据结构

MySQL 索引采用B+树的数据结构进行存储,如下图所示:真实的数据存在于叶子节点,即3、5、9、10、13、15、28、29、36、60、75、79、90、99.非叶子节点不存储真实数据,只存储指引搜索方向的数据项(指针),如17、35并不真实存在于数据表中。索引的数据结构一个磁盘相当于一个数据页,B+树的查找过程如下:比如要查找数据项29: 首先会把磁...

2019-08-16 16:34:50 4482 3

原创 ConcurrentHashMap 源码解析

今天来看一下ConcurrentHashMap,网上看到很多都是说 它与HashMap 很像,像到什么程度呢?区别仅在于ConcurrentHashMap 在put时加了synchronized 关键字,所以多线程环境下,ConcurrentHashMap是安全的,那么接下来我们来看一下,底层是如何实现的,如果还不了解HashMap可以参考另一篇博文HashMap源码解析。 ...

2019-08-16 12:25:01 104

原创 Proxy Pattern 代理模式

代理模式定义:是指为其他对象提供一种代理,以控制这个对象的访问。使用代理模式的主要目的有两个,其一是保护目标对象,其二是增强目标对象。一、静态代理比现在社会上火热的催婚问题,就可以用代理模式展示出来:1、定义一个人类接口,内含一个寻找真爱的行为。public interface Person{ public void findLove();}2、孩子要找对象,实现P...

2019-08-15 22:00:14 105

原创 LinkedList源码解析

LinkedList 是List的一个实现类,并实现了Deque、Cloneable、Serializable 接口实现 Deque 表示 LinkList 是一个双向队列实现Cloneable 表示LinkedList 可以被克隆实现Serializable 表示LinkedList 可以被序列化public class LinkedList<E> extend...

2019-08-15 16:32:04 107

原创 Redis基本数据类型及使用场景

这个问题应该算是比较简单的了,工作一两年的朋友基本都会遇到过,此文仅做梳理。一、基本数据类型分为5种:String、hash、list、set、zset(有序集合)二、使用场景:1、String 命令:set key value 这个没有什么好说的,最常规的也就是set/get操作,value 可以是String 也可以是数字,一般做一些复杂的计数功...

2019-08-15 11:12:38 115

原创 Factory Pattern 工厂模式总结

工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。工厂模式分为三种:简单工厂模式、工厂方法模式、抽象工厂模式。一、简单工厂模式<对象抽离接口>简单工厂模式适...

2019-08-14 21:49:06 103

原创 HashMap源码解析

HashMap 是 数组+链表+红黑树的结构,先付一张结构图有助于更好的理解源码:如果对红黑树不了解,可以参考我另一片红黑树的简介:红黑树原理HashMap实现了 Map、Cloneable、Serializable,说明其是一个Map 并能够克隆和序列化,源码如下:public class HashMap<K,V> extends AbstractMap<K,...

2019-08-13 17:36:09 157

原创 Singleton Pattern单例模式总结

在我们平时工作 或者 面试的时候,单例模式算是出现最频繁的一种设计模式了,本文整理了单例模式的各种实现1、饿汉模式【简而言之,就是不管你用不用,我先创建出来】public class HungrySingleton { private static final HungrySingleton hungry = new HungrySingleton(); privat...

2019-08-12 22:14:39 122

原创 ArrayList源码解析

ArrayList 是List的一种实现,也是我们最常用的集合之一。ArrayList 实现 RandomAccess,Cloneable,Serializable 三个接口,说明此集合可以被克隆、序列化,实现RandomAccess(此为标记接口,内部没有任何方法),说明可以更快的通过下标访问元素。ArrayList 默认初始化大小为10,源码如下// 默认容量大小private sta...

2019-08-12 16:37:21 81

原创 红黑树原理

红黑树(B-R Tree):全称 Red-Black Tree,是一种特殊的二叉查找树。红黑树的上每个节点都有存储位表示节点的颜色,可以是红(Red)或 黑(Black)红黑树的特性每个节点要么是黑色,要么是红色;跟节点是黑色;每个叶子节点(NIL)是黑色;如果一个节点是红色,那么它的子节点必须是黑色;从一个节点到该节点的子孙节点的所有路径,其包含的黑色节点的树相同。 注意:...

2019-08-12 14:49:34 132

空空如也

空空如也

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

TA关注的人

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