国内数一数二的互联网公司内部面试题库

524 阅读5分钟

一、java基础

1.接口的意义(百度)

规范、扩展、回调

2.抽象类的意义(乐视)

为其子类提供一个公共的类型

封装子类中得重复内容

定义抽象方法,子类虽然有不同的实现 但是定义是一致的

3.内部类的作用(百度,乐视)

内部类可以用多个实例,每个实例都有自己的状态信息,并且与其他外围对象的信息相互独立。

在单个外围类中,可以让多个内部类以不同的方式实现同一个接口,或者继承同一个类。

创建内部类对象的时刻并不依赖于外围类对象的创建。

内部类并没有令人迷惑的“is-a”关系,他就是一个独立的实体。

内部类提供了更好的封装,除了该外围类,其他类都不能访问

4.父类的静态方法能否被子类重写,为什么?(猎豹)

不能

子类继承父类后,用相同的静态方法和非静态方法,这时非静态方法覆盖父类中的方法(即方法重写),父类的该静态方法被隐藏(如果对象是父类则调用该隐藏的方法),另外子类可继承父类的静态与非静态方法,至于方法重载我觉得它其中一要素就是在同一类中,不能说父类中的什么方法与子类里的什么方法是方法重载的体现

5.举1-2个排序算法,并使用java代码实现(美团)

http://blog.csdn.net/qy1387/article/details/7752973

6.java虚拟机的特性(百度、乐视)

Java语言的一个非常重要的特点就是与平台的无关性。而使用Java虚拟机是实现这一特点的关键。一般的高级语言如果要在不同的平台上运行,至少需要编译成不同的目标代码。而引入Java语言虚拟机后,Java语言在不同平台上运行时不需要重新编译。Java语言使用模式Java虚拟机屏蔽了与具体平台相关的信息,使得Java语言编译程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。Java虚拟机在执行字节码时,把字节码解释成具体平台上的机器指令执行。

二、android基础

1.数据库的操作类型有哪些,如何导入外部数据库?

把原数据库包括在项目源码的 res/raw

android系统下数据库应该存放在 /data/data/com..(package name)/ 目录下,所以我们需要做的是把已有的数据库传入那个目录下.操作方法是用FileInputStream读取原数据库,再用FileOutputStream把读取到的东西写入到那个目录.

2.是否使用过本地广播,和全局广播有什么差别?

因广播数据在本应用范围内传播,不用担心隐私数据泄露的问题。

不用担心别的应用伪造广播,造成安全隐患。

相比在系统内发送全局广播,它更高效。

3.是否使用过intentServer,作用是什么,AIDL解决了什么问题?(小米)

生成一个默认的且与主线程互相独立的工作者线程来执行所有传送至 onStartCommand() 方法的Intetnt。

生成一个工作队列来传送Intent对象给你的onHandleIntent()方法,同一时刻只传送一个Intent对象,这样一来,你就不必担心多线程的问题。在所有的请求(Intent)都被执行完以后会自动停止服务,所以,你不需要自己去调用stopSelf()方法来停止。

该服务提供了一个onBind()方法的默认实现,它返回null。

提供了一个onStartCommand()方法的默认实现,它将Intent先传送至工作队列,然后从工作队列中每次取出一个传送至onHandleIntent()方法,在该方法中对Intent对相应的处理。

AIDL (Android Interface Definition Language) 是一种IDL 语言,用于生成可以在Android设备上两个进程之间进行进程间通信(interprocess communication, IPC)的代码。如果在一个进程中(例如Activity)要调用另一个进程中(例如Service)对象的操作,就可以使用AIDL生成可序列化的参数。

AIDL IPC机制是面向接口的,像COM或Corba一样,但是更加轻量级。它是使用代理类在客户端和实现端传递数据。

4.Activity、Window、View三者的差别,fragment的特点?(360)

Activity像一个工匠(控制单元),Window像窗户(承载模型),View像窗花(显示视图)

LayoutInflater像剪刀,Xml配置像窗花图纸。

在Activity中调用attach,创建了一个Window

创建的window是其子类PhoneWindow,在attach中创建PhoneWindow

在Activity中调用setContentView(R.layout.xxx)

其中实际上是调用的getWindow().setContentView()

调用PhoneWindow中的setContentView方法

创建ParentView:
作为ViewGroup的子类,实际是创建的DecorView(作为FramLayout的子类)

将指定的R.layout.xxx进行填充
通过布局填充器进行填充【其中的parent指的就是DecorView】

调用到ViewGroup

调用ViewGroup的removeAllView(),先将所有的view移除掉

添加新的view:addView()

fragment 特点

Fragment可以作为Activity界面的一部分组成出现;

可以在一个Activity中同时出现多个Fragment,并且一个Fragment也可以在多个Activity中使用;

在Activity运行过程中,可以添加、移除或者替换Fragment;

Fragment可以响应自己的输入事件,并且有自己的生命周期,它们的生命周期会受宿主Activity的生命周期影响。

转载于GitHub: https://github.com/JackyAndroid

加我好友拉你进群: