回馈牛客!搜狗2018秋招Java客户端试题,答案自己做的
之前在牛客网做过很多题,得到了许多帮助,现在我也来分享一下我做过的试题~~
一、选择题(20)
1、以下没有用栈来实现的应用场景是:A
A 进程调度
B 函数调用
C 表达式求值
D 树的节点的深度优先遍历
2、不定项选择,如下算法的时间复杂度D
A O(n^3)
B O(n)
C O(n!)
D O(n^2)
3、如果需要对10w个英文单词进行前缀匹配检索,下面哪种数据结构最合适:(B)
A B+树
B Trie树
C AVL树
D 哈希表
4、给定8个同样形状的硬币和一个天平,其中有一个硬币比其他硬币都重,找到该硬币需要的最少次数:A
A 2
B 1
C 4
D 3
5、函数F(n)=F(n-1)+n+1(n>1)的递归终止条件是B
A F(0)=1
B F(1)=1
C F(0)=0
D F(1)=0
6、给定一个数组2 3 5 6 1 7 8 4 9,建立初始堆(最小堆)后,数组序列是多少C
A 123657849
B 125437689
C 125437869
D 125637849
7、CPU利用率与并发进程的关系是D
A 进程数多,提高并发进程数,可提高CPU利用率
B 并发进程的内存访问会增加了访存的局部性特征
C 并发进程导致内存访问减小
D 局部性特征的下降会导致缺页率上升和CPU利用率下降
8、有个500*400的稀疏矩阵,有20个非零元素,上每个整型数占2字节,则用三元组表示该矩阵时,所需的字节数是C
A 134
B 120
C 126
D 124
9、一个字符串由7个A和7个B组成,且满足所有的前缀字符串中的A的个数大于等于B的个数,问这样的字符串有多少个B
A 431
B 429
C 430
D 428
10、在关键词随机分布的情况下,二叉查找树的查找长度与哪些查找相当:B
A 插值查找
B 二分查找
C 菲波那契查找
D 顺序查找
11、java集合中迭代器中iterator的fail-fast(快速失败)机制,抛出的是什么异常B
A ClassCastException异常
B ConcurrentModificationException异常
C NullPoinException异常
D SecturityException异常
12、关于java类加载,正确的是C
A 在生成某个类的.class文件时,该类被加载到JVM中
B NoClassFeffoundError表示在编译时这个类是不能够被找到的
C 类加载器的体系并不是“继承”体系,而是一个“委派”体系
D 某个类可能由于被不同的类调用而被加载多次
13、java程序进行调优,会关注以下两个目标:响应能力和吞吐量,关于这两项目目标描述错误的是A
A 更重视吞吐量的系统,比重视响应能力的系统更加不能接受较长的停顿时间
B 吞吐量关注在一个待定时间段内应用系统的最大工作量
C 提高响应能力期望程序或系统对请求的响应时间尽可能短
D 对响应能力要求很高的系统,较大的停顿时间是不可接受的
14、下列关于Oracle Hostpot java虚拟机的说法正确的是D
A java虚拟机只有在堆空间不足的情况下,才会触发垃圾回收,
B 在同一个java虚拟机之中,一个class文件只能被加载一次
C 如果一个类显示的override了object类的finalize方法,那么这个finallize方法最多只能被java虚拟机调用一次
D 对于分代的垃圾回收算法,在进行新生代(young generation)垃圾回收的时候,只需要扫描新生代的内存区域,在进行老年代垃圾回收的时候,只需要扫描老年代的内存区域
15、可通过编译的语句有哪些BD
A short x[1][1]=new short[][]
B long []x[]=new long[1][1]
C byte x[][]=new byte[][]
D int x[][]=new int[1][1]
16、不定项选择
输出结果为:A
A Initiallzing
Building
Wangzai plays ball
B Initializing
Wangzai plays ball
C Building
Wangzai plays ball
D Building
Initializing
Wangzai plays ball
17、java数据结构中列表(List)和集(Set)下面说法错误的是ABC
A List和Set都可以包含重复元素的有序结合
B List中最多只能有一个空元素
C List和Set都是有序集合
D Set中最多只能有一个空元素
18、关于java锁说法正确的是BC
A Synchronized和Lock都是可重入锁
B Synchronized通过对象监视器由JVM实现
C 使用Lock的获取锁方法后,最好使用finally代码块释放锁
D Synchronized只能作用于方法,不可以在代码块上使用
19、JVM内存配置参数如下
-Xmx2048m -Xms2048m -Xmn1024m -XX:MaxPermSize=256m-XXSurvivorRatio=2
,其最小内存值和Survivor区总大小分别是B
A2028m,256m
B2048m,512m
C1024m,256m
D1024m,512m
20、以下哪种方式会导致对应线程让出CPU:(CD)
A 提高其他线程的调度优先级
B 增加子线程并调度执行子线程
C 抛出RuntimeException
D 调用sleep函数
二、问答题(1)
1、请阐述java8在java语法上的主要改进
三、选择填空(11)
1、下面哪些是Android 7.0新特性:AD
A 通知增强功能
B 支持快速充电的切换
C 原生的应用权限管理
D 多窗口支持
2、一个应用程序中Context对象的个数等于:B
A Activity的个数
B Activity+Service的个数
C 1个
D Service的个数
3、题1中,进入后,点击back键退出,打印log的顺序为A
A print onPause
print onStop
print onDestroy
B print onPause
print onDestroy
C print onPause
print onStop
D print onStop
print onDestroy
4、AsyncTask的以下函数哪些是在UI线程调用BC
A doinBackground()
B onPreExecute()
C onPostExecute()
D publishProgress()
5、采用Fragment设计的App比单纯用Activity设计的App更加流畅,下列说法正确的是AD
A Activity消耗的内存远大于Fragment
B Activity的生命周期管理都需要跨进程通信,相对耗时
C Fragment的生命周期相比Activity更加完备
D Fragment从栈中恢复是View级操作,而Activity从栈中恢复是Window级操作
6、关于线程间通信描述正确的有ABD
A Handler:你可以构造Handler对象来与Looper沟通,以便push新消息到Message Queue取出)所送来的消息
B Looper:一个线程可以产生一个Looper对象,由它来管理比线程里的Message Queue
C Looper:一个线程可以产生多个Looper对象,由它来管理比线程里的Message Queue
D 线程:UI thread 通常就是main thread,而Android启动程序时会替它建立一个Message Queue
7、关于Android中的几种动画描述不正确有:BD
A Property Animaition:属性动画只对Android 3.0(API 11)以上版本的Android系统才有效,这种动画可以设置给任何Object,包括那些还没有渲染到屏幕上的对象
B TewwenAnimation(补间动画):属性动画不再仅仅是一种视觉效果了,而是一种不断的对值进行操作的机制,并将值赋到指定对象的指定属性上,可以是任意对象的任意属性
C FrameAnimation(逐帧动画):将多张图片组合起来进行播放,类似于早期电影的工作原理,很多App的loading是采用这种方式
D PropertyAnimation(属性动画):是对某个View进行一系列的动画的操作,包括浅入淡出,缩放,评议,旋转四种模式。
8、下面关于Activity,View,Window三者之间的关系,说法正确的是有ABCD
A “ViewRoot”是一个view或者说ViewGroup,最初始的根视图。
B View的事件监听,是由WIindowManagerService来接受消息,并且回调Activity函数
C “ViewRoot”通过addView方法来一个个的添加View
D Activity构造的时候会初始化一个Window,准确的说是PhoneWindow
9、对于Android的Handler机制的理解正确的是AD
A Handler通过handleMessage方法来处理消息
B 一个子线程可以绑定多个Looper对象
C 在调用Looper。Prepare()前可以在子线程中创建Handler
D Looper负责将Message压入MQ
10、下面代码第一次点击应用打开activity,答应的log顺序为(A)
A print onCreate
print onStart
print onResume
B print onCreate
print onResume
print onStart
C print onCreate
print onResume
D print onCreate
print onStart
11、如果后台的Activity由于某种原因被系统回收了,想在被系统回收之前保存当前状态,需要重写__ onSaveInstanceState()___方法,在此方法中保存需要保存的数据,该方法将会在activity被回收之前调用,通过重写_ onRestoreInstanceState()___方法可以从中提取保存好的数据
四、在线编程(1)
编程题 | 50.0分 1/1
圆周上两点间的距离
时间限制:C/C++语言 1000MS;其他语言 3000MS
内存限制:C/C++语言 30720KB;其他语言 555008KB
题目描述:
定义圆周上两点的距离s为这两点之间的劣弧对应的圆心角度数(0<=s<=180),现输入圆周上的n个点(n>=2),以角度a表示其位置(0<=a<360),输入按a从小到大排序。求最远的一对点之间的距离。
输入
第一行为点个数n,后跟n行,每行一个双精度浮点数,表示点的角度(小数点后保留8位),例如输入样例中为4个点的输入:
输出
输出最远的一对点之间的距离(双精度浮点数,小数点后保留8位)和'\n'换行符。例如输入样例中,10.00000000与183.00000000两个点之间的距离为173.00000000,大于10.00000000与198.0000000之间的距离172.00000000,所以应输出:
173.00000000
样例输入
4
10.00000000
180.00000000
183.00000000
198.00000000
样例输出
173.00000000
Hint
注意事项:
1.程序性能要足够快,否则可能无法通过一些大型测试数据;
2.如果使用java语言,可以考虑使用BufferedReader从标准输入读取输入数据,Scanner读取一些比较大的输入数据会发生超时。