设计模式

设计模式-装饰模式

我与影子孤独终老i 提交于 2021-01-01 03:03:21
public class Person { public Person() { } private string name; public Person(string _name) { this.name = _name; } public virtual void show() { Console.WriteLine(string.Format("{0}开始show",name)); } } public class Fushi:Person { protected Person person; public void daban(Person _person) { this.person = _person; } public override void show() { if (person != null) { person.show(); } } } public class xizhuang : Fushi { public override void show() { Console.WriteLine("穿了西装"); base.show(); } } public class xiku : Fushi { public override void show() { Console.WriteLine("穿了西裤"); base.show(); } } public

设计模式-观察者模式

旧巷老猫 提交于 2021-01-01 03:02:54
//主题 interface Subject { void Notify(); string msg { get; set; } UpdateHandler Update { get; set; } } delegate void UpdateHandler(); class ChildSubject : Subject { public UpdateHandler Update { get; set; } public string msg { get; set; } public void Notify() { Update(); } } //观察者 abstract class Observer { public string name; public Subject subject; public Observer(string _name, Subject _subject) { name = _name; subject = _subject; } } class Site: Observer { public Site(string _name, Subject _subject) : base(_name, _subject) { } public void RefreshSite() { Console.WriteLine("{0},{1}需要同步更新",

领域驱动设计,让程序员心中有码(七)

房东的猫 提交于 2020-12-31 05:01:38
题图 from unsplash 前言 多年来,笔者一直从事传统软件企业的软件开发和项目管理工作。笔者发现在众多的传统软件企业中,评判优秀开发者的标准往往是技能的熟练程度,基本上都是以梭代码的速度论英雄。有人评价说,这种开发可以称之为cv编程,即ctrl+c和ctrl+v编程为主。这种开发往往对开发者的技能要求并没有想象中的那么高,由于工时和合同的限制,不得不压缩开发时间,通过靠密集的劳动力资源、较高的工作强度来完成项目的开发。这种模式,通过简单的复用历史代码,可以更快的输出结果,对于中小型企业和一些外包企业来说,也意味着更快的项目完成速度、而越快做完项目,也意味着可以越快收回合同款,尽快开始下一个项目。 然而,也必须承认,在这种模式下,代码的质量取决于项目管理者对于技术和代码的把握能力,如果摊上不懂技术的项目管理者以及对于代码质量没有要求的研发人员,可能最终输出的代码,将成为一团乱麻,只能在一个个项目中无穷次的积累,直到遇到一群优秀的开发人员费劲心力把体系重构为止。 而当今互联网时代下,面向互联网的应用开发,不再追求短期成效,更在乎长期技术的沉淀,这个过程中,也对开发者提出了更高的要求。互联网行业的开发者,不仅仅要求代码梭得快,还在乎编写代码编写的质量,谁能编写出更加优美的代码,往往也更容易受人欢迎。于是

深入java并发包源码(二)AQS的介绍与使用

↘锁芯ラ 提交于 2020-12-31 04:36:38
深入java并发包源码(一)简介 深入java并发包源码(二)AQS的介绍与使用 深入java并发包源码(三)AQS独占方法源码分析 AQS 本文章会讲解 AQS 的使用方法,然后通过 DEBUG 跟踪 AQS 执行的一系列操作来分析源码,读者跟着文章 DEBUG 跟踪源码能更容易理解。 AQS 是什么? AbstractQueuedSynchronizer 队列同步器(AQS)是一个抽象类,作为并发工具的基础组件,为真正的实现类提供基础设施。并发工具是面向使用者的,AQS 面向的是并发工具的实现者。 ##AQS 的使用 AQS 有什么用? AQS 提供了如构建同步队列,控制同步状态等方法,从设计模式角度来看,它采用了模板模式。它的主要使用方式是继承这个抽象类然后重写部分方法来实现自定义同步工具。 我们可以看到上面这些锁都是通过 AQS 实现的。 拿 ReentrantLock 来举例,它有一个内部类 Sync 继承了 AQS,并且重写了一些方法。然后将内部类的方法导出来给使用者使用。 讲的再多也不如自己动手实现一个并发工具理解的深刻,我们先介绍一下 AQS 的 API 然后用这些 API 来实现一个自定义的锁来理解它的使用方法。 AQS 分为可以重写的方法和不可以重写的方法,需要根据自己的需求去实现方法。 可以重写的方法: 方法名 功能 tryAcquire(int arg)

【奇淫巧技】Java动态代理(JDK和cglib)

时光怂恿深爱的人放手 提交于 2020-12-30 14:29:17
JAVA的动态代理 代理模式 代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类,以及事后处理消息等。 代理类与委托类之间通常会存在关联关系,一个代理类的对象与一个委托类的对象关联,代理类的对象本身并不真正实现服务,而是通过调用委托类的对象的相关方法,来提供特定的服务。 按照代理的创建时期,代理类可以分为两种。 静态代理:由程序员创建或特定工具自动生成源代码,再对其编译。在程序运行前,代理类的.class文件就已经存在了。 动态代理:在程序运行时,运用反射机制动态创建而成。 首先看一下静态代理: 1、Count.java package net.battier.dao; /** * 定义一个账户接口 * * @author Administrator * */ public interface Count { // 查看账户方法 public void queryCount(); // 修改账户方法 public void updateCount(); } 2、CountImpl.java package net.battier.dao.impl; import net.battier.dao.Count; /** * 委托类(包含业务逻辑) * * @author Administrator *

学生管理系统,python+sql server

筅森魡賤 提交于 2020-12-30 10:50:59
学生管理系统,python+sql server 要求  需求语义(仅仅是需求,不是最终设计结果) 今要建立关于系、学生、班级、学会等诸信息的一个关系数据库。一个系有若干专业,每个专业每年只招一个班,每个班有若干学生。一个系的学生住在同一宿舍区。每个学生可参加若干学会,每个学会有若干学生。学生参加某学会有一个入会年份。描述各个实体的属性(加下划线者为实体标识符)如下: 学生:学号、姓名、年龄、系名、班号、宿舍区。 班级:班号、专业名、入校年份、系名、人数。 系 :系号、系名、系办公室地点、人数。 学会:学会号、学会名、成立年份、地点。  模式设计 画出E-R图。 把E-R图转为关系模式。 根据关系模式创建数据库。表名和属性名用英文,属性的数据类型根据上面的描述自己定义。  后端设计 创建一个视图,能显示每个学会的学会名,学生数(实际不存在,也不能增加)。 创建一个触发器,能根据每个班的学生变动情况自动增减班级表和系表的人数字段的值。 创建一个函数(或存储过程),实现如下功能:给定一个班的旧班号和新班号,把所有相关表中此班的旧班号改为新班号,并返回此班的人数。 创建一个存储过程,使用游标完成如下功能:确定系表中人数字段的值与实际学生数是否相符。如果不相符,把人数字段的值改为实际数,并返回此系的系号、系名、原人数、实际人数。  前端设计 实现对基本表的增删改查操作,实现对4

python里的反射(自学习)

穿精又带淫゛_ 提交于 2020-12-30 04:25:26
在做程序开发中,我们常常会遇到这样的需求:需要执行对象里的某个方法,或需要调用对象中的某个变量,但是由于种种原因我们无法确定这个方法或变量是否存在,这是我们需要用一个特殊的方法或机制要访问和操作这个未知的方法或变量,这中机制就称之为反射。接下记录下反射几个重要方法: hasattr 判断对象中是否有这个方法或变量 class Person (object): def __init__ (self,name): self.name = name def talk (self): print( "%s正在交谈"%self.name) p = Person( "laowang") print(hasattr(p, "talk")) # True。因为存在talk方法 print(hasattr(p, "name")) # True。因为存在name变量 print(hasattr(p, "abc")) # False。因为不存在abc方法或变量 1 2 3 4 5 6 7 8 9 10 getattr 获取对象中的方法或变量的内存地址 class Person( object): def __init_ _( self,name) : self.name = name def talk( self) : print( "%s正在交谈"% self.name) p = Person(

做数据建模有哪些工具是值得推荐的?

最后都变了- 提交于 2020-12-29 20:57:07
数据建模是一个用于定义和分析在组织的信息系统的范围内支持商业流程所需的数据要求的过程。因此,数据建模的过程需要专业建模师与商业人员和信息系统潜在用户的紧密合作。那么数据建模都有哪些工具呢?小编今天给大家准备了6款,一起来看看吧! 1、MapBusiness Online 人们可能没有考虑过的一种数据建模工具是MapBusiness。但是,创建销售或竞争对手区域图可以提供有助于企业发展的信息。企业甚至可以创建销售地区地图,以降低成本。提高销售代理商的生产率。并且发现其所在行业尚未开发的新市场。 2、Vertabelo Vertabelo是一个功能很强大的数据库设计建模工具,能够使用可视化建模,而不是在数据库中人工创建表格。该软件还适用于逆向工程模型。如果已有数据库,则可以使用该工具调整已构建元素的组织。 3、DbSchema DbSchema是一个适用于SQL和非SQL数据库的工具,这个数据库建模工具的一些好处包括交互布局、同步模式的能力、部署来自多个表的数据以及在不连接数据库的情况下设计模式。它可以轻松地从Excel文件上载数据,从而为企业提供了更多的机会来导入可能不在云平台中的原有数据表。该工具具有集成管理数据库所需的一切的能力,而无需购买其他软件。 4、HeidiSQL HeidiSQL是一个免费的数据建模工具,提供很多功能,例如能够在一个窗口中与多台服务器连接

阿里2019实习内推,五轮技术面+一轮HR面,Java岗面经

▼魔方 西西 提交于 2020-12-29 17:18:19
在牛客网上获取到很多知识和信息,现在反馈一波,希望能对广大找实习的同学有所帮助。 个人情况:EE方向渣硕,二月末内推了阿里集团某部门Java岗,约三周完成了所有面试。 面经如下: 一面 (简历评估): 1、自我介绍 2、TCP与UDP的区别 3、TCP三次握手说一下(把流程说一遍,这里以为会继续问为什么不是两次或者四次,结果没有) 4、看你项目用到线程池,说一下线程池工作原理,任务拒接策略有哪几种 5、进程和线程的区别 6、ArrayList与LinkedList的区别 7、线程安全与非线程安全集合说一下,底层怎么实现的(hashmap,concurrenthashmap) 8、Java内存模型,方法区存什么 9、数据库事务隔离级别说一下 10、synchronized和lock区别,可重入锁与非可重入锁的区别 11、看你的项目用了悲观锁和乐观锁,说一下区别 12、算法题:圆圈中最后剩下的数字 二面 (部门主管): 1、说一下Spring的IOC和AOP,底层什么原理 2、动态代理有几种,Jdk与Cglib区别 3、数据库三大范式 4、左连接和右连接说一下,内连接呢 5、数据库索引有几种 6、数据库引擎你认识几种,innodb 和myisam 区别,你的项目用到哪个引擎 7、若hashcode方法永远返回1会产生什么结果 8、Error与RuntimeException的区别 9

软件体系结构基础

我们两清 提交于 2020-12-29 13:59:10
halo~我是bay_Tong桐小白 本文内容是桐小白个人对所学知识进行的总结和分享,知识点会不定期进行编辑更新和完善,了解最近更新内容可参看更新日志,欢迎各位大神留言、指点 软件体系结构基础 【更新日志】 软件体系结构基本概念 软件体系结构 体系结构的模式、风格、框架 体系结构的重要作用 通用模型 设计模式概述(更新中……) 典型的体系结构风格 数据流风格 调用/返回风格 仓库风格 体系结构框架 模型-视图-控制器(MVC) J2EE体系结构框架(更新中……) PCMEF与PCBMER框架(更新中……) 特定领域的软件体系结构 类属模型 参考模型 分布式系统结构 多处理器体系结构 客户机/服务器体系结构 两层C/S体系结构 三层C/S体系结构 浏览器/服务器(B/S)体系结构 分布式对象体系结构 代理 【更新日志】 最近更新: 暂无编辑记录,持续更新中…… 软件体系结构基本概念 软件体系结构 目前还没有一个公认的关于软件体系结构的定义 Bass、Clements和Kazman给出了如下定义:“一个程序或计算机系统的软件体系结构是指系统的一个或者多个结构。结构中包括软件的构件、构件的外部可见属性以及它们之间的相互关系。外部可见属性则是指软件构件提供的服务、性能、使用特性、错误处理、共享资源使用等。” 【这一定义强调在任一体系结构表述中“ 软件构件 ”的角色】 构件