3 weixin_39137699

尚未进行身份认证

我要认证

阳光,热情,幽默

等级
TA的排名 2w+

里氏替换原则

里氏替换原则:Liskov Substitution Principle子对象能够替换父类对象出现的任何地方。并且保证原来的逻辑行为不变且保持正确性。怎么做到??通过继承,多态来实现。为什么需要里氏替换?⽽⾥式替换是⼀种设计原则,⽤来指导继承关系中⼦类该如何设计,⼦类的设计要保证在替换⽗类的时候,不改变原有程序的逻辑及不破坏原有程序的正确性。...

2020-08-01 21:31:20

开闭原则

开闭原则(Open Closed Principle)添加一个新的功能,是在已有代码基础上扩展代码(模块,类,属性,方法),而非修改已有代码。tips:1.开闭原则不是完全杜绝修改,以最小的修改代价来完成新功能的开发。2.同样的代码改动,在粗粒度下,可能被认定为修改,在细粒度模式,可能被认为拓展。怎么做到“对扩展开放,对修改关闭”??写的每行代码,都要有, 扩展意识,封装意识,抽象意识。提前思考未来需求变化的点,切记不要过度思考。为什么需要开闭原则??本质上是提高代码的可扩展性,这个原则指

2020-08-01 21:11:20

单一职责原则

单一职责原则(Single Responsibility Principle),缩写SRP。定义:一个类或者模块只负责完成一个职责(或者功能)。

2020-08-01 20:29:45

设计模式-命令模式

命令模式定义:将一个请求封装成一个对象,从而让你使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能。使用场景:只要你认为是命令的地方就可以采用命令模式,例如,在GUI开发中,一个按钮的点击是一个命令,就可以采用命令模式,模拟DOS当然也要采用命令模式。...

2020-05-13 09:19:17

设计模式-中介者模式

中介者模式定义:用一个中介对象封装一系列的对象交互,中介者使各对象不需要显示地相互作用,从而使其耦合松散,而且可以独立地改变它们之间的交互。使用场景: 中介者模式适合多个对象之间紧密耦合,耦合的标准是:在类图中出现了蜘蛛网状结构。在这种情况下一定要考虑使用中介者模式,这有利于把蜘蛛网梳理为星型结构,使原本复杂混乱的关系变得清晰。1.N个对象之间产生了相互的依赖关系。2.多个对象有依赖关系,但是依赖的行为尚不确定或者有可能发生改变的可能,在这种情况下建议采用中介者模式,降低变更引起的风险扩散。一些例子

2020-05-12 18:19:25

设计模式-建造者模式

建造者模式定义(也叫做生成器模式):将一个复杂对象的构建和它的表示分离,使得同样的构建过程可以创建不同的表示。使用场景:相同的方法,不同的执行顺序, 产生不同的事件结果,可以采用建造者模式。多个部件或零件,都可以装配到一个对象中,但是产生的运行结果又不相同时,则可以使用该模式。产品类非常复杂,或者产品类中的调用顺序不同产生了不同的效能,这个时候使用建造者模式非常合适。在对象创建过程中会使用到系统中的一些其他对象,这些对象在产品对象的创建过程中不易得到时,也可以采用建造者模式封装该对象的创建过程、

2020-05-12 09:51:15

文件IO

UNIX系统中大多数文件IO函数----------打开文件,读文件,写文件。只需要用到基本5个函数:open,read,write,lseek以及close.主要是不同缓冲区长度对read和write函数的影响。上面说明的函数经常被称为不带缓冲IO,不带缓冲指的是每个read和write都调用内核中的一个系统调用。文件描述符0,与标准输入关联,1与标准输出关联。2与标准出错输出...

2020-04-15 15:42:22

基本概念

介绍读到一些常用的概念1.文件描述符文件描述符通常是一个小的非负整数,内核用它标识一个特定进程正在访问的文件。当内核打开一个已有文件或者创建一个新文件,返回一个文件描述符。在读,在写文件时,就可使用它。2.标准IO标准IO函数提供了一种对不用缓冲IO函数的带缓冲的接口,使用这个不用担心如何选取最佳的缓冲大小。eg:printf 在apue.h头文件中3.EOF...

2020-04-15 15:22:23

c++ 用于大型程序的工具

17.1 异常处理17.1.1 抛出类类型的异常

2020-04-09 23:02:36

C++面向对象编程

15.3转换与继承15.3.1 派生类到基类的转换1.引用不同于转换对象1.将对象传递给希望接受引用的函数时,引用直接绑定到对象,看起来再传递对象,实际上实参是对该对象的引用,对象未被复制。转换不会改变原派生类对象。2.将派生类对象传递给希望接受基类类型对象的函数时(不是引用),情况完全不同,形参是固定的,--在编译和运行时形参都是基类类型对象。如果用派生类型对象调用这种函数时,则...

2020-04-06 23:08:59

leetcode 1392 最长快乐前缀

起因,这是某一次周赛的最后一题,不会,后来了解到是利用kmp的next数组.「快乐前缀」是在原字符串中既是非空 前缀也是后缀(不包括原字符串自身)的字符串。给你一个字符串 s,请你返回它的 最长快乐前缀。如果不存在满足题意的前缀,则返回一个空字符串。示例 1:输入:s = "level"输出:"l"解释:不包括 s 自己,一共有 4 个前缀("l", "le", "...

2020-03-31 15:10:50

数论,裴蜀定理

在数论中,裴蜀定理是关于最大公约数的一个定理,裴蜀定理得名于法国数学家艾蒂安·裴蜀。这个定理说明了,对任意整数a,b和他们的最大公约数d,存在一个关于ax + by =d; 一个线性方程.同时 gcd(a,b)的值一定是d的整数倍。leetcode 365题有两个容量分别为 x升 和 y升 的水壶以及无限多的水。请判断能否通过使用这两个水壶,从而可以得到恰好 z升 的水?如果可以,最后...

2020-03-21 11:21:15

redis sorted set底层跳跃表简单实现(Java)

起因: 以前了解过跳跃表这种数据结构,大致知道是怎么回事,于是很想去实现它。参考:redis设计与实现作者githubC语言头文件主要实现的C源码问题:给你一个链表,怎么实现才能不以O(n)时间复杂度去查找一个元素呢??(有什么更快的实现方式?答案就是跳跃表)跳跃表长这个样:链表加索引这种形式。如果我们想查找5,那我们先从1开始查找,发现1小于5,直接到4,这,小于5,但是4nex...

2020-03-07 12:47:36

KMP算法

最近复习了以下KMP算法先把网上我认为2篇好文章分享出来:孤~影博客专家我先用大致代码实现介绍:这是KMP主体实现的部分,大逻辑。意思就是原先暴力匹配的过程中,主串回退,子串也回退,浪费了很多时间。KMP匹配的过程就是主串和子串匹配就双索引往后移,若不匹配,只移动子串,而不移动主串。这样大大减少了重复匹配的情况。怎么只移动子串,答案就在于主串和子串失败的地方,子串回到一个当前子串失配...

2020-03-02 19:20:54

leetcod212hard单词搜搜II回溯

给定一个二维网格 board 和一个字典中的单词列表 words,找出所有同时在二维网格和字典中出现的单词。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母在一个单词中不允许被重复使用。示例:输入:words = [“oath”,“pea”,“eat”,“rain”] and board =[[‘o’,‘a’,...

2020-02-27 14:12:58

leetcode 60 第k个排列

给出集合[1,2,3,…,n],其所有元素共有n! 种排列。按大小顺序列出所有排列情况,并一一标记,当n = 3 时, 所有排列如下:"123""132""213""231""312""321"给定n 和k,返回第k个排列。说明:给定 n的范围是 [1, 9]。给定 k的范围是[1, n!]。示例1:输入: n = 3, k = 3输出:...

2020-02-18 12:44:06

leetcode355 设计推特

设计一个简化版的推特(Twitter),可以让用户实现发送推文,关注/取消关注其他用户,能够看见关注人(包括自己)的最近十条推文。你的设计需要支持以下的几个功能:postTweet(userId, tweetId): 创建一条新的推文getNewsFeed(userId): 检索最近的十条推文。每个推文都必须是由此用户关注的人或者是用户自己发出的。推文必须按照时间顺序由最近的开始排序。fol...

2020-02-17 18:58:39

leetcode32最长有效括号hard最特殊一种解法

给定一个只包含 ‘(’ 和 ‘)’ 的字符串,找出最长的包含有效括号的子串的长度。示例 1:输入: “(()”输出: 2解释: 最长有效括号子串为 “()”示例 2:输入: “)()())”输出: 4解释: 最长有效括号子串为 “()()”思路: 原本这是一道应该用动态规划解的,但是出现了一种神奇的解法,特此记录一下。class Solution { public i...

2020-02-13 16:10:15

递归备忘录法-leetcode 72编辑距离

给定两个单词 word1 和 word2,计算出将 word1 转换成 word2 所使用的最少操作数 。你可以对一个单词进行如下三种操作:插入一个字符删除一个字符替换一个字符示例 1:输入: word1 = “horse”, word2 = “ros”输出: 3解释:horse -> rorse (将 ‘h’ 替换为 ‘r’)rorse -> rose (删除 ‘...

2020-02-12 15:35:56

floy应用-leetcode1334阈值距离内邻居最少的城市

注意,连接城市 i 和 j 的路径的距离等于沿该路径的所有边的权重之和。示例 1:输入:n = 4, edges = [[0,1,3],[1,2,1],[1,3,4],[2,3,1]], distanceThreshold = 4输出:3解释:城市分布图如上。每个城市阈值距离 distanceThreshold = 4 内的邻居城市分别是:城市 0 -> [城市 1, ...

2020-02-10 13:20:48

查看更多

勋章 我的勋章
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 1024勋章
    1024勋章
    #1024程序员节#活动勋章,当日发布原创博客即可获得
  • 勤写标兵Lv4
    勤写标兵Lv4
    授予每个自然周发布9篇以上(包括9篇)原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。
  • 学习力
    学习力
    《原力计划【第二季】》第一期主题勋章 ,第一期活动已经结束啦,小伙伴们可以去参加第二期打卡挑战活动获取更多勋章哦。