Android面试,PDD还是让我砍一刀!

277 阅读8分钟

前言

找工作一直都是一个聊不完的话题,很多人都在求职的过程中或多或少都经历过无助,甚至绝望的感受。

但是作为程序员,大家可能都有一颗想要进入大厂工作的心,但又会受到学历、简历、工作经验等方面的限制,最终主动或被动的放弃了去大厂的机会。其实,只要在求职面试前做好充足的应对方案,合理的面试规划,那些限制都能轻松打破。

这段时间我也收到不少小伙伴发来的面试素材,这里整理一下分享出来希望在这个金九银十的季节带给大家一些帮助。

在这里插入图片描述

从5月底离职到现在,一个半月的时间,通过内推+BOSS直聘,前前后后约到了10家面试,终于拿到了一个满意的offer,一家做银行系统的上市公司

本文就跟大家分享下这位小伙伴这段时间找工作的心路历程(主要是遇到的一些难题)

通过内推拿到了PDD的面试,

一面有惊无险过了

首轮面试是视频面试,这让我感到有些紧张。不过,在前一天晚上,我已经对可能被问到的问题做了充分的准备。面试过程中,我尽量保持冷静,展示出自己的专业素养和自信。在回答问题时,遇到答不上来的问题

诚实表明这个模块工作上没有遇到过 ,自己不熟悉。然后我尽量挖矿让他往里跳引导到自己熟悉的区域。一通乱侃以后时间差不多了面试官其他问题也不会多问了。我尽量围绕自己的项目经验和技能进行展开,以便让面试官了解我的能力和价值。

一些问题记不太清楚了

  • 基础知识 – 四大组件(生命周期,使用场景,如何启动) java基础 – 数据结构,
  • 线程,mvc框架 通信 –
  • 网络连接(HttpClient,HttpUrlConnetion),Socket 数据持久化 –
  • SQLite,SharedPreferences,ContentProvider 性能优化 – 布局优化,内存优化,电量优化 安全 –
  • 数据加密,代码混淆,WebView/Js调用,https

等待二面,调整状态

二面的到来让我有些紧张。考虑到这一轮面试可能会更难 我决定将面试安排到次日下午,以便有更多的时间来准备。

然后,前面问到的问题还好,感觉快结束的时候,又问了一句对Framework有多少了解,我说了句还行。 面试官笑了笑说“那行 我随便问几个问题”

  • Binder有什么优势?

性能方面

共享内存 0次数据拷贝 Binder 1次数据拷贝 Socket/管道/消息队列 2次数据拷贝

稳定性方面

Binder:基于C/S架构,客户端 (Client) 有什么需求就丢给服务端 (Server) 去完成,架构 清晰、职责明确又相互独立,自然稳定性更好 共享内存:虽然无需拷贝,但是控制复杂,难以使用 从稳定性的角度讲,Binder机制是优于内存共享的。

安全性方面

传统的IPC没有任何安全措施,安全依赖上层协议来确保。 传统的IPC方法无法获得对方可靠的进程用户ID/进程UI (UID/PID) ,从而无法鉴别对方身份。 传统的IPC只能由用户在数据包中填入UID/PID,容易被恶意程序利用。 传统的IPC访问接入点是开放的,无法阻止恶意程序通过猜测接收方地址获得连接。 Binder既支持实名Binder,又支持匿名Binder,安全性高。

这些都是我事后查到的,自己磕磕绊绊讲了一些!!!

  • MMAP的内存映射原理了解吗 刚刚说完上个问题有来了给MMP的问题,人麻了。

MMAP内存映射的实现过程,总的来说可以分为三个阶段:

(一)进程启动映射过程,并在虚拟地址空间中为映射创建虚拟映射区域

  1. 进程在用户空间调用库函数mmap,原型:void *mmap(void *start, size_t length, int prot, int flags, int fd, off_t offset);
  2. 在当前进程的虚拟地址空间中,寻找一段空闲的满足要求的连续的虚拟地址
  3. 为此虚拟区分配一个vm_area_struct结构,接着对这个结构的各个域进行了初始化
  4. 将新建的虚拟区结构 (vm_area_struct) 插入进程的虚拟地址区域链表或树中

(二)调用内核空间的系统调用函数mmap(不同于用户空间函数),实现文件物理地址和进程 虚拟地址的一一映射关系

  1. 为映射分配了新的虚拟地址区域后,通过待映射的文件指针,在文件描述符表中找到对应的文件描 述 符,通过文件描述符,链接到内核“已打开文件集”中该文件的文件结构体 (struct file) , 每个 文件结构体维护着和这个已打开文件相关各项信息。
  2. 通过该文件的文件结构体,链接到file_operations模块,调用内核函数mmap,其原型为: int mmap(struct file *filp, struct vm_area_struct *vma),不同于用户空间库 函数。
  3. 内核mmap函数通过虚拟文件系统inode模块定位到文件磁盘物理地址。
  4. 通过remap_pfn_range函数建立页表,即实现了文件地址和虚拟地址区域的映射关系。此时,这 片 虚拟地址并没有任何数据关联到主存中。

(三)进程发起对这片映射空间的访问,引发缺页异常,实现文件内容到物理内存(存)的拷贝

注:前两个阶段仅在于创建虚拟区间并完成地址映射,但是并没有将任何文件数据的拷贝至主存。 真正的文件读取是当进程发起读或写操作时。 进程的读或写操作访问虚拟地址空间这一段映射地址,通过查询页表,发现这一段地址并不 在物 理 页 面 上。因为目前只建立了地址映射,真正的硬盘数据还没有拷贝到内存中,因此引发缺页异 常。

  1. 缺页异常进行一系列判断,确定无非法操作后,内核发起请求调页过程。

  2. 调页过程先在交换缓存空间 (swap cache) 中寻找需要访问的内存页,如果没有则调用nopage 函数把所缺的页从磁盘装入到主存中。

  3. 之后进程即可对这片主存进行读或者写的操作,如果写操作改变了其内容,一定时间后系统会自动 回写脏页面到对应磁盘地址,也即完成了写入到文件的过程。

注 :修改过的脏页面并不会立即更新回文件中,而是有一段时间的延迟,可以调用msync()来强 制同步 , 这样所写的内容就能立即保存到文件里了。

这个问题纯属两眼一抹黑,嘎嘎!

- 等待结果,收到offer

在等待面试结果的过程中我其实觉得应该是凉凉的了,心情也是起起伏伏。几天后,我收到了通过面试的通知,这让我感到非常兴奋。然而,在等待发offer的时间里,却收到了HR的抱歉消息。(心里一万头ccccc)不过也是一时的不舒服,因为这是互相选择的过程,有人甩了公司,我只是被甩的一方。

那算是让我有了更多的面试经验,为后面的面试铺路。

由于面试内容比较多,篇幅有限,已经被整理成了PDF指南,有需要2023年Android中高级最全面试真题答案 完整文档的可

详细Vx关注公众号:Android老皮

目录

img

第一章 Java方面

●Java基础部分

●Java集合

●Java多线程

●Java虚拟机

img

第二章 Android方面

●Android四大组件相关

●Android异步任务和消息机制

●Android UI绘制相关

●Android性能调优相关

●Android中的IPC

●Android系统SDK相关

●第三方框架分析

●综合技术

●数据结构方面

●设计模式

●计算机网络方面

●Kotlin方面

img

第三章 音视频开发高频面试题

●为什么巨大的原始视频可以编码成很小的视频呢?这其中的技术是什么呢?

●怎么做到直播秒开优化?

●直方图在图像处理里面最重要的作用是什么?

●数字图像滤波有哪些方法?

●图像可以提取的特征有哪些?

●衡量图像重建好坏的标准有哪些?怎样计算?

img

第四章 Flutter高频面试题

●Dart部分

●Flutter部分

img

第五章 算法高频面试题

●如何高效寻找素数

●如何运用二分查找算法

●如何高效解决雨水问题

●如何去除有序数组的重复元素

●如何高效进行模幂运算

●如何寻找最长回文子串

img

第六章 Andrio Framework方面

●系统启动流程面试题解析

●Binder面试题解析

●Handler面试题解析

●AMS面试题解析

img

第七章 企业常见174道面试题

●SD卡

●Android的数据存储方式

●Broadcast Receiver

●sp频繁操作会有什么后果?sp能存多少数据?

●dvm与jvm的区别

●ART

●Activity的生命周期

●Application能不能启动Activity

●…

img