考研词汇800句 - Part 2 800 句(第五天) The loser closely enclosed himself in the closet.
失败者将自己严密 地装入壁橱(储藏间)中。 The composer was proposed to decompose his composition into components.
大家建议作曲家(作家)将自己的作品分解为多个部分 Suppose you were exposed in the opposite position by your opponent, …
假设你的对手把你暴露于对立(对等 相反)的位置上 The depositor positively positioned the preposition in that position on purpose.
存款人断然地将介词故意放置到那个位置上 In church the nurse cursed the people pursuing the purple purse.
在教堂内,护士诅咒大家追赶(追踪 追求)那个紫色钱包 The faculty for agricultural culture isn’t difficult to cultivate.
考研词汇800句 - Part 3 800 句(第九天) The beloved novelist put her lovely gloves above the stove.
敬爱的小说家把她美丽的手套放在火炉上方。 It’s proved that the approver improved waterproof roof.
经证实 赞同者改善了防水屋顶 In the reaction, the fraction acts as an agent.
在反应中 这些碎片起一种媒剂的作用 Actually the actor and actress reacted actively to the activity.
实际上男演员和女演员对这个活动作出了积极的反应。 In the racial horse race, the white racer’s race horse won.
在种族赛马运动中 白人赛手的马获胜 I feel a trace of disgrace for the gracious man’s embracing her bracelet.
考研词汇800句 - Part 4 800 句(第十三天) Last summer the drummer became an amateur dramatist dramatically.
去年夏天 鼓手戏剧性地变成了业余剧作家 Long Tongue League’s colleagues are fatigued with cataloguing.
长舌联合会的同僚们编目录编累了。 The bottle is hidden in the bottom of a ton of cotton the cottage.
瓶子被藏在农舍里一吨棉花的底部 The pattern of the battery doesn’t matter to the battle against the little brittle cattle.
电池的式样对与脆小牛作战无关要紧。 By the biography, the biologist’s playing the violet violin violently violated rules.
据传记记载,生物学家猛奏紫罗兰色的小提琴违犯了规矩 In the faithful waiter’s waist exists a list of the ten listeners.
分治法 分治法概念 将一个难以直接解决的大问题,分割成一些规模较小的相同问题,以便各个击破,分而治之。
分治法思想策略 对于一个规模为n的问题,若该问题可以容易地解决(比如说规模n较小)则直接解决,否则将其分解为k个规模较小的子问题,这些子问题互相独立且与原问题形式相同,递归地解这些子问题,然后将各子问题的解合并得到原问题的解。
分治法特征 该问题的规模缩小到一定的程度就可以容易地解决 该问题可以分解为若干个规模较小的相同问题,即该问题具有最优子结构性质。 利用该问题分解出的子问题的解可以合并为该问题的解; 该问题所分解出的各个子问题是相互独立的,即子问题之间不包含公共的子子问题。 第一条特征是绝大多数问题都可以满足的,因为问题的计算复杂性一般是随着问题规模的增加而增加;
第二条特征是应用分治法的前提它也是大多数问题可以满足的,此特征反映了递归思想的应用;
第三条特征是关键,能否利用分治法完全取决于问题是否具有第三条特征,如果具备了第一条和第二条特征,而不具备第三条特征,则可以考虑用贪心法或动态规划法。
第四条特征涉及到分治法的效率,如果各子问题是不独立的则分治法要做许多不必要的工作,重复地解公共的子问题,此时虽然可用分治法,但一般用动态规划法较好。
分治法基本步骤 1 分解:将原问题分解为若干个规模较小,相互独立,与原问题形式相同的子问题;
2 解决:若子问题规模较小而容易被解决则直接解,否则递归地解各个子问题
3 合并:将各个子问题的解合并为原问题的解。
适用分治法求解的经典问题 1)二分搜索 2)大整数乘法 3)Strassen矩阵乘法 4)棋盘覆盖 5)合并排序 6)快速排序 7)线性时间选择 8)最接近点对问题 9)循环赛日程表 10)汉诺塔 动态规划 动态规划概念 每次决策依赖于当前状态,又随即引起状态的转移。一个决策序列就是在变化的状态中产生出来的,所以,这种多阶段最优化决策解决问题的过程就称为动态规划。
动态规划思想策略 将待求解的问题分解为若干个子问题(阶段),按顺序求解子阶段,前一子问题的解,为后一子问题的求解提供了有用的信息。
在求解任一子问题时,列出各种可能的局部解,通过决策保留那些有可能达到最优的局部解,丢弃其他局部解。依次解决各子问题,最后一个子问题就是初始问题的解。
动态规划特征 能采用动态规划求解的问题的一般要具有3个性质:
(1) 最优化原理:如果问题的最优解所包含的子问题的解也是最优的,就称该问题具有最优子结构,即满足最优化原理。
(2) 无后效性:即某阶段状态一旦确定,就不受这个状态以后决策的影响。也就是说,某状态以后的过程不会影响以前的状态,只与当前状态有关。
(3) 有重叠子问题:即子问题之间是不独立的,一个子问题在下一阶段决策中可能被多次使用到。(该性质并不是动态规划适用的必要条件,但是如果没有这条性质,动态规划算法同其他算法相比就不具备优势)
动态规划基本步骤 (1)分析最优解的性质,并刻画其结构特征。
(2)递归的定义最优解。
(3)以自底向上或自顶向下的记忆化方式(备忘录法)计算出最优值
(4)根据计算最优值时得到的信息,构造问题的最优解
适用动态规划求解的经典问题 矩阵连乘, 走金字塔 最长公共子序列(LCS) , 最长递增子序列(LIS) , 凸多边形最优三角剖分 , 背包问题 , 双调欧几里得旅行商问题 贪心法 贪心法概念 在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的仅是在某种意义上的局部最优解。
应用场景 单体架构 好处 容易理解、开发、测试 容易部署 合适小范围项目 不足 紧密耦合 容易产生复杂代码 所有子域都一刀切 N-tier Summary 多层次 层适合特殊的任务 层可以在物理上分离 技术层并不是逻辑上的层 技术边界分层 Typical: 3层架构 显示层(UI & 单纯的UI逻辑) 逻辑层(业务逻辑) 数据层 Advantages 开发独立 易扩展 Disadvantages 改动会影响各个层级 Service-Oriented Summary 多服务 每个服务都是一个业务活动 服务可以组合 协议统一标准 企业服务总线 Advantages 服务是松散耦合的 可扩展性好 没有功能重复 Disadvantages 降低敏捷性和团队自主性 费用比较高 会有许多不同的观点 Microservices Summary 多服务 每个服务都是一个业务活动 以团队形式提供服务 没有重逻辑的企业总线 自动化最大化 Advantages 服务是松散耦合的,易于扩展 灵活性高 可靠性高 设计了故障处理机制 Disadvantages 边界并不总是清晰的 交互可能会变得很复杂 Serverless Summary Backend as a service Function as a service peer-to-peer Summary 去中心化 没有固定的连接 动态发现的 Advantages 分享资源 节约成本 可缩放 Disadvantages 可能存在安全问题 只适用于特殊场景 代码比较重 应用程序架构模式 分层 Summary 显示层(UI) 应用层(Translation between UI & busniess) 业务层(Business logic) 持久层(Code to interact with the database) 数据层(Data) Advantages 开发之间容易理解 容易组织代码 Disadvantages 可能导致单体应用 需要撰写大量代码 Microkernel Summary 执行任务 工作流 数据处理 浏览界面 图形设计 Advantages 灵活 边界清晰 容易分组 运行过程中容易添加和删除功能 Disadvantages 核心 API 不一定适应未来的插件 插件可以被信任吗 并不总是清楚什么是属于核心代码 CQRS Summary 命令查询责任分离 2 模式: 读/查询 & 写/命令 允许特定场景查询 有同步要求 与事件源模式不同 Advantages 容易查询 更快、更可扩展的读取查询 更容易对接 Disadvantages 添加数据比较复杂 有学习曲线 可能数据不一致 最终一致性 Event sourcing Summary 存储事件而不是当前状态 Event = 发生在过去的事情 Rehydration or replay Advantages 跟踪事件 数据轨迹 业务语言 事件重演 Disadvantages 重演事件 和 外部系统 事件结构的变化 快照 CQRS and Event sourcing combined Summary 2个不同的概念 强强联合 它不适用于简单的域,您可以从事件溯源开始,然后再添加 CQRS。 Advantages 简单快速查询 可扩展的 事件跟踪 数据轨迹 商业语言 Disadvantages 增加复杂度 学习曲线 数据不一致 事件结构变化 UI Patterns MVC Summary Controller Model View Advantages 关注点分离 并行开发 流行的框架 Disadvantages 控制器可能会变得臃肿 不同的定义 MVP Summary View Presenter Model Advantages 对桌面开发友好 关注点分离 测试性好 Disadvantages Presenter层变得臃肿 桌面开发不流行 MVVM Pattern MVVM Summary View ViewModel Model Advantages 现代桌面和移动开发友好 关注点分离 测试性好 Disadvantages UI过度 难以调试 桌面开发不流行
设计模式六大原则 单一职责原则 Single Responsibility Principle
一个类只负责一个功能领域中的相应职责,或者就一个类而言,应该只有一个引起它变化的原因。
开放封闭原则 Open-Close Priciple
一个软件实体应当对扩展开放,对修改封闭。软件实体应该尽量在不修改原有代码的情况下进行扩展。
里氏替换原则 Liskove Substitution Principe
所有引用基类的地方必须能透明的使用其子类的对象。(在软件中将一个基类对象替换成它的子类对象,程序将不会产生任何错误和异常,反过来则不成立,如果一个软件实体使用的是一个子类对象的话,那么它不一定能够使用基类对象。例如:我喜欢动物,那我一定喜欢狗,因为狗是动物的子类;但是我喜欢狗,不能据此断定我喜欢动物,因为我并不喜欢老鼠,虽然它也是动物)
依赖倒置原则 Dependency Inversion Principle
抽象不应该依赖于细节,细节应该依赖于抽象,要针对接口编程,而不是针对实现编程。(依赖注入(DependencyInjection, DI)的方式注入到其他对象中,依赖注入是指当一个对象要与其他对象发生依赖关系时,通过抽象来注入所依赖的对象。常用的注入方式有三种,分别是:构造注入,设值注入(Setter注入)和接口注入。构造注入是指通过构造函数来传入具体类的对象,设值注入是指通过Setter方法来传入具体类的对象,而接口注入是指通过在接口中声明的业务方法来传入具体类的对象。这些方法在定义时使用的是抽象类型,在运行时再传入具体类型的对象,由子类对象来覆盖父类对象)
接口隔离原则 Interface Segregation Principle
使用多个专用接口,而不是使用单一的总接口,客户端不应该依赖于那些它不需要的接口。
迪米特法则 Law of Demeter
一个软件实体应当尽可能少的与其他实体发生互相作用(高内聚,低耦合)。
为什么要多用组合,少用继承 变化部分取出并封装起来,便于以后扩展,而不影响其他部分。要针对接口编程而不是针对实现编程。
一句话常用设计模式 Iterator——迭代器 Adapter(适配器)————换个包装再度利用 ◎ 万事交给子类:
Template Method(模板方法)————实际处理就交给子类 Factory Method(工厂方法)————建立对象实例交给子类 ◎建立对象实例
Singleton(单件)————唯一的对象实例 Prototype(原型)————复制建立对象实例 Builder(生成器)————组合复杂的对象实例 Abstract Factory(抽象工厂)————把相关零件组合成产品 ◎切割性思考
Bridge(桥接)————分成功能层次和实现层次 Strategy(策略)————把算法整个换掉 ◎一视同仁