linux 岗
单选多选25min
24
1
setenforce
命令关闭关闭方法:1、临时关闭,只需执行“setenforce 0”命令即可。2、永久关闭,需要执行“vi /etc/selinux/config”命令打开config文件,将“SELINUX”项的值改为“disabled”,保存文件并退出即可。
A
D
活动(Activity)、服务(Service)、广播接收器(Broadcast Receiver)和内容提供器(Content Provider)
B
which wrong
A. Cache 与主存统一编址,cache地址空间属于主存一部分
B. 在所有非抢占CPU调度算法中系统平均响应时间最短的是短任务优先算法
C. 耗时的操作使用线程提供程序响应
D. 内存抖动指频繁换页活动
A. 不是统一编址
which wrong D?
A. Binder 传输数据的数据大小太大的话可能导致通信失败
B. Binder 可以用来传输文件描述符,从而在不同进程中用同一个文件
C. Binder 可以单向通信,对端进程可以不用发送回复信息
D. Binder 是Android 提出的一个新型进程间通信机制,仅依靠userspace即可完成进程间通信
关于C语言头文件的说法不对的是
A. 可以include后缀不是".h"的头文件
B. 可以通过宏定义来避免被重复include
C. 可以在头文件中定义一个static变量,在多个C文件***享数据
D. 可以在头文件中实现static类型的函数
C
AB
第一题前后做了36min差点放弃
/** // * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 // * // * 输入参数是每个应用持有WakeLock的起始时间及结束时间,函数返回值是每个应用对总WakeLock时长的贡献值, // 返回值vector里面的每个元素的数值累加即为手机总的持有WakeLock的时长。 // * @param wakeLock int整型vector<vector<>> vector<vector<int>>的每个元素代表某个应用的持有WakeLock的信息, // 内部的vector<int>,元素按照奇偶排列,偶数元素代表拿WakeLock的起始时间点,奇数代表释放WakeLock的时间点 // * @return int整型vector // */ 输入:[[1234,1235],[1236,1238]] 输出:[1,2] 解释:第一个应用的时间片长度是1,无重叠,第二个是2 输入 [[1234,1240],[[1236,1238],[1245,1250]] 输出 [5,6] 解释:1236到1238两个应用共享长为2的时间片,各分1个单位,第一个应用是 2+1+2,第二个应用是1+5=6 // 第一种 差分+前缀和 80% // 26min 一遍80%*15' 3ms 428KB // class Solution { // public: // vector<int> getWakeLockContrib(vector<vector<int> >& wl) { // int n=wl.size(); // if(n==0) return {}; // int minv=wl[0][0],maxv=wl[0][0]; // for(auto& i:wl) // for(auto&j :i) // { // minv=min(minv,j); // maxv=max(maxv,j); // } // vector<int> d(maxv-minv+1,0); // // for(int i=0;i<n;i++) // // wl[i].push_back(i); // // sort(wl.begin(),wl.end()); // for(int i=0;i<n;i++){ // for(int j=0;j<wl[i].size();j+=2){ // d[wl[i][j]-minv]++; // d[wl[i][j+1]-minv]--; // } // } // vector<double> pd(d.size()+1,0); // for(int i=1;i<pd.size();i++) // pd[i]=pd[i-1]+d[i-1]; // vector<int> a(n,0); // vector<double> af(n,0); // for(int i=0;i<n;i++){ // for(int j=0;j<wl[i].size();j+=2){ // int fr=wl[i][j]-minv; // while(fr<wl[i][j+1]-minv){ // fr++; // af[i]+=1.0/pd[fr]; // } // } // } // for(int i=0;i<af.size();i++) // a[i]=af[i]; // return a; // } // }; // 第一题第二种 10min 100%*15' 3ms 576KB // 本来还是按 1.0/c[s] 来算,还是80%,浮点数太精确了 class Solution { public: vector<int> getWakeLockContrib(vector<vector<int> >& wl) { int n=wl.size(); if(n==0) return {}; unordered_map<int, int> c; for(int i=0;i<n;i++){ for(int j=0;j<wl[i].size();j+=2){ int s=wl[i][j]; while(s<wl[i][j+1]) c[s++]++; } } vector<int> a(n,0); for(int i=0;i<n;i++){ int d=0.0; for(int j=0;j<wl[i].size();j+=2){ int s=wl[i][j]; while(s<wl[i][j+1]) { int t=s+1, cnt=c[s]; while(t<wl[i][j+1]&&cnt==c[t]) t++; d+=(t-s)/cnt; s=t; } } a[i]=d; } return a; } }; // 第二题 100%*20’ 9min 反反+暴力 一次过 // 字符串反向查找 // * 表示匹配任意字符 // 找最后一次匹配的起始位置 // 输入:“hello world" "ow" // 输出:7 // 输入:“hello world" "l*o" // 输出:9 // 输入:“hello world" "l**" // 输出:2 class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * findStr从反方向查找子串,返回最后一次匹配成功时,子串的偏移位置,如果没有匹配成功返回-1 * @param str string字符串 待匹配的字符串 * @param mod string字符串 匹配模式字符串 * @return int整型 */ int findStr(string str, string mod) { reverse(mod.begin(),mod.end()); for(int i=0;i<=str.length()-mod.length();i++){ int b=0,j=i; while(b<mod.length()){ if(mod[b]=='*'||mod[b]==str[j]){ b++,j++; }else break; } if(b==mod.length()) return j-1; } return -1; } }; // 第三题 25'*100% 8min 一遍过 // 反转链表 /** * struct ListNode { * int val; * struct ListNode *next; * ListNode(int x) : val(x), next(nullptr) {} * }; */ class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * #例如 #输入 {1.2,3,4,5} #输出 {5,4,3,2,1} * @param head ListNode类 链表的头节点 * @return ListNode类 */ ListNode* reverseList(ListNode* h) { if(!h)return h; ListNode* last=nullptr,*nn; while(h->next){ nn=h->next; h->next=last; last=h; h=nn; } h->next=last; return h; } };#笔试##OPPO##oppo秋招##Linux##23届秋招笔面经#