数据挖掘面试常见的问题

本文探讨了数据挖掘面试中的一些常见问题,如进程与线程的区别,线程的优缺点,堆和栈的特性,new与malloc的区别,以及hash冲突的解决方法。还涵盖了8进制语法、数据库索引原则和事务的ACID特性等知识点。
摘要由CSDN通过智能技术生成

一、进程与线程的区别,线程的缺点

进程和线程都是由操作系统程序运行的基本单元,系统利用该基本单元实现系统对应用的并发性。

区别在于: 简而言之,一个程序至少有一个进程,一个进程至少有一个线程。 线程的划分尺度小于进程,使得多线程程序的并发性高。 

另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。 

线程在执行过程中与进程还是有区别的。每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。

线程的缺点:

每个线程与主程序共用地址空间,地址空间受限; 线程之间的同步和加锁控制比较麻烦; 一个线程的崩溃可能影响到整个程序的稳定性; 

线程能够提高的总性能有限,而且线程多了之后,线程本身的调度也是一个麻烦事儿,需要消耗较多的CPU 。


二、堆和栈的区别

一个由C/C++编译的程序占用的内存分为以下几个部分  

  1、栈区(stack)——由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。  

  2、堆区(heap)——般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。  

  3、全局区(静态区)(static)——全局变量和静态变量的存储是放在一块的,初始化的 全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相

  邻的另 一块区域。程序结束后由系统释放。  

  4、文字常量区  ——常量字符串就是放在这里的。   程序结束后由系统释放  。

  5、程序代码区 ——存放函数体的二进制代码。  

理论知识    

  1、申请方式    

  stack:   由系统自动分配。例如,声明在函数中一个局部变量int  b; 系统自动在栈中为b开辟空间。

  heap:   需要程序员自己申请,并指明大小,在c中malloc函数,c++中new函数。

   2、申请后系统的响应    

  栈:只要栈的剩余空间大于所申请空间,系统将为程序提供内存,否则将报异常提示栈溢出。    

  堆:从系统有一个记录空闲内存地址的链表中查找合适的块进行分配。

  3、申请大小的限制    
  栈:在Windows下,栈是向低地址扩展的数据结构,是一块连续的内存的区域。这句话的意思是栈顶的地址和栈的最大容量是系统预先规定好的,在WINDOWS下,栈的大小   是2M(也有的说是1M,总之是一个编译时就确定的常数),如果申请的空间超过栈的剩余空间时,将提示overflow。因此,能从栈获得的空间较小。    

  堆:堆是向高地址扩

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值