- 博客(68)
- 收藏
- 关注
原创 Framework开发之Zygote进程2(基于开源的AOSP15)--init.rc在start zygote之后的事情(详细完整版逐行代码走读)
本文解析了Android系统中64位zygote服务的完整执行过程。zygote作为系统核心进程,通过init.zygote64.rc配置文件定义,主要特点包括:使用app_process64可执行文件启动,以root身份运行并设置最高优先级(-20);创建两个关键socket用于进程通信;被归类为main类服务优先启动;在重启时会同时重启音频、相机、媒体等关键系统服务;配置了高性能处理模式和关键进程监控机制。该服务的设计确保了Android系统核心功能的稳定运行,为后续应用进程的孵化提供基础环境。
2025-08-10 15:13:19
741
原创 Framework开发之Zygote进程(基于开源的AOSP15)--init.rc启动zygote(详细完整版代码走读)
init.rc文件一般有两个,一个是上面这个启动模拟器时运行的,还有一个是/device路径下真正的机器上的init.rc。out目录下的init.rc则是根据/device路径下的init.rc拷贝过去的用来打包成system.img的init.rc。
2025-07-27 21:59:19
909
原创 Framework开发之IMS逻辑浅析1--关键线程及作用
Android输入事件处理流程解析:系统通过EventHub监听输入设备文件(如/dev/input/event0),借助inotify机制获取原始事件并传递给InputReader。InputReader对事件进行解析封装后,经InputDispatcher分发给目标应用。最终通过ViewRootImpl建立的InputChannel通道,将事件传递至UI线程,完成从硬件输入到具体View的事件消费全链路。该机制体现了Linux"一切皆文件"的设计思想。
2025-06-08 09:00:00
273
原创 【报数游戏】,约瑟夫环问题,双端队列存储,定义扫描和元素移动的数据。
/num用于扫描,id用于元素的移动操作。//使用双端队列模拟约瑟夫环问题。
2025-02-04 19:40:02
180
原创 字符串统计与排序,countt保存字符个数,pairs自定义排序(关键)
【代码】字符串统计与排序,countt保存字符个数,pairs自定义排序(关键)
2025-02-04 17:42:30
128
原创 单词接龙, 二维map,一维存第一个字符,二维存整个字符串,自定义sort排序map, s+=temp[tail].front();//尾部为map的头部,front只取第一个。这句是精华
sort(temp[f].begin(),temp[f].end(),[](string &a,string &b)//Lambda表达式返回true,则表示a应该排在b的前面。//在C++中,字符串类型(std::string)重载了比较运算符(如<、>、==等),这些运算符的实现正是基于字典序比较的。}//a,b长度不一样,返回长度大的。//item.first代表temp的一维的char。//否则返回字典序小的。//首字母相同的字符串排序。
2025-02-03 22:18:14
1214
原创 猜数字,暴力枚举0-9999,输入的A,B不用管,只需要处理数字即可
i++)//i为迭代器指针类型。//统计数字正确但位置不正确的个数。//统计数字正确且位置正确的个数。else{//方便统计b。//暴力统计b的个数。
2025-02-02 23:33:12
278
原创 猜字谜,去重,排序后在两层for循环进行对比。逻辑很简单,代码量长。
#include<bits/stdc++.h>using namespace std;vector<string> split(char de){ string s; getline(cin,s); stringstream ss(s); vector<string> res; string token; while(getline(ss,token,de)) { res.emplace_back(token); }
2025-02-02 01:28:04
318
原创 找数字,寻找等值元素,map<int,vector<int>>存储相同元素的下标,vector<vector<int>>martix存储矩阵所有元素,三重for循环暴力找出最小距离,直接输出,不超时
【代码】找数字,寻找等值元素,map<int,vector<int>>存储相同元素的下标,vector<vector<int>>martix存储矩阵所有元素,三重for循环暴力找出最小距离,直接输出,不超时。
2025-02-01 19:51:39
97
原创 预定酒店详细解释,d[宾馆序号][{宾馆价格,宾馆与理想价格差价}],关键在于sort自定义排序差价
【代码】预定酒店详细解释,d[宾馆序号][{宾馆价格,宾馆与理想价格差价}],关键在于sort自定义排序差价。
2025-01-30 19:58:28
105
原创 简单的自动曝光,直接暴力扫描所有调整的数字K,寻找最解决128的k即可
【代码】简单的自动曝光,直接暴力扫描所有调整的数字K,寻找最解决128的k即可。
2025-01-30 19:36:53
117
原创 工作安排,01背包滚动数组问题,建议先看代码随想录了解里面的思路以及递推公式。
/背包容量最大为hour+1,+1是为了逆序初始化,里面值为0。j--)//hour为总时间,t为当前物品所需时间。
2025-01-30 19:11:27
405
原创 贪心的商人,暴力解即可,用二维数组[商品编号][天数]保存价格,后面一天减去前面一天,若为负数则忽略,大于0.则all in
【代码】贪心的商人,暴力解即可,用二维数组[商品编号][天数]保存价格,后面一天减去前面一天,若为负数则忽略,大于0.则all in。
2025-01-30 18:20:43
534
原创 最左侧冗余覆盖子串,countt数组用于判断滑动窗口内s1字符个数是否全部包含,若包含,则countt[c]<=0,说明不在需要这个字符了,total用于判断仍需要目标字符的个数
滑动过程中,可以理解为先进去,进去时候count[c]--,后面无论在怎么加,非s1元素都不可能大于0,且在窗口内部均为负数。
2025-01-29 21:17:57
137
原创 最小调整次数,由于是依次添加的数据,head add会破坏顺序,tail add不会破坏顺序,插入具体数字无所谓,不用处理。remove时候判断是否有序,无序则调整
【代码】最小调整次数,由于是依次添加的数据,head add会破坏顺序,tail add不会破坏顺序,插入具体数字无所谓,不用处理。remove时候判断是否有序,无序则调整。
2025-01-28 23:14:14
171
原创 一种字符串压缩表示的解压,解压,压缩两个函数都要写出来,解压就是找到连续的最后一个数字,以及后面一位小写字母,for循环将其加入解压后的字母。压缩要注意收尾,记录连续出现的字母并记录
【代码】一种字符串压缩表示的解压,解压,压缩两个函数都要写出来,解压就是找到连续的最后一个数字,以及后面一位小写字母,for循环将其加入解压后的字母。压缩要注意收尾,记录连续出现的字母并记录。
2025-01-28 21:53:57
124
原创 生成哈夫曼树,抽象晦涩难懂,通过优先队列排序,依次取出通过lchild,rchild将其联系在一起,在中序遍历输出
/父节点孩子结点联系起来的关键步骤,lc即lchild。//父节点高度比孩子结点高度大1。//若左子树存在,递归遍历左子树。//若右子树存在,递归遍历左子树。//节点权值相等时候,按照节点子树高度升序。//中序遍历,左根右。
2025-01-24 17:05:48
308
原创 华为[od],斗地主之顺子,先从小到大排序,2直接置16,相当于忽略了,再用二维容器存储顺子
/确定第一维,插入第二维。//插入后再break,j无论如何不会等于straights.size的。//straights为二维,第一维为每个顺子下标,第二维为具体的顺子。j++)//扫描每个顺子。//遍历输入的牌,找到符合要求的顺子(牌数量大于等于5的个数)else if(card=="2")//根据题意2可直接忽略。//重新建立一个顺子,该顺子以card为开头。//每次扫描,j重置为0。//若连续顺着大于5个,则输出。
2025-01-23 21:44:07
426
原创 [华为OD]最小步数找终点,逻辑简单,送分题
if(j==nums.size()-1)//若刚好可以跳到最后一个位置,则保留到终点的最小步数。//i表示第一步的步长,nums[i],表示第二步步长。int step=2;//此时已经跳了两步。//没有跳到最后一步就继续跳。//i表示第一步的步长。
2025-01-20 17:56:33
340
原创 内存资源分配,输入处理麻烦,逻辑简单(将二维数组容器,第一维记录大小,第二维记录剩余数量,从小到大排序,之后找到刚好匹配或比刚好匹配大的,若二维剩余数量为0,则删掉该下标),另外二分查找注意一下
/这里是memories的第二维,第一维已经从小到大排好了,二维的0表示内存粒度大小,从小到大升序。if(--memories[j][1]==0)//0为内存池大小,1为内存池数量。//暴力解会超时,故用二分查找(找到大于等于request的内存资源)//0是大小,1是数量。{//如果找到大于等于申请大小的内存池资源。=',')//读取逗号。}//输入等于逗号,接着输入。//取出后若内存池资源为空,则移除。//此时l为r+1了。getchar();//内存资源颗粒度大小,数量。//按内存粒度大小排序。
2025-01-20 16:27:13
456
原创 分苹果,若a ^ b ^ c = 0意味着:a 和 (b ^ c) 的值相等,或者 b 和 (a ^ c) 的值相等,以及 c 和 (a ^ b) 的值相等。
a若^b^c=faultSum,那么faultSum==0时,即可产生上面的平分方案。说明可以满足二进制平分。
2025-01-20 14:37:18
1153
原创 日志采集系统,数学找规律问题,弄清楚正向得分,负向得分即可。
/最多上报100条。//达到100条时必须上报,结束循环。//T时刻提交的报文数量。//dp[i]表示i时刻的正向得分,即之前全部的累加报文数。//第i时刻被扣除的负向分。
2025-01-20 13:21:02
139
原创 数大雁,ranges容器统计每只大雁叫声的开始索引和结束索引,q统计大雁开始叫q的索引,统计最大交集数即可
/{}里有两个int数据,说明第二维数组下标只有0,1。if(ranges[i][1]>ranges[j][0])//上个点的结束索引大于上个点的开始索引,那么交集+1。//ranges统计的是多只大雁的叫声区间,开始索引,结束索引。j++)//从这个点开始真正扫描取交集。i++)//第i个点开始的索引,不断更新最大索引。switch(s[i])//遍历s。
2025-01-19 17:46:09
453
原创 三矩形重叠面积,逻辑简单,宽高都可能为负值,处理好边界条件,输出为max(0,宽)*max(0,高)。宽和高有一个为负数或0,面积就为0
int main()return 0;
2025-01-19 16:12:31
186
原创 胡杨树补种(相当于画图理解数学问题),就三种情况,从头开始补种,此中间开始补种,从尾开始补种
else if(i==m-add)//从末尾开始补种。//三种情况都列举出来,取最大的情况。else//从非头非尾的中间开始种。if(i==0)//从0开始补种。
2025-01-19 15:54:25
336
原创 喊7游戏,约瑟夫环问题,编号1的人喊1,一直喊,直到出现7的倍数或者数字含7,环形数组求解即可
if(i%7==0||contains(i,7))//i对7求余为0或者数字中包含7。//第几个人喊了多少次k。if(j>=countt)//j是从0开始的,故用的=int countt=0;//记录一共有多少个人。//第几个人喊,0w为第一个人喊。//一共喊了多少次7。//上一个人喊完后到下一个人。//下一个人喊的数字+1。
2025-01-18 12:31:34
346
原创 高矮个子排队,奇数项为高个子,偶数项为矮个子。扫描到后面顺序不对不影响前面已经排好的顺序,比如3213,1与3交换不影响32,同理3234,3与4交换也不影响32
while(cin>>s)//输入不为数字异常判断。
2025-01-18 11:21:40
148
原创 判断一组不等式是否满足约束并输出最大差,用例就是条件,三个不等式,五个变量。逻辑简单但是代码量多,注意细节
/stod用于将字符串转换为double类型,stoi用于将字符串转换为int类型。//判断不等式之差是否成立,即不等式两边根据符号是否成立。//b为非齐次不等式右边的常数。//y为不等式两边符号。
2025-01-17 19:23:41
439
原创 分糖果,递归简单但可能超时,利用树的思想,由于只有三种情况,且可以整除情况取糖果次数明显少于另外两种,故可以利用三叉树思想,一层层遍历(忽略剪枝后类似满三叉树),剪枝避免重复,返回值为1的树高-1
if(x%2==0&&visited.find(x/2)==visited.end())//即queue里面之前没有x/2。if(visited.find(x-1)==visited.end())//即queue里面之前没有x-1。if(visited.find(x+1)==visited.end())//即queue里面之前没有x。//若x值为1,则返回层数,countt即层数初始值为0。//遍历完一层,树高加1,树高初始值为0。//x+1没有被扫描过。//x-1没有被扫描过。//x/2没有被扫描过。
2025-01-17 18:04:31
409
原创 计算环形字符串中‘O’最长偶数次数字符串长度,o为偶数直接输出字符串长度,o为奇数输出字符串长度减1
int main()string s;cin>>s;if(c=='o')oCount++;elsereturn 0;
2025-01-17 17:00:34
131
原创 字符串拼接,容器内嵌套容器,{1,2,3},{4,5,6,7}取完第一个容器元素的前n个值后若还有元素,则push_back插入容器尾部接着遍历
/传入','进行分隔,然后每次返回一组分割的数据,添加到链表list中。//注意,lists比如存的是{1,2},{3}那么listt取的是{1,2}lists.push_back(listt);//push_back添加列表,而emplace_back一般只添加一个值。
2025-01-17 16:41:28
316
原创 求三叉树高度,构造三叉树结点以及树本身,树里通过add方法进行左中右结点的添加(每次添加都是从树的根结点遍历,寻找左中右的空位置),最终返回树高即可
/创建的结点node是当前结点cur的子结点,则node结点高度为cur结点高度+1。//防止意外类型的转换。//否则继续向左边探索。//cur为叶节点,则node直接插入cur左边。if(this->root==nullptr)//this代指上一行实例化的node。//如果数大于结点数+500,插入右子树。//如果创建的结点node进入新层,则更新树的高度。//结点所在高度,初始值均默认为0。//若树为空,则当前创建结点为根结点。//树非空,从根结点开始比较。
2025-01-17 11:34:54
421
原创 增强的strstr,理解容器内部存储结构,{1},{2,3}为容器内两个元素,第二个元素包括两个数。
/push_back直接插入构造好的容器,而emplace_back直接插入元素。//里面共有两个列表,a[bc],第一个列表元素为{a},第二个列表元素为{b,c}if(levels[j].find(src[i+j])==levels[j].end())//下一个字符没有匹配上。i++)//总共比对次数,即滑动次数+1。//主要考虑括号里可能有重复元素。//判断是否为括号内。return -1;
2025-01-15 17:43:01
677
原创 跳房子一,处理好输入以及通过map找到索引
/这里的step1为后面的位置,前面遍历都是为了存储直到遇到两数相加等于目标值的数。//若step1还没存进去,那么存一下,方便后面step1(即第二个数)再次找到step2(即前面已经存储过的数)做准备。//先慢慢存储step1,直到遇到匹配的step2,存到后面总会遇到。//map第一个参数存值,第二个参数存索引下标。//二元组记录索引,方便根据步数找到索引下标。=',')//若输入等于,则不用管。
2025-01-14 18:53:56
199
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人