2021年最新Android开发面试经验(二):大疆

以下纯属个人面试经验分享,望对各位同仁有帮助

本人基本情况是:16年毕业于211院校本科,19-21年在Oppo工作,算是有大厂经验了
本博文,不会给出具体的答案,因为详细的答案内容太多了,自行熟读参考链接。

面试的岗位:高级客户端开发工程师(Android)
ps:我也不知哪来的勇气,敢来面试高级工程师,抱着学习锻炼的心态来的

职位类别:研发类    工作城市:深圳市    发布时间:2021-03-12
工作职责
1. 负责行业软件的架构设计、核心代码开发;
2. 负责技术难点攻关和团队技术建设;
3. 负责提升软件质量和开发效率等工作。

任职要求
1. 本科及以上学历,5年以上Android客户端开发经验;
2. 精通JAVA或Kotlin开发,具备C++开发经验者优先;
3. 具备扎实的数据结构和算法基础、独立的架构设计能力,精通多线程开发;
4. 具有单元测试、编译优化、组件化、热更新技术的优秀实践者优先;
5. 精通TCP/IP协议四层模型、H264/H265编解码、性能和稳定性优化任一经验者优先;
6. 具有较强逻辑思维能力和表达能力及良好的团队合作精神。

面试方式:大疆总部(荣超大夏)现场面试,先现场笔记本做两道算法题
PS:个人主观意识:面试官不算友好,会有点高高在上的样子,会有面试压力。(我理想中,友好的面试体验是,面试就是双方相互了解对方的过程,相互交流沟通)

1、项目经验

(每次面试环节都会有自我介绍,这里我就略过啦)

1.1、Clean架构是什么,核心思想,如何让其他开发践行Clean架构(我做的项目有使用到这技术)

这种偏门的技术语言,一定要了解清楚来源,为什么,有何优缺点,比如:Clean架构是谁创造的

1.2、插件化实现原理(我做的项目有使用到了这个技术)

插件怎么做版本管理,
如果新插件新增了接口,如何做到兼容,
如果解决插件和宿主应用之间的通讯
类加载过程,双亲委托模式

2、Java基础

2.1、Java内存模型

熟读《深入理解Java虚拟机》里的第五部分“高效并发”就行

2.2、volatile原理,以及应用场景

熟读《深入理解Java虚拟机》里的第五部分“高效并发”就行

扩展知识点,乐观锁

2.3、Java类加载过程

熟读《深入理解Java虚拟机》里的第五部分“虚拟机执行子系统”就行

3、其他相关知识

3.1、Okhttp原理

Android okhttp3:原理详解

3.2、TCP如何保证可靠性,三次握手,四次挥手

TCP,可靠性措施:
TCP主要提供了检验和、序列号/确认应答、超时重传、最大消息长度、滑动窗口控制、阻塞控制(慢启动、快重传、快恢复)等方法实现了可靠性传输。
三次握手核心不是为了建立连接,如果连接都没有建立,怎么执行三次握手。TCP一个核心是对数据进行标序,并且需要接收端告知发送端收到了哪些数据,三次握手就是为了初始序列号。

四次挥手:
目的是为了关闭连接,并且确保接收端有接收完数据

参考链接:TCP的可靠性传输是如何保证的
TCP 为什么是三次握手,而不是两次或四次?

4、算法题

链表是各大厂必考算法题,链表的相关算法题一定要多做,还要熟知基础的链表操作,比如计算链表长度、链表反转

4.1、链表交替插入

将给定的单链表 L L: L0→L1→…→Ln−1→LnL0→L1→…→Ln−1→Ln
重新排序为:L0→Ln→L1→Ln−1→L2→Ln−2→…L0→Ln→L1→Ln−1→L2→Ln−2→…
要求使用原地算法,不能改变节点内部的值,需要对实际的节点进行交换。

例如:
对于给定的单链表{1,2,3,4},将其重新排序为{1,4,2,3}.
参考答案:《leetcode-go》链表交替插入
https://blog.csdn.net/less_cold/article/details/107946151

4.2、删除相同节点的链表,

如:输入:1->2->2->3-4
输出:1->2->3->4
ps:因为我第一道没表现好,所有第二道相对简单一些

解题思路:当前链表等于下一次节点,就把下一个节点的next赋值到当前节点的next
参考代码:
Kotlin版本:
private fun removeSameNode(listNode: ListNode): ListNode {
    val result: ListNode = listNode
    var temp: ListNode? = listNode
    while (temp?.next != null) {
        if (temp.value == temp.next?.value) {
            temp.next = temp.next?.next
        } else {
            temp = temp.next
        }
    }
    return result
}

5、总结

5.1、自己做过的项目要了解透彻,实现方式,异常情况,怎么容错

5.2、Java虚拟机相关基础要扎实

5.3、网络相关、三方SDK设计思想

5.4、链表类型算法题,一般都会很难,多做LeetCode上的链表题就行,总结解题思维过程

你可能感兴趣的:(2021年最新Android开发面试经验(二):大疆)