摘要: Java虚拟机的运行时数据区由程序计数器、java虚拟机栈、本地方法栈、Java堆、方法区、运行时常量池以及直接内存构成。构成图如下: 程序计数器 程序计数器是一块较小的内存空间,可以看作是当前线程所执行的字节码行号指示器。由于Java虚拟机的多线程是通过线程切换并分配处理器执行时间的方式来实现的, 阅读全文
posted @ 2021-06-28 22:57 wgyang2016 阅读(1112) 评论(0) 推荐(0) 编辑
摘要: 装饰器模式,动态地给一个对象添加一些额外地职责,就增加功能方面来说,装饰器模式比生成子类更为灵活。装饰器模式是为已有功能动态地添加更多功能地一种方式。 但是我们什么时候可以使用装饰器模式呢?当系统需要新功能的时候,是向旧的类中添加新的代码。这些新加的代码通常装饰了原有类的核心职责或主要行为。这种做法 阅读全文
posted @ 2020-04-15 00:11 wgyang2016 阅读(224) 评论(0) 推荐(0) 编辑
摘要: 依赖倒置原则,即 抽象不应该依赖细节,细节应该依赖于抽象。其实就是要针对接口编程,不要对实现编程。 为什么是依赖倒置?在面向对象开发时,为了使常用的代码可以复用,通常会把这些常用的代码封装成函数库,这样就可以在不同的业务代码中调用这些库,使得代码得到复用。但是,如果在设计的时候不合理,高层的业务模块 阅读全文
posted @ 2020-04-13 00:04 wgyang2016 阅读(208) 评论(0) 推荐(0) 编辑
摘要: Java实现对mongoDB的两表关联查询 记录一次学习java实现mongodb的两表关联查询的过程,方便日后需要用到的时候进行回顾。 场景: mongodb中有两张表,需要根据id进行关联查询。 表1数据如下: 表二数据如下: 实现两张表的关联查询,需要用到mongodb的lookup,在查询结 阅读全文
posted @ 2020-04-12 18:04 wgyang2016 阅读(6040) 评论(0) 推荐(2) 编辑
摘要: 开放 封闭原则,是说软件实体(类、模块、函数等等)应该可以扩展,但是不可以修改。 这个原则有两个特征:1、对于扩展是开放的;2、对于更改是封闭的。 但是,在软件设计中,绝对的修改关闭是不可能的。无论模块是多么的封闭,都会存在一些无法对之封闭的变化。既然不可能完全封闭,设计人员必须对于他设计的模块应该 阅读全文
posted @ 2020-04-10 22:09 wgyang2016 阅读(138) 评论(0) 推荐(0) 编辑
摘要: 单一职责原则,就一个类而言,应该仅有一个引起它变化的原因。如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化可能会削弱或者抑制这个类完成其他职责的能力。这种耦合会导致脆弱的设计,当变化发生时,设计会遭受到意想不到的破坏。 软件设计真正要做的许多内容,就是发现职责并把那些职责相互分离 阅读全文
posted @ 2020-04-10 22:07 wgyang2016 阅读(125) 评论(0) 推荐(0) 编辑
摘要: 策略模式是一种定义一系列算法的方法。从概念上看,策略模式的重点在于封装。比如在计算器这个例子中,能够计算是计算器的一个功能,但是不同的计算方法会产生不同的计算结果,运用策略模式,将不同的计算方法单独封装起来,客户端再根据实际的输入条件选择相应的计算方法。 策略模式的优点: 1. 对算法进行了封装,减 阅读全文
posted @ 2020-04-04 20:01 wgyang2016 阅读(196) 评论(0) 推荐(0) 编辑
摘要: 简单工厂模式,其实就是有一个静态的工厂方法,可以根据输出的条件返回对应的实例,然后再条用具体的实例的方法执行计算。 简单工厂模式相当与将条件判断都集中到了一个静态的工厂方法中。这样的好处是,执行具体计算任务的代码不需要再有很多的if判断,只专注于具体的计算。如果有新的计算需求,那么只需要增加相应的计 阅读全文
posted @ 2020-04-04 17:15 wgyang2016 阅读(211) 评论(0) 推荐(0) 编辑
摘要: 实现一个函数,使其能将字符串转换成整数。 首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。 当我们寻找到的第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字组合起来,作为该整数的正负号;假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来, 阅读全文
posted @ 2019-02-20 23:45 wgyang2016 阅读(16517) 评论(0) 推荐(0) 编辑
摘要: 给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。 示例: 给定 nums = [2, 7, 11, 15], target = 9 因为 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [0, 1] 代码 阅读全文
posted @ 2019-02-19 00:18 wgyang2016 阅读(2504) 评论(2) 推荐(0) 编辑