面试4分实力,6分运气,本周运气还不错,遇到的面试题都是看过的,希望这次的一面能过吧。
本周遇到的其中一个面试题就是这个:在不使用额外空间的情况下,完成两个整数的值交换,问题不难,但是若没看见过,相信能在面试的紧张环境下想出来的肯定不算多。
加减法
先假设a = 1 , b = 2
,要交换 a 和 b。
- 执行
a = a + b
,现在 a 就是 a + b。 - 执行
b = a - b
,b 就相当于 a + b - b 等于原来的 a,b 就变成 a 了。 - 执行
a = a - b
,现在 b 就是原来的 a,a 就相当于 a + b - a 就等于原来的 b,a 变成 b 了。
异或法
现在我的感受就是,若是一个跟计算有关的问题想不到解决办法的时候,那它多半就是和位运算有关了。
而这题就可以通过异或完成(幸好看见过,不然面试还真想不起来)
- 任何数和 0 异或,都得任何数。
- 任何数与自身异或,都得 0。
先假设a = 1 , b = 2
,要交换 a 和 b。
- 执行
a = a ^ b
,现在 a 就是 a ^ b。 - 执行
b = a ^ b
,b 就相当于 a ^ b ^ b 等于原来的 a,b 就变成 a 了。 - 执行
a = a ^ b
,现在 b 就是原来的 a,a 就相当于 a ^ b ^ a 就等于原来的 b,a 变成 b 了。
总结
面试之前本来对这次面试不报希望,因为面的前一天才打电话通知,而基础知识又已经模糊了,还好简单的过了一遍,面的时候问的也不算很难,但仍然有不足,首先仍然是算法,一道不难的题但仍没有做到一次bug free,还是在面试官的提醒下才发现问题所在,再就是像面试官说的思路不够灵活,有时候反过来想一下就能发现一个更好的解决办法,再就是回答问题的时候把一个知识点说错了(只发现自己说错了一个,可能并不只是一个……),最后面试官说的是等待后续安排,也不知是过还是没过,希望能过吧。
下周的重点应该就是消息队列和算法了,加油。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。