<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[grasp_csdn的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/grasp_csdn</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; grasp_csdn]]></copyright><item><title><![CDATA[Java字符串池（String Pool）深度解析]]></title><link>https://blog.youkuaiyun.com/grasp_csdn/article/details/107162526</link><guid>https://blog.youkuaiyun.com/grasp_csdn/article/details/107162526</guid><author>grasp_csdn</author><pubDate>Mon, 06 Jul 2020 16:51:17 +0800</pubDate><description><![CDATA[Java字符串池（String Pool）深度解析

   在工作中，String类是我们使用频率非常高的一种对象类型。JVM为了提升性能和减少内存开销，避免字符串的重复创建，其维护了一块特殊的内存空间，这就是我们今天要讨论的核心，即字符串池（String Pool）。字符串池由String类私有的维护。

   我们知道，在Java中有两种创建字符串对象的方式：1）采用字面值的方式赋值 2）采用new关键字新建一个字符串对象。这两种方式在性能和内存占用方面存在着差别。

   方式一：...]]></description><category></category></item><item><title><![CDATA[oracle中处理varchar2排序问题]]></title><link>https://blog.youkuaiyun.com/grasp_csdn/article/details/105043195</link><guid>https://blog.youkuaiyun.com/grasp_csdn/article/details/105043195</guid><author>grasp_csdn</author><pubDate>Mon, 23 Mar 2020 10:46:50 +0800</pubDate><description><![CDATA[Oracle中如果直接对varchar2类型进行排序，如果直接order by 字段，可能会出现11&lt;2的情况。

例如：直接order by排序产生结果：0&gt;1&gt;11&gt;2&gt;3。这是因为varchar2类型实际排序的时候，首先只比较第一位数字大小，然后比较第二位，以此类推。

解决方案：

使用CAST函数。 Oracle的CAST可以将列字段类型转化成对应类型的函数...]]></description><category></category></item><item><title><![CDATA[使用try-with-resources代替finally关闭资源]]></title><link>https://blog.youkuaiyun.com/grasp_csdn/article/details/103976521</link><guid>https://blog.youkuaiyun.com/grasp_csdn/article/details/103976521</guid><author>grasp_csdn</author><pubDate>Tue, 14 Jan 2020 17:15:23 +0800</pubDate><description><![CDATA[try-with-resources（即try(){}catch{}） 是 JDK 7 中一个新的异常处理机制，它能够很容易地关闭在 try-catch 语句块中使用的资源。所谓的资源（resource）是指在程序完成后，必须关闭的对象。try-with-resources 语句确保了每个资源在语句结束时关闭。所有实现了 java.lang.AutoCloseable 接口（其中，它...]]></description><category></category></item><item><title><![CDATA[CentOS7增加或修改SSH端口号的方法]]></title><link>https://blog.youkuaiyun.com/grasp_csdn/article/details/103704414</link><guid>https://blog.youkuaiyun.com/grasp_csdn/article/details/103704414</guid><author>grasp_csdn</author><pubDate>Wed, 25 Dec 2019 19:25:36 +0800</pubDate><description><![CDATA[第一步：修改SSH配置文件（注意是sshd_config而不是ssh_config，多了个d）


			1
			
			
			vim /etc/ssh/sshd_config
			
		找到“#Port 22”，这一行直接键入“yyp”复制该行到下一行，然后把两行的“#”号即注释去掉，修改成：


			1

			2
			
			
			Port 22

			Port 10086
	...]]></description><category></category></item><item><title><![CDATA[对象的扩展方法]]></title><link>https://blog.youkuaiyun.com/grasp_csdn/article/details/94838956</link><guid>https://blog.youkuaiyun.com/grasp_csdn/article/details/94838956</guid><author>grasp_csdn</author><pubDate>Sat, 06 Jul 2019 11:06:07 +0800</pubDate><description><![CDATA[1.Object.is()

ES5 比较两个值是否相等，只有两个运算符：相等运算符（==）和严格相等运算符（===）。它们都有缺点，前者会自动转换数据类型，后者的NaN不等于自身，以及+0等于-0。JavaScript 缺乏一种运算，在所有环境中，只要两个值是一样的，它们就应该相等。

ES6 提出“Same-value equality”（同值相等）算法，用来解决这个问题。Object.is就...]]></description><category></category></item><item><title><![CDATA[对象的扩展]]></title><link>https://blog.youkuaiyun.com/grasp_csdn/article/details/94837461</link><guid>https://blog.youkuaiyun.com/grasp_csdn/article/details/94837461</guid><author>grasp_csdn</author><pubDate>Sat, 06 Jul 2019 10:56:32 +0800</pubDate><description><![CDATA[1.属性的简洁表示法

ES6 允许直接写入变量和函数，作为对象的属性和方法。这样的书写更加简洁。


const foo = 'bar';
const baz = {foo};
baz // {foo: "bar"}
// 等同于
const baz = {foo: foo};

上面代码表明，ES6 允许在对象之中，直接写变量。这时，属性名为变量名, 属性值为变量的值。下面是另一个例子。


...]]></description><category></category></item><item><title><![CDATA[数组的扩展]]></title><link>https://blog.youkuaiyun.com/grasp_csdn/article/details/94836295</link><guid>https://blog.youkuaiyun.com/grasp_csdn/article/details/94836295</guid><author>grasp_csdn</author><pubDate>Sat, 06 Jul 2019 10:32:41 +0800</pubDate><description><![CDATA[1.扩展运算符

1.含义

扩展运算符（spread）是三个点（...）。它好比 rest 参数的逆运算，将一个数组转为用逗号分隔的参数序列。


console.log(...[1, 2, 3])
// 1 2 3
console.log(1, ...[2, 3, 4], 5)
// 1 2 3 4 5
[...document.querySelectorAll('div')]
// [&lt...]]></description><category></category></item><item><title><![CDATA[函数的扩展]]></title><link>https://blog.youkuaiyun.com/grasp_csdn/article/details/94835120</link><guid>https://blog.youkuaiyun.com/grasp_csdn/article/details/94835120</guid><author>grasp_csdn</author><pubDate>Sat, 06 Jul 2019 10:17:18 +0800</pubDate><description><![CDATA[1.函数参数的默认值

1.基本用法

ES6 之前，不能直接为函数的参数指定默认值，只能采用变通的方法。


function log(x, y) {
  y = y || 'World';
  console.log(x, y);
}
log('Hello') // Hello World
log('Hello', 'China') // Hello China
log('Hello', ''...]]></description><category></category></item><item><title><![CDATA[数值的扩展]]></title><link>https://blog.youkuaiyun.com/grasp_csdn/article/details/94833276</link><guid>https://blog.youkuaiyun.com/grasp_csdn/article/details/94833276</guid><author>grasp_csdn</author><pubDate>Sat, 06 Jul 2019 10:00:09 +0800</pubDate><description><![CDATA[1.二进制和八进制表示法

ES6 提供了二进制和八进制数值的新的写法，分别用前缀0b（或0B）和0o（或0O）表示。


0b111110111 === 503 // true
0o767 === 503 // true

从 ES5 开始，在严格模式之中，八进制就不再允许使用前缀0表示，ES6 进一步明确，要使用前缀0o表示。


// 非严格模式(function(){
  console....]]></description><category></category></item><item><title><![CDATA[字符串的新增方法]]></title><link>https://blog.youkuaiyun.com/grasp_csdn/article/details/94830400</link><guid>https://blog.youkuaiyun.com/grasp_csdn/article/details/94830400</guid><author>grasp_csdn</author><pubDate>Sat, 06 Jul 2019 09:10:54 +0800</pubDate><description><![CDATA[1.includes()，startsWith()，endsWith()

传统上，JavaScript 只有indexOf方法，可以用来确定一个字符串是否包含在另一个字符串中。ES6 又提供了三种新方法。

includes()：返回布尔值，表示是否找到了参数字符串。
	startsWith()：返回布尔值，表示参数字符串是否在原字符串的头部。
	endsWith()：返回布尔值，表示参数字符串...]]></description><category></category></item><item><title><![CDATA[变量的解构赋值]]></title><link>https://blog.youkuaiyun.com/grasp_csdn/article/details/94743238</link><guid>https://blog.youkuaiyun.com/grasp_csdn/article/details/94743238</guid><author>grasp_csdn</author><pubDate>Sat, 06 Jul 2019 08:54:21 +0800</pubDate><description><![CDATA[1.数组的解构赋值

基本用法：ES6 允许按照一定模式，从数组和对象中提取值，对变量进行赋值，这被称为解构（Destructuring）。

以前，为变量赋值，只能直接指定值。


let a = 1;let b = 2;let c = 3;

ES6 允许写成下面这样。


let [a, b, c] = [1, 2, 3];

如果解构不成功，变量的值就等于undefined。l


let...]]></description><category></category></item><item><title><![CDATA[Let与Const命令]]></title><link>https://blog.youkuaiyun.com/grasp_csdn/article/details/94742379</link><guid>https://blog.youkuaiyun.com/grasp_csdn/article/details/94742379</guid><author>grasp_csdn</author><pubDate>Fri, 05 Jul 2019 17:16:18 +0800</pubDate><description><![CDATA[Let与Const命令

1.let命令

基本用法：ES6 新增了let命令，用来声明变量。它的用法类似于var，但是所声明的变量，只在let命令所在的代码块内有效。


{
  let a = 10;
  var b = 1;
}

a // ReferenceError: a is not defined.
b // 1

特点：

不存在变量提升

// var 的情况console.lo...]]></description><category></category></item><item><title><![CDATA[git 基本命令]]></title><link>https://blog.youkuaiyun.com/grasp_csdn/article/details/87907623</link><guid>https://blog.youkuaiyun.com/grasp_csdn/article/details/87907623</guid><author>grasp_csdn</author><pubDate>Sun, 24 Feb 2019 21:25:21 +0800</pubDate><description><![CDATA[1.工作区与暂存区

  git diff 比较的是工作区文件与暂存区文件的区别（上次git add 的内容）
	  git diff --cached 比较的是暂存区的文件与仓库分支里（上次git commit 后的内容）的区别
	  git diff HEAD --file可以查看工作区和版本库的内容区别
2.撤销修改

git checkout -- file可以丢弃工作区的修改：
    ...]]></description><category></category></item><item><title><![CDATA[Thinkphp3.2在ubuntu16下的部署配置]]></title><link>https://blog.youkuaiyun.com/grasp_csdn/article/details/87906107</link><guid>https://blog.youkuaiyun.com/grasp_csdn/article/details/87906107</guid><author>grasp_csdn</author><pubDate>Sun, 24 Feb 2019 18:58:40 +0800</pubDate><description><![CDATA[1.ubuntu安装lamp环境。参考网址 https://www.linuxidc.com/Linux/2016-10/136327.htm
2.修改www目录权限：sudo chmod 777 -R /var/www
3.打开/etc/apache2/apache2.conf,将文件中的两个AllowOverride None改为AllowOverride All
4.在项目根目录下添加.ht...]]></description><category></category></item></channel></rss>