<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[XIAOLONGJUANFENG的博客]]></title><description><![CDATA[]]></description><link>https://blog.csdn.net/XIAOLONGJUANFENG</link><language>zh-cn</language><generator>https://blog.csdn.net/</generator><copyright><![CDATA[Copyright &copy; XIAOLONGJUANFENG]]></copyright><item><title><![CDATA[堆排序以及TopK大顶堆小顶堆求解方式（js版）]]></title><link>https://blog.csdn.net/XIAOLONGJUANFENG/article/details/114195541</link><guid>https://blog.csdn.net/XIAOLONGJUANFENG/article/details/114195541</guid><author>XIAOLONGJUANFENG</author><pubDate>Sun, 28 Feb 2021 00:28:35 +0800</pubDate><description><![CDATA[我理解的堆排序

堆排序是一种选择排序，时间复杂度o(nlogn),空间复杂度o(1)。
数据结构底层是数组，通过索引之间的关系可看二叉树，父结点总是大于或者小于孩子结点。这就是堆的结构。
刚初始完的堆是占据整个数组的。
开始排序后，数组分为两个部分！前面是堆，后面是已排序完的有序子数组。
排序时，堆顶元素和堆尾元素会交换，有序子数组长度+1，堆长度-1；此时，原堆尾元素占据了堆顶，可能会破坏了堆结构，所以，需要堆化，也就是堆顶元素要保持最大或者最小。
当堆只有一个元素，自动加入有序子数组；这时有序子数组占]]></description><category></category></item><item><title><![CDATA[node实现国际化翻译以及文件读写]]></title><link>https://blog.csdn.net/XIAOLONGJUANFENG/article/details/113914949</link><guid>https://blog.csdn.net/XIAOLONGJUANFENG/article/details/113914949</guid><author>XIAOLONGJUANFENG</author><pubDate>Sun, 21 Feb 2021 12:38:49 +0800</pubDate><description><![CDATA[前几天有项任务是让我在几千个文件中，对指定内容进行繁体翻译。大概估算了一下有4700多处需要进行繁体翻译，如果只靠去google翻译复制粘贴也需要2天多的时间，而且会非常无聊！！
所以，在这里利用了nodejs的文件读写以及google翻译的api帮助我来做这繁琐的事情
其中，编程用到的工具有：
1.typescript  （npm安装即可）
2.lodash（npm安装即可）
3.fsPromise（用异步读取文件的目的只是想用用async）
4.google-translate-api（npm 安装即可]]></description><category></category></item><item><title><![CDATA[排序：js实现快速排序]]></title><link>https://blog.csdn.net/XIAOLONGJUANFENG/article/details/113279164</link><guid>https://blog.csdn.net/XIAOLONGJUANFENG/article/details/113279164</guid><author>XIAOLONGJUANFENG</author><pubDate>Wed, 27 Jan 2021 22:35:34 +0800</pubDate><description><![CDATA[实现快速排序
// 1 2 9 3 4 -1 8 -2

const arr = [1, 2, 9, 3, 4, -1, 8, -2];
let p = +new Date() % arr.length;
console.log(quickSort(arr, 0, arr.length - 1));

function partition(arr, left, right) {
    let i = left;
    let j = right;
    const x = arr[i];
    wh]]></description><category></category></item><item><title><![CDATA[CSS实现正方形]]></title><link>https://blog.csdn.net/XIAOLONGJUANFENG/article/details/113151599</link><guid>https://blog.csdn.net/XIAOLONGJUANFENG/article/details/113151599</guid><author>XIAOLONGJUANFENG</author><pubDate>Tue, 26 Jan 2021 01:21:38 +0800</pubDate><description><![CDATA[正方形
以前有人问我怎么实现一个正方形，我就很纳闷！把块属性width和height设置成一样不就好了吗！
//这不就是个正方形
.div {
	width:100px;
	height:100px 
}

但这不是他想要的答案。也许是考虑到自适应的问题吧。
于是，我想到了最近在b站Steven老师那看到他用过的vw vh单位
//vw单位把屏幕宽分为100(vh同理，高)
.div {
	width:20vw
	height:20vw
}

俺想，酱不就好了吗！
再稍微对样式补充一下,看一下具体效果
&l]]></description><category></category></item><item><title><![CDATA[js实现任务（promise任务）队列]]></title><link>https://blog.csdn.net/XIAOLONGJUANFENG/article/details/113058280</link><guid>https://blog.csdn.net/XIAOLONGJUANFENG/article/details/113058280</guid><author>XIAOLONGJUANFENG</author><pubDate>Sat, 23 Jan 2021 18:40:57 +0800</pubDate><description><![CDATA[任务队列
队列的特点就是先进先出
先开始的任务执行完后，才能开始执行后续任务
另外任务队列中有任务时是自动执行的。
另外提一点，实现稍微复杂一点功能，全都是闭包！！
设计：new一个队列，返回值是一个function，这个function的入参为为task（类型promise）,返回值也是promise
	const queue = new Queue();
	queue(task1).then(data=&gt;console.log(data));
	queue(task2).then(data=&gt]]></description><category></category></item><item><title><![CDATA[git分支删除与获取新的远程分支]]></title><link>https://blog.csdn.net/XIAOLONGJUANFENG/article/details/113045629</link><guid>https://blog.csdn.net/XIAOLONGJUANFENG/article/details/113045629</guid><author>XIAOLONGJUANFENG</author><pubDate>Sat, 23 Jan 2021 14:21:46 +0800</pubDate><description><![CDATA[删除分支 以及 获取远程新建的分支
有的时候分支建的太多了，需要删除本地、远程的分支，在此记录一下

删除分支，以及删除对应远程分支

git branch -a //查看本地的远程的（已知）分支
git branch -d [分支名]
//如果提示没有完成合并的时候，可以用下面的命令删除
git branch -D [分支名]

删除完本地的后，可以使用下面命令删除远程的
git push origin --delete [branch]

2.获取远程新的分支
git fetch //这样就可以获取到远]]></description><category></category></item><item><title><![CDATA[oracle死锁进程查看以及删除]]></title><link>https://blog.csdn.net/XIAOLONGJUANFENG/article/details/112979199</link><guid>https://blog.csdn.net/XIAOLONGJUANFENG/article/details/112979199</guid><author>XIAOLONGJUANFENG</author><pubDate>Fri, 22 Jan 2021 10:44:48 +0800</pubDate><description><![CDATA[最近又遇到oracle死锁问题，先记录一下
查看锁表进程：
select sess.sid,
sess.serial#,
lo.oracle_username,
lo.os_user_name,
ao.object_name,
lo.locked_mode,
sess.LOGON_TIME,
sess.machine
from vlockedobjectlo,dbaobjectsao,vlocked_object lo, 
   dba_objects ao, 
   vlockedo​bjectlo,db]]></description><category></category></item><item><title><![CDATA[js 实现new操作符以及继承]]></title><link>https://blog.csdn.net/XIAOLONGJUANFENG/article/details/112913600</link><guid>https://blog.csdn.net/XIAOLONGJUANFENG/article/details/112913600</guid><author>XIAOLONGJUANFENG</author><pubDate>Thu, 21 Jan 2021 00:39:22 +0800</pubDate><description><![CDATA[js 实现new操作符
new 干了啥?
来自MDN：
new 关键字会进行如下的操作：

创建一个空的简单JavaScript对象（即{}）；
链接该对象（设置该对象的constructor）到另一个对象 ；
将步骤1新创建的对象作为this的上下文 ；
如果该函数没有返回对象，则返回this。

function CustomNew(fn) {
    const obj = {}; //1
    obj.__proto__ = fn.prototype;//2
    const result = ]]></description><category></category></item><item><title><![CDATA[js实现链表翻转以及检查是否有环]]></title><link>https://blog.csdn.net/XIAOLONGJUANFENG/article/details/112801561</link><guid>https://blog.csdn.net/XIAOLONGJUANFENG/article/details/112801561</guid><author>XIAOLONGJUANFENG</author><pubDate>Wed, 20 Jan 2021 00:09:12 +0800</pubDate><description><![CDATA[翻转一个链表
input a-&gt;b-&gt;c-&gt;d
output d-&gt;c-&gt;b-&gt;a
// 链表翻转
const reverseList = function(head) {
	let prev = null;
	let curr = head;
	while (curr) {
		[ curr.next, prev, curr ] = [ prev, curr, curr.next ];
	}
	return prev;
};
let a = {value:'a',nex]]></description><category></category></item><item><title><![CDATA[大致实现Promise]]></title><link>https://blog.csdn.net/XIAOLONGJUANFENG/article/details/112760054</link><guid>https://blog.csdn.net/XIAOLONGJUANFENG/article/details/112760054</guid><author>XIAOLONGJUANFENG</author><pubDate>Mon, 18 Jan 2021 13:35:39 +0800</pubDate><description><![CDATA[今天俺尝试一下实现Promise
1.下面代码实现不了micro task，所以resolve后，then中回调的函数是立即执行的。
2.then方法是加入成功、失败回调函数的入口，以及获取成功value，失败reason的地方

//实现promise,有回调的地方需要保存this为ctx；不然this指向会有问题
//另外，写代码时候想用闭包来代替this，最终失败了。还是换回了ctx
function CustomPromise(execute) {
    this.status = 'pendi.]]></description><category></category></item><item><title><![CDATA[节流和防抖的实现]]></title><link>https://blog.csdn.net/XIAOLONGJUANFENG/article/details/112692168</link><guid>https://blog.csdn.net/XIAOLONGJUANFENG/article/details/112692168</guid><author>XIAOLONGJUANFENG</author><pubDate>Sat, 16 Jan 2021 12:38:14 +0800</pubDate><description><![CDATA[节流和防抖
特点
1.节流的特点：指定的delay时间段中，无论调用多少次方法，只触发一次。
2.防抖的特点：调用方法后，在delay时间过后，才会触发方法，如果delay内又调用方法，则重新计时。
3，实现方式：两者的实现方式都是利用闭包，闭包就是，函数 + 函数可访问的局部变量[^1]（该变量可以一直保存在内存中）
4.另外俺个人觉得它俩的简单实现版还有一个特点，一个掐头儿 一个去尾儿。防抖的第一次调用不立即执行；节流的最后一次调用可能不会执行
简单实现
节流简单版
// 节流的简单实现
functio]]></description><category></category></item><item><title><![CDATA[ES6 String.raw会对以转义过的字符串进行再次转移]]></title><link>https://blog.csdn.net/XIAOLONGJUANFENG/article/details/112498558</link><guid>https://blog.csdn.net/XIAOLONGJUANFENG/article/details/112498558</guid><author>XIAOLONGJUANFENG</author><pubDate>Mon, 11 Jan 2021 22:09:13 +0800</pubDate><description><![CDATA[ES6 String.raw会对以转义过的字符串进行再次转移
String.raw
String.raw是ES6提供用于处理模板字符串的方法，它可以转义’'反斜杠。相当于在反斜杠前再加上一个反斜杠，用于转义自己。
有部分博客以及视频中，有说“如果原字符串的斜杠已经转义，那么 String.raw  不会做任何处理。”这句话应该是不对的。
后来我在阮一峰老师的es6入门博客中看到这句话：“如果原字符串的斜杠已经转义，那么String.raw()会进行再次转义。”
并在浏览器下实验:
String.rawHi\]]></description><category></category></item><item><title><![CDATA[使用JPA repository的findBy时，null指针异常问题]]></title><link>https://blog.csdn.net/XIAOLONGJUANFENG/article/details/110272378</link><guid>https://blog.csdn.net/XIAOLONGJUANFENG/article/details/110272378</guid><author>XIAOLONGJUANFENG</author><pubDate>Sat, 28 Nov 2020 14:40:03 +0800</pubDate><description><![CDATA[使用JPA repository的findBy时，null指针异常问题
null异常触发时机
最近有见过java程序中途抛了null指针异常的情况，排查时，发现是在调用Dao的findBy方法查询数据时抛出的null异常。
原因
B实体上存在version字段，并且是Integer类型。
当调用A实体对应的Dao的findBy方法时，触发了B实体的版本字段+1方法；
代码大致是，判断version是整型类型，然后，currentVersion + 1。
由于数据库中的version字段是null（为什么是n]]></description><category></category></item><item><title><![CDATA[502 bad gateway报错可能的原因之一]]></title><link>https://blog.csdn.net/XIAOLONGJUANFENG/article/details/107168924</link><guid>https://blog.csdn.net/XIAOLONGJUANFENG/article/details/107168924</guid><author>XIAOLONGJUANFENG</author><pubDate>Mon, 06 Jul 2020 21:55:05 +0800</pubDate><description><![CDATA[记录一次状态码502 Bad gateway
第一次遇到请求返回502状态码
之前遇到的基本都是500（服务器内部错误），比如java代码运行时，被throw出来的错误。这种错误，打个断点就很好排查。
解决过程
疯狂网上找资料。网上有一些说法是，当使用Nginx代理时，发生了502报错，很有可能是请求头header过大而导致的。所以，在Nginx配置内添加一下增加缓存的的代码就能解决
proxy_buffer_size 64k;
proxy_buffers   4 32k;
proxy_busy_buffe]]></description><category></category></item></channel></rss>