又一次面试总结

1.有一棵二叉树,怎么把它序列化,然后还原。其实这道题我是做过的,但是当时有些懵逼。
第一个解决方案:记录前序和中序遍历序列,然后根据这个还原。
但是这样需要两个序列,面试官便问只用一个序列怎么实现,当时没有想到,但是回来搭车的时候仔细一想就想到了。
第二个解决方案:记录层序遍历的序列,并且每层设置一个层标记-1。
后悔当时没想出来。
2.数组和链表的区别,这个之前有总结,只是当时说得不是很流畅。还考了一些数组和链表随机插入的时间复杂度,两个都是O(n),因为链表也需要遍历,如果是尾插或者是头插好办,O(1)。
3.TCP和UDP的区别,这个之前也有总结,算是回答得挺好,后来他又问四次挥手,回答得有点凌乱。又问HTTP是基于TCP还是UDP,我就说没了解过,其实我知道是基于TCP的,但是我不确定,然后就没继续问了。
4.有一个数组有正数和负数,比如说{-1,2,4,5,6,-3,-5},怎么把正数放到负数的前面。
我当时蒙了,说了一个垃圾方法,这里就不说了,面试官叫我写,我写不出来,因为那个方法说容易,但是写起来难,而且很垃圾。
后来我写不出来的时候,就想到了开辟另外一个数组来存储负数,然后移除负数,再把负数合并到正数的数组。
面试官就问我有没有不开辟内存的方法,说实话这道题我之前也是做过的,只是身临其境又等待了一个小时,人都慌了,然后就没想出来。
临走之前我问了面试官,他说用快排思想,用0作为基准,当时我觉得很有道理,但是搭车的时候我一想,不对啊,他给出的数据没有0,大家都知道快排是以里面其中一个数作为基准,但是如果没有的话,我们就不能进行交换了,所以应该是找出最大的一个负数,然后把大于它的放左边,小于它的放右边,也就是说进行一次快排思想前,我们必须找出最小的。
5.卡牌游戏的点击事件,我就说继承了IPointClickHandle接口,用2d射线检测。
6.发送消息的序列化,我说直接用字符串,然后用分隔符进行分割。他说可以用结构体封装起来,这样会比较好。确实这样会比较好,但是之前的开发追求速度就没有这样做。

然后这家又凉了,总结出来遇到问题不要急着去答,先思考一下再说出口,思路不是一次就能涌出来的。

猜你喜欢

转载自blog.csdn.net/qq842447820/article/details/83477047