delegate

Spring中的设计模式--观察者模式

浪子不回头ぞ 提交于 2020-04-28 04:01:08
spring在容器中使用了观察者模式: 一、spring事件:ApplicationEvent,该抽象类继承了EventObject类,jdk建议所有的事件都应该继承自EventObject。 二、spring事件监听器:ApplicationLisener,该接口继承了EventListener接口,jdk建议所有的事件监听器都应该继承EventListener。 Java代码 public interface ApplicationListener<E extends ApplicationEvent> extends EventListener { /** * Handle an application event. * @param event the event to respond to */ void onApplicationEvent(E event); } 三、spring事件发布:ApplicationEventPublisher 。 ApplicationContext继承了该接口,在ApplicationContext的抽象类AbstractApplicationContext中做了实现。 package org.springframework.context; public interface ApplicationEventPublisher { /*

Spring之IOC原理及代码详解

我们两清 提交于 2020-04-28 02:28:01
一、什么是IOC   引用 Spring 官方原文:This chapter covers the Spring Framework implementation of the Inversion of Control (IoC) [1] principle. IoC is also known as dependency injection (DI). It is a process whereby objects define their dependencies, that is, the other objects they work with, only through constructor arguments, arguments to a factory method, or properties that are set on the object instance after it is constructed or returned from a factory method. The container then injects those dependencies when it creates the bean. This process is fundamentally the inverse, hence the name Inversion of

C#委托和事件详解

独自空忆成欢 提交于 2020-04-27 11:52:50
1. 委托? A:委托字面意思就是一种代理 B:C#语言里面委托则是让某个方法来实现需求的功能 C:从数据结构方面来讲委托则是和类一样,是一种自定义类型 D:委托它是对方法一类的抽象,就是一系列具有相同签名和返回类型的方法的地址,也就是说它存储的是方法的地址而不是方法本身 F:调用委托的时候,委托一系列的方法都会按照顺序被执行 2. Demo? 比如我们定义一个人类Person如下,具有两个方法 打招呼用英语,打招呼用中文。 定义的委托参数必须传入一个string类型的姓名,无返回值 SayHelloByChinese和SayHelloByEnglish都符合委托的类型。 public delegate void SayHelloDelegate ( string name ) ; public class Person { public SayHelloDelegate SayHello1 ; public void SayByChinese ( string name ) { Console . WriteLine ( name + "你好" ) ; } public void SayByEnglish ( string name ) { Console . WriteLine ( name + "HI" ) ; } } ```csharp class Program {

微服务全链路跟踪:jaeger集成istio,并兼容uber-trace-id与b3

£可爱£侵袭症+ 提交于 2020-04-26 16:58:00
微服务全链路跟踪:grpc集成zipkin 微服务全链路跟踪:grpc集成jaeger 微服务全链路跟踪:springcloud集成jaeger 微服务全链路跟踪:jaeger集成istio,并兼容uber-trace-id与b3 公司有自己的一套基于k8s的paas系统,并且集成了istio,这里主要是想讲解下springcloud服务如何集成istio jaeger跨进程传递 在基于HTTP协议的分布式调用中,通常会使用HTTP Header来传递SpanContext的内容。常见的Wire Protocol包含Zipkin使用的b3 HTTP header,Jaeger使用的uber-trace-id HTTP Header,LightStep使用的"x-ot-span-context" HTTP Header等。Istio1.0支持b3 header和x-ot-span-context header,可以和Zipkin,Jaeger及LightStep对接;istio1.4以上支持uber-trace-id,请参考github官方说明: https://github.com/istio/istio/issues/12400 uber-trace-id 图中可以看到其中traceId、spanId等字段都拼接到一个头钟了 b3 istio的b3头详情可以参考: https:/

C# 基础知识系列- 12 任务和多线程

蓝咒 提交于 2020-04-26 13:19:41
C# 基础知识系列- 12 任务和多线程 前言 照例一份前言,在介绍任务和多线程之前,先介绍一下异步和同步的概念。我们之间介绍的知识点都是在同步执行,所谓的同步就是一行代码一行代码的执行,就像是我们日常乘坐地铁通过安检通道一样,想象我们每个人都是一行代码,我们依次通过安检仪器的时候就是同步。 那么,什么是异步呢?有一个时间利用率的故事,讲的是在烧水的同时,顺便准备茶叶,清洗茶杯等工序可以节省时间。这个故事就是异步的一个典型范例。异步通俗的将就是不暂停也不等待当前耗时的流程执行完成,继续执行后续的流程。 那么这和任务与多线程有什么关系呢?在C#中,基于任务可以很简单的创建一个异步程序或者异步方法;同时任务也是一个简单的多线程模式。不过值得注意的是,C#的异步可以由多线程实现,但多线程更多的是用来实现并行。所谓并行,顾名思义,就是多任务同时执行,这里的任务指的是程序需要完成的事,而不是C#中的任务机制。 这一篇是《C#基础知识系列》的一篇,简单介绍一下如何创建、使用任务和多线程,这部分的内容很多,包括有很多注意事项,将会另开一个系列专门讲解C#的异步和并行编程,名字暂定为《C#异步编程系列》。 线程 了解过计算机的人可能知道程序最小执行单元是线程,最小资源分配单位是进程。进程里必然至少有一个线程,而一个程序也必然至少有一个进程。这里不过多的介绍进程和线程的区别于关系

NavigationController

余生颓废 提交于 2020-04-26 05:18:32
实际开发中都是多控制器的;用一个控制器(父)管理多个控制器(子) ios提供2个特殊的(父)控制器 UINavigationControler 简介 导航控制器,可以轻松完成多个控制器之间的切换,其结构包含导航条(y=20)、栈顶控制器的view、导航控制器的view。导航控制器需要设置一个根控制器,一般是UIViewControler。 基本使用 最开始的时候,栈顶控制器的view就是导航控制器的根控制器的view。 1.先去掉Info.plist的倒数第三行的main,以采用代码方式创建 2.在AppDelegate.m中: 其中,先创建窗口,再创建导航控制器(同时创建了一个UIviewControler的控制器,作为其根控制器),然后把该窗口的根控制器设为所创建的导航控制器,最后显示窗口。 PS:一般地,导航控制器的根控制器来自新建一个UIViewControler类,然后import进来。另外,只要一个控制器是导航控制器的子控制器,那么导航控制器就会成为这个控制器的一个属性(可以拿到 ) 控制器之间的跳转: 根控制器的导航控制器调用pushViewControler方法,参数为跳转后的控制器。跳转后,显示的是后来这个ViewControler的view,也成了栈顶控制器的view,同时从window上移除了前一个控制器的view,但仍保存于导航控制器的子控制器数组中。 PS

iOS常用的代码块整理

有些话、适合烂在心里 提交于 2020-04-25 17:00:35
strong @property (nonatomic,strong) <#Class#> *<#object#>; weak @property (nonatomic,weak) <#Class#> *<#object#>; copy @property (nonatomic,copy) NSString *<#string#>; assign @property (nonatomic,assign) <#Class#> <#property#>; block @property (copy, nonatomic) <#returnType#>(^<#blockName#>)(<#arguments#>); @property (copy, nonatomic) <#returnType#>(^<#blockName#>)(<#type#> <#name#>) delegate @protocol <#delegate#><NSObject> //方法可实现的 @optional //方法必须实现 //@required @end @property (nonatomic, weak) id <#protocol#> <#delegate#>; cell static NSString *cid=<#cid#>; <#Class#> *cell=[tableView

SDWebimage相关知识点1-- 线程

你说的曾经没有我的故事 提交于 2020-04-25 13:15:04
一 线程 (thread)是组成进程的子单元,操作系统的调度器可以对线程进行单独的调度。实际上,所有的并发编程 API 都是构建于线程之上的 —— 包括 GCD 和操作队列(operation queues)。 多线程可以在单核 CPU 上同时(或者至少看作同时)运行。操作系统将小的时间片分配给每一个线程,这样就能够让用户感觉到有多个任务在同时进行。如果 CPU 是多核的,那么线程就可以真正的以并发方式被执行,从而减少了完成某项操作所需要的总时间。 NSThread 是 Objective-C 对 pthread 的一个封装。通过封装 直接使用线程可能会引发的一个问题是,如果你的代码和所基于的框架代码都创建自己的线程时,那么活动的线程数量有可能以指数级增长。这在大型工程中是一个常见问题。例如,在 8 核 CPU 中,你创建了 8 个线程来完全发挥 CPU 性能。然而在这些线程中你的代码所调用的框架代码也做了同样事情(因为它并不知道你已经创建的这些线程),这样会很快产生成成百上千的线程。代码的每个部分自身都没有问题,然而最后却还是导致了问题。使用线程并不是没有代价的,每个线程都会消耗一些内存和内核资源。 二 GCD Grand Central Dispatch 通过 GCD,开发者不用再直接跟线程打交道了,只需要向队列中添加代码块即可,GCD 在后端管理着一个 线程池 。GCD

2019周笔记(2.25-3.01)(压缩数据库)

十年热恋 提交于 2020-04-25 03:05:34
公司穷,硬盘少,传感数据多,时不时就需要压缩数据库,这周都在干这个事,就稍微专注的看了下[DBCC SHRINKFILE ]和[DBCC SHRINKDataBase ]的区别,发现还是没看懂,而且有文章说做过多次试验后发现msdn中的说法也不是完全正确。 那这次就只记录一些比较关键的东西。首先[DBCC SHRINKFILE ]是[DBCC SHRINKDataBase ]的一个执行子集,也就是执行[DBCC SHRINKDataBase ]其实是对多个文件进行[DBCC SHRINKFILE ]操作。 基本语法: DBCC SHRINKFILE(文件名|文件ID,希望将日志收缩到的目标大小,EMPTYFILE | NOTRUNCATE | TRUNCATEONLY) --文件名(很多朋友这里容易填错,这里可以去数据库右键属性中,找到“文件”菜单中,里面的“逻辑名称”) --目标大小,也就是我们希望把文件压缩到的理想尺寸,单位Mb,如果一个日志有10G,我们希望压缩到1G,但是实际数据已经占用3G,那么最终压缩出来也是3G。 --NOTRUNCATE | TRUNCATEONLY参考下面SHRINKDataBase,这里只说EMPTYFILE。它是通过把数据迁移到文件组的中的其他文件来清空源文件,然后配合使用ALTER DATABASE [数据库名称] REMOVE FILE

iOS网络请求-AFNetworking源码解析

。_饼干妹妹 提交于 2020-04-24 17:47:45
趁着端午节日,自己没有什么过多的安排,准备花4-5天左右,针对网络请求源码AFNetworking和YTKNetwork进行解析以及这两年多iOS实际开发经验(其实YTKNetwork也是对AFNetworking的深度封装),结合多个实际项目,分别针对这两个网络框架,进行封装使用(可以直接使用)。本篇主要讲解AFNetworking源码解析,都是自己亲自看AFNetworking源码以及心得体会,大约看下来需要20-30分钟。欢迎指正!!! AFNetworking源码地址: https://github.com/AFNetworking/AFNetworking 针对AFNetworking封装: https://www.cnblogs.com/guohai-stronger/p/9193465.html YTKNetwork的源码详解: https://www.cnblogs.com/guohai-stronger/p/9194519.html 一.AFNetworking的代码结构: 新的代码结构将AFNetworking.h放到了Supporting Files里面。 自从AFNetworking结构更改以后,结构可能不够清晰,以前的版本是这样的: 其实没有多少改变,从这张图可以看出:除去Support Files,可以看到AF分为如下5个功能模块: 网络通信模块(最核心