牛客网网易机试模拟题(Android)记录

1.关于http协议以下说法不正确的是:

  • A 1.304表示临时重定向
  • B 2.range请求响应一定是用http状态码206表示成功
  • C 3.http的header分割符是\r
  • D 4.请求参数如果包含%,需要进行encode
  • HTTP 304 未改变说明无需再次传输请求的内容,也就是说可以使用缓存的内容 301永久重定向、302暂时重定向

  • http请求字段range:
    格式: Range: bytes=start-end

    • 请求资源的部分内容(不包括响应头的大小),单位是byte,即字节,从0开始.
    • 如果服务器能够正常响应的话,服务器会返回 206 Partial Content 的状态码及说明.
    • 如果不能处理这种Range的话,就会返回整个资源以及响应状态码为 200 OK .
  • http的header分割符:\r\n


2.关于计算机网络,以下说法正确的是
(1)在向下的过程中,需要添加下层协议所需要的首部或者尾部
(2)在向上的过程中不断拆开首部和尾部
(3)在向上的过程中,需要添加下层协议所需要的首部或者尾部
(4)在向下的过程中不断拆开首部和尾部
(5)SMTP属于TCP协议
(6)POP3属于UDP协议
(7)DNS属于TCP协议
(8)Telnet属于UDP协议

POP3属于TCP。
DNS在进行区域传输的时候使用TCP协议,其它时候则使用UDP协议。
Telnet是TCP。


3.以下哪种情况会使得进程由执行状态转变成阻塞状态

  • A 时间片用完

  • B 进程调度

  • C I/O完成

  • D I/O请求

执行→阻塞 正在执行的进程因等待某种事件发生而无法继续执行时,便从执行状态变成阻塞状态。 知识点:

(1) 就绪→执行
处于就绪状态的进程,当进程调度程序为之分配了处理机后,该进程便由就绪状态转变成执行状态。

(2) 执行→就绪
处于执行状态的进程在其执行过程中,因分配给它的一个时间片已用完而不得不让出处理机,于是进程从执行状态转变成就绪状态。

(3) 执行→阻塞
正在执行的进程因等待某种事件发生而无法继续执行时,便从执行状态变成阻塞状态。

(4) 阻塞→就绪
处于阻塞状态的进程,若其等待的事件已经发生,于是进程由阻塞状态转变为就绪状态。
1:就绪->执行,当前运行进程阻塞,调度程序选一个优先权最高的进程占有处理机;
2:执行->就绪, 当前运行进程时间片用完;
3:执行->阻塞,当前运行进程等待键盘输入,进入了睡眠状态。
4:阻塞->就绪,I/O操作完成,被中断处理程序唤醒。


4.在JDK1.8中,HashMap没有实现哪个接口( )。

  • A Map

  • B AbstractMap

  • C Serializable

  • D Cloneable

HashMap 继承于AbstractMap,实现了Map、Cloneable、java.io.Serializable接口。
Cloneable接口没有定义成员。它通常用于指明被创建的一个允许对对象进行位复制(也就是对象副本)的类。


5.下面关于线程同步说法错误的是()

  • A 用户模式和内核模式下同步方式不同

  • B 对于临界区的访问适用于单进程中线程间的同步

  • C 事件对象适用于多个进程间的各线程实现同步

  • D 互斥对象也只适用于单进程中线程间的同步

用户模式下的同步构造不涉及cpu模式切换,速度快,但是仅限于单个进程。内核对象同步会导致cpu模式切换,代价比较大,但是支持多个进程间的同步。
只要把临界区置于P(sem)和V(sem)之间,即可实现进程间的互斥。


6.下面关于死锁的说法错误的是()

  • A 死锁是指多个进程因抢占资源而发生的一种阻塞且相互等待的现象

  • B 死锁的产生源于系统资源不足和进程推进顺序不当

  • C 可以通过终止和撤销进程来解除死锁

  • D 银行家算法用在预防死锁策略中

银行家算法(Banker’s Algorithm)是一个避免死锁(Deadlock)的著名算法


7.关于控件TextView的属性,下列使用正确的是 :

  • A layout_marginLeft为控件左边框,距离父容器的距离(外边距), paddingLeft为控件内部,距离控件左边框的距离(内边距)

  • B textview的scrollY属性可以用来设置这个view在其父view里面的相对垂直位置

  • C inputType为输入类型,可以选择输入纯符号,或者纯数字等.

  • D Gravity为内部文字摆放的位置,可以选择inside和outside.

textview的scrollY属性设置滚动条的吧
inputType设置文本的类型,用于帮助输入法显示合适的键盘类型
Gravity为内部文字的对齐方式,没有inside和outside


8.关于listview说法下列错误的是:

  • A 如果希望使用listview,则必须有对应的适配器Adapter才能使其正常工作

  • B listview经常使用的Adapter有一个notifyDataSetChanged()方法,当数据有更新时一般会调用此方法通知listview重新渲染 ,此方法的缺陷是会导致listview视图重新回到最上面.

  • C ListView内部有缓存实现机制,但Adapter的getView实现还是需要自己判断convertView是否是null来做分支处理

  • D 在getView方法内是不允许做耗时操作的.

  • 使用notifyDataSetChanged()会记住你划到的位置,重新加载数据的时候不会改变位置,只是改变了数据;
  • 使用notifyDataSetInvalidated() 时,数据改变的同时,自动滑到顶部第0条的位置.

9.关于布局容器,下列说法错误的是:

  • A orientation属性只有LinearLayout才会用到,标识了子控件的摆放顺序.(横向还是纵向)

  • B ViewGroup是绝大多数布局容器的父类,一般复杂的自定义容器都会继承ViewGroup来做特殊修改.

  • C 一般情况下,子容器的大小是不可以超过父容器的,但是当属性clipChildren设置成false的时候除外.

  • D 当某一个子view被成功创建后,是可用通过addview方法被添加到多个不同的布局容器中去的.

同一个View对象,不能同时有两个父容器


10.关于EditText的使用,下列说法错误的是:

  • A 可以通过setTypeface方法设置文字的字体

  • B addTextChangedListener方法可以为EditText设置输入过程的监听.

  • C android:digits属性限制EditText的输入字符,所有输入的字符必须在digits给出的范围内,否则无法输入到EditText文本框.

  • D EditText可以使用setEllipsize方法设置MARQUEE效果

MARQUEE:创建一个滚动的文本字幕。EditText不支持该效果


11.Android工程大部分使用gradle进行构建.下列关于gradle脚本相关说法错误的是

  • A 一般在dependencies内添加各种三方引用,包括jar,module,aar,maven等.

  • B signingConfigs内用来配置签名文件,一般分release和debug两种配置.

  • C gradle的主体打包apk流程是:编译代码和资源,生成dex,生成apk,zipalign,签名

  • D defaultConfig内用来指定APP的版本号,最低运行版本,等

先签名再zipalign(对齐)
打包流程: 1、打包资源文件,生成R.java文件 2、处理aidl文件,生成相应java 文件
3、编译工程源代码,生成相应class 文件 4、转换所有class文件,生成classes.dex文件 5、打包生成apk
6、对apk文件进行签名 7、对签名后的apk文件进行对齐处理(用到的工具是zipalign)


简答:列举一下Android的Drawable子类,并简单描述下他的功能。再列举下Drawable这个类里面你所了解的方法,并也简单描述下他的功能

首先是Drawable子类

Drawable资源是Android应用中使用最广泛的资源,它不仅可以使用各种格式的图片资源,也可以使用多种xml文件资源。

  • 1.一种可以在Canvas上进行绘制的抽象的概念;
  • 2.颜色、图片等都可以是一个Drawable;
  • 3.Drawable可以通过XML定义,或者通过代码创建;
  • 4.Android中Drawable是一个抽象类,每个具体的Drawable都是其子类;

Drawable的分类

Drawable的子类包括
ColorDrawable、GradientDrawable、BitmapDrawable、NinePatchDrawable、InsetDrawable、ClipDrawable、ScaleDrawable、RotateDrawable、AnimationDrawable、LayerDrawable、StateListDrawable、TransitionDrawable、VectorDrawable、ShapeDrawable

1.ColorDrawable

ColorDrawable是最简单的Drawable,也是平时用的最多的,比如:

ColorDrawable是一个专门用来使用指定的颜色来填充画布的Drawable,当它被绘制到画布上时会使用一种指定的颜色填充Paint,在画布上绘制出一块单色区域。

2.BitmapDrawable

BitmapDrawable是对bitmap的一种包装,可以设置它包装的bitmap在BitmapDrawable区域内的绘制方式,如平铺、拉伸填充或者保持图片原始尺寸,也可以在BitmapDrawable区域内部使用gravity指定的对齐方式。

3.GradientDrawable

GradientDrawable表示一个渐变区域,可以实现线性渐变、发散渐变和平铺渐变效果。

4.ScaleDrawable

ScaleDrawable是对一个Drawable进行缩放操作,可以根据level属性控制这个drawable的缩放比例,也可以设置它在容器中的对齐方式。

5.RotateDrawable

RotateDrawable用来控制drawable的旋转,在xml文件中使用rotate作为根元素来创建RotateDrawable

6.AnimationDrawable

AnimationDrawable是用来实现Android帧动画的,就是把一系列的Drawable按照一定的顺序一帧帧的播放;只适用于不要进行控制的帧动画,例如刷新时的进度条素材。

在xml文件中使用作为根节点来创建AnimationDrawable;相关的属性方法如下:

android:oneshot 设置是否需要循环播放,false为循环播放;
duration 帧间隔时间,通常我们会设置为300毫秒;

等等等等

然后是Drawable类的方法

Drawable类的核心是draw函数的实现,这个函数是一个抽象函数,派生类必须要实现他,函数的入参是一个Canvas画布对象,所有需要绘制的东西都最终绘制到画布上面去:

既然绘制提供了画布上下文,那么就还需要提供一个可绘制的区域,下面方法就是用来指定绘制的区域。Drawable在绘制调用draw函数之前必须要先指定绘制的区域,这个区域也是Canvas中要绘制的区域。一旦用户改变了绘制区域时会激发onBoundsChange方法,派生类可以重载onBoundsChange来实现区域变更的处理。
等等

部分参考 https://www.jianshu.com/p/578125001dc2

你可能感兴趣的:(Java机试题目)