面向对象六大设计原则
面向对象六大设计原则 单一职责原则(Single Responsibility Principle)主要指的是一个类,方法,接口中只实现单一职责,这样能够提升代码可读性,可维护性也大大提高,有效避免了屎山代码的出现(确信),进行功能变更时的风险也会降低. 开闭原则(Open Closed Principle)对于扩展开放,对于修改封闭. 一个软件实体应该通过扩展来实现变化,而不是通过修改已有的代码实现变化.这是为软件实体的未来事件而制定的对现行开发设计进行约束的一个原则. 比如一个类可能有多方需要调用,有时部分调用方有了新的需求,这时不能直接修改类的代码来更改功能,而是需求方将这个类继承过去再进行添加,修改功能,这样出问题不会影响其他调用方,真正做到高内聚,低耦合. 其实类的例子还不够准确,一般都是先将职责方法抽象成接口,然后再根据各自需求的不同进行具体实现. 里式替换原则(Liskov Substitution Principle)所有引用基类的地方必须能够透明地使用其子类的对象. 通俗点说,只要父类能出现的地方子类就可以出现,而且替换为子类也不会产生任何异常.但是反过来就不行了,因 ...
乐观锁和悲观锁
乐观锁和悲观锁乐观锁乐观认为不会有别的线程与它来抢占修改,直接对数据进行修改,在提交的时候进行检查,看是否有别的线程修改过数据,如果修改过,就放弃修改,返回错误或者重试. 乐观锁一般有两种实现方式:版本号机制和CAS算法 版本号机制(redis采用的方案)一般是在数据表中加上一个数据版本号 version 字段,表示数据被修改的次数。当数据被修改时,version 值会加一。当线程 A 要更新数据值时,在读取数据的同时也会读取 version 值,在提交更新时,若刚才读取到的 version 值为当前数据库中的 version 值相等时才更新,否则重试更新操作,直到更新成功。 CAS算法CAS 的全称是 Compare And Swap(比较与交换) ,用于实现乐观锁,被广泛应用于各大框架中。CAS 的思想很简单,就是用一个预期值和要更新的变量值进行比较,两值相等才会进行更新。 CAS算法会有一个巨大的问题,就是ABA问题.如果一个变量 V 初次读取的时候是 A 值,并且在准备赋值的时候检查到它仍然是 A 值,那我们就能说明它的值没有被其他线程修改过了吗?很明显是不能的,因为在这段时间 ...
经典组合问题
经典组合问题 在Leetcode刷过回溯算法的同学应该都知道,组合问题是回溯算法中经典的一种题型 本篇博客给大家介绍的就是组合问题三兄弟:39.数组总和40.数组总和II216.数组总和III 为什么我想说说这三道题呢,因为这三道题的本质就是套回溯算法的模版 属于只要弄明白了,那么组合问题就一定没问题了,甚至大部分的回溯算法问题也能够解决 回溯法(back tracking)(探索与回溯法)是一种选优搜索法,又称为试探法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回到上一步,重新选择,这种走不通就退回再走的技术为回溯法,而满足回溯条件的某个状态的点称为“回溯点”。 回溯算法的关键在于找到终止条件,无论是子过程结束的终止条件,还是回退到上一步的终止条件. 例如 39数组总和 这道题中子过程的终止条件为1234if(target==0){ ans.add(new ArrayList<>(list)); return;}回退到上一步的终止条件为123if(target-candidates[i]< ...
估值原理听后感
估值原理听后感 写本文的原因是在小宇宙上听了面基的一期博客:《估值原理》:从没想过还可以这么看估值!,给了我一些思考和启发 估值估值是指评定一项资产当时价值的过程,这是百度百科的定义 那价值又是什么呢?价值,泛指客体对于主体表现出来的积极意义和有用性.这也是百度百科的定义. 所以说价值这个东西是因人而异的,每个人都有不同的观念,他们对同一样资产(物品)的看法是不同的,因而同一样资产对不同人来说具有不同的价值. 比如说,钻石,对于我这种理工科直男来说就是好看一点的碳,没有特殊的价值,但在另一些人眼里就是爱情的象征. 可虽然对不同的人来说资产的价值是有很大差异的,但是这些资产在市场上基本有着相对稳定的价格,这就可以引出这本书的一个观点:价值游戏论 价值游戏论价格是估值的最直观体现,所以人们总觉得,估值来源于交易,而交易脱胎于市场.但这其实是一种误解,市场只是提供了交易便利和清算服务而已,估值来自社会 如果一个社会要提倡某种价值观,就一定会用相应的资产去体现这种价值观.或者说,当一个社会决定用一场游戏来解决某个社会问题时,他们会根据情况选择是棒球赛还是足球赛还是篮球赛 这场游戏需要一些特定的 ...
个人博客的搭建(全流程覆盖)
个人博客的搭建教程推荐+踩坑记录 本人博客的说明趁着国庆假期,花了大概两天时间将这个博客搭了起来,主要是走了一些弯路(哭),其实主要是上午都在睡懒觉(雾) 采用的是hexo框架 主题是butterfly,加上了个人的一些魔改,由于本人喜欢简洁的风格,所以魔改的内容并不算太多 部署了两个远程仓库,一个是我的github仓库,另一个是我在阿里云服务器上的仓库 教程推荐自学能力比较强的同学可以去看官方文档,上一趴已有链接 推荐一些保姆级教程: Fomalhaut的博客,既有基础教程,也包含了魔改教程,还有Fomalhaut的bilibili主页 安知鱼的博客,内容十分详细,安知鱼主题也十分好看哦,佬的bilibili主页链接 建议小白跟着视频一步步操作,掌握了基础就可以去魔改自己想要的效果啦 推荐一些别的主题 casper主题,这算是我看下来最简洁,最有大厂范的主题了,如果我还有空折腾的话,这就是我下一个博客的主题了 安知鱼,这也是我很喜欢的一个主题,casper,忘了我吧(大雾) next主题 yimlia主题 更多主题可以去世界最大男性交友网站github自行寻找 关于服务 ...