之前在牛客网做过很多题,得到了许多帮助,现在我也来分享一下我做过的试题~~


一、选择题(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、函数Fn=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、一个字符串由7A7B组成,且满足所有的前缀字符串中的A的个数大于等于B的个数,问这样的字符串有多少个B

A 431

B 429

C 430

D 428

 

10、在关键词随机分布的情况下,二叉查找树的查找长度与哪些查找相当:B

A 插值查找

B 二分查找

C 菲波那契查找

D 顺序查找

 

11、java集合中迭代器中iteratorfail-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 如果一个类显示的overrideobject类的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 ListSet都可以包含重复元素的有序结合

B List中最多只能有一个空元素

C ListSet都是有序集合

D Set中最多只能有一个空元素

 

18、关于java锁说法正确的是BC

A SynchronizedLock都是可重入锁

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、请阐述java8java语法上的主要改进

 

三、选择填空(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.0API 11)以上版本的Android系统才有效,这种动画可以设置给任何Object,包括那些还没有渲染到屏幕上的对象

B TewwenAnimation(补间动画):属性动画不再仅仅是一种视觉效果了,而是一种不断的对值进行操作的机制,并将值赋到指定对象的指定属性上,可以是任意对象的任意属性

C FrameAnimation(逐帧动画):将多张图片组合起来进行播放,类似于早期电影的工作原理,很多Apploading是采用这种方式

D PropertyAnimation(属性动画):是对某个View进行一系列的动画的操作,包括浅入淡出,缩放,评议,旋转四种模式。

 

8、下面关于ActivityViewWindow三者之间的关系,说法正确的是有ABCD

A “ViewRoot”是一个view或者说ViewGroup,最初始的根视图。

B View的事件监听,是由WIindowManagerService来接受消息,并且回调Activity函数

C “ViewRoot”通过addView方法来一个个的添加View

D Activity构造的时候会初始化一个Window,准确的说是PhoneWindow

 

 

9、对于AndroidHandler机制的理解正确的是AD

A Handler通过handleMessage方法来处理消息

B 一个子线程可以绑定多个Looper对象

C 在调用LooperPrepare()前可以在子线程中创建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.00000000183.00000000两个点之间的距离为173.00000000,大于10.00000000198.0000000之间的距离172.00000000,所以应输出:

173.00000000

 

样例输入

4

10.00000000

180.00000000

183.00000000

198.00000000

样例输出

173.00000000

 

Hint

注意事项:

1.程序性能要足够快,否则可能无法通过一些大型测试数据;

2.如果使用java语言,可以考虑使用BufferedReader从标准输入读取输入数据,Scanner读取一些比较大的输入数据会发生超时。