2024.8.24-OPPO应用开发工程师秋招笔试
题型:只有单选和算法,单选20道,每道2分,共40分,编程第一道15分,第二道20分,第三道25分,oppo笔试网站用的是牛客网
单选
1、MySQL索引,我不会后端,不过有个选项是说索引可以提升插入、删除时间,错的比较明显
2、当前Activity启动模式是standard,在activity上有一个按钮可以唤起当前activity,按了5次,activity调用栈里有多少个activity,6个
3、IntentService相关
4、Kotlin协程设置取消时间的函数是什么?withTimeout()
5、Kotlin密封类相关的概念
6、泛型+String,这题挺有意思,大概给出下面的代码,然后问运行结果,实际上会编译报错,在第12行“==”不能用在两种不同类型,我还以为出题点在泛型,考完才知道这里报错是因为==,除非是给StringText加上extends String继承自String,但是String是final类不可被继承,所以基本上怎么写都会编译报错
class StringText{
String s;
StringText(String s){
this.s=s;
}
public static void main(String[] args){
String s1=new String("abc");
String s2=new StringText("abc");
List<Object> list=new ArrayList<>();
list.add(s1);
list.add(s2);
System.out.println(s1==s2);
System.out.println(s1.equals(s2);
}
}
7、排序算法,一趟排序后没有让任一元素待在它的排序之后的位置,且为不稳定排序的是什么?我选的是快排,希尔排序感觉也是
8、哈夫曼树,找一个数组构成哈夫曼树之后深度最大的节点,这题我是真不会
9、还有一些加密、以及那种给代码判断单例模式、时间复杂度计算的题
编程
1、签到题,一次遍历字符串统计计数就可以
2、01背包问题,没有用动态规划,太久没刷动态规划,背包问题忘光了,我用贪心做的,也可以ac
这个背包问题也挺有意思,体积用的是按位与,容量用的是按位或。参与按位与的数越多,位与之后的值就会越小,反之,参与按位或的数越多,位或之后的值就会越大,所以利用这个规律就可以贪心了
3、意思大概是说可以每次给原数组的某个元素+1,经过最少次的+1,可以使得原数组对一个给定的余数m取余之后的数组每个元素的数量相等且都是(1-m-1)里面的数,比如[2,2,4,5,6,3],给定数组长度是6,假设要用来取余的余数是3(题设数组长度必定是余数的倍数),那么就需要现对其中一个2+1+1变成4,即变成[4,2,4,5,6,3](也可以对5+1+1),对3取余就变成[1,2,1,2,0,0],满足(0~2)数目均为2,结果就是return操作次数2,实在不会,乱写一通,骗了10%
总结
昨天就考完了,不过oppo的时间安排比较灵活,可以在一天内随便找个时间去做,为了避免一些影响所以昨天没发,现在才发出来,我觉得oppo的这个笔试题出的还是很好的,各方面都有考察到,计算机基础、Java、Kotlin、Android基础,而且有的选择题也不是靠知道概念就能做出来,需要真的理解之后稍微想一下才能做出来,比如那道String题,我觉得就出的很好
现在Kotlin有点生疏了,阿里真是Java钉子户,Kotlin是一点不用,后端大概率也是没有用golang之类的语言,全是主用Java,感觉公司主用什么语言这东西还是有点历史原因的,阿里起步早,跟Java鼎盛时候基本处于同一时代,14年出jdk8,14年阿里上市,阿里大部分项目是Java,公司里很多人看来Java就能满足开发需求了,也就不想去花时间学习新语言,而golang算是个10后,golang1.0发布于12年,同时,12年字节成立,所以相对来说字节用golang会稍多
