- 博客(204)
- 收藏
- 关注
原创 Oracle中Merge Using用法
5.执行效率极高:一次 SQL 请求完成两个逻辑,比 SELECT+INSERT/UPDATE 少一次数据库交互,工业系统海量数据入库必用。3.WHEN MATCHED 和 WHEN NOT MATCHED 分支至少写一个,也可以两个都写(你的业务就是两个都写,最常用);「单条 SQL 完成 插入 + 更新 两个操作」**的业务需求,替代了传统的。2.ON(匹配条件) 是核心判断依据,决定了走「更新」还是「插入」;4.两个分支是互斥的:永远只会执行其中一个,不会同时触发;这种低效且有并发风险的写法。
2026-01-15 16:06:55
416
原创 冷轧工艺原理(一)
冷轧是一种在常温下对金属材料进行塑性加工的工艺,通常在热轧后进行。与热轧相比,冷轧在再结晶温度以下加工,具有更高的尺寸精度和表面质量,但会导致材料硬化和塑性降低。冷轧工艺主要包括酸洗去除氧化皮、多道次轧制、退火消除应力以及精整等步骤。冷轧产品广泛应用于汽车外壳、家电面板等对表面要求高的领域,而热轧产品则适用于建筑结构等对韧性要求较高的场合。冷轧的核心原理是通过塑性变形使金属晶体产生位错,从而提高强度和硬度。
2025-12-27 16:01:55
758
原创 C++入门学习---结构体
本文介绍了C++中结构体的基本概念和使用方法。结构体是用户自定义的复合数据类型,可将不同类型数据组合成整体。文章详细讲解了结构体的定义、初始化方式(包括C++11列表初始化)、结构体数组、指针访问(使用->操作符)、嵌套结构体以及作为函数参数传递(值传递和地址传递)。特别强调了const在结构体中的应用,用于保证数据不变性和安全性。通过示例代码展示了各种用法,如教师-学生嵌套结构、指针访问成员等,帮助读者全面掌握C++结构体的核心特性和应用场景。
2025-12-13 14:56:59
270
原创 C++入门学习---指针
本文介绍了指针的基本概念和使用方法。指针是存储内存地址的变量,通过解引用可以访问指向的内存数据。在32位系统中,指针占4个字节空间。文章还讲解了空指针和野指针的区别及风险,const修饰指针的三种情况,以及指针与数组、函数的结合应用。重点指出地址传递可以修改实参,而值传递不会改变实参。通过代码示例展示了指针的基本操作和注意事项,为理解指针机制提供了实用指导。
2025-12-12 23:08:41
586
原创 SQL刷题---2021年11月每天新用户的次日留存率
3.以表a为主与表b进行连接,过滤条件为同一个用户在表b中的日期比表a中日期多一天,根据此结果计算留存率。1.首先算出每个新用户注册的日期,将其命名为表a。2.计算出每个用户登录的天数,将其命名为表b。
2024-04-16 18:33:25
993
1
原创 LeetCode刷题---销售分析III
首先找出在sales表中筛选出符合指定日期的prioduct_id,将其查询结果命名为t1。与product表进行关联得出最终结果。
2024-04-01 15:18:37
383
原创 LeetCode刷题---游戏玩法分析 IV
2.将Expected表和原始表activity进行关联,求出首次登录后第二天又登录的player_id,将其创建为临时表,命名为result。3.将从Result表中查询出来的用户个数除以原表activity中用户的个数,结果保留两位小数。1.首先查询出每个用户首次登录的第二天,并将其创建为临时表,命名为Expected。
2024-03-27 16:04:03
626
原创 LeetCode刷题---即时食物配送 II
2.与原表连接,求出在用户首次订单表中即时订单的数量的总和。1.首先先求出每个用户首次订单表,将其命名为表t。3.求出每个用户首次订单的数量。4.计算得到最终结果。
2024-03-12 22:31:31
461
原创 LeetCode刷题---路径总和
是一种用于遍历或搜索树或图的算法。在搜索开始时,首先将根节点放入队列中。然后,在每一步中,算法都会检查队列中的第一个节点,并访问其所有尚未访问过的邻居节点。这些邻居节点随后被添加到队列的末尾。然后,算法从队列中删除当前节点,并继续处理队列中的下一个节点。
2024-03-12 16:19:25
423
原创 LeetCode刷题---每月交易I
当state不等于approved时,将state赋值为NULL或0。对分组后的结果求解,使用IF函数进行过滤。1.在对日期截取时,使用了MySQL中的。首先按照日期和国家/地区进行分组。函数,将日期转换为指定格式的日期。2.该题配合MySQL中的。
2024-03-11 20:56:55
764
2
原创 LeetCode刷题---二叉树展开为链表
如果存在左节点,创建辅助节点指向左节点,判断左节点是否有右节点,如果有右节点,则将辅助节点指向右节点,此时进行拼接操作,即将辅助节点的右节点指向当前节点的右节点,当前节点cur的右节点指向当前节点的左节点,且当前节点的左节点指向为Null。判断当前节点是否有左节点,如果不存在左节点,则当前节点向右移一位。结束上述步骤之后,当前节点向右移一位,之后开始重新执行上述步骤。当根节点不为空时,从二叉树根节点开始遍历。
2024-03-07 18:58:19
569
原创 LeetCode刷题---填充每个节点的下一个右侧节点指针 II
如果cur.left不为空时,pre的next节点为cur.left,之后pre指针前进,同理,当cur.right不为空的时候,pre的next指针为cur.right,之后pre前进,最后当前节点cur前进。如果cur前进后为空,则表示需要开始遍历下一层,cur指向dummy的next节点,如果cur仍为空,则循环结束,返回根节点,如果cur不为空,则表示cur已经指向了下一层的第一个节点处,开始该层的遍历。创建辅助指针pre,pre初始指向dummy,之后通过pre来填充当前层的next节点。
2024-03-07 00:57:44
696
1
原创 LeetCode刷题---填充每个节点的下一个右侧节点指针
如图所示,值为2的节点的左子节点的next节点为其右子节点,此时判断2的节点的next节点是否为NULL,如果不为NULL,值为2的节点的next节点为值为3的节点,且值为2的节点的右子节点的next节点为值为3的节点的左子节点。如果值为2的节点的next节点为NULL,则从其下一层的最左边的节点开始重新遍历。因为根节点的next节点为NULL,开始从根节点的下一层的最左边的节点开始遍历。从根节点开始,根节点的左子节点的next节点就指向根节点的右子节点。可以根据每一层来依次遍历。
2024-03-06 22:43:13
492
原创 LeetCode刷题---查询结果的质量和占比
对组内的rating的值使用IF函数进行判断,如果rating=3,则将其标识为0,通过次方法可以找出组内rating的值小于
2024-02-27 22:39:19
610
原创 LeetCode刷题---各赛事的用户注册率
3.最后将上一步求出的count数量除以第一步得出的count数量得出注册率,并按照题中要求对结果进行排序。2.按照contest_id进行分组,求出每个赛事有多少用户参赛。根据题意要求出每个赛事的注册率,首先就要确定有多少参赛用户。
2024-02-27 15:23:58
565
原创 LeetCode刷题---平均售价
首先对Prices表和UnitsSold表进行Left join操作,之后按照购买日期位于定价开始和结束日期之间的条件进行过滤。将price和units的乘积进行累加,将units的值进行累加,之后将两个累加的和相除得到最终结果。按照product_id进行分组,对组内进行计算。
2024-02-27 10:08:15
488
原创 LeetCode刷题---确认率
AVG(c.action=‘confirmed’)表示对action列进行求平均,如果action=‘confirmed’,则返回true,此时在AVG函数中,将其计数为1,如果为false,则将其计数为0.将Signups和Confirmations进行左连接,连接的条件为Signups.user_id=Confirmations.user_id。但是对于值为null的行,AVG在进行计算的时候,则会将其忽略,所以此时使用IFNULL函数将其null值改为0.
2024-02-26 23:38:43
540
原创 LeetCode刷题---从中序与后序遍历序列构造二叉树
传入参数中,左子树在中序遍历中的起始索引为中序遍历中第一个数的索引,终止索引为根节点midRoot-1,左子树在后序遍历中的起始索引为后序遍历中第一个数的索引,终止索引为起始索引+左子树的节点个数(通过中序遍历中根节点的索引-1-中序遍历中左子树的起始索引得出)。传入参数中,右子树在中序遍历中的起始索引为midRoot+1,终止索引为midRight,在后序遍历中的起始索引为左子树在后序遍历中的终止索引+1,终止索引为lastRoot-1。后序遍历中最后一个数为二叉树的根节点。
2024-02-26 22:58:46
580
原创 LeetCode刷题---从前序与中序遍历序列构造二叉树
递归创建右子树,传入参数为先序和中序遍历数组,右子树的起始节点索引=根节点在中序遍历数组中的索引+1和右子树的终止节点索引(首次传入右子树的终止节点索引为数组长度n-1)创建递归方法buildTreeNew(先序遍历数组,中序遍历数组,左子树的起始节点,左子树终止节点索引,右子树的起始节点,右子树终止节点索引)其中左子树的终止索引可以根据 根节点在先序遍历数组中的索引(首次传入为0)+左子树节点的个数=左子树终止节点的索引。首先根据先序遍历找出二叉树的根节点,先序遍历的起始索引为根节点的索引。
2024-02-26 21:02:03
817
原创 LeetCode刷题---至少有5名直接下属的经理
首先将原表(经理表manager)与自身(下属表emp)进行连接,连接条件为manager.id=emp.manager,之后按经理表中的id进行分组,统计每个经理的下属员工的个数,将统计的结果命名为表t1。从t1中取出count>=5的经理id,将查询的结果命名为表t2。找出Employee表中下属员工至少有5个的经理名称。
2024-02-22 17:39:57
516
原创 LeetCode刷题---对称二叉树
4.分别递归遍历左子树的左子树和右子树的右子树是否对称,左子树的右子树和右子树的左子树是否对称,如果都对称,则返回true。3.如果左节点的值和右节点的值不相等时,返回false。2.如果左节点和右节点只有一个为空时,返回false。首先对二叉树进行判空,如果根节点为空,则返回true。1.如果左节点和右节点同时为空,则返回true。接下来对当前节点的左节点和右节点进行判断。
2024-02-22 16:13:46
414
原创 LeetCode刷题---反转二叉树
创建临时节点,将右节点赋值给临时节点,将左节点赋值给右节点,再将临时节点赋值给左节点。对二叉树进行反转,如果根节点为空,则返回。
2024-02-22 15:02:36
583
原创 LeetCode刷题---相同的树
找出递归结束条件,如果两个树满足条件一个树或者其子树为空,而另一个树或者其子树不为空,两个树或者其子树的值不等,则返回false。使用递归的方法对两个树进行判断,如果两个的树的根或者其左子树和右子树的值都相等,则返回true。首先对两个树进行空值判断,如果两个树都为空,则返回true。
2024-02-21 10:59:55
557
原创 LeetCode刷题---LRU缓存
如果哈希表中已经存储该节点,则需要对该节点的数据进行更新,首先根据key从哈希表中取出该节点,再对节点中的value重新赋值,之后根据LRU算法将该节点从链表中删除,再添加到链表表头的位置。在写put方法的时候,如果哈希表中未存储该节点,则创建一个新的节点,节点中key和value分别为要添加的键和值,之后将key和新创建的节点添加到哈希表中,在将新的节点添加到链表头部。在写get方法来获取某节点的时候,如果哈希表中存储了该节点,根据LRU算法,则先将该节点删除,再将该节点添加到链表中。
2024-02-21 09:40:45
2499
原创 SparkStreaming---DStream
用户自定义数据源需要继承 Receiver,并实现 onStart、onStop 方法来自定义数据源采集。//最初启动的时候,调用该方法,读数据并将数据发送给 Sparkreceive()}.start()///读数据并将数据发送给 Spark//创建Socket//创建变量用于接收端口穿过来的数据//创建BufferedReader用于读取端口传来的数据//读取数据//当 receiver 没有关闭并且输入数据不为空while(!= null){//循环发送数据给 Spark。
2024-02-01 09:50:33
1499
原创 SparkStreaming---入门
流处理和批处理是两种不同的数据处理方式,它们在处理数据的方式和特点上有所不同。流处理(Stream Processing)是一种数据处理方式,它实时地处理数据流,即将源源不断的数据按照特定的规则进行实时处理。批处理(Batch Processing)是一种数据处理方式,它将一段时间内的数据收集起来,然后一次性地进行处理。
2024-01-31 15:59:02
1717
原创 LeetCode刷题---二叉树的最大深度
如果有子节点,则先将当前节点的左节点作为参数传入方法中,之后在将当前节点的右节点作为参数传入方法中。使用先序遍历的方法来找出二叉树的最大深度,即先访问根节点,在访问左节点,之后是右节点。对于任意一个节点,其深度为其左子树深度和右子树深度的最大值加1。二叉树的最大深度是从根节点到最远叶子节点的最长路径上的节点数。首先判断当前节点是否还有子节点,如果没有则结束递归,返回0。最大高度是从根节点到最远叶子节点的最长路径的长度。最后对取出的左右节点深度的最大值+1返回即可。使用递归的方法来解决该题。
2024-01-27 10:19:00
522
原创 LeetCode刷题---学生们参加各科测试的次数
之后将学生表和科目表的笛卡尔积与grouped表进行左外连接,连接条件为学生id和科目(这样保证在学生id不在考试表中的学生也可以被统计上),结果按照学生id,姓名,科目,进行分组。对考试表Examinations表统计学生参加考试的次数,按照学生id和考试科目进行分组,使用count函数统计次数,起别名为grouped表。根据题意要实现每个学生参加每个科目考试的次数,如果没有参加,则统计次数为0。首先将学生表和科目表进行笛卡尔积。
2024-01-26 16:11:50
485
原创 LeetCode刷题---每台机器的进程平均运行时间
使用case—when函数修改,如果状态为start,则将其时间值变为负数,如果状态为end,则保持不变。先按照机器machine_id进行分组,然后求每台机器内的平均运行时间。使用sum函数对同一台机器内所有进程的运行时间进行求和。使用上一步的累加值除以同一台机器内进程的个数得到平均值。
2024-01-25 23:27:54
488
原创 LeetCode刷题---分隔链表
此时将right指向节点的下一个节点指向空,right指向节点即为合并后链表的尾节点,left的下一个节点指向r初始节点的下一个节点。如果当前节点的val值大于等于x,right指向节点的下一个节点为当前节点cur,right前进一个节点。如果当前节点的val值小于x,left指向节点的下一个节点为当前节点cur,left前进一个节点。创建链表r用来表示大于等于给定值x的链表,创建辅助链表right指向r的初始节点。创建链表l用来表示小于给定值x的链表,创建辅助链表left指向l的初始节点。
2024-01-25 22:43:06
544
原创 LeetCode刷题---旋转链表
首先创建辅助节点cur遍历指向链表最后一个节点,并将cur的下一个节点指向head头节点,形成闭环,并且在遍历的过程中计算链表的长度n。n-k表示当前节点(当前节点指向未反转节点的最后一个节点)到反转后的链表的最后一个节点的位置。当cur前进了n-k个节点后,即cur已经走到了反转后链表的最后一个节点。再创建一个新的节点指向反转后链表的头节点,再将cur的下一个节点指向空。为了防止k>n的情况,需要对n-k的结果对n求余。
2024-01-25 21:45:29
594
原创 LeetCode刷题---删除排序链表中的重复元素 II
4.如果当前节点cur的下一个节点和下下一个节点的val值相等,则删除cur的下一个节点,使得cur的下一个节点指向cur的下下个节点。3.开始遍历链表,如果当前节点cur的下一个节点和下下一个节点都不为空的情况下,对cur的下一个节点和下下一个节点的值进行判断。5.重复第4步,直至cur的下一个节点和下下一个节点的val值不相等,此时cur节点前进。1.首先定义虚拟节点dummy,dummy的下一个节点指向head节点。2.定义辅助节点cur指向dummy节点。
2024-01-24 22:49:15
640
2
原创 SparkSql---RDD DataFrame DataSet
DataSet 是 Spark 1.6 中添加的一个新抽象,是 DataFrame的一个扩展。它提供了 RDD 的优势(强类型,使用强大的 lambda 函数的能力)以及 SparkSQL 优化执行引擎的优点。DataFrame 与 RDD 的主要区别在于,RDD只关心数据,而DataFrame中也包含数据描述信息(数据的元数据)。DataFrame 其实就是 DataSet 的一个特例 ,因为DataFrame中每行的类型都是Row。定义一个名为user的json文件,文件中的数据如下。
2024-01-24 09:50:01
2021
原创 LeetCode刷题---最长交替子数组
如果上述条件不符合,对快指针进行判断,如果nums[fast]等于nums[fast-1]+1,则slow=fast,如果nums[fast]不等于nums[fast-1]+1,则slow=fast-1。根据题意得如果快指针的索引为奇数,则nums[fast]=nums[slow]+1,偶数则,nums[fast]==nums[slow]快指针继续向前遍历,每次都与之前长度比较,取最大值。遍历快指针从1遍历到nums.length-1。首先慢指针指向0,快指针指向1。该题使用双指针的思想来解决。
2024-01-23 14:59:12
464
原创 LeetCode刷题---删除链表的倒数第 n 个结点
首先让快指针fast先到第n+1个节点,然后fast指针和slow指针一起走,知道fast指针指向空。让slow指针的下一个节点指向slow指针的下一个节点的下一个节点来删除倒数第n个节点。定义快指针fast,慢指针slow,链表中删除第n个节点的前提是要找第n+1个节点。此时slow指针指向了倒数第n个节点的前一个节点,执行删除操作。使用双指针的思想来解决该题。
2024-01-23 09:30:25
659
原创 LeetCode刷题---反转链表II
next:永远指向 curr 的下一个节点,循环过程中,curr 变化以后 next 会变化;pre:永远指向待反转区域的第一个节点 left 的前一个节点,在循环过程中不变。在需要反转的区间里,每遍历到一个节点,让这个新节点来到反转部分的起始位置。执行操作 ①:把 curr 的下一个节点指向 next 的下一个节点;执行操作 ②:把next 的下一个节点指向 pre 的下一个节点;执行操作 ③:把 pre 的下一个节点指向 next。先将 curr 的下一个节点记录为 next;使用了三指针的思想。
2024-01-16 16:09:56
553
原创 LeetCode刷题---反转链表
此时pre节点前进到cur节点,cur节点前进到tmp节点,直至cur节点为空,此时pre节点为头节点。开始遍历链表,创建临时节点tmp指向cur的下一个节点,之后将cur的下一个节点指向pre节点。首先定义pre指针,初始化为空,和cur指针,初始化为头节点。使用双指针+临时指针的方法来解决该问题。将pre节点返回即可。
2024-01-16 14:49:22
445
原创 LeetCode刷题---随机链表的复制
开始遍历原链表,遍历到每个节点的时候,就去查哈希表,取出新链表的节点,将原链表当前节点的next和random节点都复制到新链表的节点中去。首先对原链表遍历,将原链表每个节点和新链表每个节点形成对应关系,存入到哈希表中,key为原链表的节点,value为新链表的节点。之后重置辅助链表指向原链表头节点。使用哈希表来解决该问题。因为题中要求是深拷贝。
2024-01-16 14:36:35
568
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅