龙空技术网

Android面试官问的一些问题,看完这一篇就没有拿不到的offer

愿天堂没有代码 134

前言:

而今兄弟们对“apk解包后有哪些文件”大致比较重视,兄弟们都想要知道一些“apk解包后有哪些文件”的相关资讯。那么小编在网上收集了一些关于“apk解包后有哪些文件””的相关文章,希望看官们能喜欢,大家快快来学习一下吧!

前言

我是2020年毕业于中南大学的计算机学院的,大家可以叫我小吴,我嘞毕业之后在华为实习了差不多一年多,一直都从事着Android开发。 然后2021年的时候因为我自己的一些原因打算离职到外面看看,那个时候我是投了超级多简历,然后去面试了小红书啊、快手啊,爱奇艺啊,微信,小米.....等等很多的大厂,小厂然后下面这些嘞就是我和我同学每次面试后记录的一些面试官问我们的问题(ps:基本上特别的全面),我总结了一些给大家看一下。

简单粗暴的说:用最少的时间,最高效率,让你清楚:想要拿到Android工程师 offer你就要好好的看了

小红书 Android开发工程师

一面

Java方面静态变量和实例变量的区别静态变量有static关键字修饰静态变量不属于某个实例对象,而是属于类,也叫类变量,只要程序加载了类的字节码,不用创建任何实例对象就会被分配空间,就可以被使用,也就是说,你创建了多个对象,他们共用了一个静态变量,而实例对象是属于自己的独有的,不会被共享!(可以Class.var使用),位于方法区实例变量必须创建对象后,才可以通过这个对象来使用。即new Class().var,位于堆区“==” & equals()浅拷贝 & 深拷贝HashMap , 扩容机制多个线程如果共享多个资源,需要怎么保证安全volatile,CAS/ABAAndroid方面事件的分发机制Handler原理TCP UDPKotlin和Java的区别快手 Android开发工程师

一面:

一个平面上n个点,找出k条线穿过max点数100位面试者,每人要四轮面试,怎么分配面试官

二面:

手撕:最长单调区间Android/ 布局优化Activity启动模式RecyclerView和ListView区别Handler机制,loop方法为何不会造成ANRView绘制流程SingleTop和standard启动模式下,生命周期回调有何不同onStart和onResume区别Java/ 面向对象三大特性Array和Linked区别HashMap底层进程间通信方式equals和==区别线程间加锁的方式知道啥设计模式synchronized的不同使用异常线程池创建线程的方式OS/ 死锁网络/ tcp和udp的区别微信视频号安卓工程师

Android方面:

1、讲一下Android发生Crash的整体流程。Android在遇到非可检异常时就会触发该线程的 unCatchExcepttionHandler中的unCatchException()方法,最终在该方法的 process.kill()方法中杀死该进程,appCrash完成。

2、Native层Crash是如何捕获到的?Android NativeCrash发生时会向该进程发出错误的不可处理信号,Linux系统收到该信号后无法处理便会杀死进程,发生Crash。Android当中捕获的方法主要是使用了Linux系统下的核心转储机制,在发生Crash前系统会记录下当前的上下文信息,形成tombstone文件,存储起来,再杀死线程,这个tombstone文件就是我们要分析的对象。

3、Java层Crash是如何捕获到的?JavaCrash的捕获有几个关键部分

4、RuntimeInit类中的LoggingHandler类,用于打印日志时使用

5、RuntimeInit类中的KillApplicationHandler类,是一个系统默认的 UncaughtExceptionHandler,用于发生JavaCrash时kill掉进程

6、RuntimeInit类中的commonInit方法,其内部就是初始化了所有线程的set UncaughtExceptionHandler()。因此在发生非可检异常时,就会调用该线程的UncaughtExceptionHandler.unCatchException方法,在该方法内部进行捕获。

7、如何做到发生异常时不会杀死APP?在 UncaughtExceptionHandler.unCatchException方法调用Looper进行死循环可以。

8、讲一下Handler机制

9、Looper的定时器是用如何实现的?通过nativePollOnce(ptr, nextPollTimeoutMillis);定时睡眠nativeWake(mPtr);进行唤醒

10、APK包里有什么?主要有5个部分:

dex文件:.class文件编译后的产物

Assets:资源文件,如图片等,主要是通过AssetsManger来进行加载。

Resource:资源文件,layout等,通过R.xxxxxx.id来进行引用

Library:so库引用目录

META-INF:APK 签名有关的信息

11、APP在运行时是通过什么来获取到layout文件的?

12、讲一下surfaceview跟textview。

13、Activity A 启动 Activity B 时,他们在同一个栈的情况下生命周期以及执行顺序是怎么样的?

14、Destroy()方法是什么时候调用的?

15、调用finish()方法。

16、Handler中已经没有要处理的message。 满足这两个条件才会调用。

Java方面:

有什么线程同步的机制?volatile关键字讲一下。volatile如何实现可见性?synchronize如何实现可见性?volatile防止指令重排代码级别如何实现?

操作系统的理解:

讲一讲操作系统内核态跟系统态的了解。操作系统内核是什么?操作系统内核本质上就是操作系统代码的常驻机构。操作系统内核就是管理所有代码和数据结构的集合。操作系统内核是软件和硬件之间的媒介。为什么操作系统要有内核态、系统态的存在?Linux有什么信号?sigill信号在什么情况下会触发?

算法题:

给一个数组,每个值表示的是在坐标系中的点下标,找出该数组在组成的最长直线为多少,相同最长长度直线有几条?给一段数字,给出其可能组成的所有IP地址。小米 android开发http与https的区别。Java构造器工作工程。Java中的引用类型有哪些。http,http1.1,http2.0有啥区别。TCP/IP最大容量的意义是什么?还有Integer与int类型区别?各自怎么比较大小?还有垃圾回收机制还有final的用法为什么HashMap在1.8中采用了红黑树?你能说下啥是红黑树吗?啥是平衡二叉树?啥是二叉搜索树?啥是满二叉树?Java1.7采用数组加链表与1.8采用红黑树有啥区别?HashMap 线程不安全原因是啥?分版本作答如果线程安全的话 要用哪个?我说Hashtable。他说HashTable效率太低,怎么安全又效率高?对称加密与非对称加密?SSL是干嘛的?美团app android开发工程师

一面

jvm内存模型new 对象的过程类加载过程ClassLoader源码final关键字匿名内部类讲下垃圾回收算法LinkedList && ArrayListhashMap常用注解,spring中的注解锁,synchronized底层原理https && http浏览器输入地址后的过程状态码 303 304你知道的设计模式单例模式 说了双重校验锁,静态内部类 ,不同场景下如何选择双重校验锁为什么要两次判空volatile,指令重排爱奇艺 Android开发工程师

一面:

介绍项目Android布局嵌套深有什么问题kotlin协程HashMap原理算法:手写快排

二面:

Activity启动模式Activity A → B的生命周期在这四种启动模式下的状态广播类型有序广播如何实现的按顺序收到广播持久化存储方式SharedPreferences的格式xml解析方式json与xml的区别,json为什么比xml更好Android view绘制流程surfaceViewsp, dp, px的区别机型大小适配适配语言ANR 什么时候出现,如何排查Android动画startService与bindService的区别Service保活方式java泛型,<? extends T>能否add元素重写equals方法需要重写hashCode方法吗ThreadLocalwait,sleep,yield,join的区别

算法1:

字符串全排列

算法2:

1、删除链表中倒数第n个节点

字节跳动旗下的抖音短视频Android开发工程师

一面:

项目volitale与synchronized的区别手写单例匿名内部类如何持有外部类对象内存泄漏的概念内存泄漏的场景内存泄漏检测的工具handler原理,sendMessage与sendMessageDelay如何保证Message放入MessageQueue中的顺序两个Message相隔5秒,这5秒内线程会一直阻塞吗自定义 View如何特殊处理wrap_content,padding的实现MVVM和MVP 的区别(引出了一系列问题,不是很了解就直接说不了解比较好)LiveData与RxJava的区别LiveData生命周期感知如何实现介绍RxJavahttps与http的区别,中间人如何修改密钥算法:二叉树z字形打印

二面:

项目final、finally与finalize的区别java开启一个线程的方式Thread.start()与直接调用run()的区别Java默认提供了几种线程池thread{ i++ }执行10次结果,如何让i最后等于10synchronized与reentrantlock区别死锁悲观锁乐观锁gc垃圾回收垃圾标记阶段,Python如何实现的断开循环引用Retrofit返回的是什么数据类型服务器返回的数据有哪些类型,为什么不能用xml类型返回请求数据这个过程发生了什么get与post请求的区别,get与post携带数据的区别java注解kotlin扩展函数原理算法:两个链表相加

三面:

main方法执行之前发生了什么

public class Main {   	public static void main(String[] args) { System.out.println(Main.class.getName()); }}
System.out.println(“a”)将字符输出到屏幕发生了什么双击QQ发生了什么浏览器输入url发生了什么根据前序遍历和中序遍历输出后序遍历如果排期只有一周的任务,但是以我的能力需要两周才能完成,这个时候你会怎么办。k个一组反转链表字节跳动旗下的抖音电商相关 Android开发工程师

一面:

实习学到的架构MVVMDagger原理livedata原理进程和线程操作系统IO模型进程通信方式管道通信原理TCP协议如何实现可靠传输UDP如何实现可靠传输java创建线程线程池原理线程池拒绝策略synchronized与reentrantlock实现方式的区别AQS原理handler原理Retrofit原理

算法:

二叉树右视图 — 非递归实现

二面:

Navigation的优缺点如何实现的自定义navigate方法切换fragment,如何让被覆盖的fragment感知到生命周期gc如何判断垃圾对象成员变量与局部变量的区别,局部变量的值一定是存放在堆中吗()jvm类加载的时机jvm类加载过程双亲委托机制是什么双亲委托机制什么时候会被破坏内存泄漏是什么volatile的作用写一个死锁算法:判断A是否是B的子树

三面:

自己是如何学习Android的实习过程中做的需求说一下实习过程中的难点说一个实习过程中和哪些人接触的比较多如何和别人沟通的实习的收获挑一个项目说一下里氏替换原则http状态码http多路复用数据库拿了哪些offer算法 汉字表示的数字转成阿拉伯表示。最后

我一直觉得技术面试不是考试,考前背背题,发给你一张考卷,答完交卷等通知。其实我觉得技术面试是一个 让我们认识自己 的一个过程,让我们知道现在招聘这个岗位的要求差距和我们差多少。

更重要的是,技术面试是一个双向了解的过程,要让对方发现你的闪光点,同时也要 去发现对方的闪光点,因为他以后可能就是你的同事或者领导,所以,面试官问你有什么问题的时候,不要说没有问题了,要去试图了解他的工作内容、了解这个团队的工作氛围。

找工作无非就是看这三点:做什么事,和什么人,给多少钱,要给这三者在自己的心里有那么一个划分。

谢谢各位看官老爷的观看,虽然我只是把题目提供给大家了,但是大家理解一下小吴题目实在太多了(ps:其实是我偷偷在玩游戏没有搞完,然后看到现在是三月了,很多企业都开始大规模的招聘了),各位看官老爷下次更新我一定后答案也反正里面,小吴在这里希望各位看官老爷通过我分享的题目顺利的拿到自己心爱的offer。点点赞和关注,给小吴加油咯。(ps:这可是熬夜写出来的呀,各位各位看官老爷动一动小手!)

标签: #apk解包后有哪些文件