回顾一下自己这段时间的经历,九月份的时候,公司通知了裁员,我匆匆忙忙地出去面了几家,但最终都没有拿到offer,我感觉今年的寒冬有点冷。到十二月份,公司开始第二波裁员,我决定主动拿赔偿走人。后续的面试过程我做了一些准备,基本都能走到hr面,后面我也顺利地拿到了offer,我给大家分享下我的求职体会,希望能给大家一些参考。
一般Android面试分为两部分:Java部分和Android部分,下面说一下自己面试过程遇到的一些具体题目和一些相关知识点。
一 JAVA相关
1)JAVA基础
- java基本数据类型有哪些,int, long占几个字节
- == 和 equals有什么区别
- hashcode 和 equals作用
- new String创建了几个对象
- 位运算符的一些计算
- java的拆装箱
- compareable 和 compartor的区别 下面列一两个遇到的题吧
它的打印结果是什么。 类似这种的题很多,考察的都是基础知识的牢固性。所以需要自己多巩固基础。
2)数据结构和算法
常见的数据结构就是:数组,栈,队列,集合,映射,链表,堆,二分搜索树,红黑树。当然还有其他的一些,比如AVL平衡树等一些数据结构。
我们要做的就是了解它们的实现原理和各自的优缺点。
数据结构部分面试遇到最多的就是:
- ArrayList和LinkedList的区别,优缺点
- hashmap实现,扩容是怎么做的,怎么处理hash冲突,hashcode算法等
- 链表需要知道。LinkedHashMap一般再问LRU的时候会问到
- 二分搜索树的特性和原理。前中后序遍历写出其中一种,当问到二分搜索树的缺点的时候,你需要提出基于二分搜索树的红黑树,说出他的特性。
- 堆的实现,最大堆,最小堆,优先队列原理。
算法
算法其实就是我们平时常见的一些排序:选择排序,插入排序,冒泡排序,希尔排序,归并排序,快速排序。以及和数据结构相关联的解决部分问题的一些计算方法。
算法面试遇到的一些题:
- 手写快速排序,插入排序,冒泡排序
- 翻转一个数字
- 翻转一个链表
- O(n)复杂度找出数组中和是9的两个数的索引
- 写出二分搜索树前中后序遍历中的其中一个
- 实现一个队列,并能记录队列中最大的数。
算法这一块是需要练习的推荐去Leetcode上面刷刷题,开拓一下思维。算法也并不一定要求你能写出来,主要考察你的思路,