阿里巴巴电话面试C/C++基础知识整理【面试经验】

笔者今天接到阿里巴巴的电话面试邀请,感觉基础知识薄弱。还需要加强学习,下面将这方面相关的知识整理,与大家共同学习共勉。

基础的知识: STL容器,算法。

重点的知识:C/C++强调速度和内存管理,指针,内存这是重点。

引用和指针的区别与联系

区别

  1. 指针是一个实体他在栈中有自己使用的空间,但是引用没有;
  2. 引用必须初始化,指针不用但是最好初始化
  3. 指针使用时必须加*,引用不用;
  4. 引用只能初始化一次是个专一的人,指针不是;
  5. 引用不用const去修饰,但是指针可以
  6. 指针和地址运用自增(++)不同,引用是值进行自增,而指针是地址进行自增;

联系

  1. 引用的内部使用指针实现的
  2. 引用是受了限制的指针

内存分配的3个空间哪个效率更高

 分配效率:栈是机器系统提供的数据结构,计算机会在底层对栈提供支持,分配专门的寄存器存放栈的地址,压栈出栈都有专门的指令执行,这就决定了栈的效率比较高。堆则是C/C++函数库提供的,它的机制是很复杂的,例如为了分配一块内存,库函数会按照一定的算法(具体的算法可以参考数据结构/操作系统)在堆内存中搜索可用的足够大小的空间,如果没有足够大小的空间(可能是由于内存碎片太多),就有可能调用系统功能去增加程序数据段的内存空间,这样就有机会分到足够大小的内存,然后进行返回。显然,堆的效率比栈要低得多。

STL容器各自的优缺点

  1. 如果需要高效的随机存取,不在乎插入和删除的效率,使用vector;
  2. 如果需要大量的插入和删除元素,不关心随机存取的效率,使用list;
  3. 如果需要随机存取,并且关心两端数据的插入和删除效率,使用deque;
  4. 如果打算存储数据字典,并且要求方便地根据key找到value,一对一的情况使用map,一对多的情况使用multimap;
  5. 如果打算查找一个元素是否存在于某集合中,唯一存在的情况使用set,不唯一存在的情况使用multiset。
扫描二维码关注公众号,回复: 2857159 查看本文章

算法: 字典算法,快排,简单说明原理

基于二分法。快速排序之所比较快,因为相比冒泡排序,每次交换是跳跃式的。每次排序的时候设置一个基准点,将小于等于基准点的数全部放到基准点的左边,将大于等于基准点的数全部放到基准点的右边。

2018年3月21日 08:36:18 补充语言类相关知识

对主流语言进行分类,从该语言的最初目的了解该语言的重点。

计算机技术的演进过程
   年代 时代名称   需要解决的问题
2017-至今 人工智能时代  人类的问题
2008-2016 复杂信息系统时代 数据问题
1981-2008 网络和视窗时代  交互问题
1946-1981 计算机结构时代 计算能力问题
  • C语言:发展在一个对计算机运行速度和性能要求较高的年代,当时的计算机内存资源有限,需要合理调用计算机内存才能高效使用,使得程序较好的运行在计算机上。

学习重点:指针、内存、数据类型。

语言本质:理解计算机系统结构

解决问题:性能

适用对象:计算机类专业

  • Java:解决计算机语言跨平台的问题,面向对象的语言,方便在不同的系统,乃至手机上可以运行的程序。

学习重点:对象、跨平台、运行时等

语言本质:理解主客体关系

解决问题:跨平台

适用对象:软件类专业

  • C++:该门语言是对C语言的一个升级,同时兼具java和C的优点

学习重点:对象、多态、继承

语言本质:理解主客体关系

解决问题:大规模程序

适用对象:计算机类专业

  • VB:面向对象解决桌面应用的交互逻辑问题

学习重点:对象、按钮、文本库

语言本质:理解交互逻辑

解决问题:Windows桌面应用

适用对象:不确定

  • Python:各类编程语言所处历史时期和使命不同,Python是一门超级语言,语法简单,具有很大的生态系统,而且开源人人都能使用和做出贡献。

学习重点:编程逻辑、第三方库

语言本质:理解问题求解

解决问题:各类问题都可以应用

适用对象:所有专业

猜你喜欢

转载自blog.csdn.net/qq894040717/article/details/79631411