自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

miaoch的博客

希望大家能一起交流

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

原创 SpringMVC @Valid无效

今天在看Spring实战第五章校验表单的时候,我出现了使用@Valid无效的情况。 我百度了很多答案,确保引入的是javax.validation.constraints.NotNull,也知道了@Valid后面要跟着BindingResult result或者Errors errors。可是还是errors.hasErrors()始终为false。 于是我从头看了一遍那个小节,发现我漏过了一...

2018-08-08 16:56:34 7273 3

原创 关于mybatis自定义分页器中getCountSql方法的改进

问题场景在使用3.2.3版本(14年的时候)com.github.pagehelper的PageHelper类时,源码用的是:private String getCountSql(String sql) { return "select count(0) from (" + sql + ") tmp_count";}因为公司不是直接用了这个jar包,而是拿着源码改进自己...

2018-04-20 15:02:23 3047

原创 解决打开modal窗口,第两次报modalName.modal is not a function的错误

今天遇到一个比较诡异的问题,当我使用Bootstrap的modal时,我的方式是,show这个modal,然后调用html()将ajax的返回页面插入到modal的div中。我第一次打开这个modal总是成功的,可是再调用这个modal的modal()方法就会报modalName.modal is not a function。后来才发现,是因为我返回的页面头部有<script src="$...

2018-04-09 10:20:02 1561

原创 第三章:垃圾收集器与分配策略

概述垃圾收集(GarbageCollection GC),GC需要完成的3件事情:哪些内存需要回收?什么时候回收?如何回收?目前内存的动态分配与内存回收技术已经相当成熟,一切看起来都进入了“自动化”时代,那为什么我们还要去了解GC和内存分配呢?答案很简单:当需要排查各种内存溢出、内存泄露问题时,当垃圾收集成为系统达到更高并发量的瓶颈时,我们就需要对这些“自动化”的技术实施必要的监控...

2018-02-24 16:55:55 268

原创 第二十一章:并发(下)

新类库中的构件CountDownLatch可以向CountDownLatch对象设置一个初始计数值,任何对象在这个对象上调用await()方法都将阻塞,直至这个计数值为0(如果一开始就是0那就不用等待)。我们通过其他任务在这个对象上调用countDown()来缩小这个计数值(最多减到0)。这个构件的意义就是设置一些任务必须在n个任务都完成的情况下才可以执行。import jav

2017-09-14 15:34:04 240

原创 第二十一章:并发(中)

终结任务线程状态线程状态:一个线程可以处于四种状态之一: 新建(new):当线程被创建时,它只会短暂地处于这种状态。此时它已经分配了必需的系统资源,并执行了初始化。此刻线程已经有资格获得CPU时间了,之后调度器将把这个线程转变为可运行状态或阻塞状态。就绪(Runnable):在这种状态下,只要调度器把时间片分配给线程,线程就可以运行。也就是说,在任意时刻,线程可以运行也可以不运行。只要调度器能

2017-09-13 17:28:40 278

原创 第十八章:Java I/O系统

Java I/O系统

2017-09-07 17:08:05 383

原创 第二章:Java内存区域与内存溢出异常

运行时数据区域来看下面一张图片: 1.程序计数器(Program Counter Register) :由于Java虚拟机的多线程是通过线程轮流切换并分配处理器执行时间的方式来实现的(一个时刻只有一个任务在执行),所以我们必须记录每个线程当前的执行位置,故其是线程私有的。 2. Java虚拟机栈(Virtual Machine Stack)和本地方法栈(Native Method Stack):

2017-09-05 16:22:36 259

原创 个人日记

思绪有点乱,我得加快脚步,关于java的并发、I/O、注解和枚举,我打算先放一放,接下来先把JVM看完并做简单的笔记,然后再去学习spring的框架以及Apache的源码。

2017-08-30 09:03:47 269

原创 第二十一章:并发(上)

并发并发能提高吞吐量。对于单核处理器也可以做并发编程,但是如果其没有任何线程阻塞,那样还不如顺序编程。事件驱动的编程是使用并发的常见示例。实现并发最直接的方式是在操作系统级别使用进程。进程是运行在它自己的地址空间的自包容的程序。多任务操作系统可以通过周期性地将CPU从一个进程切换到另一个进程,来实现同时运行多个进程(程序),而进程之间不会有任何干涉。但Java所使用的并发系统会共享内存和I

2017-08-18 10:42:41 229

原创 第十七章:容器深入研究

容器深入研究

2017-08-08 09:23:42 322

原创 第十六章:数组

java中数组的用法

2017-08-02 11:51:01 271

原创 第十五章:泛型(下)

泛型通配符

2017-07-31 16:39:20 252

原创 第十五章:泛型(上)

泛型其实前几章已经零零散散提到过泛型的使用方法了,这一章我们来详细地了解一下泛型是如何使用的。为什么要有泛型?我们知道一般的类和方法,只能使用具体的类型:要么是基本类型,要么是自定义的类型。稍微通用一点,我们可以定义某个方法传入类型是一个基类或者接口,那我们就可以传入它的导出类。那如果我现在要求这个方法能传入其他类型的接口该怎么办?要将这个接口与原来的接口再提取一个新接口吗?这样未免也太麻

2017-07-31 10:15:37 1736

原创 第十四章:类型信息

类型信息本章讨论Java如何让我们在运行时识别对象和类的信息。主要有两种方式:一种是传统的RTTI(Run-Time Type Information)(运行时识别类型信息),它假定我们在编译时已经知道了所有的类型。另一种是反射机制,它允许我们在运行时发现和使用类的信息。RTTI其实之前讲过的多态就是使用了RTTI的特性。我们可以不必知道对象的具体类型,而使用更加通用的类型(基类

2017-07-25 20:25:23 422

原创 第十三章:字符串

字符串字符串操作是计算机程序设计中最常见的行为。这章让我们来了解一下这个既熟悉又陌生的编程伙伴。 不可变String我们都知道String类是一个final类,这意味着String不可被继承。但这不是关键,查看JDK文档你就会发现,String类中用于存放字符数组的属性private final char value[];是一个常量。并且String类中的每一个看起来会修改String的方法,

2017-07-19 16:34:51 326

原创 第十二章:通过异常处理问题

异常的使用

2017-07-17 11:23:40 310

原创 第十一章:持有对象

持有对象,容器的用法。

2017-07-17 10:59:49 516

原创 第十章:内部类

内部类

2017-07-06 12:00:45 241

原创 第九章:接口

接口接口和内部类为我们提供了一种接口和实现分离的更加结构化的方法。

2017-06-30 17:03:49 341

原创 第八章:多态

多态在面向对象的程序设计语言中,多态是继数据抽象和继承之后的第三种基本特征。多态也被称作动态绑定、后期绑定或运行时绑定。再论向上转型对象既可以作为它自己本身的类型使用,也可以作为它的基类类型使用。把某个对象的引用视为对其基类类型的引用的做法称为向上转型。来看下面的例子:public class People extends Animal { String type = "人类";

2017-06-27 16:47:27 249

原创 第七章:复用类

复用类组合语法太常用了,我就不记了。继承语法由于涉及基类和导出类两个类,而不是只有一个类,所以要试着想像导出类所产生的结果对象,会有点困惑。从外部来看,它就像是一个与基类具有相同接口的新类,或许还有一些额外的方法和域。但继承并不只是复制基类的接口。当创建了一个导出类的对象时,该对象包含了一个基类的子对象。这个子对象和你用基类直接创建的对象是一样的。二者区别在于,后者来自于外部,而基类的子对象被

2017-06-26 11:54:19 414

原创 第十五章:使用Canvas绘图(2D上下文)

使用Canvas绘图-

2017-06-22 17:06:25 1351

原创 第六章:访问权限控制

访问权限控制程序是会被不断改进的,如果程序开发者想要移除旧的实现而要添加新的实现时,改动任何一个成员都有可能破坏客户端程序员的代码。那么类库开发者就会束手束脚,无法对任何事物进行改动。为了解决这个问题,Java提供了访问权限修饰符,以供类库开发人员向客户端程序员指明哪些是可用的、哪些是不可用的。访问权限控制的等级从最大到最小权限依次为:public、protected、包访问权限(没有关键词)和

2017-06-22 14:06:04 359

原创 第五章:初始化与清理

初始化与清理C++引入了构造器(constructor)的概念,这是一个在创建对象时被自动调用的特殊方法。Java也采用了构造器,并额外提供了垃圾回收器。用构造器确保初始化可以假想为编写的每个类都定义一个initialize()方法。在我们使用对象之前,都应该先调用该方法。创建对象时,如果其类具有构造器,Java就会在用户有能力操作对象之前自动调用相应的构造器,从而保证了初始

2017-06-21 11:44:45 294

原创 第四章:控制执行流程

控制执行流程在for循环的控制表达式中,我们可以用逗号分隔一些语句使其独立执行。这种写法很少见,所以我将其记录下来。 int i=0; String s = "hello"; for (i=1,s="world";i<2;i++,s="!") { System.out.println(s);//"world" } System.out.pri

2017-06-20 16:09:13 238

原创 第三章:操作符(这是我第三遍编辑了,因为bug)

操作符我之前也看过JavaScript中的操作符,大体上来说,区别不是很大。因为比较基础,我就不仔细分类了,就把一些关键点记录下来。几乎所有操作符都只能操作基本类型,例外的操作符是=、==、!=。这三个操作符能操作所有的对象。另外String类型支持+和+=操作(字符串拼接)。关于赋值操作= 赋值操作符的右值可以是任何常数、变量或表达式。左值必须是一个明确的、已命名的变量。在为基本类型变量

2017-06-20 09:41:01 318

原创 吐槽CSDN的BUG

遇到一个记一个在公司写了一半的文章,回家完成后发布。第二天来公司点击写新文章,居然还是写了一半的文章。更可气的是如果保存了,那么就会替换掉已经发布的文章。写新文章为什么域名后面会带什么id=xxxx,这尼玛不是坑爹吗?

2017-06-19 22:35:56 465

原创 第二章:一切都是对象

一切都是对象用引用操作对象书中有一个很有趣的例子:遥控器(引用)操作电视机(对象)。我们拥有的是对象的引用,即遥控器。我们对对象的操作都是通过引用去操作的。如果我们想在房间里走走,同时还能操作电视机。那我们应该携带遥控器而不是电视机(简化)。此外,遥控器可以独立存在,也就是说你可以拥有一个引用,但并不一定有对象与它关联(这也是我们经常出现NPE异常的原因)。必须由你创建所有对象一旦创建一个引用

2017-06-16 16:53:23 264

原创 第十四章:表单脚本(选择框脚本、表单序列化、富文本编辑)

表单脚本选择框脚本选择框是通过<select>和<option>元素创建的。<select>元素是在JS中是HTMLSelectElement 类型,提供了额外的属性和方法: add(newOption, relOption):向控件中插入新<option>元素,其位置在相关项(relOption)之前。可以通过new Option(text, value)创建HTMLOptionElement

2017-06-13 15:06:58 662

原创 第十四章:表单脚本(文本框脚本)

表单脚本文本框脚本众所周知,在HTML中有两种文本框:一个是使用<input>(type为text)的单行文本框,一个是使用<textarea>的多行文本框。<input type="text">单行文本框: size:指定文本框中能够显示的字符数(可能是按照最宽的那种字符,而字母细一点,能放多一点。)maxlength:指定文本框可以接受的最大字符数value:可填写初始值(长度可以超过

2017-06-09 11:57:46 445

原创 第十四章:表单脚本(表单的基础知识)

表单脚本JavaScript最初的一个应用,就是分担服务器处理表单的责任,打破处处依赖服务器的局面。由于Web表单没有为许多常见任务提供现成的解决手段,很多开发人员不仅会在验证表单的时候使用JavaScript,而且还增强了一些标准表单控件的默认行为。表单的基础知识在HTML中,表单是由<form>元素来表示的。在JavaScript中,表单对应的是HTMLFormElement 类型。HTM

2017-06-05 16:45:56 306

原创 第十三章:事件(内存和性能、模拟事件)

事件内存和性能前面我们提到了好多好多事件,那么为页面添加事件处理程序就设计到了内存和性能问题。例如,如果我们为大量按钮添加匿名函数事件处理程序,首先这些匿名函数都是对象是占用空间的,其次这些添加事件处理程序的操作也会延迟整个页面的交互就绪时间。事件委托由于大多数类型的事件都是会冒泡的,所以我们可以为它们相同的父元素添加一件事件处理程序,这样就能避免大量地添加事件处理程序了

2017-06-02 10:01:47 329

原创 第十三章:事件类型(HTML5事件、设备事件、触摸与手势事件)

事件事件类型HTML5事件DOM规范没有涵盖所有浏览器支持的所有事件。很多浏览器还实现了一些自定义的事件。HTML5详尽列出了浏览器应该支持的所有事件。此处讨论得到浏览器完善支持的事件,其他事件会在其余地方讨论。contextmenu事件可以简单地认为该事件是鼠标右键单击事件(在Windows中是右键单击,在Mac中是Ctrl+单击,以下默认为Windows)。该事件的名称叫上下文菜单,就像我

2017-05-27 15:28:00 1033

原创 第十三章:事件类型(键盘和文本事件、复合事件、变动事件)

事件事件类型键盘和文本事件

2017-05-26 10:53:05 792

原创 第十三章:事件类型(鼠标与滚轮事件)

事件事件类型鼠标与滚轮事件-

2017-05-25 10:41:17 452

原创 第十三章:事件类型(简述、UI事件、焦点事件)

事件事件类型由于事件类型这一小节篇幅很长,所以我决定再细化一下。以下是DOM3级事件规定的几类事件: UI(User Interface,用户界面)事件,当用户与页面上的元素交互时触发。焦点事件,当元素获得或失去焦点时触发。鼠标事件,当用户通过鼠标在页面上执行操作时触发。滚轮事件,当使用鼠标滚轮(或类似设备)时触发。文本事件,当在文档中输入文本时触发。键盘事件,当用户通过键

2017-05-18 12:00:34 601

原创 第十三章:事件(事件对象)

事件事件对象触发DOM上的某个事件后,会产生一个事件对象event,这个对象包含着所有与事件有关的信息。所有浏览器都支持event对象,但方式有所不同。DOM中的事件对象兼容DOM的浏览器会将一个event对象传入到事件处理程序中。无论指定事件处理程序使用什么方法(DOM0级或DOM2级),都会传入event对象。 var btn = document.getElementById("

2017-05-16 11:43:50 272

原创 第十三章:事件(事件流、事件处理程序)

事件事件流事件冒泡事件捕获DOM事件流事件处理程序HTML事件处理程序事件JavaScript和HTML之间的交互是通过事件实现的。事件最早是在IE3和Netscape Navigator2中出现的,当时是作为分担服务器运算负载的一种手段。在IE4和Netscape Navigator4发布时,这两种浏览器都提供了相似但不相同的API。IE9、Fire

2017-05-12 14:09:55 535

原创 第十二章:DOM2 和 DOM3(范围)

DOM2和DOM3范围为了让开发人员更方便的控制页面,DOM Level 2 Traversal and Range 模块定义了“范围”接口。通过范围可以选择文档的一个区域,而不必考虑节点的界限。这种行为是在后台完成的,对用户是不可见的。IE以专有方式实现了自己的范围特性。DOM中的范围DOM2级在Document类型中定义了createRange()方法。使用hasFeature()或者直接

2017-05-09 15:48:00 638

空空如也

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

TA关注的人

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