由于种种原因,我不想把如何收到富途iOS开发面试的邀请记录说清楚,其实从一开始我并没有认真对待这次面试,收到面试邀请邮件我才知道这是家证券公司,我对理财,证券,股票之类的东西真的是感兴趣不上,也不了解,可能是一直以来自己太穷了。当时约定面试时间是10月10号晚上,而在10月10号之前,我连富途证券的官网都没有打开过吗,知道面试前一个小时,我才上网看了富途的官网。找了富途牛牛的APP看了看,知道他们是做什么的。这样的态度看来我面试失败是理所当然。
这篇文章去年10月就写好了,面试也是去年的事情了。既然写了,那还是发出来吧。
面试时晚上进行的。晚上7点我赶到了科兴科技园,这里的车和人都比较夸张,超级多的。问了几个人找到C3栋大楼,然后坐电梯要排队啊,从电梯门口一直排到大门口,我是最后一个。好不容易电梯来了,因为排队人太多我只有坐下一趟。好不容易到了9楼一出门就看到富途了,看来这一整层都是富途了。因为已经7点多了,所以里面人并不多,我按了门铃好久才有人开门。进去一看公司环境还算不错,可能面试官去吃饭了,我坐在沙发等了10多分钟他才过来。
面试官带我进入个一个玻璃隔开的小房间后就开始面试,先让我简单自我介绍了下,我不知道他从我的简历了解了我多少信息。我就随便说了下工作经历。然后他拿出一张纸,直接就开始问我计算机基础的知识,第一个就是:
这个字符串在内存中的长度是多少,Int类型呢,指针类型呢
先看看编码所占字节大小
(一)“字节”的定义
字节(Byte)是一种计量单位,表示数据量多少,它是计算机信息技术用于计量存储容量的一种计量单位。
(二)“字符”的定义
字符是指计算机中使用的文字和符号,比如1、2、3、A、B、C、~!·#¥%……—*()——+、等等。
(三)“字节”与“字符”
它们完全不是一个位面的概念,所以两者之间没有“区别”这个说法。不同编码里,字符和字节的对应关系不同:
①ASCII码中,一个英文字母(不分大小写)占一个字节的空间,一个中文汉字占两个字节的空间。一个二进制数字序列,在计算机中作为一个数字单元,一般为8位二进制数,换算为十进制。最小值0,最大值255。
②UTF-8编码中,一个英文字符等于一个字节,一个中文(含繁体)等于三个字节。
③Unicode编码中,一个英文等于两个字节,一个中文(含繁体)等于两个字节。
符号:英文标点占一个字节,中文标点占两个字节。举例:英文句号“.”占1个字节的大小,中文句号“。”占2个字节的大小。
④UTF-16编码中,一个英文字母字符或一个汉字字符存储都需要2个字节(Unicode扩展区的一些汉字存储需要4个字节)。
⑤UTF-32编码中,世界上任何字符的存储都需要4个字节。
说实话,一上来就问这个让我有点蒙,这个问题在正常开发APP过程一般不会去关注,虽然我以前看书都有介绍,但是我并没有背下来。只好凭印象来回答,字符串占内存长度和编码有点,比如GBK和UTF-8就不一样
然后我随便回答单个汉字所占大小再乘上文字长度。具体是多少个凭印象了,其他两个也是一样。。。
作为一个程序员,应该知道内存分为堆和栈,那么堆和栈有什么区别呢
这个问题其实并不难,只要看过计算机语言相关书籍,都知道两者的区别。我也可以很好的回答出来。
什么是线程,什么是进程,两者有什么区别
其实这个也不难,学过多线程对着两者基本都有所了解。
线程和进程,是怎么占用内存的,是运行在堆里面还是栈里面,一个线程能不能访问另一个线程里面的内存信息
这个问题我就蒙了,开发过程中还真少碰到这种问题,书上也很少看到这些资料。我就随便回答说好像运行在堆里面,正常是不可以访问的。
什么是死锁,是怎么形成的,有什么解决方案?
这个也应该不难,多线程部分书上都有很清楚的描述,就看自己面试前有没有好好复习了,我回答了死锁的形成,但是怎么解决死锁就不清楚了。
用两个线程同时执行一样的循环,把一个数从0开始各加10次,那么这个数的结果是什么,为什么会这样,说出这个数的范围
经典的多线程同步问题,显然这个对这个数进行+1 操作会让两个线程竞争。结果会无法预料。但是这个数结果的范围我还真不是很清楚,没有回答上来。
HTTP协议位于计算机网络的那一层?TCPIP协议呢?
TCP协议和UDP协议有什么区别,各用再什么场景,怎么解决拥堵问题和传输丢失问题
回答HTTPS的工作原理,加密传输是对称加密还是非对称加密
经典的计算机网络问题,常常做计算机网络开发应该毫无压力。可惜我平时也不和这些东西打交道。勉强可以回答上来,TCP和UDP的传输细节我回答不上来。
什么是快速排序,时间复杂度是多少,最好情况和最快情况,最坏情况时间复杂度是多少
经典的排序算法题,只要面试前复习过,很容易回答出来。
给定一个数据量极大的乱序整数数组,找出里面的最大值。请想出一个高效算法。
一般来说,遍历一次这个数组就可以找出最大值,其时间复杂度是O[N],但是面试官暗示还有效率更高的算法,我想了一会,还真没想出来,那也没办法,面试官一个解答都不帮我做的。
怎么生成一颗排序二叉树,需要在纸上手写代码。
如果面试前复习有好好复习数据结构,那么这个问题应该不难,可惜我根本就没有看书,平时也不会碰到这种问题。没办法,我只好硬着头皮写了一些C语言的伪代码,使用递归实现一颗二叉排序树。但是很明显代码里有不少错误,面试官也给了不少提示,但是我还是没有写出来。显然这个问题晾了。
最后一个问题,作为一个好几年的开发者,相信你知道C语言的memcpy方法,那么请你手写代码实现这个方法。
我去,我确实知道C语言有memcpy方法,就是拷贝内存,但是我在开发过程中基本没有用过好不。更不要说它的实现原理了,还要手写代码实现。这显然让我不知所措了,但是我还要硬着头皮在纸上写代码。我一边自言自语的写着,就是将该段内存地址偏移一个常量,然后再将旧内存地址里保存的内容复制到新的偏移地址来,再巴拉巴拉之类的,反正也是自己也迷糊了。面试官这个时候也很无奈吧,虽然也给了些许暗示,但是对于我这种一直都以业务开发为主的开发者来说,底层操作除了书上有看过,根本有没有实践过。真是无奈了。最后只好在尴尬中结束了这次面试。
最后面试官又翻了翻我的简历说,我相信你的OC,Swift,iOS技术应该OK,但是这些基础还达不到我们这边的要求,所以只能表示遗憾。我但是也是下班赶过去面试,途中还堵车了,还没有吃晚饭,又累又饿的,状态一点也不好,这个时候有些蒙。竟然没有去问面试官一些问题我就离开了。其实我应该至少应该要问好几个问题的。
上面的问题对于计算机相关专业的人来说,也许并不算难,但对于大部分把写代码当工作的且培训出来的人来说,很可能会回答不好。所以如果你想去大公司,那么好好学习这些计算机底层知识还是很有必要的。
网友评论