金山WPS2018安卓实习面试经历

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/A657997301/article/details/79808636

  金山笔试被刷后,今天上午跟朋友组了个两人小队,强行去华工酒店霸面。壮着胆吧,一路上一直说,大不了被他说一句滚就走咯。进去后贼囧,在一楼要么是已经一面的人在等候区坐着(这中间还有一个我们同班的女同学,生怕被她看到,太尬了),或者是有收到通知的人在排着队签到。一个女的在签到处登记着。好不容易轮到我们吧,上去,询问我名字,我说了后,她说没查到,是不是没收到短信的,我们说是,但是对金山很感兴趣,能给一次面试机会吗。然后她问我们做过笔试题没,我们说做过,她拿出两张安卓卷子让我们再做一次,没想到是跟上次一模一样的题,这次不会再错了,认真找了个楼梯就坐在那写,写了一个多小时后拿给她,已经是近十二点了,她告诉我们可以先去吃饭,下午一点半再过来,行吧,坐公车回去再回来正好一点半了。然后回来跟她说了下,她就说可以去三楼说下名字面试了。我们上去三楼后,还有个小插曲,门口的工作人员问我们名字,然后我指着名单说这个就是,结果她说那个是面试官的名字(这也太囧了吧),好歹金山的工作人员都很NICE,小姐姐都很好很温柔,告诉我可以进去里面找安卓3号面试官面试了。
  

技术一面(一小时多)

  面试官看着很年轻,年纪比我大不了多少的感觉。
  ①、上来就问我一道算法题,说一个数组有一万个整数,让我找到最大的60个数字。这我一下子想不出什么好思路,只能说最low的解法,就是排序咯,他问有没有比快排更快的方法,我想了下,最后只能说个大概吧,就是维护一个容量为60的数组,然后可以去遍历这一万个数来替换这个容量60的数组。
  ②、问快排最坏的情况是怎样的,怎么优化,我说完全倒序的时候就是了,然后优化方法就是主元素随机选取(我只记得这种了),然后快排因为要两次递归,所以有n个元素的话,递归栈的深度是多少,我想了半天只能说是二叉树结构的,最后n个元素肯定是叶子节点,那么所有节点加起来就是栈的深度了。
  ③、Android虚拟机DVM和JAVA虚拟机JVM的区别?我只能扯个多进程模式吹吹水了。
  ④、然后他问我线程的wait和sleep有什么区别,我说一个是用于同步锁的blabla,一个是让线程固定一段时间唤醒的。然后又借机问我怎么保证线程安全,我说加锁或者给一个变量加锁,通过这个变量的值来判断是否进入代码块。
  ⑤、问我JAVA里的字符串转数字是怎么实现的,我说我的话应该是去不断除以10提取位数减’0’然后乘以10加这个数吧,不确定JAVA里是不是也是这么实现的。
  ⑥、还问了JAVA静态类可以继承吗,我说不可以(静态类确实不可以被继承,但是静态属性和静态方法可以被继承)。静态成员、函数可以重写吗,我说不知道,其实答案应该是不能被重写的。
  ⑦、问我Arraylist的实现原理,我就说动态数组,容量自增长等,然后问我能不能存储null,我说不知道,结果他追问按我的理解怎么看,我就说能把,因为hashmap也能,只有hashtable才有限制不能。于是问我hashmap的实现,我说链表加数组,还画了个图,冲突的时候就继续往链表尾添加就行了。
  ⑧、然后他又问如果现在有20M可用内存,要分配5M,一定能分配成功吗,我就反问他这个20M可用内存会不会是垃圾回收机制没法回收的(问清楚面试官想问的问题其实很重要,不要不懂装懂),然后他说不考虑内存泄漏,然后我就炸了,只能说不懂。
  ⑨、看我提到内存泄露,马上问我内存泄露,还好我早有准备,就写两个泄露的典型例子给他。
  ⑩、IPC(进程通信),我说套接字,管道,信号量,共享内存,消息队列。然后问我在安卓中呢,我的妈,终于问到安卓了,我说可以用广播,标准广播有序广播都可以,只要不是本地广播,然后说广播的两种方式,使用场景,我就说了动态广播和静态广播,一种在代码里注册,比如监听网络状态;一种AndroidManifest里注册,比如监听手机开机启动。
  之后就一直在说项目方面的事吧,不得不说,我的俄罗斯方块真的帮了我很多忙。基本关于方块的问题我都能答上来。问我一些绘图方法,问我有没有用设计模式,知道设计模式吗,还好我能说几个。
  整个一面一个多小时,真的很久。然后他告诉我回等候区等,我二话不说去一楼直接问前台的工作人员说我是不是得走了,她说我不能走,等下有二面,这才安心地去等。这期间我朋友说金山把中大的全刷了。
  

技术二面(一小时)

  过了几分钟,工作人员喊我名字通知我上三楼再战二面,我进去后,那个面试官正在面别人,他留着八字胡,长得有点像日本人,我看着是蛮害怕的,觉得肯定很严格。等了一会后开始面了嘛,他说给我一道基础算法题,一个数组里有一个数出现了一半以上的次数,怎么快速找到,然后让我想,他利用这段时间去写前一个面试者的面试报告,这期间我偷瞄到旁边关于我的一面评价,说我数据结构基础很差,但是态度很积极啥的2333
  ①、找到出现次数超过一半的数我见过吧,所以我知道可以用快排的Partition去查,只要是中间的就可以停止快排了,最差情况也就是最后一个排序的数是中位数嘛。
  ②、问我JAVA线程池的实现了解过吗,我说我只知道有四种线程池,newFixedThreadPool、newSingleThreadExecutor、newCachedThreadPool、newScheduledThreadPool。具体怎么实现的不清楚
  ③、事件分发拦截机制,主要是dispatchTouchEvent和onInterceptTouchEvent还有onTouchEvent这三个函数吧,一个负责传递,一个负责拦截,一个负责消费。父控件有权直接拦截不让子控件消费。然后还问有什么拦截机制的使用场景,我就说了图片直接滑动,viewgroup是要拦截的,这样就是下一张图片,如果是双指放大的话,此时的滑动是放大后图片的小块在移动,就不拦截,传递给图片控件去处理。
  ④、问我有没有继承过viewgroup写类,我说没有,我就继承过view,然后他讲了很多关于继承viewgroup的好处,包括问我listview和linerlayout同样是纵向的,区别是啥。注意哈我反问说一般listview不是跟recycleview对比的吗,他就说类似今日头条那样的情况,如果有12条数据,用linerlayout和listview会有什么不一样。我就又扯了一下listview有分割线,然后布局的话linerlayout必须12条全部显示,listview可以设置一定的子布局数量,滚动时候去每个item布局里的数据去替换即可(我是画图解释的)。
  ⑤、问我listview跟recycleview的区别,终于上套了,我一下子说不支持横向布局啥的,recycleview还能瀑布布局网格布局横向布局,而且listview不优化的话会很影响性能,比如getview()每次都把布局重新加载一遍,应该先把view缓存起来。还有每次都得调用findviewbyid,应该把控件实例都先存在viewHolder里。等等等等。
  ⑥、然后聊了很久很久的项目吧,还是老生常谈,项目中遇到的问题啊,怎么解决啊,二面的面试官对我的俄罗斯方块一通乱按,疯狂帮我测试,还好我的游戏还是很看重用户体验的。还比如问了一些实现机制,比如怎么去画有间隙的方块,能不能添加别的长相的方块,还有布局思路是怎样的等等。
  ⑦、问我懂不懂网络编程,知不知道安卓一些框架啥的,我说了我只知道eventBus和RXJAVA这两个名字,网易爸爸考我的,印象太深了。
  ⑧、最后问了一些学习方法,还有看的书,规划,以及对安卓是不是真的有能坚持学下去的动力等等。
  面了一个小时,最后他让我去三楼外等一下,他要跟别人商量一下, 我去外面坐了几分钟,突然收到珠海的电话,HR打来说明天下午三点电话HR面,我就赶紧溜了。
  

HR面(十三分钟)

  三点开始等,等到40分吧,打来了。
  问的都是HR常规的问题,比如知道金山在珠海吗、来珠海实习方便吗、之前做过前端实习,为什么会想要做前端实习呢、又为什么不做前端实习而改做安卓开发了呢、有参加过笔试吗,为什么霸面、之前有投递过别的公司拿到offer吗、你觉得那些公司面试没过的原因是什么、几月份可以开始实习、可以实习多久等等等等。
  最后说要回去进行最终商议,一星期内给我答复。
  2333正好还留有对网易爸爸的念想,要是全部被刷了倒也不用去纠结这些抉择了。

总结

  找实习真心不易,笔试被刷,霸面通过,人生的大起大落呀。
  等最终通知我了我再更新这条进展。

猜你喜欢

转载自blog.csdn.net/A657997301/article/details/79808636