阿里后台开发面试记录

前天吃饭的时候突然接到阿里的面试电话……吓cry,约了晚上七点的电话面试。自从上次体无完肤后最近一直在看C++和操作系统的东西,所幸这次问的问题也都比较基础,大部分答上来了,其中仍有小部分不知道的,决定查漏补缺记录一下,希望有后续!

1、地址空间的栈和堆的大小限制?
阿里后台开发面试记录_第1张图片
Linux系统可以用ulimit -a命令查看所有的大小限制,其中stack size默认为8192,也就是8M,可以使用ulimit临时改变其大小

另外,stackoverflow有一个关于栈和堆的讨论,大致解释清楚了它们的本质和区别
首先栈和堆都储存在计算机的RAM上,多个线程会有它们自己的栈,但共享全部的堆

  • 当在一个函数中创建一个对象时,它就会被保存在栈里
  • 反之动态分配一个动态对象时,它就会被保存在堆里

如上所说,栈是有固定大小的,不能超过这个大小,否则就会发生Stack Overflow(原来是这么来的),这通常是由于内套函数太多或是进入了死循环
不同的是,如果堆的大小不够了,操作系统会自动给它分配新的内存,理论上堆的大小可以接近虚拟内存的大小(不确定),这是它们的主要区别之一

2、静态库和动态库的区别?
参考这篇博客,讲的非常详细,简单概括一下
所谓静态库,就是指在链接的过程中,会和汇编生成的目标文件.o一起打包到可执行文件中,可以简单看成一组目标文件.o的集合,即很多目标文件打包后形成的一个文件,特点:

  • 链接在编译期间完成
  • 程序在运行时和库没关系,移植方便
  • 浪费空间和资源,因为所有相关的目标文件和牵涉到的库函数都被打包到一起

需要动态库的原因是静态库造成了大量空间浪费,还有一个问题是对程序的更新、部署、发布带来麻烦。一个静态库的更新会导致所有程序都需要重新编译发布给用户
动态库在程序编译时并不会进行链接,而是运行时再载入。不同的程序调用相同的库,那么内存中只需要有一份该共享库的实例,特点:

  • 把对一些库函数的链接推迟到运行阶段
  • 可以实现进程间的资源共享
  • 让程序升级更简单

3、HTTP和HTTPS的区别,用了什么加密?
虽然知道HTTPS是加密的HTTP,但是之前并不知道用的什么协议
网上找了一张图将HTTPS的原理解释的很明了
阿里后台开发面试记录_第2张图片
HTTPS = HTTP + SSL/TSL,SSL/TLS依靠证书来验证服务器身份;并为浏览器和服务器之间通信加密

你可能感兴趣的:(C/C++)