Android面试笔记

一,半导体公司,开发公司内部资讯APP
1,项目的结构


childAPP.png

2,跨平台主要使用哪些方式
Cordova
Cordova通过对HTML、CSS、JS封装为原生APP。Cordova将不同设备的功能,按标准进行了统一封装,开发人员不需要了解设备的原生实现细节,并且提供了一组统一的JavaScript类库,以及为这些类库所使用的设备相关的原生后台代码。因此实现了“write once, run anywhere”(一次开发,随处运行)

React Native
React Native支持标准平台组件使用,在iOS平台我们可以使用UITaBar控件,在Android平台我们可以使用rawer控件。这样App从使用上和视觉上拥有像原生App一样的体验

Flutter
Flutter是面向iOS和Android应用,提供一套基础代码(使用Dart语言)的高性能高可靠软件开发工具包,使开发者能够在iOS和Android两个主要的移动平台上,打造统一代码的高性能应用。
Flutter能够在iOS和Android上运行起来,依靠的是一个叫Flutter Engine的虚拟机,Flutter Engine是Flutter应用程序的运行环境,开发人员可以通过Flutter框架和API在内部进行交互

3,项目中的保活是怎么做到的
1),前台服务,startForeground

  1. ,双进程保活
    3),使用WakefulBroadcastReceiver,WakefulBroadcastReceiver是BroadcastReceiver的一种特例。它会为你的APP创建和管理一个PARTIAL_WAKE_LOCK 类型的WakeLock。WakefulBroadcastReceiver把工作交接给service(通常是IntentService),并保证交接过程中设备不会进入休眠状态。如果不持有WakeLock,设备很容易在任务未执行完前休眠。最终结果是你的应用不知道会在什么时候能把工作完成;
    4),JobService
    5),开启自启动权限及允许后台允许 针对不同的机型做不同的处理,小米是神隐模式 华为锁屏清理应用等等

4,团队协作

5,activity的生命周期
onCreate onStart onResume onpPause onStop onDestroy

二、手机终端
1,笔试,两个int 分别是a,b 不使用临时变量的情况下 如何交换a,b的值
1),#python下,只要下面两行
a = 1,b = 2
a , b = b , a

2),通用的方法
int a = 1, b=2;
a = a+b;
b = a-b;
a = a-b;

int a=2=010(二进制);
int b=4=100(二进制);
异或运算如下:
a=ab=010100=110(此时,a的值改变为二进制的110)
b=ab=110100=010(此时,b的值改变为二进制的010,即十进制的2)
a=ab=110010=100(此时,a的值改变为二进制的100,即十进制的4)

2,笔试,字符串,不使用API函数的情况下,如何比较是否相等

3,activity转换屏幕的生命周期
1),运行Activity,得到如下信息

onCreate-->
onStart-->
onResume-->

2)、按crtl+f12切换成横屏时
onSaveInstanceState-->
onPause-->
onStop-->
onDestroy-->
onCreate-->
onStart-->
onRestoreInstanceState-->
onResume-->

3),再次切换竖屏
onSaveInstanceState-->
onPause-->
onStop-->
onDestroy-->
onCreate-->
onStart-->
onRestoreInstanceState-->
onResume-->
onSaveInstanceState-->
onPause-->
onStop-->
onDestroy-->
onCreate-->
onStart-->
onRestoreInstanceState-->
onResume-->

4,launcher的属性,和普通APP的区别
launcher和APP区别:







5,tcp/ip的理解 每一层是否了解,知道数据抓包吗?Tcp/ip和udp的区别是什么?
物理层
数据链路层
传输层
网络层
会话层
表示层
应用层

6,为什么要内部类,你是在什么情况用到?
1).一个内部类的对象能够访问创建它的对象的实现,包括私有数据。
2). 对于同一个包中的其他类来说,内部类能够隐藏起来。
3).匿名内部类可以很方便的定义回调。
4).使用内部类可以非常方便的编写事件驱动程序
5).一个内部类对象可以访问创建它的外部类对象的内容,甚至包括私有变量

匿名内部类的

public class JavaTest2 {
public static void main(String[] args) {
new Person() {
public void say() {// 匿名内部类自定义的方法say
System.out.println("say方法调用");
}

        @Override
        public void speak() {// 实现接口的的方法speak
            System.out.println("speak方法调用");
        }
    }.say();// 直接调用匿名内部类的方法
}

}
interface Person {
public void speak();
}

7,字符串转int,int转字符串
String s = String.valueOf( value); // 其中 value 为任意一种数字类型。

String s = "test";
byte b = Byte.parseByte( s );
short t = Short.parseShort( s );
int i = Integer.parseInt( s );
long l = Long.parseLong( s );
Float f = Float.parseFloat( s );
Double d = Double.parseDouble( s );

8,主线程和子线的通信及主线程启动子线程如何携带参数?

synchronize对象锁
synchronize线程间的通信

9,NDK的开发流程
1),编写Java中的native方法
2),将Java编译成class字节码文件
3),用javah -jni命令生成.h文件
4),本地代码实现.h文件中的函数
5),将本地代码编译成动态库
6),在Java中使用 System.loadLibrary

10,有接触过framework层吗?
编译源码的步骤:链接https://www.jianshu.com/p/f2519cc40a7d

11,dp和像素的区别,和屏幕的大小有关系吗?

三、xx云科技
主要两部分,笔试和面试

笔试有15道 包括冒泡排序,Android中的同步有哪些?
面试
1,Android事件分发,如果在一个activity有很多的view 这个页面1分钟之后没有操作将返回上一层,在那个方法实现及逻辑合适?
1),定义一个timeTask 倒计时
2),在dispatchTouchEvent Action_up开始计时 其他动作取消计时

@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
    switch (ev.getAction()) {
        //获取触摸动作,如果ACTION_UP,计时开始。
        case MotionEvent.ACTION_UP:
            back.start();
            break;
        //否则其他动作计时取消
        default:
            back.cancel();
            break;
    }
    return super.dispatchTouchEvent(ev);

2,图片加载有哪些?glide图片加载的优势

Glide 在加载资源的时候,如果是在 Activity、Fragment 这一类有生命周期的组件上进行。
当 Activity、Fragment 等组件进入不可见,或者已经销毁的时候,Glide 会停止加载资源。
Application 的生命周期贯穿整个应用,所以 applicationManager 只有在应用程序关闭的时候终止加载。

3,进程间的通信有哪些?
1),广播
2),aidl

  1. ,Intent
    4),Content Provider
    5),Binder

4,oom是怎么导致的,原因是什么?
内存溢出:申请的内存超出了JVM能提供的内存大小,此时称之为溢出
1).内存泄露造成
2).加载的文件或者图片过大造成

5,内存泄漏是什么,如何解决内存泄漏问题?
1),由于单例的静态特性使得其生命周期和应用的生命周期一样长,如果一个对象已经不再需要使用了,而单例对象还持有该对象的引用,就会使得该对象不能被正常回收,从而导致了内存泄漏。

6,有没有做过和硬件相关的通信?
暂无

7,Android的消息机制,handle消息机制?

8,垃圾回收的原理

四,xx金融公司
1,说一下你项目的技术点

2,你项目中的自动设置是如何做到的
3,适配如何做的
4,socket长连接实现
5,如何保活

五,xx龙集团公司
1,说一下你在项目主要负责那些模块
2,线程之间的通信,eventBus的实现原理
3,为什么会内存泄漏,如何解决
4,如何解决事件的冲突
5,自定义view有做过吗?
6,目前项目使用什么模式?MVVM模式有了解吗?viewmode的作用?
7,rxjava有了解吗?
8,有使用过leakcanry的实现机制是什么呢?
9,Android打包机渠道包如何做?

六,xx出行
1,笔试题,快速排序,Java的数据接口及
2,说说项目的主要功能
3,什么是代理
4,hashMap的实现机制
5,Android耗电量主要问题点
6,aidl通信
7,多线程的使用
8,http的机制是如何的?

七,xx旅行
1,内存泄漏的原因是什么?什么是引用,有几种引用,Java回收的时候,哪些引用是会被回收
2,rxjava的理解 如果发出两个请求如何同时获得反回值
3,自定义viewGroup的流程 怎么样测量子view 和确认在画布上
4,使用了realm数据库 这数据的有点是什么?
5,画一下你们项目结构,不涉及商业机密
6,MVP的模式 如果view销毁了 请求还在这时候有做什么处理?会导致什么样的问题?
7,OKhttp的拦截器机制你了解吗?

写一个算法题
一个数组 希望得到一个新的数组 数组1*2 数组2 *4 以次2……n倍数
算法题2 假如一个月拍一个牌照的概率是5%,1年有12个月 排到拍照的概率多少?

八,某社交公司
1,MVP的使用和MVC有什么区别,MVP会导致内存泄漏
2,了解设计模式吗?哪些
3,如何内存优化的
4,kotlin转换数据类型
5,recycleview中通过什么控制布局方向
6,eventBus的使用及机制
7,性能优化
8,tcp/ip的七层是哪七层
9,socket长连接是如何保证心跳
10,线程有几种状态
11,工厂模式有几种 什么情况下使用
12,继承和抽象分别在什么时候使用
13,发射如何使用,在什么时候使用

九,
1,反射修改资源文件
2,强制开启流量
3,加固的原理、AAR文件可以加固吗
Android的打包机制是aapt 打包源文件,包括res、asset、Androidmainfest.xml 文件 Android基础库
aidl 转化为.Java文件 JavaComile把Java
4,组件化和热修复的原理
5,多线程的理解和同步

你可能感兴趣的:(Android面试笔记)