自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

aty

虽有嘉肴,弗食,不知其旨也;虽有至道,弗学,不知其善也。是故学然后知不足,教然后知困。知不足,然后能自反也;知困,然后能自强也。

  • 博客(29)
  • 资源 (1)
  • 收藏
  • 关注

原创 (六)使用angular.bootstrap完成模块的手动加载

之前我们看到使用ng-app指令,可以实现模块的自动加载。现在我们看下,angular中如何手动加载模块。需要使用到angular.bootstrap这个函数。 // 创建moudle1 var rootMoudle = angular.module('moudle1', []); rootMoudle.controller("controller1

2014-09-30 17:11:12 6911 1

原创 (五)带属性值的ng-app指令,实现自定义模块的自动加载

现在我们看下

2014-09-30 16:52:43 3515

原创 (四)关于ng-app自动bootstrap框架

之前博客 (三)ng-app的使用困惑和angularJS框架的自动加载 提出了使用ng-app指令的情况。之前觉得出现第4和第5种情况很奇怪,因为只看到了现象,没有看到本质。JS错误,最直观的表现方式就是:弹出一个非常不友好的JS错误窗口。当脚本出现了未捕获的错误,浏览器才会弹出错误提示。还有一种比较隐晦的表示:在浏览器的控制台输出错误信息。这提示我们:使用JS框架的时候,一定要用下F12看

2014-09-30 16:14:00 3683

原创 (三)ng-app的使用困惑和angularJS框架的自动加载

ng-app是angular的一个指令,代表一个angular应用(也叫模块)。使用ng-app或ng-app=""来标记一个DOM结点,让框架会自动加载。也就是说,ng-app是可以带属性值的。如果想要实现自动加载,那么就不能让ng-app带有属性值。 div1:{{1+3*2}} 1、不含ng-app,无法自动加载,这个比较好理解。 div1:{{1+

2014-09-30 13:17:23 5382 4

原创 javascript读取和修改原型特别需要注意的事儿,因为原型的读写不具有对等性

对于从原型对象继承而来的成员,其读和写具有内在的不对等性。比如有一个对象A,假设它的原型对象是B,B的原型对象是null。如果我们需要读取A对象的name属性值,那么JS会优先在A中查找,如果找到了name属性那么就返回;如果A中没有name属性,那么就到原型B中查找name,如果找到了就返回;如果原型B中也没有找到,由于此时已经到了原型链的最顶端,还是没有找到name,就直接返回undefine

2014-09-29 20:35:42 2850 2

原创 简单理解javascript中的原型对象,实现对之间共享属性和行为

javascript中提供了构造函数,能够方便的创建对象。典型的构造函数如下:function Person(name, age) {   this.name = name;  this.age = age;  this.say = function () {    return this.name + ',' + this.age;;} 之后就可以用new和构造函数

2014-09-29 20:04:44 2835

原创 javascript中构造函数的返回值问题和new对象的过程

首先明确一点:javascript中构造函数是不需要有返回值的,这一点跟java很类似。可以认为构造函数和普通函数的最大差别就是:构造函数中没有return语句,普通函数可以有return语句;构造函数中会使用this关键字定义成员变量和成员方法,普通的函数不会使用this关键字定义成员变量和方法。function Person(name,sex) { this.name =

2014-09-29 19:16:04 3977 3

原创 Javascript构造函数中变量的作用域问题

构造函数可以与new一起使用,代表创建对象;也能够当做普通的函数调用,因为它也是一个函数。function Person(name) { this.name=name;}Person(12);alert(window.name);//12 可以看到当构造函数被当成普通函数调用的时候,this代表的是全局的window对象。很显然把构造函数当成普通函数调用,不是好的做法, 也

2014-09-29 18:38:28 3178 1

原创 (二)用控制器controller给模型数据赋初始值

之前博客,很简单的就实现了模型数据和页面显示的自动绑定。现在我们使用控制器,给模型赋初始值。如果使用jquery来实现变量赋初值,需要在页面加载完成后执行$("#target").attr("value",selfValue);使用AngularJS代码如下: Hello,World!

2014-09-29 11:45:49 2570

原创 (一)AngularJS入门贴之Hello World

以前项目都是使用JQuery和原始的javascript,最近参加一个项目需要用到AngularJS、RequireJS等比较潮的框架。这里写一些博客,记录自己的学习过程,虽然冠以原创之名,其实都是参考网上的一些资料,加上自己的一些理解。再没有熟悉AngularJS之前,估计也不出什么高质量的文章,只能算是学习笔记和备忘录。

2014-09-28 20:22:20 2435 2

原创 学习java线程状态和看懂thread dump文件中的线程信息

t1 : 这个是线程名称,可以在new Thread()对象的时候指定,或者调用Thread.setName。有了这个名称,搜索thread dump的时候更加方便。这也就是为什么,一般创建线程的时候需要指定线程名称,而不是使用默认的名称。prio=6 : 这个代表的是线程的优先级priority,也可以通过Thread类中的API修改。实际应用中,一般不会设置该属性,没有太大的用处。tid : Java的线程Id (这个线程在当前虚拟机中的唯一标识)。nid : 线程本地标识,是线程在操作系统中的标

2014-09-23 20:18:49 13169 3

原创 文章汇总:关于java的finalize,引用和引用队列,自动释放系统外部资源的一些文章

之前写过一篇博客,关于非堆内存如何自动释放的,由此慢慢延伸写了几篇关于垃圾回收、finalize机制、引用和引用队列、sun.misc.Cleaner相关的文章,通过这几篇文章感觉自己收获很大了,对java垃圾回收相关的知识了解更深刻了。这篇博客主要做个汇总和简介,按照自己思路的延伸,把博客汇总下,方便大家阅读和查看。

2014-09-22 21:35:32 1923

原创 关于finalize机制和引用、引用队列的一些结论

C++有析构函数这个东西,能够很好地在对象销毁前做一些释放外部资源的工作,但是java没有。Object.finalize()提供了与析构函数类似的机制,但是它不安全、会导致严重的内存消耗和性能降低,应该避免使用。best practice是:像java类库的IO流、数据库连接、socket一样,提供显示的资源释放接口,程序员使用完这些资源后,必须要显示释放。所以可以忘记Object.finali

2014-09-22 16:46:54 3728

原创 使用sun.misc.Cleaner或者PhantomReference实现堆外内存的自动释放

之前的一篇博客:System.gc()和-XX:+DisableExplicitGC启动参数,以及DirectByteBuffer的内存释放 文章末尾处:提到java NIO包是通过sun.misc.Cleaner和PhantomReference来实现堆外内存的自动释放的。现在我们来学习下Cleaner和PhantomReference的使用,自己封装实现堆外内存的自动释放。sun.misc.Cleaner是JDK内部提供的用来释放非堆内存资源的API。 Cleaner.create()需要2个参数:第

2014-09-21 20:57:36 7301

原创 java中的4种reference的差别和使用场景(含理论、代码和执行结果)

我们知道java语言提供了4种引用类型:强引用、软引用(SoftReference)、弱引用(WeakReference)和幽灵引用(PhantomReference),与引用密切相关的,还有一个引用队列ReferenceQueue。引用和引用队列的关系,对于垃圾回收来说非常重要,学习垃圾回收机制,必须要先了解引用和引用队列的使用方法。本文主要参考网上的一些理论,同时配合自己的一些测试代码,更好的理解这些概念,也解决了之前博客中遗留的问题。

2014-09-21 18:31:28 13604 3

原创 Effective Java Item7:Avoid Finalizers,解释为什么finalize是不安全的,不建议使用

在讨论如何回收堆外内存的时候,提到“NIO中direct memory的释放并不是通过finalize(),因为finalize不安全而且影响能”。Effective Java一书中也提到:Avoid Finalizers。人都有潜在的叛逆意识,别人给的结论或者制定的规范,除非有足够的理由说服你,除非懂得这么做背后的原因,否则只能是死记硬背,没有形象深入的理解,不能学到真正的东西。本文通过自己的理解和一些实际的例子,和大家一起更形象的理解finalize。还是那句经典的话“talking is cheap,

2014-09-21 15:38:03 5880 3

原创 System.gc()和-XX:+DisableExplicitGC启动参数,以及DirectByteBuffer的内存释放

我们知道java代码无法强制JVM何时进行垃圾回收,也就是说垃圾回收这个动作的触发,完全由JVM自己控制,它会挑选合适的时机回收堆内存中的无用java对象。代码中显示调用System.gc(),只是建议JVM进行垃圾回收,但是到底会不会执行垃圾回收是不确定的,可能会进行垃圾回收,也可能不会。什么时候才是合适的时机呢?一般来说是,系统比较空闲的时候(比如JVM中活动的线程很少的时候),还有就是内存不足,不得不进行垃圾回收。我们例子中的根本矛盾在于:堆内存由JVM自己管理,堆外内存必须要由我们自己释放;堆内存的

2014-09-19 22:11:44 27248 7

转载 Unix/Linux操作系统:孤儿进程与僵尸进程[总结]

本文转载自:http://www.cnblogs.com/Anker/p/3271773.html

2014-09-17 21:32:32 1623

原创 (入门贴)JVM堆内存相关的启动参数:年轻代、老年代和永久代的内存分配

如果想观察JVM进程占用的堆内存,可以通过命令工具jmap或者可视化工具jvisualvm.exe。JVM这些启动参数都拥有默认值,如果想了解JVM的内存分配策略,最好手动设置这些启动参数。再通过JDK提供的工具的统计结果,就比较容易理解这些内存分配的理论知识。运行环境是win7 32位操作系统,JDK1.7.0_60版本。可以发现:堆内存、新生代内存、老年代内存、永久代内存,都有一个初始内存,还有一个最大内存。

2014-09-17 21:01:15 14676 1

原创 使用HashMap需要注意的事儿:不要暴露Map.entry给外部不可信代码Map.entrySet()

通过Map.entrySet()的返回结果,能够删除原始HashMap中存储的键值对。如果我们将Set<Map.Entry<String, String>> allEntrys 作为函数参数传递给不可信代码,那么外部的恶意代码就能删除原始HashMap中存储的数据。所以我们应该避免传递Set<Map.Entry<String, String>>作为函数参数,防止外部代码恶意的或者不小心修改了原始的数据。这个隐藏的功能不是所有的java程序员都知道,所以需要注意下,以免编程出错。

2014-09-17 19:30:15 2308

原创 jmap命令(Java Memory Map)的使用

jmap的使用可以参考:官方文档 http://docs.oracle.com/javase/6/docs/technotes/tools/share/jmap.html和这篇博客 http://blog.csdn.net/fenglibing/article/details/6411953本文主要是介绍一下jmap常用的几个参数,作为自己的备忘录。注意如果是使用64位的JVM,使用j

2014-09-17 12:59:37 1965

原创 java中使用堆外内存,关于内存回收需要注意的事和没有解决的遗留问题(等大神解答)

JVM可以使用的内存分外2种:堆内存和堆外内存,堆内存完全由JVM负责分配和释放,如果程序没有缺陷代码导致内存泄露,那么就不会遇到java.lang.OutOfMemoryError这个错误。使用堆外内存,就是为了能直接分配和释放内存,提高效率。JDK5.0之后,代码中能直接操作本地内存的方式有2种:使用未公开的Unsafe和NIO包下ByteBuffer。C语言的内存分配和释放函数malloc/free,必须要一一对应,否则就会出现内存泄露或者是野指针的非法访问。java中我们需要手动释放获取的堆外内存吗

2014-09-16 21:43:52 18258 5

原创 使用JVM管理工具jvisualvm,系统提示"无法检测到本地java应用程序"的原因和解决办法

我使用的JDK版本是1.6.0_37版本,操作系统是windows xp,今天想使用下%JAVA_HOME%/bin/目录下的一些管理工具,结果遇到麻烦了。使用JPS命令,无法列出本地运行的java虚拟机;使用jvisualvm,提示"无法检测到本地java应用程序"。这个问题的原因可以看下:http://docs.oracle.com/javase/1.5.0/docs/guide/mana

2014-09-15 22:20:11 9580

原创 理解ThreadPoolExecutor源码(一)线程池的corePoolSize、maximumPoolSize和poolSize

我们知道,受限于硬件、内存和性能,我们不可能无限制的创建任意数量的线程,因为每一台机器允许的最大线程是一个有界值。也就是说ThreadPoolExecutor管理的线程数量是有界的。线程池就是用这些有限个数的线程,去执行提交的任务。然而对于多用户、高并发的应用来说,提交的任务数量非常巨大,一定会比允许的最大线程数多很多。为了解决这个问题,必须要引入排队机制,或者是在内存中,或者是在硬盘等容量很大的

2014-09-13 10:19:13 51599 4

原创 struts2的action从request获取参数值的几种方式

使用jquery框架的ajax能够方便的向后台传递参数,以$.post为例,参数有2种方式字符串和键值对:$.post(url, "name=aty&age=25")和$.post(url, {"name":"aty","age":25})。显然,使用json的方式比使用字符串拼接要方便。对于后台的action来说,这2种方式是等价的,而且jquery也提供了param、serialize、serialize能够实现json与url格

2014-09-05 22:45:12 5024

原创 不知道属性名称,动态遍历json中的所有键值对

javascript中使用ajax技术访问后台资源的时候,常常使用json作为轻量级数据传输格式。json类似于java中的HashMap,是由一系列的key-value键值对构成。如果后台返回给前台的json中key的值是动态生成的,那么我们没有办法使用常规的object.name或object["name"]的方式来获取json中的值。这个时候我们需要在不知道属性名称的时候,遍历json对象

2014-09-05 12:58:24 7236

原创 javascript中奇怪的if-else if-else

。javascript作为解释型语言,语法要求和编译提示都不像java/c这样严格。编写javascript的时候,一定要细心和规范,不然可能会出现你觉得非常诡异的问题。

2014-09-05 11:47:19 2126 2

原创 SQL或HQL预编译语句,能够防止SQL注入,但是不能处理%和_特殊字符

最近项目在做整改,将所有DAO层的直接拼接SQL字符串的代码,转换成使用预编译语句的方式。个人通过写dao层的单元测试,有以下几点收获。dao层代码如下//使用了预编译sqlpublic List selectConfigBySuffix(String suffix){ String hql = "from IndvConfigModel where configKey

2014-09-04 14:58:28 4113

原创 JVM的动态agent机制:在main函数启动之后运行agent

premain时Java SE5开始就提供的代理方式,给了开发者诸多惊喜,不过也有些须不变,由于其必须在命令行指定代理jar,并且代理类必须在main方法前启动。因此,要 求开发者在应用前就必须确认代理的处理逻辑和参数内容等等

2014-09-02 22:31:06 10788 1

eclipse最常用的快捷键

这是我个人从网上整理出来的快捷键,日常很常用的列在这里。而且比较清晰,欢迎大家下载。在eclipse提高开发效率

2012-10-12

空空如也

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

TA关注的人

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