<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[HanJuly9569的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/HanJuly9569</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; HanJuly9569]]></copyright><item><title><![CDATA[人话说LightGBM]]></title><link>https://blog.youkuaiyun.com/HanJuly9569/article/details/135062870</link><guid>https://blog.youkuaiyun.com/HanJuly9569/article/details/135062870</guid><author>HanJuly9569</author><pubDate>Tue, 19 Dec 2023 16:44:29 +0800</pubDate><description><![CDATA[LightGBM 和 XGBoost 两种模型都是GBDT 这种概念的工程化的实现，说人话就是你和你的兄弟姐妹有一些不同，但是都是你爸和你妈那套操作出来的。GBDT 这种概念又是建立在cart 决策树上。]]></description><category></category></item><item><title><![CDATA[音乐一拍到底多长]]></title><link>https://blog.youkuaiyun.com/HanJuly9569/article/details/134818207</link><guid>https://blog.youkuaiyun.com/HanJuly9569/article/details/134818207</guid><author>HanJuly9569</author><pubDate>Tue, 05 Dec 2023 22:08:25 +0800</pubDate><description><![CDATA[对一个音要唱多长的定义，并且使用4分音符，8分音符进行更细化的分割。一分钟多少拍，每首个都有一个人为规定的拍速度。拍是一个描述音符的最小单位。]]></description><category></category></item><item><title><![CDATA[SQL（指定日期的产品价格）]]></title><link>https://blog.youkuaiyun.com/HanJuly9569/article/details/129441432</link><guid>https://blog.youkuaiyun.com/HanJuly9569/article/details/129441432</guid><author>HanJuly9569</author><pubDate>Fri, 10 Mar 2023 13:59:35 +0800</pubDate><description><![CDATA[题都看不懂]]></description><category></category></item><item><title><![CDATA[sql（集合，行专列，上下级）]]></title><link>https://blog.youkuaiyun.com/HanJuly9569/article/details/129441404</link><guid>https://blog.youkuaiyun.com/HanJuly9569/article/details/129441404</guid><author>HanJuly9569</author><pubDate>Fri, 10 Mar 2023 13:58:33 +0800</pubDate><description><![CDATA[SQL集合，行转列]]></description><category></category></item><item><title><![CDATA[SQL（中间表的使用）]]></title><link>https://blog.youkuaiyun.com/HanJuly9569/article/details/129441375</link><guid>https://blog.youkuaiyun.com/HanJuly9569/article/details/129441375</guid><author>HanJuly9569</author><pubDate>Fri, 10 Mar 2023 13:56:51 +0800</pubDate><description><![CDATA[中间表的使用]]></description><category></category></item><item><title><![CDATA[sql(聚合的使用)]]></title><link>https://blog.youkuaiyun.com/HanJuly9569/article/details/129441358</link><guid>https://blog.youkuaiyun.com/HanJuly9569/article/details/129441358</guid><author>HanJuly9569</author><pubDate>Fri, 10 Mar 2023 13:56:07 +0800</pubDate><description><![CDATA[聚合的使用]]></description><category></category></item><item><title><![CDATA[SQL总结-排名的使用]]></title><link>https://blog.youkuaiyun.com/HanJuly9569/article/details/129441339</link><guid>https://blog.youkuaiyun.com/HanJuly9569/article/details/129441339</guid><author>HanJuly9569</author><pubDate>Fri, 10 Mar 2023 13:55:12 +0800</pubDate><description><![CDATA[排名的使用SQL]]></description><category></category></item><item><title><![CDATA[动态规划思路]]></title><link>https://blog.youkuaiyun.com/HanJuly9569/article/details/129441251</link><guid>https://blog.youkuaiyun.com/HanJuly9569/article/details/129441251</guid><author>HanJuly9569</author><pubDate>Fri, 10 Mar 2023 13:49:26 +0800</pubDate><description><![CDATA[一些动态规划的总结]]></description><category></category></item><item><title><![CDATA[栈和队列使用]]></title><link>https://blog.youkuaiyun.com/HanJuly9569/article/details/116678783</link><guid>https://blog.youkuaiyun.com/HanJuly9569/article/details/116678783</guid><author>HanJuly9569</author><pubDate>Wed, 12 May 2021 00:57:32 +0800</pubDate><description><![CDATA[一、栈的使用
栈在使用过程中，算法的运算过程应该是从后向前计算的
在栈的不仅可以存放值还可以存放下标
计算每日温度
###当遇到比栈顶高的温度时，开始标记结果，然后继续出栈直到计算到比当前值大的温度，然后入栈
根据每日 气温 列表，请重新生成一个列表，对应位置的输入是你需要再等待多久温度才会升高超过该日的天数。如果之后都不会升高，请在该位置用 0 来代替。
例如，给定一个列表 temperatures = [73, 74, 75, 71, 69, 72, 76, 73]，你的输出应该是 [1, 1, 4, ]]></description><category></category></item><item><title><![CDATA[数组链表算法思路三（KMP算法）]]></title><link>https://blog.youkuaiyun.com/HanJuly9569/article/details/116678711</link><guid>https://blog.youkuaiyun.com/HanJuly9569/article/details/116678711</guid><author>HanJuly9569</author><pubDate>Wed, 12 May 2021 00:55:26 +0800</pubDate><description><![CDATA[思路
在字符串的比较中，不能双重循环的去做，时间复杂度是n^2，需要进行简化
例子：（KMP）
有s,m两个字符串，s= abcdabcdx,m=abcdx,请找出m子串在s中起始位置。
按照我们的常规思路我们会将m和s的每一个字符比较（有两个游标i,j，分别指向两个字符串的开头）：
1.如果m的第一个字符与s中的某一个位置的字符相等（比如：第一个），然后继续移动i,和j,  i++ ,j++
2.如果m中的某一个字符与s中不相等，就需要将两个指针重新定位

仔细看上图的几步：当第一步匹配失败后，其实第二步]]></description><category></category></item><item><title><![CDATA[数组链表算法思路二]]></title><link>https://blog.youkuaiyun.com/HanJuly9569/article/details/116678614</link><guid>https://blog.youkuaiyun.com/HanJuly9569/article/details/116678614</guid><author>HanJuly9569</author><pubDate>Wed, 12 May 2021 00:54:06 +0800</pubDate><description><![CDATA[总体思路参考上一篇
数组链表算法思路一
例题：
解题方法：
1.遇到字母统计使用hash思想进行统计
2.遇到数字可以使用异或运算
例题一
题目内容：
给定两个字符串 s 和 t ，编写一个函数来判断 t 是否是 s 的字母异位词。
示例 1:
输入: s = “anagram”, t = “nagaram”
输出: true
示例 2:
输入: s = “rat”, t = “car”
输出: false
说明:
你可以假设字符串只包含小写字母。
解题思路
字母异位词： 长度相同，只是字母的位置不相同
此]]></description><category></category></item><item><title><![CDATA[数组链表算法思路一]]></title><link>https://blog.youkuaiyun.com/HanJuly9569/article/details/116678478</link><guid>https://blog.youkuaiyun.com/HanJuly9569/article/details/116678478</guid><author>HanJuly9569</author><pubDate>Wed, 12 May 2021 00:52:16 +0800</pubDate><description><![CDATA[解题方法：

快慢指针推进程序降低复杂度
HashMap,优先队列，双端队列辅助统计计算
快排思想完成对半查找，无需进行构造搜索树
使用kmp算法进行子串查找
遇到字母统计使用hash思想进行统计
遇到数字可以使用异或运算

思维
首先请放弃你那种暴力法，即动不动就上双重循环的思维方式。
然后更多的使用切分和线性的方式去做数组或者链表的题，在动态规划中更是这样。
例题一
解题方法：使用快慢指针+Map进行辅助统计计算
总结一句话：连续不重复字串最长
题目内容
LeetCode 第 03 题：给定一个字符串，]]></description><category></category></item><item><title><![CDATA[JVM 垃圾回收器]]></title><link>https://blog.youkuaiyun.com/HanJuly9569/article/details/116572799</link><guid>https://blog.youkuaiyun.com/HanJuly9569/article/details/116572799</guid><author>HanJuly9569</author><pubDate>Mon, 10 May 2021 00:29:20 +0800</pubDate><description><![CDATA[个人总结以官网为准，如有错误欢迎指出


从思考问题开始

如果你（运行的程序）在房间(内存)里不断的产生垃圾（可清除的对象），并且你青春期脾气不好，妈妈不想跟你小屁孩计较（避免打扰用户程序，减少stop the word），那妈妈会怎么做才能到达快速，并且不影响你打游戏？

首先妈妈会进去看一眼，有哪些需要处理的垃圾，然后离开
然后妈妈拿到工具，进入房间，把你骂出房间，快速处理再让你回来



以上妈妈的行为在垃圾回收的过程中，映射为首先标记对象，然后stop the world 清理垃圾，然后恢复程序.]]></description><category></category></item><item><title><![CDATA[JVM GC原理]]></title><link>https://blog.youkuaiyun.com/HanJuly9569/article/details/116572665</link><guid>https://blog.youkuaiyun.com/HanJuly9569/article/details/116572665</guid><author>HanJuly9569</author><pubDate>Sun, 09 May 2021 23:01:06 +0800</pubDate><description><![CDATA[1.对象怎么判定已死：
1.对象引用计数法
每个对象都有一个引用计数器，当引用计数器归零时，即可判定对象已死。但是在互相引用的情况下，无法判定他们是否已死。
2.图论（节点不可达）
从GC root对象开始，如果发现有一个点，或者一个区域不可达，即判定这个区域的对象已死。
GC ROOT对象：
1.方法区静态变量的对象引用的对象。
2.方法区常量引用的对象引用的对象。
3.方法栈中局部变量表中的对象引用的对象。
4.本地方法栈的对象引用的对象。
2.方法区回收：
1.常量回收
没其他地方引用这个字面量了。.]]></description><category></category></item><item><title><![CDATA[JVM内存模型]]></title><link>https://blog.youkuaiyun.com/HanJuly9569/article/details/116572596</link><guid>https://blog.youkuaiyun.com/HanJuly9569/article/details/116572596</guid><author>HanJuly9569</author><pubDate>Sun, 09 May 2021 22:56:40 +0800</pubDate><description><![CDATA[图片引用他人，如有侵权，告知即删。


1.程序计数器：
1.线程私有。
2.在jvm文档中没有定义OOM。
3.用户代码推进器，不作用于native源码。
4.用来分支，循环，跳转，异常处理等代码流程结构。
2.虚拟机栈（方法栈）
1.线程私有。
2.StackOverFlowError&amp;&amp;OutOfMemoryError。
3.一个方法就是一个栈帧，栈帧的出入栈表示方法的执行。
4.栈帧上包含局部变量表，动态链接，操作数栈，方法出口信息。
5.逃逸分析的介入，对象也可能分配到栈帧上，跟.]]></description><category></category></item><item><title><![CDATA[Spark ALS 协同过滤算法实践]]></title><link>https://blog.youkuaiyun.com/HanJuly9569/article/details/116113356</link><guid>https://blog.youkuaiyun.com/HanJuly9569/article/details/116113356</guid><author>HanJuly9569</author><pubDate>Sun, 25 Apr 2021 01:52:33 +0800</pubDate><description><![CDATA[个人总结，有误请指出
ALS算法
bibili上硅谷课程

理论
协同过滤算法

上图中横坐标代表用户，纵坐标代表商品，每一个格子，代表第I个用户的对第I个商品的评分。这个矩阵是一个稀疏矩阵，而这些没有值得位置正是我们要推测的值。每个格子的的评分大体上可以看做一个独立事件，是很难准确的通过其他独立事件去推测的。因为它的可能实在太多了。
所以综上我们提出两个问题：
由于它每一个格子的可能性太多，那我们可以简单的理解为求解一个推测值的复杂度是很高的，为m*n，m,n分别为矩阵的横纵长度。
由于每个用户对每个商.]]></description><category></category></item><item><title><![CDATA[Spark Shuffle源码领读]]></title><link>https://blog.youkuaiyun.com/HanJuly9569/article/details/115106933</link><guid>https://blog.youkuaiyun.com/HanJuly9569/article/details/115106933</guid><author>HanJuly9569</author><pubDate>Tue, 23 Mar 2021 01:03:52 +0800</pubDate><description><![CDATA[个人总结，以官网为准
如有错误，欢迎指出


主要步骤：

在excutor线程池里执行ShuffleMapTask时，触发ShufflRdd的compute函数
ShuffleRdd 使用BlockStoreShuffleReader 给SortShuffleWriter返回一个迭代器。
-SortShuffleWriter 间接通过 ExternalSorter 调用迭代器的next函数开始获取shuffle前一步的数据
ShuffleBlockFetcherIterator 在初始化的时候，先区分出.]]></description><category></category></item><item><title><![CDATA[Spark任务执行流程源码领读]]></title><link>https://blog.youkuaiyun.com/HanJuly9569/article/details/115057275</link><guid>https://blog.youkuaiyun.com/HanJuly9569/article/details/115057275</guid><author>HanJuly9569</author><pubDate>Sun, 21 Mar 2021 22:07:05 +0800</pubDate><description><![CDATA[流程

CoarseGrainedExecutorBackend 受到启动任务的请求，并将任务反序列化给excutor
Excutor将任务描述放到TaskRunner，然后放入线程池中
线程启动后，首先想driver端发送任务状态
并拉取jar等依赖
调用Task的run方法执行（ShuffleMapTask,ResultTask）

主要代码


...]]></description><category></category></item><item><title><![CDATA[Spark任务切割提交源码领读]]></title><link>https://blog.youkuaiyun.com/HanJuly9569/article/details/115051107</link><guid>https://blog.youkuaiyun.com/HanJuly9569/article/details/115051107</guid><author>HanJuly9569</author><pubDate>Sun, 21 Mar 2021 21:22:29 +0800</pubDate><description><![CDATA[概述

RDD的action算子触发SparkContext的runjob
然后触发DAG的runjob方法
DAG执行提交job方法，并递归切割stage
DAG将任务提交给TaskSchedulerImpl
TaskSchedulerImpl与CoarseGrainedSchedulerBackend等协同将任务封装为TaskSetManger，并请求资源，
TaskSchedulerImpl封装任务为TaskDesc并序列化发送给Excutor

总结：
重要的几个类及其作用：

DAGSchedu.]]></description><category></category></item><item><title><![CDATA[Spark提交流程源码领读]]></title><link>https://blog.youkuaiyun.com/HanJuly9569/article/details/114909023</link><guid>https://blog.youkuaiyun.com/HanJuly9569/article/details/114909023</guid><author>HanJuly9569</author><pubDate>Wed, 17 Mar 2021 01:12:51 +0800</pubDate><description><![CDATA[Spark提交流程源码领读
从上图一步步来解析


通过SparkSubmit的脚本使用submit触发 doSubmit(arg[])


然后自己调用submit(args: SparkSubmitArguments, uninitLog: Boolean),


prepareSubmitEnvironment    它主要是使用从前两步解析的参数，选择对应的启动类，启动类不一定是我们写的主类。准备一些后面需要用到参数childArgs，childClasspath，sparkConf
比如yarn模]]></description><category></category></item></channel></rss>