如果你在加拿大街头看着天上挂鞋的,你就不要那个手欠了,非得弄起来。这种情况在我这一般有两种含义,像这种一双一双挂的,他就是帮派划分领地的界限,遛个狗吧,狗撒尿啥意思他们就啥意思。所以这样就一目了然,既方便了大家,又提醒了 游客,电线杆子往左就是陈浩南管的六区,往右这条街就是詹姆斯赵红兵管的七区。在我这个城市,其实存在两种秩序的, 加拿大这些帮聚会还专挑洋气罪重,大白天就聚地上地下,两种秩序相濡以沫。第二种含义就是一串上能挂好几双鞋,你看这就是三双,这其实就是交易信号,像这大哥买卖做完了,只有他才能把那三双鞋拿下来,而且也不用等到晚上下午交一点加拿大土特产啥的, 普通人在加拿大见到他们的也不用慌,其实因为你都没有他们动你的价值。哎,这不知道是挂鞋还是取鞋,反正莫博桑说过,烫头美甲不能少,但分寸一定拿捏好, 不然游客八字受不了。你看我就非常有边界感啊,就就不,不敢过去,我之前见过好几位,人家搁那正做买卖呢,他站鞋里拿石头往上溜,那个鞋不要,千万不要,你这辈子也算吃上四个菜了。
粉丝260.1万获赞4792.9万

你知道普霸叠叠乐吗?什么叠叠乐?两个小时刷完七月之药,顺便还能摸大红易富,求教,想学想,真想学包真的,那比例你懂我意思吧?哦哦哦,你来出币比例绝对史无前例的高。那你听好了,首先裸装进普霸,直接找最近的藏宝堆,每把只挖一个。这不和之前的攻略一样吗? 打岔,我们优先摸白色或绿色的纸条,摸到了直接塞保险箱带出去,然后自雷下一把。下把摸到如果是同级或高一级的纸条就进行替换,塞进保险箱,然后自雷下一把。如此往复操作,直到挖出钥匙,就可以开始下一个循环了。 途中出红了也一样。这么简单吗?我马上去试试 two hours later。 我 靠,真有用。

你需要了解的逻辑学常识。知识诅咒,想象一下,你学会骑摩托车之后,很难再回到不会骑的状态。当你能轻松上帅后,你也不会急头白脸的合成一些外强中干的卡组。 事实上,当你掌握了某种知识或者技能后,你就很难回到最开始那个无知的状态。此时你再和一个懂得没你多的人交流,你会发现沟通起来存在一定困难,你无法再次以不懂的状态与之沟通,你失去了不懂的能力,这就是知识诅咒。听一下这段节拍, 你能猜出这是哪首音乐的节拍吗?其实这是大家耳熟能详的德国音乐莉莉玛莲, 我在打节拍时已经认识到了这段前奏的旋律了,而只听过歌没有打过节拍的朋友未必能第一时间分辨出来。这也就是很多时候与人沟通时觉得一个很简单的点讲很多遍对方也没能明白, 这不是你在对牛弹琴,而是你被知识诅咒了。你知道的越多,反而知道的也就越少。生活中领导者认为我已经说的很清楚了, 下属却在执行,是盲人摸象。这种我以为你懂的幻觉是大多数理解偏差的根源。因此,在有代差的沟通中,我们需要不断询问对方的理解程度来修正自己的输出偏差,这样才能保持同频,确保你们能对上双方的节拍,从而真正的实现有效沟通。


这些歌单后缀你都知道吗? feet 特邀合作歌手 class o s t 影视原声 demo 小 样 original mix 原始混音版 explicit 或者 clean 消音处理版 instrumental 纯伴奏版 o t 原曲 deluxe 豪华版 cover 翻唱版 live 现场版 extended mix 加长混音版。

到国外吃饭是吧?想感谢一下厨师。 hey, you are a good cooker。 炉子,炊具,或者说白了,现在我们通常把它翻译成叫电饭煲,是吧?这词容易错在哪里?听好了啊? 很多同学会把 cook 当作是厨师,对, cook 是 厨师吗?厨具,厨具,它特殊的对吧?因为构词法,一个动词加上 e r 确实会变成名词,并且是表职业的,对吧?随便举几个例子呢, teach, teach, 不知道你加了 e r 变成 teacher 知道了啥意思啊?老师,哎,对了, drive 加上 e r, 哎, drive 是 动词, 开车加上 e r, 开车的人就是司机,对吧?唯独 cook, 你 加了 e r 变啥了?厨师,你不能是厨师啊,厨师的名词还是 cook。 cook 既可以做动词也可以做名词啊,你别到国外吃饭是吧? 哎呦,吃的好,好想感谢一下厨师。嘿, you are a good cook。 哈哈哈,厨师不不开心了是吧?我是很好的电饭煲,闹笑话了啊, cook 的 名词,厨师还是 cook。

那天看评论区有人问我有没有在国外遇到 crush, 快 快好多次了。哎呀啥叫 crush? 是 不是感觉长得挺好看的。遇到过很多次。对,没有发展就是单纯看人。哎呦真帅。 结束了每一个都不能发展,一旦开始发发展 crush 就 变成就变成 crush 了 rubbish。 那 天我不是看那个 偏爱之恋吗?那个素素说,嗯,他觉得那个什么什么,他现在的爱情观就是就是当你真正的发看见一个人就知道他是什么样的人,还愿意,只是熟悉的意思对吧?就是知道他本性对,然后 还愿意还是喜欢他,还愿意接受他,然后他觉得这就是好的爱情吗?然后那个男嘉宾就问他说你一直都是这样吗?他说不是,以前他发现之后就开始嫌弃。哈哈哈,什么意思我没懂。就是他一旦发现就是这个人跟他想象中不一样,他就会嫌弃这个人。对,一旦发现他真实的他真实的对方, 那那他就没改变了。那他原来是没遇到吗?那后来遇到了以后不就能接受说明是真喜欢吗?那说明之前就是不喜欢呗,对吧?还是说之前不管他遇到喜欢不喜欢都这样, 他现在能容忍别人是他演的,他装的,他在逼自己接受。不是吧,就是他说这个好像就是什么爱的能力,就是说当以前你喜欢一个人,但是你很喜欢他就是, 但是现在就是可以接受并且改正包容包容他。对啊,那这样说这个逻辑通了。那不跟你说我之前跟你朋友掰了。就是他说了那句话呀,他说我之前跟我一个朋友 说我新认识一个朋友然后我说那个朋友对我特别好可喜欢我什么其实我没有说炫耀或者怎么着真的就单纯的分享一下啊我知道讲故事啊什么的然后他来一句那他还是不太了解你吧。哇塞当时听完挺好蒙了他就是完全否定你了呀。对他那他的意思就是人家了解我就不喜欢我了是不是所以从那一刻开始我就知道我俩再也回不去了 后来我就再也不跟他玩了这是他下一次脱出这样脱口而出的就是真实的我后来有问过他这件事他跟你说他说他没说过这句话他说不记得他说从来没说过他不可能说这种话但你说这种话能让我印象这么深刻绝对是说了对不对。对啊 所以哎这就是对你已经有意见了然后呢且是从心眼里这么觉得的就他真觉你不好了那就没必要再玩一块了是不是而且我们俩玩了很多年所以我觉得呃 友情的深度也不应该靠友情的长短来衡量对吧然后呢这就叫什么人说啥来着什么什么投入成本 不成不参与决断沉默成本沉默成本不参与决对你会觉得哎我们俩玩这么多年我实在舍不得跟他掰或者怎么着怎么着的没有必要所有关系都是只要你觉得不爽了立刻掰。对立刻掰你就立刻爽是你越不掰你就越爽因为发现拍了之后前所未有爽轻松素对我每次都这样对 你赶紧的喷雾给他喷点水哎你有用这个定妆喷雾吗。暂时没用。有用吗?特好用而且很细也是我在乌鲁木要买的。 没少买啊。跑韩国去。不是说了吗,逛了十分钟花了一千块钱。哎呀妈呀啥玩意。这闭眼萌萌啊。哇好细啊。对啊对吧妈跟没喷似的。错了,这有这么细的。 哇,好好用啊。这叫啥? so natural。 哪个是名儿啊?而且特便宜。你知道这一大罐多少钱吗?三十也没那么便宜。哈哈哈其实我每嗯差不多,我每次让你猜你都会猜巨便宜猜巨便宜。 挺好用的挺好用的。刚刚那个我说你有闽南,你最喜欢的类型不是你,你再分析分析。我呢?你再总结总结。我不是,我一总结了就感觉是体育生吗?真的就是那种青春的。哦,那我觉得确实是一个点啊。青春,但不是体育生,是青春, 就是男大的那种感觉。我喜欢,但是不是那种很清嫩很嫩的那种,我不喜欢。嗯,很可爱的那种,但是那种比较有朝气的那种。对的,不是朝气,活力朝气。 所以其实雷子我是能欣赏,但是并不是我特别的喜欢的类型。孙天宇是我特别喜欢的类型。 对啊,这是我闽南的唯一一个特点,但是没那么具体。你知道我跟我朋友待久了,我就可以大致大致知道他们的类型。我有个朋友就特喜欢那种腿很丧看起来有点要死不活的男的。对,就是那种日系男。不都这样吗。就有种年轻时那说的,现在说的都是这种 外表是吧。就是氛围吧那个状态,但是你也不了解他们性格,要说外表的话,你小时候喜欢这种外表?小时候就。对啊,小时候喜欢帅的喜欢阳光的喜欢能力强的 现在喜欢人品好被伤害之后就这样喜欢人品好的喜欢没那么爱嘚瑟的比较低调的 选有能力有能力的人太重要了。也不是说要多重要就是我就要跟你匹配才行 你说是吧就他身上一定要有你欣赏的点。那当然但我说的欣赏点不是说他会照顾你他会怎么样他特别有耐心我绝对不是那种欣赏点欣赏点是真正那种 hard skills 或者 soft skills 你 懂吗就在简历里写着呢。那我真的就是这样 解决问题的能力对你要有对还有猫肌 texting 我 去解决问题的能力特别重要。对我特别烦的就是那种不是说难的啊是所有事上比如像我工作上我自媒体上或者生活中我特别讨厌那种一遇到事之后 怎么办呀不是怎么办那那算了吧。那取消吧。那不去了这事就完了。放弃型放弃型。对对对对我特别是放弃型 因为我是属于那种就是比如这事他错了或者砸了我就想有什么补救措施能让他赶紧去先把这事解决发出来或者怎么着的你知道吧他们就不是 是你知道有一个特搞笑我上大学的时候我们上课我朋友突然手机收到一笔扣款就 那个什么自定的自自己预定的那个 maxstore 还是什么东西我忘了扣了三百多哎妈大学的时候嘛大一还是一笔巨款呢。嗯然后他就突然说崩溃了他说这怎么办呀但是我然后他就给我看他的那个扣款记录我当时就笑了,你知道为什么笑吗? 就这个银行卡扣完余额不足,换了另外一个银行卡,接着扣接着扣,然后中国银行扣款不足,然后看,然后支付宝扣款不足,扣到了花,最后扣了花呗三百三百五十几块钱。然后我当时第一反应就是笑,然后我朋友巨生气,生你气?对, 觉得你笑了,他觉得我笑了,他说这种事情发生在你的身上你肯定笑不出来,你笑的出来啊,你手机被偷了,你还露的出来呢。 然后我当时可以理解他,但是我当时他就一直在那焦急吗?嗯,然后我当时第一反应就是去搜有没有人,类似怎么解决,然后他就在那生气,然后结果最后还是我帮他搜,搜出来可以退款。 你说我,你说我招谁惹谁了?你说像我,虽然我笑,但是我觉得当当大家就是当时想就是解决问题,而不是像那个 无头苍蝇一样在那情绪上的问题啊。但是我觉得有些人就是像我朋友他们那种,就是需要你先解决他情绪上的问题, 然后再去左着手解决。你这不就那些人搞对象的吗?说什么啊,女生也不需要你当时的道歉,我只是希望你先安抚我的情绪,你先让我当,你先让我整个人 come down 下来,你再说别的其他的事情之类的。 哎,我觉得这种就是比较敏感的人需要,嗯,以及内核不太稳定的人,因为你的情绪干嘛非得让别人来给你?那什么呀,你高不高兴是你说了算,我生气是我说了算,我不生气也是我说了算,就算你把我安抚了,我还是生气。你说也没用啊,我觉得只有真的是别人的错才需要别人来安抚, 因为世界上没有真正的感同身受,共情能力比较差,万一我共情能力就挺差,这不就是顿感力吗?是,你看人家那谁,并且哭了,你还乐呢,你就老乐,二逼。你不是骂我了吗?上次人家有同学哭,他都没发现。 我是没挖哭他没发现是你。我看你表情不对了,然后我一进来我就看到那个女生,哎呀妈呀,不对劲呢,那眼窝红红要哭,我就不敢说话,我就不是不说话,我就我就我就敢安慰人家,然后他,哎哎你,你为啥笑人?我没笑啊,我是看你,我说你表情怎么这样,然后我转过头一看,但你当时在乐呢, 你还在说什么笑话还是怎么着?在说什么开心的事情?什么时候啊?我是这,但是我确实没有第一时间发现。我是看到你表情不对之后我才转转过头发现的。你看这个紫阳姐姐就一看是从小在中非常幸福的家庭里长大啊,不需要察言观色,不需要看别人的情绪是不是。 哎,没背手骂,被你爸骂,被我爸骂情商超低情商超低,我爸说我没有朋友,哈哈哈哈,我爸觉得我骄傲。你爸好狠啊。你爸有点狠吧,我说。

今天带你一起来扒一扒那些全球顶级 ai 大 佬的名字背后的神仙脑洞。首先登场的是 ai 届的村长 chat gpt openai。 当初取这个名字的时候,压根没想过这玩意能火遍全球。名字取的就像给自己家的猫取名叫会抓老鼠的哺乳动物一样,简直就是理工科直男,哦不,钢铁直男的典型代表。 g p t s generalized pre trained transformer 演绎,也就是深层式预训练的 唤气,是不是非常的绕口呢?那么接下来呢,是谷歌的 gemini, gemini 呢,是双子星的意思,在拉丁文里面。那么呢,它的来历是谷歌在准备这一款产品的时候,把自家最顶级的两个实验室 deepmind 和 google brain 强行合并到了一起。 谷歌是想告诉世界说,我已经把我们家最聪明的两个脑袋都拉出来缝在一起呈现给大家啦。 jack jimmy 在 占星学中有博学和善变的翻译一下就是,我不仅懂得多,反应还贼快。那接下来第三个 cloud, 那 么这个呢,是为了致敬心虚学之父克劳德香浓。相比较于 chart gpt 的 冷冰冰, cloud 间就有人味多啦。 咱们聊完了国外的洋名字,再来抛个头,看看国产的 ai, 那 瞬间就觉得浪漫的一塌糊涂。首先呢,是百度的文心一言,其中的文心取自文心雕龙,是中国的第一部文学理论巨作。那么一言呢,取自君子一言驷马难追,君子一言快马加鞭的意思, 合在翻译成人话就是肚子里锦绣文章,开口就是金句。下一个是阿里的通易千问,那么也就是之前过年的时候很火的一分钱奶茶的那个 app, 通通易是通,小易里千问是能回答一千个一万个问题。我觉得这个名字也非常的马云范,主打一个有求必应,就像坐在神灯里的精灵一样,甭管你有啥刁钻的问题,问就完了。第三个叫 mini max, 取自数学和博弈论当中的一个经典概念,最小化最大的 minimize the maximum loss。 那 么甭管什么算法,我存在的意义就是帮助你用最小的代价解决最大的难题。 最后,怎么能没有豆包呢?豆包的逻辑特别简单,名字越土,战斗力越强。名字越简单,用户粘性越高。想 想一下,晚上你如果有心事,或者只是一些很小的举手之劳,可能啊,不太方便,麻烦这些大模型。 但是呢,从找豆包开口,你绝对不会觉得尴尬,也不会担心他嘲笑你的问题太过于幼稚。这就是字节的群众路线,管你什么 ai 不 ai, 好 使好叫好,清净 才是真正的王者。在这个算法奔涌的时代,名字取得好不好听不重要,能真的懂你,帮你陪着你,谁才是真正的王者?如果是你,你会把后半辈子托付给哪颗心,又或是哪只包呢?关注我,带你拆解更有趣的赛博世界,咱们下期见!

好,来看道场景题啊,如何实现一个无感刷新 token? 这个题的关键是啥呢?关键就是你的读懂题是啥意思?我们平时说什么无感刷新 token 啊,一般来说都是在一个单点登录的环境里边, 如果说你不是单点登录的环境的话,这件事呢,往往是无意义的。但是呢,咱们短视频就那么点时间单点登录,讲不了啊,我只能说将来呢,去新开一集来讲这个单点登录。因此呢,我这一块呢,就单把这个刷新 token 这件事给你讲清楚哈。 什么叫刷新头肯呢?我这里举了个例子哈。呃,这里点这个按钮呢,就登录,然后我这里没有去弄什么账号密码啊,就点一下登录成功了, 模拟嘛,好点登录,登录成功了,那么登录成功之后呢,服务器那边呢,会给我们两个头肯啊,我们看一下网络请求哈,登录成功之后,你看服务器给我们的响应结果哈, 响应头里边他会给我们一个头肯啊。 authorization, 这里边是第一个头肯,第二个头肯呢,在这就是刷新头肯啊,两个头肯。我们通常呢把这两个头肯呢称之为一个叫做短头肯啊,就这个东西是短头肯,一个呢是长头肯,就是下边的东西啊,就登录成功之后,服务器会给我们两个,你自己把它保存好啊,可以保存到本地存储里边是吧? 那么为什么叫短头啃?为什么叫长头啃呢?短指的是它的过期时间短啊,一般来说在生产环境里边就是十多二十分钟啊,就过期了。我这里呢设置的时间很短啊,为了模拟吗?比如三秒钟就过期了,而另一个长头啃呢,它的过期时间就很长,比如说一周半个月或者一个月 啊,它的过期时间比较长,那么这两个头啃分配来做啥事的呢?首先说这个短头啃,短头啃呢,它的作用就是去换资源的,就是有一些受保护的资源,你必须要登陆成功之后才能拿得到的资源,那么就需要用短头啃去换啊,比方说,像我们这里啊, 请求受保护的接口,那么这里呢,就是去换资源,那换资源的时候呢,就要用短头肯去换啊,咱们重新登录一下,然后换资源,你看拿到受保护的资源了,怎么拿到的?就是要用短头肯去换啊,我们这里可以看一下啊,看下这个请求,请求的时候我们发的是什么?发的就是短头肯发到服务器, 服务器那边去审核,这个短头肯审核通过过后呢,就会给我们响应一个正常的资源。反之呢,如果说短头肯过期了,你看就拿不到资源了,看下边控制台啊,拿不到资源了, 好,这是短头啃的作用啊,换资源的,然后长头啃是什么作用呢?长头啃的作用就是短头啃过期过后呢,用长头啃去换这个短头啃啊,换新的短头啃。 哎呀,说到这吧,有些同学就开始莫名其妙了,你这干啥呀?为啥要这样去整啊?你直接用长头啃不完了吗?干嘛整个什么?一个长一个短?我这里就没法给你解释,因为你不懂单点的路啊,我咋给你解释啊? 你懂单点登录你就不会问这个问题了。那只能说我将来开一集短视频啊,来讲这个单点登录,你讲完明白为啥了?那现在就不用去管他啊,反正就是这么个情况。那用长头等去换短头等,比如说现在,你看那个短头等过期了,是吧?拿不到资源了,那怎么办呢?我就刷新头等,刷新头等的时候,那么就相当于去换这个短头等,你看一下网络请求啊, 请求的是这个 refresh 头肯这个地址是吧?那么这需要跟服务器约定好啊,那么发的时候呢,这一次啊,就把长头肯给他带过去,然后服务器那边呢,就会给你换一个新的短头肯,就这么回事,咱们再来一次啊,短头肯过期了,刷新换短头肯换了,过后呢,再来,你看是不是又可以访问了啊?不能访问了,又去刷新一下,然后呢又可以换了,对吧?就这么回事。 那么现在呢,问题是,请问如何实现无感刷新投屏?就单点登录,对于前端来说你做不了啥事啊,主要的复杂度在后端,前端稍微有点复杂的,那么一丢丢的东西,就是这个刷新投屏了啊,特别是无感刷新。什么叫无感刷新呢?就自动刷新,你不能说每次短投屏过期了都要让用户去点一下,哪受不了啊?这个你要让他自动完成。 那么要实现这件事呢,首先一个前提条件就是你得能够实现手动刷新。你手动刷新啊,手动刷新怎么实现 啊?我这里的时间方式呢,是去用拦截器啊,就是我们用了个 access, 给他创建一个实体,给他个基地址,然后呢,每次请求的时候尽量的把短头肯给他带上啊,这个短头肯来自于哪呢?来自于我这里封装了几个 api 啊,都是访问本地存储的。把一个短头肯放到本地存储里边,把一个长头肯放到本地存储里边, 就这么几个函数啊,那这里呢,我创建时的时候,我每一次请求我只要有短头啃,我就从那个本地里边把它取出来放进去,没问题吧?然后呢,我给他设置了一个响应的拦截器,就是请求的时候我可以带头啃,那你给我响应的时候呢,只要你含了头啃,我就给你保存下来,比如我这个判断,只要你的响应头里边有短头啃,那么我就给你放到本地存储。 然后呢,更新一下下一次携带的头肯,对吧?下一次就要携带新的端头肯了。好,如果说你服务器响应的时候有长头肯的话,那我也一样把它保存到本地存储啊,就这么两件事,一个是请求带头肯,一个是响应纯头肯,对吧?就写这么个拦截器。那么将来呢,我们再去做一些业务的请求的时候啊, 你看下什么登录啊,就直接去做,还有就是换保护的资源啊,就直接去做就行了啊,因为有拦截器,有头肯呢,我给你存起来。好。然后呢,这里我还设置了一个方法啊,就是刷新头肯的方法,在另一个模块里边,这个函数也很简单, 就是对应到这里啊,点击按钮刷新头肯,点的时候呢,就调这个函数,我就去访问刷新头肯的地址。然后呢,这一次呢,我就不可以带短头肯了,而是带什么长头肯,你看 get refresh token, 把长头肯给带过去,那么你这样子呢,你就可以换短头肯了是吧?服务器这边短头肯一过来,是不是又被这个拦截器这边的拦截器所拦截?短头肯又存储起来了是吧?好,这就是手动刷新哈。 我现在担心啥?我跟你说,我担心的是有些同学连手动刷新都实现不了啊。好,那就假设你手动刷新没问题哈,那么接下来是无感刷新的。 无感刷新的第一件事就是代码写到哪,你得把无感刷新的逻辑写到哪啊。问题是写哪啊?那你想什么时候无感刷新?一定是服务器那边我去换保护的资源的时候,服务器告诉我换不了。你短头肯过期了, 是不是?拿到这个响应结果过后,我要去做刷新,因此在哪里?在响应的拦截器里边,是不是在这判断一下啊?如果说头肯过期,那怎么办?就要去无感刷新, 那怎么无感刷新?无非就是第一步,用长 token 换短 token, 对 吧?这第一步,第二步,重新请求对不对?换了短 token 之后是不是又可以用了?重新请求就这几件事,好,一个个来吧。首先,我怎么知道 token 过期了呢? 你看,就把大问题分件成啥小问题了是吧?好,头寸过期,那么来判断,那这个东西呢,跟你公司的一些接口规范有关系啊?你总之去看一下你的接口文档,一般都是统一的,就是头寸过期呢,他一般会给你一个统一的响应码。呃,比方说吧,咱们这的响应码是四零幺对吧?扣的为四零幺。所以说呢,你这一块呢,就直接来一个 race data 点 code 等于四零幺,那么这个时候呢,就表示说头肯过期了,好,就进入到这里边的逻辑,好,接下来又完成这一步,你看就是一步一步去完成。你说个代码最终写出来有多少呢?也没多少啊,就这么几行,而且整个过程呢,也拥不到什么一些稀奇古怪的玩意,都是一些基础的代码。所以说我一再强调,开发能力是极端重要的啊, 就是我们不去考虑什么框架,不去考虑什么第三方库。你学的 gs, 我 也学的 gs, 他 也学的 gs, 那 都是以同样的 gs, 都是同样的语法判断,都是同样的复循环,同样的函数写法,那为什么同一件事教会不同的人,做出的结果就完全不一样呢? 就是开发能力啊,开发能力决定了你是不是能够灵活的去使用你的知识来解决问题,而这种能力的培养。好好来看我的大师课,大师课是完全免费的哈,带你去完成了。在大师课里边,我会给予几个效果案例,通过这几个效果案例,我会告诉同学们遇到一些复杂问题的时候,如何去分析分解,如何去写出高质量的代码。 而且大师课里面还不仅仅是一些开发能力的培养,还包括了前端最重要,最核心,最能够直接影响你薪资高低和职业发展的知识。像什么时间循环啊,有那些的渲染管限啊,框架的原力原码优化啊, 你听听这些知识,你就知道大师课的分量有多重了。如果说你听到了我刚才说的那些知识,你还没有感觉出大师课的分量的话那你就更加应该看这个课了。那说明有点恐怖啊你连什么东西重要和什么东西不重要都分不清楚。 总之只要你在前端这个行业里面想谋求发展想站得住走得稳发展的好大师课你是一定绕不过去的。他是必修课啊。关注这个课呢目前可以免费领啊。怎么领?在咱们账号主页点击头像进入账号主页根据提示领取。完事了啊 好说回来啊。第一步用长头楷换短头楷怎么弄是不是调这边那个方法刷新头楷的方法对吧。他不就在换吗。好就调这个方法啊把这个方法导入进来然后呢在这边去调用它啊。这方法是异步的。因为换的过程是异步的吗需要网络请求啊。等待一下啊等它换完换完了过后呢接下来第二步是不是可以重新请求了。怎么重新请求 是不是就去调用这个 ins 的 请求方法对吧。传入请求配置是不是跟目前那个失败的请求是一样的。你这个请求失败了吗? 为啥失败?因为短投很无效了呀。我去换了,换了过后是不是可以重新请求了所以说我要传用什么配置。就是当前请求的配置。把这个请求再来一遍好拿到这个请求的结果是吧然后呢把它返回那就写完了保存看一下子。咱们捋一捋啊。先登录登录成功。走走走好这里报错了啊报错的原因是这个变量名字重复了啊。那我就 r 吧 啊再来一次啊登录走走走换换换换换换好,这里啊,你看失败了是吧失败了过后他不停的刷新了,他停不下来了。这车血脉一样。那为啥停不下来呢?你想一下为啥停不下来? 问题在这。好,我告诉你,问题在这了。能不能想到问题在哪?为啥在这?你屡屡啊,现在请求失败了,对吧?为啥失败?因为短头啃失效了。那我这里去换了对不对?换了短头啃,再次请求的时候,你传入配置是啥?还是之前的请求配置?而之前的请求配置里边包不包含请求头?是包含请求头,那么包含请求头里边的请求头里边是不是包含的还是旧的头啃啊? 是不是?所以说这一次请求还是失败了,所以被这个拦截器拦截,又回到这了,又失败了,又去换一换的话,再请求又失败了,然后又去换,然后又失败了,又去换,就无限循环了。所以呢,这一块你要干嘛呢?你要去改动一下这个配置里边某一个地方哈?什么? headers 里边哪个地方? authorization 该改成啥? 新的短头坑要从本地再去拿一次新的短头坑,对吧?因为这一步换完短头坑过后,是不是保存到本地去了?新的短头坑保存到本地了,因此这里要重新拿一次啊。把这个配置改一下,不然的话他还是用的旧的短头坑啊。好,再来一次啊, 登录成功,走走走走走走走走。你看是不是自动刷新了对不对?不需要手动去刷新了对吧?发现那个短头坑过期过后呢,他就会自动去换好,这一块好像没啥问题了。打代码写完了吗?其实还没有,还有一些这种情况还有问题?什么问题呢?就是长头坑也没了, 或者是压根就没登录,那都是一种现象是吧?就 type 没有或者是失效了,也就是啥情况呢?我们把 本地啊, local source, 本地的所有的给它全部清空。那你看一下,现在 type 也没了,然后点击是不是又出现死循环了?又为啥呀?那我现在告诉你,问题在两个地方,一个在这,一个在这。 我们先说这这个判断你看出有啥问题?没啥问题啊,就是你去换长透痕的时候,是不是也可能会请求失败啊,对不对?这一块换长透痕的时候,如果说长透痕也无效的话,你看一下长透痕也无效的话,他也给你返回的是四零幺,所以说这一块是不是要排除掉长透痕的情况?所以说这里的判断应该怎么写?透痕无效了, 并且呢,不是针对刷新透痕的请求,如果说你刷新透痕也无效了,直接走这里就可以了。因此呢,这里条件啊,不是针对刷新透痕的请求。 那我怎么知道它是不是针对刷新 token 的 请求呢?有的人说可以看这个请求地址,呃,倒是也没错,不过呢,这样的写法不是很好啊,因为这个刷新 token 的 所有逻辑啊,我都是封装到这个模块的,因此在别的模块里边去写一些什么刷新 token 的 地址的话, 就不满足高内聚的原则了。因此呢,我们这一块是不是刷新透的请求,我们可以把它这里封装成一个函数,叫做 is refresh token 啊,封装成这个函数,那么这边呢,就去导入这个函数就可以了啊。 is refresh token, 那 么这边呢,只需要去通过这个函数来判断是不是刷新 token, 如果说不是的话,我才进入到这边的逻辑, 是吧?好,那么这边这个函数怎么写呢?其实很简单啊,你爱怎么写怎么写,你可以通过 u i o 地址来判断,因为都是在同一个模块的啊,就无所谓了,高内域了是吧?也可以呢,通过一些属性来判断,比方说吧,我们可以通过一个配置啊,一个指定属性,到时候我判断的时候呢,你把这个整个的请求配置传给我,我判断一下这个属性就完事了啊,非常简单,对吧?就内部实现,那么这边呢,我们就可以把这个请求的配置给它传过去, 好保存一下啊,那么这个判断这一块的逻辑呢?就正常了。好走,你会发现了,他还是无限循环,但是这一次的无限循环跟刚才不一样啊,刚才是卡在这,是吧?那么现在呢?卡在哪呢?卡在这,为 啥卡在这呢?你琢磨一下吧,刷新投屏完了过后,我在这里是不是不知道他刷新成功没有?是不知道啊,他有可能成功,有可能失败的,那如果说刷新投屏失败了,我还需要走后边逻辑吗?就不需要了。所以说在这里啊,我们还需要去返回一个结果,就刷新投屏这一块,还要返回一个结果啊,拿到他的响应结果, 然后呢?返回啥?返回这个响应结果里边的 code 是 不是等于零啊?等于零的话就成功了。因此呢,在这边啊,我们就可以通过这个返回结果来知道他是不是成功的,如果说是成功的话,说明刷新成功了,刷新成功了过后我才去重新请求, 变成这么个逻辑了,然后否则的话,说明长透也过期了,长透也过期是要跳转到登录页了,或者是一些别的提示啊之类的,随便去登录了啊,比方说我们这里呢,就打印一下吧,跳转 登录页好保存,你看一下啊,现在呢?直接点是不是刷新 token, 但是刷新失败了,对吧?调整到登录页啊,再点对吧登录页了,好,然后就让他去登录,那么登录成功了过后是长头可有效了,然后就可以去访问资源了,对吧?可以自动刷新了,看到没,这个逻辑又通了。好,这就是 token 无感刷新的实现过程啊,当然我这里只是实现了一个大致的价值。 正儿八经你要去在公司里边去写这一块的话,你还要考虑到更多的逻辑,比方说你可能考虑到一些极端的情况,病发的情况是吧?比方说一秒钟之内 发了一千个请求,但是此时此刻短头肯都过期了,那是不是这里要刷新一千次,因为有并发症,对吧?所以说这一块呢,也还可能会做一些什么节流啊,或者是头肯刷新唯一化呀之类的事情啊,你们自己去做啊,这方向就是个方向。