Android工程师面试准备知识点,2024年最新面试真题解析公众号

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Android开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip204888 (备注Android)
img

正文

2.      获取builder

builder =builderFactory.newDocumentBuilder();

3.      解析为Document对象

Document document  = builder.parse(xmlFile);

4.      获取根元素

Element root = document.getDocumentElement();

5.      获取根元素下的子节点

NodeList childNodes =root.getChildNodes();

SAX解析:不像DOM,SAX是事件驱动型的XML解析方式。它顺序读取XML文件,不需要一次全部装载整个文件。当遇到像文件开头,文档结束,或者标签开头与标签结束时,它会触发一个事件,用户通过在其回调事件中写入处理代码来处理XML文件,适合对XML的顺序访问。

1.      获取factory

SAXParserFactory factory =SAXParserFactory.newInstance();

2.      获取Parser

SAXParser parser =factory.newSAXParser();

3.      开始解析

parser.parser(xmlFile, newMySAXListener());

PULL解析: 除了可以使用 SAX和DOM解析XML文件,大家也可以使用Android内置的Pull解析器解析XML文件。 Pull解析器的运行方式与 SAX 解析器相似。它提供了类似的事件,如:开始元素和结束元素事件,使用parser.next()可以进入下一个元素并触发相应事件。事件将作为数值代码被发送,因此可以使用一个switch对感兴趣的事件进行处理。当元素开始解析时,调用parser.nextText()方法可以获取下一个Text类型元素的值。

1.      获取parser

XmlPullParserparser = Xml.newPullParser();

2.      设置输入

parser.setInput(instream, “UTF-8”);

3.      获取事件类型

int eventType = parser.getEventType();

4.      开始解析

10.android的基础类库有哪些 例如 List 、Set、 HashSet有什么区别,如何排除重复的数据

答:

android.app :提供高层的程序模型、提供基本的运行环境

android.content :包含各种的对设备上的数据进行访问和发布的类

android.database :通过内容提供者浏览和操作数据库

android.graphics :底层的图形库,包含画布,颜色过滤,点,矩形,可以将他们直接绘制到屏幕上.

android.location :定位和相关服务的类

android.media :提供一些类管理多种音频、视频的媒体接口

android.net :提供帮助网络访问的类,超过通常的 java.net.* 接口

android.os :提供了系统服务、消息传输、 IPC 机制

android.opengl :提供 OpenGL 的工具

android.provider :提供类访问 Android 的内容提供者

android.telephony :提供与拨打电话相关的 API 交互

android.view :提供基础的用户界面接口框架

android.util :涉及工具性的方法,例如时间日期的操作

android.webkit :默认浏览器操作接口

android.widget :包含各种 UI 元素(大部分是可见的)在应用程序的屏幕中使用

List按对象进入的顺序保存对象,不做排序或编辑操作。Set对每个对象只接受一次,并使用自己内部的排序方法(通常,你只关心某个元素是否属于Set,而不关心它的顺序–否则应该使用List)。

具体查看http://blog.csdn.net/wwj_748/article/details/7883988

11.做过什么东西,介绍一下。

答:我做过一个新闻客户端,还有一个音乐播放器,实习正在做的是一个语音邮箱客户端,正在开发当中的一个新浪微博客户端。

1.      新闻客户端是我在大学参加软件开发大赛的一个作品,它是一款手机应用,用来显示新闻信息,可供用户查看和评论新闻。

2.      简、美音乐播放器是我自主研发的一个音乐播放器,本着想做一款简单、漂亮的音乐播放器给自己用。

3.      语言邮箱是我自己在实习公司参与开发的一款产品,是我们公司的一款产品。

4.      新浪微博客户端是我的一个进阶项目,想熟悉新浪微博开发平台API的使用,为自己开发其他开放平台做一个铺垫,现在还在开发当中。

12.触屏处理流程

答:事件传递顺序为ViewGroup::onInterceptTouchEvent()–>ViewGroup或View的onTouchEvent() –> Activity::onTouchEvent()

1.      当ViewGroup::onInterceptTouchEvent()返回值为false,事件(按下、移动、抬起等)都传递给目标View。如果在ViewGroup触发,就调用ViewGroup::OnTouchEvent(),如果在View触发,则调用View::OnTouchEvent();

2.      当ViewGroup::onInterceptTouchEvent()返回值为true,事件会直接传递到ViewGroup::onTouchEvent()处理。也就是说,事件后面的移动、抬起动作不会经过onInterceptTouchEvent(),而是直接传到onTouchEvent()。

3.      当ViewGroup::OnTouchEvent()/View::OnTouchEvent()返回值为true,表示按下动作事件被处理,意味着事件的移动、抬起等后续动作将会传到此方法。如果是View处理的话,则ViewGroup::OnTouchEvent()将不会获得该事件; 如果是ViewGroup处理,则Activity::OnTouchEvent()将不会活动该事件。

4.      当ViewGroup::OnTouchEvent()/View::OnTouchEvent返回值为false,表示不处理事件,系统将把事件传递给其父级处理。

5.      Activity::OnTouchEvent()这个是最后被处理的地方,如果不处理,系统将抛弃这个事件。

小结:onInterceptTouchEvent()是用来分发事件,OnTouchEvent()是用来处理事件的,谁不处理就交给上一级处理,层层传递。

13.activity流程

答:创建onCreate-  启动onStart – 开始onResume – 暂停 onPause – 结束onStop – 销毁onDestroy

在一个Activity正常启动的过程中,他们被调用的顺序是 onCreate ->onStart -> onResume, 在Activity被干掉的时候顺序是onPause -> onStop -> onDestroy ,这样就是一个完整的生命周期

详细介绍一下这几个方法中系统在做什么以及我们应该做什么:

onCreate: 在这里创建界面 ,做一些数据 的初始化工作

onStart: 到这一步变成用户可见不可交互 的

onResume: 变成和用户可交互 的,(在activity 栈系统通过栈的方式管理这些个

Activity的最上面,运行完弹出栈,则回到上一个Activity)

onPause: 到这一步是可见但不可交互 的,系统会停止动画 等消耗CPU 的事情

从上文的描述已经知道,应该在这里保存你的一些数据,因为这个时候

你的程序的优先级降低,有可能被系统收回。在这里保存的数据,应该在

onResume里读出来,注意:这个方法里做的事情时间要短,因为下一

个activity不会等到这个方法完成才启动

onstop: 变得不可见 ,被下一个activity覆盖了

onDestroy: 这是activity被干掉前最后一个被调用方法了,可能是外面类调用finish方

法或者是系统为了节省空间将它暂时性的干掉,可以用isFinishing()来判

断它,如果你有一个ProgressDialog在线程中转动,请在onDestroy里

把他cancel掉,不然等线程结束的时候,调用Dialog的cancel方法会抛

异常的。

onPause,onStop, onDestroy,三种状态 下 activity都有可能被系统干掉

为了保证程序的正确性,你要在onPause()里写上持久层操作的代码,将用户编辑的内容都保存到存储介质上(一般都是数据库 )。实际工作中因为生命周期的变化而带来的问题也很多,比如你的应用程序起了新的线程在跑,这时候中断了,你还要去维护那个线程,是暂停还是杀掉还是数据回滚,是吧?因为Activity可能被杀掉,所以线程中使用的变量和一些界面元素就千万要注意了,一般都是采用Android的消息机制 [Handler ,Message]来处理多线程和界面交互的问题。

14.如何提高程序的优先级,避免系统内存不足的时候被杀掉

答:为了提高我们的Activity中的线程的线程优先级(Thread-Priority),我们可以在AndroidManifest.xml使用uses-permission标签。可以这么做:

<uses-permissionid=“android.permission.RAISED_THREAD_PRIORITY”/>

然后在Activity代码中设置线程优先级

Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND);//设置线程优先为后台,这样当多个线程并发后很多无关紧要的线程分配的CPU时间将会减少,有利于主线程的处理,相关的Thread优先级定义罗列有以下几种:

int THREAD_PRIORITY_AUDIO //标准音乐播放使用的线程优先级

int THREAD_PRIORITY_BACKGROUND //标准后台程序

int THREAD_PRIORITY_DEFAULT // 默认应用的优先级

int THREAD_PRIORITY_DISPLAY //标准显示系统优先级,主要是改善UI的刷新

int THREAD_PRIORITY_FOREGROUND //标准前台线程优先级

int THREAD_PRIORITY_LESS_FAVORABLE //低于favorable

最后

分享一份NDK基础开发资料

详解:Linux网络虚拟化技术

分享内容包括不限于高级UI、性能优化、架构师课程、NDK、混合式开发(ReactNative+Weex)微信小程序、Flutter等全方面的Android进阶实践技术;希望能帮助到大家,也节省大家在网上搜索资料的时间来学习,也可以分享动态给身边好友一起学习!

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注Android)
img

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

分享内容包括不限于高级UI、性能优化、架构师课程、NDK、混合式开发(ReactNative+Weex)微信小程序、Flutter等全方面的Android进阶实践技术;希望能帮助到大家,也节省大家在网上搜索资料的时间来学习,也可以分享动态给身边好友一起学习!

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注Android)
[外链图片转存中…(img-XN2VJlIT-1713230847544)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 21
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值