自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Snow丶的博客

天高任鸟飞。

  • 博客(160)
  • 问答 (1)
  • 收藏
  • 关注

转载 java动态代理中的invoke方法是如何被自动调用的(转)

一、动态代理与静态代理的区别。(1)Proxy类的代码被固定下来,不会因为业务的逐渐庞大而庞大;(2)可以实现AOP编程,这是静态代理无法实现的;(3)解耦,如果用在web业务下,可以实现数据层和业务层的分离。(4)动态代理的优势就是实现无侵入式的代码扩展。 静态代理这个模式本身有个大问题,如果类方法数量越来越多的时候,代理类的代码量是十分庞大的。所以引入动态代理来解决此类...

2019-06-12 21:50:02 992

原创 Hibernate二级缓存

因为项目中经常出现,由于使用了hibernate生成的方法,会从二级缓存中拿取数据,导致数据不一致的问题,甚至导致出现脏数据的问题,所以总结以下hibernate的缓存机制。什么是二级缓存我们知道一级缓存,并且一级缓存的作用范围就在session中,每个session都有一个自己的一级缓存,而二级缓存也就是比一级缓存的作用范围更广,存储的内容更多,我们知道session是由sesssion...

2019-06-09 10:16:57 1987

原创 Redis基础

Redis是一个开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。它通常被称为数据结构服务器,因为值(value)可以是 字符串(String), 哈希(Hash), 列表(list), 集合(sets) 和 有序集合(sorted sets)等类型。redis的应用场景有哪些1,会话缓存(最常用)2...

2019-06-03 20:28:53 203

原创 Executor框架

在Java中,使用线程来异步执行任务。Java线程的创建与销毁需要一定的开销,如果我们为每一个任务创建一个新线程来执行,这些线程的创建与销毁将消耗大量的计算资源。同时,为每一个任务创建一个新线程来执行,这种策略可能会使处于高负荷状态的应用最终崩溃。Java的线程既是工作单元,也是执行机制。从JDK 5开始,把工作单元与执行机制分离开来。工作单元包括Runnable和Callable,而执行机制...

2019-06-02 20:51:00 350

原创 Jcrop实现图片裁剪

功能需求 “在上传照片的时候能进行裁剪”Jcrop是一个jQuery插件,它能为你的WEB应用程序快速简单地提供图片裁剪的功能。Jcrop官网,以下是Jcrop的一些特性:对所有图片均unobtrusively(无侵入的,保持DOM简洁) 支持宽高比例锁定 支持 minSize / maxSize设置 支持改变选区或移 动选区时的回调(Callback) 支持用键盘微调选区 通过...

2019-05-30 20:19:51 3512

原创 MySQL存储引擎

插件式存储引擎是MySQL数据库最重要的特性之一,用户可以根据应用的需要选择如何存储和索引数据,是否使用事物等。MySQL支持的存储引擎包括MyISAM、InnoDB、BDB、MEMORY、MERGE、EXAMPLE等等,其中InnoDB和BDB提供事务安全表,其他存储引擎都是非事务安全表。默认情况下,创建新表如果不制定存储引擎,将使用默认的MyISAM,当然也可以修改默认设置。...

2019-05-29 22:35:26 146

原创 适配器模式

软件设计中可能出现,需要开发的具有某种业务功能的组件在现有的组件库中已经存在,但它与当前系统的接口规范不兼容,如果重新开发这些组件的成本又很高,这时使用适配器模式就可以很好的解决这个问题。定义与特点适配器模式(Adapter)定义:将一个类的接口转换成期望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类能一起工作。适配器模式分为类结构型模式和对象结构型模式,前者类之间的耦合...

2019-05-29 21:39:38 141

原创 Java类文件结构

代码编译的结果从本地机器码转变为字节码,是存储格式的一小步,确实编程语言发展的一大步。无关性的基石各种不同平台的虚拟机与所有平台都统一使用的程序存储格式——字节码(ByteCode),实现语言无关性的基础仍然是虚拟机和字节码存储格式。Java虚拟机不和包括Java在内的任何语言绑定,它只与“Class文件”这种特定的二进制文件格式所关联。Java语言中的各种变量,关键字和运算符号的...

2019-05-26 10:55:25 181

原创 MySQL锁问题

MySQL锁概述相对于其他数据库而言,MySQL的锁机制比较简单,其最显著的特点是不同的存储引擎支持不同的锁机制。比如,MyISAM和MEMORY存储引擎采用的是表级锁(table-level locking);BDB存储引擎使用的是页面锁(page-level locking),但也支持表级锁;InnoDB存储引擎既支持行级锁(row-level locking),也支持表级锁,但默认情况下...

2019-05-25 00:05:20 457

原创 SQL优化

一、优化 SQL 语句的一般步骤1、通过 show status 命令了解各种 SQL 的执行频率show status like 'Com%';例如:Com_xxx 表示每个 xxx 语句执行的次数,我们通常比较关心的是以下几个统计参数。 Com_select:执行 select 操作的次数,一次查询只累加 1。 Com_insert:执行 INSERT 操作的次数...

2019-05-23 21:32:34 182

原创 数据库索引

索引概述所有 MySQL 列类型都可以被索引,对相关列使用索引是提高 SELECT 操作性能的最佳途径。MySQL 中索引的存储类型目前只有两种(BTREE 和 HASH),具体和表的存储引擎相关:MyISAM 和 InnoDB 存储引擎都只支持 BTREE 索引;MEMORY/HEAP 存储引擎可以支持 HASH和 BTREE 索引。MyISAM 和 InnoDB 存储引擎的表默认创...

2019-05-22 20:57:41 159

原创 Java中的线程池

线程池合理的使用线程池可以带来3个好处1:降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。2:提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。3:提高线程的可管理性。线程是稀缺资源,如果无限制地创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一分配、调优和监控。但是,要做到合理利用线程池,必须对其实现原理了如指掌。线程池的...

2019-05-07 22:22:40 125

原创 Java中的阻塞队列

一、什么是阻塞队列阻塞队列(BlockingQueue)是一个支持两个附加操作的队列。这两个附加的操作支持阻塞的插入和移除方法。1.支持阻塞的插入方法:意思是当队列满时,队列会阻塞插入元素的线程,直到队列不满。2.支持阻塞的移除方法:意思是在队列为空时,获取元素的线程会等待队列变为非空。阻塞队列常用于生产者和消费者的场景,生产者是向队列里添加元素的线程,消费者是从队列里取元素的线程...

2019-05-07 22:03:08 211

原创 Fork/Join框架

Fork/Join框架Fork/Join框架是Java7提供的一个用于并行执行任务的框架,是一个把大任务分割成若干个小任务,最终汇总每个小任务结果后的到大任务结果的框架。工作窃取算法工作窃取(work-stealing)算法是指某个线程从其他队列里窃取任务来执行。为什么需要使用工作窃取算法呢?假如我们需要做一个比较大的任务,可以把这个任务分割为若干互不依赖的子任务,为了减少线程...

2019-05-07 22:02:07 129

原创 Java锁机制详解

Lock接口JavaSE5之后,并发包中新增了Lock接口来实现锁功能,虽然它缺少了(通过synchronized块或者方法所提供的)隐式获取释放锁的便捷性,但是却拥有了锁获取与释放的可操作性、可中断的获取锁以及超时获取锁等多种synchronized关键字所不具备的同步特性。Lock lock = new ReentrantLock();lock.lock();try {} fi...

2019-05-05 21:21:56 367

原创 ConcurrentHashMap的实现原理与使用

ConcurrentHashMap是线程安全且高效的HashMap,那么它是如何在保证线程安全的同时又能保证高效的操作。一、线程不安全的HashMap在并发编程中使用HashMap可能导致程序死循环,而使用线程安全的HashTable效率非常底下。在多线程环境下,使用HashMap的put操作会引起死循环,例如下面的代码:final HashMap<String, String...

2019-05-05 21:20:19 234

原创 Tomcat架构详解

一、Tomcat的顶层架构Tomcat中最顶层的容器是Server,代表着整个服务器,从上图中可以看出,一个Server可以包含至少一个Service,用于具体提供服务。Service主要包含两个部分:Connector和Container。从上图中可以看出 Tomcat 的心脏就是这两个组件,他们的作用如下:Connector用于处理连接相关的事情,并提供Socket与Reque...

2019-05-04 22:50:39 247

原创 HashMap工作原理和扩容机制

HashMapHashMap是Java中十分常用的一种数据结构,java7中HashMap由数组+链表构成,java8引入了红黑树对HashMap进行了优化。工作原理HashMap内部实现是一个桶数组,每个桶中存放着一个单链表的头结点。其中每个结点存储的是一个键值对整体(Entry),HashMap采用拉链法解决哈希冲突HashMap提供两个重要的基本操作,put(K, V)和...

2019-04-16 22:19:35 209

原创 Uml类图学习

UML类图与类的关系虚线箭头指向依赖;实线箭头指向关联;虚线三角指向接口;实线三角指向父类;空心菱形能分离而独立存在,是聚合;实心菱形精密关联不可分,是组合;类与类之间的关系大概有6种1.继承关系继承指的是一个类(称为子类,子接口)继承另外的一个类(成为父类,父接口)的功能,并可以增加它自己的新功能的能力。在UML类图设计中,继承用一条带空心三角箭头的实线表...

2019-04-10 20:58:38 2593

原创 设计模式入门

设计模式总体来说设计模式分为三大类:创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。设计模式的六大原则...

2019-04-10 20:49:50 136

原创 工厂方法与抽象工厂模式

工厂方法模式工厂方法(FactoryMethod)模式的定义:定义一个创建产品对象的工厂接口,将产品对象的实际创建工作推迟到具体子工厂类当中。这满足创建型模式中所要求的“创建与使用相分离”的特点。1. 模式的结构工厂方法模式的主要角色如下。抽象工厂(Abstract Factory):提供了创建产品的接口,调用者通过它访问具体工厂的工厂方法 newProduct() 来创建产品。...

2019-04-10 19:50:35 243

原创 Spring总结

Spring总结Spring的核心是控制反转(IoC)和面向切面(AOP)。简单来说,Spring是一个分层的JavaSE/EE full-stack(一站式) 轻量级开源框架。web层:struts,spring-MVCservice层:springdao层:hibernate,mybatis , jdbcTemplate一、Spring的优点方便解耦,简化开发(高内聚低...

2019-04-02 21:51:56 164

原创 Shell Script基础

1.在创建shell脚本文件时,必须在文件的第一行制定使用的shell#!/bin/bash2.shell会按照命令在文件中出现的顺序进行处理。PATH变量被设置只在一组目录中查找命令,想让bash shell能找到你的脚本文件,可以采用以下两种做法a. 将shell脚本文件所处的目录添加到PATH环境变量中b. 在提示符中用绝对或相对路径来引用shell脚本文件3.如果...

2019-04-02 21:23:15 222

原创 Spring AOP

AOPAOP(Aspect Oriented Programming),即面向切面编程,可以说是OOP(Object Oriented Programming,面向对象编程)的补充和完善。OOP引入封装、继承、多态等概念来建立一种对象层次结构,用于模拟公共行为的一个集合。不过OOP允许开发者定义纵向的关系,但并不适合定义横向的关系,例如日志功能。日志代码往往横向地散布在所有对象层次中,而与它对...

2019-03-31 21:36:20 1083

原创 Java动态代理详解

静态代理和动态代理我们根据加载被代理类的时机不同,将代理分为静态代理和动态代理。如果我们在代码编译时就确定了被代理的类是哪一个,那么就可以直接使用静态代理;如果不能确定,那么可以使用类的动态加载机制,在代码运行期间加载被代理的类这就是动态代理,比如RPC框架和Spring AOP机制。动态代理我们知道Spring主要有两大思想,一个是IoC,另一个就是AOP,而AOP的原理就是java...

2019-03-31 21:15:19 289

原创 Spring IOC以及DI

Spring的IoC(控制反转) 与DI(依赖注入)IOC: 控制反转,所谓控制反转就是把创建对象(bean)和维护对象(bean)之间的关系的权利转移到器Sqring容中去了(ApplicationContext.xml)而程序本身不在维护了DI: 依赖注入,将类里面的属性在创建类的过程中给属性赋值.。实际上DI和IOC是同一个概念,因为在ApplicationContext.xm...

2019-03-31 19:43:44 247

原创 SpringMVC详解

SpringMVC详解SpringMVC框架是以请求为驱动,围绕Servlet设计,将请求发给控制器,然后通过模型对象,分派器来展示请求结果视图。其中核心类是DispatcherServlet,它是一个Servlet,顶层是实现的Servlet接口。Spring Web MVC也是服务到工作者模式的实现,但进行可优化。前端控制器是DispatcherServlet;应用控制器其实拆为...

2019-03-28 20:42:41 115

原创 SQL语句执行顺序

SQL语句执行顺序查询中用到的关键词主要包含六个,并且他们的顺序依次为select--from--where--group by--having--order by其中select和from是必须的,其他关键词是可选的,这六个关键词的执行顺序与sql语句的书写顺序并不是一样的,而是按照下面的顺序来执行from--where--group by--having--sel...

2019-03-28 14:05:52 172

原创 搭建vue开发环境

1.$ sudo apt-get install nodejs2.$ sudo apt-get install npm1. 安装node端开发框架和环境都是需要 Node.js ,先安装node.js开发环境,vue的运行是要依赖于node的npm的管理工具来实现,下载https://nodejs.org/en/.2. 查看node版本号下载好node之后,以管理员身份打开c...

2019-03-20 21:35:29 153

原创 乐观锁与悲观锁

什么是乐观锁与悲观锁简单来说,乐观锁对应于生活中乐观的人总是想着事情往好的方向发展,悲观锁对应于生活中的人总是想着事情往坏的方向发展。各有各的优点悲观锁总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞到知道它拿到锁(共享资源每次只给一个线程使用,其它线程阻塞,用完后再把资源转让给其它线程)。传统关系型数据库中就用到了很...

2019-03-10 12:35:21 116

原创 数据库锁机制

数据库锁数据库锁一般可以分为两类,一个是悲观锁,一个是乐观锁乐观锁一般是指用户自己实现的一种锁机制,假设认为数据一般情况下不会造成冲突,所以在数据进行提交更新的时候,才会正式对数据的冲突与否进行检测,如果发现冲突了,则让返回用户错误的信息,让用户决定如何去做。乐观锁的实现方式一般包括使用版本号和时间戳。 悲观锁一般就是我们通常说的数据库锁机制,以下讨论都是基于悲观锁。悲观锁主要表锁、...

2019-03-09 19:04:02 528

原创 深入理解volatile关键字

Volatile关键字在了解了JMM之后,就可以深入了解以下volatile关键字的工作机制了。volatile关键字的两层语义一旦一个共享变量(类的成员变量,类的静态成员变量)被volatile修饰之后,那么就具备了两层语义:保证了不同线程对这个变量进行操作时的可见性,即一个线程修改了某个变量的值,这个新值对其他线程来说是立即可见的(volatile的特殊规则保证了新值能立即同步...

2019-03-09 14:00:36 222

原创 浅析Java内存模型JMM

Java内存模型在并发编程中,多个线程之间采用什么机制通信(信息交换),什么机制进行数据的同步?为了解决这些疑惑,就很有必要了解java的内存模型,在Java语言中,采用的是共享内存模型来实现多线程之间的信息交换和数据同步的。线程之间通过共享程序公共的状态,通过读-写内存中公共状态的方式来进行隐式的通信。同步指的是程序在控制多个线程之间执行程序的相对顺序的机制,在共享内存模型中,同步是...

2019-03-09 11:48:26 261

原创 Http协议学习总结

Http协议一、网络基础如下图,Web使用一种名为Http(HyperText Transfer Protocol)超文本传输协议,完成从客户端到服务器端的一系列运行流程。网络基础TCP/IP协议族通常使用的网络是在TCP/IP协议族的基础上运作的,而HTTP属于它内部的一个子集。TCP/IP的分层管理也是十分重要的一个机制。发送端在层与层之间传输数据时,每经过一层必定...

2019-03-04 14:45:00 307 2

原创 Java虚拟机类加载机制

Java虚拟机类加载机制Class文件中存储了类(或接口)中的元数据信息和编译后的字节码。这些信息需要存入Java虚拟机中才能被虚拟机利用和执行。而Class文件是需要Java虚拟机加载到虚拟机内存中的。这就涉及到几个问题,什么时候需要加在一个Class文件?虚拟机如何加载Class文件到虚拟机内存中?Class文件中的信息进入虚拟机内存中后会发生怎么样的变化?1、概述虚拟机把描述类的...

2019-03-04 14:44:13 152

原创 jQuery 鼠标指针 悬浮在文字上提示信息

jQuery 鼠标指针 悬浮在文字上提示信息 var message = $('#unmatch-request-message').val(); var hint = '&lt;div id="hint-message"&gt;' + message + '&lt;/div&gt;'; $('.mentee-send-unmatch-request, .mentor-se...

2019-01-29 09:54:06 1420

原创 css多行多余文本省略

css多余文本省略首先,要知道css的三条属性。overflow:hidden; //超出的文本隐藏text-overflow:ellipsis; //溢出用省略号显示white-space:nowrap; //溢出不换行通过这3个属性就可以实现单行溢出省略css多行多余文本省略display:-webkit-box; //将对象作为弹性伸缩盒子模型显示。-webkit-box-o...

2019-01-23 21:33:20 795

原创 ajax跨域问题详解

ajax跨域问题详解跨域问题的条件及原因浏览器限制(当发现请求是跨域的时候会,浏览器出于安全的考虑,会有一些校验)跨域(协议域名端口任何一个不一样都是跨域)XHR(XMLHttpRequest)请求(只有当请求是XHR请求时才会有跨域问题)简单来说就是ajax发送一个跨域的请求的时候才会发生跨域问题如何解决跨域问题在了解了跨域问题的原因之后我们可以多种解决方案一、去除浏览器限制...

2019-01-22 22:47:16 288

原创 Jquery读取url中的参数

Jquery读取url中的参数function getParam(paramName) { paramValue = "", isFound = !1; if (this.location.search.indexOf("?") == 0 &amp;&amp; this.location.search.indexOf("=") &gt; ...

2019-01-20 20:04:45 418

原创 装饰设计模式

装饰设计模式基本概念装饰模式是一种用于替代继承的技术,使用对象之间的关联关系取代类之间的继承关系,IO流中的Buffered类就是一个很好的例子。(1) 装饰对象和真实对象有相同的接口。这样客户端对象就能以和真实对象相同的方式和装饰对象交互。(2) 装饰对象包含一个真实对象的引用(reference)(3) 装饰对象接受所有来自客户端的请求。它把这些请求转发给真实的对象。(4) 装饰对...

2019-01-13 20:34:30 121

空空如也

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

TA关注的人

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