远景的二面是隔了有20多天之后在我学校面的。
1. 算法题(手写)。找出两个整数集合的交集
给出了两种解法,第一种是先排序,然后从头往后查找;另一种是使用HashMap,扫描其中一个集合,存储在Map中,再扫描另一个数组时判断在Map中存不存在即可。
2. 由于使用了HashMap,讲讲是如何解决哈希冲突的;HashMap是如何计算槽的位置的;key的hash值是如何计算的;期间说到了以String为例,问为什么要引入31这个值;String的底层数组如果长度很大,是不是会把每个char都计算到hash值中。
3. 如果两个整数集合很大,超过内存,准备怎么做
4. Java虚拟机的内存参数有没有调过
5. 假如设置虚拟机的最大内存为2G,Java虚拟机内存是如何分配的,动态分配还是静态分配;内存是否是连续的;物理内存不连续,如何实现Java虚拟机的内存连续?
6. 问了几个问题给面试官
以LinkedHashMap为例讲解了LRU,讲解了源码
9. 冒泡排序和快速排序
10. 统计一个整形数的二进制表示形式中1的个数
总结:问的很基础,正好帮我回顾了一下,有些知识点感觉都快忘了
第二天下午二点半二面。
1. 介绍项目
2. TCP和UDP区别,OSI五层结构,HTTP报文
3. MVP模式与MVC,观察者模式,装饰者模式
4. HashMap与Hashtable的区别,ArrayList与LinkedList的区别
5. 进程和线程的区别。Android中多进程,修改静态变量的值会怎么样
6. 死锁。如何避免死锁
7. OOM,ANR。如何检测内存泄露
8. 引用的四种类型。
强软弱虚。强引用就是最常见的,软引用和虚引用经常用在缓存中
9. 算法题。
- 如何判断字符串回文
- 如何判断链表有环
- 删除单链表中重复节点
总结:和一面一样,很重视基础。
具体消息下周会发
一面完,面试官叫找HR,然后二面去了
HR问的蛮多,之前就听师兄说了,如果能熬过CVTE的HR面,那就不会再虚任何公司的HR面了,三个工作日等结果。
三天后出了结果,HR面没过。
因为面试官有事没来武汉,所以选择了视频面。
1. 项目介绍,以及其中的难点
2. 长连接时,APP这端如何及早发现后台那边没做队列缓存字节?
3. 进程间通信方式。管道和Socket有什么区别?共享内存和Socket分别会用在什么情况下?
4. 为什么Android会采用Binder这种机制?
5. Java中如何使用一个线程?如何保证线程同步?synchronized的一些问题;任务和线程的区别
6. Android四大组件;Activity生命周期方法;onPause和onStop的区别;锁屏时经历的生命周期方法;Service的启动方式
7. 了解过哪些设计模式?组合模式了解过吗?
8. 惊艳到自己的数据结构;HashMap从链表到红黑树的转换
9. 算法题。一个字节中有四位为1和四位为0的表示合法,源源不断的字节如何判断哪些字节合法,哪些不合法
这道题简直被自己蠢哭了,低级错误一直犯,把2的8次方说成是128,最后在面试官的提示下给出了答案。
因为想换部门的原因,状态从复试变成了初试。sng的面试官加了我QQ,因为在南京,所以说会改天电话面试。
可能由于之前已经面试过了两轮,这一轮面试一共就面了20分钟,主要还是和面试官讨论比如进程保活、判断相交、内部类这些。等待复试
最终倒在了四面,好伤心。
根据先序遍历数组和后序遍历数组建树,然后再层次遍历。
快排partion的改进,时间复杂度多少?哈希做,空间复杂度O(26),如何减少空间复杂度
4. Activity的生命周期方法;onStart和onResume的区别;一个透明的Activity出现,后面的Activity生命周期是怎样的;后面的Activity被系统杀死,会调用什么方法
5. 如何实现开机自启动?
6. Activity中两个进程如何通信
7. HTTP状态码;302和304区别;500开头的遇到过吗?
8. OkHTTP的ConnectTimeOut和SocketTimeOut代表什么意义?TCP三次握手是如何的?seq和ack之间有什么区别?TCP滑动窗口是干什么的?
9. 数据库,索引是用来做什么的?分组怎么做?查询多个表如何?
10. 如果应用crash了则呢处理的?
11. 为什么使用RxAndroid?RxAndroid的好处是什么?有和EventBus比较过吗?
12. HTTP协议的get和post的区别?get的URL长度限制是多少?
13. 运行时权限的变化
二面和三面之间等了有两个多小时,所以三面的节奏很快,就面了25分钟,但是难度比较大。
三面完之后,HR打电话过来,说三面通过了,已经有秋招终面的绿卡了。但是offer一周内会给出答复,在面完所有人之后才能做决定。
和面试官说了下思路,问了其中的算法思路。就说了贪心,然后就开始编码了,最后过了40%,其他的应该超时了,然后说了一下查找可以使用二分查找改进下。
因为不了解Netty,但是使用过MINA,所以就讲了下项目中是如何使用MINA的。
9. 知道NIO底层使用的什么模型?epoll模型听说过吗?知道哪些RPC技术?知道分布式系统吗?知道负载均衡吗?
这些问题基本都是答得不知道
等了5个小时之后才一面,真想吐槽他们的办事了。
1. 编程题。过了30%之后的改进
2. Java的内存结构;堆和栈的区别;GC;Java是否会有内存泄漏现象
3. TCP和UDP的区别;TCP如何确保无差错和有序性
4. 各种排序算法的时间复杂度;有很多数的时候,如何选择一个排序算法
5. 进程和线程的区别;进程间通信方式;操作系统如何使两个进程的物理内存不冲突的
6. 还有不少问题,忘记了。应该不是一个搞Android的
7. 为什么读Java的一些源码
8. 数组和链表的区别;分别适用于什么情况
9. 计算机网络分层机构;HTTP状态码
10. 如何判断一个链表是否有环;以及如何确定环的入口
11. 专业是干嘛的
一面完很快就通知二面了,等的时间稍微短了点。
1. 自我介绍
2. 项目中的收获
3. 二分查找复杂度;实现递归方式
4. 抽象类和接口的异同
5. Android启动模式;生命周期方法,onStart和inResume区别;onPause和onStop区别。如何使屏幕旋转不销毁Activity
6. View的绘制流程;validate和postValiedate的区别
7. Android进程间通信方式
8. WebView如何与APP通信
9. HTTP状态码
10. 了解的设计模式;观察者模式的理解;手写单例模式
11. View事件传递;从哪个View开始传递;最底层的View没有处理触摸事件怎么办
12. Service的启动方式;如何使service在新的进程中启动;如何保活一个进程;