设计模式

Linux常用命令(二)

怎甘沉沦 提交于 2020-12-13 16:35:32
  本篇为linux常用命令的第二篇,第一篇主要是目录相关的命令操作,本篇主要是讲解关于文件的常用命令操作。   关于文件的命令按照增删改查为主线进行讲解。 一、创建文件 命令: touch + 文件名 创建一个空文件 以在usr文件夹下建立test.txt文件为例。 这里需要注意,在linux中是不分后缀的。我们带后缀只是为了方便他人来进行理解阅读,比如带txt别人一看就知道是一个txt文本文件,带conf,别人一看就知道是一个配置文件。 二、查看文件 查看文件有很多中方式,我们只需要了解一个即可,在项目实际过程中,使用连接工具进行连接就用不到这些命令了。这里介绍两个常用的。 命令:cat + 文件名 这里我们查看etc文件夹下的sudo.conf,显示的为当前文件最后一屏的内容。 命令:tail -行数 +文件名 例如 tail -10 sudo.conf ,可以查看文件的后十行,其中的数字可变。 tail -f +文件名,可以动态的去监控文件,文件内容发生变化,这里会进行显示。 三、修改文件 命令: vim +文件名 第一步,我们以编辑刚才创建的test.txt为例。 vim test.txt 第二步:发现界面变成如下所示 这时输入是不好使的。因为我们还未进入编辑模式。 第三步:输入i进入编辑模式,可进行输入。 第四步:保存输入的内容,先按esc退出编辑,然后输入:号

Java中SPI机制详解

谁说我不能喝 提交于 2020-12-13 14:03:27
本文转载于 高级开发必须理解的Java中SPI机制 本文通过探析JDK提供的,在开源项目中比较常用的Java SPI机制,希望给大家在实际开发实践、学习开源项目提供参考。 一、 SPI是什么 SPI全称 Service Provider Interface ,是Java提供的一套用来被第三方实现或者扩展的API,它可以用来启用框架扩展和替换组件。 整体机制图如下: Java SPI 实际上是“基于接口的编程+策略模式+配置文件”组合实现的动态加载机制。 系统设计的各个抽象,往往有很多不同的实现方案,在面向的对象的设计里,一般推荐模块之间基于接口编程,模块之间不对实现类进行硬编码。一旦代码里涉及具体的实现类,就违反了可拔插的原则,如果需要替换一种实现,就需要修改代码。为了实现在模块装配的时候能不在程序里动态指明,这就需要一种服务发现机制。 Java SPI就是提供这样的一个机制:为某个接口寻找服务实现的机制。有点类似IOC的思想,就是将装配的控制权移到程序之外,在模块化设计中这个机制尤其重要。所以SPI的核心思想就是解耦。 二、使用场景 概括地说,适用于:调用者根据实际使用需要,启用、扩展、或者替换框架的实现策略。 比较常见的例子: 数据库驱动加载接口实现类的加载 JDBC加载不同类型数据库的驱动 日志门面接口实现类加载 SLF4J加载不同提供商的日志实现类 Spring

【JS】395-重温基础:事件

空扰寡人 提交于 2020-12-13 10:43:16
本文是 重温基础 系列文章的第二十篇。 这是第三个基础系列的第一篇,欢迎持续关注呀! 重温基础 系列的【初级】和【中级】的文章,已经统一整理到我的【Cute-JavaScript】(http://js.pingan8787.com)的JavaScript基础系列中。 今日感受:电影有时候看的是缘分。 本章节复习的是JS中的事件,事件冒泡捕获代理模拟等等。 前置知识: JavaScript与HTML的交互式通过 事件 来实现的,是文档或浏览器窗口中发生的一些特定的交互瞬间。 1.事件流 事件流描述的是从页面中接收事件的顺序,通常有这样两种完全相反的事件流概念: 事件冒泡流 (IE团队提出)和 事件捕获流 (网景团队提出)。 1.1 事件冒泡 冒泡事件(Event Bubbling):事件开始时由最具体的元素接收(文档中嵌套层次最深的那个节点),然后逐层向上传播到较为不具体的节点(文档),看下示例代码: <!DOCTYPE html> <html> <head> <title> leo 事件冒泡 </title> </head> <body> <div id = "leo" > 点击 </div> </body> </html> 点击页面中 <div> 元素,这个 click 事件就会按照下面顺序传播: <div> <body> <html> document 由此可见

译文丨10种常见的软件架构模式

五迷三道 提交于 2020-12-13 08:36:36
本文译自https://towardsdatascience.com/10-common-software-architectural-patterns-in-a-nutshell-a0b47a1e9013?gi=f8addb915af7,作者Vijini Mallawaarachchi,Sep 4, 2017 译者:evandeng2009(blog.csdn.net/evandeng2009/) 为了更好的组织语言和理解,符合我们的阅读习惯,原文的部分段落被合并或者分割。为体现完整性,不删减文字,保持原文文字内容。翻译纯属个人喜爱、分享和收藏。 正文 是否想知道大型企业级系统是怎么设计的?在软件主体开发之前,我们必须选择一个合适的架构来提供所需的功能和质量特征。所以在应用于设计之前,我们应该了解不同的架构。 什么是架构模式 维基百科:架构模式是在给定上下文的软件架构中,针对常发生问题的一种通用、复用的解决方案。架构模式类似于软件设计模式,但是范畴更广。 本文中,我将简要的阐述如下10中常见架构模式的应用和优缺点。 分层模式 客户端-服务端模式 主从模式 管道-过滤器模式 代理模式 点对点模式 事件总线模式 模型-视图-控制器模式 黑板模式 解释器模式 1. 分层模式 该模式用于构建可分解为多组子任务的程序,每个子任务都在某个抽象层,每个层对上一个更高层提供服务

Yii2设计模式——设计模式简介

ぃ、小莉子 提交于 2020-12-13 06:40:28
我们首先来思考一个问题:作为工程师,我们的价值是什么? 笔者认为是—— 解决用户问题 。 我们的任何知识和技能,如果不能解决特定的问题,那么就是无用的屠龙之术;我们的任何经验,如果不能对解决新的问题有用,那这经验就是过时的。工程师不是空谈者,也不是理论家,再好的理论,再好的设计,不能落地变成产品,不能解客户燃眉之急,那终究也是水中月镜中花,迟早要被淘汰。能解决现实中的问题才能体现作为工程师的价值。 但是,所有现实中的问题,都不是抽象的,比如我们不会提出一个“人是什么”“什么是善”这样的问题。我们要解决的问题,一定是特定场景下,加了一堆定语和描述,十分场景化的。比如:如何降低模块之间代码耦合度,如何解决高并发中的c100k问题,如何提高工程代码的可维护性等等。那么,针对这些特定的问题,早就经前人踩坑,总结出来的被认为行之有效的方式,就慢慢的沉淀为一种被称为“模式”的东西。从这个角度来说,算法是模式,设计模式是模式,架构也是模式——不同层面的解决方案而已。 每个模式都描述了一个在我们的环境中不断出现的问题,然后描述了该问题的解决方案的核心,通过这种方式,我们可以无数次地重用那些已有的解决方案,无需再重复相同的工作。 简单地说,模式就是在特定问题场景下,解决特定问题的固定的套路 。 设计模式简介 软件行业的设计模式,起源于1994年由GOF合著的《设计模式 - 可复用的面向对象软件元素

Yii2设计模式——工厂方法模式

心已入冬 提交于 2020-12-13 04:58:43
应用举例 yii\db\Schema抽象类中: //获取数据表元数据 public function getTableSchema($name, $refresh = false) { if (array_key_exists($name, $this->_tables) && !$refresh) { return $this->_tables[$name]; } $db = $this->db; $realName = $this->getRawTableName($name); if ($db->enableSchemaCache && !in_array($name, $db->schemaCacheExclude, true)) { /* @var $cache Cache */ $cache = is_string($db->schemaCache) ? Yii::$app->get($db->schemaCache, false) : $db->schemaCache; if ($cache instanceof Cache) { $key = $this->getCacheKey($name); if ($refresh || ($table = $cache->get($key)) === false) { //通过工厂方法loadTableSchema(

20172304 实验二 《Java面向对象程序设计》 实验报告

三世轮回 提交于 2020-12-13 04:15:21
#20172304 实验二 《Java面向对象程序设计》 实验报告 课程名称:《程序设计与数据结构》 学生班级:1723班 学生姓名:段志轩 学生学号:20172304 实验时间:2018年4月18日 实验名称:《Java面向对象程序设计》 指导老师:王志强老师 ## 代码链接 ##实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装、继承、多态 初步掌握UML建模 熟悉S.O.L.I.D原则 了解设计模式 完成蓝墨云上 (1)-(5)实验。 ##实验要求 完成实验二《Java面向对象程序设计》中的内容。 其中Eclipse相关的内容参考Intellj IDEA 简易教程换成IDEA实现。 ##实验考核规则 每次实验考核3分 不按要求提交实验过程截图会扣一分(本周五次,只要有一个不合格就会扣分) 实验报告认真写的会加1分(主要是遇到的问题和解决过程) ##实验流程 软件准备: IEDA starUML 实验内容: 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装、继承、多态 初步掌握UML建模 熟悉S.O.L.I.D原则 了解设计模式 ##实验具体内容 实验一:创建Myunit类,并对Myunit类进行测试实现边界检查。 实验二:学习StringBuffer类并进行测试。、 实验三:让系统支持long型,并添加测试代码。 实验四:设计Complex类(复数类)

为了忽悠大厂面试官,熬夜总结了这些Spring面试题!

北战南征 提交于 2020-12-12 23:47:08
前言 如果说 Java 工程师,有什么一定要“死磕”拿下的东西,那一定是 Spring 无疑了。众所周知,Spring 无论在 Java 生态系统,还是在就业市场, Spring Boot、Spring Framework、Spring Data、Spring Cloud、Spring Security、Spring Session等都是Spring Framework 的基石,面试出镜率之高,无出其右。 先分享一个Spring知识点思维导图给大家 1.说说Spring 里用到了哪些设计模式? 单例模式:Spring 中的 Bean 默认情况下都是单例的。无需多说。 工厂模式:工厂模式主要是通过 BeanFactory 和 ApplicationContext 来生产 Bean 对象。 代理模式:最常见的 AOP 的实现方式就是通过代理来实现,Spring主要是使用 JDK 动态代理和 CGLIB 代理。 模板方法模式:主要是一些对数据库操作的类用到,比如 JdbcTemplate、JpaTemplate,因为查询数据库的建立连接、执行查询、关闭连接几个过程,非常适用于模板方法。 2.谈谈你对IOC 和 AOP 的理解?他们的实现原理是什么? IOC 叫做控制反转,指的是通过Spring来管理对象的创建、配置和生命周期,这样相当于把控制权交给了Spring

资源池模式和单例模式实现的自定义数据库连接池java实现版

自古美人都是妖i 提交于 2020-12-12 22:42:02
在企业级开发中,我们往往不会直接使用原生的JDBC操作来实现与数据库得连接。因为数据库的连接是一个很宝贵的资源且耗时,我们往往会在内存中引入一个资源池来统一管理数据库的连接。这个模式也被总结为一种设计模式:资源池模式和单例模式。 关于原理部分就不多做介绍了,这里也是做一个简单的原理实现。 ObjectPool连接池接口 package com.test.pool; import java.util.Enumeration; import java.util.Hashtable; import java.util.concurrent.ConcurrentHashMap; public abstract class ObjectPool<T> { private long expirationTime; private Hashtable<T, Long> locked, unlocked; public ObjectPool() { expirationTime = 30000; // 30 seconds locked = new Hashtable<T, Long>(); unlocked = new Hashtable<T, Long>(); } protected abstract T create(); public abstract boolean validate(T

5分钟搞定表单校验

折月煮酒 提交于 2020-12-12 21:43:53
来源:https://segmentfault.com/a/1190000023955401 作者:王亮hengg 浅谈 JavaScript 中策略模式的使用: 什么是设计模式 什么是策略模式 策略模式在 JavaScript 中的应用(使用策略模式封装百度AI识别调用) 策略模式在 Vue 组件封装中的应用(使用策略模式封装Select组件) 什么是设计模式 我们在写代码的时候,一定也遇到过许多类似的场景。 随着经验的增加,我们对于这些常见场景的处理越来越得心应手,甚至总结出了针对性的“套路”,下次遇到此类问题直接运用“套路”解决,省心又省力。 这些在软件开发过程中逐渐积累下来的“套路”就是设计模式。 ——《 设计模式沉思录 ,John Vlissides, 第一章 1.2节 》 设计模式的目标之一就是提高代码的可复用性、可扩展性和可维护性。正因如此,虽然有时候我们不知道某个设计模式,但是看了相关书籍或文章后会有一种“啊,原来这就是设计模式”的恍然大明白。 如果你看完这篇文章后也有此感觉,那么恭喜你,你已经在高效程序员的道路上一路狂奔了。 什么是策略模式 策略模式是一种简单却常用的设计模式,它的应用场景非常广泛。我们先了解下策略模式的概念,再通过代码示例来更清晰地认识它。 策略模式由 两部分 构成:一部分是封装不同策略的策略组,另一部分是 Context 。通过组合和委托来让