2022-09-02-oppo-笔试-78min-90左右
linux 岗
单选多选25min
24
1
单选 17*2‘
- selinux (?)
A. 可以用setenforce
命令关闭
B. 在oppo手机上是关闭的
C. 的规则在编译阶段检验,在运行时不做额外校验,因此对于网上下载的文件、手机中预装的任何程序包括系统服务,都可对其访问
D. 将文件权限设为777后,selinux 对其的限制将会失效
关闭方法:1、临时关闭,只需执行“setenforce 0”命令即可。2、永久关闭,需要执行“vi /etc/selinux/config”命令打开config文件,将“SELINUX”项的值改为“disabled”,保存文件并退出即可。
- 关于linux文件描述符不对的是()
A. 是一种资源,在程序异常退出时不会被释放
B. 一般用整形变量表示
C. 某进程中不同文件描述符可以对应同一个文件
D. 0是一个特殊的文件描述符
A
- android 广播
A. 接收者声明的优先级别在android:priority属性中声明,值越小优先级别越高
B. 只能在AndroidManifest.xml 中注册
C. 只能在代码中注册
D. 有序广播按优先级传播,可以随时被截断
D
- android 4大组件不包括:
content provider; context; broadcast receive; service
活动(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
多选 3*2’
- 数字通信系统的特点
传输差错可控、抗干扰能力强、较大传输带宽、同步要求高
AB
- 正确的是 BC
A. 如果只有一个线程写,其他线程读,不会出现线程不安全
B. 如果所有线程都读一个共享变量,不会出现线程不安全问题
C. 出现线程安全问题根本原因是线程抢占式执行
D. 两个线程修改同一个变量就会出现线程不安全问题
3个编程60‘
第一题前后做了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届秋招笔面经#