面试问题总结(一)Golang

Python027

面试问题总结(一)Golang,第1张

使用go语言的好处: go语言的设计是务实的, go在针对并发上进行了优化, 并且支持大规模高并发, 又由于单一的码格式, 相比于其他语言更具有可读性, 在垃圾回收上比java和Python更有效, 因为他是和程序同时执行的.

1. 进程, 线程, 协程的区别, 协程的优势

2. 讲一下GMP模型(重点)

3. Go的GC, 混合写屏障(重点)

4. go的Slice和数组的区别, slice的扩容原理(重点)

5. 讲一下channel,实现原理(重点)

6. 讲一下Go的Map的实现原理, 是否线程安全, 如何实现安全(重点)

7. new 和 make 的区别

8. 说一下内存逃逸

9. 函数传指针和传值有什么区别

10. goroutine之间的通信方式

11. 测试是怎么做的(单元测试, 压力测试)

12. 堆和栈的区别

近期正在学习go语言,闲暇时间写点leetcode,正好当作熟悉语法,锻炼思路。有些类似的题目,也做些总结和思考。很久以前就特别佩服那些写技术博客的,一直都是懒性子,总算是让自己迈开了第一步,第一篇技术博客,算法、工程、生活,希望自己能多总结,加油!

leetcode No1: https://leetcode.com/problems/two-sum/

题目的意思是,一个数组,找到其中两个数,和为某个给定的值。

直接两层for循环,时间复杂度是O(n^2),空间复杂度是O(1)。

时间复杂度是O(n),空间复杂度是O(n)

顺道附上java版本的解法:

leetcode No167: https://leetcode.com/problems/two-sum-ii-input-array-is-sorted/

这个题也完成可以按照上面leetcodeNo1的hashmap的解法,这种实际上并没有利用上这个是有序数组的优势。

go版本实现:

java版本的实现:

leetcode No653: https://leetcode.com/problems/two-sum-iv-input-is-a-bst/

空间复杂度O(n),时间复杂度O(n)

1、打出主函数defs(n):ifn=1。

2、在打出条件函数return1else:result=n+s(n-1)return.result。

3、最后结尾返回函数的值result=s(10)print(result)。