因为没有录音,都是面完回想起来的,整理的有点乱~~~~
1. 谈谈你学习过的架构模式 MVC MVP MVVM(对MVVM模式不太熟悉)
MVVM可以算是MVP的升级版,其中的VM是ViewModel的缩写,ViewModel可以理解成是View的数据模型和Presenter的合体,ViewModel和View之间的交互通过Data Binding完成,而Data Binding可以实现双向的交互,这就使得视图和控制层之间的耦合程度进一步降低,关注点分离更为彻底,同时减轻了Activity的压力
2. 一个Union类型,共有一个int类型、Float、Double类型的字段,请问在32位的CPU创建时需要占用多少字节?
union的长度取决于其中的长度最大的那个成员变量的长度。即union中成员变量是重叠摆放的,其开始地址相同。
3. Union和Struct的区别
结构体(struct)中所有变量是“共存”的——优点是“有容乃大”,全面;缺点是struct内存空间的分配是粗放的,不管用不用,全分配。
而联合体(union)中是各变量是“互斥”的——缺点就是不够“包容”;但优点是内存使用更为精细灵活,也节省了内存空间。
4. 谈谈你所了解的C语言的内存管理
对于一个C语言程序而言,内存空间主要由五个部分组成:代码段(.text)、数据段(.data)、静态区(.BSS)、堆和栈组成。
- BSS段:BSS段(bss segment)通常是指用来存放程序中未初始化的全局变量和静态变量
- 数据段:数据段(data segment)通常是指用来存放程序中已初始化的全局变量和静态变量的一块内存区域
- 代码段:代码段(code segment/text segment)通常是指用来存放程序执行代码的一块内存区域。
- 栈区:由系统自动分配,栈区的分配运算内置于处理器的指令集,当函数执行结束时由系统自动释放。存放局部变量。栈的缺点是:容量有限,当相应的区间被释放时,局部变量不可再使用。栈是一块连续的区域,向高地址扩展,栈顶和容量是事先约定好的。
- 堆区:在程序的执行过程中才能分配,由程序员决定,编译器在编译时无法为他们分配空间,只有在程序运行时分配,所以被称为动态分配。堆是不连续的区域ÿ