前言
2023年底,我和整个部门都被公司裁了。其实,这个结果我早有预感。在公司追求降本增效的压力下,我们这些既不是正式员工也不是外包员工的员工,就像是随时可以丢弃的棋子。
去年开始,公司就逐步减少了我们的福利,比如取消了免费餐饮。国庆前,我和同事们还在议论,华为现在只招外包员工,还有同事的项目突然被接手,我们甚至要面试很多外包候选人。这些迹象都告诉我们,裁员的日子不远了。
不过,公司还算有良心,给了我们正常的赔偿,还给了我们一个月的缓冲期。这期间,公司还继续为我们缴纳社保和公积金,年终奖也算在内。虽然被裁了,但我还是觉得这家公司不错。如果有机会,我还是愿意再为它效力。
现在大家都说就业环境不好,可能是因为IT行业的人太多了。但我不信找不到工作。就像有人说的,有时候得找找自己的原因,比如工资为什么没涨,工作是否认真努力。
原因
我觉得现在就业难主要有几个原因:
一是学历要求高,很多公司直接要求本科及以上,不是全日制统招的可能就没机会;
二是有些人期望太高,在大厂待过就看不上小公司;
三是表达能力差,简历不会写,面试也不会说,这都会影响找工作。但不管怎样,生活还得继续,我还是得努力找工作。
庆幸的是我很快就拿到了几个offer,无缝衔接,虽说不是很完美,但是年前能找到工作我也很满足了。
最后
分享近几个月来面试中整理的面试题
- 如何优化ListView的流畅度?
- 精简Item布局,减少层级。
- 复用
convertView。 - 使用
ViewHolder。 - 图片异步加载。
- 快速滑动时不加载图片。
- 图片压缩。
- 分页加载数据。
- Android安全问题的常见类型有哪些?
- 错误导出的组件。
- 不严格的参数校验。
- WebView引入的安全问题。
- 不混淆、不防二次打包。
- 明文存储敏感信息。
- 错误使用HTTPS。
- 自定义加密方法的安全性。
- 滥用权限、内存泄露、使用debug签名。
- 如何减小APK大小?
- 移除重复或未使用的代码。
- 使用ProGuard混淆代码。
- 仅支持必要的CPU架构。
- 使用Lint查找未使用的资源。
- 压缩图片。
- 选择性地提供不同分辨率的图片资源。
- 重用资源。
- 使用代码绘制代替大量图片。
- 对称加密与非对称加密在Android与服务器交互中的应用是什么?
- 对称加密:使用相同的密钥进行加密和解密,如AES。
- 非对称加密:使用公钥加密,私钥解密。如RSA。用于安全地交换密钥或签名数据。
- 设备横竖屏切换时发生了什么?
- 不设置
android:configChanges时,会重新调用生命周期方法。 - 设置
android:configChanges="orientation"时,仍会重新调用生命周期方法,但次数减少。 - 设置
android:configChanges="orientation|keyboardHidden"时,仅调用onConfigurationChanged。
- Service的两种启动方式及其适用场景是什么?
- Started Service:通过
startService(Intent)方法启动。当Service启动后,即使启动它的组件(如Activity)已经销毁,Service依然会在后台运行。适用于执行长时间运行的操作,如音乐播放、文件下载等。 - Bound Service:通过
bindService(Intent, ServiceConnection, int)方法启动。客户端(如Activity)可以与Service建立连接,进行交互。适用于需要频繁与Service通信的场景,如远程过程调用(RPC)。
- 如何理解Android中的Context?
Context是一个抽象类,它允许访问应用程序特定的资源和类,以及调用应用程序级别的操作,如启动活动、广播和接收意图等。常见的Context实现包括Application、Activity、Service等。
- Service的onCreate是否在UI线程中执行?
否。Service的onCreate方法并不在UI线程(主线程)中执行,而是在Service自己独立的线程中执行。因此,在Service中执行耗时操作时,不会阻塞UI线程。
- AsyncTask的工作原理及适用场景是什么?
AsyncTask是一个轻量级的异步类,用于在后台线程执行任务,并将结果发布到UI线程。它内部使用线程池来管理任务的执行,并提供简单的回调接口来处理任务的开始、进度和结束。适用于简单的后台任务,如网络请求、数据库操作等。但不适合执行长时间运行或复杂的后台任务。
- 对Binder机制有何理解?
Binder是Android进程间通信(IPC)的一种机制。它允许在不同进程或线程之间传递对象和方法调用。通过Binder,客户端可以跨进程调用服务端的方法,就像调用本地对象的方法一样。Binder机制基于C/S架构,服务端通过Binder驱动注册服务,客户端通过Binder驱动获取服务端的代理对象,从而进行通信。
- Android中进程间通信的实现方式有哪些?
Android中进程间通信(IPC)的实现方式包括:
- Binder:如上所述,用于跨进程对象和方法调用。
- Content Provider:允许不同应用程序之间共享数据。
- Broadcast Receiver:用于发送和接收广播消息。
- Intent:用于不同组件(如Activity、Service等)之间的通信。
- AIDL(Android Interface Definition Language):用于定义跨进程接口。
- Socket:基于网络协议的通信方式,适用于不同设备或不同应用之间的通信。
- 自定义View的基本创建流程是怎样的?
- 继承View或其子类:根据需要选择合适的基类。
- 重写构造方法:初始化View的属性。
- 重写onDraw方法:绘制View的内容。
- 处理事件:重写如onClick、onTouch等事件处理方法。
- 测量和布局:重写onMeasure和onLayout方法,控制View的大小和位置。
- Android中的touch事件传递机制是怎样的?
在Android中,touch事件的传递遵循以下顺序:
- Activity:首先接收到touch事件。
- ViewGroup:如果touch事件发生在ViewGroup内部,ViewGroup会根据其子View的布局参数和触摸点的位置,决定将事件传递给哪个子View。
- View:最终子View接收到touch事件,并处理它。
这个过程中涉及到的方法包括onInterceptTouchEvent(用于决定是否拦截事件)和onTouchEvent(用于处理事件)。
- Android中如何实现多线程?
Android中实现多线程的方式有多种,包括:
- Thread类:通过继承Thread类并重写run方法来实现。
- Runnable接口:实现Runnable接口并重写run方法,然后将Runnable对象传递给Thread的实例来执行。
- 线程池:使用
ExecutorService创建线程池,通过提交Runnable或Callable任务来执行多线程操作。 - AsyncTask:如上所述,适用于简单的后台任务。
- 何时在Android开发中使用多进程?多进程的好处是什么?
在Android开发中,当应用程序需要执行耗时操作或需要与其他应用程序隔离时,可以考虑使用多进程。多进程的好处包括:
- 性能优化:将耗时操作放在单独的进程中执行,避免阻塞主线程,提高应用性能。
- 安全性:通过将敏感操作放在单独的进程中执行,增加应用程序的安全性。
- 资源隔离:不同进程之间的资源是相互隔离的,可以防止资源竞争和死锁等问题。
由于面试内容比较多,篇幅有限,已经被整理成了PDF指南,有需要2024年Android中高级最全面试真题答案 完整文档的可
关注公众号: Android老皮
目录
第一章 Java方面
- Java基础部分
- Java集合
- Java多线程
- Java虚拟机
第二章 Android方面
- Android四大组件相关
- Android异步任务和消息机制
- Android UI绘制相关
- Android性能调优相关
- Android中的IPC
- Android系统SDK相关
- 第三方框架分析
- 综合技术
- 数据结构方面
- 设计模式
- 计算机网络方面
- Kotlin方面
第三章 音视频开发高频面试题
- 为什么巨大的原始视频可以编码成很小的视频呢?这其中的技术是什么呢?
- 怎么做到直播秒开优化?
- 直方图在图像处理里面最重要的作用是什么?
- 数字图像滤波有哪些方法?
- 图像可以提取的特征有哪些?
- 衡量图像重建好坏的标准有哪些?怎样计算?
第四章 Flutter高频面试题
- Dart部分
- Flutter部分
第五章 算法高频面试题
- 如何高效寻找素数
- 如何运用二分查找算法
- 如何高效解决雨水问题
- 如何去除有序数组的重复元素
- 如何高效进行模幂运算
- 如何寻找最长回文子串
第六章 Andrio Framework方面
- 系统启动流程面试题解析
- Binder面试题解析
- Handler面试题解析
- AMS面试题解析