2019秋招|半路出家的安卓工程师面经(百度、阿里)

2019秋招|半路出家的安卓工程师面经(百度、阿里)
最新回答
胡一菲闪舌头

2021-04-29 20:54:53

该面经记录了非计算机专业背景的求职者在2019年秋招中参加百度、阿里安卓工程师岗位的面试过程,涉及技术知识点涵盖Java基础、Android开发、网络协议、数据结构与算法、设计模式及项目相关原理,面试形式以电话或视频为主,整体难度较高且考察范围广泛。具体内容如下:

  • 百度一面(1小时)

    Java基础:重载与重写的区别;final修饰符的作用;抽象类和接口的差异;GC机制原理,包括finalize()方法的理解、对象回收判定条件、GCRoots的类型、新生代/老年代/持久代划分、四种引用类型(强/软/弱/虚引用)、垃圾收集算法(标记-清除、复制、标记-整理、分代收集)。

    数据结构:HashMap与Hashtable的区别(线程安全、性能、空键值支持);HashMap线程安全实现方式(Collections.synchronizedMap或ConcurrentHashMap);四种线程同步方式(synchronized、ReentrantLock、volatile、原子类);加锁与synchronized的区别(锁粒度、灵活性);volatile关键字的作用(可见性、有序性,不保证原子性);JVM内存模型(堆、栈、方法区等);堆的详细描述(存储对象实例、垃圾回收重点区域);LeakCanary内部机制(弱引用+ReferenceQueue检测泄漏);Handler机制(消息队列、Looper循环、线程间通信);MVC与MVP区别(以登录模块为例,MVP通过接口解耦视图与模型);EventBus原理(观察者模式+注解实现事件分发);布局优化技术(include合并布局、merge减少层级、ViewStub延迟加载);View绘制流程(measure-layout-draw);事件分发机制(dispatchTouchEvent/onInterceptTouchEvent/onTouchEvent);JVM与Dalvik区别(指令集、内存管理、性能优化)。

  • 百度二面(40分钟)

    网络协议:HTTPS原理(SSL/TLS加密、证书验证);HTTP状态码(200成功,其他如404未找到、500服务器错误等);TCP三次握手过程(SYN/SYN-ACK/ACK);Java与C#区别(语法、平台支持、垃圾回收);C#委托机制(类似函数指针,支持多播);Git操作符(如git merge、git rebase);观察者模式应用场景;对架构、设计模式、平台的理解(高内聚低耦合、常见模式如单例/工厂、Android与iOS差异);px/dp/sp区别(像素、密度无关像素、字体缩放像素);HTTP抓包工具使用(如Fiddler、Charles);身份证排序算法(字符串比较或自定义规则);手写快速排序实现。

  • 阿里一面(40分钟)

    Java与Android:HashMap与Hashtable区别(线程安全实现方式及效率差异);Android线程通信方式(Handler、AsyncTask、IntentService、RxJava);TCP三次握手;内存泄漏场景(如静态集合持Activity引用、非静态内部类隐式持有外部类引用);进程优先级(Android中通过nice值调整);非静态内部类持有外部类引用的原因(隐式持有外部类实例引用);非静态内部类的class文件存储位置(外部类$内部类.class);Activity启动模式(standard/singleTop/singleTask/singleInstance);Activity启动流程(Instrumentation、AMS、Zygote进程参与);Handler机制内存泄漏原因(非静态内部类持有Activity引用且生命周期不一致);MVP实现原理(Presenter作为中间层处理业务逻辑);Glide原理(三级缓存策略、图片加载优化)。

  • 阿里二面(30分钟,未通过)

    综合技术:Android新技术(如Jetpack组件、Kotlin协程);重载与重写冲突问题(B extends A时,public void method(A)与public void method(B)不会报错,属于方法重载);防止Activity启动的方法(通过ActivityManagerService设置权限);四大组件(Activity/Service/BroadcastReceiver/ContentProvider)及应用场景与启动方式;检测ANR方法(查看logcat日志、trace.txt文件分析主线程阻塞原因);EventBus 2.0线程控制(通过@Subscribe注解的threadMode参数指定线程);链表环检测算法(快慢指针法);超长字符串反转(分块处理或使用流式API);MVP与MVVM区别(MVVM通过数据绑定进一步解耦视图与模型);equals方法重写规则(自反性/对称性/传递性/一致性)。

  • 求职者背景补充

    教育背景:双985高校,但非计算机专业,2017年9月开始学习编程,2018年5月开始求职。

    学习历程:先学习Java语言,后转向Android开发,完成图书检索系统项目。

    其他面试:除百度、阿里外,还获得vivo提前批、快手、Keep、贝壳、华为、途家等公司offer,并继续参与阿里三面、腾讯HR面、大疆一面等。