写点什么

ARTS 挑战打卡第十周(200713-200719)

发布于: 2020 年 08 月 25 日
ARTS 挑战打卡第十周(200713-200719)

Algorthm

https://leetcode.com/problems/convert-bst-to-greater-tree

https://leetcode.com/problems/binary-search-tree-to-greater-sum-tree



这两题的解法是一样的,题目要将除了最大节点外的其他节点,都加上比它大的的节点的和,因此需要找到最大的那个节点,然后往前回溯,逐渐叠加和,用DFS来解决这道题。



DFS,深度优先搜索算法(Depth First Search,简称DFS):一种用于遍历或搜索树或图的算法。沿着树的深度遍历树的节点,尽可能深的搜索树的分支。当节点v的所在边都己被探寻过或者在搜寻时结点不满足条件,搜索将回溯到发现节点v的那条边的起始节点。整个进程反复进行直到所有节点都被访问为止。



Review

https://www.mrlacey.com/2020/07/youve-only-added-two-lines-why-did-that.html?m=1



“你只写了两行代码,为什么要两天?”



大概有点类似于小时候看到的“只画了一条线,收10000元,画线收一元,知道在哪里画收9999元。”的故事。有些事情看起来简单,实际上背后需要花很多时间去论证是否正确。

有时候,修复一个bug,写代码可能真的只需要2行,但是要做的事情有:

  • 梳理原逻辑

  • 找到问题的根本原因

  • 是否有其他方式能复现该场景

  • 梳理影响范围

  • 回归影响范围



以上这些步骤,真的需要很长的时间,甚至而且有时候要修复的bug是自己不知道的模块,不知道新加的改动是否会产生新的bug,所以需要很仔细地处理。



解决bug不可怕,多次解决重复的一个bug才可怕,尽量做到每一次都能从更根源上解决问题。



Tip

为什么程序计数器、虚拟机栈和本地方法栈是线程私有的呢?

程序计数器主要有下面两个作用:

1、字节码解释器通过改变程序计数器来依次读取指令,从而实现代码的流程控制,如:顺序执行、选择、循环、异常处理。

2、在多线程的情况下,用于记录当前线程执行的位置



程序计数器私有主要是为了线程切换后能恢复到正确的执行位置。



为什么虚拟机栈和本地方法栈为什么是线程私有的?



虚拟机栈:由一个个栈帧组成,每个栈帧包含局部变量表(主要存放了编译器可知的各种数据类型)、操作数栈、常量池引用、动态链接、方法出口等信息。

本地方法栈:与虚拟机栈类似,包含的数据一致,区别在于,虚拟机栈是用于虚拟机执行的Java方法;本地方法栈是用于虚拟机执行的Native方法。



如果局部变量被其他线程访问到,会出现数据污染,为了保证线程中的局部变量不被别的线程访问到,虚拟机栈和本地方法栈是线程私有的。



简单介绍堆和方法区



堆是Java虚拟机所管理的内存中最大的一块,堆是所有线程共享的一块内存区域,在虚拟机启动时创建。堆所存在的内存区域的唯一目的就是存放对象实例,几乎所有的对象实例以及数组都在这里分配内存。



Java 堆是垃圾收集器管理的主要区域,因此也被称作GC堆(Garbage Collected Heap)。



方法区与Java堆一样,是多个线程共享的内存区域,它被用于存储已经被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。

注:Java虚拟机规范把方法区描述为堆的一个逻辑部分,但是它却有一个别名叫做 Non-Heap(非堆),目的应该是与 Java 堆区分开来。



简单的说,堆和方法区都是所有线程共享的资源,其中堆是进程中最大的一块内存,主要用于存放新创建的对象 ,方法区主要用于存放已被加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。



Share

分享文章-IM服务器设计系列文章



IM服务基础

https://www.codedump.info/post/20190608-im-design-base



消息存储

https://www.codedump.info/post/20190608-im-msg-storage



网关接入层

https://www.codedump.info/post/20190818-im-msg-gate



如何解决消息的乱序

https://www.codedump.info/post/20191013-im-msg-out-of-order



分享理由:从IM基础到数据层、网关层、消息乱序解决,介绍了一个基本的IM系统需要考虑的问题和设计的思路,如果要实现一个IM系统,这是一个很好的参考思路。



原创文章,文笔有限,才疏学浅,文中若有不正之处,万望告知。

如果本文对你有帮助,请点个赞吧,谢谢





发布于: 2020 年 08 月 25 日阅读数: 43
用户头像

公众号【老胡爱分享】 2018.03.13 加入

一个热爱分享,热爱分享的普通人。 追求终身成长,希望用文字的力量服务大众。

评论

发布
暂无评论
ARTS 挑战打卡第十周(200713-200719)