面试的一些理论题

1.谈谈你对sharedPreference的理解?

是一个以key value形式存放的轻量级的数据存储方式在它中保存的数据是在整个应用程序中可以共享的是以一个xml文件存放数据的

2.接口回调是如何实现的?

一些情况下,可能需要fragment和activity共享事件,一个比较好的做法是在fragment里面定义一个回调接口,然后要求宿主activity实现这个接口。当activity通过这个接口接收到一个回调,它可以让同布局中的其他fragment分享这个信息

3.当前来说,播放视频有哪几种方式?

SurfaceView + Mediapalyer ; 使用系统播放器播放视频; VideoView结合MediaController

4.简述版本升级流程

在APP首页自动触发向服务端请求最新的版本信息,如果服务端返回的版本信息中versionCode与当前版本不一致,就弹出升级提示框让用户选择“立即更新”:直接启动下载“稍后提醒”:什么都不处理“忽略该版本”:当前版本不再提醒,如有更新版本还是要提醒。例如:用户版本是1.0,当前检查到的版本是2.0,用户选择了“忽略该版本”,则2.0的版本不再提示,到下个版本时,仍然要提示版本更新。

5.简述Android activity的生命周期函数,以及各自的调用时机

onCreate(第一次创建一个Activity时调用)
onStart(Activity创建或者从后台重新回到前台时被调用)
onResume(Activity获取焦点,界面可用时被调用)

onPause(Activity界面失去焦点,界面不可用被调用)

onStop(退出当前Activity或者跳转到新Activity时被调用)

onDestroy(退出当前Activity时被调用,调用之后Activity就结束了)
onRestart(Activity从后台重新回到前台时被调用)

6.HTTP和HTTPS的区别

①、https协议需要到申请证书,一般免费证书较少,因而需要一定费用。
②、http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。
③、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
④、http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。

7.Fresco精确显示加载进度,需要重写Drawable的onLevelChange

8.Activity中使用_______和_____、_____两种方式来完成Fragment切换功能replace,add、hide

9.Image Pipeline默认有___3___个线程池

10.Dalvik是Android的____虚拟机____

11.简述Fresco的缓存机制三级缓存:Bitmap缓存,未解码图片的内存缓存, 磁盘缓存

12简述Image pipeline线程池配置

3个线程用于网络下载,2个线程用于磁盘操作:本地文件的读取,磁盘缓存操作。2个线程用于CPU相关的操作:解码,转换,以及后处理等后台操作

13.请列举四种线程间的通信机制Handler,EventBus,AsyncTask,Broadcast

14.RetentionPolicy.CLASS表示注解在class文件中可用,但会被VM丢弃

15.当我们下载未结束时候,退出保存下载进度,当下次打开继续下载的时接着上次的进度继续下载断点续传

16.抽象类 有构造方法,接口中 有构造方法 答案:可以、不可以

17.多线程断点续传就是将 和 相结合进行文件的下载。 断点续传、多线程

18.Android 项目开发过程中RxJava中主要4个角色Observable (可观察者,即被观察者)、 Observer (观察者)、 subscribe (订阅)、事件,subject

19.简单说说版本更新实现的思路

第一步,通过接口获取更新信息
第二步,通过接口拿到的版本号和本地的版本号进行比较
第三步,版本升级

20.简述一下Android项目开发过程MVP的使用流程

当某个 View 需要展示某些数据时,首先会调用 Presenter 的某个接口,然后 Presenter 会调用 Model 请求数据。当 Model 数据加载成功后会调用 Presenter 的回调方法通知 Presenter 数据加载完毕,最后 Presenter 再调用 View 层接口展示加载后数据。

21.简述Retrofit的认识?

Retrofit将 Http请求 抽象成 Java接口:采用 注解 描述网络请求参数 和配置网络请求参数 用 动态代理 动态 将该接口的注解“翻译”成一个 Http 请求,最后再执行 Http 请求

22.EventBus框架是采用建造者 模式设计的

23.ButterKnife是一个支持_View__注入的框架

24.Rxjava的异步是_____观察者_____模式实现的

25.Rxjava判断是否存在数据项满足某个条件的操作符_______exists________。

26.__响应式___编程是一种基于异步数据流概念的编程模式

27.Java反射相关的类所在的包是java.lang.____ 答案:reflect

28.Java反射中getDeclaredMethods方法用于获取___所有的方法

29.java中允许子类继承父类中的注解需要添加的元注解是_Inherited___

30.java四个元注解有那种?@Target,@Retention,@Documented,@Inherited

31.Fresco的源码框架结构原理都有哪些?()强引用,软引用,缓存(bitmap,sd),网络。

32.你对ORM机制的理解多少?

ORM在面向对象模型与关系模型之间架起桥梁。通过对象与数据库之间映射的元数据,自动透明地把java中的对象持久化到关系数据库里,对数据库的操作可以转换为对对象的操作。效率:抛弃冗长乏味的持久化代码,集中精力编写业务逻辑。可维护性:逻辑清晰,维护更少的代码,模型之间的缓冲避免牵一发而动全身 可移植性:

33.在Android开发中你对Fresco的缓存机制了解多少?

Fresco 中设计有一个叫做 Image Pipeline 的模块。它负责从网络,从本地文件系统,本地资源加载图片。为了最大限度节省空间和CPU时间,它含有3级缓存设计(2级内存,1级磁盘)

34.在项目中你对对EventBus的理解?

EventBus是一款针对Android优化的发布/订阅事件总线。简化了应用程序内各组件间、组件与后台线程间的通信。优点是开销小,代码更优雅,以及将发送者和接收者解耦。

35.你项目中你对Java反射机制的认识?

Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为Java语言的反射机制。

36.在APK瘦身的过程中,我可以使用____TinyPng____工具来减少我们图片的体积

37.字符类型变量已 char 类型表示,它在内存中占 ___16__ 位 bit。

38.Rxjava异步处理是指_____观察者_____模式

39.简述一下线程同步与异步的区别。

异步操作两者都可以达到避免调用线程阻塞的目的,从而提高软件的可响应性。 同步是多个线程同时访问同一资源,等待资源访问结束,时间慢,效率低

40.简述信息加密流程

先用base64加密一下这个信息,然后要用支付宝的公钥进行加密一下,最后用你的私钥加密一下这个支付信息,然后给支付宝服务器发送过去。

41.RxJava中观察者模式相比java普通的观察者模式的优点是什么?

RxJava中规定当不再有新的事件发出时,可以调用onCompleted()方法作为标示;当事件处理出现异常时框架自动触发onError()方法;同时Observables支持链式调用,从而避免了回调嵌套的问题。

41.AngularJS 是一个 __ JavaScript__框架。

42.Android 默认使用_sp_作为字号单位

43.优先级最高的进程是___前台进程__

44.Git分布式版本控制工具,_git add_的作用是把文件保存到暂存区

45.列举文档对象模型DOM里document的常用的查找访问节点的方法并做简单说明

1.通过ID,使用 getElementById() 获得标签节点
2.通过标签的名称,使用getElementsByTagName() 获得元素节点或标签节点
3 通过使用一个元素节点的 parentNode、firstChild 以及 lastChild 属性
4.节点名称nodeName

46.写出5条AngularJS 指令 form input select ngcloak nglf

47.加密算法根据内容是否可以还原分为?可逆加密和非可逆加密?。可逆加密根据其加密解密是否使用的同一个密钥而可以分为___对称加密____和___非对称加密____。

48.你是如何理解线程池?

Java通过Executors提供四种线程池,分别为:newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。newFixedThreadPool 创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。newScheduledThreadPool 创建一个定长线程池,支持定时及周期性任务执行。newSingleThreadExecutor 创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO,LIFO, 优先级)执行。

49.简述对异步的了解

异步就是一种不阻碍线程的一种操作方法,一个线程的运行结果如何,不会影响到另一个线程的运行

50.图片二次采样流程?

1.第一次采样第一次采样我主要是想要获得图片的压缩比例,假如说我有一张图片是200*200,那么我想把这张图片的缩略图显示在一个50*50的ImageView上,那我的压缩比例应该为4,那么这个4应该怎么样来获得呢?这就是我们第一步的操作了,我先加载图片的边界到内存中,这个加载操作并不会耗费多少内存,加载到内存之后,我就可以获得这张图片的宽高参数,然后根据图片的宽高,再结合控件的宽高计算出缩放比。2.第二次采样
在第一次采样的基础上,我来进行二次采样。二次采样的时候,我把第一次采样后算出来的结果作为一个参数传递给第BitmapFactory,这样在加载图片的时候系统就不会将整张图片加载进来了,而是只会加载该图片的一张缩略图进来,这样不仅提高了加载速率,而且也极大的节省了内存,而且对于用户来说,他也不会有视觉上的差异。

51.操作sqlist要继承_____SQLiteOpenHelper_____,修改数据库的内容____update_____方法

52.JSON中{}表示________,[]________表示对象,数组

53.android开发中ANR全称__Application Not Responding__

54.说说JSON的优缺点

易读、更便于肉眼检查在语法的层面上,JSON与其他格式的区别是在于分隔数据的字符,JSON中的分隔符限于单引号、小括号、中括号、大括号、冒号和逗号。JSON片段的创建和验证过程比一般的XML稍显复杂。

55.JAVA中面向对象的三个基本特征,并简单描述

封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。继承是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。多态:一个接口,多种方法”同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果。

56.java8是_函数式_编程

57.Greendao在使用的时候自动生成_DaoMaster_,_Daosession_,_UserDao_等文件

58.微信支付提交支付接口数据格式是_XML_

59.EventBus在_onDestory()_方法中取消订阅目的是防止_内存溢出_。

60.Android的APP加固主要是对__dex__文件加壳

61.为了减小apk体积,项目中的图片可以使用谷歌推出的__webp__格式

62..9.png左侧和上方的横线代表的区域是__可拉伸区域__

63.谈谈你对android中事件分发机制的理解?

Activity、ViewGroup、View一个点击事件产生后,传递顺序是:Activity(Window) ; View然后通过dispatchTouchEvent()是否分发 、onInterceptTouchEvent() 是否拦截  onTouchEvent()是否消费来处理事件分发

64.谈谈你对项目中网络状态监测是在么处理的?

1.获得ConnectivityManager对象用于查看网络状态和管理网络连接相关的操作
2.获取ConnectivityManager对象对应的NetworkInfo对象包含网络连接的所有信息
3.根据需要从NetworkInfo对象取出关于网络连接的信息

65.谈谈你对Java中的线程状态的理解?

1. 新建(NEW):新创建了一个线程对象。
2.可运行(RUNNABLE):线程对象创建后,其他线程(比如main线程)调用了该对象的start()方法。该状态的线程位于可运行线程池中,等待被线程调度选中,获取cpu 的使用权 。
3. 运行(RUNNING):可运行状态(runnable)的线程获得了cpu 时间片(timeslice) ,执行程序代码。
4. 阻塞(BLOCKED):阻塞状态是指线程因为某种原因放弃了cpu 使用权,也即让出了cpu timeslice,暂时停止运行。直到线程进入可运行(runnable)状态,才有机会再次获得cpu timeslice 转到运行(running)状态。阻塞的情况分三种: 
(一). 等待阻塞:运行(running)的线程执行o.wait()方法,JVM会把该线程放入等待队列(waitting queue)中。
(二). 同步阻塞:运行(running)的线程在获取对象的同步锁时,若该同步锁被别的线程占用,则JVM会把该线程放入锁池(lock pool)中。
(三). 其他阻塞:运行(running)的线程执行Thread.sleep(long ms)或t.join()方法,或者发出了I/O请求时,JVM会把该线程置为阻塞状态。当sleep()状态超时、join()等待线程终止或者超时、或者I/O处理完毕时,线程重新转入可运行(runnable)状态。
5. 死亡(DEAD):线程run()、main() 方法执行结束,或者因异常退出了run()方法,则该线程结束生命周期。死亡的线程不可再次复生。

66.greenDAO 优势?

1、一个精简的库
2、性能最大化
3、内存开销最小化
4、易于使用的 APIs
5、对 Android 进行高度优化

67.http与https区别?

1、https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。
2、http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。
3、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
4、http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。

68.对于一个已经存在的SharedPreferences对象setting,想向其中存入一个字符串"person",setting应该先调用_edit___方法

69.多线程下载其实就是,通过多个_____同时和____连接。线程、服务器

70.MVP和MVC框架模式的区别在哪两层_Presenter__、_Controller__。

71.android中View事件分发机制

1.事件分发的对象:事件,当用户触摸屏幕时(View或ViewGroup派生的控件),将产生点击事件(Touch事件);
2.事件分发的本质:将点击事件(MotionEvent)向某个View进行传递并最终得到处理;即当一个点击事件发生后,系统需要将这个事件传递给一个具体的View去处理。这个事件传递的过程就是分发过程。
3.事件在哪些对象之间进行传递:Activity、ViewGroup、View;一个点击事件产生后,传递顺序是:Activity(Window) -> ViewGroup -> View;
4.事件分发过程由哪些方法协作完成:dispatchTouchEvent() 、onInterceptTouchEvent()和onTouchEvent();
5.总结:Android事件分发机制的本质是要解决:点击事件由哪个对象发出,经过哪些对象,最终达到哪个对象并最终得到处理;Android中事件分发顺序:Activity(Window) -> ViewGroup -> View
事件分发过程由dispatchTouchEvent() 、onInterceptTouchEvent()和onTouchEvent()三个方法协助完成。

72.android使用中如果父控件和子控件事件产生冲突,你该如何解决?事件分发机制

73.写出Git命令 中 将所有修改过的工作文件提交暂存区的命令_____git add______

74.recycleView的LayoutManager作用是来确定每一个item的排列方式

75.定位的三种方式:__GPS定位____,___Network定位____,___AGPS定位_____

76.RecyclerView组件是Android__5.0___版本后推出的

77.Java中实现线程的两种方式是__继承Thread类、实现Runable接口

78.Android瘦身时去除无用资源需要在gradle中设置__shrinkResources__为_true_

79.启动一个Activity有四种模式_standard 、singleTask 、singleTop 、singleInstance

80.Android的APP加固主要是对__dex__文件加壳

81.WebView直接加载一个网址使用的方法是loadUrl()

82.简述Android activity的生命周期函数,以及各自的调用时机

onCreate(第一次创建一个Activity时调用)
onStart(Activity创建或者从后台重新回到前台时被调用)
onResume(Activity获取焦点,界面可用时被调用)
onPause(Activity界面失去焦点,界面不可用被调用)
onStop(退出当前Activity或者跳转到新Activity时被调用)
onDestroy(退出当前Activity时被调用,调用之后Activity就结束了)
onRestart(Activity从后台重新回到前台时被调用)

83.简述版本升级流程

在APP首页自动触发向服务端请求最新的版本信息,如果服务端返回的版本信息中versionCode与当前版本不一致,就弹出升级提示框让用户选择“立即更新”:直接启动下载“稍后提醒”:什么都不处理“忽略该版本”:当前版本不再提醒,如有更新版本还是要提醒。例如:用户版本是1.0,当前检查到的版本是2.0,用户选择了“忽略该版本”,则2.0的版本不再提示,到下个版本时,仍然要提示版本更新。

84.当前来说,播放视频有哪几种方式?

SurfaceView + Mediapalyer ; 使用系统播放器播放视频; VideoView结合MediaController

85.接口回调是如何实现的?

一些情况下,可能需要fragment和activity共享事件,一个比较好的做法是在fragment里面定义一个回调接口,然后要求宿主activity实现这个接口。当activity通过这个接口接收到一个回调,它可以让同布局中的其他fragment分享这个信息

87.AlertDialog类不能直接使用new关键字来创建AlertDialog类的对象实例,而是首先创建其内部类Builder类的对象,再调用这个内部类的show()方法来显示对话框。

88.Java开发环境中JDK的全称是____Java Development Kit___

89.Java设计模式中观察者模式,创建被观察类,继承______Observable_________类

90.RxJava采用_链式_调用

91.谈谈你对RxJava的使用流程

RxJAVA是一种观察者模式的延伸,在使用的时候需要有观察者和被观察者,所以我们需要建立两个类继承Observer和Observable分别作为观察者和被观察者

92.表达式 ”2”+3+4 的值为___234___

93.设计模式中的单例模式有__饿汉式___和__懒汉式___

94.在项目中自定义View时如果有自定义属性必须重写带__ 两个 _或三个参数的构造函数

95.Android开发中五大布局中,权重属性的布局的类名是__LinearLayout_

96.在项目中如果父控件和子控件事件产生冲突,你该如何解决事件分发机制

97.写出5个greenDAO的5个注解,并简单说明

@Index
使用@Index作为一个属性来创建一个索引;定义多列索引(@link Entity#indexes())
@JoinEntity
定义表连接关系
@JoinProperty
定义名称和引用名称属性关系
@OrderBy
排序
@Property
指定数据库数据表名
@Unique
向数据库列添加了一个唯一的约束

98.线程和进程的区别

进程和线程区别: 他们是不同的操作系统资源管理方式。
进程有独立的地址空间,一个进程崩溃后,不会对其他进程产生影响线程只是一个进程中不同的执行路径,线程有自己的堆栈和局部变量,线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉,  所以多线程的操作要比多进程的程序健壮。   但在进程切换时耗费资源较大,效率要差一些对于一些要求同时进行并且又要共享某些变量的并发操作,只能用线程,不能用进程,(因为进程在切换时耗费的资源要大一些,效率差一些)
进程是表示资源分配的基本单位,又是调度运行的基本单位。线程是进程中执行运算的最小单位,亦即执行处理机调度的基本单位。

99.java有几种引用类型

强引用,软引用、弱引用、虚引用、

100.android开发过程中自定义控件实现方式有:

组合控件自绘控件继承控件

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值