关系逻辑

java常用设计模式

空扰寡人 提交于 2020-02-13 21:15:10
设计模式; 一个程序员对设计模式的理解: “不懂”为什么要把 很简单的东西搞得那么复杂 。后来随着软件开发经验的增加才开始明白我所看到的“复杂”恰恰就是设计模式的精髓所在, 我所理解的 “简单”就是一把钥匙开一把锁的模式,目的仅仅是着眼于解决现在的问题,而设计模式的“复杂”就在于它是要构造一个“万能钥匙”,目的是提出一种对所有锁的开锁方案。 在真正理解设计模式之前我一直在编写“简单”的代码. 这个 “简单”不是功能的简单,而是设计的简单。 简单的设计意味着缺少灵活性,代码很钢硬,只在这个项目里有用,拿到其它的项目中就是垃圾,我将其称之为 “一次性代码”。 -->要使代码可被反复使用,请用'设计模式'对你的代码进行设计. 很多我所认识的程序员在接触到设计模式之后,都有一种相见恨晚的感觉,有人形容学习了设计模式之后感觉自己好像已经脱胎换骨,达到了新的境界, 还有人甚至把是否了解设计模式作为程序员划分水平的标准。 我们也不能陷入模式的陷阱,为了使用模式而去套模式,那样会陷入形式主义。我们在使用模式的时候,一定要注意模式的意图(intent),而不 要过多的去关注模式的实现细节,因为这些实现细节在特定情况下,可能会发生一些改变。不要顽固地认为设计模式一书中的类图或实现代码就代表了模式本身。 设计原则:( 重要 ) 1. 逻辑代码独立到单独的方法中,注重封装性--易读,易复用。

Spring

情到浓时终转凉″ 提交于 2020-02-13 08:21:58
一、Spring是什么? Spring是一个开源的轻量级的Java开发框架。 二、Spring有什么作用? 简化应用程序的开发。 三、简化应用程序开发体现在哪些方面? ①IOC容器 Java思想是面向对象的开发,一个应用程序是由一组对象通过相互协作开发出的业务逻辑组成,那么如何管理这些对象,使他们高效地协作呢?抽象工厂、工厂方法设计模式”可以帮我们创建对象,“生成器模式”帮我们处理对象间的依赖关系,不也能完成这些功能吗?可是这些又需要我们创建另一些工厂类、生成器类,我们又要而外管理这些类,增加了我们的负担。所以用另外的方式,如果对象需要的时候,就自动地生成对象,不用再去创建。举个例子:原来我们饿了,就出去吃饭,但是现在有了外卖之后,就可以订餐了,我们可以把我们的需求告诉美团,让他们给我们送饭。这里主导关系发生了变化,原来是我们自己,但是现在是美团。 Spring提出了一种思想:就是由spring来负责控制对象的生命周期和对象间的关系。所有的类都会在spring容器中登记,告诉spring你是个什么东西,你需要什么东西,然后spring会在系统运行到适当的时候,把你要的东西主动给你,同时也把你交给其他需要你的东西。所有的类的创建、销毁都由 spring来控制,也就是说控制对象生存周期的不再是引用它的对象,而是spring。对于某个具体的对象而言,以前是它控制其他对象

JMeter元件的作用域与执行顺序

我的未来我决定 提交于 2020-02-13 07:20:30
元件的作用域 先来讨论一下元件有作用域。《 JMeter基础元件介绍 》一节中,我们介绍了8类可被执行的元件(测试计划与线程组不属于元件),这些元件中,取样器 是典型的不与其它元件发生交互作用的元件,逻辑控制器 只对其子节点的取样器有效,而其它元件(config elements 、timers 、post-processors、assertions、listeners)需要与取样器(sampler)等元件交互。 配置元件(config elements) 元件会影响其作用范围内的所有元件。 前置处理程序(Per-processors) 元件在其作用范围内的每一个sampler元件之前执行。 定时器(timers ) 元件对其作用范围内的每一个sampler有效。 后置处理程序(Post-processors) 元件在其作用范围内的每一个sampler元件之后执行。 断言(Assertions) 元件对其作用范围内的每一个sampler元件执行后的结果执行校验。 监听器(Listeners) 元件收集其作用范围的每一个sampler元件的信息并呈现。 在JMeter中,元件的作用域是靠测试计划的的树型结构中元件的父子关系来确定的,作用域的原则是: 取样器(sampler)元件不和其它元件相互作用,因此不存在作用域的问题。 逻辑控制器(Logic Controller

基于STM32之UART串口通信协议(一)详解

99封情书 提交于 2020-02-12 02:04:44
UART —— Universal Asynchronous Receiver/Transmitter —— 通用异步收发器。 一、UART简介 UART是异步串口通信协议, 工作原理是将传输数据的每个字符一位接一位地传输,它能将要传输的资料在串行通信与并行通信之间加以转换,能够灵活地与外部设备进行全双工数据交换。 USART是UART的升级版,其支持同步模式,用法与UART相同 二、概念辨析 ------------------------------------UART COM口 串口 USB口 RS - 232 TTL--------------------------------------------- UART,在硬件上表现为串口收发的逻辑电路,可被集成为独立地模块化芯片 COM口,串行通信端口,有时也称为串口,是一种连接器的结构,这里区别于USB的“通用串行总线”和硬盘的“SATA”,串口的接口标准规范和总线标准规范是 RS-232    常见的有两种物理标准,D型9针插头,和4针杜邦头, USB口:通用串行总线,和串口完全是两个概念。虽然也是串行方式通信,但由于USB的通信时序和信号电平都和串口完全不同,因此和串口没有任何关系。USB是高速的通信接口,用于PC连接各种外设,U盘、键鼠、移动硬盘、当然也包括“USB转串口”的模块。(USB转串口模块

推荐系统系列二:推荐系统的工程实现

大憨熊 提交于 2020-02-11 01:38:44
下面内容转自大数据与人工智能微信公众号,由于网络上推荐系统的相关学习资料太多太杂,东拼西凑学习很难摸出门道,同时我也在学习推荐系统,因此我将该系列内容摘录到我的博客,方便大家直接在博客中查看,大家一起学习进步,后面我也会阅读推荐系统相关的论文,并在本博客记录笔记,希望大家一起进步哈。 在我更新第一篇《推荐系统介绍》之后,过了一两天这篇介绍的阅读量就达到了三百多,可见当下存在一个矛盾:大家日益增长的对推荐系统好文章的渴求与真正有含金量的推荐系统学习资料间供应存在着巨大的矛盾,因此我将加快本系列文章的更新,很感谢大数据与人工智能微信公众号,大家如果有额外的需求,可以去该公众号详询原作者,由于博客中不能直接粘贴微信公众号中的图片,本文的图片都是我一张一张手动截图粘贴,整理不易,希望能帮到大家,毕竟好的文章值得我们推广,不应被埋没,好了,话不多说,马上开始。 ===================正文开始=================== 一:写在前面 在上篇文章《推荐系统介绍》中简单对推荐系统做了一个较全面的介绍,相信大家对推荐系统有了初步的了解。本篇文章作者会结合多年推荐系统开发的实践经验粗略介绍推荐系统的工程实现,简要说明要将推荐系统很好地落地到产品中需要考虑哪些问题及相应的思路、策略和建议,其中有大量关于设计哲学的思考,希望对从事推荐算法工作或准备入行推荐系统的读者有所帮助。

异常处理总结

喜欢而已 提交于 2020-02-11 01:00:07
一,异常和错误 part1:程序中难免出现错误,而错误分成两种 1.语法错误(这种错误,根本过不了python解释器的语法检测,必须在程序执行前就改正) #语法错误示范一 if #语法错误示范二 def test: pass #语法错误示范三 print(haha 语法错误 语法错误 2.逻辑错误(逻辑错误) #用户输入不完整(比如输入为空)或者输入非法(输入不是数字) num=input(">>: ") int(num) #无法完成计算 res1=1/0 res2=1+'str' 逻辑错误 part2:什么是异常 异常就是程序运行时发生错误的信号,在python中,错误触发的异常如下 part3:python中的异常种类 在python中不同的异常可以用不同的类型(python中统一了类与类型,类型即类)去标识,不同的类对象标识不同的异常,一个异常标识一种错误 # 触发IndexError l=['egon','aa'] l[3] # 触发KeyError dic={'name':'egon'} dic['age'] #触发ValueError s='hello' int(s) 错误举例 AttributeError 试图访问一个对象没有的树形,比如foo.x,但是foo没有属性x IOError 输入/输出异常;基本上是无法打开文件 ImportError 无法引入模块或包

证券公司交易系统架构演进探析

99封情书 提交于 2020-02-10 12:59:03
转自 https://mp.weixin.qq.com/s/3MMPZfktiaok-c5-3LUPsA 原作者:PKUJohnson 量化嘉 券商作为证券市场的中介机构,承担了为广大投资者提供证券交易通道的市场责任。你知道交易指令是如何传递到交易所并最终成交的吗? 上图是一个典型的券商交易系统逻辑架构,手机App、网上交易等系统称为渠道系统,职责是为投资者提供交易渠道,并对指令做初步的要素检查,最终所有合法交易指令都会发送到集中交易系统进行统一业务逻辑处理。所有处理均完成后,把合法的投资指令发送给交易所竞价系统进行撮合。 集中交易系统在证券经纪业务中处于核心地位,它具有怎样的系统架构,承担了那些业务职能,是如何一步步演进过来的,现在又遇到哪些挑战,未来可能会向那些方向发展?本文从一个技术工程师的角度,尝试做一点剖析和探讨。 一、为何叫集中交易系统? 从名字上看,一定是从分散的交易系统整合而来的,事实上也确实如此。在上世纪90年代证券市场发展初期,证券经纪业务是以营业部为单位开展的,每家营业部都有自己的证券交易系统,单独保存自己的业务数据。粗放的管理模式带来了巨大的业务隐患,出现了诸如修改客户结算数据、挪用客户保证金、伪造客户交易指令等风险事件。2004年左右,整个行业风险经过多年累积,呈现集中爆发的态势,出现了“南方证券”,“德隆系”等一系列重大风险案件

企业应用架构模式笔记

帅比萌擦擦* 提交于 2020-02-10 04:16:55
1      企业应用模式概述   1.1    企业应用的模式   企业应用领域要解决的问题在某些方面要比做一个工具软件、或者一个电信通信软件等复杂的得多,比如纷杂的企业数据,各具特色的业务规则,变化莫测的用户需求。因此企业应用开发技术从CORBA、COM、J2EE、_NET等等,层出不穷,每一种技术的出现,都为企业问题的解决题供了一种思路,一个选择。   既然企业的问题是特定,那么我们就可以把问题进行分类,并把每一类问题的解决方法记录下来,这样,就形成了一套我们解决问题的思路,这就是模式。模式的核心就是特定的解决方案,它有效且有足够的通用性。借用一下Christopher Alexander给出的模式的定义:“每一个模式描述了一个在我们周围不断重复发生的问题以及该问题解决方案的核心。这样,你就能一次又一次地使用该方案而不必做重复劳动”。   模式的关键点是它们来源于实践,他必须观察人们的工作过程,发现其中好的设计,并找出这些解决方案的核心,一旦发现了某个模式,那将是非常有价值的。当然,如果要学习一个模式,只是需要了解这些模式是干什么的、解决了那些问题、是如何解决问题的,就足够了。    企业架构的领域问题有许多,如分层架构、Web表现、业务逻辑、数据库映射、并发、会话、分布策略、异步通信、安全、错误处理、集群、应用集成、架构重构。在此只选择了其中企业级应用程序的分层

操作系统7:内存管理

瘦欲@ 提交于 2020-02-09 23:13:42
内存管理 基本概念 内存管理主要分为连续区管理和非连续区管理 注意汇编语言也需要翻译下 ,但不是编译,因为它基本上就是一对一的翻译了下,比编译任务简单的多 base表示该进程的最小的地址位置,limit表示最大的 由存储管理单元在地址送往地址总线之前进行逻辑地址到物理地址的转换 : 两种方法可以实现运行时不将所有代码装入内存: 动态连接提供系统级的支持,操作系统升级时,动态链接库可以直接升级,不需要重新编译应用程序 存储管理的基本内存就是逻辑地址和物理地址之间的映射 交换 后备存储空间一般是一个单独划出的存储空间,要提供直接访问机制 来源: https://zhidao.baidu.com/question/72920995.html 内存交换(对换)的基本思想是,把处于等待状态(或在 CPU 调度原则下被剥夺运行权利) 的程序从内存移到辅存,把内存空间腾出来,这一过程又叫换出;把准备好竞争 CPU 运行的程序从辅存移到内存,这一过程又称为换入。   有关交换需要注意以下几个问题:   1、交换需要备份存储,通常是快速磁盘。它必须足够大,并且提供对这些内存映像的直接访问。   2、为了有效使用 CPU ,需要每个进程的执行时间比交换时间长,而影响交换时间的主要是转移时间。转移时间与所交换的内存空间成正比。   3、如果换出进程,必须确保该进程是完全处于空闲状态。   4

逻辑判断原则

耗尽温柔 提交于 2020-02-09 07:08:14
判定多个条件时,遵循从左到右,短路原则。 Q:   if ( conditionA && conditionB ) 和 if ( conditionA || conditionB ),是先判断conditionA还是conditionB ?跟编译器有没有关系? A:   先判断conditionA再判断conditionB和编译器无关   不过对于&&只要conditionA为假conditionB就不判断了   对于||只要conditionA为真conditionB就不判断了   因为结果已经知道了 在调程序的时候发现如下代码会报错: int largestRectangleArea(vector<int>& heights) { heights.push_back(0); stack<int>staIndex; int area = 0; for(int i = 0; i < heights.size(); i ++){       //while(!staIndex.empty() && heights[i] <= heights[staIndex.top()]) Correct! while( heights[i] <= heights[staIndex.top()] && !staIndex.empty() ){//Wrong!int h = heights