ARTS打卡记录第一周

ARTS打卡记录第一周

重温陈皓对于ARTS的定义

  • Algorithm主要是为了编程训练和学习。每周至少做一个 leetcode 的算法题(先从Easy开始,然后再Medium,最后才Hard)。进行编程训练,如果不训练你看再多的算法书,你依然不会做算法题,看完书后,你需要训练。关于做Leetcode的的优势,你可以看一下我在coolshell上的文章 Leetcode 编程训练 – 酷 壳 – CoolShell
  • Review:主要是为了学习英文,如果你的英文不行,你基本上无缘技术高手。所以,需要你阅读并点评至少一篇英文技术文章,我个人最喜欢去的地方是Medium.com(需要梯子)以及各个公司的技术blog,如Netflix的。
  • Tip:主要是为了总结和归纳你在是常工作中所遇到的知识点。学习至少一个技术技巧。你在工作中遇到的问题,踩过的坑,学习的点滴知识。
  • Share:主要是为了建立你的影响力,能够输出价值观。分享一篇有观点和思考文章。

 

Algorithm:

199. 二叉树的右视图 – 力扣(LeetCode)

第二次练习二叉树的右视图,还是忽略了这种情况

我只考虑了右视图的节点都在右子树上,没有考虑到右视图在左子树上的情况。对与树的处理,常见有两种:深度遍历和广度遍历。这道题当然要采用广度遍历,所以自然用队列这个数据库结构保存节点。

Review:

我阅读了medium上一篇介绍 Java 的 static 关键字的文章Understanding the Static Keyword in Java

这个文章中重点谈到不适合使用static关键字的场景,我之前确实没有关注过,比如过度使用static关键字会破坏封装性。避免在多线程环境中使用static关键字,因为在多线程环境中使用static关键字会导致同步问题和线程安全问题。对于每个实例都要一份拷贝值的可变数据,不能使用static,否则导致不同实例的变量的值被异常修改。过量使用static方法还会导致代码和某个类过于耦合,不利于单元测试和修改的独立性。不过我不明白为什么“过量使用static方法还会导致代码和某个类过于耦合”。

Tip:

  1. 多个表使用外键关联在一起,这里姑且认为A表的主键是B表的外键,B表的主键是C表的外键,删除A表的某一条数据时,没有把它关联的B表和C表中的数据也删除掉,所以导致这样一个问题:我们想把A,B,C表中的某些数据在他们原来的表中复制一份,但是B表和C表复制后的数据还要和A表复制后的数据建立关联,所以我使用Map来保存A表、B表、C表中原来的主键和复制后的数据的主键之间的映射关系,原来的主键为key,复制后的主键为value,复制的顺序是A表、B表、C表,但是在接口测试中发现B表中有些数据的外键在Map中找不到它关联的新外键。具体表现为插入复制后的B表的数据,会抛出一个空指针异常,原因是B表中某条复制的数据有个字段为null。
  2. 排查过程:先打上断点,通过空指针异常找到某个主键在Map中没有对应的value,查看Map中确实没有对应数据,然后去数据库看,发现这条缺失的数据在A表中被标记为已删除,Map没有保存这条数据,但是它关联的B表的数据没有标记为删除,所以根据B表的外键查找不到这条数据。怀疑是有人直接操作数据库的数据,没有通过接口去删除数据库的元素,只能通过规范开发和测试流程解决问题。

Share:

增查改删,即CRUD,这种工作只能提升开发人员对于业务的理解,但是很难提升技术能力,比较有趣的是我遇到一个数据库的数据修改问题,也就是上面的Tip描述的案例,这个案例我用到的Map处理新旧数据的映射关系的技巧是我从一个力扣的题目中学到的,所以刷力扣确实有帮助,但是纯粹的CRUD工作还是不要沉迷其中,应该做一些更有挑战性的工作,保持对技术的敏感。

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注