使用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)。