自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(90)
  • 问答 (1)
  • 收藏
  • 关注

原创 【leetcode】关于循环数组的深入分析

给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。

2025-02-13 13:27:14 494

原创 【python】参数解析

python中实现参数解析主要有两种方式,argparsesys.argv,前者适合复杂场景,后者适合简单场景。

2025-02-12 13:22:36 237

原创 【python】http.server内置库构建临时文件服务

需要从linux开发机上下载一个文件到本地,约700M比较大,通过sz命令下载较慢且传输过程不稳定连续失败,后采用下面方式解决。cd到一个目录下执行,port为服务的端口号:启动后浏览器中访问服务地址,从这里可以直接查看目录下所有的文件&下载。下面是服务的参数源码:-b绑定服务监听的ip地址,默认值0.0.0.0公网所有ip都可以访问,127.0.0.1只能本机访问,该参数不用调整。-d设置哪个目录作为根目录,默认值执行命令时的当前所在目录。port。

2025-02-11 19:57:09 357

原创 【shell】索引数组&关联数组

关联数组的增删改查操作都和上面索引数组类似,同名索引也会相互覆盖,不多余说明了,唯一需要注意的是,参数表示声明后面的变量为数组类型),也可以不声明直接对一个变量应用数组相关的操作变为数组,比如。和2类似,不加:无论数组中的元素在赋值时是何种形式,在读取时默认都按照空格拆分为多个独立元素。获取数组长度时无区别,且无论加不加引号,获取的都是数组的实际长度,但推荐后者,更符合习惯。带引号赋值,可以将引号中的内容识别为一个整体,即使引号中的元素包含空格。,删除后该位置索引等同于跳过了,不会参与数组长度的统计。

2025-02-10 12:47:44 702

原创 【线性代数】通俗理解特征向量与特征值

这一块在线性代数中属于重点且较难理解的内容,下面仅个人学习过程中的体会,错误之处欢迎指出,有更简洁易懂的理解方式也欢迎留言学习。

2025-01-07 20:00:25 1161

原创 【leetcode】摩尔投票算法

摩尔投票算法的思想是,将每一个元素视为一个潜在的候选元素,开始选择第一个元素为候选元素并计票。往后每出现一个和候选元素相同的元素票数+1,不相同的元素票数-1。当第一个选定的候选元素票数为0时表明截止此时存在相同数量个不同于候选元素的其他元素,所以它们之间可以“抵消”(因为题意中的多数元素是指过半的元素),抵消之后重新选择下一个元素为候选元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。输入:nums = [2,2,1,1,1,2,2]的元素,n为输入元素长度。

2025-01-07 12:25:57 398

原创 【python】unittest单元测试

如果指定模块,会测试模块中所有测试类的全部方法。(命令执行目录下需要能搜索到指定模块,注意模块名不包含.py)所以这种方式启动的话,建议脚本中只写一个测试类,且类中只写一个测试方法,所有的测试逻辑都放在该方法里。下面是根据文档写的一个demo,主要的内容基本都包含了,使用时导入自己的业务类测试类中的方法就行。(如果一个脚本中有多个测试类、一个测试类中有多个测试方法的话)。这种方式可以直接指定模块、具体的测试类及测试方法等。

2024-12-31 16:55:09 518

原创 【python】is、== 两种比较方式的区别

比较的是对象的值时,这里的对象其实仅指的是python中自带的一些可变容器类型,比如列表。因为这些容器类型源码中已经预实现了。这种理解也没错,但是需要注意一个前提,当说。如果对象的类或父类中没有实现这个魔术方法,比较运算符时,其实调用的就是这个方法。相同,比较的还是对象的内存地址。方法,当在python中使用。

2024-12-20 20:17:42 204

原创 【线性代数】理解矩阵乘法的意义(点乘)

大学刚接触线性代数时,很不理解矩阵乘法的计算规则,为什么规则定义的看起来那么有规律却又莫名其妙,现在参考了一些资料,回过头重新总结下个人对矩阵乘法的理解(严格来说是点乘)。理解矩阵和矩阵的乘法,可以先理解矩阵和向量的乘法,因为矩阵可以看成是不同列向量的集合。下面从基变换视角理解矩阵的乘法原理,基变换视角是将矩阵的每个列向量看成是新基坐标系中的一个基坐标。先考虑一个规则的 2x2 的矩阵和一个 2x1 的向量之间的乘法,例如:[1−212][11]=[−13]\begin{bmatrix} 1

2024-12-17 17:24:01 1806 2

原创 理解梯度下降

开始可以随机化一个点x=10,该点处导数=20,表示x=10这个点处函数值的趋势是增加的,且这种趋势的增长速率是20,因此需要调小x的值才更可能找到较小的函数值。导数本身的值可以满足这种需求,但是直接以导数本身来调也不合适,比如在x=10的点处,按照导数值本身来调的话新的x值=10-2x10=-10,此时x位置跑到对称的另一边了,该点x=-10处导数值为-20,表示函数在这个地方是减少的,需要调大x的值,继续迭代下一个新的x值又回到了x=10处,一直会来回震荡,永远找不到最低点。

2024-11-22 19:26:48 1099

原创 【python】一个python代码执行分析工具(viztracer)

一个轻量级python执行和性能分析工具,可以跟踪程序的执行过程,记录函数调用、线程信息、函数执行时间等数据。

2024-11-18 16:38:59 404

原创 【python】os.fork进程创建

在类unix系统中,fork系统调用一般采用了写时复制(Copy on Write)技术,fork出来的子进程会复制一份父进程的内存页表作为自己的内存页表,因为页表项中虚拟内存页指向的实际物理内存页还是原来的,所以进程间内存也是共享的。fork,叉子、分叉的意思。注意这个返回的值跟os.getpid()返回的pid含义不同,os.getpid()返回的是当前进程的进程号,而fork调用返回的值更像是一个进程内部的标识变量,只不过这个变量的值在父进程中定义为子进程的进程号(便于控制子进程)。

2024-10-30 20:23:26 965

原创 【python】logging日志模块使用快速入门

1-5日志级别由低到高,日志级别的设定是一个阈值,设定为某个级别后,这个级别及以上级别的日志才会被记录。比如设定为INFO,那么INFO、WARNING、ERROR、CRITICAL的日志会被记录,DEBUG级别的日志不会被记录。NOSET特殊一些,不属于日志级别的定义,表示不设置级别,继承父记录器的日志级别。logging模块默认将日志输出到标准错误流(sys.stderr),与日志级别设置无关。日志属于程序调试信息,与正常输出理应隔离,不影响正常输出,所以也可以理解为什么这样设计。

2024-10-28 16:44:08 854 1

转载 【转载】16张图解带你掌握一致性哈希算法

不同的负载均衡算法适用的业务场景也不同的。轮训这类的策略只能适用与每个节点的数据都是相同的场景,访问任意节点都能请求到数据。但是不适用分布式系统,因为分布式系统意味着数据水平切分到了不同的节点上,访问数据的时候,一定要寻址存储该数据的节点。哈希算法虽然能建立数据和节点的映射关系,但是每次在节点数量发生变化的时候,最坏情况下所有数据都需要迁移,这样太麻烦了,所以不适用节点数量变化的场景。为了减少迁移的数据量,就出现了一致性哈希算法。

2024-09-24 15:22:08 92

原创 【Linux&Python】linux中通过源码方式安装python环境

python环境安装仅看第二部分即可。

2024-08-12 13:39:24 1157

原创 【hive】HiveSQL中两个json解析函数的使用&json路径定位小工具

虽然逻辑上理解并不矛盾,尽管该UDTF返回的是个表,但一行输入只会对应一行输出,只是输出的字段可能是多个,并不像explode那样返回的是多行。和get_json_object不同的是,get_json_object是一个普通的UDF函数,返回的是一个值。,该函数适用于对传入的json对象一次性解析多个key的场景,如果用get_json_object需要解析多次,该函数只需要解析一次。(通配符个人认为适用的场景为取同一层级所有对象的某个属性时,如果是取所有对象本身,那么直接不加。

2024-08-04 03:57:17 1699

原创 【pandas】read_csv时数据行数减少或报错

字符,其中83261行和119979行中都只包含一个,所以导致83261行和119979行中的引号匹配。read_csv方法在解析文件时,默认会将双引号内的内容当作一个整体,因此83261行引号之后到119979整行数据,都会被解析成83261行的一个字段,这中间的数据行也就都丢失了。,该参数的含义是忽略文本字段中的所有引号,但是也可能会带来一个问题,就是引号中如果包含特殊字符比如分隔符,就会导致解析的字段变多引发异常。匹配时把其它的行误当作引号中的内容,解析成了一个字段。两者都可能是文件中包含特殊字符。

2024-07-22 16:39:56 941

原创 【Linux】常用命令总结(updating)

shell命令可以使用man查看命令文档说明,说明界面中可通过b(backward)向上翻页,f(forward)向下翻页,g(go to)跳到说明首页,G跳到说明尾页。

2024-07-11 13:35:27 582

原创 【Linux】shell基础&知识点(updating)

从输出结果也可以看到:管道操作并非后面的进程在前面的进程执行完后启动,而是同时启动,只有当前面进程的标准输出是后面进程的标准输入时,前面进程才会一定先于后面进程执行完。1)bash与sh的区别:可以简单理解为,bash在sh的基础上,增加了更多的拓展特性,适合编写更复杂的脚本,兼容sh。bash、sh、以及相对路径或绝对路径的方式执行,相当于在当前进程中新开了一个子进程用来执行脚本,脚本执行完子进程销毁,子进程中定义的变量&环境不会回传给父进程。≠0)时,后面命令才会执行。=0)时,后面的命令才会执行。

2024-07-09 18:25:02 1285

原创 【hive】数据采样

参考,可以直接查看原文,下面只是对原文进行概括和实际性能测试。

2024-07-05 19:22:30 1314

原创 位运算符计算规则及使用场景

位运算符包括按位与、按位异或、按位或、按位取反、左移<<、右移>>

2024-06-25 19:27:31 1976

原创 【HiveSQL】join关联on和where的区别及效率对比

假设数据库系统支持谓词下推的前提下,内连接:内连接的两个执行计划中,对t2表都使用了,对t1表都使用了,因此可以说,内连接中where和on在执行效率上没区别。外连接:还是拿左外连接来说,右表相关的条件会使用谓词下推,而左表是否会提前过滤数据,取决于where还是on以及筛选条件是否与左表相关,1)当为on时,左表的数据必须全量读取,此时效率的差别主要取决于左表的数据量。2)当为where时,如果筛选条件涉及到左表,则会进行数据的提前过滤,否则左表仍然全量读取。

2024-06-17 19:27:08 2633

原创 【python】else与循环&异常捕获的搭配使用

看代码时发现的一种写法,学习一下。

2024-06-13 11:01:08 458

原创 【hive】transform脚本

和udf差不多的作用,支持用python实现。通过标准输入流从hive读取数据,内部处理完再通过标准输出流将处理结果返回给hive。实现流程上比udf要更简单灵活一些,只需要上传脚本=>add file加载到分布式缓存=>使用。

2024-05-05 20:10:38 1274

原创 【Linux】awk命令学习

awk是一个文本编辑器,按照指定的记录分隔符和字段分割符将文件分行分字段,然后一行一行的流式处理数据。

2024-05-04 05:01:38 1886

原创 【hive】lateral view侧视图

lateral view也叫侧视图,属于hive sql所特有的语法。用来实现类似标准sql中join的操作。join参与运算的往往是两个表,根据指定的关联字段进行横向连接。lateral view参与运算的是一张表,这张表里往往存在某个多值的字段,通过侧视图结合UDTF函数可以将这个多值字段拆分为粒度更小的值,每一个拆分出来的值都会作为新的字段和一条原记录进行拼接。类似于列转行操作,虽然严格意义上不算列转行,因为只是增加了行数,但并未减少列数,只是减少了列中所包含的字段个数。

2024-04-14 01:50:08 3708

原创 解决mac本git安装后找不到命令的问题

不熟悉mac配置,折腾了半天,记录一下。

2024-04-12 18:35:16 847

原创 MySQL开窗函数

开窗函数是mysql8.0中的新特性,用于实现和group by分组函数类似的分组聚合功能。分组函数:对一个集合输出一个标量结果,改变了数据的粒度,且丢失了非分组字段及非聚合字段的信息。开窗函数:分别以每一行为当前行,与当前行相关的所有行为窗口,对同一个窗口内的数据进行聚合等类似操作,结果附加到当前行的后面,不改变原始数据粒度,不丢失原始数据信息。这部分可以直接查看文档,个人觉得这部分算是开窗函数里最重要的了,弄明白了各种情况下窗口的大小,其他的就没啥容易混淆的点了。rows和range。

2024-03-30 03:20:19 4910

原创 分类模型评估:混淆矩阵与ROC曲线

理解混淆矩阵和ROC曲线之前,先明确几个概念。对于分类问题,不论是多分类还是二分类,对于某个关注类来说,都可以看成是二分类问题,当前的这个关注类为正类,所有其他非关注类为负类。从上面几个定义可以知道:1)样本总数 = TP+FP+TN+FN2)所有真实值为正类的样本总数 = TP+FN3)所有真实值为负类的样本总数 = TN+FP。

2024-03-25 01:31:08 2280

原创 Hive优化

工作中涉及到优化部分不多,下面的一些方案可能会缺少实际项目支撑,这里主要是为了完备一下知识体系。

2024-03-18 04:30:26 1045

原创 面试复盘记录(数据开发)

这题一开始我想用SQL实现,但是因为两个表里都可以有重复数据,比如说对于数据A,t1表有两个A,t2表有一个A,那么关联的时候t1的两个A都能和t2的一个A关联上,而根据题意,t1两个A减去t2一个A,还应剩下一个A,当时的卡点在这。导致SQL的实现没有完成,后被提示开窗函数,才想起来可以通过row_number为相同的A打上序号标签,关联的时候加上序号限制就可以了。这题当时没写出来,一直想基于矩阵的下标使用循环完成,因为对于顺时针循环,横纵坐标x, y的变化特点是x, y先分别自增,然后分别自减。

2024-03-14 02:32:20 584

原创 MySQL索引

测试环境:mysql8.0.18(InnoDB)

2024-03-04 02:58:29 1065

原创 面试系列之《Spark》(持续更新...)

根据分区之间是否产生shuffle来确定宽依赖:上游一个分区的数据被打散到下游的多个分区,1:N窄依赖:上游一个分区的数据全部进入到下游的一个分区,1:1 or N:1。

2024-02-19 20:25:44 1216

原创 数据分析中常用的指标或方法

当有重复值时,一般采用平均顺序作为所有重复x值的顺序号,例如[1, 1, 1, 2, 3],1的顺序编号为(1+2+3)/3,均为2。对应的顺序号为[2, 2, 2, 4, 5],经过验证在pandas的corr方法中采用的就是平均顺序计算。皮尔逊系数的值域范围为[-1, 1],不受量纲的影响。斯皮尔曼系数的计算和皮尔逊系数相同,唯一区别只是将皮尔逊系数中的原始值替换为了原始值所对应的秩(顺序编号)。方差用来衡量随机变量离其期望值的分散程度,标准差在方差的基础上消除了量纲的影响。

2024-01-16 13:11:28 1630

原创 spark中结合源码理解reduceByKey、groupByKey、combineByKey等几个ByKey算子的区别

1.上面这么多的…ByKey,其实最底层的就是combineByKey,这个方法中的三个参数所表示的含义:1.createCombiner:定义分区内第一条被处理的数据的转换规则2.mergeValue:定义各map分区内数据之间的计算规则。(发生在shuffle之前)3.mergeCombiners:定义不同的map分区之间的数据合并规则。

2023-09-23 20:25:35 828

原创 面试系列之《Linux&Shell》(更新中)

例如“2023-01-01”和“2023-01-10”,获取两日期之间的所有日期。

2023-09-21 02:08:08 372

原创 python查看第三方包模块文档的两种方式

本机会随机生成一个端口号(也可以指定端口号,注意端口冲突),输入b直接打开,或者复制地址浏览器中打开查看。ctrl+f 要查询的模块名。

2023-04-02 00:37:26 2187

原创 说一说关系数据库中的范式建模

面试中可能会被问到,来回顾总结一下,参考《数据库系统第五版》(王珊/萨师煊)范式(normal form),我的理解是用来规范关系数据库中实体如何划分以及实体间如何建立联系来保持数据完整性的一种指导思想,目的就是要消除数据冗余,追求单表操作,修改某个实体只需要操作一张表,实体与实体间修改互不影响。目前存在六种范式:1NF/2NF/3NF/BCNF/4NF/5NF,它们之间属于层层递进的关系。

2023-02-24 15:18:01 491

原创 谓词exsits用法及与in的使用区别

大白话的说,exists的执行,是依次拿外层表的每条记录,去和exsits后的子查询表按你所定义的运算规则(如果有的话)做运算,如果存在结果,也就是有返回数据,无论这部分数据有几条,这部分数据内容是什么,exists后的子查询都会返回true,外层表参与运算的这条记录被保留,反之返回false,外层表参与运算的这条记录被舍弃。也就是强调的,而不关注。下面是从文档中截取的几句话,可以印证说明。

2023-02-19 00:53:15 1044

原创 详细记录拉链表的实现过程

1)直接更新,也就是用业务库中发生变化的数据覆写数仓中的数据,这种实现方式可以保持数仓与业务库数据保持一致,缺点是只能保存当前最新的数据,对这条数据修改之前的历史数据不做维护,一般很少采用这种实现方式,除非历史数据本身就是错误的,没有使用价值。此时这张拉链表就是只包含最新的记录信息,而上面那张拉链表中包含的既可能有最新的信息,也可能有历史的记录信息,此时我们需要把原始的那张拉链表中的。后续对拉链表的更新都是只同步每天发生更新的数据,然后把这部分数据做成一个新的拉链表,再修改原始拉链表中的有效期。

2022-12-28 22:54:41 2691 1

typora免费正版安装包

typora免费正版安装包

2024-12-22

iterm2-zmodem脚本

解决mac中lrzsz命令不能上传下载文件的问题

2024-04-17

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除