
1、C++定义数组有大小限制吗?如何定义一个长度为一百万的数组?
答:定义数组大小的限制主要是看数组定义在内存的哪个区域内。局部非静态的数组,空间在程序的栈上分配,不同平台的栈大小不同:SunOS/Solaris是8M,Linux是10M,Windows是1M,AIX是64M,都是可以调整的。也就是说,数组大小的限制就是堆或栈或全局存储区大小的限制。如果想定义长度一百万的数组可以将数组申明在全局存储区或堆上,这些区域大小是比栈大很多的。
2、死锁原因及解决、避免办法
答:死锁的四个条件是:1、互斥,2、请求与保持,3、不可抢占,4、循环等待条件。这四个条件是死锁的必要条件,只要系统发生死锁,这些条件必然成立,而只要上述条件之一不满足,就不会发生死锁。
死锁避免的基本思想是:系统对进程发出每一个系统能够满足的资源申请进行动态检查,并根据检查结果决定是否分配资源,如果分配后系统可能发生死锁,则不予分配,否则予以分配。
写程序时应该尽量避免同时获得多个锁,如果一定有必要这么做,则有一个原则:如果所有线程在需要多个锁时都按相同的先后顺序获得锁,则不会出现死锁。(避免条件4的成立)
3、HTTP常见的头部信息有哪些?
答:
一段典型的请求

一段典型的应答

Host一个HTTP请求会发送至一个特定的IP地址,但是大部分服务器都有在同一IP地址下托管多个网站的能力,那么服务器必须知道浏览器请求的是哪个域名下的资源。
User-Agent浏览器名和版本号,操作系统名和版本号,默认语言。
Accept-Language用户的默认语言设置。如果网站有不同的语言版本,那么就可以通过这个信息来重定向用户的浏览器。
Accept-Encoding大部分的现代浏览器都支持gzip压缩,并会把这一信息报告给服务器。这时服务器就会压缩过的HTML发送给浏览器。这可以减少近80%的文件大小,以节省下载时间和带宽。
If-Modified-Since如果一个页面已经在你的浏览器中被缓存,那么你下次浏览时浏览器将会检测文档是否被修改过。
Cookie顾名思义,他会发送你浏览器中存储的Cookie信息给服务器。
Referer顾名思义, 头部将会包含referring url信息。
Authorization当一个页面需要授权,浏览器就会弹出一个登陆窗口,输入正确的帐号后,浏览器会发送一个HTTP请求,但此时会包含这样一个头部。
4、Git和SVN的区别,Git对比SVN的优势有哪些?
答:主要答案可以参考这篇文章。
这里我总结一下:
1.GIT是分布式的,SVN是集中式的。这是Git和SVN的核心区别。使用Git开发时,每一个开发人员的电脑上有一个Local Repository,所以即使没有网络也一样可以Commit,查看历史版本记录,创建项 目分支等操作,等网络再次连接上Push到Server端。
2.Git把内容按元数据方式存储,而SVN是按文件。
3.Git没有一个全局版本号,而SVN有。
4.Git的内容的完整性要优于SVN:GIT的内容存储使用的是SHA-1哈希算法。
总之,Git的特点是版本控制可以不依赖网络做任何事情,相比于SVN,它对分支和合并有更好的支持。
5、不使用标准库函数实现函数char* int2str(unsigned int values)

6、有两个双向循环链表A,B,知道其头指针为:pHeadA,pHeadB,请写一函数将两链表中data值相同的结点删除



7、VC程序如何通过崩溃地址定位代码的出错行?
答:主要以参考这篇文章。
可以通过map文件和cod文件来定位出错行。
1.生成map文件,在VS2008中设置方法是property->Configuration Properties->Linker->Debugging 中的Generate Map File选择Yes(/MAP);
2.生成cod文件,在VS2008中设置方法是property->Configuration Properties->C/C++->output Files中Assembler OutPut中选择Assembly,Maching Code and Source(/FAcs)
3.通过崩溃地址在map文件中找到出错的函数;
4.在cod文件中找到对应的函数,然后计算相对偏移地址以找到对应的出错行。
还有通过Dump文件和WinDbg调试等方法。想要程序既不崩溃又能快速定位到出错代码终极办法就是SEH+MiniDump,参考这篇文章。
原作者:吴尼玛cs
链接:https://www.jianshu.com/p/6c2f0aa80967
作者:C语言关注
链接:https://zhuanlan.zhihu.com/p/71890033
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
网友评论