粉丝2413获赞1762

嗯,今天给大家分享如何创建 k 股脚本,就说我这里是自己做的一个啊,笔记实验的话我们看一下啊,笔记里面就说我们是在 call 里面根据,嗯, 在在斐尔文件里面下面啊,根据自己的需求啊创建一个啊 cap 或者 capd 的 一个啊工程,嗯,之后我们在呃 test 模块下面, test setup 下面啊, test 啊 emirates 下面去创建一个 summer 节点。 哎,我们看一下要是这边是做了步骤的就说啊 test 啊,之后就是在 test setup 下面啊,之后我们在那个 emirates 下面去创建一个擦面节点, 嗯,之后我们配置擦面节点的参数,嗯,我们看一下那个演示过程啊,之后就在哼, 创建,我们就说所需的工程啊,我们工程的话就要看 doot, 对 吧?之后再非要文件下面去添加擦面管就是节点啊,擦面管理节点之后点击, ok, 好, 这里我们的擦面节点就啊相关配置就,嗯,之后我们继续配置下面的内容,嗯,是在 爸,呃,这里面的内容的话就是啊测试报告对吧?啊,如果说你不勾选就说你不勾选呢?他不会创建测试报告就说啊,下面的话就是一个啊测试报告的李佳就说我 当前执行的报告不会覆盖上一个测试报告啊,打打个对勾的话就会,嗯,每次执行的报告都不一样,他会以名字又进行更更改。 嗯,之后,嗯,就是在餐位节点这里面可以,呃,这个魔管里面可以创建那个点看文件和点 d i l 文件。呃,点 d i l 文件的话,呃,是在, 嗯,也是在这里面创建的。做创建完之后双击这个点看, 创建完了之后点双击这个点 dot, 对 吧?它就把这个相关的这个插面文件,呃,配置好了就会弹出来的。 之后我们去呃编辑脚本,对吧?这是添加那个,呃点看文件又是开过编辑的脚本文件,嗯,之后我们去,嗯, 通过擦面节点去呃管理我们的测试 case 啊的话我们如何打开擦面节点呢?看一下 就是 edit, 对 吧? case mode, 这个是一个打开窗面管理节点的一个管理测试用力的那个窗面文件啊,下面一个是,哎,一个就是 上面的话打开那个看 d o t 点看文件的就是一个开过编辑文件,嗯,大概等就这样的啊。下面的话就是我如何将那些文件性分类分类存放啊等等相关内容就是这样的。

今天要学的算法是最小生成数。最小生成数简单来说就是 在一个带权途中找出一棵树,连接所有节点, 同时让边的总全值最小。常用的算法有 crosscode 和 print。 今天代码里用的是 crosscode 算法,并查极是一种数据结构,它可以快速判断两个节点是否属于同一个集合, 主要用来处理节点之间的连通信问题。核心操作有两个,查找范围和合并优先。先看这个结构体, h 里面有 u、 v、 w 三个变量, 分别代表边的两个端点和全值 数组开了一百万零五的大小,用来存储所有的边。 c、 n、 p 函数是缩的,需要的比较函数按照全集从小到大牌, 这是为了后面用 crosscode 算法找最小生成数做准备。 crosscode 的 核心思路就是每次都选全值最小的边,只要不会形成环,就它的函数是并查极的。查找操作里面做了路径压缩, 用来判断两个节点是否在同一个集合里。路径压缩的作用。直接把节点脚像跟节点主函数里先输入 a, 直接购买商品下。接下来有一个关键,接了一个虚拟的零号节点, 把所有商品节点都和它连起来。 编的全集是 a, 这样做是为了把购买商品的费用也转化成零,如果不这样做,直接购买这个选项就没法和花费放在一起比较。接着用双重循环, c 是 一个 b 乘 b, j, j 表示把第二种商品制作成 d, j 种商品的周过, c 不 等于零, 就把这条边加到数组里, 这样就构建好了整个图。注意这里艾和镇都是从 e 到 b, 代表 b 种商品之间的制作关系。边都存好后,用缩排序 把所有边按全职从小到大排好,然后出示画并查集每个节点的不节点指向自己。一开始所有节点都是独立的,最后便利所有对每条边用 find 查找两个端点所在的集合。 如果两个端点不在同一个集合里,说明这条边加入后符合最小星乘数的要求,就把它的全集加到 n 四里, 然后用并查集。如果两个端点已经在同一个群,说明这条边加入后会形成直接跳过,最终输出的 n 就是 最小星乘数的全值,也就是买齐所有商品需要的最小花费。

通过这期视频,你将学会创建链表的新节点以及插入节点。我们来看这个题啊,其实题目呢,我们就不读了哈,大致我跟你说下,意思就是说让我们给这样一个函数啊,编辑这个函数的代码,他要实现, 呃,我们输入他的系数以及他的指数,然后如果说你输的这两个都是零,零的时候啊,他表示输入结束。好,最后呢,这个什么什么我就不说了哈,我就说这个函数要怎么去实现 哎,首先呢,它要输入两个东西啊,第一个呢是系数,第二个是指数,那我们定义这里 float c 以及 int e 分 表示它的系数和指数。这里为什么是 float 呢啊?因为它这个样例里面,你看啊, 这里它 type def i struct not 定一个结构体啊,这个 float c e o f 表示它的呃系数,应该是一个复变型的好,然后指数呢,应该是一个 int 型的,所以我们这里定义的时候你就要遵循这个啊,好,这里呢定一个 p t r 啊,一个头指针,我们把这个指指上一个空, 就是 n u l l。 好, 接下来呢,其,其实这个头指等我们建立之后啊,那你要去创建新的节点,我们要这里用一个 while 循环,死循环, 呃,输入这个 c 和 e, 也就是系数和指数,那么要判断一下,如果说这个 c 等于零,好, 以及这个与这个呃, e 它也等于零啊,那我们就 break 表示这个循环跳出啊,那如果说不满足呢?那说明你输入的并不是两个零嘛,那我们就不跳出好,但如果说你满足这个两个都不是零的这个条件,那么我们现在就创建新的节点, 这个念表的节点我们怎么创建呢?你这里 p、 d, r 表示我们是它这里定义的嘛?这个好,定义到这个矩阵结构体啊,那它等于一个我们名字是 new node。 好, 等于这里我们强制把后面这个开辟的, 呃内存地址啊,转换成时针,转成时针形式的。呃, c, a, l、 o, k 表示我们开辟一个新的空间。好,开辟一个,这里 size of, node 表示开辟要多少个字节啊?我们就 size of, 就是 算一下这个类类型的它的呃字节大小吧。 好,然后我们创建好了之后呢,就是去赋值成员 numero 的, 它的 c、 o、 f, 也就是系这个这个这个这个,呃系数成员哈,我们让它等于这里的 c, 就是 你输入的好,它的这个 e、 x、 p 呢,就是 指数好,它就等于这里的 e, 接下来呢,我们就要把这个节点给它往列表里面插入,是吧?它说从头插入,那么我们怎么把这个节点给它插入进去呢? 首先你原先不是定义了一个空空直角吗?就是头节点,对吧?好,这个就是 hand。 好, 接下来呢,我们让 new node 的 next 等于 hand, 这个是你新创建的,它的 next 等于 hand。 好, 那然后呢,这个 hand 啊,它就等于 new node, 表示把这个 hand 我 们所指向来指向这个新的节点。那你再创建下一个的时候,其实是一样的哈,你先让这个 new node 的 next 来去等于 hand 啊, hand 它指向的不就是这个节点吗?对不对?就指向的是这个节点。好,那它其实实际上啊,就应该是连接到这儿,那然后这个 hand 等于 newle 的, 就用 hand 啊,它就去指向我们新创建的这个节点,就一直循环下去,那就构成了一一条链了。好,大致就是这样子的哈。

hello, 小 伙伴们,大家好,我是陈星,在上期视频呢,我们实现了一个回文串的一个算法,本期视频呢,我们继续来看数组,本期视频我们要看的是制服串处理函数。 制服串处理函数呢,有很多啊,我们就来多看几个,好吧, 嗯,第一个我们就来看 s t r l e 眼影就是我们最熟悉的 steven 自复式处理函数呢,我们都要加一个头文件,头文件是什么?这个其实我们在数据类型里面就讲过了,对不对? string 点 h 第一个我们要讲的是 string 啊, string 之前也讲过,是不是它呢?就是什么测字母串长度的函数,对不对?它呢?就是测 字母串长度的函数,对不对? 它呢?其一般啊,形式为为什么?这已经很很熟悉了。 sine 啊,还有什么呢?四幅数组,四幅数组, 它呢?它是啊,测试四幅串长度 函数的值啊,它呢,就是为四负串,四负串 中的实际 它呢?是不?呃,不包括 斜杠零, ok, 这个就不多说了吧。好吧,然后呢,我们学这个自控串处理函数,我们接下来要做的一件事就是 用 c 元去干嘛?去实现这些自控串处理函数,我们就学一个实现一个,好吧,一个一个来 实线,我们一个一个往上加实线字母串库里函数啊, 第一个注意了,首先我们啊先包含一下多念, s t, d, l, d, h include s t s g s t i g 点 h include。 我 们还得加一个图片, s t d, l a d 后面我们会用的先写着啊, int 面 int a r g c t r 七星 a r g v 瑞特林首先我们来使用一下这个程序,首先我们定一个 t r 星 s t r 一 等于 hello word, 然后 int s t r 一 位 string 了 s t r 一 打印出这个字母上的长度, s t r 一 n 等于哎,正好解杠。 n s t r 一 n g c c test 十四点 d, ok, 等于十一,对不对?接下来我们要做的事情是什么呢?就是 my stream, 我 们可以先去看一下面一下 stream 的 一个群形,我们这里面是用 linux 下载那个 vs code, 所以 说这边可以直接面啊,如果你们是 windows 下面的 vs code, 面不了, 在这边 set 走,它的原型是这个,主要我们得照它的一个参数 i 矩阵。首先呢,我们四五扇肯定是不能为空,对不对? 如果等于空,那我们就直接结束好吧,或者我们直接 e x i t, 我 们直接结束这个程序, e x i t 呢?它所需要的头文件就是这个 s t d l i b d s ok, 然后我们进一个 l s 杠 t, 哦 s s 杠 t 我 们直接解决,讲就是无符号的整形对不对? a 杠 t 对 不对? while e n s 我 们不知道循环的次,那就不等于写杠零, 然后呢,我们的 s 就 丢点干嘛? s 加加 n 加加啊,最后 return, 嗯, ok, 我 们来检验一下, 这是之前的结果, 看见没? s t r e n 是 出问题。 while 星 s 不 等于斜杠零,然后我们 s 就 加加,然后楞也加加, 我们这个没有出值啊,出值我们忘记是不是出值了,没有出值的话它就是一个随机值, ok, 没问题了,对不对?呃,这个,这个小毛病大家得注意啊。 ok, 然后呢,这个就实现了 my string, ok, 我 们去看下一个自复式处理函数。下一个自复式处理函数呢?我们来看 str 拷贝 copy copy, 这个是自复式复制函数,你听这个呃,名字念复制嘛? copy 复制 其一般啊认为。为什么呢? s t r c p y copy 字母数组一,然后后面是一个字母串,二字母串, 而且也可以是字母数组名也可以是一个字母串,长度都可以 习,作用是将啊自不算拷贝到自无数组一种, 这是拷贝吗?但是我们得注意一件事,就是什么长度自无数组一 呃的长度啊,它不应该小于啊,这不串。 呃,然后呢,我们这 three copy, 还有个 three n copy n c p 完 这个函数就是什么?就是呀,字母串中前面 n 个 字母拷贝到字母数字一中, 还是那句话,复制这个个数 n 不 能多于原有的字母。这个呢,就是最后看复制函数 它们的形式,我们得知道这是它的一个形式啊,然后这是它的一个形式,然后我们来实现,分别来实现一下均 copy, 还有 s g n copy。 首先我们来用一下啊,拷贝嘛,就比如我们现在有一个呃另一个 t 二空,又另一个 s t 二二空不了, 输出为零。然后呢,现在我们要直接呃 print 的 f, 嗯,还是写 也规整一点吧。 here s t r c 等于 s t r c a t, 我 们就将什么 s t 让我们拷贝到 s t r 二中呢?就将哎 china 拷贝进去,好吧,然后我们 print f s t r 三等于 f o s 一个 n, 我 们来看一下效果, 怎么了怎么了怎么了? 呃,我们这样吧, s t r 三七二星啊,这边少了个星号,上面那个其实没关系,是下面少了个星,出现了什么断错误, 我们还是要写上面那个分配,写成整数的形式,它得分配这个我们在寻找整数的时候,我们在那个,好吧,这个是什么? 呃, s t 啊?值, 附一个值吧。 ok, 看见没? s t r 那 等于 china, 这里面我们不能为空了。 然后接下来我们要干嘛?实现 my s t r catch 一 样的,我们面一下面 s t r catch, 我 们把它原型找到, 把这边改成白。 ok, 首先我们得检验一件事,就是 disk 和 s r c 不 能为空。 disk if disk 等于 not 啊,或者 s r c 等于 not, 我 们又干什么呢? 首先我们输出一个 error, 提醒一下正确错了,然后就点退出 这边如果大家不知道右键级的话,我们建议大家加一个括号,多加一个括号。 ok, 我 们来写。首先呢,我们就是将这个 s r c 拷贝到 disk 里面嘛,所以说呢,我们直接 y, 你 只要 s r c 啊, 星 s r c 你 知道不等于不等于弦杠零,我们就直接拷贝过去,星 d st 就 等于星 s r c, 然后 s r c 加加不等于 d st, 最后别忘了星 d st 给它一个。 但这边有一个问题,就是此时你返回什么 return date, 但是你此时的这个 date, 它这个指数已经移动到最后一个那个什么 那个字不上去了,所以说你 return 到最后就是没有结果了。就比如你现在有一个, 你现在去叫一个人去银行取钱, 你得让他去取钱,对不对?你得就是你让他去银行,你不能。最后你得告诉他钱取完之后送到哪,对不对?你得送到你自己的, 你不能还跑到银行那边,对,取完钱就去银行了,对不对? 你不能跟他说什么,你现在在银银行,你得告诉他你在哪,你得告诉他你现在就是,你得告诉他你家的具体位置在哪,取完钱之后把钱送到哪?送到你家的具体位置,对不对? 所以说我们现在这边要有一个 t, 这样啊,这样编 temp, 所以 把它 base, 然后呢 return, 我 们来编辑运行,这是之前的结果, 看见没?是不是没有问题?这呢就是 s t r cat, my s t r cat 的 实现方法。 然后呢,还有一个就是 my s t r n cat, 我 们试着把它剪掉吧,就不拖到下集视频了。 t r 什么 s t r 四, s t r n c 怎么还用 s t r 二,然后还是 china 吗? d h 哎,但是这次拷贝就拷贝两次, 下面我们来注写掉,以防万一有那个漏,往这边改成四, 那里面还是拷贝了两个 c h, 对 不对?然后呢,我们现在就要接下来就要来实现这个 s d r cat s d r n cat, 它其实就多了一个 n 嘛,下面也有,下面也有解释,你看下面人家也教你如何来实现了,对不对?下面都有的,不干它的话, 其实前面都一样,就是你得判断,就我们直接拷贝粘贴,然后你找一个 t 对 羊,对不对? 一样的 不一样。这边这边呢要有一个循环次数拨 s 杠 t i 等于零, i 呢?你得小于 n 对 不对? a 小 于 n, 且什么 s r c 不 能等于且杠零对不对?然后 a 加加, 然后我们再进来这边我建议大家也加一个括号, ok, 然后呢,最后这边还有个 return tempest 等于零, 但是这边还有个不一样的地方,就是过最后举几个零,对不对?嗯,点一下,第二 这个得放进去,然后这次的为什么呢?因为有些就是什么,就比如,呃,你有些那个什么 前面,就比如前面是个空嘛,你 s t r 十这边都是空,然后你把这个 c h 拷贝进去,后面还有八个字母什么呢?都是斜杠零,对不对? 有 cs 杠 t, 我 们放外面吧,在下面识别不出来。 cs 杠 t, 来点一下,这是之前的, 呃,这边是星星星,嗯,星星本身是地址, ok, 看见没?结果是不是一样的 c h, 那这个地方就是什么?就是刚刚也说了,就是你这个,你要依次让后面都复制斜杠零才行, 对不对?你 s t r, 这不是你只复制了两个嘛,你两个还有八个呢?八个都是斜杠零,你得依次把后面都补上,你不能只复制一个斜杠零。嗯,类似的再往后加,然后 return 这个 time, ok, 然后呢,以上呢就是 s t r n k 的, 还有 s t r n, 还有 s t r n 呢? 这边的一个数据上处理函数的实现,看下这是什么? s p r n 斜,对不对? ok, 本期视频呢就到这里,小伙伴有什么问题的话可以在评论区留言,或者进入主页的一个。

hello, 小 伙伴们大家好,我是陈星,在上期视频呢,我们已经将指真的剩余的知识都看完了,本期视频呢,我们就接着往后看,看什么呢?看函数, 函数,其实我们从第一期视频我们其实就开始接触函数,所以说大家对函数肯定不陌生了,嗯,这边呢,就系统的把函数一些知识点什么东西过一遍就好, 然后后面我们就去讲细讲关键字啊,关键字讲完还有什么?还有文件,文件,然后还有预处理,预处理完了之后呢,我们就把就是讲一些 c 语言的进阶的句子, 有时间就讲,没时间就算了。好吧,因为我也马上要开学了,好吧,还有六天五天,所以说得抓紧啊。 ok, 我 们来看函数的基础语法, 第一个呢,函数的三要素,哪三要素?函数名,函数名, 还有什么函数形态, 还有什么?函数返回值,对不对?第二个,函数的使用形式, 首先我们得声明一个函数,函数的声明呢,就是注意什么呢?在调用函数前啊, 注意声明函数 又得知道啊函数的定义, 那我们函数调用 对不对?首先我们得看函数的分名,第一个呢就是函数名, 看什么函数的返回值,看什么函数那个形象的类型,形象的类型变量名可以不提供, 就是什么不分配 内存空间对不对?函数的定义 也算把函数名二是把函数返回值 形态的类型及变量名, 这一个叫函数调用,这叫什么函数名? 还有什么实参的变量 零或者实参的 d 对 不对? ok, 接下来有个这样的东西,就是函数 函数名呢,你肯定也命名,命名有规范的命名规范 啊,没有规范啊,命名叫要什么?命名要体现四注射器, 你不能什么函数都叫什么? 不能每一个函数都叫那个什么 function, function function, 对 不对?你肯定要改一下它的那个字母,就比如说你写那个,呃,之前写那个叫什么? 写输出那个素数,我们用的是 prime, 对 不对?字?注四, 注四 c, 提高代码可读性 代码可读性,现在我们写这个你得要提高代码可读性,一般都是什么动词 加名词。 第二个函数形参,函数形参呢?就是什么?呃,传什么类型,要用什么类型的变量来接传, 这样吧,传什么类型要用什么类型的 b n 基, 对不对?就比如 a 啊,住点 还有什么 a a, 那 就你可以什么 int a 符号应该数字,对吧?是什么? a a a 等于什么? int a a, 对 不对?你别到最后这个,你传什么类型都不知道用什么这个传的这个类型都不知道用什么类型编来。接 下一个就是函数的返回值,函数的返回值,第一个呢就是 return 零 减数当减函数,还有就是 e x i t 一, 对不对? return 零,前面有个零 x i t 一 就是,这就是什么?结束,整个结束,整个以上呢就是函数的一些基础语法。第二个我们要看的呢是什么 函数的注意事项, 一个就是传值和传指, 传指值 不要误认为 i 转 e。 第一个函数的形差 转值 v s 转值 转 d 值。 就比如我们可以举个例子,例如 调用函数实现,我们写一个代码,调用函数实现交换两个数的, 对不对? 这个什么时差和行差到底是什么呢?大家应该知道 名签和形签,这个形签,嗯,不知道你们大家知不知道?嗯, 名签,就比如嗯, in 的 方式,这儿 c, n, a 形签就是什么 方是 c, 然后这里面 a 这个里面是实参,这个 a 是 实参,这个里面的 a 是 形参,这个这个里面是形参。 然后接下来我们要写一个这样函数,实现交换两个数的结果, ok, 我 们来上代码, 怎么写呢?嗯,首先我们得定义一个函数, 不用,我们 int a 等于五, int b 等于二,然后 three n a 等于四,根号 d, b 等于根号 a, b, 然后调用我们的函数, 嗯, swift, 然后再打印我们的群, 然后我们要做的什么呢?就是写这个函数,这个函数呢,我们就 void 空 swift, int int, ok, 我 们可以来试一下。嗯,我们就用第三个变量吧。 in the temp 等于 a, a 等于 b, b temp, ok, 我 们来看一下能不能实现啊? g, a, c 这样子的二十五点, c 看见没? a 等于五, b 点二, a 等于五, b 点二,没有变啊,看见没? 它这个是没有变的。为什么没有变?你一定要分清啊,它传的什么?它传的是什么东西?它传的是一个纸样,所以说它不会变的,对不对? 我们得传纸的编号的地址才可以修改这个纸,对不对? 我们得查他的地址才行,是不是?所以说这样是不行的, 这个不行,嗯,这个就典型的那个, 这个是不行的, 不行, 因为这个传的是纸,传的是纸,我们得传地址才行。如何来做呢? insert 新 a, 然后呢? insert 新 b, insert 新 tab, 那 这边调用键调用什么? 举例者, a, 呃,不对,不对,对不对? a 上面还有这个,然后这边就就应该什么 e 的, 对不对?我们来看一下结果, b 等于新 cap, 新,新准时新, a 前上的那个新, ok, 看一下。 然后呀, int 型 temp, 什么 int 型 temp 型有新 a, ok, 看见没? a 等于五, b 等于二,这样就写对,所以说呢,船值和船只一定要分清, 这呢,它传的才是地址,这是可行的, 可行,知道吧?所以说我们得知道它传值还是传值,传值呢?它传的是时差的一个变量名,传地址呢?又得传时差的那个一个, 呃,变量的一个地址,知道吧?所以说这个大家得分清, ok, 嗯,这个就是。以上就是本期内容视频,下期视频我们再来做整理。 这边大家都也知道函数的三要素是哪三要素?函数名函数,现在函数返回值,对不对?这个也知道, 这个产量也得知道,反位置,这两个也得知道,型单和型单得区分, ok, 本期视频呢,就到这里,小伙伴有什么问题的话可以在评论区留言,或者点我主页的一个群。

为什么你的高阶函数得不到满分?因为你没有刷到我这条视频里的八大思考方法,今天我挑战十分钟,教你丝滑求解函数定义域和值域问题。求定义域的话,给你分了两种类型啊,一种是常规型,一种是抽象型。什么叫常规型呢?就一般情况下,函数的解析式也是给你的,你去求它的这个这个天然的定义域啊,我们叫 自然定义域或者天然定义域啊,也就是说使得解解式有意义的全体实数的集合,这个就我默认情况下是这样, 对吧?那这种情况下肯定解析式是给你的,那既然表达式是明确给你的,那它就是常规的,那一般会给你的解析式就三类啊,一般大致逃不出这三类叫做什么呢?整式、分式、根式。在整式里你要注意的就是出现 x 等于零这种东西, 你要知道零次方下面的数不能取零,这是它的天然定义,所以整式里你要注意的是这种,其他的没什么限制。分式你当然注意的就是什么分母,一出现分数线,你就是分母不为零啊,那就是默认的,对吧?所以这个地方分式也好说,那么根式的话 要区分你,比如说是偶次根式的话,要注意非负,那么基次根式的话是实数啊,所以主要要注意的是偶次根式就可以了,基次根式其实没限制。好吧,那这个是常规型,给了解析式就怎么办 啊?要求这个 f、 x 啊,等于这坨东西它的定义域,所以这就是我们说的常规型的,对吧?就是表达式给你了,你只需要按照一个有序的方式,把所有该满足的条件列出来,解不等式组,你总能做成件事。比如说啊,要求他的定义域, 你按照整式分式根式去列,比如说这里你看你先有一个分数线,那你分数线下的整体,你直接就写了这个整体一定是不等于零,所以第一个式子你是根据分数线列的,那还有要满足什么式子呢?第二个,你还看到了什么?还看到根号,所以第二个式子是根据根号列的,叫做偶次根号下啊,这个东西要大于等于零, 然后这里分式根式就列好了,列好了,你就去解就行了,对不对?那比如上下你连立一下,其实你就知道下面这个等号其实取不到的,所以它会得到 x 的 绝对值,是大 二的啊。继续往后解,就是 x 大 于二或 x 小 于负二大于二或小于负二,就是 d 选项,所以这种类型,按照整式分式根式。主要你要注意的就是把你的不等式要不重不漏的啊,以一种有序的逻辑列出来,那基本上你看这个式子就可以从外看到内,先看到分数线,你先列分数线啊的约束条件,再看到根号,你就列根号的约束条件。 其实要强调这点东西,抽象型就说哦,没有给出解式的,它不能常规方法求解。一般有下面这几种情况,比如说第一种,它叫做已知 y 等于 f g x 的 定义域,所以 y 等于 f g x 这样的东西,它的定义域是什么?它的定义域肯定是其中 x 的 取值,所以你知道的,你看啊,知道的是这个 x, 然后要求什么?要求的是 f x 的 定义,也就是要求对应关系, f 其实就是 f 括号,你要求的其实就是 f 括号里的范围。那其实这样的问题本质上是什么东西啊?是已知 前面的这样的一个 x 的 范围,因为你要的是 f 后面括号里面跟的整体的范围,所以你在前一个去看 f 后面的括号,不就是这个吗? 对不对?所以它其实就是变成了已知 x 的 范围,要求 g x 的 范围。换句话说,说的再透一点,就是已知 x 的 范围求 g x 的 值域, 所以这种抽象型,它其实就是一个求值域的问题,它又是旧的你做过的熟悉的问题,只不过在概念上你要过这一部分,你要能够理解过去。 好吧,那我们一个一个来看,就是在理解这件事。比如第二个,他说什么呢?他说已知 y 等于 f x 的 定义域,所以什么叫已知 f x 的 定义域?他就是知道 f 括号的范围,你知道的是 f 括号里的东西的范围。好要求的是什么呢?要求的是 y 等于 f 啊,括号 g x 的 定义,所以你要求的是后面一个函数里面它的 x 能够取到什么值,但是你已知的是什么?你看啊,还是这个问题,就是你要知道你前面和后面有什么联系,你前一个函数是 f x, 后一个函数是 f g x, 它的联系就是中间都有这个 f 啊,它的联系就是都有这个 f, 其实就这点事。那你要求这个 f g x 的 定义域,就要求其中 x 的 范围,但你知道的是什么呢?你知道的是 f 后面整个括号,他应该在什么范围啊?因为已知的是 f 的 定义域嘛,所以其实这个问题他就变成了已知什么呢?蓝色的这个括号的范围,你知道对不对?其实就是已知 g x 应该在什么范围里啊?已知 g x 的 范围,然后求什么呢?哦,去反求 x 的 范围,所以大家看得出来上下的联系吧,他其实你看上面就是已知 x, 求 g x 的 范围,其实他就是 正问题和反问题,对不对?如果你认为上面一个是正问题,那下面就是他的反问题,但两种问题之间其实没差多少,都是有联系的,他这个概念就像以前你学三角形的面积一样,对吧?你知道底和高,能够求三角形的面积,那他对应的一个反问题可以是已知三角形的底和面积啊。去反求三角形的高, 其实就是这个意思,你注意到联系啊,你就能够知道其中的几个求剩下的某一个或者某几个,它就这点东西。好吧,包括你看还有第三类啊。第三类什么东西呢?它说已知 y 等于 f h x 的 定义,那也也就是说已知前一个函数里面的 x 的 范围,那要求什么呢?要求后一个函数里面 x 的 定义,也就要求后一个函数里 x 的 范围,当然这两个 x 不是 同一个 x。 其实你换个 t 也行,是吧?帮助理解。那这里我就不换了啊,后面我也用 x, 其实你也可以把后面换成 t。 那 这里我想强调的是什么呢?其实这种问题的思考 也无外乎是那样,看联系找矛盾。什么联系?你前面一个函数和你后一个函数的联系,就是他们都有公共的外层函数,他们都有公共的外层函数 f, 那 换句话来说,这个问题你就是什么?先通过前面的一个 x 的 范围,看到没有?这里的 x 的 范围,你是不是能够推出 h x 的 范围,那 h x 的 范围不就是 f 这里面括号吗?也就是 f 的 定义域, 所以以 f 为联系桥梁,那么后面的这个函数 f 后面括号的东西你也知道了,看到没有?因为它和前面的 f 括号里面的东西是一个范围,那这样的话, h x 的 范围其实也就是也就是这里的 g x 的 范围, 那 g x 的 范围知道了,你就可以又反推这里的 x 的 范围啊,就这点事,其实就推一堆不等式推回去, 但是逻辑上你要知道你怎么想到这件事的哦,你注意到前一个函数和后一个函数之间的联系,他们都有 f, 那 既然都有 f, 那 么 f 的 定义域在这个过程中是不变的,也就是 f 括号里面的东西的范围在这个这个问题的前后是不变的,所以以它作为 中间桥梁,以它作为联系的枢纽啊,去通过你有的来拿到你想要的啊,这个就是求定义的一个方法 哦,他说啊,知道函数 f x 是 根号,加 x 减一好,他要什么啊?你看这个时候就开始分析了,要什么有什么,是吧?要这坨东西 啊的定义域其实很简单,这坨东西的定义域,你看啊,它掺了 f 这样的抽象记号,所以要求它的定义域啊,你一定是要了解 f 的 信息的,所以就是你要的东西是跟 f 有 联系的,或者说你要求它就是要求 f 的定义域,但是已知已知条件给的其实就是关于 f 的 明确的表达式,所以它的定义域是可以求的,你就能推出 x 减一是大于等于零的啊,进而你推出 x 是 大于等于一的,那你不就找到了 f x 的 定义域吗?然后你就再写回去,去尝试找这两个的定义域, 对不对?当然在这个写的过程中,你继续往下推,对吧?因为你看我是倒着推和用联系看到思路的,然后我是用正的推把整个过程写好的啊,体会这种感觉,然后你看,那他推出什么呢?哦,你推出你要的这个东西,其实还是要满足一些不等式的,是吧?是一不等式组。比如说第一个括号,因为你已经知道 f 括号的范围,但第一个括号里括的是二分之 x, 所以 二分之 x 要大于等于一啊,因为你已经知道 f 括号的范围,那么第二个括号里括的是 x 是 做了分母的,也就它里面其实套了一个 g, x 等于 x 分 之四,所以你还要补一个东西叫做什么? x 是 不等于零的, 所以这个才是后面这一整坨东西,它的定义域里面的 x 应该满足的条件,然后剩下的工作就叫做什么,哦,你就好好的解不等式组就可以了。比如说你通过第一个解出来哦, x 是 大于等于二的,当然这里解不等式组的一点技巧就是,如果你已经知道 x 大 于等于二了,你可以考虑到这个事去解第二个,因为它已经是正数了,你就可以乘过去,对不对?你就可以乘过去得到 x 小 于等于等于四了,然后还有一个什么呢? x 是 不等于零的,嗯,这个 x 不 等于零,其实不构成影响,对吧?最后其实取这一段和这一段就是二,小于等于 x, 小 于等于四,因为零在外面嘛,所以你去找这个 ok b 选项, 所以就算出来就是 b, 但更重要的是什么?就看到这种类型的问题,你怎么去思考?找线索,对吧?你要求什么就是要求什么啊,去看联系从条件到结论信息流动的这个次序以后,你再顺着把它写出来就很好了。所以这样简单的题,大家能够感受到这种思维流动的顺序啊,这种思考的这种线索是怎么摸出来的? ok, 所以 这是这个问题。第二种题就求直域,你在里面看到了一堆熟悉的字眼,对吧?要什么配方法哦?换元法哦, 所以我们一般都是根据不同的问题啊,为了处理其中啊,各种各样不同的主要矛盾,你想到了哦,这样换元可能比较好啊,包括那样可能用所谓的什么部分分式法比较好啊,或者用那样可能用所谓的判别式法比较好, 好不好?甚至包括你常见的还有什么不等式法理解法喽,这种都可以。求直域是很灵活的啊,但用哪种方法是你因地制宜,针对不同的主要矛盾想到的好吧,所以后面代练的时候,带着大家练的时候,这些题型里面我们也都会来展示和梳理啊。 所以下一个是你看求函数的直域,大家要知道要求直域永远是什么,先求定义域,然后再从定义域根据对应关系去推直域。那比如这个问题,你要求直域,你永远是 第一步,先分析定义域,定义域是什么呢?哦,是这样的数值,这样的 x, 什么样的 x 呢?哦,满足一减 x 大 于等于零这样的 x, 然后它其实是富无穷到一,那有了定义域之后,然后你现在要求求值域,当 x 属于这个范围的时候,那么现在党在你求这个范围面前的主要矛盾是什么呢? 通过它,你看你第一个正推是可以求定义域,它其实还是给大家看思路的流动吧,就你看第一个正推,你是从它推出定义域。第二个正推就是当你要结合定义域和对应关系求值域的,其实就这个根号, 因为没有这个根号,你去掉了,你其实都会求,那所以你想一种什么方法呢?你说我会用换圆的方式把根号换掉,至少在视觉上看不到根号,然后范围上我又能够新的变量去确定范围,其实就是什么叫做换圆啊?就是令 t 是 等于根号下 e 减 x, 但是呢,这个时候因为你换了新的圆 t, 你 顺便把新的范围也弄出来,那 t 就 大于等于零的啊,这个你也你也先弄出来了。所以为什么想到换圆,就是为了处理好这个根号的主要矛盾,但更重要的是希望在这里让大家知道换圆的本质的情况下,改变问题的形式,把问题的形式改变到异于你观察, 益于你求值域,益于你求最大最小值,益于你分析其他的等等所有问题的这个角度上去,懂我啥意思吧?所以这个是换元法的好处吧,所以当你换了之后呢,你就说,哦,那么这样的 y 我 就可以重新去解,因为当你做了 t 这个换元的时候,它其实意味着等价的,就是 x, 也可以用 t 来反表示,也就是一减 t 方,对不对?那前一个 x 你 就可以换了,它就是一减 t 方加上四倍的 t, 好,那它等于什么东西呢?哦,等于负 t 方加四 t, 对 吧?你给它凑一凑,凑一个减四,再加上一个,那其实减四加四,再加一就加五,那么就等于什么呢?负的 t 减二的平方再加五啊,这个时候你的 t 是 大于等于零的,那所以有了这个时候呢,你接下来就只要再正推就行了,对不对?它能推出。哦,那你的 y 啊,因为 t 是 大于等于零的,所以这边的话,你已经配方好了,所以你的 y 是 小于等于五的。当然这里要说一点啊,就是说在真正解析和写过程的时候,你不是说求值域,你就说 y 小 于等于五,这个概念上是有点问题的,因为值域的话,它其实是一个集合,是一个数字的集合,但 y 小 于等于五,它的属性是一个,所以最后你还是要说一个啊,就是说什么啊,值域你要给出一个集合的形式啊,值域是什么?富穷到五啊这样的东西,或者你写成 集合的形式,对不对? y 小 于等于五,就强调这点东西啊,就在概念上其实要区分清楚,不等式是不等式,值域的话是集合啊,所以就是这个问题 啊,比如看这个问题,他说啊,求函数的值域外等于啊,后面这么大一坨,怎么想?用什么方法?怎么想到的?无论如何,求值域的问题,求函数值域的问题。永远记住第一件事情,先去了解定义域,因为对应关系都给你了,通过定义域和对应关系确定值域啊。有的人一上来就奇怪,哎呦,赶紧去看这个解析式,再根据解析式的这个特点移动操作,反正就没管定域的事了,所以后面经常可能导致错误,就因为思维的顺序它跳跃了。 这第一步你一定是去了解定义域叫做什么呢?哦, x 平方加 x 加一,因为你看到分数线吗?整式,分式,根式对不对?分式的话就是分母不等于零,分母不等于零,你推出什么呢?这个其实你因此解一下,其实得到这个东西,但是它是恒成立的, 那就说明什么呢?说明定义域,定义域。是啊,那就定义域没限制了,你再去想值域的问题,那么现在党在我求这个值域面前的主要矛盾和困难点在哪里?在这里的话,提出一种方式,就所谓的判别式法,那么它的好处呢?你看第一步,它其实是把这分数线搞没了,你看你会先把 x 乘过去,比如说 y 乘过去,比如说外倍的 x 平方加 y 等于两 x 方减 x 加二。 ok, 那 下面你就是合并同类项和整理,你会得到 y 减二倍的 x 方,加上 y 加一倍的 x, 再加上 y 减二 等于零。所以其实是想啊,利用 x y 之间有这样的联系,比如说它如果是一个二次的话,那么 x 的 定义域要是 r, 那 它肯定 x 得有实数解呀。那对应的 y, 你 可以 b 一个范围出来,建立关于 y 的 一个不等式啊,就说它大于等于零这个东西。但是有一个问题,在你做之前,你会看到,当你把 y 看成参数的时候, y 减二这个参数其实是出现了, 出现在了最高次项 x 方前面,所以它是不是零很重要,因为它不是零的时候,你这个这个地方才是一个二次二次的结构,才有 data 的 概念。如果它都是零了,那你可能 这个式子啊,它是一次的结构,你就要用,你就要用一次的一次函数或者一次方程的方式去分析它的值域等等等其他的问题,所以明白啥意思吧?这个地方你第一个面临的不确定性的主要矛盾,那你为了解决它,就让它确定下来,所以你想到了分类,讨论分类的依据。第一个就叫做 y 减二等于零,即 y 等于二十,所以你看啊,解决的过程包括步骤,一步一步都是想出来的,都是。第二个就是什么呢? y 减二不等于零啊,及 y 不 等于二十,那么你每一类去做清楚,最后再合并就可以了。比如第一类 y 等于二的时候,那它真的就不是二次的这种结构了,对吧?那 y 十二带进去,它就是三, x 等于零,那你就推出什么呢?推出 x 也是有解的, x 等于零, 所以这种情况下是满足的是符或者叫逗号,你写一个符合题的,为什么?因为 x 等于零的时候, y 等于二,你也可以带进去嘛? x 如果是零的话,你看这零零零零, y 就是 二,那那二的话,肯定也是在外的那个值域里的,所以这种情况下是满足题的,你找的,你找到了,但其实是容易漏的,对吧? 那你只要总这么思考,你其实就不会漏掉讨论这个东西,因为这里其实是有一个不确定性的主要矛盾的。那么当然第二种就是这个问题的核心难度集中在这就 y 不 等于二的时候,你说,哦,那这坨柿子对吧?它还真的是一个二次的。那我怎么去找 y 的 范围呢?其实在这里你就说 get 等于 y 加一的平方减去四倍的 y 减二的平方啊,要大于等于零,但是你现在不就得到了一个跟外有关的不等关系吗?因为你要的是范围不等关系才能出来范围,所以, ok, 你 继续往下做,就叫外方加二外加一,减去四倍的外方减去四外加四要大于等于零,那么这个再画画减的话,其实就是三外方再减二外就减十八外, 或者是十六十六减一加十五小于等于零啊,你画一下是这样,当然你再把那个系数弄一下,就是外方减去六外加五小于等于零,哦,原来这个是可以分解的,对吧? y 减一, y 减五小于等于零,那也就是说一小于等于 y 小 于等于五啊。当然我们说了在每一类下面,对吧?他要跟分类的依据取交集,所以最后所以这一类其实是一小于等于 y 小 于等于五,且 y 不 等于二。但是最后综上的时候呢,其实是各类之间取并集,你比如说这个范围和上面你这一类是 y 等于二,是最终这一类下面的范围两个在取并集,其实把 y 等于二又给加上了,所以综上就是什么呢?一小于等于 y 等于五,或者当然更好的一点说法就是,如果说从回答这个题目的值域吗?哦,你就说,哦,那值域这个 一到五就是你给他一个集合区间的本质也是集合嘛,所以你不要给一个不等式,那样稍微在概念上有点问题可能,哎,想扣你分,找你麻烦也可以啊。 ok, 那 我们接着看下一个问题啊,也是求值域的问题,这里的这个形式,其实我们是要谈部分分式法,对吧?但你看啊,就一个条件,那就从它出发啊,因为你已经知道了定义域,你要求值域啊,都非常好,其实就是你怎么处理好这个对应关系的问题。所以我们说啊,你知道 f x 是 x 加一分之三减二 x 范围,也知道 现在党在你求直喻面前的主要矛盾是什么呢?就你为什么会分析不好这个所谓分式型的这样的式子的一个范围呢?因为他矛盾其实就在于分子,分母其实都有变量,如果只有分子有变量,分母是常数,那你说太简单了,就一次函数。如果啊,只有分母有变量,然后分子是常数,那你说太简单了,反比例函数。 但是当两个同事有的时候,你就发现,哎,都在变,我好像不好掌控了。所以当你发现了这个主要矛盾的时候,你接下来就想怎么处理好这个主要矛盾,如果能把这个矛盾解决,那这个题肯定就会变容易, 他就就这样的想法。而在解决这样的矛盾的过程中,你才会想到那个部分分式法,也就说部分分式法为什么成为这样的一种方法,为什么能在这种类型中总适用?也恰恰是因为它解决了这样的矛盾。比如说下面是 x 加一没问题,那么上面的话,其实我总可以用下面 x 加一去尝试表达。比如说含 x 部分前面有系数负二,那我可以凑一个负二倍的 x 加一,那凑了之后呢?我会产生那个加号,产生一个负二,我通过一个加二是可以还原的,对不对?然后还剩一个加三,它就这东西,那么当我继续往下做了以后,其实我就可以把第一部分拿出去,也就是负二加上 x 加一分之五。 所以你可以比对一下,在我用部分分式法做这个操作之前和之后,之前两个地方有 x 叫做变量,变量的位置个数过多,但现在用了部分分式法,你只在分母,哎,有 x 了,你觉得好像我,我就可以把握了,为什么呢?因为我知道 x 的 范围是零到一,那么我就能知道 x 加一的范围 是一到二,所以 x 加一知道了,那我就能知道什么。你是朝这个目标去推,是不是我就能够知道 x 加一分之五的范围啊?这个我怎么知道?其实你照着反比例还是画个图吗?把 x 加一 看成一个整体,这个就是 y 等于 x 分 之五的图像,那么这个整体的 x 是 在你看一到二的范围去变的,所以一的时候是最大值,二的时候是最小值,那么也就是说是二分之五啊,但是呢,这个东西要加上一个负二,对不对?其实就是看着变的,叫做负二加上 啊,这一坨东西,它就是二分之五减二就是二分之一啊,五减二就是三。好,那考虑到这个范围,你由这个正推,你不就是知道了哦, f x 的 值域是吧,接下来就是写一写的事吗?啊,值域为这样的一到三 b 区间, ok, 就是 c 选项。 但是无论如何就希望大家理解的是第一个啊,部分分式法有什么好处?他解决了什么主要的矛盾啊?你每次是怎么想到这样的方法,而不是说看到一个什么形式你就说,哦,当时我记得那个好像叫部分分式法,怎么做的来着啊,你就去, 你就去回忆那个形式不对的,其实都是因为你注意到了某些矛盾,因为有的时候分式形看到分数线也未必是部分分式法的,也有可能有别的方法,所以希望大家体会的是这个事关注我想看什么评论区见。

好,我把我已经分装好的函数放到我这个模块里。这个连接函数我们上一期已经讲过了,每一次呃,我们数据库连接,我们都是要通过这个连接函数,所以这个分装好了,接下来主要是这 这个函数 e x c e x e c q, 然后他主要是执行我们的真商改 c q 语句,然后他是返回一个簿,能执行成功,他就会返回成功。好, 他每次就会去先连接我们的数据库,所以说我们在执行这个函数的时候,其实他每次都会去连接一下这个数据库。好,这里代码就已经有一些中文注了,写好了 之后连接成功了,他就会去执行这个函数,执行这个命令 c o n n 顶 ex ec 库的这个行,这个命令。好, 这样的好处就不需要我们每次要执行增删改查的时候,我们还要去呃连接一下。好,这里另一个函数我们是来执行 查询 sql 去返回记录集的,用于 select 查询的。好,这个是返回记录集,另一个是 返回查询结果的第一行,第一列常用于查询单个字段,比如名称、数量、金额啊,所以我们这里做了区分,所以这样三个函数,有了这三个函数,我们就在我们这里的增删改查就会非常的方便。好,我们来一个个来 私信一下,比如我现在要添加一条客服记录。好,我们原来是这样写的,你看我原来都要去连接一下,即使我们呃分装后,以后的这个就不需要了,我们就直接 这里就不需要分装连接,我们只需要定义,比如 st sq, 然后呢是一个,是一个制服串。好,这个制服串呢?然后我们是来存 存什么呢? sq, 好, 我们来存存这个查询语句啊,我们等于就等于这个查询语句。好,我们接下来我们就执行这个我们分装好的那个函数,叫 e x e c s q l 这个函数,这里呢就是填入这个语句。好,直接这样执行。好,我把完整代码看一下,我们这里的。好,是这样啊,如果,如果 他成功了,让我们成功执行失败,新增失败啊,我们就这样写。好,我们,所以我们这里改一下。好,好,这里我们就不用了。好,好,这样就是一个新增函数了。好,我们来测试一下,比如我们就当五好了。 好,我们来测试一下。好,接下来我们就好,已经有五了啊,我们再新增一条。好,我们, 呃,刷新一下啊。好,我如果新增一条加载。好,刚刚这个五就添加进去了啊,所以这个分装后这个新增也是很好用的。好,接下来我们来看更新啊, 更新,原来代码是这样,所以这个连接我们就都不需要了。好,我们就直接定义一个也是一样的语句。好,这个变量我们就 这里就不需要他执行了,我们直接等于这个变量啊,我们就 把这个吧改成一或者刚刚新增的五啊,我们就这个改一下。好,我们如果这里就执行了,执行也是一个 exe exe c q, 然后我们就执行这个这个语句,把这个 c q 查询语句直接放进去。 好,如果他成功了,然后我们看一下,如果他成功了也是这样,如果成功我们就弹出来。好,我们直接把这里代码我们看一下,这里的一直。 好,如果成功我们就修改成功,啊。好,就是这样一个代码,我们就把它放到前面一点,真删改,查。好,我们修改好,我们把这个改电话号码改成一二三,你看我更新 好点,这里加载。好,这里就改成一二三了。好,我们接下来我们想把零零五这个删掉。好,删除代码,我们也是一样。好,原来的这里连接我们就不需要了,我们就直接在这里定义 s t r s q 等于时距。好,这个呢也就等于。好,我们就零零五把零零五删掉,如果删除成功,我们也是一样,我们 这个好了。好,删除成功。好,我们来试一下零零五能不能删掉啊?好,删除 好,再刷新,非常方便。接下来我们查询也是一样,我们原来查询是是这样写的。好,我们接下来查询,我们要改一下,我们查询是 看一下它,查询,我们看一下这里的查询语句。好,查询语句这下直接把它复制过来。好,我们对比一下它这个查询语句原来的跟没有分装的有什么区别?好,它需要定一个连接,我们这里就不需要定一个连接,这个连接不需要。 好,它是需要定义一个记录。极。好,我们直接把它给复制过来。 好,好,他只需要定一个数据集,再定一个 c q 语句这个支付串,这个支付串是等于查询他全部这个客服表啊,现在就打开这个支付集,如果 他的支付集不是空的,我们就展示他的数据,可以展示他的客服编号和客服名称,这里的 bug 不 能会在立即窗口这里显示。好,我们来看一下。好,我们来看一下 查询。好,这里没看到,我们点开这里,好,这里就在字的立即窗体这里显示两个了,好,这样,好,再做一个 单子查询。好,我们这里就查询它的单词。好,名称,我们也叫一下叫 b t n get get value。 好, 好,这个单子查询,我直接把这里的测试代码放进去。好,这个单子查询会比较简单。好, 这样就我们把这个测试数据放进去,好,这里可能不是叫客服表,我们叫卡斯多麦斯,好,这个是客服,我们显示一下客服编码 c 零零一,到底是哪个客服名称,这里会显示杭州贸易公司的。好,点一下,好,杭州贸易公司,好, 这样的话我们这一期把真商真商改查,还有单子查询的分装函数都讲解完了,这样的分装对我们后期来做项目非常的方便。我们把所有的 circle 语句都统一做一个分装,不需要每次做 circle 执行语句的时候做数据库的连接。好,这一期就讲到这里了,谢谢大家记得关注再走哦。

hello, 小 伙伴们大家好,我是陈星,在上期视频呢,我们看了函数的基本语法,这两句大家记得就行,还有一个就是函数的注意事项,传值 vs 传值, 你知道我们为什么这边不能吗?因为它传的是一个值,我们这个传的是一个地址,我们如果想交换一个数的值,我们就得交换这个变量的它们这个一个地址才可以交换它的一个值,知道吧? ok, 我 们继续来看。 接下来来看第二个, 第二个呢就是什么?函数的调用过程, 函数的调用过程,大家知道我们的函数调用的过程是什么?整天呢都在调函数,调函数,但是我们真的知道它的调用过程吗?调用过程呢?是什么呢?首先第一步,通过, 通过什么?呃,通过函数名找到函数的入口地址, 函数地址就是什么?就等于函数的入口地址, 还有等于什么?取地址,函数名。 第二个,虽然你说它的函数名是什么呢? 通过函数名找到函数的入口地址,然后给行餐分配空间,第二步呢就是给行餐分配空间,对,第三步呢?第三步是什么?传餐啊? 第三步就是传餐,传餐呢就是什么?将值餐的值传递给行餐的空间,存储 存储,对不对?那我们第四步呢,就是执行函数体里的语句,执行函数体里 里的语句对不对?然后第五步呢,就是什么?函数返回,函数返回,那么然后并释放空间, 函数的空间就是什么?数值变量,对不对? 比如变换, 这就是函数的一个这样过程。然后呢我们就把接下来我们把上期遗留的这个什么传值,还有传值这个问题我们再来看一遍, 传值是什么?传时差变了量 vs 还纸,还地址,还地址,有我们还时间变量, 我们来看一下啊,当我们看什么时候使用它,怎么使用它呢?当值使用不修改时差 变量内存的值,再函数调用 n 四千变量名,这也是我们,呃,大部分用的对不对? 为什么只能使用,不能修改,只能使用,不能修改。第二个,当 e 指令也可以修改时差变量内存空间的, 在函数调用时 还时差变量的 e 既能怎样也能修, 知道吧?修改指尖变量对应内存空间的值,就是说你给你想修改这个指尖变量对应内存空间的值,你就传地址吧,对不对? 他说一直使用,一直使用,那就那就传名字就好了。 然后我们这个调用说明已经修改了,我们要都要修改那个 a 和 b 的 质量,所以说你肯定得传地址才行, ok, 我 们顺便再看一个东西,就是什么传入参数和传出参数。 传输参数呢?是什么?传输参数就是传递函数,只使用 不修改的时差。 呃,传输参数就是什么传递 给函数,修改 就相当于函数返回值吗?就相当于函数返回值, ok? 嗯,传值 vs 传值,这个大家一定要,还有这个函数的一个调用过程也得清楚啊, 先通过函数名找到函数的入口地址,然后分配空间,一共是五步,记得五步对不对?然后前几期视频讲了一个内存泄露,防止内存泄露方法,一共是七个步骤, 哪七个步骤还记得不?第一个就是什么,定一个指征没有,那个什么指向没有,没有指向的话就置空。 第二步呢,如果你要复制的话就要 make log, 要,只要空间复制的话就要 make log 分 配空间。第三个呢就是分配完空间之后呢,一定要检验有没有分配成功。第四个呢就是使用过程中啊,分配要分配成功之后要抽象。 第四个就是分配成功之后要记得出实化,因为买浪肯定得出实化,对不对?第五步呢就是不能越界。第六个就是主任。第七步呢就是制空。然后呢,我们函数的这样过程呢,一共是有五步。第一步什么?就是通过函数名找到函数的入口地址。第二个就是 给这个行餐分配空间。第三个就是什么传餐啊?将时餐的值传递给行餐中间这个的空间存储。第四个呢就是执行函数题里面的语句。第五步呢就是函数返回 并释放空间,然后有个传值,还有传递值,这两个得区分啊。 ok, 我 们来写一个东西给大家看一下,这个这个这个, 写个,写个题目, 我们比如定一个 t r 星, e t r 等于,呃, hello world, hello world, ok, 然后我们来创建 c, 我 们来调用这个 e t r, 然后我们写一个函数,对,然后我们选 c 切尔心 e t r 这里面该我们干一件什么事呢?心 e t r 加加, ok, 加加之后呢?然后我们打印 green f, 打印什么呢?打印我们 p t r, 打印这个新 p t r, 新 p t r 等于百分二 s 啊 n p t r 我们看一下,你们猜猜这结果应该是多少?嗯,哦,不对, a c c is 二十六点四, ok, 看见没?结果是 e l o word 对 不对?说明它这边移动成功了,是不是? ok, 然后我们把这个 green f 换个地方,我们如果在这边打印, 我们来看一下,结果看见没?新 ptr 的 hello world, 这是为什么呢?因为你传的是一个值嘛,如果你想改变这个 ptr 的, 你想改变 ptr, 就 跟刚刚那个交换逻辑一样嘛,你想改变的话,就得传它的一个什么, 得传他的地址,然后呢,这边你就得改一下传他的地址,那就不是,不是在这边传过来,就是在这边内传他的一个地址,这边就要怎么修改呢? 是不是内就是信息还可以呢?这样你就可以传他的地址,是不是看见没,还是没有变? 你们在这边加括号,括号没加 括号不加的意义就不一样了呀,是吧?刚我们犯了一个什么错呢?对不对? ok, 接下来我们把这边来都变一下,变回去,变回去,变回去啊, 都变回去。 嗯,我看一下,看 看见没,它报断错了,是不是? 说明什么?说明如果你放上面呢,你看看它, 看结果是不是看见没,还是断错了,就是它不让你移动, 就是嘛,你想直接修改它这个常用的值,所以说它肯定会报段数,对不对?这个时候我们如何来做呢?你可以按二级直接往这边传它的一个地址,你既然不能修改它的值,那我们就修改它的地址,对不对? 修改它的地址,那就没有问题了, 是不是? ok, 让我们再来看一个 void 方式一吧。然后呢,第二,新 ptr, 这个时候呢,我们要一样的 ptr, 加加,我们直接 ptr, 那 么呢,新 ptr 等于新 ptr, 等于我们要将第二位改成一, 然后我们要干什么事呢?房产 c 一 d t, 嗯,上面就这两,就这两我们来看一下它的键是什么?看见没?还是键错,它不让你修改,对不对?还是这一个问题啊?它不会让你修改的问题, 因为它是一个场量,但是你其实有一个方法可以修改,就是你直接改成数据, p r c, 然后接下来什么定一个 p r 零 p t r 对 s, 那 你就可以修改,你看看 看见没?这样第二位他先后移了一位, p t r 后移了一位, p t r 后移了一位,就是这个指认已经后移了一位,然后呢,将这个指 从小写的 e 变为大写的 e, 是 不是你也可以这样子进一个数组,然后这个指认呢?指向这个数 也是可以的,它这个就是内存里面的一些细节,你之前呢指定用 ptr, 新 ptr 等于那个什么? 嗯, hello world, 它是存储在只读,只读存住,只读内存里,就是你不可以修改,但是呢,你用这个数组存的话,它是一个占内存,占内存,你是可以修改的,是吧? 然后呢,你这个也可以这样子来,你把它弄成,嗯,定义成这个数字就可以变了。 ok, 所以 说这个就是传值和传值,大家要那个区分清楚,这就是圆直。 开始把窗纸看地址, 这个回去可以,大家可以好好看一看。 ok, 本期视频就到这,小伙伴有什么问题的话可以在评论区留言,或者进我主页的一个群。

今天就详细介绍一下窗口函数的各种不同用法,我主要是结合 my sql 这个 sql 数据库来做一些详细的介绍。有很多代码会介绍窗口函数的各个方面, 包括窗口函数的基础语法,它们的那个 over 语句里面,它需要包含哪些东西?呃,不同类型的窗口函数有什么差别?最后就是窗口函数具体有哪些用处等等,我们就可以直接开始。 这时候我先写一个比较简单的查询,我这时候会用到这样一个表,叫做 payment, 这里的一个表先 select 一下, 在 netcat 里面,这个最好选一下,好选择 secure payment, 可以 直接把这边拉 过来进一下,我们稍微看一下这个 payment 里面包含哪些内容,为了方便演示,我把左边这边的侧边栏直接给去掉了,然后我们直接这样看下面的表格,会稍微的方便一点。在这一个表里面呢,包含这些字段, 它有文本的 id, 它是一个包含员工 id, 一 些支付的一些东西,它具体的行业其实不需要太了解,你只知道它就是一个表格类型的数据,它包含这些列,这些列里面有一些是一些 id id 的 表示,可以跟其他的表进行关联。另外有一些是一些数值型变量,比如说这里的 mount, 它就是一些数值,你可以对它做计算。最后就是一些的日期型变量,这边是 payment date, 它是一个日期, last update 就是 最后更新的一个日期。有了这个东西之后,我们需要做一个窗口的计算, 有一种最简单的窗口函数,就是 sum amount, 我 们需要有一个先给一个第一列,我就选择一下 payment date, 选择这一列的日期,我需要第二列,第二列就是这里的 amount, 就是 一个数值变量,也可以对它进行加总。第三列我需要求一个对这个 amount 进行累计求和。 假如我现在没有任何的东西,得到的就是这么两列数据,第一列是日期,然后第二列是一个数值型变量,我需要生成一个第三列的数据,它是第二列数据的一个累计求和,先把它注视掉哈。 如果我们不写窗口函数,我需要有一个求和的那个数值,就可以直接写一个那种聚合函数,变一个上,后面跟上我的那个 mount 是 这里的数值。这样的话,下面这边结果就是这一列数据的一个求和。 但是窗口函数有什么用呢?窗口函数的用处就是既保留就是这一列数据,我都会把它保留下来。第一列数据这边是数据的明细,每一个分钟它是具体到每个秒的,每一秒的数据我都保留下来,这里的这一秒的明细数据也把它保留下来。我在后面新加一列数据, 这一列数据是 month, 这一列数据的累计求和是它的求和。也就是说川普函数的作用有一个作用,就是它既能保存数据的明细,它原本那个表格有多少行,我就留下多少行。但是我可以增加一列数据, 它是保留这一列第二列数据的一个某种维度的求和,就既包含聚合的结果,也包含具体的明细。 然后有了这样的结果之后,你就很好用了。比如说这边如果我有一列数据,是一个具体的多少,二点九九这个数值,在第三列数据里面再加一列数据,它是二点九九,就这一列的整体的求和,然后我这两个除以下的话,就可以得到这样一个这个占比平均值这样的 比例的。你在做报表或者做计算的时候,经常会用到窗口函数,其中一个比较大的作用就是这个作用既保存具体的数据明细,也保存聚合后的结果。 因为在 sql 里面总共只有三种类型的函数,第一种就是标量函数,对行做做预算,比如说这边有一个日期,你在 excel 里面有一些日期函数去才可以获取它的具体的年月日,或者获取它的分钟,这就是一个标量函数, 它只对某一行做操作。第二种类型的函数呢,叫做聚合函数,就是我们刚才演示过的,就对于这某一列直接进行聚合,它会把那个维度变小,比如说这里的 amount, 假如说它总共有一千行,然后使用这种上函数之后,它就变成了一行,就变成一个数值, 就说它的函数会直接压缩掉。但是如果那种标量函数对于日期处理函数的话,它的函数是不会压缩掉的,你原来有多少行,我就多少行。 现在弄到的那个窗口函数,它介于两者之间,它的函数也不会发发生变化,但是它会把那个具体的数据明细和汇总后的结果都保存下来,相当于是处在标量函数和那个聚合函数之间的一个状态。 这种既保留整整体,又保留局部的这种函数呢,非常有用,因为你可以做各种的百分比的计算,那么窗口函数的具体语法是这样子的, 首先你要有一个做窗口计算的一个函数,我这边使用一个上,因为我们是要做加总上,后面要跟上一个 over, over, 这是他的固定搭配,上,后面跟上一个 over, 这里面后面要跟上一个小括号,小括号如果我不做任何的 限定,因为里面是跟上一个限定的呃条件,如果我不做任何的限定,这时候呢我所渠道的就是对于整表进行一个聚合,进行一个开窗运算,然后这时候我把它保存成一个变量,使用 as 符号,然后就是写上一个 toto, toto 上表示的是一个对于这个数值进行加总,那么我要对哪一列数据进行计算呢? 然后这时候我要对 mount 这个数据进行计算,这时候把它复制过来。下面这里就是我们常说的一个窗口函数,它是最简单的一个窗口函数,它总共就只有一个 sum 做开窗运算,然后有个 over over, 后面 as as, 你 甚至可以直接取掉,取消掉 也没有关系,就这一个部分是最简单的一个开窗函数,我们可以运行一下,可以看一下下面这里的一个结果, 这边的第一列数据呢是就是我们的那个日期,然后第二列数据是我们的那一个数执行的变量,然后第三列是做了一个汇总, 然后汇总的结果其实就是一个对于慢的这一列数据进行全表的一个累加,就是它有多少行,把这一列数据全部加起来,得到第三列这个结果,但是它展示的方式呢? 会有点不一样,可能跟其他的展示方式不一样,因为他是一个总总量的数据,然后他会把 每一行都给填充起来,因为我是对全表进行一个累加,然后相当于把它分布到每一行那里去,他这边所有的数值都是一样的,因为我这边是对全表进行一个开窗的预算,然后每一行的数值都是一样的,都是一个总计的数值。 那如果我对它做一个,比如说做一个条件的限定,它就可以根据不同的数值进行不同的累加,不同的分组进行不同的累加,就跟之前的所说的 goodby 那 种语句是一样的。 ok, 这就是一个最简单的开窗函数,那么 它有什么用呢?最大的一个,这种上函数最大的一个用处就是你可以做这样的计算,比如说这边我可以把 amount 复制过来, 然后除一下,然后后面里面呢,把这一个上 over 给复制过来,里面加上一个括号,给它取一个别名吧,就简单取一个叫做 sent, 就是 百分比的意思,这样子我们运行一下它第三列,这里就可以得到这一个 呃,小数的形式,这是什么意思呢?这边的我所做的计算是把这一列数据除以这一列数据,得到第三列,这是 percent 这一个数据,它的含义就是说我这个 amount 是 一些明细的数据, 然后这边 total sum, 它是一个总计的数据,那个明细的数据除以总计的数据,就是我这一行数据占总数据的一个百分比, 这种百分比的计算在你所有的不管是 bi 工具、 excel, 还是去做呃,排整计算?还是用那个?反正任何涉及到跟表格 数据将相关的一个计算都会用到这种计算,所以窗口函数一个非常大的作用,就是起到这样一个作用,计算局部占整体的一个百分比,这是一个比较常见的场景。另外一个就是做一个排名排序,以及那个做时间序列的计算的时候,呃,会用到一个, 相当于做一个,那个叫什么来着?均值啊?加三日均值,五日均值,这种你们在炒股的时候可能会经常遇到,可能会经常遇到这样的一个情况, 呃,你要算一个股票,他三日均值,五日的均值均线嘛,他就也可以使用窗口出来做计算。然后还有一个就是做,比如说 今天有一个数值,昨天有个数值,我要做一个相当于一个差值,就今天减去昨天的,然后这样一个差值,我每天都到这样一个结果。这个东西呢也是比较常见的一个场景,可能在金融领域会有多一点,因为它会涉及到一个时间的一个变化的一个东西。 over 里面的参数呢?我下面会介绍一下,因为我们现在是没有介绍任何的参数,如果你需要加上一些条件的限定的话,就可以在 over 里面添加一些参数,可以用这个语句。这里呢要用 over 来限定条件的话, 就需要有一些分组的,分组的条件,然后这时候我需要用到一个额外的函数,这个函数叫做季度的意思, 然后他是对这个日期求他所在的一个季度,是一个比较常见的一个日期函数。先运行一下,因为我后面在 oppo 的 参数里面需要用到这个, 用到这个获取日期的一个结果。他他表示的是第二季度,就比如说这边的五月二十五号,他是在第二个季度, 然后这边的七月七月八号,他所在的季度是第三个季度,我这样相当于获取了这个日期所在的一个,这一年里边是哪一个季度获取这个有什么用呢?因为我要用它来做一个开窗的一个运算,比如说这边有一个 mount 了, 然后这边有一个 sun over, 那 over 里面是包含很多的一个参数的,然后你有两个参数可以加一个是叫 petition by, 这个单词不是很好写 tension, 然后 partition by 是 什么意思呢?它的含义跟 group by 是 一样的,就是可以去做一个分组, 但是它是在开窗里面做分组,跟那个 group by 语句的作用是不一样的。 group by 语句是对结果进行一个分组,但是这里的 partition by 它是对开窗的结果进行分组,因为在我还是保留一下之前不做任何条件限定时候的结果,后面再加吧。 partition by 它对于 他是对结果进行分组,然后这时候呢?我想要根据季度进行分组,这边我不是得到一个结果叫做 total sum 吗?他是对于整个的列,整个曼特列做了一个求值,然后我如果想要根据不同季度得到一个这样的求值呢? 比如说这里的第二季度,我只想求第二季度他的这个曼特的总计是多少,然后还有第三个季度他们是多少,第四个季度是多少?就是分开各种不一样的组别,然后得到这样一个呃,结果,这个应该怎么去算呢? 这个时候你可以在 partition by 里面加上你所需要分组的那个东西,比如说我们这边就根据季度来进行分组, 这时候就可以加上那个 quota 的 date, 你 直接把它上面这里复制过来。你不能把这里 code 复制过来,因为开窗函数在做计算的时候,他是不知道你这里的别名的结果,所以最好还是直接这样复制过来这样一个结果。我们再看一下, 发现第四列这里数据都变得不一样,这里变成五百一十四,把它放大一下,这里的写着 quota 一, 然后这里的萨尔曼的变成五百一十四了,刚才是大概六万多,然后这里变成这么小,说明他是根据不一样的这里的季度进行了分别的一个聚合。我们可以看的更明确一点,就可以找到他的一个分开的一个地方, 那边全是二月十四号的,我可以一直往下拉,这边有一个一月,应该有一和二的一个分界的点, 找到了就在这个地方,这样看起来可能会更加清晰一点。边第二列是季度的意思,就这边写着一就是第一季度,二就是第二季度,然后这边是数据的一个明细, 呃,每一行它是什么数据,它就直接这样留下来。然后第三行呢?我们刚才加了一个参数,是根据 patreon, 就是 加了一个 patreon 的 参数,它是根据不同的季度进行一个累加, 然后你们看到第一季度这里加总的结果是五百一十四,然后第二个季度这边加总的数值是一万四千多,就差别非常的大,这表示的含义就是说我这边做了一个加的时候,做了一个开窗预算的时候,他会根据我所指定的业进行一个分组, 就说这边的第一季度他所得到的结果就是五百一十四,然后第二季度他所得到的一个结果是一万四千这么这么多,他是不一样的,就是他们属于两个不一样的分组,所以得到的结果是不一样的, 能够理解吧?就是他所那个概算函数的第二个作用,就是他可以对他进行一个分组的一个统计,这边五百一十四呢,是所有这边的 cot, 就是 季度等于一的些 amount 进行一个累加, 就是这里一大堆的人吗?还有包括上面这些没有显示出来的这些累加起来等于五百一十四,然后这边的一万四千四百五十三呢,它是下面这里二点九九开始,然后零点九九一直往下加,加的范围呢,就是这边的所有 ctrl 等于二的这个 进行一个累加,得到这样一个结果,相当于起到的一个 groupby 的 一个作用,并不一样,因为 groupby 是 在结果 啊,是上面进行一个分组,然后这个是在那个数据的明细上面,既保留了一个明细的数据,又保留一个加总的一个数据,这就是帕蒂逊 by 这一个函数所起到的一个作用。这里是要介绍的第二个参数。 这种呃记求和呢,在金融领域里面也非常常见,因为你经常要做一个呃记的一个加总累计的一个总求百分比的一个 to return, return 叫什么来着? to 那 个收益的一个作用,然后这时候你需要用到第二个参数,叫做 rose o w rose 的 话,它表示的是限定你加总的范围。我们刚才其实没有限定它加总的范围就是所有的范围,结果我都加起来, 然后使用 rose 的 话,它就可以去限定你的范围,然后这时候它有两个参数,一个 between, 然后还有一个是 and between 的 话是要加上你的上界,你加总数计。呃,如果你要限定它加总的范围的话,就要确定一下这里的上界是什么,然后它的下界是什么?上界的话,因为我们上界就是一直往前加, 一直往前加的话就是 rose between。 between 是 unbounding 的, u n o u n d。 不 确定,这也没有高量就好烦呐。这个电机 unbounding 的 preceding, 它表示的是一个上界, 这样子, p r e c e d i n g 呵,嗯,南开特他没有高量,所以有时候对这个英文不是很有信心 啊。但是应该是这么写, i'm bundy's preceding, 它就是一个英文的单词。这时候呢,这种情况下可能是很多人学窗口函数会比较难受的一个地方,它里面有很多的英文单词, 然后这种英文单词呢? i'm bundy's preceding, 就是 一个不是非常常见的一个英文单词,然后你看起来可能就会比较难受一点, 嗯,就要稍微记一下,它是一个固定的用用法,它表示的是安邦迪的是没有上界,就是,呃,一直加到最初的一个地方,我的上界就是我最早的出现的这个地方就是就是这里的三点九八啊培 c d 的 话就是上界的意思,就是 管上界是哪里,我就从那个地方开始加起,然后的话,然后因为累计求和,你要加到当前的这一行, 然后这时候要用到第二个参数,就是叫做 current row, current row 表示是当前行, current 就是 当前的意思嘛。 c u r r e n t current row 表示当前行的意思, 然后的话我们就可以把它选中运行一下,那里我不确定我们单词有没有打错,先运行一下看看有没有报错。哪有报错, 可能是某一个单词打错了。 current row and bundy 的 preceding 要是 current 写错了不好,应该没有,因为在 over 里面它是不需要加逗号的。 bundy 的 preceding and current row 是 不是 current 写错了,不小心写出了一个 bug。 呵呵,直接去念一下吧。 divisible, 这种情况下就经常可以用到这个来帮你做一些。呃,阿修,然后就想问一下空格函数里面克中的克函数或者后面的参数是什么?你不加深度思考,以后联网搜索的话速度还是很快的。 ok, 他 这边给出了一个参数, rose between, 是 rose 非常低级的这个错误,但是他这个不高量,真的好难好难受。这样 ok, 这样就好了。我天呐,这个耐克的这个编辑器有时候不太人,不是很省心,他这边 rose 都不高量,那导致我都不是很有信心,他是不是写对了。这边的就是 c 科所返回的一个结果。 rose 他 有一些的 参数,然后参数的话就是在 between and 里面加上这一个东西,然后 between 的 话,它表示的是前两行,然后 current row 的 话,它表示表示的是当前行, 然后邦蒂的 reset 表示的是上,就是无限上界,然后按邦蒂的 follow 表示的是一直往下加, 这是它通过这样的方式来限定它的范围。然后这种语法呢是固定的。呃,如果你不太熟悉的话,最好是去问一下 ai 吧,因为这个东西不用太去记,因为有时候用到时候,因为我写代码,我经常写,写代码时候也会写错,它所起到的作用呢?就是一个累积相加的一个作用。 把它放大一下,看一下他所起到的一个这里的 mount, 这里的三点九八,然后这边有零零零,然后四点九九,然后第二列数值呢?他是对 mount 这一列进行一个累计的求和。 呃,计求和什么意思呢?就是上面的第一个数值是这第一行的数据,然后第二个数值是前面两行就这边的两个相加。写的清楚一点,就前面这里的三点九八 是这两个相加,因为第二课是零,所以他得到的结果跟第一个是一样的。然后呢,第三个这里的八点九七是前面三个相加,这样才是一个累计求和的一个结果。 就是这边三点九八加上四点九九,就等于这个八点九七,这第四个这边的九点九六是前面这四个相加, 这样就是一个累计求和的一个结果。然后因为我们刚才写了那个限定了他的 paycheck 拜,所以他第二季度不同的季度会出现不一样的一个累加的。这种情况不用上之外,还可以使用 max, max 取的是最大值,然后 mini 们取的是最小值, 然后 ambridge a v g 取的是平均值。这一个啊,这个跟那个其他的功能是一样的,就是跟那个聚合函数的聚合啊,功能是一样的 啊,这在窗口函数里面还有其他的一些比较特殊的一些函数啊,它的功能也比较常用,比如说用来排序,把这些都给删掉,然后呃力度进行汇总,这边有一个 一个简单的聚合语句,后面要加上一个 group 版的话,我是根据这里的季度进行分组,可以运行一下,这里得到了一个不同的季度,他们 他们的一个数值加总的一个情况,然后我现在用窗口函数要实现一个功能,叫什么呢?叫做进行排名。 排名的话就可以使用 rank over, 这里它有一系列的数值,这边有一万四,然后这边有五万五万二,然后这边有五百一十四,然后我想要对它进行一个排名,那比如最大的我就排在第一,然后第二大的排在第二,然后第三大的排在第三, 那这样的排名实现呢?也可以使用窗口函数,那这时候要用 rank a n k, rank 的 英文含义就是排名, 然后 over, over 还是一样的,就是你要指定你的参数,那 over 里面要跟上我们的一些参数,这里面呢你可以加上一个呃排名的顺序是什么? 要指定排名的顺序的话,就要使用 order by 语句,这里的 order by 跟之前的排序的 order by 是 差不多的,但是它功能位置是不一样的,就是这里的 order by 语句是跟那个 order by 是 一样的,但是它的含义是不一样的, 这里的 oop 是 表示的是窗口函数加总的一个方向,他指定你加总的一个方向,不管你是排序的方向也好。语句, oop 后面加上一个我们所要加总的一个方向,运算的一个方向,然后这时候呢是根据这里的, 我们想要根据哪一列进行排名呢?是根据数值列进行排名,就按照他大的大到小进行排名,你的排名要怎么说呢?就是这里的, 我们现在要那个确定一个排名的一个呃顺序,然后排名的依据就是这里的上 amount, 就 这里边的五万多的排在第一,然后一万四千的排在第二,然后最后五百一十四的排在最后,然后这首 order by 语句里面就可以加上,我们 按照这个排名所使用的依据,把它直接复制过来,后面加上一个 order by, order by some amount 一个结果,然后呢我们想要根据它来进行一个,我们先看一下结果是什么样子,给他取一个名字 就叫做 rank, 就是 排序的意思,选中运行一下,那这边这里的 amount 它默认情况下其实是顺序排列,从低到高进行一个顺序的排列 啊,这里的第一点最小的是排序是一,然后最大的是排序是二,然后后面是第三,然后这时候呢,你也可以通过 d, e, s, c 的 方式来指定逆序进行排列, d, e, s, c, b 的 欧的代语句就跟后面的非常类似,你是指定使用那个, 这里是指定使用你来排序的一个方向是什么,然后这样选中之后运行一下,你得到的结果就变,就跟刚才是反过来的,看一下下面这里的一个结果。 simont 是 从大到小进行排列,然后这边的 这边的排序的一个标记呢是一二三,就是最大的排在第一位,然后第二大的排在第二位,然后第三最后的排在第三位, 这就是一个排名的一个结果。那么你为什么这个不直接使用排序呢?这种排名有一个好处,就是我这边的明细数据得出来了,然后我想要知道一下他的位置是什么,因为有时候我想要看一下他最大的那一个东西, 得到最大的这一个组别,然后然后有了这样的排名之后,我后面写纸查询的时候,就可以对他进行一个过滤,然后或者过滤最小的那一个,这样子 它的作用就是得到一个它的一个序数,序数就是序列的意思,得到它的一个序列,序列的位置, 然后有了这样的位置之后就可以进行后面的排序,然后需要记记住的就是一个它的一个基本结构,前面是一个加总的函数,后面跟上一个 over, over 里面跟上一个小括号,小括号里面就是有一个等条件。 那你可以加上 partition 呃键的组合呢?总共是这几个边罗列一下。一个是 partition by 表示分组,然后是 order by 示的是它加总的一个顺序,然后还有 rose 表示的是它加总的一个方向,一个加总方向的话就可以限定通过这三个参数呢,你可以限定你加总的 呃分组,通过这三个参数你可以确定你的分组,你的加总方向和你加总的一个时间窗口范围,我们管它叫真,然后 这样的限定的话,就可以通过这样的三个条件的限定来确定你能够得到的范围的数据。主要是讲了一个窗口函数,后面有机会的话也会再讲一下窗口函数和其他的一些括其他的一些应用。

很多刚接触嵌固式的小伙伴都问我,老师怎么样选择开发板,我结合我自己踩过的坑,我用过的板子,按照有一道难的顺序逐个给大家介绍一遍。小白可以直接抄作业,咱们小白要先找感觉,提升兴趣再说。打基础, 阿丁诺开发板纯零基础,不是电子专业的小伙伴可以先从阿丁诺下手,这个板子真的是太好上手了,不用咱们懂什么底层的原理,用现成的函数很快就能够做出控制灯,像一些简易的传感器控制这些小项目,它快速让你觉得倩诺是真好玩,特别有成就感。但是有个坑我可说清楚, 他把 l 口的操作,什么时钟配置这些核心东西都给你藏起来了,你看着能做项目,其实你根本不知道硬件是咋工作的,比如说集成器怎么配,外设怎么通信, 所以它就适合我们入门找找感觉,像长期做这行,你得往下学。我要单片机,推荐 stc 八九 c 五二 rc 入门,咱们想练这个真本事,可以从我要单片机开始。我自己当时用的就是 stc 八九 c 五二 c, 它便宜又耐造,资料还多。 最牛的地方是咱们将来不用库函数,直接操作计算器,你从根上就知道单片机是咋干活的,比如代码是怎么控制硬件的,咱们芯片之间是怎么通信的?外设通信协议是怎么玩的?不用花太多时间,两三个小时就能入门,点个灯 啊,串口显示一些数据,玩两个外设可以啦,通过我要打打基础,后边再遇到一些复杂开发版的时候,你也能够上手特别快,进阶的时候要练找工作需要的核心技能啦。 那咱们得换版子了,这些都是 itm 三二系列的开发版,我要打个基础之后全力冲 itm 三二,这是行业里用的最多的找工作必备的技能, 绝对和我好的同学纠结,老师,我是用还有酷还是用标准酷?其实标准酷现在早就不更新了,你直接学还有酷就行。提醒一下哦,当我们用还有酷的时候,你一定要搞明白它的一个调用的流程函数是怎么分装的,最终是怎么一步一步操作, 我就找到这个继电器了,你要不然换个其他牌子的开发版,比如给你一个恩智普的,我再给你个 e h 三二的,你就蒙了,无从下手。所以你把这酷寒舍的底层搞透, 一直跟到继电器这技术才算学到手。现在做项目可都离不开网络,要不说现在是 alt 时代吗?我们要搞物联网,搞智能家居,这 es 系列必须得学,现在比较火,国产芯片的性价比很高的, 现在国产化也是趋势,咱们新手可以先玩 e s p 八二六六,你别听人说,这东西不是过时了吗?对于咱们小白来说,它用简单的 a p 指令就能联网,能快速的上手做互联网项目,那学习效率真的是特别高。你练熟了之后,你再换 e s p 三二,推荐 e s p 三二 w 杠三二, 因为它能连 wifi 和蓝牙,双核两百四十兆赫兹,还有四兆的存储,那做智能家居,做穿戴设备都够用了,性价比绝了。想侧重做软件应用的朋友,你可以试试这个版, 树门派,三代必佳。虽然它叫树门派,但是和传统的树门派可不一样,它有一块六十四位一点四 g 赫兹的四核 amc 一 五三处理器,还带 wifi 蓝牙,配置够用, 而且网上的教程和案例特别特别多,适合我们学 linux 应用开发、连通外设,搞几个项目下来,你的实战能力一定能够明显提升的。要想涨工资,适配更多的岗位,做更复杂的项目,大家可以选一下 i t m 三二 f 四零七, 它能够学习 f r t s 实时操作系统,包括 l w i p 网络开发、 l v g l 图形界面,把之前学的一些单片机的知识、网络的知识都穿起来,我们再对接一个云平台,让设备能够连网上云, 这就是一个完整的 i o t 的 技术栈。掌握这个之后,咱们在工业控制或者是汽车电子领域当中的项目就都能应对啦,找工作的时候,你的竞争力直接上一个档次。大家想玩高性能的单片机,可以试试这款,这是恩智普推出的 imax r t 幺零五零,它的内核是 cortex m 七, 主频高达六百兆赫兹, i t m 三二 f 四零七的主频大概是一百六十八兆,所以恩智普的这一款,那可比 i t m 三二 f 四快多了,性能都已经接近高端芯片了,当然价格才三美元左右,性能基本上跟 a 七差不多,这个性价比真的是拉满,你看它功耗低,性能还强, 所以就特别适合汽车电子、工业控制这些高新领域。大家提前学了熟悉这款开发版,那你在求职的时候会非常有优势的,想长期发展的话, linux 必须得会, 我早年用过二四幺零二四四零。嗯,四四幺二,当年真的是太火了,像不少的手机,三星和联想 mate 啊,当时都用它。现在我刚推荐 st 的 一款 stm 三二 mp 幺五七, 这是 st 公司推出的 linux mpu 第一款芯片。听清楚了, st 公司我们一般认为它是做单片机的,但是它现在开始推出这种 mpu 芯片了,它这个结构非常的特殊,它是 a 七加 m 四的易购结构,主频是六百五十兆赫兹,加上二百零九兆赫兹。 你想它既有 a 系列,也有 m 系列,它既能学习 linux 应用开发、底层软件开发,又能练单片机实时系统,一个碗子能两个碗子使, 性价比真的是太高了。大家不管是学单片机还是学 linux, 用这一个碗子就够了。现在嵌用式加 ai 是 大趋势,大家想往高端走, r k 三五八八给安排它带高性能的 npu 就是 神经网络处理器,算力可以达到多少呢?六 tops, 每秒能做六万亿次的操作处理机器视觉、边缘计算,这些 ai 任务贼快, 而且像主流的 ai 框架,你像 pixlab, pixlab 这些它都支持。将来我们做图像处理或自动驾驶相关的项目都够了,学会它,那高新岗位还不得随便调?总结下来, aduno 能让我们找找感觉,提升对嵌幕式的兴趣。我要单片机,学一下计算机开发,知道硬件开发的核心本质。 s m 三二,练我们求职需要的核心本质。 s m 三二 f 四零七, linux 开发版 是拔高我们的能力,最后我们冲 ai 跟人工智能结合,就要选高端吧,天赋是得靠练,大家必须要多做几个实战项目,那技能自然就扎实了。希望每位小伙伴都少走点弯路,越学越顺利,加油!