<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[miaoch的博客]]></title><description><![CDATA[希望大家能一起交流]]></description><link>https://blog.youkuaiyun.com/miaoch</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; miaoch]]></copyright><item><title><![CDATA[SpringMVC @Valid无效]]></title><link>https://blog.youkuaiyun.com/miaoch/article/details/81511348</link><guid>https://blog.youkuaiyun.com/miaoch/article/details/81511348</guid><author>miaoch</author><pubDate>Wed, 08 Aug 2018 16:56:34 +0800</pubDate><description><![CDATA[今天在看Spring实战第五章校验表单的时候，我出现了使用@Valid无效的情况。 
我百度了很多答案，确保引入的是javax.validation.constraints.NotNull，也知道了@Valid后面要跟着BindingResult result或者Errors errors。可是还是errors.hasErrors()始终为false。 
于是我从头看了一遍那个小节，发现我漏过了一...]]></description><category></category></item><item><title><![CDATA[关于mybatis自定义分页器中getCountSql方法的改进]]></title><link>https://blog.youkuaiyun.com/miaoch/article/details/80018790</link><guid>https://blog.youkuaiyun.com/miaoch/article/details/80018790</guid><author>miaoch</author><pubDate>Fri, 20 Apr 2018 15:02:23 +0800</pubDate><description><![CDATA[问题场景


在使用3.2.3版本（14年的时候）com.github.pagehelper的PageHelper类时，源码用的是：


private String getCountSql(String sql) {
    return &quot;select count(0) from (&quot; + sql + &quot;) tmp_count&quot;;
}


因为公司不是直接用了这个jar包，而是拿着源码改进自己...]]></description><category></category></item><item><title><![CDATA[解决打开modal窗口，第两次报modalName.modal is not a function的错误]]></title><link>https://blog.youkuaiyun.com/miaoch/article/details/79862234</link><guid>https://blog.youkuaiyun.com/miaoch/article/details/79862234</guid><author>miaoch</author><pubDate>Mon, 09 Apr 2018 10:20:02 +0800</pubDate><description><![CDATA[今天遇到一个比较诡异的问题，当我使用Bootstrap的modal时，我的方式是，show这个modal，然后调用html()将ajax的返回页面插入到modal的div中。我第一次打开这个modal总是成功的，可是再调用这个modal的modal()方法就会报modalName.modal is not a function。后来才发现，是因为我返回的页面头部有&amp;lt;script src=&quot;$...]]></description><category></category></item><item><title><![CDATA[第三章：垃圾收集器与分配策略]]></title><link>https://blog.youkuaiyun.com/miaoch/article/details/78179542</link><guid>https://blog.youkuaiyun.com/miaoch/article/details/78179542</guid><author>miaoch</author><pubDate>Sat, 24 Feb 2018 16:55:55 +0800</pubDate><description><![CDATA[概述


垃圾收集（GarbageCollection GC），GC需要完成的3件事情：

哪些内存需要回收？
什么时候回收？
如何回收？
目前内存的动态分配与内存回收技术已经相当成熟，一切看起来都进入了“自动化”时代，那为什么我们还要去了解GC和内存分配呢？答案很简单：当需要排查各种内存溢出、内存泄露问题时，当垃圾收集成为系统达到更高并发量的瓶颈时，我们就需要对这些“自动化”的技术实施必要的监控...]]></description><category></category></item><item><title><![CDATA[第二十一章：并发（下）]]></title><link>https://blog.youkuaiyun.com/miaoch/article/details/77981114</link><guid>https://blog.youkuaiyun.com/miaoch/article/details/77981114</guid><author>miaoch</author><pubDate>Thu, 14 Sep 2017 15:34:04 +0800</pubDate><description><![CDATA[新类库中的构件



CountDownLatch


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


import jav]]></description><category></category></item><item><title><![CDATA[第二十一章：并发（中）]]></title><link>https://blog.youkuaiyun.com/miaoch/article/details/77678448</link><guid>https://blog.youkuaiyun.com/miaoch/article/details/77678448</guid><author>miaoch</author><pubDate>Wed, 13 Sep 2017 17:28:40 +0800</pubDate><description><![CDATA[终结任务线程状态
线程状态：一个线程可以处于四种状态之一： 
新建（new）：当线程被创建时，它只会短暂地处于这种状态。此时它已经分配了必需的系统资源，并执行了初始化。此刻线程已经有资格获得CPU时间了，之后调度器将把这个线程转变为可运行状态或阻塞状态。
就绪（Runnable）：在这种状态下，只要调度器把时间片分配给线程，线程就可以运行。也就是说，在任意时刻，线程可以运行也可以不运行。只要调度器能]]></description><category></category></item><item><title><![CDATA[第十八章：Java I/O系统]]></title><link>https://blog.youkuaiyun.com/miaoch/article/details/76873060</link><guid>https://blog.youkuaiyun.com/miaoch/article/details/76873060</guid><author>miaoch</author><pubDate>Thu, 07 Sep 2017 17:08:05 +0800</pubDate><description><![CDATA[Java I/O系统]]></description><category></category></item><item><title><![CDATA[第二章：Java内存区域与内存溢出异常]]></title><link>https://blog.youkuaiyun.com/miaoch/article/details/77701791</link><guid>https://blog.youkuaiyun.com/miaoch/article/details/77701791</guid><author>miaoch</author><pubDate>Tue, 05 Sep 2017 16:22:36 +0800</pubDate><description><![CDATA[运行时数据区域
来看下面一张图片： 1.程序计数器（Program Counter Register） ：由于Java虚拟机的多线程是通过线程轮流切换并分配处理器执行时间的方式来实现的（一个时刻只有一个任务在执行），所以我们必须记录每个线程当前的执行位置，故其是线程私有的。 
2. Java虚拟机栈（Virtual Machine Stack）和本地方法栈（Native Method Stack）：]]></description><category></category></item><item><title><![CDATA[个人日记]]></title><link>https://blog.youkuaiyun.com/miaoch/article/details/77693350</link><guid>https://blog.youkuaiyun.com/miaoch/article/details/77693350</guid><author>miaoch</author><pubDate>Wed, 30 Aug 2017 09:03:47 +0800</pubDate><description><![CDATA[思绪有点乱，我得加快脚步，关于java的并发、I/O、注解和枚举，我打算先放一放，接下来先把JVM看完并做简单的笔记，然后再去学习spring的框架以及Apache的源码。]]></description><category></category></item><item><title><![CDATA[第二十一章：并发(上)]]></title><link>https://blog.youkuaiyun.com/miaoch/article/details/77176375</link><guid>https://blog.youkuaiyun.com/miaoch/article/details/77176375</guid><author>miaoch</author><pubDate>Fri, 18 Aug 2017 10:42:41 +0800</pubDate><description><![CDATA[并发


并发能提高吞吐量。对于单核处理器也可以做并发编程，但是如果其没有任何线程阻塞，那样还不如顺序编程。事件驱动的编程是使用并发的常见示例。
实现并发最直接的方式是在操作系统级别使用进程。进程是运行在它自己的地址空间的自包容的程序。多任务操作系统可以通过周期性地将CPU从一个进程切换到另一个进程，来实现同时运行多个进程（程序），而进程之间不会有任何干涉。但Java所使用的并发系统会共享内存和I]]></description><category></category></item><item><title><![CDATA[第十七章：容器深入研究]]></title><link>https://blog.youkuaiyun.com/miaoch/article/details/76577579</link><guid>https://blog.youkuaiyun.com/miaoch/article/details/76577579</guid><author>miaoch</author><pubDate>Tue, 08 Aug 2017 09:23:42 +0800</pubDate><description><![CDATA[容器深入研究]]></description><category></category></item><item><title><![CDATA[第十六章：数组]]></title><link>https://blog.youkuaiyun.com/miaoch/article/details/76504629</link><guid>https://blog.youkuaiyun.com/miaoch/article/details/76504629</guid><author>miaoch</author><pubDate>Wed, 02 Aug 2017 11:51:01 +0800</pubDate><description><![CDATA[java中数组的用法]]></description><category></category></item><item><title><![CDATA[第十五章：泛型(下)]]></title><link>https://blog.youkuaiyun.com/miaoch/article/details/76421804</link><guid>https://blog.youkuaiyun.com/miaoch/article/details/76421804</guid><author>miaoch</author><pubDate>Mon, 31 Jul 2017 16:39:20 +0800</pubDate><description><![CDATA[泛型

通配符]]></description><category></category></item><item><title><![CDATA[第十五章：泛型(上)]]></title><link>https://blog.youkuaiyun.com/miaoch/article/details/76127695</link><guid>https://blog.youkuaiyun.com/miaoch/article/details/76127695</guid><author>miaoch</author><pubDate>Mon, 31 Jul 2017 10:15:37 +0800</pubDate><description><![CDATA[泛型


其实前几章已经零零散散提到过泛型的使用方法了，这一章我们来详细地了解一下泛型是如何使用的。
为什么要有泛型？我们知道一般的类和方法，只能使用具体的类型：要么是基本类型，要么是自定义的类型。稍微通用一点，我们可以定义某个方法传入类型是一个基类或者接口，那我们就可以传入它的导出类。那如果我现在要求这个方法能传入其他类型的接口该怎么办？要将这个接口与原来的接口再提取一个新接口吗？这样未免也太麻]]></description><category></category></item><item><title><![CDATA[第十四章：类型信息]]></title><link>https://blog.youkuaiyun.com/miaoch/article/details/75457822</link><guid>https://blog.youkuaiyun.com/miaoch/article/details/75457822</guid><author>miaoch</author><pubDate>Tue, 25 Jul 2017 20:25:23 +0800</pubDate><description><![CDATA[类型信息


本章讨论Java如何让我们在运行时识别对象和类的信息。主要有两种方式：一种是传统的RTTI（Run-Time Type Information）（运行时识别类型信息），它假定我们在编译时已经知道了所有的类型。另一种是反射机制，它允许我们在运行时发现和使用类的信息。


RTTI


其实之前讲过的多态就是使用了RTTI的特性。我们可以不必知道对象的具体类型，而使用更加通用的类型（基类]]></description><category></category></item><item><title><![CDATA[第十三章：字符串]]></title><link>https://blog.youkuaiyun.com/miaoch/article/details/75306363</link><guid>https://blog.youkuaiyun.com/miaoch/article/details/75306363</guid><author>miaoch</author><pubDate>Wed, 19 Jul 2017 16:34:51 +0800</pubDate><description><![CDATA[字符串
字符串操作是计算机程序设计中最常见的行为。这章让我们来了解一下这个既熟悉又陌生的编程伙伴。 
不可变String
我们都知道String类是一个final类，这意味着String不可被继承。但这不是关键，查看JDK文档你就会发现，String类中用于存放字符数组的属性private final char value[];是一个常量。并且String类中的每一个看起来会修改String的方法，]]></description><category></category></item><item><title><![CDATA[第十二章：通过异常处理问题]]></title><link>https://blog.youkuaiyun.com/miaoch/article/details/75221335</link><guid>https://blog.youkuaiyun.com/miaoch/article/details/75221335</guid><author>miaoch</author><pubDate>Mon, 17 Jul 2017 11:23:40 +0800</pubDate><description><![CDATA[异常的使用]]></description><category></category></item><item><title><![CDATA[第十一章：持有对象]]></title><link>https://blog.youkuaiyun.com/miaoch/article/details/74636699</link><guid>https://blog.youkuaiyun.com/miaoch/article/details/74636699</guid><author>miaoch</author><pubDate>Mon, 17 Jul 2017 10:59:49 +0800</pubDate><description><![CDATA[持有对象，容器的用法。]]></description><category></category></item><item><title><![CDATA[第十章：内部类]]></title><link>https://blog.youkuaiyun.com/miaoch/article/details/74206474</link><guid>https://blog.youkuaiyun.com/miaoch/article/details/74206474</guid><author>miaoch</author><pubDate>Thu, 06 Jul 2017 12:00:45 +0800</pubDate><description><![CDATA[内部类]]></description><category></category></item><item><title><![CDATA[第九章：接口]]></title><link>https://blog.youkuaiyun.com/miaoch/article/details/73826783</link><guid>https://blog.youkuaiyun.com/miaoch/article/details/73826783</guid><author>miaoch</author><pubDate>Fri, 30 Jun 2017 17:03:49 +0800</pubDate><description><![CDATA[接口


接口和内部类为我们提供了一种接口和实现分离的更加结构化的方法。]]></description><category></category></item></channel></rss>