<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[bdmh的专栏]]></title><description><![CDATA[QQ:515840062]]></description><link>https://blog.csdn.net/bdmh</link><language>zh-cn</language><generator>https://blog.csdn.net/</generator><copyright><![CDATA[Copyright &copy; bdmh]]></copyright><item><title><![CDATA[Android：registerForActivityResult]]></title><link>https://blog.csdn.net/bdmh/article/details/135763141</link><guid>https://blog.csdn.net/bdmh/article/details/135763141</guid><author>bdmh</author><pubDate>Tue, 23 Jan 2024 10:49:56 +0800</pubDate><description><![CDATA[中我们提到过Fragment中的onActivityResult已经废弃了，推荐使用registerForActivityResult去注册一个ActivityResultContract契约，从而启动一个forResult的Activity来达到目的，所以这里就看看这个流程是如何进行的。在MainActivity执行commitNow的时候，就会执行到Fragment的performAttach方法，这里改变了mState的值。对于接收返回的result，道理类似，大家可以根据断点堆栈了解一下。]]></description><category></category></item><item><title><![CDATA[Android：FragmentActivity]]></title><link>https://blog.csdn.net/bdmh/article/details/134922726</link><guid>https://blog.csdn.net/bdmh/article/details/134922726</guid><author>bdmh</author><pubDate>Wed, 03 Jan 2024 09:55:21 +0800</pubDate><description><![CDATA[平时我们在Fragment中startActivityForResult一个Activity后，会使用onActivityResult来接受返回结果，那么在较新的androidx中，Fragment中的相关操作已经废弃，虽然还能用，但已经提供了更好的接口去实现了。FragmentActivity中其它的方法，基本都是和生命周期相关，也比较常见，比如onCreate，onCreateView，onResume等，大家自己看看就能理解了。上面这些代码，大家打上断点，操作过程中就会看到它的来龙去脉。]]></description><category></category></item><item><title><![CDATA[Android：FragmentHostCallback]]></title><link>https://blog.csdn.net/bdmh/article/details/134940983</link><guid>https://blog.csdn.net/bdmh/article/details/134940983</guid><author>bdmh</author><pubDate>Tue, 12 Dec 2023 10:28:22 +0800</pubDate><description><![CDATA[对于这几个属性是如何传进来的，就要说到FragmentHostCallback的子类HostCallbacks，HostCallbacks是FragmentActivity的内部类，FragmentActivity中有一个属性，会自动创建HostCallbacks对象。官方的说明如下，它整合了Fragment持有者的操作，Fragment可能被任何对象持有，比如Activity，为了管理这些Fragments，提供该类，重写方法去适配持有者。这样整个流程就通下来了，包括权限的申请回调也在这里。]]></description><category></category></item><item><title><![CDATA[Android：BackStackRecord]]></title><link>https://blog.csdn.net/bdmh/article/details/134714343</link><guid>https://blog.csdn.net/bdmh/article/details/134714343</guid><author>bdmh</author><pubDate>Thu, 30 Nov 2023 16:40:28 +0800</pubDate><description><![CDATA[BackStackRecord：fragment回退栈，继承自FragmentTransaction，并且实现了OpGenerator接口，OpGenerator接口用来添加或弹出事务的，后面会提到。大家注意第一行代码，判断事务是否提交，已经提交就会抛出异常，而mCommitted被置位true以后，是不会再有置为false的机会了，所以如果你重复使用同一个事务进行commit，那么第二次必然报错。commit，非立即生效，事务会被添加到队列，交由FragmentHostCallback（ 《]]></description><category></category></item><item><title><![CDATA[Android：FragmentTransaction]]></title><link>https://blog.csdn.net/bdmh/article/details/134669296</link><guid>https://blog.csdn.net/bdmh/article/details/134669296</guid><author>bdmh</author><pubDate>Tue, 28 Nov 2023 17:03:23 +0800</pubDate><description><![CDATA[上一篇我们大概介绍了FragmentManager的大致工作流程，知道了每个动作都会添加到Op队列里，并由FragmentTransaction进行管理，那么我们就来看看FragmentTransaction的具体内容。最终调用父类的addOp方法，创建了一个Op对象，并传入OP_HIDE值和要操作的Fragment对象，然后将其添加到mOps列表中。在这些值里面，我们看到了非常熟悉的一些操作，比如add，hide，replace等，每个动作都对应一个值。有了值，就会为每个动作分配定义一个对象。]]></description><category></category></item><item><title><![CDATA[Android：从源码看FragmentManager如何工作]]></title><link>https://blog.csdn.net/bdmh/article/details/134648136</link><guid>https://blog.csdn.net/bdmh/article/details/134648136</guid><author>bdmh</author><pubDate>Tue, 28 Nov 2023 17:02:10 +0800</pubDate><description><![CDATA[一个Activity中，在某一个容器中，更换不同的Fragment，从而显示不同的界面，这个场景相信大家已经非常熟悉了，也知道Activity是通过FragmentManager来管理嵌入的Fragments的，所以今天就来看看FragmentManager是如何工作的。当添加完一系列的动作后，操作并没有生效，我们需要调用commit或者commitNow来提交事务，才能看到最终的结果。这了出现了一个HostCallbacks，继承自FragmentHostCallback，看看它的初始化。]]></description><category></category></item><item><title><![CDATA[Flutter：安装依赖报错doesn‘t support null safety]]></title><link>https://blog.csdn.net/bdmh/article/details/134247223</link><guid>https://blog.csdn.net/bdmh/article/details/134247223</guid><author>bdmh</author><pubDate>Mon, 06 Nov 2023 15:27:29 +0800</pubDate><description><![CDATA[大概的意思是，你当前的系统sdk版本是3.1.3，是支持空对象的安全技术，而你要引入的http的版本小于0.13.0，不支持空安全，所以两个不匹配，报错。在这个区间的http包（http >=0.2.8+2 ]]></description><category></category></item><item><title><![CDATA[Flutter配置Android SDK路径]]></title><link>https://blog.csdn.net/bdmh/article/details/133695625</link><guid>https://blog.csdn.net/bdmh/article/details/133695625</guid><author>bdmh</author><pubDate>Mon, 09 Oct 2023 10:21:32 +0800</pubDate><description><![CDATA[原因就是Flutter找不到Android的SDK路径，所以无法识别模拟器，我们用flutter doctor命令检查环境时，就好看到提示。在使用VSCode作为开发Flutter的工具时，当选择调试设备时，通常看不到android的模拟器，只能看到Chrome之类的。]]></description><category></category></item><item><title><![CDATA[未pip设置国内镜像]]></title><link>https://blog.csdn.net/bdmh/article/details/133037868</link><guid>https://blog.csdn.net/bdmh/article/details/133037868</guid><author>bdmh</author><pubDate>Tue, 19 Sep 2023 17:33:42 +0800</pubDate><description><![CDATA[最后在命令行窗口中使用 pip install 命令安装即可。“用户名”你的用户名，比如“C:\Users\张三”]]></description><category></category></item><item><title><![CDATA[字节跳动春招——特征提取]]></title><link>https://blog.csdn.net/bdmh/article/details/131003347</link><guid>https://blog.csdn.net/bdmh/article/details/131003347</guid><author>bdmh</author><pubDate>Fri, 02 Jun 2023 11:23:58 +0800</pubDate><description><![CDATA[某天，他突发奇想，想从猫咪的视频里挖掘一些猫咪的运动信息。比如，特征在第2/3/4/7/8帧出现，那么该特征将形成两个特征运动2-3-4 和7-8。其中，第一个数字是该帧的特征个数，接下来的数字是在特征的取值；比如样例输入第三行里，2代表该帧有两个猫咪特征，和N满足1≤N≤100000，M满足1≤M≤10000，一帧的特征个数满足 ≤ 10000。特征在连续的帧中连续出现3次，相比其他特征连续出现的次数大，所以输出3。现在，给定每一帧的特征，特征的数量可能不一样。]]></description><category></category></item><item><title><![CDATA[字节跳动春招——雀魂启动]]></title><link>https://blog.csdn.net/bdmh/article/details/130973456</link><guid>https://blog.csdn.net/bdmh/article/details/130973456</guid><author>bdmh</author><pubDate>Wed, 31 May 2023 17:21:50 +0800</pubDate><description><![CDATA[给人造成了无解，让人误认为剩下的12张牌中都是顺子或刻子，而且例子中也这样体现出来的，所以按照这个逻辑写代码，一定是错的。1 1 1 1 2 2 3 3 5 6 7 7 8 9 用1做雀头，组123,123,567,789的四个顺子，可以和牌。1 1 1 2 2 2 6 6 6 7 7 7 9 9 可以组成1,2,6,7的4个刻子和9的雀头，可以和牌。现在，小包从36张牌中抽取了13张牌，他想知道在剩下的23张牌中，再取一张牌，取到哪几种数字牌可以和牌。可以组成1,2,6,7的4个刻子和9的雀头。]]></description><category></category></item><item><title><![CDATA[字节跳动春招——聪明的编辑]]></title><link>https://blog.csdn.net/bdmh/article/details/130845902</link><guid>https://blog.csdn.net/bdmh/article/details/130845902</guid><author>bdmh</author><pubDate>Wed, 24 May 2023 14:18:09 +0800</pubDate><description><![CDATA[万万没想到，我被开除了，临走时老板对我说： “做人做事要兢兢业业、勤勤恳恳、本本分分，人要是行，干一行行一行。要是不行，干一行不行一行，一行不行行行不行。用不了多久，我就会出任CEO，当上董事长，迎娶白富美，走上人生巅峰，想想都有点小激动呢！3. 上面的规则优先“从左到右”匹配，即如果是AABBCC，虽然AABB和BBCC都是错误拼写，应该优先考虑修复AABB，结果为AABCC。2. 两对一样的字母（AABB型）连在一起，一定是拼写错误，去掉第二对的一个字母就好啦：比如 helloo -> hello。]]></description><category></category></item><item><title><![CDATA[天然蓄水池]]></title><link>https://blog.csdn.net/bdmh/article/details/130543547</link><guid>https://blog.csdn.net/bdmh/article/details/130543547</guid><author>bdmh</author><pubDate>Sun, 07 May 2023 15:55:32 +0800</pubDate><description><![CDATA[经过分析，选取s[1]和s[8]时，水库蓄水量为15；同样选取s[1]和s[6]时，水库蓄水量也为15。例如，当山脉为s = [3, 1, 2]时，则选取s[0]和s[2]作为水库边界，则蓄水量为1，此时输出：0 2:1。选取山脉上两个点作为蓄水库的边界，则边界内的区域可以蓄水，蓄水量需排除山脉占用的空间。经过分析，选取s[1]和s[6]时，水库蓄水量为19(3 + 7 + 4 + 5)如果无法蓄水，则返回0，此时不返回边界。当山脉`s = [3, 2, 1]时，不存在合理的边界，此时输出：0。]]></description><category></category></item><item><title><![CDATA[最小调整顺序次数（特异性双端队列）]]></title><link>https://blog.csdn.net/bdmh/article/details/130453739</link><guid>https://blog.csdn.net/bdmh/article/details/130453739</guid><author>bdmh</author><pubDate>Mon, 01 May 2023 08:45:44 +0800</pubDate><description><![CDATA[有一个特异性的双端队列，该队列可以从头部到尾部添加数据，但是只能从头部移除数据。小 A 一次执行 2n 个指令往队列中添加数据和移除数据， 其中 n 个指令是添加数据(可能从头部也可以从尾部添加) 依次添加 1 到 n , n 个指令是移出数据 现在要求移除数据的顺序为 1 到 n ， 为了满足最后输出的要求, 小 A 可以在任何时候调整队列中的数据的顺序 请问,小 A 最少需要调整几次才能满足移除数据的顺序正好是 1 到 n。]]></description><category></category></item><item><title><![CDATA[单向链表中间节点]]></title><link>https://blog.csdn.net/bdmh/article/details/130446647</link><guid>https://blog.csdn.net/bdmh/article/details/130446647</guid><author>bdmh</author><pubDate>Sun, 30 Apr 2023 10:17:04 +0800</pubDate><description><![CDATA[求单向链表中间的节点值，如果奇数个节点取中间，偶数个取偏右边的那个值。]]></description><category></category></item><item><title><![CDATA[开心消消乐]]></title><link>https://blog.csdn.net/bdmh/article/details/130439075</link><guid>https://blog.csdn.net/bdmh/article/details/130439075</guid><author>bdmh</author><pubDate>Sat, 29 Apr 2023 11:27:32 +0800</pubDate><description><![CDATA[解题思路：遍历二维数组，遇到某个位置的值为1，则开始查找它周围8个方向的位置的值，如果是1，置为0。然后继续遍历下一个元素。第一行输入两个整数，分别表示矩阵的行数 N 和列数 M，取值范围均为 [1,100]接下来 N 行表示矩阵的初始值，每行均为 M 个数，取值范围 [0,1]读取输入数据代码略，直接使用定义好的数组。输出一个整数，表示最少需要点击的次数。]]></description><category></category></item><item><title><![CDATA[Android：URLEncoder空格被转码为“+”号]]></title><link>https://blog.csdn.net/bdmh/article/details/128608795</link><guid>https://blog.csdn.net/bdmh/article/details/128608795</guid><author>bdmh</author><pubDate>Mon, 09 Jan 2023 10:04:13 +0800</pubDate><description><![CDATA[另外，Android提供了Uri.encode，虽然可以正常转码空格，但是它不需要转换的字符和URLEncode有一点差别，大家在用的时候，根据情况选择即可。但当使用URLEncoder时，会发现字符串中的空格被转换成“+”号，如果编码后的内容入库后，将导致读取时，前段本来是空格的地方，会显示成“+”号字符。Android前段和后端接口交互时，经常会遇到特殊字符，比如表情、特殊标点等，这样在Url中是无法识别的，需要进行转码，后端进行解码交互。建议自己仿照官方的代码，写一套自己转码和解码过程，这个不难的。]]></description><category></category></item><item><title><![CDATA[Glide：EngineResource]]></title><link>https://blog.csdn.net/bdmh/article/details/127841845</link><guid>https://blog.csdn.net/bdmh/article/details/127841845</guid><author>bdmh</author><pubDate>Mon, 14 Nov 2022 10:18:23 +0800</pubDate><description><![CDATA[这个队列是用来创建ResourceWeakReference对象的，是对EngineResource的弱引用。EngineResource是一个资源包装器，实现Resource接口，运行资源计数。在ActiveResources中，有对它的引用队列。先来看看EngineResource的属性。]]></description><category></category></item><item><title><![CDATA[Glide：DecodeJob]]></title><link>https://blog.csdn.net/bdmh/article/details/127528145</link><guid>https://blog.csdn.net/bdmh/article/details/127528145</guid><author>bdmh</author><pubDate>Wed, 09 Nov 2022 10:30:06 +0800</pubDate><description><![CDATA[参阅这个类的作用是，对缓存中数据或者原始资源进行解码、转换等操作，可以理解为一个作业，由EngineJob启动，内部通过相关对象对资源进行处理。先来看一下内部的枚举定义。DecodeJob在Engine中的waitForExistingOrStartNewJob方法中，由DecodeJobFactory创建，并执行DecodeJob的init方法。init方法中会初始化decodeHelper对象。]]></description><category></category></item><item><title><![CDATA[Glide：DecodeHelper]]></title><link>https://blog.csdn.net/bdmh/article/details/127527826</link><guid>https://blog.csdn.net/bdmh/article/details/127527826</guid><author>bdmh</author><pubDate>Thu, 27 Oct 2022 15:03:27 +0800</pubDate><description><![CDATA[这个过程会传入一堆的参数，如用来加载图像的组件的长和宽，缓存策略，资源对象类型，优先级等等，就不再一一说明了。DecodeHelper是作为解码作业DecodeJob的助手类，用来获取解码相关对象或属性信息的。它的初始化方法init是在DecodeJob的init中调用的。这个类里包含两个枚举类型。]]></description><category></category></item></channel></rss>