bridge

结构型设计模式(适配器/桥接/过滤器/组合/装饰器/外观/享元/代理)

白昼怎懂夜的黑 提交于 2020-05-07 23:58:23
前言 结构型模式:这些设计模式关注类和对象的组合。继承的概念被用来组合接口和定义组合对象获得新功能的方式。 适配器模式(Adapter Pattern) 桥接模式(Bridge Pattern) 过滤器模式(Filter、Criteria Pattern) 组合模式(Composite Pattern) 装饰器模式(Decorator Pattern) 外观模式(Facade Pattern) 享元模式(Flyweight Pattern) 代理模式(Proxy Pattern) 1. 适配器模式 将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作。 我们用图来形象的解释这一概念: 这里的重点在于,老接口有特殊功能,我们不忍舍弃,比如只有欧洲的插头(老接口)能从插座里获得电,没有电我们过不下去。这个功能我们无法舍弃 为了继续享受这个特殊功能,我们使用适配器模式,让我们手中的美国的插头(新接口),拥有老接口的能力。 1.1 Demo 例如一个美国人说英语,一个中国人说中文,为了跟美国人做生意,说英文这个功能我们无法舍弃,但是我们是中国人,天生不会说英文。于是两者想要交流,就需要一个适配器,来充当沟通两者的工作。现在,我们希望让一个能说中国话的个体(实现说中文的接口的类),开口说英文。 1.1.1 角色 目标接口

Python3练习题系列(09)——物以类聚,人以群分

一曲冷凌霜 提交于 2020-05-07 18:49:14
目标: 用类管理同类事物 解析: 用到“class”的编程语言被称作“Object Oriented Programming(面向对象编程)”语言。首先你需要做出“东西”来,然后你“告诉”这些东西去完成它们的工作。 练习: 采用类,重写《Python3练习题系列(08)》的游戏案例。 代码: from sys import exit from random import randint class Game(): def __init__ (self, start): self.quips = [ " You died. You kinda suck at this. " , " Nice job, you died ...jackass. " , " Such a luser. " , " I have a small puppy that's better at this. " ] self.start = start def play(self): next = self.start while True: print ( ' \n-------- ' ) room = getattr(self, next) next = room() def death(self): print (self.quips[randint(0, len(self.quips)-1 )])

Dell服务器安装

假如想象 提交于 2020-05-07 17:33:35
Dell服务器安装 设备系统的配置 开机键入F2进入系统启动设置 进入System BIOS, 点击Integrated 设备开启usb3.0接口 然后退出初界面,选择Device Setting配置磁盘 除此配置需要点击Clear Configuration 将磁盘配置策略清除,保存回退一次 选择创建创建虚拟磁盘 操作完成,保存退出,服务器重启键入F11进入系统安装 选着U盘安装:bilibala 安装好centos后配置网络 设置好网卡:vi /etc/sysconfig/network-scripts/ifcfg-em1 PROXY_METHOD=none BROWSER_ONLY=no BOOTPROTO=static DEFROUTE=yes IPV4_FAILURE_FATAL=no IPV6INIT=yes IPV6_AUTOCONF=yes IPV6_DEFROUTE=yes IPV6_FAILURE_FATAL=no IPV6_ADDR_GEN_MODE=stable-privacy NAME=em1 UUID=9f9dc6f4-3118-49b9-8e8e-c8db82264a65 DEVICE=em1 ONBOOT=yes IPADDR=192.168.32.2 PREFIX=22 GATEWAY=192.168.33.2 DNS1=192.168.33.10

一道高级iOS面试题(runtime方向)

泄露秘密 提交于 2020-05-07 14:34:52
说到iOS,要么公司规模比较小,<=3人,不需要面试。 其他的,大概率要让你刀枪棍棒十八般武艺都拿出来耍耍。 而其中,但凡敌军阵营中有iOSer的,又极大概率会考到 Runtime 的知识点。 以下,是一题 sunnyxx 的一道 runtime 考题 ,给大伙练练手,如果掌握了,Runtime层面的初中级问题应该都不在话下~ 题目来袭: // MNPerson @interface MNPerson : NSObject @property (nonatomic, copy)NSString * name; - ( void )print; @end @implementation MNPerson - ( void )print{ NSLog( @" self.name = %@ " ,self.name); } @end --------------------------------------------------- @implementation ViewController - ( void )viewDidLoad { [super viewDidLoad]; id cls = [MNPerson class ]; void *obj = & cls; [(__bridge id )obj print]; } 问输出结果是啥,会不会崩溃。 最终结果: self

1.在虚拟机中安装Linux中的CentOS7系统

扶醉桌前 提交于 2020-05-06 07:05:21
1、 虚拟机的创建:如下图,可在右侧窗口中创建新的虚拟机,也可以在文件菜单中新建虚拟机,或者使用快捷键新建 这里选择“自定义(高级) ”,然后进入“下一步”设置 这里是选择虚拟机硬件的美容性的,默认就可以了 为虚拟机选择所要安装的操作系统,这里先跳过暂时不选,所以在这里选择“稍后安装操作系统”,然后“下一步” (注:下图中,第一项是用光盘安装,第二项是用硬盘里的ISO镜像安装) 由于我们要安装的是Linux操作系统,所以客户机操作系统要选择Linux(L),还我的系统版本是CentOS 7 64位,所以操作系统的版本要选择CentOS7 64位 这里可以给你新建的虚拟机取名,还有指定该虚拟机在物理机子中的存放路径,更改完成你自己想要的,然后“下一步” 处理器的数量和处理器内核的数量,由于这里只是测试用的,就不进行设置了,保持默认,然后“下一步” (注:选择给虚拟机分配的cpu核的数量,如果为虚拟机选择的cpu数超过本机实际cpu数量,VMware会给出警告:) 选择给新建的虚拟机多大的内存,默认是1G的内存!内存大小根据自己的需要设置,然后“下一步” (注:给虚拟机分配的内存不能超过物理 内存的一半,而且稍后如果想要使用图形界面安装CentOS,至少要分配628M的内存) 这里是网络类型分配,网络类型分配分为三种,Bridge,NAT和Host-Only,大概区别是 1

Kubernetes之使用kubeadm部署

这一生的挚爱 提交于 2020-05-05 21:43:59
  参考: https://www.cnblogs.com/caoxb/p/11243472.html   部署需要的脚本下载 git clone https://gitee.com/liuyueming/k8s-kubeadm.git   部署虚拟机规划 192.168.1.11 k8s-master 192.168.1.12 k8s-node1 192.168.1.13 k8s-node2   备注:第1步~第8步,所有的节点都要操作,第9、10步Master节点操作,第11步Node节点操作。 如果第9、10、11步操作失败,可以通过 kubeadm reset 命令来清理环境重新安装。   1,关闭防火墙  systemctl stop firewalld systemctl disable firewalld   2,关闭selinux setenforce 0   修改 /etc/selinux/config   修改 SELINUX=disabled   3,关闭swapoff swapoff -a    查看是否关闭 free   4,设置主机名和hosts    修改主机名并修改/etc/hosts 192.168.1.11 k8s-master 192.168.1.12 k8s-node1 192.168.1.13 k8s-node2   5

Centos 7 kubernetes集群搭建

Deadly 提交于 2020-05-05 21:42:04
一、环境准备    Kubernetes支持在物理服务器或虚拟机中运行,本次使用虚拟机准备测试环境,硬件配置信息如表所示: IP 地址 节点角色 CPU Memory Hostname 磁盘 192.168.56.10 master >=2c >=2G master sda 、 sdb 192.168.56.11 worker >=2c >=2G node1 sda 、 sdb 192.168.56.12 worker >=2c >=2G node1 sda 、 sdb 注:在所有节点上进行如下操作 1、设置主机名hostname,管理节点设置主机名为master # hostnamectl set-hostname master 设置其他节点主机名称时,可将 master 替换为正确的主机名 node1,node2,node3 即可。 2、编辑 /etc/hosts 文件,添加域名分析 cat <<EOF >>/etc/ hosts 192.168 . 56.10 master 192.168 . 56.11 node1 192.168 . 56.12 node2 EOF 3.关闭防火墙、selinux和swap。 依次执行以下操作 # systemctl stop firewalld # systemctl disable firewalld # setenforce 0 #

V-LOAM 源码解析(一)

廉价感情. 提交于 2020-05-05 17:47:31
转载请注明出处:本文转自zhch_pan的博客http://www.cnblogs.com/zhchp-blog/ 本博客为本人之前做项目时做的源码阅读工作,po到网上希望帮助其他人更好的理解V-LOAM的工程实现,有些地方代码做了修改,可能和原工程有出入,但对于该工程的整体流程理解没有妨碍。 源码下载链接:https://github.com/Jinqiang/demo_lidar 节点名称: featureTracking 订阅topic: <sensor_msgs::Image> ( " /camera/image_raw ") 发布topic: 1、 <sensor_msgs::PointCloud2> ( "/image_points_last " ) 2、<sensor_msgs::Image>( "/image/show " ) 1 #include <math.h> 2 #include <stdio.h> 3 #include <stdlib.h> 4 #include <ros/ros.h> 5 6 #include " cameraParameters.h " 7 #include " pointDefinition.h " 8 9 using namespace std; 10 using namespace cv; 11 12 bool

<TCP/IP原理> (三) 底层网络技术

被刻印的时光 ゝ 提交于 2020-05-05 17:20:35
传输介质 局域网(LAN) 交换(Switching) 广域网(WAN) 连接设备 第三章 底层网络技术 引言 1)Interne不是一种新的网络 建立在底层网络上的网际网 底层网络——“物理网”,网际网——“互联网” 2)物理网为上层提供通信支持 物理网称为互联网的“信道”或“接口” 互联网的接口——物理网提供的通信服务 3.1 传输介质 1. 有线介质——导线管(导向媒体) 双绞线 Twisted-pair cable 同轴电缆 Coaxial cable:金属铜导线、电流 光纤 Fiiber-optic cable:玻璃或塑料线缆,光(传输容量,距离好,代价大,安装复杂) 2. 无线介质——电磁波(非导向媒体) 8个频段 不同的传输介质决定了在物理网内物理层的传输方式不一样。 电缆:电信号 电平高低标识01; 光纤:光信号 光信号强度标识01; 3.2 局域网(LAN)(网路接入层对应的物理层和数据链路层) 1. 局域网技术 1)Local Area Network 允许一些独立设备在受限地理范围内彼此能够直接通信,通信信息经由第三者转发,可以为路由器,交换机...... 共享介质——广播式 2)技术 CSMA/CD 竞争有冲突 令牌传递 无冲突信道访问机制 局域网里的物理地址一般称为MAC地址(Medium Access Control)

史上代码最简单,讲解最清晰的双连通分量

廉价感情. 提交于 2020-05-05 11:39:03
史上代码最简单,讲解最清晰的双连通分量 (需提前学习强连通分量) 双连通分量的主要内容包括割点、桥(割边)、点双和边双,分别对应 4 个 Tarjan 算法。 所有算法的时间复杂度均为 O(n + m)。 双连通分量用到 DFS 树的性质,所有的边分别树边和返祖边两类,大大简化了代码。 双连通分量具有大量的性质,要能熟练掌握。 一些定义:树枝边:DFS时经过的边(由上至下); 返祖边:与DFS方向相反,从某个节点指向某个祖先的边; 注意:在无向图中,不能用dfn[fa]更新low[u];所以我们需要标记fa; 但如果有重边,就可以;所以我们可以记录它的上一条边;利用成对储存的思想记录上一条边来判重; 求割点: 割点性质: (1)根结点如果是割点当且仅当其子节点数大于等于 2; (2)非根节点 u 如果是割点,当且仅当存在 u 的一个子树,子树中没有连向 u 的祖先的边(返祖边)。 代码: void tarjan( int u, int fa) // 当fa=0时,说明该节点是根节点; { int num= 0 ; // 用来计量子节点数; low[u]=dfn[u]=++ cur; for ( int i=head[u];i;i=star[i].to){ // 链式前向星存图; int v= star[i].to; if (! dfn[v]){ tarjan(v,u); low[u