面试是朋友推荐过去,事前已经发过简历,一周后通知我去面试,早上9:30准时到,地点在中关村教堂后面。
公司门厅有保安小哥,打电话来领人,进门就在大厅开始。
面试官两人,一年轻(以下"轻官"代替),一年长(以下“长官”代替)。年长的穿了件大外套+北京布鞋,很有个性。
无笔试,直接技术面,开始大部分是“”长官提问,后来“轻官”问了一些。
提问顺序记不太清了,出门时候10:40左右,期间一直没停,能想起来的提问如下:
面试问题 总结 1.写一个函数,把int转换成byte[]; 1.1 java中数据存储区域有哪些; 1.2 String str1 = "abc" String str2 = "abc" str1 == str2吗 为什么?; 2.模拟一个ArrayList ,写一个add(Object obj ) 函数 ; 2.1 说说时间和复杂度 2.2 数据变多后如何处理越界 3.Activity 四种启动模式,分别说说意思和区别 ; 3.1 什么情况下使用四种模式,为什么? 4.数的理解,二叉树如何平衡; 4.1 如果插入的数据类似9,8,7,6....1 如何保证左右平衡 5.Handler,Thread , Looper , Message 关系 5.1 Handler 是任何地方都可以创建的吗? 5.2 每个线程是否都有Looper , 5.3 能否在一个Handler 中 new Thread ().start(); 6. 假如有一个List ,里面有十个数 0-9 , 6.1 如果循环遍历中如果 i%2 == 0 执行remove ,是否可以顺利执行 for (int i = 0; i < array.size(); i++) { if (i%2 == 0) { array.remove(i); } } 6.2 如果可以顺利执行,执行完毕,list剩余的数位哪几个; 7.看简历项目 7.1 说说简历框架如何实现 7.2 哪一个页面是你写的,页面的布局是如何设计,具体到某个控件使用的是什么view; 7.3 某个view 如何保持剧中, LinearLayout ,RelativeLayout 中view 如何居中,对齐, 7.4 某个页面类似 android 桌面,排列着N个 按钮,如何动态计算显示按钮 例如: 需求:N <= 20 ,每行显示 5个 ;N>=20 每行显示 6 个 每行显示控制如何实现 7.5 简历项目中涉及到自定义View ,如何实现。 7.6 自定义view 如何控制刷新,如何优化,遇到哪些问题,如何解决,刷新区域如何指定。 7.7 View 原理,(需要看view源码) 看源码 理解源码很重要 ; 7.8 简历中项目的框架搭建设计思想,类似mvc设计,view 显示层/控制层/ 8.简历有写,熟悉Android UI框架,请你说说 你理解的UI框架; 9.简历有写 熟悉常用设计模式 ,请你说说 你常用的设计模式,并且在项目中用得到的有哪些。 9.1 简历中的项目,用到了你说的设计模式有哪些,哪些地方用到,为什么这么用,这么用有什么好处? 9.2用的单例,观察者,工厂 。 观察者 模式中,说说谁是观察者,谁是被观察者 ,之间的关系 10.C,/C++ 掌握程度(0) 11.TCP ,UDP 区别,项目中哪些地方使用过? 11.1 如何保证UDP情况下数据包不丢包/完整性(非心跳连接,例如发送10个包,中间3个发送时候UDP 未连接,如何识别/保证) (2014-08-05 10:19 补充)
面试官出来时候自带简历,坐下后开始看,我主动自我介绍。
介绍简单,姓名,籍贯后开始从第一家公司 和第一个项目说起,前公司业务方向,我负责的内容。。
“长官”从第一个项目开始,我负责自定义View(钢琴键盘),问如何实现,如何判断确认点击按键,如何绘制,优化。主要关心项目中对面向对象的理解,类如何设计提问。
然后,询问项目中用到哪些算法,如何设计,算法复杂度。
例如确认某个点击事件是按在哪个按键,需要去遍历全部按键,算法复杂度f(n);
询问项目中用到哪些设计模式。
接下来问最近的项目,我做了项目的介绍,然后演示。介于项目框架我是负责,“长官”问了框架如何搭建,优势,有那些优化,布局如何设计等很详细的问题。
例如:整个框架是Activity + Fragment 某个Fragment 中存在ViewPager ,ViewPager中包含了多个Fragmeng ,“长官”听了只是笑笑,我没太明白小哪里,是这样不太好,如有看官知道,望指教。
问项目中随时问Activity相关,Handler Thread 相关。
看得出“长官”技术很好,还问了一些基础,
例如让我写一段函数,将int 转换成byte[] ,当时我想的是:
new Integer(x).getBytes();
“长官”看了,我感到了被鄙视的眼神。。。说:“我没见过这样写的”;
我补充了一句,是否是想让我用位移运算,“长官”没说什么。
回来后查询了下确实没有 new Integer(x).getBytes(); 这个API ,
2014-08-05 10:07 补充:可以参考:http://my.oschina.net/u/169390/blog/97495
“轻官”后来问了几个关于数据结构的,
例如,如何设计一个链表结构,可以简单画一下。
答:我在纸上简单话了 节点 的结构 ,包含了“data” 和 “index” 内容,可以扩展 指向前后 链表 “data” “left_index” “ right_index” 等
再问:如果链表中出现了一个 节点,他的“left_index” 指向了一个错误的 节点,如何找出来,
答:我想到将链表遍历 将“left_index” 存在数组,如果出现重复,能找到,这样是最笨的方式,算法复杂度f(n) ;
。。。。
最后两人回去,让我等一会,几分钟后“轻官”回来 委婉的表示 他们需要高级技术人员(2-2 以上),我只能达到(2-1) ;
表示有些问题例如算法和结构,项目中或许从来不会用到,但拿来面试还是很管用,如果想来,可以准备好再来面试。
表示感谢后下楼,外面下雨了。。
这次面试相比之前遇到过的很有难度,在此对面试官表示感谢。
补充:关于面试问题答案,有时间会补充进来,没有补充的话,自行google吧
罗嗦一大堆,感觉自己技术还是太菜,项目中用到的会去了解,用不到的,就了解的少或者理解不够。
1.Java博大精深,简历上写“精通java” ,实际上很多基础理解不够,需要学习的还很多。
2.Android 只是知道表面,API 都没全部看过,原理更不清楚,需要加深理解。
3.数据结构和算法,通常用不到,当时需要了解基本的算法实现原理,和基本的机构,(面试前把“大话数据结构” 看了一遍,没吸收全);
4.设计模式也需要知道,了解不是目的,真正用到项目中才是掌握。
5.额,学历也是附加项。
接下来要做的
1.Java基础 有时间复习下;
2.Android 需要了解框架,真是了解,看源码,了解设计思想,不单单是调用API
(这方面源码已经下载,还罩着教程编译成功,可惜编译通过不代表就了解了)
3.数据结构和算法,继续看书,课后习题要自己实现,不能看似简单就不动手
(大话数据结构 代码是c++ ,顺带也要学习c++了)
4.C++ ,跑不了要学,只做应用层没前图,Framework是下一个目标;
5.设计模式,需要看一下。
6.还有英语。。。。
7.学历。。。。。
虽然总结接下来需要做的事情,希望能坚持一条条做到,很多时候都是三分钟热度,例如减肥/健身。。。。
不进步的话,就没毛爷爷娶媳妇。
--------------------2014-08-04 -北京 -鸟窝附近