面试过程中,你知道这些小知识,将事半功倍,2024年最新大厂面试准备

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

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

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

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

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

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

正文

Android 面试帮助篇
1 、要做一个尽可能流畅的 ListView ,你平时在工作中如何进行优化的?

①Item 布局,层级越少越好,使用 hierarchyview 工具查看优化 。
②复用 convertView
③使用 ViewHolder
④item 中有图片时,异步加载
⑤快速滑动时,不加载图片
⑥item 中有图片时,应对图片进行适当压缩
⑦实现数据的分页加载

2 、对于 Android的安全问题

①错误导出组件
② 参数校验不严
③WebView 引入各种安全问题,webview 中的 js 注入
④不混淆、不防二次打包
⑤明文存储关键信息
⑦ 错误使用 HTTPS
⑧山寨加密方法
⑨滥用权限、内存泄露、使用 debug 签名

3 、如何缩减 APK 包大小?

代码
保持良好的编程习惯,不要重复或者不用的代码,谨慎添加 libs,移除使用不到的 libs。

使用 proguard 混淆代码,它会对不用的代码做优化,并且混淆后也能够减少安装包的大小。

native code 的部分,大多数情况下只需要支持 armabi 与 x86 的架构即可。如果非必须,可以考虑拿掉 x86 的部分。

资源
使用 Lint 工具查找没有使用到的资源。去除不使用的图片,String,XML 等等。assets 目录下的资源请确保没有用不上的文件。

生成 APK 的时候,aapt 工具本身会对 png 做优化,但是在此之前还可以使用其他工具如 tinypng 对图片进行进一步的压缩预处理。

jpeg 还是 png,根据需要做选择,在某些时候 jpeg 可以减少图片的体积。 对于9.png 的图片,可拉伸区域尽量切小,另外可以通过使用 9.png 拉伸达到大图效果的时候尽量不要使用整张大图。

策略
有选择性的提供 hdpi,xhdpi,xxhdpi 的图片资源。建议优先提供 xhdpi 的图片,对于 mdpi,ldpi 与 xxxhdpi 根据需要提供有差异的部分即可。

尽可能的重用已有的图片资源。例如对称的图片,只需要提供一张,另外一张图片可以通过代码旋转的方式实现。

能用代码绘制实现的功能,尽量不要使用大量的图片。例如减少使用多张图片组成 animate-list 的 AnimationDrawable,这种方式提供了多张图片很占空间。

4 、Android 与服务器交互的方式中的对称加密和非对称加密是什么?

对称加密,就是加密和解密数据都是使用同一个 key,这方面的算法有 DES。

非对称加密,加密和解密是使用不同的 key。发送数据之前要先和服务端约定生成公钥和私钥,使用公钥加密的数据可以用私钥解密,反之。这方面的算法有RSA。ssh 和 ssl 都是典型的非对称加密

5丶设备横竖屏切换的时候,接下来会发生什么?

1、不设置 Activity 的 android:configChanges 时,切屏会重新调用各个生命周期,切横屏时会执行一次,切竖屏时会执行两次

2、设置 Activity 的 android:configChanges=”orientation”时,切屏还是会重新调用各个生命周期,切横、竖屏时只会执行一次

3、设置 Activity 的android:configChanges=”orientation|keyboardHidden”时,切
屏不会重新调用各个生命周期,只会执行onConfigurationChanged方法

6、Android 启动 Service 的两种方式是什么?

如果后台服务开始后基本可以独立运行的话,可以用 startService。音乐播放器就可以这样用。它们会一直运行直到你调用 stopSelf 或者 stopService。你可以通过发送 Intent 或者接收 Intent 来与正在运行的后台服务通信,但大部分时间,你只是启动服务并让它独立运行。如果你需要与后台服务通过一个持续的连接来比较频繁地通信,建议使用 bind()。比如你需要定位服务不停地把更新后的地理位置传给 UI。Binder 比 Intent 开发起来复杂一些,但如果真的需要,你也只能使用它。

startService:生命周期与调用者不同。启动后若调用者未调用 stopService 而直接退出,Service 仍会运行

bindService:生命周期与调用者绑定,调用者一旦退出,Service 就会调用unBind->onDestroy

7 、谈谈你对 Android 中 Context 的理解?

Context:包含上下文信息(外部值) 的一个参数. Android 中的 Context 分三种,Application Context ,Activity Context ,Service Context.它描述的是一个应用程序环境的信息,通过它我们可以获取应用程序的资源和类,也包括一些应用级别操作,例如:启动一个 Activity,发送广播,接受 Intent 信息等

8 、Service 的 onCreate 回调在 UI 线程中吗?

Service 生命周期的各个回调和其他的应用组件一样,是跑在主线程中,会影响到你的 UI 操作或者阻塞主线程中的其他事情

9 、请介绍下 AsyncTask 的内部实现,适用的场景是?

AsyncTask 内部也是 Handler 机制来完成的,只不过 Android 提供了执行框架来提供线程池来执行相应地任务,因为线程池的大小问题,所以 AsyncTask 只应该用来执行耗时时间较短的任务,比如 HTTP 请求,大规模的下载和数据库的更改不适用于 AsyncTask,因为会导致线程池堵塞,没有线程来执行其他的任务,导致的情形是会发生 AsyncTask 根本执行不了的问题。

10 、对 binder 机制的理解?

binder 是一种 IPC 机制,进程间通讯的一种工具.Java 层可以利用 aidl 工具来实现相应的接口.

11 、Android 中进程间通信有哪些实现方式?

Intent,Binder(AIDL),Messenger,BroadcastReceiver

12 、介绍下实现一个自定义 view 的基本流程

1、自定义 View 的属性 编写 attr.xml 文件
2、在 layout 布局文件中引用,同时引用命名空间
3、在 View 的构造方法中获得我们自定义的属性 ,在自定义控件中进行读取(构
造方法拿到 attr.xml 文件值)
4、重写 onMesure
5、重写 onDraw

13 、Android 中 touch 事件的传递机制是怎样的?

1 、 Touch 事 件 传 递 的 相 关 API 有 dispatchTouchEventonTouchEventonInterceptTouchEvent
2、Touch 事件相关的类有 View、ViewGroup、Activity
3、Touch 事件会被封装成 MotionEvent 对象,该对象封装了手势按下、移动、松
开等动作
4、Touch 事件通常从 Activity#dispatchTouchEvent 发出,只要没有被消费,会一
直往下传递,到最底层的 View。
5、如果 Touch 事件传递到的每个 View 都不消费事件,那么 Touch 事件会反向向上传递,最终交由 Activity#onTouchEvent 处理.
6、onInterceptTouchEvent 为 ViewGroup 特有,可以拦截事件.
7、Down 事件到来时,如果一个 View 没有消费该事件,那么后续的 MOVE/UP事件都不会再给它

14 、Android 多线程的实现方式有哪些?

Thread & AsyncTask
Thread 可以与 Loop 和 Handler 共用建立消息处理队列
AsyncTask 可以作为线程池并行处理多任务

15 、Android 开发中何时使用多进程?使用多进程的好处是什么?

要想知道如何使用多进程,先要知道 Android 里的多进程概念。一般情况下,一个应用程序就是一个进程,这个进程名称就是应用程序包名。我们知道进程是系统分配资源和调度的基本单位,所以每个进程都有自己独立的资源和内存空间,别的进程是不能任意访问其他进程的内存和资源的。

那如何让自己的应用拥有多个进程?

很简单,我们的四大组件在 AndroidManifest 文件中注册的时候,有个属性是android:process,

1、这里可以指定组件的所处的进程。默认就是应用的主进程。指定为别的进程之后,系统在启动这个组件的时候,就先创建(如果还没创建的话)这个进程,然后再创建该组件。你可以重载 Application 类的onCreate 方法,打印出它的进程名称,就可以清楚的看见了。再设置 android:process 属性时候,有个地方需要

注意: 如果是 android:process=”:deamon”,以:开头的名字,则表示这是一个应用程序的私有进程,否则它是一个全局进程。私有进程的进程名称是会在冒号前自动加上包名,而全局进程则不会。一般我们都是有私有进程,很少使用全局进程。他们的具体区别不知道有没有谁能补充一下。

2、使用多进程显而易见的好处就是分担主进程的内存压力。我们的应用越做越大,内存越来越多,将一些独立的组件放到不同的进程,它就不占用主进程的内存空间了。当然还有其他好处,有心人会发现 Android 后台进程里有很多应用是多个进程的,因为它们要常驻后台,特别是即时通讯或者社交应用,不过现在多进程已经被用烂了。典型用法是在启动一个不可见的轻量级私有进程,在后台收发消息,或者做一些耗时的事情,或者开机启动这个进程,然后做监听等。还有就是防止主进程被杀守护进程,守护进程和主进程之间相互监视,有一方被杀就重新启动它。应该还有还有其他好处,这里就不多说了。

3、坏处的话,多占用了系统的空间,大家都这么用的话系统内存很容易占满而导致卡顿。消耗用户的电量。应用程序架构会变复杂,应为要处理多进程之间的通信。这里又是另外一个问题了。

16 、ANR 是什么?怎样避免和解决 ANR?

文末

面试:如果不准备充分的面试,完全是浪费时间,更是对自己的不负责!

不管怎么样,不论是什么样的大小面试,要想不被面试官虐的不要不要的,只有刷爆面试题题做好全面的准备,当然除了这个还需要在平时把自己的基础打扎实,这样不论面试官怎么样一个知识点里往死里凿,你也能应付如流啊

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

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

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

droid)**
[外链图片转存中…(img-ycN1nfqY-1713189398018)]

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

  • 21
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java是当前最热门的编程语言之一,也是很多公司重要的招聘岗位。内推小公司杭州,首先需要了解该公司的行业背景和业务需求,以及他们对岗位的职责和任职要求。同时,我们也需要了解面试官所考核的技能点,以便我们进行阐述和准备。 对于小公司来说,技术实力和人才储备都不会像大公司那么雄厚,所以他们更需要能够始终保持高效的开发者。在面试,相信它们也会注重掌握候选人所学技能的实践能力和应用能力,因此一个好的面试表现应该能够让企业相信你能够快速熟悉并掌握他们所用的技术栈。另一方面,他们还想候选人具备自我提升和探索新技术的能力,能够跟上行业发展的步伐。 在面试准备过程,我们需要确保自己对Java核心技术和相关技术有着扎实的掌握程度。要熟悉JVM架构、Java多线程和并发机制、Spring框架以及Web应用程序的开发等。而JDK7或者JDK8的使用则展示了我们一位开发者在实际工作,对业务需求的进行把控和实际项目经验的洞悉。最后,我们需要保证自己能够用简单明了的语言将现有技能展现,同时需要投入到实战练手的过程,逐渐积累项目实战经验。 总的来说,小公司的Java开发岗位,招聘主要注重候选人的实践能力和项目经验,在面试及时的提供项目经历以及代码片段、自身思考随时展开,同时发挥自己的差异化优势,应用自己的特点去突显自身价值,给出龙虎榜式的面试表现,并有侧屏策略展示,会事半功倍,也更容易获得面试官的好感,从而得到心仪的工作机会。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值