在面向对象思想中, 功能交付是对象与对象之间的交付,每个对象承担自己的工作,对象与对象之间应该尽量减少耦合。因此我们需要降低对象之间的耦合,关注对象功能本身。 我们将上述案例代码继续抽象。...但是在面向对象的思想中,这个Json数组中的每个元素就是一个对象,我们可不可以在代码层中以List的形式存,然后以List的形式取出,中间的Json转换有程序自动去做,不需要开发去手动转。...那么以后我们修改消息通知功能就只需要在策略类中修改,不需要去主体功能方法中。 观察者模式 什么是观察者模式呢? 在现实生活中,许多对象都不是独立存在的,其中一个对象的改变往往会导致其它对象的改变。...关于DDD领域驱动设计,推荐书籍: “《领域驱动设计:软件核心复杂性应对之道》 《实现领域驱动设计》 ” 为什么我们在使用贫血模型 看了上面的代码,我们可能会疑问:我使用贫血模型开发挺好的啊?...因此我总结为什么人们更愿意使用贫血模型呢: “ 充血模型相对贫血模型存在一定的设计难度,你需要多花时间思考哪些是对象本身的行为 面向过程的编程思想根深蒂固,很难改变 对代码没有太大负责态度,认为怎么简单怎么来
统一的项目结构:可能根据不同的类别会有几个,如响应式项目,非响应式项目 编码规范 高质量的第三方组件库;以及团队自己开发的组件/代码片段 丰富的文档,包括 可在线查看的公共的文档 第三方组件库;以及团队自己开发的组件.../代码片段的文档以及demo 前端工具的介绍 项目开发过程中遇到的问题的描述与总结 具体项目的文档 项目如何启动 项目文件结构描述 项目的开发和发布 工具化 项目结构由命令行生成 新建页面,模块等由命令行生成...列出我们知道的所有的前端的技术点。并标出团队对技能的熟悉情况。不断的去覆盖它。
Spring容器里为什么没有我需要的Bean?...小故事 有一天,项目经理收到一个紧急需求,需要新增一个模块,项目经理看了看开发区的同学,一眼就看到盯着屏幕笑嘻嘻的小菜同学 项目经理心想:这傻小子在乐什么呢,肯定是在摸鱼,就让新需求给他做吧 项目经理悄咪咪的偷摸到小菜身后...,看着小菜在沸点评论区不停的滑动,似乎在寻找着什么大瓜 此时的小菜似乎察觉到气氛不太对劲,身后似乎有人,于是飞快的按下 Windows + 1 弹出Idea的开发界面 此时,项目经理开口道:小菜啊,这里有个紧急需求...,新增了一个模块,你新建一个SpringBoot项目把这些需求写一下吧~ 小菜只能不情愿的接到需求,从而放弃摸鱼,开始开发 精通CRUD的小菜立马Copy出一个新项目 很快啊,啪的一下~写出启动类加上@...controller包与其同级时无法扫描其中的组件,因此导致容器中找不到对应的Bean 如果需要扫描其他包,或者需要依赖公共项目common下的包时,可以使用配置basePackages,如果已经配置*
两个人一起写代码即为Pair,那么如何进行高效的Pair呢,也有一些良好的实践: 搭档的选择上,两个人的技能和经验最好是相当的,这样就不至于一个人成为被教育的对象,而另一个人成为键霸。...TDD,即测试驱动开发,强调的是测试先行。TDD是一个存在争议的主题,因为在一个连测试的没有的代码库中(多数客户也不关心测试代码,他们通常只想要看得到的功能),它的立身之本就不复存在了。...我也经历过客户要求测试覆盖率的项目,有专门的测试覆盖率工具(coveralls)来检测代码库,有的甚至集成在CI上作为一个硬性指标。 所以,TDD必须在一个有测试的项目中去讲。...当我们先写测试的时候,就会考虑到被测试的对象要尽可能被方便的测试,此时我们会尽可能的改良我的的API设计,以便利于测试,这样一来,我们写出的代码更具有可测试性,这样的代码往往具备较高的质量。...共同找出代码的坏味道(命名规范,代码整洁,API内聚性,面向对象设计),及时做出改正,提高代码库的质量,有助于后期扩展和维护。
从我一年编程生涯中得到的经验教训 一年前,我还是一个新鲜出炉刚毕业的学生,刚开始我在Rocketrip的工作。经过一年的时间,我学到了很多东西。...我常常在想,要是我能早点知道这些针对应届毕业生的技巧,那么我从学生到员工的转变道路将会顺畅得多。 ? ps:顺序先后没有特定含义 1.对工作的激情能大大提升你的工作质量。...3.95%的电子邮件没必要立即回应。这个比例可能有待商榷,但我想说明的是需要立即响应的电子邮件数量是非常少的。匆匆忙忙回复每一个进来的电子邮件,其成本会很高。你可以设置你的手机至半小时后提醒。...我赞同要将大部分的生产时间用于工作,但我也认为应该做一些自己的业余项目。博客、项目、等等,都可以。 10.不断学习。自学一些你认为需要和感兴趣的东西。 11.为待做事件列一个清单。...除非你的头脑异常清晰,否则你很容易忘记你负责的任务。
收发数据就像收发快递 当我们需要发送网络包的时候,在IP层,需要填入源IP地址,和目的IP地址,也就是对应快递的发货地址和收货地址。...举个现实中的场景就是,你在你家里的电脑上启动了一个HTTP服务,地址是192.168.30.5:5000,此时你在公司办公室里想通过手机去访问一下,却发现访问不了。...为什么我在公司里访问不了家里的电脑? 那是因为家里的电脑在局域网内,局域网和广域网之间有个NAT路由器。由于NAT路由器的存在,外网服务无法主动连通局域网内的电脑。...之所以会有这个错,主要是因为在一个linux内核中,内核收到网络数据时,会通过五元组(传输协议,源IP,目的IP,源端口,目的端口)去唯一确定数据接受者。...最后留个问题,有了NAT之后,原本并不富裕的IPv4地址突然就变得非常够用了。 那我们为什么还需要IPv6? 另外IPv6号称地址多到每粒沙子都能拥有自己的IP地址,那我们还需要NAT吗?
表达式2 :表达式3 注意事项 表达式1必须是一个布尔表达式 如果表达式1为真,那么执行表达式2,否则执行表达式3 自我检验 根据以下代码思考打印的结果是什么?...System.out.println(flg2); } } 提示:全局观——broaden your perspective 正确答案:true,false JAVA中的逻辑控制...其实程序和人生是一样:顺序中夹杂着循环伴随一次次选择不断成长 顺序语句 public class SequentialStatementsExample { public static void...JAVA中读入一个整数的写法——Scanner import java.util.Scanner; public class TestDemo2 { public static void...) { for(表达式①;表达式②;表达式③){ 表达式④; } } 表达式①:初始化条件 表达式②:循环判断条件 表达式④:循环需要执行的业务逻辑
1.搭建Go+ Windows下开发环境 第一步: 进入官网,点击Install Go+; 然后进入下方页面 这里需要使用到git,如果你的电脑上已经安装了git,可以跳过第二步,否则执行第二步。...第三步:安装官方github中的推荐方法安装 在git mesh中输入下面的命令 gi init git clone https://github.com/goplus/gop.git cd gop...2.go已经安装,在cmd下输入go version,可以获取到go版本号,运行./all.bat时报错go’ 不是内部或外部命令,也不是可运行的程序 或批处理文件。...解决办法:输入下方命令 go env -w GO111MODULE=on 2.万物语言都成hello world开始 在gop文件夹下创建first.gop 编写下面代码 package main import...} 然后运行 到这里,我的第一个Go+语言就运行成功啦。 3.总结 整个环境搭建,是建立在go基础上的,然后添加了go+工具,语言特点还是比较简单明了,期待更好GO+更多应用。
#和##对于大部分C语言玩得还算比较溜的朋友并不是很陌生,不过能把这两个知识点游刃有余的应用到所在代码中的每个角落,似乎并没有几个人能够做到,学的时候朗朗上口,而编码的时候却抛之脑后。...但是今天bug菌还是想重新介绍这两个“兄弟”,希望大家能够写出"秀"一点的代码~ 1 #和##基础 对于这两个语法的功能都比较简单,且都是在预处理阶段做一些工作 : #主要是将宏参数转化为字符串 ##主要是将两个标识符拼接成一个标识符...: 首先进行第一层转换宏替换处理掉##拼接符得到str(uart1),然后进行字符串转换符的处理为uart1字符串打印输出,当然以后你会遇到一些复杂的,不过要诀就是宏替换只会处理当前的#或者##,否则就需要增加转换宏提前进行宏替换展开...1、在结构体定义中的妙用 下面是bug菌经常在项目代码中用到的##结构体定义法,也是非常多开源代码中惯用的做法,相比常规的结构体定义法,确实省去很多重复的代码。...bug菌在代码中跟大家都标注了,相信大家一眼就能看懂,似乎并没有想象中那么难。
说是管理其实就是把常用的一些JS方法,自己保存下来,这样的以后的工作中可以比较方便的使用。 哪些方法可以、或是说值得保存呢?...四是有时间就在网上搞个目录,这样以后自己也好根据需要查找。 这里的关键是命名,要有自己的命名规则。...这个规则不是JS的方法、函数的名字,而是你自己保存这些JS文件时的目录名啊,zip包名什么的,因为时间一长就找不着了嘛,谁能记得N年前你写过一个什么方法。。。...============= 我写这些东西基本都是“思路或方法”的占多数,我觉得思维在层次上是高于具体实现的。...这也是我为什么很少写JS的具体实现的原因,我总觉得应该给我的粉丝们一些不一样的东西,一些别的地方得不到的东西。因为网上JS教程很多,我又写不好JS教程,我没耐心一步一步的详细写。
其实这里使用设计模式并不复杂,主要就是 将条件抽出,形成条件类, 然后将条件存入集合中, 遍历这个集合即可 如果我们需要修改条件,只需要修改条件类,即步骤1即可。2、3步骤的代码我们不需要去管理。...这里我要阐明我的一个观点: “我的观点并不是说,我们在编码时不能使用if-else,而是说我们不应该简陋地用if-else去实现业务的分支流程,因为这样随意的代码堆砌很容易堆出一座座"屎山"。...屎山代码雏形 上面的代码(基于实际项目的伪代码),大家看了后有什么感想。如果我们需要修改上面的条件逻辑,我相信编码者本人都会被这样的代码绕晕,更不用说后面接手的开发了。...实际工作中,能见到一个方法包含10个、20个甚至更多的逻辑分支的情况。...从软件设计角度讲,代码中存在过多的 if-else 往往意味着这段代码违反了违反单一职责原则和开闭原则。因为在实际的项目中,需求往往是不断变化的,新需求也层出不穷。所以,软件系统的扩展性是非常重要的。
为什么调试会花掉大把时间,因为工程大啊,你说它突然来个段错误,你知道是哪里段错误?段错误会死机,那不死机的呢?...当然,找得到,绝对找得到,不过找一下也得几个小时甚至一天就下来了。 每个类都配备测试代码,烦不烦啊你? 烦。但是项目run的时候爆了烦不烦?那会儿可就不是一个人烦了,那是一个团队一起烦。...这种问题其实完全可以避免,甚至可以不发生,只要给每个类配备一个测试代码。 写一个测试代码能花多少时间,十分钟,测试一下能花多少时间,十分钟。害怕测出问题?...行吧,我写,那怎么写啊? 怎么写那是个人自己的事情。但是,我想说的是,测试代码,最好写在功能类之前,这样可以预先界定功能类的具体功能,也可以把思路清晰一下。 至于测试代码要测试哪些东西?...你害怕哪里出问题就重点测试哪里,我们不能确保在测试代码中把所有问题全暴露出来,但是我们要花最少的时间,将利益最大化!!!
在实际开发过程中我踩到了mybatis的一个坑,我觉得值得记录、分享一下。 先说说这个坑是什么吧。如果你踩过这个坑,并且知道具体的原因,那这篇文章可以加深你的印象。...为什么在mybatis中数字0和空字符串""比返回的是true呢?...至此,我们结合源码,对于为什么会出现问题分析完毕。 解决问题 其实问题分析完了,一种解决方法也就呼之欲出,我们只需要把mapper.xml文件中的if标签修改为这样即可: ? 或者改成这样: ?...是的,我无脑的使用了CV大法。导致我在欢声笑语中写出了bug。我orderStatus传入的类型是一个Byte,和""做判断有任何意义吗?...后来我把这个问题分享在群里之后,群里一个朋友也给我分享了一篇文章,肥朝大佬写的《还有这种操作?浅析为什么要看源码》。文中给出了另一种解决方案,有理有据,简明扼要,是一篇很好的文章,大家可以看看。 ?
这是why技术的第14篇原创文章 在实际开发过程中我踩到了mybatis的一个坑,我觉得值得记录、分享一下。 先说说这个坑是什么吧。...为什么在mybatis中数字0和空字符串""比返回的是true呢?...至此,我们结合源码,对于为什么会出现问题分析完毕。 解决问题 其实问题分析完了,一种解决方法也就呼之欲出,我们只需要把mapper.xml文件中的if标签修改为这样即可: ? 或者改成这样: ?...是的,我无脑的使用了CV大法。导致我在欢声笑语中写出了bug。我orderStatus传入的类型是一个Byte,和""做判断有任何意义吗?...后来我把这个问题分享在群里之后,群里一个朋友也给我分享了一篇文章,肥朝大佬写的《还有这种操作?浅析为什么要看源码》。文中给出了另一种解决方案,有理有据,简明扼要,是一篇很好的文章,大家可以看看。 ?
大家好,我是Mandy。 前面一篇,分享了Go中的函数和方法之间有什么区别、如何使用,今天来分享一篇关于面向对象的知识。 万丈高楼平地起 在学习之前,我们来普及一下关于面向对象的基础知识。...这样可以防止外部代码直接访问和修改对象的内部状态,提高代码的安全性和可靠性。 3、继承和代码复用:继承是面向对象编程的一个重要概念,它允许通过从现有类派生出新类来扩展和重用代码。...总的来说,面向对象编程语言提供了一套丰富的概念和技术,在代码结构、复用性、可维护性和灵活性等方面具有明显的优势,使得软件开发更加高效和可靠。...Snipaste_2023-07-19_11-27-47 那该怎么实现呢,答案就是使用Go中结构体来实现。 需要注意的是,本文不会单独去讲结构体的语法内容。重点是总结结构体与面向对象的区别。...记住:方法一定是要有一个接收者的,这里的接收者为结构体Animal,其实就是将这个方法归属到结构体Animal。就好比在类中定义一个方法,这个方法就是属于这个类。
在DevOps Master中讲持续交付一课,其中讲到发布频率的篇章,中文版里面的翻译是这样的(来源于精益企业): ? 英文版本是这样的(原版书): ?...同样的位置,请注意【灰度发布】和【Dark lauching】的表述。直到有个学员不断的问我灰度发布到底是什么?我在课堂讲过,灰度发布这个术语貌似是不存在的,但 一直没有去看英文原书。...I like "dark launching", so I'll mostly use that in this post :-) 其实dark lauching,就是不改变客户端程序(变更)的情况下,...启动了新的功能,类似特性开关,当打开之后,用户变可以使用新的功能。
在Redux中编写测试听起来肯定有悖直觉。如果你使用了Redux,它可能看起来更加复杂。 然而,在添加功能之前编写测试有助于编写更好的代码,因为你预先考虑了将使用的设计模式、体系结构和变量的名称。...yarn add @reduxjs/toolkit axios-mock-adapter axios 测试 mock 数据 在src目录中,创建一个名为utils的新目录。...编写测试 这是最有趣的部分。让我们开始TDD。 首先,让我们创建并配置存储。在src目录中,创建一个名为index.js的新目录。在这个文件中,初始化存储。...slice的默认状态应该是一个空数组,毕竟,我们处理的是用户。 让我们通过编写一个测试: 在src/store中创建一个名为slices的新目录。...在slice目录中,创建一个名为user.js的文件。
近一年来,我在管理中犯下的2个重要错误。该错误导致团队结构不清晰,骨干核心人员不稳定,易流失。...1、资源错配 2、逮着一个人疯狂用 目录 1、背景描述; 2、我是如何犯错的,以及我为什么犯错; 3、这两个错误带来了哪些影响; 4、规避和改进方式; 一、背景描述 成立3年的初创公司,10人编制的测试团队...组内结构划分可见下图所示: 二、我是如何犯错的,以及我为什么犯错 错误一:资源错配 对于组长的选择,以及组内骨干的选择,如下图所示: 其中标记为组长的,是在团队内部小组内被任命为小组长,标记为骨干的...,是除了小组长以外的培养对象,或者说小组长的备份人选。...两个业务小组中,初中级员工干中高级员工的活,中高级人员为相对边缘角色。这样的资源错配,直接引发了核心、骨干员工的离职率高的后果。 我为什么会这样做: 本质上是一个“谁能谁上”还是“谁上谁能”的问题。
(在pc和ios中都能流畅地滚) 目前(2015年8月3日15:02:24)在大部分安卓手机都发现这个问题,触发bug的条件知道了,但是原因未知。...,此时是正常的,安卓中ul能正常地左右滚动。...(但我发现一个奇怪的现象,同样是有横向滚动的弹窗,只要关掉再打开弹窗,就可以正常地横向滚动了,不需要在纵向滚动层为body的情况下也行) 解决方法:1、让滚动的层变回body就行了。...但是做web app,不能保证时时都能直接用body作为滚动层的,尤其是在弹窗中的时候,请问有更好,不使用js的解决方法吗? div包着img时,div的高度希望自适应到与img一样?...(pc中不会,手机中会) 需要给input一个固定高度 li个li之间总是有空隙?
针对特定模式的坏味道,采用设计模式来提升可扩展性,增加可读性。 模型重构。在包含测试的情况下,通过识别和发现模型的行为,将行为聚合到模型中。 微重构。...因为重构项目的难度不是一般的大,对于经验不足的个人、团队来说,重写往往比重构来得便捷。 所以,根据我的需要我写了自己的工具,以用于改善即有代码的设计: Coca 是一个用于遗留系统重构的瑞士军刀。...它可以分析代码中的 badsmell,行数统计,分析调用与依赖,进行 Git 分析,以及自动化重构等。...TBD 提取中文注释 下一步,我应该做类似的事情,哈哈哈 坏味道识别 这是一个非常通用的功能,你可以在各种各样的工具里找到。...只需要: coca bs 就会得到一个建议修改的 JSON 文件: { "lazyElement": [ { "File": "examples/api/model/BookRepresentaion.java
领取专属 10元无门槛券
手把手带您无忧上云