自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

bitcarmanlee的博客

https://github.com/bitcarmanlee/easy-algorithm-interview-and-practice 同步更新,欢迎star

  • 博客(782)
  • 收藏
  • 关注

原创 pandas loc iloc ix用法详解

pandas处理数据时,我们会经常看到dataframe结构使用loc, iloc, ix等方法。那么这些方法到底有啥区别,下面我们来进行详细分析。首先我们先明确一点,这几个方法都可以用来过滤dataframe的行列。他们的不同,主要还是使用方式的不同。在分析之前,我们先来明确一下标签label的概念。为了方便看得更清楚,先构造一个数据集# label上面的data,0,1,2,3,4,5为索引,就是我们的行标签。name ,age,country,city为列名,则是我们的列标签。

2023-01-09 15:06:28 656 1

原创 分割训练集测试集验证集的两种方式

训练模型过程中,不可避免要对数据集进行切分,将数据集按比例分成训练集,测试集,验证集。作为一种常见的需求,稍微总结了一下两种实现方式。

2023-01-06 16:56:28 4273 1

原创 parquet-tools用法详解

因为是压缩格式,我们无法直接查看parquet文件里的数据,这个时候parquet-tools就给我们提供了一个方便的途径对parquet文件进行查看。从上面的输出可以看出来,meta参数输出的信息,比schema参数输出信息更详尽,可以看到数据的压缩方式,是否压缩,数据的null值数量,min/max值等。对于parquet文件,第一下我们可能需要了解的就是元信息,这个时候通过schema/meta参数就可以实现查看元信息。cat命令可以查看数据里面的内容,用法与linux系统中的cat用法类似。

2022-12-11 11:34:08 4445 3

原创 sql求交集与差集

日常工作中,针对两个表A,B,求A与B表中同一个字段的交集与差集是常见需求,下面我们来总结一下求交集与差集的方法。假设现在有两张表A,B,A,B表中均有一个字段为id,现在我们想求A与B中都存在的id有多少个(去重),在A中但不在B中的id有多少个。

2022-12-09 22:43:40 13701

原创 sql not in 查询结果为空解决

而任何值与NULL值进行对比,结果都为null,即idxxx null 返回的都为false,最终not in子句不会返回任何一行数据。result表与xxx表中都有数据,且result表中的id数量多余xxx表,正常应该输出一个正整数,但是该语句查询出来的结果为0,很显然不符合预期。3.通过not in,查找在result中且不在xxx表中的id,并对id做去重,最后进行count计数操作。总结一下就是,如果not in中只要有一个id位null,就会导致返回的结果为0。

2022-12-09 22:01:35 3706 1

原创 回归算法中特征线性相关会怎样

线性相关的概念,大家在线性代数里面都有学过。如果把问题更加简化一点,假设两个单变量x1,x2x_1, x_2x1​,x2​线性相关,那么可以写成如下形式x1=a⋅x2+bx1​=a⋅x2​+b。

2022-11-28 12:32:18 1086

原创 sql计算占比

计算占比是日常分析中常见的需求,下面我们来小结一下怎么用sql来实现计算占比。

2022-11-23 12:38:23 10160 2

原创 sql 计算两个日期差几天

有段时间没写sql,正好今天要处理个比较复杂的业务问题,需要写sql,里面碰到几个小点,还有点记得不是太清楚,稍微想了一阵才写出来,特此记录,方便后续查询。其中有一个环节,需要计算两个日期差几天,经过一番思考,可以按如下方式进行计算。

2022-11-18 17:45:55 9733 1

原创 python3.x zip用法详解

在python 3.x系列中,zip方法返回的为一个zip object可迭代对象。""""""通过上面的注释,不难看出该迭代器的两个关键点:1.迭代器的next方法返回一个元组,元组的第i个元素为各个输入参数的第i个元素。2.迭代器的next方法,遇到输入序列中最短的那个序列迭代完毕,则会停止运行。为了看清楚zip的效果,我们先看个最简单的例子try:pass上面的代码,输出结果为('a', '1')('b', '2')('c', '3')('d', '4')

2022-11-12 20:37:29 713

原创 计算AUC的方法以及代码实现

按概率从高到矮排个降序, 对于正样本中概率最高的,排序为rank_1, 比它概率小的有M-1个正样本(M为正样本个数), (rank_1 - M) 个负样本。正样本概率第二高的, 排序为rank_2, 比它概率小的有M-2个正样本,(rank_2 - M + 1) 个 负样本。正样本中概率最小的, 排序为rank_M,比它概率小的有0个正样本,rank_M - 1 个负样本。可以看出,sklearn中auc,以及我们用上面第二,第三种方法计算得到的auc值,都是完全一致的。具体的详情可以参考下文。

2022-11-04 11:35:59 1347

原创 redis为什么速度快小结

当客户端的请求抵达服务器以后,服务器会采用多路分配的策略,由一个线程接收所有请求,然后将请求派发到相关的工作线程并进行处理。但是,执行命令的模块,即文件事件分派器仍然是单线程,所以我们还是可以说redis是单线程模型。redis作为一种常见的kv数据库,在实际中使用非常广泛,其最大的特点就是"快",在系统中常被用来当做缓存快速获取想要数据。平时大家所说的单线程模式,对应上面的图片,其实指的是执行redis命令的核心模块是单线程,并不是说整个redis的服务就只有一个线程。复用:指共用一个线程或进程。

2022-10-13 15:46:14 674

原创 redis为什么要使用skiplist跳表

跳表是一种特殊的链表,特殊的点在于其可以进行二分查找。普通的链表要查找元素只能挨个遍历链表中的所有元素,而跳表则利用了空间换时间的策略,在原来有序链表的基础上面增加了多级索引,然后利用类似二分查找的思路来快速实现查找功能。跳表可以支持快速的查找,插入,删除等操作,时间复杂度为O(logn),空间复杂度为O(n)。

2022-10-13 10:13:53 918

原创 redis五种数据结构与六种底层实现

SDS同样遵循C语言中字符串以’\0’结尾的观里,并且这个空串不计算在len的长度中,另外还为该串额外分配了一个字节的空间,包括添加到末尾等操作,全由SDS中的函数自己完成,不需要调用者进行额外的操作。而在SDS中,是以处理二进制的方式来处理存放在buf数组中的数据,因为是二进制,所以不会对里面的数据类型有任何限制,也可以存放视频图像声音这类非文本数据。SDS有5中header类型,之所以要定义不同的类型,是为了让不同的字符串使用不同长度的header,达到节省内存的目的。5. zset 有序集合。

2022-10-12 15:37:56 420

原创 kafka为什么速度快总结

kafka被广泛运用在各个系统中,被用来充当消息的中间件与数据总线的功能。而且我们都知道,kafka是基于磁盘存储的,但是描述kafka的形容词,最常见的经常有诸如速度快,延时小,吞吐量大这些,吞吐量能达到几十w甚至上百万每秒。而这些形容词,却与磁盘来说是格格不入的。所以kafka为什么快就成了一个经典的问题,下面我们就来进行初步总结。

2022-10-08 16:45:46 2075

原创 信用评分卡A/B/C卡

A卡(Application score card) 为申请评分卡。C卡(Collection score card) 为催收评分卡。B卡(Behavior score card) 为行为评分卡。分别来说,对应的即为贷前/贷中/贷后行为。信用评分卡可以分为A,B,C三类。

2022-09-27 19:15:57 1118

原创 flink kafka消费pojo类型数据实战详解

首先,我们定义一个pojo类}}}}}@Override"}";}}我们定义了一个User类,该类有两个字段name与age。需要注意的是,该类必须要包含有默认的构造函数,否则后续代码使用过程中会出现问题,具体可以参考如下链接/***/@Override}@Overridetry {}}@Override}}上面类的作用,是将User对象序列化的过程,方便后面的数据传输。上面使用了ObjectMapper类进行序列化,需要引入如下依赖。

2022-09-27 16:13:16 1478

原创 Flink+kafka实时统计本地环境搭建与代码实战

flink经常用来消费上游kafka的数据,而kafka又依赖zookeeper进行。所以在进行测试之前,先要准备好本地的zookeeper与kafka环境。在pom.xml文件中,先添加所需要的依赖。主要包括flink相关的依赖已经kafka相关的依赖,flink版本1.7.2,kafka相关版本0.9。通过命令行事先准备了一个名为test的topic,然后实现producer往里面写数据。稍微需要注意的是,序列化反序列化使用的类型,均为StringSerializer。

2022-09-26 15:00:00 1712

原创 flink keyby指定key方式详解

这种操作在各种大数据计算引擎中都非常常见,比如最早的mapreduce,从map阶段到reduce阶段,就是通过shuffle操作将具有相同key的数据分配到同一个reduce端进行处理。比如如果数据是个比较复杂的嵌套结构Tuple2,如果我们想对内部嵌套的Tuple2的第一个字段进行keyby操作,就无法通过字段号来操作,这个时候我们可以通过字段名的方式来进行代替。先定义个内部静态类,静态类包含有两个字段,分别为word与count。

2022-09-17 12:40:38 5588

原创 flink groupby keyby区别

spark中我们经常使用groupby算子对数据进行聚合。flink中,不仅有groupby算法,还有keyby算子,那么这两者的区别在哪里?上面是stream版的wordcount操作,对于DataStream数据,使用的则是keyby算子。上面可以认为是batch版的wordcount操作,对于DataSet使用的就是groupBy操作。groupby是用在DataSet系列API中,Table/SQL等操作也是使用groupby。keyby是用在DataStream系列API中。

2022-09-17 10:59:07 1684

原创 数据库的星型模型与雪花模型

星型模式模型可以被描述为一个简单的星型结构:一个中心表包含事实数据,多个表从它向外辐射,由数据库的主键和外键连接。在星型模式实施中,数据库的构建者将所有维度级别的维度数据存储在单个表或视图中。例如,如果您使用星型模式实现Product维度,那么数据库构建者将使用单个表来实现维度中的所有级别,如屏幕截图所示。所有级别中的属性都映射到名为PRODUCT的单个表中的不同列。(图片来自参考文献1)雪花模式表示一个维度模型,它也由一个中心事实表和一组构成维度表组成,这些维度表进一步规范化为子维度表。...

2022-08-29 15:07:40 6088

原创 java,python遍历文件夹与子文件夹

使用的时候我们不停遍历,可以获取生成器中的内容。1.首先调用listFiles方法,返回Files数组,包含当前目录下的所有目录与文件。我们经常需要针对目录的树形结构进行遍历,即遍历目录中的子文件夹与文件。files也是一个list,里面是该文件夹中所有的文件,但是不包含子目录中的文件。1.listdir(path)返回指定的文件夹包含的文件或文件夹名字列表。dirs是一个list,里面是该文件夹中所有目录的名字,但是不包含子目录。4.如果为文件,进行相应操作(示例中为读取文件的内容)。

2022-08-24 18:05:54 709 2

原创 Java API操作Hdfs详细示例

从FileStatus中不难看出,包含有文件路径,大小,是否是目录,block_replication, blocksize…可以看出listStatus只需要传入参数Path即可,返回的是一个FileStatus的数组。上面的方法是遍历所有文件以及文件夹。如果只想遍历文件,可以使用listFiles方法。如果判断fileStatus是文件夹,则递归调用tree方法,达到全部遍历的目的。,而listStatus返回的是个数组。同时,listFiles返回的都是文件。而FileStatus包含有以下信息。

2022-08-24 11:12:50 910

原创 Java创建线程实例详解

2.创建Callable实现类的实例对象,并使用Future的实现类FutureTask类包装Callable实例对象。1.定义实现类实现Runnable接口,并实现run方法,run方法中的逻辑即为该线程的具体逻辑。使用继承Thread的方式创建线程,缺点就是因为java的单继承机制,使得该类无法再继承其他类。因为创建线程是一个比较重的操作,使用线程池可以减少线程创建销毁等的性能开销。直接继承Thread类的方式,实现简单方便,但是因为单继承问题,无法再继承其他类。run方法中是后返回类型的。...

2022-08-18 17:32:24 705 1

原创 BFS与DFS模板总结

剪枝”的意义在于让程序尽量不要执行到更深的递归结构中,而又不遗漏符合题意的解。当程序递归到底返回到原来执行的结点时,“状态”以及与“状态”相关的变量需要“重置”成第 1 次走到这个结点的状态,这个操作有个形象的名字,叫“回溯”,“回溯”有“恢复现场”的意思:意即“回到当时的场景,已经走过了一条路,尝试走下一条路”。状态通常是一个列表结构,因为一层一层递归下去,需要在列表的末尾追加,而返回到上一层递归结构,需要“状态重置”,因此要把列表的末尾的元素移除,符合这个性质的列表结构就是“栈”(只在一头操作)。...

2022-08-09 18:13:08 1309

原创 leetcode 93 Restore IP Addresses详解

给定一个只包含数字的字符串 s ,用以表示一个 IP 地址,返回所有可能的有效 IP 地址,这些地址可以通过在 s 中插入 ‘.’ 来形成。例如:“0.1.2.201” 和 “192.168.1.1” 是 有效 IP 地址,但是 “0.011.255.245”、“192.168.1.312” 和 “192.168@1.1” 是 无效 IP 地址。输出:[“1.0.10.23”,“1.0.102.3”,“10.1.0.23”,“10.10.2.3”,“101.0.2.3”]输入:s = “101023”...

2022-08-09 17:22:07 777

原创 c++分割字符串split方法实现

c++标准库中没有实现split函数,但是split字符串又是特别特别常见的常规操作。网络上能找到很多split的实现方式,下面记录一下本人认为比较优雅,可读性也比较好的两种实现方式。

2022-07-28 10:24:21 4195

原创 c++ vector二维数组初始化与vector切片

实际开发过程中,经常会使用vector嵌套的方式来模拟二维数组,下面我们详细分析一下如何对其进行初始化。同时array是动态数组,后面可以通过resize方法将其列数指定为2。我们还可以在创建vector的时候,直接指定vector的行数与列数。首先我们采用逐个初始化的方式,对二维vector进行初始化。上面的array,是3行2列的二维数组,默认初始值为0。注意实际使用的时候,B要及时进行clear操作。上面的run方法运行以后,得到的结果如下。上面我们首先指定array的行数为3。......

2022-07-27 16:08:22 5051

原创 岛屿类问题通用解法与DFS框架

我们所熟悉的 DFS(深度优先搜索)问题通常是在树或者图结构上进行的。而我们今天要讨论的 DFS 问题,是在一种「网格」结构中进行的。岛屿问题是这类网格 DFS 问题典型代表。

2022-06-27 14:37:04 586

原创 c++ string类常见操作

反转字符串为常见的日常操作,在c++中可以用algorithm里的reverse方法进行操作。上述方法输出为使用reverse方法以后,字符串本身发生了改变。如果需要保留原有字符串,则可以再新创建一个字符串进行反转。插入字符可以使用push_back与insert方法。其中,push_back是在字符串尾部操作,而insert可以在字符串任意位置进行操作。3.字符串拼接append方法可以用来进行字符串拼接,”+“也可以收到同样效果4.字符串遍历遍历可以使用下标,也可以使用迭代器。迭代器可以

2022-06-17 11:21:05 966 1

原创 c++字符处理判断是否为数字字母,大小写转换

日常工作中经常会涉及到字符的处理。在c++中,cctype头文件里就包含有许多对字符的常规处理,下面我们来总结一下。isalpha可以判断一个字符是否为字母,如果是字母则返回1,否则返回零。2. 判断是否为数字isdigit可以判断一个字符是否为数字。是返回1,不是返回0。另外,在apple平台的clang++中,还有isnumber方法,查看函数签名,跟isdigit相同,最后的效果也与isdigit相同。3.判断是否是数字或字母isalnum可以判断字符是否是数字或者字母,是返回1,否返回0

2022-06-15 19:22:59 5624 1

原创 c++生成随机数详解(包含可执行代码)

c++中生成随机数最简单的方式就是rand函数。而且rand函数位于stdlib.h头文件中,不需要额外的再引入。从rand的函数签名不难看出其返回的是一个int类型。run1方法的输出为2.srandrand函数生成的是伪随机数。伪随机数的意思是,不管运行多少次,每次运行的结果都是一致的。为了解决伪随机数的问题,可以采用srand函数。srand的函数签名为可见要想使用srand,需要传入一个unsigned类型,一般就可以使用time方法。上述输出为3.生成一定区间的整数上面的分析我们看

2022-06-15 10:56:14 6275

原创 spiral matrix visit Search a 2D Matrix

最近看到几道与矩阵有关的题,觉得有点意思,思路也是挺有代表性,特意进行记录。对矩阵进行螺旋遍历,也是一个经典场景了,leetcode54题就是这个,给个示意图就清楚了。解题思路是:设立left,right,up,down四个量表示四条边的起始位置,然后沿着四条边进行遍历。需要注意的是退出条件。对照上面的代码:先从left->right进行遍历,相当于遍历上面的一条边。遍历结束后,对up进行加1操作。并且进行判断,如果此时up>down,说明遍历已经完成,循环结束。其他三条边遍历逻辑类似,注意写代码

2022-06-12 10:41:06 181

原创 Rotated Sorted Array旋转排序数组相关题

在leetcode相关题目中,对Rotated Sorted Array相关的定义为:整数数组 nums 按升序排列,数组中的值互不相同 。在传递给函数之前,nums 在预先未知的某个下标 k(0

2022-06-10 14:36:55 287

原创 c++使用裸指针与智能指针返回数组详解

首先明确一点:c++代码中无法直接返回数组,这一点比较清晰简单,我们写个方法进行测试上面代码运行得到的结果为原因也很容易解释:我们在f1内定义的数组c,在f1执行完毕以后被系统释放掉,所以在调用f1方法得到的结果肯定就不是计算以后得到的正确结果。为了解决上面的问题,我们可以在函数内new一个数组出来,这样new出来的数组被分配在堆空间上,函数执行完毕不会被释放。上面代码运行因为上面的数组是在函数内new出来,而在调用以外释放,逻辑不是特别清晰,因此可以改为下面的方式因为c++中手动分配内存的一个

2022-06-09 10:36:11 1400

原创 c++ 字符串与数字相互转换

日常编码过程中,字符串与数字进行相互转换是常见的需求,下面我们总结一下在c++中,字符串与数字的转换都是如何来进行操作的。首先看看,在c语言的风格中,我们怎么做到把字符串转为数字。注意上述代码是在namespace为std的环境中运行。atoi, atof函数,均在stdlib.h中进行了声明,在头文件中,其声明的函数原型为不难看出,上面这些方法的输入均为const char *,即字符串,得到的输出为转化以后的各种数值类型。2.字符串转数字c++风格上面代码也是在namespace为std的环

2022-06-05 10:34:00 35135

原创 c++ list splice用法详解

项目开发过程中,发现stl中的list有splice方法,而且splice方法还挺实用,可以很方便地对链表进行一些连接断开的操作。因此我们下面来详细总结并实测一下splice的几种用法。splice有以上三种函数签名,其中list1表示被拼接的列表,操作以后其结构会发生改变(如果有改变的话)iterator position表示操作开始时list1的迭代器位置list2为将其元素拼接到list1的列表。iterator i是list2中要拼接的迭代器元素。iterator first, iter

2022-06-04 23:22:40 6330

原创 macos gdb调试c++若干问题

1.startup-with-shell’ is enabledgdb在运行run命令的时候,提示如下问题:Because `startup-with-shell’ is enabled, gdb has worked around this bycaching a copy of your shell. The shell used by “run” is now:/Users/wanglei/Library/Caches/gdb/bin/zsh解决方案:1.先退出gdb。2.cd到当前用

2022-05-29 22:09:19 492

原创 csr_matrix详细解读

1.csr_matrix格式看代码过程汇总,发现有用到稀疏矩阵。经过仔细阅读发现以前对csr_matrix的理解不是特别深入,特此再对csr_matrix进行分析解读。python中csr_matrix的说明注释如下class csr_matrix(_cs_matrix): """ Compressed Sparse Row matrix This can be instantiated in several ways: csr_matrix(D)

2022-05-25 17:08:12 2993

原创 约束优化之Lagrange乘子法KKT条件对偶问题最容易理解解读

1.无约束优化的常用方法在讲带约束优化方法之前,我们先简单回顾一下常用的无约束优化方法。1.梯度下降法2.牛顿法/拟牛顿法3.共轭梯度法…上面梯度系列的无约束条件下的最优化,基本解法是根据极值的必要条件一阶导数为0,通过泰勒展开等形式,构造不同数列不断逼近最优解。2.带约束的优化实际情况中,不带约束的场景比较少见,大部分都为带约束的优化问题。看一个大家都用的图:上图中,蓝色的圈圈表示二元函数f(xy)投影在平面上的等高线,而蓝色的箭头则表示函数梯度方向。如果是不带预约条件的优化,我们直接

2022-05-25 11:09:57 801

原创 Apollo planning模块pipeline详细分析

1.apollo整体结构最近利用工作业余时间,抽空学习一下apollo项目的源码。整体来说,apollo的代码量还是挺大,对于入门时间不长的新手来说,逻辑也不是太容易一眼看懂。因此,结合源码以及其他相关理解分析材料,先重点了解了一下apollo中的planning模块也就是规控模块的,把整个planning模块的pipeline大致理清。本文参考的代码均为apollo 7.0版本,apollo项目github地址上有一张图,反应了整个系统的结构2.Planning模块框架planning模块,包含

2022-05-24 11:38:51 2267

空空如也

空空如也

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

TA关注的人

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