<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[平湖的博客]]></title><description><![CDATA[守得云中月，方可揽星辰。]]></description><link>https://blog.youkuaiyun.com/eahau</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; eahau]]></copyright><item><title><![CDATA[Java 代码热更方案]]></title><link>https://blog.youkuaiyun.com/eahau/article/details/114242033</link><guid>https://blog.youkuaiyun.com/eahau/article/details/114242033</guid><author>eahau</author><pubDate>Sun, 28 Feb 2021 23:10:51 +0800</pubDate><description><![CDATA[由于 jvm just in time 和支持解释运行和过热代码编译的特性，所以无需像 c/c++ 这种纯静态语言，需要先编译再执行。jvm 系的语言是支持脚本执行，只要编译成 class 供 jvm 识别，即可执行，执行过热之后(HotSpot)再编译成机器码，从而提高开发和运行效率的。
代码热更方案应用场景

有状态服务的代码替换或 bugFix
因为应用程序中保存了用户的信息或上下文信息，重启应用会导致内存中的数据丢失，所以代码热更非常适合这种类型的服务。

比如提供与用户对话的服务，内存中保存了一些]]></description><category></category></item><item><title><![CDATA[leetcode - 189. 旋转数组]]></title><link>https://blog.youkuaiyun.com/eahau/article/details/94278947</link><guid>https://blog.youkuaiyun.com/eahau/article/details/94278947</guid><author>eahau</author><pubDate>Sun, 30 Jun 2019 08:13:25 +0800</pubDate><description><![CDATA[/**
	 * 旋转数组：将数组的后 k 位数移至头部，前 length - k 位数移至尾部
	 * 要求使用原地算法，即不使用额外的空间
	 * @param nums 数组
	 * @param k 旋转的个数
	 */
	private static void rotate(int[] nums, int k) {
		int length = nums.length;
		// 无须操...]]></description><category></category></item><item><title><![CDATA[字符串的四则运算表达式]]></title><link>https://blog.youkuaiyun.com/eahau/article/details/94051872</link><guid>https://blog.youkuaiyun.com/eahau/article/details/94051872</guid><author>eahau</author><pubDate>Fri, 28 Jun 2019 21:36:45 +0800</pubDate><description><![CDATA[public static void main(String[] args) {
        // 支持括号 小数 负数
		String statement = "-10/(4.5+5.5)*(-4-6+20)/-2"; // 10/(-2) 也行
		System.out.println(calculate(statement));
	}

    @SuppressWarnings("...]]></description><category></category></item><item><title><![CDATA[Java并发核心浅谈（二）]]></title><link>https://blog.youkuaiyun.com/eahau/article/details/92414252</link><guid>https://blog.youkuaiyun.com/eahau/article/details/92414252</guid><author>eahau</author><pubDate>Sun, 16 Jun 2019 18:05:14 +0800</pubDate><description><![CDATA[回顾
在上一篇 Java并发核心浅谈 我们大概了解到了Lock和synchronized的共同点，再简单总结下：

Lock主要是自定义一个 counter，从而利用CAS对其实现原子操作，而synchronized是c++ hotspot实现的 monitor（具体的咱也没看，咱就不说）
二者都可重入（递归，互调，循环），其本质都是维护一个可计数的 monitor，在其它线程访问加锁对象时会判断...]]></description><category></category></item><item><title><![CDATA[Java中各种对象的各种实例化方式]]></title><link>https://blog.youkuaiyun.com/eahau/article/details/91823578</link><guid>https://blog.youkuaiyun.com/eahau/article/details/91823578</guid><author>eahau</author><pubDate>Thu, 13 Jun 2019 11:43:12 +0800</pubDate><description><![CDATA[Java 中万物皆对象，Linux 中一切皆文件。
简单的说下对象的实例化过程：

首先我们需要有个意识，就是创建一个类的实例化对象，内存中必须要加载了这个类
所以，不论是 new 还是反射或是 Unsafe.allocateInstance(Class)，都必须要先找到类对象的内存地址
然后知道类对象的结构，再去堆上申请新的空间，即实例化对象
顺带说下，Java 占内存的原因正是因为对象携带的信...]]></description><category></category></item><item><title><![CDATA[Java并发核心浅谈]]></title><link>https://blog.youkuaiyun.com/eahau/article/details/91406758</link><guid>https://blog.youkuaiyun.com/eahau/article/details/91406758</guid><author>eahau</author><pubDate>Wed, 12 Jun 2019 11:31:59 +0800</pubDate><description><![CDATA[Java并发的核心就是 j.u.c 包，而 j.u.c 的核心是AbstractQueuedSynchronizer抽象队列同步器，简称 AQS，一些锁啊！信号量啊！循环屏障啊！都是基于AQS。而 AQS 又是基于UNSAFE的一系列compareAndSet，所以理解了这块，并发不再是问题！

先解释下何为compareAndSet就拿AtomicInteger先开刀：

	// 实际操作的值
...]]></description><category></category></item><item><title><![CDATA[ThreadPoolExecutor浅谈]]></title><link>https://blog.youkuaiyun.com/eahau/article/details/91413180</link><guid>https://blog.youkuaiyun.com/eahau/article/details/91413180</guid><author>eahau</author><pubDate>Tue, 11 Jun 2019 10:10:25 +0800</pubDate><description><![CDATA[在了解线程池之前，希望你能够理解 Java 内存模型 和 AQS CAS
     /**					
	 * The runState provides the main lifecycle control, taking on values:
     *
     *   RUNNING:  Accept new tasks and process queued tasks
     *   ...]]></description><category></category></item><item><title><![CDATA[英语词类浅谈]]></title><link>https://blog.youkuaiyun.com/eahau/article/details/91352665</link><guid>https://blog.youkuaiyun.com/eahau/article/details/91352665</guid><author>eahau</author><pubDate>Sun, 09 Jun 2019 14:13:46 +0800</pubDate><description><![CDATA[英语是一门语言，一门学科，一门语言学（Philology）大家都知道英文的构词法是前缀改变词意，后缀强调词性。
Philology 可拆分为 Philo（爱） logy（意思：说。和逻辑 logic 又很像）说明语言学是爱说且富有逻辑的，英语正是如此。
宾语（object）
说到这，我很敬佩当初的翻译者，因为程序员最为熟知的 object 即对象，为什么解释为对象呢！我的推测是这样的，ob 是对面...]]></description><category></category></item><item><title><![CDATA[leetcode-cn 实现strStr()]]></title><link>https://blog.youkuaiyun.com/eahau/article/details/91344949</link><guid>https://blog.youkuaiyun.com/eahau/article/details/91344949</guid><author>eahau</author><pubDate>Sat, 08 Jun 2019 15:16:08 +0800</pubDate><description><![CDATA[题目如图：

其实这道题相当于让我们自己手写indexOf()，平时用惯了api，手写起来不是很容易，我自己就换了好几种写法，代码如下：
	private static int strStr(String haystack, String needle) {
			if (haystack == null || needle == null) {
				return -1;
			}
			in...]]></description><category></category></item><item><title><![CDATA[leetcode-cn 删除排序数组中的重复项]]></title><link>https://blog.youkuaiyun.com/eahau/article/details/91149544</link><guid>https://blog.youkuaiyun.com/eahau/article/details/91149544</guid><author>eahau</author><pubDate>Fri, 07 Jun 2019 21:21:30 +0800</pubDate><description><![CDATA[题目如图：

比较简单，代码如下：
	private static int removeDuplicates(int[] nums) {
		int length = nums.length;
		int headIndex = 0, tailIndex = 1;
		for (; tailIndex &lt; length; tailIndex++) {
			// 比较 headIndex t...]]></description><category></category></item><item><title><![CDATA[leetcode-cn 有效的括号]]></title><link>https://blog.youkuaiyun.com/eahau/article/details/91129664</link><guid>https://blog.youkuaiyun.com/eahau/article/details/91129664</guid><author>eahau</author><pubDate>Fri, 07 Jun 2019 18:55:44 +0800</pubDate><description><![CDATA[题目描述如图：

废话不多说，代码如下：
	private static boolean oddAndEvenNumber(int value1, int value2){
		// 判断两个数是否同时为偶数或同时为奇数
		return ((value1 &amp; 1) == 1) == ((value2 &amp; 1) == 1);
	}
	
	private static boolean...]]></description><category></category></item><item><title><![CDATA[函数依赖]]></title><link>https://blog.youkuaiyun.com/eahau/article/details/91127992</link><guid>https://blog.youkuaiyun.com/eahau/article/details/91127992</guid><author>eahau</author><pubDate>Fri, 07 Jun 2019 15:17:57 +0800</pubDate><description><![CDATA[函数依赖是指关系中属性间（或者说是表中字段间）的对应关系。
定义：设 R 为任一给定关系，如果对于 R 中属性 X 的每一个值，R 中的属性 Y 只有唯一值与之对应，则称 X 函数决定 Y 或称 Y 函数依赖于 X ，记作 X—&gt;Y。其中，X 称为决定因素。
通俗一点，就是给定一个 X 都有唯一的 Y。可以理解为函数 y = f(x); 对于任意的 x 都有唯一的 y ，且 y 的取值由 x...]]></description><category></category></item><item><title><![CDATA[leetcode-cn 回文数判断]]></title><link>https://blog.youkuaiyun.com/eahau/article/details/91125585</link><guid>https://blog.youkuaiyun.com/eahau/article/details/91125585</guid><author>eahau</author><pubDate>Fri, 07 Jun 2019 08:56:49 +0800</pubDate><description><![CDATA[解法基本分为两种，一类是转成字符串数组，然后逐个比较左边和右边的字符，或者是转成字符串，然后反转，再进行比较，其本质都是单个字符的比较，大家都能想到，就不写了。
另一类是直接对数字进行操作，leetcode上有人例举了，还不错。我写完之后，看别人的代码，简洁好多，自叹不如（不过我这个是支持负数回文数的]]></description><category></category></item><item><title><![CDATA[SQL多表查询]]></title><link>https://blog.youkuaiyun.com/eahau/article/details/90942085</link><guid>https://blog.youkuaiyun.com/eahau/article/details/90942085</guid><author>eahau</author><pubDate>Wed, 05 Jun 2019 22:29:09 +0800</pubDate><description><![CDATA[多表查询的话，SQL提供了JOIN关键字来连接多张表的查询（即连接的是SELECT结果集）基本分为以下几种：
JOIN / INNER JOIN-也称作内连接，是最为常用的一种JOIN，其效果是在表中存在一个匹配即返回该条数据

等值连接：ON 子句中使用了运算符“=”，且连接的两个字段最好是主键
不等连接：ON 子句中使用了不等于运算符，例如"&lt;&gt;" "&lt;=&gt;"等（可以...]]></description><category></category></item><item><title><![CDATA[谈谈我对数据库三范式的字面理解]]></title><link>https://blog.youkuaiyun.com/eahau/article/details/90718007</link><guid>https://blog.youkuaiyun.com/eahau/article/details/90718007</guid><author>eahau</author><pubDate>Fri, 31 May 2019 16:08:20 +0800</pubDate><description><![CDATA[今天看了看《数据结构系统原理》（黄靖 主编）这本书（备考自考，不然以我的品味，直接豆瓣9.0以上，哈哈哈）
首先看下书上给出的定义：

第一范式（1NF）：设 R 为任一给定关系，如果 R 中的每个列与行的交点处的取值都是不可再分的基本元素，则 R 为第一范式
第二范式（2NF）：设 R 为任一给定关系，若 R 为 1NF，且其所有非主属性都完全函数依赖于候选关键字，则 R 为第二范式
第三范式（...]]></description><category></category></item><item><title><![CDATA[查找字符数组中出现次数最多的字符]]></title><link>https://blog.youkuaiyun.com/eahau/article/details/90709001</link><guid>https://blog.youkuaiyun.com/eahau/article/details/90709001</guid><author>eahau</author><pubDate>Fri, 31 May 2019 11:51:04 +0800</pubDate><description><![CDATA[昨天杭州大搜车面试，面试官出了一道字符串算法题，如下：
给定一个字符串数组，例如char[] chars = { 'a', 'b', 'b', 'b', 'b', 'c', 'a', 'a', 'a'};找出数组中出现次数最多的字符，如果存在相同次数的字符，取第一次出现的字符。
其实一个问题的解决方案有多种，我当时说了两种（手写了第二种）：

先拷贝一份原数组charsCopy作为备用，然后将ch...]]></description><category></category></item><item><title><![CDATA[视图与索引]]></title><link>https://blog.youkuaiyun.com/eahau/article/details/90636970</link><guid>https://blog.youkuaiyun.com/eahau/article/details/90636970</guid><author>eahau</author><pubDate>Tue, 28 May 2019 12:49:11 +0800</pubDate><description><![CDATA[视图

为什么需要视图

有时候没有必要向用户展示完整的表的模型（所有字段信息）
表中某些涉及安全，隐私或权限的字段需要对用户隐藏
综上，视图安全及易于使用


什么是视图

SQL允许通过查询来定义“虚关系”（又称作虚表，并不会真的去建立物理存储表，所存储的只是SQL查询逻辑代码。类似于方法定义或函数声明，查询就是具体实现）只有在调用的时候才会去查询，且不会存储查询结果集


如何定义视图

c...]]></description><category></category></item><item><title><![CDATA[数据库集合运算]]></title><link>https://blog.youkuaiyun.com/eahau/article/details/90635584</link><guid>https://blog.youkuaiyun.com/eahau/article/details/90635584</guid><author>eahau</author><pubDate>Tue, 28 May 2019 11:13:49 +0800</pubDate><description><![CDATA[集合运算


SQL作用在关系（relation，就是指表）上的union、intersect和except运算对应于数学集合论中的∪, ∩和-运算


union、intersect和except运算与select子句不同，它们会自动去除重复


如果想保留所有重复，必须用union all、intersect all和except all


假设一个元组在关系r中重复出现了m次，在关系s中重...]]></description><category></category></item><item><title><![CDATA[数据库的完整性约束]]></title><link>https://blog.youkuaiyun.com/eahau/article/details/90634094</link><guid>https://blog.youkuaiyun.com/eahau/article/details/90634094</guid><author>eahau</author><pubDate>Tue, 28 May 2019 10:36:29 +0800</pubDate><description><![CDATA[key：用于保证row（或称作元组，一条数据）的唯一性

super-key：能够区分唯一的row的集合
candidate key：super-key中最小集
primary key：candidate key中人工选择一个（一张表只能有一个或多个组成的联合主键）



举个例子：例如有students表，含有字段stu_number（学号）id（身份证号）name（姓名) 那么找出所有能够...]]></description><category></category></item><item><title><![CDATA[SQL字符串匹配和运算]]></title><link>https://blog.youkuaiyun.com/eahau/article/details/90633555</link><guid>https://blog.youkuaiyun.com/eahau/article/details/90633555</guid><author>eahau</author><pubDate>Tue, 28 May 2019 09:58:58 +0800</pubDate><description><![CDATA[匹配

百分号（%）：匹配任意子串

select dept_name from department where building like ‘%Watson’; (或前缀匹配Watson%)


下划线（_）：匹配任意单个字符

select dept_name from department where building like ‘W_tson’; 


假如匹配的字符串中包含特殊字符（%...]]></description><category></category></item></channel></rss>