自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(69)

原创 spring mvc前端页面中文乱码问题解决思路

1、判断是否是前端页面的编码问题直接在浏览器中打开html,如果页面显示正常说明不是html页面的编码问题;否则的话在head部分加入<meta charset="utf-8">一般能解决html页乱码问题2、判断是不是Spring的编码问题在web.xml中加入filter,一般能解决问题<filter> <filter-name>ch...

2019-07-01 14:59:11 531

原创 redis初探之持久化方案理解

前言Redis是一个内存数据库,为了保证数据的持久性,它提供了两种持久化方案:1、RDB方式(默认)2、AOF方式RDB方式RDB是Redis默认采用的持久化方式。RDB方式是通过快照(snapshotting)完成的,当符合一定条件时Redis会自动将内存中的数据进行快照并持久化到硬盘。Redis会在指定的情况下触发快照符合自定义配置的快照规则执行save或者bgsave命令...

2019-04-14 18:30:03 71

原创 Redis初探之事务理解

前言Redis 事务可以一次执行多个命令, 批量操作在发送 EXEC 命令前被放入队列缓存,并且带有以下两个重要的保证:1、收到 EXEC 命令后进入事务执行,事务中任意命令执行失败,其余的命令依然被执行。2、在事务执行过程,其他客户端提交的命令请求不会插入到事务执行命令序列中。一个事务从开始到执行会经历以下三个阶段:开始事务。命令入队。执行事务。如下图:特点1)Redis ...

2019-03-29 19:54:41 110

原创 Spring初探之Spring+Spring MVC+MyBatis整合

前言系统标准的三层架构包括:表现层、业务层、持久层。三层架构在我们的实际开发中使用的非常多,包含:1、表现层1)也就是我们常说的web 层。它负责接收客户端请求,向客户端响应结果,通常客户端使用http 协议请求web 层,web 需要接收 http 请求,完成 http 响应。2)表现层包括展示层和控制层:控制层负责接收请求,展示层负责结果的展示。3)表现层依赖业务层,接收到客户端请求...

2019-03-28 20:37:19 98

原创 Redis初探之Redis初步了解

前言Redis 是用 C 语言开发的一个开源的高性能**键值对(key-value)**内存数据库。它提供五种数据类型来存储值:字符串类型、散列类型、列表类型、集合类型、有序集合类型,是一种 NoSQL 数据库。应用场景内存数据库(登录信息、购物车信息、用户浏览记录等)缓存服务器(商品数据、广告数据等等)(最多使用)解决分布式集群架构中的 session 分离问题(session共享)...

2019-03-22 09:10:01 91

原创 Spring初探之使用JdbcTemplate实现增删改查

前言Spring对数据库的操作在jdbc上面做了深层次的封装,使用spring的注入功能,可以把DataSource注册到JdbcTemplate之中。JdbcTemplate主要提供以下五类方法:execute方法:可以用于执行任何SQL语句,一般用于执行DDL语句;update方法用于执行新增、修改、删除等语句;batchUpdate方法用于执行批处理相关语句;query方法及qu...

2019-03-21 08:44:52 295

原创 Spring初探之基于AspectJ实现AOP

前言AspectJ是一个java实现的AOP框架,它能够对java代码进行AOP编译(一般在编译期进行),让java代码具有AspectJ的AOP功能。AspectJ应用到java代码的过程称为织入,对于织入这个概念,可以简单理解为aspect(切面)应用到目标函数(类)的过程。对于这个过程,一般分为动态织入和静态织入,动态织入的方式是在运行时动态将要增强的代码织入到目标类中,这样往往是通过...

2019-03-19 22:35:49 69

原创 Spring初探之动态代理

前言Spring AOP 主要是通过动态代理技术实现的,而动态代理技术的实现方式有两种:1)基于接口的 JDK 动态代理2)基于继承的 CGLib 动态代理两种代理的区别:JDK动态代理只能对实现了接口的类生成代理,而不能针对类 。CGLIB是针对类实现代理,主要是对指定的类生成一个子类,覆盖其中的方法 。因为是继承,所以该类或方法不能被声明成final ,final可以阻止继承和多...

2019-03-18 23:47:56 68

原创 Spring初探之事务理解

相关概念事务:事务值的是逻辑上的一组操作,组成这个事务的各个执行单元,要么一起执行成功,要么一起失败。事务的特性1.原子性:事务所包含的全部操作,要么一起成功,要么一起失败;2....

2019-03-12 23:38:17 59

原创 Spring初探之AOP简单理解

AOP简介AOP意为面向切面编程,通过预编译方式和运行期间通过动态代理实现程序功能的统一维护的技术。利用AOP可以对业务逻辑的各个部分进行隔离,从而使业务逻辑各部分之间的耦合度降低,提高程序的可重用性。AOP与代理模式Spring中的AOP本质上也就是使用了动态代理模式,只不过在动态代理模式的实现上进行了封装,简化了动态代理模式的步骤。动态代理模式的实现步骤:1)声明接口:注册需要被监听...

2019-03-06 00:29:13 99

原创 Spring初探之手写依赖注入

要想实现依赖注入,首先我们需要在BeanDefined中定义属性的键值对: //存放属性键值对 private Map<String, String> propertyMap = new HashMap<>(16);在BeanFactory中返回实例化对象前,给对象赋值。实现setvalue方法:private void setValue(Object i...

2019-03-05 20:14:48 189

原创 Spring初探之BeanPostProcessor实现和手写BeanPostProcessor

BeanPostProcessor的主要作用在于我们可以在Spring 容器完成 Bean 的实例化、配置和其他的初始化前后添加一些自己的逻辑处理。我们就可以定义一个或者多个 BeanPostProcessor 接口的实现,然后注册到容器中。BeanPostProcessor实现其实这和代理模式的实现有些类似:1、监控接口定义所有需要被监听的行为2、接口实现谁来实现3、通知类次要业...

2019-03-04 23:46:42 73

原创 Spring初探之手动实现简单的动态工厂

Spring中实现动态工厂主要依赖< bean > 标签的factory-bean 和factory-method属性,我们要想实现动态工厂功能,就需要在自定义BeanDefined中添加这两个属性:public class BeanDefined { private String beanId; private String classPath; //...

2019-03-04 23:01:42 365

原创 Spring初探之手写实现简单的beanFactory

手写简单的beanFactory主要分两步:1、定义bean对象,对应Spring中的< bean >标签;2、创建BeanFactory,根据 BeanFactory 来获取实例对象;bean定义对象:package com.lks.util;/** * Created by likaisong on 2019/3/3. */public class BeanDef...

2019-03-04 08:57:09 403

原创 Mybatis级联操作的实现

背景Mybatis的级联操作主要是针对一对多、多对一和多对多的情况而设定的。级联是在resultMap标签中配置的。级联并不是必须的,好处就是获取关联数据便捷,但如果级联过多会增加系统的复杂度,同时降低系统的性能。一对多一个人对应多件衣服为例只查询一次(1)先来看一下 标签中的属性:property:对象属性的名称,对应一对多中一的字段名ofType:指定的是映射到集合属性中bea...

2019-03-03 13:49:06 4837

原创 Mybatis动态SQL的实现

场景在实际应用开发过程中,我们往往需要写复杂的 SQL 语句,需要拼接,而拼接SQL语句又稍微不注意,由于引号,空格等缺失可能都会导致错误。Mybatis提供了动态SQL,也就是可以根据用户提供的参数,动态决定查询语句依赖的查询条件或SQL语句的内容。动态SQL标签if 和 where 标签 <!--动态Sql : where / if--> <select ...

2019-02-27 19:28:42 27297 3

原创 Mybatis中ResultMap的简单使用

前言MyBatis在进行查询映射时,查询出来的每一个属性都是放在一个对应的Map里面的,其中键是属性名,值则是其对应的值。但当指定返回类型属性resultType的时候,MyBatis会将Map里面的键值对取出赋给resultType所指定的对象对应的属性。而当我们提供的返回类型是resultMap的时候,这就需要自己再进一步的把它转化为对应的对象,这常用于级联查询以及缓存功能。我们先用一个...

2019-02-26 19:55:37 701

原创 Mybatis中 #{} 和 ${}的区别

场景MyBatis 中提供了两种方式将参数赋值到SQL语句中,分别是:#{参数名}和${参数名},主要是从实体类对象或则 Map 集合读取内容。区别(1)#{参数名} : 采用预编译方式,可以防止 SQL 注入(2)${参数名}: 采用直接赋值方式,无法阻止 SQL 注入攻击其实也可以理解为PreparedStatement和Statement的区别:1.PreparedStatem...

2019-02-26 12:04:46 64

原创 Mybatis实现自定义Plugins拦截器

场景MyBatis 自定义拦截器,可以拦截的接口只有四种 Executor.class,StatementHandler.class,ParameterHandler.class 和 ResultSetHandler.class。在某种情景下,如果这四种接口自带的某个方法不能满足我们的要求时,如 Executor主要是创建Statement对象,在创建过程中依靠 MappedStatement...

2019-02-26 00:42:06 1086

原创 MyBatis实现自定义TypeHandler进行数据转换

场景在 Java 实体类中,定义时间的属性一般是Date 类型,但数据库中却是字符串类型,每次查询、新增等操作都要做类型转换,但如果使用 Mybatis 提供的自定义 TypeHandler 的功能就能完美的解决这个问题。实体类User.javapackage com.lks.domain;import java.io.Serializable;import java.util.Dat...

2019-02-25 19:56:28 241

原创 Mybatis基于xml文件和注解的方式实现增删改查

整体目录结构:基于XML文件实现maven项目下添加mbatis和mysql的依赖包:pom.xml<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi=&

2019-02-24 21:33:38 921

原创 Activity生命周期场景解析

初识Activity活动是一种包含用户界面的组件,主要用于和用户进行交互。我们在开发中创建Activity后,通过调用setContentView(View)方法来给该Activity指定一个布局界面,而这个界面就是提供给用户进行交互的。返回栈Android系统中是通过任务(Task)来管理活动的。一个任务就是一组放在栈里的活动的集合,因此这个栈也被称做返回栈(Back Stack)。栈是一...

2018-12-03 22:49:34 166

原创 Appium原理之Appium in Android

简述Appium本身是基于c/s架构的,原理整体说起来较为简单:执行测试脚本时,基于WebDriver的每行脚本都会转换成Appium的指令发送给Appium服务器,而Appium服务器将测试指令交给代理程序(Android端是Bootstrap.jar,iOS端是Bootstrap.js),将由代理程序执行测试。如脚本上的一个简单点击操作,在Appium服务器上都是touch指令,当指令发送到...

2018-11-28 10:16:19 190

原创 简析设计模式之观察者模式

先看一个需求:我们要做一个气象监控软件,weatherData对象负责追踪目前的天气状况(温度、湿度、气压),另外需要分别在三个显示屏上显示目前的状况、气象统计和简单的预报,并且是需要实时更新的。这是典型的一对多问题,而观察者模式就是定义了一系列对象之间的一对多关系,但一个对象改变状态时,其他依赖着都会收到通知,并自动更新。这非常符合我们的需求,三个显示屏甚至更多的显示屏依赖weatherDa

2017-08-03 22:16:00 204

原创 spring学习之自动装配

上篇文章我们已经讲了IOC和DI的一些基本概念以及 配置bean的两种 方式,其中bean配置还有一些细节性的东西,还是需要我们花点时间找相关的文档去学习了解的,例如null值配置、特殊字符配置和p命名空间等等。接下来,我们开始讲一下bean的自动装配,都将用到前面的知识。还是先上代码吧: 一个人有名字有车有住址:public class Person { private Car car;

2017-07-26 08:33:19 198

原创 简析Lock与synchronized

synchronized想来大家都比较熟悉,这是java的一个关键字,也就是java的一个内置特性。但既生瑜何生亮,既然有了synchronized来实现同步,为何还要新增Lock,想来Lock肯定有一些synchronized没有的优点。为什么要有Lock用过synchronized的都知道,当一个代码块或一个方法被synchronized修饰时,当线程获取到锁并执行这段代码时,其它线程只能一直等

2017-07-25 23:04:36 214

原创 简析设计模式之策略模式

首先,我们从鸭子说起,鸭子都会叫和游泳,但不同呢到底鸭子有不同的外观: 先写一个父类:public abstract class Duck { public void quack(){ System.out.println("I'm duck, I can quack!"); } public void swim(){ System.out.

2017-07-25 00:19:38 238

原创 java内存回收机制相关

对于垃圾回收,我们主要思考哪些内存需要回收、什么时候回收和如何回收几个问题。哪些内存需要回收堆中几乎存放着java中所有对象实例,垃圾收集器在对堆进行回收前,需要判断哪些对象是存活的,哪些对象是已经“挂掉”,并且是需要回收的。判断对象的存活与否,主要有引用计数法和根搜索算法。如何判断对象需要回收引用计数法:给对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加1;当引用失效时,计数器就减1

2017-07-17 19:51:28 214

原创 java虚拟机内存区域简单介绍

首先看一张图: 由图可看出java虚拟机在执行java程序时会把它管理的内存分为5 个数据区域,其中有些区域是随着虚拟机进程的启动而存在的,有些是依赖用户线程的启动和结束而建立和销毁的。程序计数器程序计数器也叫指令计数器,pc, 用于存储下条指令的地址内容。在java虚拟机中,pc是一块较小的内存空间,可以看做是当前线程所执行的字节码的行号指示器,其中分支、循环、跳转、异常处理和线程恢复等基础

2017-07-13 21:04:05 236

原创 java反射机制简析

最近在看Spring框架,其中的IOC中最基本技术就是利用java的反射机制。反射机制通俗来讲就是根据给出的类名(字符串方式)来动态地生成对象。这种编程方式可以让对象在生成时才决定到底是哪一种对象。我们只需要在配置文件中给出定义即可,目的就是提高灵活性和可维护性。从一个栗子说起package com.yixingu;public class LiZi { private float pric

2017-06-30 17:47:18 223

原创 spring学习之IOC和DI

前面我们已经讲过了,通过spring提供的IOC容器,用户可以将对象之间的依赖关系交由Spring进行控制,避免硬编码所造成的过度程序耦合。那么什么是IOC?什么是IOCIOC全称是Inversion of Control,中文名称是反转控制。其核心思想就是反转资源获取的方向。传统的资源查找方式要求组件向容器发起请求查找资源,然后作为回应,容器返回资源。而应用了IOC之后,则是容器在组

2017-06-30 08:57:34 262

原创 spring学习之spring简介

什么是spring一句话概括,spring是分层的java SE/EE 应用一站式的轻量级开源框架,以IOC(控制反转)和AOP(切面编程)为内核,提供了展现层Spring MVC、持久层Spring JDBC及业务层失误管理等一站式的企业级应用技术,此外还可以整合其他第三方开源框架和类库。简单来说,spring就是一个轻量级且支持扩展的开源框架。为什么使用spring在没有spring之前,开发企

2017-06-23 16:58:03 374

原创 简析TCP协议--三次握手和四次挥手

TCP简介传输层协议是端到端的,属于进程到进程级别。而一个主机是可以有多个进程的,所以传输层也就有复用和分用的功能。而TCP协议是面向连接的保证高可靠性的传输层协议,所以TCP协议用于应用程序之间的通信。当一个应用程序需要与另一个应用程序进行通信时,它会发送一个通信请求,该请求会发送到一个确切的地址。在双方三次握手后,TCP将在两个应用程序之间建立一个全双工的通信。这个全双工的通信将占用两个计算机之

2017-06-22 09:25:32 265

原创 java深入学习之ArrayList工作原理

ArrayList应该是我们使用得比较频繁的一个集合类了。它主要特点包括: 1.自动扩容,也就是常说的动态数组; 2.可以添加任何类型的对象,包括null; 3.随机访问元素速度快; 4.非安全的集合类,也就是不同步的; 如果你已经清楚ArrayList的底层数据结构、自动扩容的实现原理以及它的一些常用方法的具体实现,那么你就没有必要往下阅读了。ArrayList的数据结构ArrayLis

2017-06-11 18:36:35 242

原创 Http协议简单理解

Http协议是一种面向对象的应用层协议,但是由于它的简便,快捷,几年的时间得到快速发展和完善。HTTP协议工作于C/S架构为上,主要包括请求和响应。浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求。Web服务器根据接收到的请求后,向客户端发送响应信息。Http协议的特点1.安全性较差,传输内容明文;2.无状态,协议对于事务处理没有记忆能力。如果后续处理需要前面的信息

2017-06-11 12:37:43 651

原创 Fragment实战案例

对于Fragment,《Android编程权威指南》的作者极力推崇,坚持AUF(Always Use Fragment)原则,即总是使用Fragment。Fragment本身占用内存比Activity少很多,在流畅性,性能上具有很大的优势,尤其是在中低端手机上。此外,如果你的应用需要移植到平板上的话,那使用Fragment更是你的不二之选。 本文就是通过一个实战案例来解剖一下Fragment。

2017-04-19 19:13:12 840

原创 Android常见滑动冲突场景

Android中常见的滑动冲突主要分为三种:   1.外部滑动方向和内部滑动方向不一致   2.外部滑动方向和内部滑动方向一致   3.前两种的嵌套   既然滑动冲突都有既定的规律,那么解决滑动冲突也肯定有通用的方法.外部滑动方向和内部滑动方向不一致  在这种情形下,我们可以根据滑动距离(水平距离和垂直距离)来判断滑动方向,并且来决定是该由外部View来拦截还是由内部View来拦截,简单的来

2017-04-06 18:03:39 1130

原创 Android学习之View的事件体系完全解析

本文尝试着从View的一些基本概念,view的滑动,以及令人头疼的滑动冲突等来解析一下View.什么是View  我们都知道Activity在Android中承担着可视化的功能,而显示的往往就是各种控件的组合,例如Button,TextView,甚至是复杂的ListVIew……而这些都是View.而我们所用的布局LinearLayout,RelativeLayout等就是一组View,也就是View

2017-04-03 21:07:24 300

原创 BitMap的高效加载

BitMap的高效加载BitmapFactory类提供四种方法来实现图片资源的加载:decodeFile:从文件系统加载 decodeResource:从资源中加载 decodeStream:从输入流中加载 decodeByByteArray:从字节数组中加载 其中,decodeFile和decodeResource间接使用decodeStream来实现加载如何高效加载

2017-04-01 22:23:25 309

原创 自己实现一个ImageLoader

一般来说,一个优秀的ImageLoader应该具备:图片的同步加载,图片的异步加载,图片压缩,内存缓存,硬盘缓存,网络拉取等功能.   那么,我们现在就开始来一一实现这几种功能!图片压缩图片压缩主要通过BitmapFactory.Options来实现,步骤: 1.将BimapFactory.Options的inJustDecodeBounds参数设置为true并加载图片(只是解析图片) 2.从

2017-04-01 22:20:16 478

空空如也

空空如也

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