Algorithm-一周至少一道算法题
Review-阅读并点评至少一篇英文技术文章
Tip-学习至少一个技术技巧,总结和归纳在日常工作中所遇到的知识点
Share-分享一篇有观点和思考的技术文章
01-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的那条边的起始节点。整个进程反复进行直到所有节点都被访问为止。
02-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才可怕,尽量做到每一次都能从更根源上解决问题。
03-Tip
——————
为什么程序计数器、虚拟机栈和本地方法栈是线程私有的呢?
程序计数器主要有下面两个作用:
1、字节码解释器通过改变程序计数器来依次读取指令,从而实现代码的流程控制,如:顺序执行、选择、循环、异常处理。
2、在多线程的情况下,用于记录当前线程执行的位置
程序计数器私有主要是为了线程切换后能恢复到正确的执行位置。
为什么虚拟机栈和本地方法栈为什么是线程私有的?
虚拟机栈:由一个个栈帧组成,每个栈帧包含局部变量表(主要存放了编译器可知的各种数据类型)、操作数栈、常量池引用、动态链接、方法出口等信息。
本地方法栈:与虚拟机栈类似,包含的数据一致,区别在于,虚拟机栈是用于虚拟机执行的Java方法;本地方法栈是用于虚拟机执行的Native方法。
如果局部变量被其他线程访问到,会出现数据污染,为了保证线程中的局部变量不被别的线程访问到,虚拟机栈和本地方法栈是线程私有的。
简单介绍堆和方法区
堆是Java虚拟机所管理的内存中最大的一块,堆是所有线程共享的一块内存区域,在虚拟机启动时创建。堆所存在的内存区域的唯一目的就是存放对象实例,几乎所有的对象实例以及数组都在这里分配内存。
Java 堆是垃圾收集器管理的主要区域,因此也被称作GC堆(Garbage Collected Heap)。
方法区与Java堆一样,是多个线程共享的内存区域,它被用于存储已经被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。
注:Java虚拟机规范把方法区描述为堆的一个逻辑部分,但是它却有一个别名叫做 Non-Heap(非堆),目的应该是与 Java 堆区分开来。
简单的说,堆和方法区都是所有线程共享的资源,其中堆是进程中最大的一块内存,主要用于存放新创建的对象 ,方法区主要用于存放已被加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。
04-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系统,这是一个很好的参考思路。
原创文章,文笔有限,才疏学浅,文中若有不正之处,万望告知。
如果本文对你有帮助,请点个赞吧,谢谢
更多精彩内容,请关注个人公众号。