微信在校生实习面试小记(iOS端)

周二晚上上课的时候突然接到微信的面试通知,于是大晚上的赶忙啃了啃算法设计和数据结构,还将自己一年来在iOS客户端上开发所学会的技术罗列了一下,就兴致勃勃的准备面试了。趁着现在记忆新鲜,赶紧记录一下昨天的面试过程。


面试地点是广州客村的T.I.T创意园的腾讯楼,和我之前预想的不同(毕竟是第一次面的小白),这里并没有西装革履,透着玻璃看到的里面是一个个和我一样的程序员,面对着两三个屏幕,有的奋“笔”疾书,有的忙里偷闲。 但看到这么多人,写着我一年来一直在学习的东西,这种感觉真的很好。

面试官是一个25岁左右的开发人员,在简单的看了看我的简历之后,他问我是否熟悉C、C++,我答道可以运用C++进行编程;他又问道,你认为栈和堆的区别在哪里,我对堆没有了解,就简单的说了一下调用栈的工作流程,随后面试官就让我进行一个当场的笔试,3道题,45分钟作答,考的都是非常基础的数据结构、算法知识,分别是字符串比较、链表反转,和一个二叉树遍历的简单应用,要求用C/C++来编写。如果说学习过ACM课程,或者是平时算法、数据结构课程比较用心的话,这几道笔试题解决起来都没有什么难度,但是事实证明,除了算法的正确性以外,面试官(或者说是微信)更注重的是细节和效率。

一题一题说,

第一题,字符串比较,比较两个输入的字符串是否由相同字母组成,如show和whos由同样的字母组成。其中字符串以 char * 的方式存储。

显然先将字符串排序再逐位比较是效率偏低的算法,我就采用了标记数组的方式,int *flag = new int [26*2]; ,初始全部置0,以strA,strB表示两个字符串,我先用一个for遍历strA,根据 str[i] - 'a' 和 str[i] - 'A' 判断完大小写之后,对应的flag[ str[i] - 'a' ] 或者 flag[ str[i] - 'A' +26 ] 自增 ; 遍历strB的时候,方法相似,将自增改为自减。最后遍历一次flag数组,数组中所有数值均为0,则返回true,否则返回false。

面试官看完第一题后,首先揪出了我程序尾 flag 数组没有 delete的遗漏(ARC用多了+对内存堆机制不了解啊!!),随后认为我的flag数组可以改为每单位占一字节的char类型,(毕竟实际情况下一个单词中单个字母出现的次数不太可能达到2^8 - 1以上),并顺便问了我一些基本数据类型的大小,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值