堆栈

  那会儿去面试,被问及“如何解析xml,不用系统针对xml的类库”。

  不假思索,无非就是string匹配操作嘛。面试官顿了一下xml,哦,恍然大悟...

  ——那会儿就近才搞了clr profile。clr profile输出栈信息,需要解析,不是一回事么。他是想得到栈的结果,一路顺利,他也很满意,最终电话了我几次,价格问题...

  每每面试他人,我会先问及经历,然后挺面试者狂吹自己做了什么什么东西,怎么怎么样。但却真不少人不能回答很基本的问题,然后再问项目,最后说只做了什么什么,或者更甚者...

  关于堆栈这是我被问及两次的问题,一次还未毕业,人家问我struct和class的区别,还有就是这次。第一次的时候在学校算是N人了,走出来就被这么小问题给困住了,我只能按照书上释义回答了对方,当然结果不会满意。反正后来我是特不担心这问题,我会直接搬出clr profile...

  对于代码数千数万行不知struct和class  —— 用struct的时候难道就没有没new的时候?

  new我先来释义一下,和c++概念差不多,动态分配内存,然后返回该地址(引用)。struct不new即可使用,该变量分配在栈上,栈是什么东西 —— 到处都有释义:先进后出?什么时候有栈 —— 只要你要调试就会看到栈。

VS这个显示跟CLR Profile输出可以认为是一致的,反应的就是代码的结构。

如果从main来看,main就是xml的根,然后是各个函数的包含关系,代码本身就是栈的关系。代码需要本身先被解析,然后再是运行。

因此变量的域——栈节点就是他的域。栈在系统中大量存在,这些要运行的都要用到,加减乘除也都要用到...

至于堆,就是一个散列函数;如果我们要提供快速查找怎么办?——我们会用hashtable,或者dictionary,就是这样一个东西;操作系统有大量的这些东西,在new一个class的时候,class在散列表上,连文件系统都有 —— 那个东西,那里叫索引,只不过平时都呆在硬盘上在。

说到这不得不提到还在流行的大数据,耗内存不是,就是有这么个在内存上的索引,内存只要能满足索引那速度肯定快,至于散列函数内部具体的算法,这不是我们所需要详细关心的,知道二叉树原理也就行了。

想快没有捷径—— 由此nosql扔掉包袱,还是得使劲索引,只要是查找就离不开这玩意儿。

回到面试问题,string是个特殊的玩意儿,他有个散列表,出现不同的就多一行,因此字符串大量运算时,会消耗许多的行。此时需要stringbuilder来应对。测试消耗内存string是个不错的选择,连加不多次就会爆胎。

至于javascript之类大致若此,细节不同,毕竟还没有什么能一次锁定目标的算法。

  

  

原文地址:https://www.cnblogs.com/huapiaoshuiliuxi/p/4563798.html