一哥们去面试Android开发 15个question(问题)

 andlly   2018-07-01 00:24   64 人阅读  0 条评论

        做两快三年的Android开发,工作的任务也就是一些界面的编写,RecyclerView的简单使用,网络框架也是别人封装好的直接用,再就是集成些第三方的分享、支付什么的!技术上的提升可以说根本没有,和工作一年左右的人,比起来就多几个项目优势!所以这次出来找工作还期望15K,说起来心里慌得一逼!有哪些问题呢?

    面试中遇到的一些问题


Number.1

        问:ListView和RecyclerView的使用,就问我它们有什么区别?

        答:我也就只能简单的答答RecyclerView怎么使用ListView怎么使用!

Number.2

        问:既然RecyclerView在很多方面能取代ListView,Google为什么没把ListView划上一条过时的横线?

        答:我当然是不知道怎么回答,然后就请教她,然后她就告诉我ListView采用的是RecyclerBin的回收机制在一些轻量级的List显示时效率更高!顿时我                 就服气了!

Number.3

        问:你用过MVP,那你知道Dagger2吧,介绍下吧?

        答:又是一脸懵逼!

             还是回去洗洗睡吧!!!

Number.4

        问:HashMap的内部实现原理?

        答:HashMap是对数据结构中哈希表(Hash Table)的实现, Hash表又叫散列表。Hash表是根据关键码Key来访问其对应的值Value的数据结构,它通过一个映射函数把关键码映射到表中一个位置来访问该位置的值,从而加快查找的速度。这个映射函数叫做Hash函数,存放记录的数组叫做Hash表。

Number.5

        问:Activity生命周期,有哪些启动模式,以及应用场景?

        答:Activity的启动模式总共有两种方式一种是通过XML方式二种方式就是通过Intent中设置标志位来为Activity指定启动模式

Number.6

        问:你用过AsyncTask,那你跟我说说AsyncTask的内部实现原理?

        答:首先说说它的出现是为了解决在子线程中做了耗时操作后需要回到UI线程去更新这样一种情景,然后就开始准备说它的四个方法                           (doInBackground(Params...) 、publishProgress(Progress...)、onProgressUpdate(Progress...)、onPostExecute(Result)),他立刻就打断我了,说我问的是内部原理。

Number.7

        问:内部维护了一个线程池,是串行还是并行,怎么维护的?

        答:明白串行还是并行非常重要,如果是串行,那么如果有多个task,那么后面的task必须要等前面的task任务执行完了才会被执行。每次创建一个task的时候,都会new一个WorkerRunnable和FutureTask,其实就是一层包装

Number.8

        问:那你说说线程池的四种初始化吧?

        答:1、由Executors的newFixedThreadPool方法创建。它是一种线程数量固定的线程池,当线程处于空闲状态时,他们并不会被回收,除非线程池被关闭。当所有的线程都处于活动状态时,新的任务都会处于等待状态,直到有线程空闲出来。FixedThreadPool只有核心线程,且该核心线程都不会被回收,这意味着它可以更快地响应外界的请求。

              2、由Executors的newCachedThreadPool方法创建,不存在核心线程,只存在数量不定的非核心线程,而且其数量最大值为Integer.MAX_VALUE。当线程池中的线程都处于活动时(全满),线程池会创建新的线程来处理新的任务,否则就会利用新的线程来处理新的任务,线程池中的空闲线程都有超时机制,默认超时时长为60s,超过60s的空闲线程就会被回收。和FixedThreadPool不同的是,CachedThreadPool的任务队列其实相当于一个空的集合,这将导致任何任务都会被执行,因为在这种场景下SynchronousQueue是不能插入任务的,SynchronousQueue是一个特殊的队列,在很多情况下可以理解为一个无法储存元素的队列。从CachedThreadPool的特性看,这类线程比较适合执行大量耗时较小的任务。当整个线程池都处于闲置状态时,线程池中的线程都会因为超时而被停止回收,几乎是不占任何系统资源。

              3、通过Executors的newScheduledThreadPool方式创建,核心线程数量是固定的,而非核心线程是没有限制的,并且当非核心线程闲置时它会被立即回收,ScheduledThreadPool这类线程池主要用于执行定时任务和具有固定时期的重复任务

              4、通过Executors的newSingleThreadExecutor方法来创建。这类线程池内部只有一个核心线程,它确保所有的任务都在同一个线程中按顺序执行。SingleThreadExecutor的意义在于统一所有外界任务一个线程中,这使得这些任务之间不需要处理线程同步的问题

Number.9

        问:你用过MD,你知道怎么定义一个Behavior吗?

        答:首先必须要知道的是CoordinatorLayout.Behavior这个基类是支持泛型的,看到FloatingActionButton.Behavior后发先它是限制了引用它的View必须是FloatingActionButton罢了,那我们这里也来学它继承一下就OK了。

Number.10

        问:RecyclerView的拖拽怎么实现的?

        答:得实现一点小小的动画 比如在进行拖拽的时候,被拖拽的那个item应该背景颜色变得和其他item不一样并且这个item会进行缩放,那么我们就得重写onSelectedChanged方法 

Number.11

        问:写一个SingTop,有哪三个条件?

        答:1、构造函数私有  2、含有一个该类的静态私有对象  3、有一个静态的公有的函数用于创建或获取它本身的静态私有对象  4、其次才是考虑线程同步!

Number.12

        问:一个按升序排列好的数组int[] arry = {-5,-1,0,5,9,11,13,15,22,35,46},输入一个x,int x = 31,在数据中找出和为x的两个数,例如 9 + 22 = 31,要求算法的时间复杂度为O(n);

        答:先给出的数组中有负数,负数+正数有可能得到中间的那个数,再则它这靠得是一个双向逼近的算法!

Number.13

        问:如何向一个数据库具有int类型A,B,C,D四列的表中随机插入10000条数据?如何按升序取出A列中前10个数?

        答:数据库其实也就是一个文件,一个具有固定封装特定语法操作的文件,既然是文件读写就要考虑到效率问题!在数据库中提高效率用到什么,是事务!如果一条条插入,其实每次插入都会维持一个事务,也就相当于文件的打开和关闭,10000次的打开和关闭是很消耗性能的,所以要在插入前使用BEGIN TRANSACTION开启事务,再10000条数据插入完成时用END TRANSACTION结束事务,这样就相对于文件只打开了一次,10000条批量操作完后,再关闭文件!

Number.14

        问:service两种启动方式有什么区别?

        答:开启Service主要有两种方式:

              1、startService();此种开启方式Service会经历onCreate()--onStart()。若Service还没运行,则先调用onCreate(),然后调用onStart();如果Service已经启动,则只会调用onStart()。一个Service的onStart()方法可以被调用多次。stopService的时候直接onDestroy,如果是调用者自己直接退出而没有调用stopService的话,Service会一直在后台运行。

              2、bindService():此种启动方式Service会经历onCreate()--onBind(),onBind将会返回给客户端一个IBind接口实例,IBind允许客户端回调服务的方法,比如得到Service的运行状态等。这个时候调用者会和Service绑定在一起,调用者退出的时候,Service就会调用onUnbind--onDestroy退出。

Number.15

        问:说说三级缓存、Handler机制?

        答:三级缓存:1、内存缓存;2、本地缓存;3、网络缓存.

              Handler用于同一进程里线程间的通信,作用是将一个任务切换到某个指定的线程中去执行。然而Handler并不是专门用于更新UI,它只是常被开发者用来更新UI。例如我们可以内部运行一个拥有Handler机制功能的非UI线程(HandlerThread类使用),作为一个业务逻辑入口,消息处理里实现调用相关业务功能。


本文地址:http://10tf.com/post/21.html
版权声明:本文为原创文章,版权归 andlly 所有,欢迎分享本文,转载请保留出处!

 发表评论


表情

还没有留言,还不快点抢沙发?