zoukankan      html  css  js  c++  java
  • 阿里巴巴面经

      早上八点半左右到达纽宾凯酒店,交了简历后在休息区等待。大约九点十分左右进行一面。

      一面的面试官貌似是一个java程序员。没怎么问C++。我尽可能的回忆一下他的问题,并将我的作答记录如下(答得不一定都对):

      1.数组和链表有什么区别。

          答:数组是一块连续内存,随机访问效率很高,但是插入操作需要移动内存中的数据;链表是不连续内存,插入和删除元素的效率高,但不支持随机访问。

      追问:为什么数组的随机访问效率高?

          答:数组给出了一个基准地址,要访问任意一个内存,可以用该地址加上下标。

          追问:不考虑步长吗?

          答:如果用指向某类型的指针加上下标,就不用考虑步长了。(int A[3]; *(A+2)==A[2])

         

       2.怎么起多线程?多线程编程要注意什么?

      答:pthread_create函数创建线程,多线程要注意对共享变量的保护,使用mutex或者信号量等,进行线程同步。

          追问:mutex和信号量有啥区别?

          答:信号量用在多线程中更耗内存,用mutex省内存。

          3.说说熟悉的linux命令。

          答:umask 文件的操作权限屏蔽字

                chmod 修改对文件的操作权限

                chdir 修改工作目录

                netstat 查看网络状态

                top 查看系统性能

                df 查看磁盘的使用情况

                 kill 发送信号

      

      4.实现一个生产者消费者模型,一个生产者,多个消费者。(进程PV操作)

          答:我直接使用了信号量的sem_post和sem_wait函数,而面试官的意思是使用pv原语。这一题没答上来。主要是没有深入理解信号量的实现。

      5.说说同步IO和异步IO。

          答:同步IO包括阻塞,非阻塞,多路复用,信号,异步IO只有一种。同步IO和异步IO的区别在于,数据从内核复制到进程时,同步IO是阻塞的,而异步IO是非阻塞的。

          

      6.谈谈数据库的索引有什么用?什么字段需要建索引?

          答:有索引搜索起来更快,一般要经常搜索的字段需要键索引。

         

      7.数据库的机制,SQL语句在数据库中是如何运行的?

          答:数据库接触的不多,这个真心不知道。。。

          8.网络连接中的长链接和短链接。

      答:不知道。

          9.谈谈哈希算法

          答:这题我达成哈希表了。显然没答到点子上。

      最后,面试官给了我一些建议:首先,我对数据库需要进一步学习,现在的程序都使用数据库。第二,要深入理解知识的内部原理,知其然也知其所以然。

      十点十五分钟左右,进行二面。二面也是技术面,面试官应该是一个比开发组长大一些的人物,他的问题更多是算法和内存管理。

      1.谈一谈C++的内存管理。

          答:1.初始化数据段,2.未初始化数据段,3.堆,4.栈,5.正文

          追问:堆和栈有什么区别?

          答:堆是程序员自己分配的,分配的大小没有限制(机器内存的上限以内),但需要自己回收,速度也没有栈快。

                栈是自动分配自动回收,能分配的大小是有限制的,用于存放函数的本地变量,返回点等信息。

      2.new/delete和malloc/free的区别

      答:1.new根据类型自动计算分配的内存的大小,malloc得自己计算;2.new返回的指针是有类型的,malloc返回的指针是void*型的;3.new一个class,会调用类的默认构造函数,delete调用析构函数。

      3.socket编程的基本步骤。

          答:客户端 socket,connect。服务端 socket,bind,listen,accept。

          4.AVL树的节点删除。

      答:自从有了红黑树,AVL树可以说是功成身退了。因此我没有认真看过AVL树,我讲了讲红黑树。(红黑树虽然很复杂,但是面试之前还是理解得去看一看,有帮助的)

      5.建立网络连接以后,假设客户端传过来很多份数据,这些数据的声明周期是不一样的,怎么处理。

          答:当时我没有完全理解面试官的意思。他给我解释了一下,这一题是考察内存管理。很多份的数据,当然不能来一个new一个,应该是new一块较大的内存,然后来了新数据直接往内存里放,当数据的声明周期到了,就将它从内存移出,给新数据留出空位。

      6.内存泄露是怎么造成的,怎么去检测。

      答:内存泄露是由于开辟的空间没有回收,导致内存越战越多,最后不够用了,导致泄露。有专门的内存泄露检测工具,但是我没用过,所以我没答上来怎么检测。

      7.编写一个makefile.

      答:makefile是可以写成模板的,只要把模板记住,什么工程都可以套用。模板我在其他随笔给出吧。

      8.怎么使用GDB?

      答:启动gdb,在关心的函数或者行数设置断点,然后run,再n单步执行,p打印关心的变量。如果程序core掉了,可以用where查看最后的栈信息。也可以调试core文件。

      

      最后面试官问我迄今为止最沮丧的事是什么,我回答是高考成绩没那么理想,blablabla...。面试官问我有啥问题问他。这里注意,大家一定要提前准备好问题,貌似看过一篇帖子,说不问问题的话,会显得对这家公司没啥兴趣。我问俩问题,一是面试官如何看待代码复杂度和代码效率的平衡。他回答要看投入产出比,并且如果是瓶颈,可以追求代码效率更多(这个问题问得没啥水平)。第二个问题:随着年龄的增长,怎么在技术这条线上一直走下去。他回答1.要保持对技术的关注,但可能没法到达一个很深的深度,更多的可能是广度;2.随着经验的增长,应该从更高的角度去看,从架构去看,用什么语言实现就不那么重要了。

      二面完了以后忘了看时间,不知道面了多久。在门口等了三分钟左右,进行三面:

      三面是HR面。由于没有经验,不知从何谈起。HR让我自己说一说自己,开心的,不开心的,等等。我谈了谈我的理想。。。这个话题貌似大了。HR将话题又拉回到大学四年,除了学习,我还做了什么,我讲了讲大学生活,blablabla...总之就是谈天说地了一番。感觉还是要学习学习HR面到底咋搞。最后,问了HR两个问题。1.杭州这个城市怎么样;2.淘宝的下一个增长点在哪。HR说,杭州是一个宜居的城市,整个城市给人的感觉是休闲的。但是阿里的工作压力也不是开玩笑的。其实这一点我早有心理准备。现在的互联网公司,哪个不是加班加点呢?对第二个问题,HR说阿里要打造一个电商的生态圈,增长不是一个点,而是整体的。

      阿里的面试就此结束,给我的感觉就是,自己差得太远了,进一步学习是必须啊。哦,还有一点,阿里很重视自己的企业价值观,要是在面试的时候能提一提这个,可能会效果更好。明天又是新的开始,努力学习,努力找工作。

      

  • 相关阅读:
    使用Leangoo玩转故事地图
    用Leangoo做敏捷需求管理
    LEANGOO成员
    LEANGOO卡片
    给WebAPI的REST接口添加测试页面(三)
    使用Win2D在UWP程序中2D绘图(二)
    Visual Studio 2015的“转到定义”和“查看定义”出错的Bug
    使用Win2D在UWP程序中2D绘图(一)
    Windows 10 UWP程序标题栏设置
    .NET 4.6的RyuJIT尾递归优化的Bug
  • 原文地址:https://www.cnblogs.com/johnsblog/p/3970258.html
Copyright © 2011-2022 走看看