对于一年开发经验的程序员来说是非常尴尬的,经过一个月的面试总结,也快入职心仪的公司了,差不多算是敲定了工作。所以想到陆续的放出一些互联网公司的面试经验来,虽然面不上,但是可提供给别人参阅,以便你们遇到类似或者同一家的公司能够见招拆招!
首先需要说明的是,我能够去人人网面试是通过一家外派公司作为中介才去的。这家外派公司叫做:北京银河创想信息技术有限公司,在智联投递的简历,那边的HR打电话通知我周三上午去面试,去之前我百度了这家公司,搜索引擎给的结果是这家公司与“培训机构”、“不正规”等字样联系起来,当时我心是悬的。不过想到不如虎穴焉得虎子,于是就去了。我暂且把银河创想的面试过程称为一面吧!
一面
进了公司之后,看到里面已经来了好几个来面试的人,递交简历之后被安排到一台笔记本面前,总共有五道题目,不准百度,不能交头接耳。他们有一套自己的评分方式,有自己的输入输入用例,有点像OJ题目,限时30分钟。判分60分以上就能进入面试,不及格就不能进入面试,只好走人。
五道题分别如下:
1.结合金融业务,实现转账过程,从账户A转到账户B,注意金额不能为负数。
public class User{
private String name;
private int blance;
//getter/setter方法
}
这道题要做的几现实它的一个计算方法,上面提供了JavaBean,题目代码貌似如下:
/**
*
* @param blanceFrom 借贷人
* @param blanceTo 借款人
* @param blance 借款金额
*/
public static void execute(User blanceFrom, User blanceTo, int blance) {
}
这道题不难,需要注意的是判断空指针异常和blance非负数,所以这里我就不提供参考代码了。
2.回文数问题。我感觉这道题描述有问题,按照我的理解是写一算法判断是否为回文数。但是题目却说比如1221,1234321等都不是回文数,我一脸蒙逼,问面试官是不是题目描述错误了。面试官十分肯定的回答我:题目没有错,会做就做,不会做的可以跳过。
本题我直接跳过,不过我解题思路是先把原字数赋值到新的变量,不断的对原来的数字对10取余,然后数字本身除以10,直到该数为0为止。
public boolean isHuiWen(int number) {
int oldNumber = number;
int newNumber = 0;
while(number != 0) {
newNumber = newNumber*10 + number%10;
number /= 10;
}
if(oldNumber == newNumber) {
return true;
}
return false;
}
3.统计句子中每个单词出现的次数。比如如下句子中
Java this is a Java Hello World Thank you
本句子中,各单词出现次数如下:
"Java"出现2次
“this”出现1次
“is”出现1次
“a”出现1次
“Hello”出现1次
“World”出现1次
“Thank”出现1次
“you”出现1次
空格不进入统计里边。这道题用Map的数据结构来做最适合,Map是一种key-value的数据结构。首先用正则表达式将句子切割成String数组,然后遍历这个数组把第i个元素的值作为Map的key,出现次数作为value,当第一次存入key时value等于1,否则value+1。
public Map<String, Integer> wordCount(String sentence) {
String[] strs = sentence.split("\\s+");
Map<String, Integer> wordMap = new HashMap<String, Integer>();
for(int i = 0; i < strs.length; i++) {
if(wordMap.get(strs[i]) == null) {
wordMap.put(strs[i], 1);
} else {
wordMap.put(strs[i], wordMap.get(strs[i])+1);
}
}
return wordMap;
}
4.将阿拉伯字母转为汉字。比如123转为一百二十三。
这道题当时做不出来,以前见过次题,不过没有看别人是怎么解决的,所以这里贴出别人的博客地址:Java实现中文数字转换为阿拉伯数字
5.这道题赞记不起来了。
总共五道题目,当时四道题有思路,包括忘记的第二题。只有第4题阿拉伯数字转汉字做不出来,半个小时到的时候,面试官过来问我做的怎么样了,我说“差不多了”。她运行了一下测试用例,52分。有一些额空指针异常和有些案例没有通过,她说可以给我延时,再调试一下程序。在调试的过程中,有些哥们也提交了答案,其中两个哥们就喊直接走人。经过10多分的修改,面试官再次来问我结果,她再次运行测试用例,刚好60分。
就这样进入了面试,面试主要问我上一家为什么离职,期待薪资,有没有女朋友,她在哪里工作之类的话题。在面试过程中,我好奇的问面试官,为什么回文数那个例子说给的例子是非回文数?我记得以前在学校学编程的时候,教科书的回文数概念就是那些数字啊!
面试官:它指的的案例自己定义的那些是非回文数!
我一脸疑问,想想也许面试官也不懂技术!所以也别再纠缠了。这时候面试官提出了最关键的问题:我们外派到其他办公地点办公,这点你接受的了么?
我:外派到北京还是外地?那么工资之类的是哪家公司发?...
从面试官那得到的答案是:外派到北京本地,薪资由银河创想结算。一般都会有开发任务的,就算没有开发项目了,他们会喊我回来总部,有五险一金!
虽然在网上听到外派各种门道多,但是没办法,先口头答应吧!
二面
就这样我顺利进入到二面。刚面完回来的路上,接到一家事业单位的面试通知。虽然是事业单位,但确实合同编制。我在微信跟银河创想HR说能不能把二面推到周四,因为周三另有安排,HR不回复,心里没底,而且当时HR没有说外派到人人网,所以心里对二面期待不高。
周三早上去了中关村人才市场,冷冷清清。下午去那家事业单位面。周三整天都没收到银河创想HR发来的面试安排,我不知道她有没有同一周四再去面。反正周四我也有两家公司面试安排,坐地铁去面试的路上,刚下地铁。微信收到银河创想HR发来的信息,说:今天下午去人人网那面试,把地址和前台号码都发过来给我。她再三叮嘱:一定要我们帮你改过之后的简历,不要之前的简历,我心里有很是奇怪。
那时候已经是午间10点多,太阳正火辣呢,我得找家打印店看看。简历打印出来了,我终于知道为什么他们强调要上交他们修改过后的简历了。因为这份简历是经过包装之后的。首先把我的年龄缩小了2岁,再次把我的毕业时间提前一年,只有一年工作经验的我瞬间有了两年的工作经验!
心想:这样不会被戳穿么?
微信问HR,HR说没关系的。心想也对,方正我是外派过去的,又不是人人网雇佣的我,没有和人人网发生劳务关系,简历造假应该没什么问题的!
面试地点是在朝阳区酒仙桥分公司。首先填写信息表,其次给出一张逻辑思维题目,题目如图,在该图的基础上沿上下左右延展,不准修改本图的基本架构,画过之后不准涂改,时间限制为12分钟。
写完个人信息,上交了思维题目的答案之后,面试官出来了。原本预约2点的,见我来的早了,面试官还是有点意外的。自我介绍之后,接着是如下的技术面试:
- 集合框架了解么?HashMap和Hashtable的区别?
- HashMap实现原理?Hashtable线程安全是怎么现实的?
- 能讲讲HashMap的put()操作过程么?
- Spring中Bean的生命周期
- Spring如何管理事务的?
- Service层是单例还是多例的?是线程安全的么?如果要做成多例的如何实现?
- 事务的传播性,数据库的隔离级别?
- static可以被继承么?static在哪里地方会用到?
- ArrayList和LinkedList的区别,为什么说ArrayList是线程安全的?
- 如何配置服务器(tomcat)的内存大小?
- 说一说Servlet实现的接口?
- 项目中常用的设计模式有哪些?写一个单例模式?
上诉的技术面当时答的不是特别好,有点自认为答的可以,有的答的不好,尤其是HashMap的底层不太熟悉很让自己吃亏。但是回来都做过一番温习。本来想写一写这些题目的解析的,但是把这个任务跑给读者去做吧!
面了几家的互联网公司,首先互联网薪资高,但是技术要求也高。比如他们都比较偏向于问基础。啥是基础?就是数据结构和算法,Java集合框架的实现原理等等。即使问到框架,也问的很深层次的东西。