ARTS挑战打卡第九周


Algorithm-一周至少一道算法题

Review-阅读并点评至少一篇英文技术文章

Tip-学习至少一个技术技巧,总结和归纳在日常工作中所遇到的知识点

Share-分享一篇有观点和思考的技术文章


01-Algorthm

   ———————   

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

题目是给定一个值k,在BST里找是否有两个数字相加等于k。

思路:把找两个数字简化为找一个数字,从根节点开始,用k减去根节点的值,然后在左右子树里递归地找剩余的那个值。

02-Review

——————

https://hackernoon.com/are-unit-tests-a-waste-of-your-time-ftw3umv
文章论述单元测试是否有必要,写单元测试是很费时间的一件事情,如果代码发生改动,还需要维护单元测试,有时候写单元测试的时间甚至比写代码的时间都要长,但是写单元测试是很有必要的。

写单元最好的时机就是写代码的时候,如果写代码的时候不写单元测试,那么之后可能永远都不会补上的。

写完代码后的选择:
完全不测试:这个不用说了,肯定会有很多问题,甚至饭碗都不保

直接交给测试人员手动测试:很快就会发现,本来可以很快被发现的问题,会在你跟测试人员间不断地出现。

自测保证:自测的话,也需要花很长的时间去发现问题,只是把写单元测试的时间换为一次次的点击。

单元测试值得花时间去写,因为自测的话,跑整个流程,往往有些场景会被忽略掉,所以自测是不够充分的。

自己的经验是:在写单元测试的时候,粒度越小的单元测试,越能维护代码的稳定。另外,如果一个函数的单元测试不好写,说明函数的粒度不够小,或者怀疑自己,代码是不是没写好,应该重新修改函数,将函数改为粒度更小一些或者把函数改为更清晰,更单一的,一个函数只做一件事。

Tip

1、Java中,List、Set、Map 之间的区别是什么?

List和Set都是继承自Collection。Map是哈希表的父类。
List中的元素是可重复的,是一个列表,Set和Map的元素是不可重复的。
List是有序的,每个节点都是有序地连接起来;Set和Map是无序的。Map有有序的实现(TreeMap),也有无序的实现(HashMap),也有添加顺序的实现(LinkedHashMap)。

List的常见实现类有AbstractList,其子类有ArrayList、LinkedList、Vector。
Set的常见实现类有AbstractSet,其子类有HashSet、LinkedHashSet、TreeSet。
Map的常见实现类有HashMap和HashTable。

List中,Vector是线程安全的;Map中,HashTable是线程安全的。

2、ArrayList 和 LinkedList 的区别是什么?

一个比较明显的区别是ArrrayList底层实现的数据结构是数组,支持随机访问;LinkedList底层实现的数据结构是双向循环链表,不支持随机访问。

使用下标访问一个元素,ArrayList 的时间复杂度是 O(1),而 LinkedList 是 O(n)。

往下标为0的位置增加元素,ArrayList的时间复杂度是O(n),而LinkedList是O(1)

04-Share

—————



推荐文章-为什么TCP建立连接需要三次握手:https://draveness.me/whys-the-design-tcp-three-way-handshake/

推荐原因:从根本原因上分析为什么TCP需要三次握手,TCP 建立连接时通过三次握手可以有效地避免历史错误连接的建立,减少通信双方不必要的资源消耗,三次握手能够帮助通信双方获取初始化序列号,它们能够保证数据包传输的不重不丢,还能保证它们的传输顺序,不会因为网络传输的问题发生混乱。

原创文章,文笔有限,才疏学浅,文中若有不正之处,万望告知。
如果本文对你有帮助,请点个赞吧,谢谢
更多精彩内容,请关注个人公众号。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值