程序员面试题整理笔记讲述.pdfVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
1、线程与进程的区别 进程和线程的主要差别在于它们是不同的操作系统资源管理方式。 进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而 线程只是一个进程中的不同执行路径。 线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉就等于 整个进程死掉,所以多进程的程序要比多线程的程序健壮,但在进程切换时,耗费资源较大, 效率要差一些。 但对于一些要求同时进行并且又要共享某些变量的并发操作,只能用线程,不能用进程。 一个线程包含以下内容: 一个指向当前被执行指令的指令指针; 一个栈; 一个寄存器值的集合,定义了一部分描述正在执行线程的处理器状态的值; 一个私有的数据区。 竞态条件 竞态条件指的是一种特殊的情况,在这种情况下各个执行单元以一种没有逻辑的顺序执 行动作,从而导致意想不到的结果。 举一个例子,线程T 修改资源 R 后,释放了它对R 的写访问权,之后又重新夺回R 的 读访问权再使用它,并以为它的状态仍然保持在它释放它之后的状态。但是在写访问权释放 后到重新夺回读访问权的这段时间间隔中,可能另一个线程已经修改了R 的状态。 另一个经典的竞态条件的例子就是生产者/消费者模型。生产者通常使用同一个物理内 存空间保存被生产的信息。一般说来,我们不会忘记在生产者与消费者的并发访问之间保护 这个空间。容易被我们忘记的是生产者必须确保在生产新信息前,旧的信息已被消费者所读 取。如果我们没有采取相应的预防措施,我们将面临生产的信息从未被消费的危险。 如果静态条件没有被妥善的管理,将导致安全系统的漏洞。同一个应用程序的另一个实 例很可能会引发一系列开发者所预计不到的事件。一般来说,必须对那种用于确认身份鉴别 结果的布尔量的写访问做最完善的保护。如果没有这么做,那么在它的状态被身份鉴别机制 设置后,到它被读取以保护对资源的访问的这段时间内,很有可能已经被修改了。已知的安 全漏洞很多都归咎于对静态条件不恰当的管理。其中之一甚至影响了Unix 操作系统的内核。 死锁指的是由于两个或多个执行单元之间相互等待对方结束而引起阻塞的情况。例如: 一个线程T1 获得了对资源R1 的访问权。 一个线程T2 获得了对资源R2 的访问权。 T1 请求对R2 的访问权但是由于此权力被T2 所占而不得不等待。 T2 请求对R1 的访问权但是由于此权力被T1 所占而不得不等待。 T1 和T2 将永远维持等待状态,此时我们陷入了死锁的处境! 针对此问题主要有三种解决方案: 1)在同一时刻不允许一个线程访问多个资源。 2 )为资源访问权的获取定义一个关系顺序。换句话说,当一个线程已经获得了 R1 的访问 权后,将无法获得R2 的访问权。当然,访问权的释放必须遵循相反的顺序。 3 )为所有访问资源的请求系统地定义一个最大等待时间(超时时间),并妥善处理请求失败 的情况。几乎所有的.NET 的同步机制都提供了这个功能。 前两种技术效率更高但是也更加难于实现。事实上,它们都需要很强的约束,而这点随 着应用程序的演变将越来越难以维护。尽管如此,使用这些技术不会存在失败的情况。大的 项目通常使用第三种方法。事实上,如果项目很大,一般来说它会使用大量的资源。在这种 情况下,资源之间发生冲突的概率很低,也就意味着失败的情况会比较罕见。我们认为这是 一种乐观的方法。秉着同样的精神,我们在19.5 节描述了一种乐观的数据库访问模型。 2、new 和malloc 的区别 A )malloc 与free 是C++/C 语言的标准库函数,new/delete 是C++的运算符。它们都可用于 申请动态内存和释放内存。 B)对于非内部数据类型的对象而言,光用malloc/free 无法满足动态对象的要求。对象在创 建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。由于malloc/free 是 库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和析构函数的任务 强加于malloc/free。 C )因此C++语言需要一个能完成动态内存分配和初始化工作的运算符new,以一个能完成 清理与释放内存工作的运算符delete 。注意new/delete 不是库函数。 D)C++程序经常要调用C 函数,而C 程序只能用malloc/free 管理动态内存new 是个操作符, 和什么+,-,=...有一样的地位.

文档评论(0)

xiaofei2001128 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档