- 博客(57)
- 资源 (9)
- 收藏
- 关注
原创 Spring源码阅读--BeanDefinition 在 IOC 容器中的注册
前面两篇文章已经讲解了对spring bean配置文件的各种标签解析完后得到解析后得到封装成BeanDefinition对象,下一步就将BeanDefinition对象注册到IOC容器中。所谓注册就是将解析之后的BeanDefinition对象保存在HashMap中这样一个操作。 回顾前面两篇文章最后注册BeanDefinition对象都调用了BeanDefinitionReaderUtils 的
2017-09-28 15:18:45
588
原创 Spring源码阅读-- 解析自定义命名空间的标签
在上一篇, Spring源码阅读– IOC容器资源解析 我们分析到使用默认命名空间的http://www.springframework.org/schema/beans,即标签解析过程。这一篇我们开始探讨一下spring如何处理其它命名空间的xml标签,比如spring扩展的http://www.springframework.org/schema/context、http://www.sprin
2017-09-27 18:34:14
574
原创 Spring源码阅读-- IOC容器资源解析
上章节Spring源码阅读– IOC容器资源定位Spring IOC 容器在初始化时将配置的 Bean 定义资源文件定位封装成Resource对象。源文件的定位已分析完,接下来便是加载和解析配置文件。回到AbstractBeanDefinitionReader类中的loadBeanDefinitions(String location, Set<Resource> actualResources)方
2017-09-26 21:30:45
400
原创 Spring源码阅读-- IOC容器资源定位
1、环境搭建工程目录结构: 首先我们从最基础的spring开发代码开始,首先上场的是spring配置文件:<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframewor
2017-09-15 17:35:03
509
原创 jfinal整合Hibernate-validator校验框架
做服务器开发时,我们接收到前端传来的参数都需要进行校验,判断参数是否合法,现在基本都是采用最傻逼且最苦逼的方法,就是在每个函数里都进行参数校验,但是有很多相同的参数都要在不同函数里重复出现校验的代码,比如用户注册时需要校验手机号码、密码、年龄和验证码;用户登录时需要校验手机号码和密码,用户修改信息时需要校验年龄,于是乎,每个请求方法里都相同的校验判断语句,如图: 反复复制粘贴相同
2016-10-29 14:34:41
1636
转载 缓存淘汰算法--LFU算法
1. LFU类1.1. LFU1.1.1. 原理LFU(Least Frequently Used)算法根据数据的历史访问频率来淘汰数据,其核心思想是“如果数据过去被访问多次,那么将来被访问的频率也更高”。1.1.2. 实现LFU的每个数据块都有一个引用计数,所有数据块按照引用计数排序,具有相同引用计数的数据块则按照时间排序。具体实现如下:
2016-01-05 22:46:21
505
转载 缓存淘汰算法--LRU算法
1. LRU1.1. 原理LRU(Least recently used,最近最少使用)算法根据数据的历史访问记录来进行淘汰数据,其核心思想是“如果数据最近被访问过,那么将来被访问的几率也更高”。1.2. 实现最常见的实现是使用一个链表保存缓存数据,详细算法实现如下:1. 新数据插入到链表头部;2. 每当缓存命中(即缓存数据被访问),则将数据移到
2016-01-05 22:44:15
407
转载 Activity后台运行一段时间回来crash问题的分析与解决
最近做项目的时候碰到一个棘手的问题,花了不少时间才找到原因并解决。特此记录这个被我踩过的坑,希望其他朋友遇到此问题不要调到这坑里去了。问题描述: 1、背景:我的app中某个界面的Activity是继承FragmentActivity,因为此界面包含两个Fragment。这里我称为FragmentA和FragmentB吧。在Activity中有个刷新按钮,用来刷新ViewP
2016-01-05 20:16:23
554
转载 Android Training - 适配不同的屏幕(Lesson 2 - 适配不同屏幕密度)
Supporting Different Densities上一篇文章和大家分享了如何适配不同大小的屏幕,有个概念需要提前弄清楚,屏幕大的不一定就分辨率高,详细请看下面的内容。This lesson shows you how to support different screen densities by providing different resources and using
2015-12-05 12:11:08
357
转载 Android Training - 适配不同的屏幕(Lesson 1 - 支持不同的屏幕大小)
Android设备屏幕不一,为了更好的用户体验,我们必须做适配不同屏幕的操作Dependencies and prerequisitesAndroid 1.6 or higher (2.1+ for the sample app)Basic knowledge of Activities and FragmentExperience building an Android
2015-12-05 12:10:18
612
转载 Android Training - 创建自定义的Views(Lesson 4 - 优化Views)
前面的课程学习到了如何创建设计良好的View,并且能够使之在手势与状态切换时得到正确的反馈。下面要介绍的是如何使得view能够执行更快。为了避免UI显得卡顿,你必须确保动画能够保持在60fps以上。Do Less, Less Frequently为了加速你的view,对于频繁调用的方法,需要尽量减少不必要的代码。先从onDraw开始,需要特别注意不应该在这里做内存分配的事情,因为它
2015-12-05 11:34:02
349
转载 Android Training - 创建自定义的Views(Lesson 3 - 处理View的交互性)
绘制UI仅仅是创建自定义View的一部分。你还需要使得你的View能够以模拟现实世界的方式来进行反馈。Objects应该总是与现实情景能够保持一致。例如,图片不应该突然消失又从另外一个地方出现,因为在现实世界里面不会发生那样的事情。正确的应该是,图片从一个地方移动到另外一个地方。用户应该可以感受到UI上的微小变化,并对这些变化反馈到现实世界中。例如,当用户做fling(迅速滑动)的动作,应
2015-12-05 11:33:04
428
转载 Android Training - 创建自定义的Views(Lesson 2 - 自定义Drawing)
自定义view的最重要的一个部分是自定义它的外观。根据你的程序的需求,自定义绘制动作可能简单也可能很复杂。这节课会演示一些最常见的操作。Override onDraw()重绘一个自定义的view的最重要的步骤是重写onDraw()方法。onDraw()的参数是一个Canvas对象。Canvas类定义了绘制文本,线条,图像与许多其他图形的方法。你可以在onDraw方法里面使用那些方法
2015-12-05 11:32:08
386
转载 Android Training - 创建自定义的Views(Lesson 1 - 创建一个View类)
设计良好的类总是相似的。它使用一个好用的接口来封装一个特定的功能,它有效的使用CPU与内存,等等。为了成为一个设计良好的类,自定义的view应该:遵守Android标准规则。提供自定义的风格属性值并能够被Android XML Layout所识别。发出可访问的事件。能够兼容Android的不同平台。Android的framework提供了许多基类与XML标签用来帮助
2015-12-05 11:29:23
363
转载 Android自定义控件
开发自定义控件的步骤:1、了解View的工作原理 2、 编写继承自View的子类3、 为自定义View类增加属性 4、 绘制控件 5、 响应用户消息 6 、自定义回调函数 一、View结构原理Android系统的视图结构的设计也采用了组合模式,即View作为所有图形的基类,Viewgroup对View继承扩展为视图容器
2015-12-05 10:14:27
362
原创 Android NDK开发之JNI调用Java对象
通过使用合适的JNI函数,你可以创建Java对象,get、set 静态(static)和 实例(instance)的域,调用静态(static)和实例(instance)函数。JNI通过ID识别域和方法,一个域或方法的ID是任何处理域和方法的函数的必须参数。 下面列出了用以得到静态(static)和实例(instance)的域与方法的JNI函数。每个函数接受(作为参数)域或方法的类
2015-11-28 09:48:10
605
原创 JNI接口实现Java和C的交互
当面对带有本地代码的 Java 的应用程序时,程序员问的最通常的问之一,是在 Java 编程语言中的数据类型怎样对映到本地编程语言C和C++中的数据类型。实际上,大多数程序将需要传递参数给本地方法,和也从本地方法接受结果。1、基本类型的映射 在本地方法声明中参数类型有对应的在本地编程语言中的类型。 JNI定义了一套C和C++类型来对应在Java编程语言中的类型。
2015-11-21 17:00:04
6971
原创 JNI编程
1、JNI简介 JNI是Java调用Native机制,是Java语言自己的特性全称为Java Native Interface,JNI是java语言提供的Java和C/C++相互沟通的机制,Java可以通过JNI调用本地的C/C++代码,本地的C/C++的代码也可以调用java代码。JNI 是本地编程接口,Java和C/C++互相通过的接口。Java通过C/C++使用本地
2015-11-21 11:55:21
569
转载 JVM垃圾回收机制
原文地址:http://my.oschina.net/shootercn/blog/15393一、相关概念基本回收算法引用计数(Reference Counting)比较古老的回收算法。原理是此对象有一个引用,即增加一个计数,删除一个引用则减少一个计数。垃圾回收时,只用收集计数为0的对象。此算法最致命的是无法处理循环引用的问题。标记-清除(Mark-Sweep)此算法执
2015-11-08 17:29:47
340
原创 JVM运行时的内存区域
Jvm虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域都有各自的用途,以及创建和销毁的时间。在讨论JVM内存区域划分之前,先来看一下JVM的逻辑内存模型:1.程序计数器 程序计算器是一块较小的内存空间,它的作用可以看做是当前线程所执行的字节码的行号指示器。字节码解释器工作时就是通过改变这个计数器的值来选取下一条所需要执行的字节指
2015-11-08 09:56:07
512
原创 类加载器
类加载器虽然只用于实现类的加载动作,但它在Java程序中起到的作用却远远不限于类加载阶段。对于任意一个类,都需要由加载它的类加载器和这个类本身一起确立其在Java虚拟机中的唯一性。也就是说,比较两个类是否相等,只有在这两个类是由同一个类加载加载的前提之下才有意义,否则,即使是这两个类是来源于同一个Class文件,只要它们分别由两个不同的加载器加载,那这两个类就必定不相等。1、双亲委派模型
2015-11-07 12:14:49
295
原创 JVM类加载机制
虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。在Java语言里,类型的加载和连接过程都是在程序运行期间完成的,这样会在类加载时稍微增加一些性能开销,但却能为java应用程序提供高度的灵活性,Java中天生可以动态扩展的语言特性就是依赖运行期动态加载和动态连接这个特点实现的。1、类加载的时
2015-11-05 22:18:38
742
原创 Class类文件的结构
JAVA实现平台无关性的基础是虚拟机和字节码存储格式,使用Java编译器可以把Java代码编译为存储字节码的Class文件,使用JRuby等其他语言的编译器一样可以把程序代码编译成Class文件,虚拟机并不关心Class的来源是什么语言,只要它符合Class文件应有的结构就可以在Java虚拟机中运行。 Java语言中的各种变量、关键字和运算符号的语义最终都是由多条字节码命令组合而
2015-11-01 10:56:02
2439
转载 利用JNotify和EHCache实现静态文件缓存
介绍 JNotify:http://jnotify.sourceforge.net/,通过JNI技术,让Java代码可以实时的监控制定文件夹内文件的变动信息,支持Linux/Windows/MacOS;EHCache:http://ehcache.org/,一个广泛使用的Java缓存模块,可以做使用内存和文件完成缓存工作。 在Java Web项目中,为了提高WEB应用的响应速度,可以把
2015-10-14 22:54:02
744
转载 java缓存技术
最近在做java缓存,了解了一下.以下仅是对map对方式讨论。没有对点阵图阵讨论。作缓存要做以下2点: 1:清理及更新缓存时机的处理: . 虚拟机内存不足,清理缓存 .. 缓存时间超时,或访问次数超出, 启动线程更新2:类和方法的反射 (线程嵌套调用) reflect.invoke的使用。代码如下:package atest.hiyaCach
2015-10-14 22:36:18
434
转载 Android AsyncTask完全解析,带你从源码的角度彻底理解
转载出处:http://blog.youkuaiyun.com/guolin_blog/article/details/11711405我们都知道,Android UI是线程不安全的,如果想要在子线程里进行UI操作,就需要借助Android的异步消息处理机制。之前我也写过了一篇文章从源码层面分析了Android的异步消息处理机制,感兴趣的朋友可以参考 Android Handler、Message
2015-09-15 23:14:44
317
原创 异步任务AsyncTask使用
Android的UI线程主要负责处理用户的按键事件、用户触屏事件及屏幕绘图事件等,因此其他操作不应该、也不能阻塞UI线程,否则UI界面将会停止响应,引发ANR(Application Not Responding)异常。为了避免UI线程失去响应的问题,Android建议将耗时操作放在新线程中完成,但新线程也可能需要动态更新UI组件:比如需要从网上获取一个网页,然后在Textview中将其源代码显示
2015-09-12 20:27:57
415
原创 深入理解Android消息处理系统——Message、Looper、Handler
熟悉Windows编程的朋友可能知道Windows程序是消息驱动的,并且有全局的消息循环系统。而Android应用程序也是消息驱动的,按道理来说也应该提供消息循环机制。实际上谷歌参考了Windows的消息循环机制,也在Android系统中实现了消息循环机制。Android通过Looper、Handler来实现消息循环机制,Android消息循环是针对线程的(每个线程都可以有自己的消息队列和消息循环
2015-08-30 21:25:59
433
原创 Android的JSON数据解析
json(Javascript Object Notation)是一种轻量级的数据交换格式,相比于xml这种数据交换格式来说,因为解析xml比较的复杂,而且需要编写大段的代码,所以客户端和服务器的数据交换格式往往通过json来进行交换。尤其是对于web开发来说,json数据格式在客户端直接可以通过javascript来进行解析。一、JSON数据结构 json一共有两种数据结
2015-08-30 08:47:03
396
原创 Android的XML解析
在Android系统提供了3种XML解析器,即Pull解析器、DOM解析器和Sax解析器。开发时可以根据使用场景进行选择。Pull解析器用于处理简单的XML数据,DOM解析器和Sax解析器均可解析复杂的数据,其中DOM解析器是完全加载后才能解析,而SAX解析器可以随时加载随时解析。 在具体的解析器选择上,DOM解析器适合处理文件不大,嵌套的分支比较多,需要反复查询的场景;相比DO
2015-08-29 10:45:08
372
原创 Android的Http网络通信
在Android中针对HTTP进行网络通信有两种:一是HttpURLConnection;二是Apache HTTP客户端。HTTP通信中使用最多的就是Get和Post,Get请求可以获取静态页面,也可以把参数放在URL字符串后面,传递给服务器。Post与Get的不同之处在于Post的参数不是放在URL字符串里面,而是放在http请求数据中。1、HttpURLConnection接口
2015-08-25 21:03:07
1163
原创 Android的Content Provider组件
在Android中,应用程序之间是相互独立的,分别运行在各自的进程中。如果应用程序之间相互共享数据该如何实现呢?例如当我们要发送一条短信时,需要用到联系人应用程序,从中选择要发送的人。在这种情况下,Android提供了应用程序之间相互访问的统一接口,这些接口被定义在Content Provider中,其中包括添加、删除、修改和查询等操作。 ContentProvider定义在an
2015-08-23 16:50:53
485
原创 Android的Broadcast Receiver组件
Broadcast Receiver顾名思义是指广播接收器,它和事件处理机制类似,只不过事件处理机制是程序组件级别的,而广播事件处理机制是系统级别的。我们可以使用Intent来启动一个程序组件,我们可以通过使用sendBroadcast()方法来发起一个系统级别的事件广播来传递消息。我们可以
2015-08-22 12:57:20
510
原创 Android的Service组件
Service是Android系统提供的四种组件之一,顾名思义Service就是运行在后台的一种服务程序,一般很少和用户交互,因此没有可视化界面。定义一个Service类比较简单,只要继承Service类,实现其生命周期中的方法就可以了。一个定义好的Service必须在AndroidManifest.xml配置文件中通过元素声明才能使用。Service中定义了一系列和自身生命周期相关的方法,这些方
2015-08-21 22:52:27
764
原创 Android组件之间的信使Intent
Intent的中文意思是“意图,意向”,可以把它理解为不同组件之间的通信“媒介”或者“信使”。Intent可以启动一个Activity,也可以启动一个service,还可以发起一个广播(Broadcast)。Intent由以下几个部分组成:动作(Action)、数据(Data)、分类(Category)、类型(Type)、组件(Component)和扩展信息(Extra)。通过这些可以启动其他组件
2015-08-20 20:21:31
562
原创 屏幕旋转与Activity的生命周期
旋转屏幕会改变设备配置,设备配置就是用来描述当前状态的一系列特征。这些特征包括:屏幕的方向、屏幕的密度、屏幕的尺寸、键盘类型、底座模式及语言等等。屏幕的旋转同时会影响着Activity的生命周期。‘ 下面通过一个实例来测试一下Activity的生命周期各个方法的调用情况,在这里我们把Activity的所有方法都覆盖,并通过日志的方式来观察运行结果。public class
2015-08-16 15:30:43
534
原创 Activity的生命周期
在Android系统中Activity作为Activity栈(Stack)被管理,当前活动的Activity处于栈顶,之前的非活动Activity被压入下面成为非活动Activity,等待是否可能被恢复为活动状态。在Activity的生命周期中有四个重要的状态:活动 ——显示在屏幕的前面(在栈顶),有焦点并可见暂停——失去焦点,但是它仍然可见停止——失去焦点,不可见销毁——被系统或进程
2015-08-16 09:22:37
560
原创 Android组件之Activity讲解
在Android系统中activity提供可视化的用户界面,一个Android应用通常由多个activity组成。多个activity组成了Activity栈,当前活动的Activity处于栈顶。Activity有自己的生命周期,由Android系统来控制。 创建一个Activity界面一般是继承Activity类(当然也可以继承ListActivity、MapActivity等)
2015-08-15 16:27:32
681
原创 设计模式--备忘录模式
场景— 录入大批人员资料。正在录入当前人资料时,发现上一个人的资料录错了,此时需要恢复上一个人的资料,再进行修改。— Word文档编辑时,突然电脑死机或者断电,再打开时,可以看到word提示你恢复以前的文档。核心— 就死保存某个对象内部状态的拷贝,这样以后就可以将该对象恢复到原先的状态。结构— 源发器类Originator— 备忘录类Mement
2015-08-15 11:51:07
341
原创 设计模式--观察者模式
场景:- 聊天室程序里,服务器创建好后,A,B,C三个客户端连接上来公开聊天。A向服务器发送数据,服务器端聊天数据改变。我们希望将这些聊天数据分别发给其他在线客户。也就是说,每个客户端需要更新服务器端的数据。这个场景我们可以使用观察者模式来处理。我们可以把客户称之为观察者。需要同步给多个观察者的数据封装到对象中,称之为目标。核心- 观察者模式主要用于1:N的通知。当一个对象(目
2015-08-15 09:57:51
309
Android Dalvik虚拟机结构及机制剖析(第2卷)
2015-08-17
Android应用开发详解PDF+源码
2015-08-07
Android面试题
2015-07-31
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人