记:应聘 达梦数据库 C语言方向-软件开发岗

记在前面

听完宣讲,觉得这家公司值得尊重,人家走的是自主研发的路子。没有使用开源的项目,这点很值得鼓励,毕竟在国内,走这条路的人很少。

笔试

这里记录几个题目遇到的知识点。
1.形参和实参的区别与联系:
1)形参变量只有在函数被调用时才会分配内存,调用结束后,立刻释放内存,所以形参变量只有在函数内部有效,不能在函数外部使用。
2)实参可以是常量、变量、表达式、函数等,无论实参是何种类型的数据,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参,所以应该提前用赋值、输入等办法使实参获得确定值。
3)实参和形参在数量上、类型上、顺序上必须严格一致,否则会发生“类型不匹配”的错误。当然,如果能够进行自动类型转换,或者进行了强制类型转换,那么实参类型也可以不同于形参类型。
4)函数调用中发生的数据传递是单向的,只能把实参的值传递给形参,而不能把形参的值反向地传递给实参;换句话说,一旦完成数据的传递,实参和形参就再也没有瓜葛了,所以,在函数调用过程中,形参的值发生改变并不会影响实参。
2.若调用了一个函数,且此函数中没有return语句,则正确的情况是:
1)不会不返回值,哪怕是void也会返回空。
2)应该会返回一个不确定的值。肯定不是用户希望的,应该只会返回一个值。
3.考的是位运算:
C++常见位运算如下:
在这里插入图片描述

它们的优先级如下:~ 优先级为2 << >> 优先级为6 & 优先级为9 ^ 优先级为10 | 优先级为11
4.MVC框架。百度百科
5.
在这里插入图片描述

选的是栈。栈是先进后出的。具有记忆功能。为什么这样就具有记忆功能,这道题目后面有大佬讲解了浏览网页的一个例子。觉得很好,和大家分享一下。浏览网页A时,点击一个地方,进入网页B,在网页B,再点击一个地方,进入网页C。此时返回的时候,先回到网页B,再回到网页A。就是栈的原理,因此说它具有记忆功能。
6.怎么判断链表中是否有环?
①.穷举遍历的方法:两个指针,一个指针a负责检查每个节点,另一个指针b每次都从头结点开始。指针a每次检查到一个结点时,指针b都从头开始遍历,如果发现结点b之前的某个结点的ID和结点b相同,则有环。如果结点b一直追溯到为空了,还是没有出现前面的情况,就表示无环。这种方法的时间复杂度很高,但是空间复杂度很低。
②.哈希表缓存:思路和前面的一样,多了的地方是引入一个哈希表作为额外的缓存,这样在指针a检查到一个新的结点时,需要查找哈希表中有没有相同的ID即可。减少了时间复杂度,增加了空间复杂度。
③.快慢指针:这个方法也适合用来找到一个链表的中间结点。当然这里的思路是这样的。两个指针,slow和fast,slow每次走一步,fast每次走两步。如果有环的话,走了n步(为啥是n步,知乎上有解释。)(我只想通了,递归证明确实会相遇,但是步数仍然不会求。)之后,一定会相遇。(链表从头结点到入环节点距离为d,环长为s.)时间复杂度较好,空间也较好。
④.利用set集合的大小变化。如果加入了这个节点之后,set集合大小没变化,就有环。否则,继续遍历。直到为空,说明无环。退出。

后续,没进面试。。凉了。。下次继续加油吧。

原创文章 77 获赞 4 访问量 9034

猜你喜欢

转载自blog.csdn.net/weixin_40007143/article/details/104981906