namespace

宜信容器云排错工具集

陌路散爱 提交于 2019-12-06 12:24:38
宜信容器云是一套基于kubernetes的容器管理平台。业务线用户在容器云上部署应用程序时,常常会遇到容器无法启动或者应用程序运行不正常的情况。为了方便用户排查在应用上云过程中的问题,我们在web端集成了一系列的排错方式,如下图: 一、终端信息 终端信息查看的是容器实例运行时的标准输出日志。 效果等同于: kubectl logs PODNAME [-c CONTAINER] 基本原理如下图: 应用部署时,所属节点的kubelet通过grpc调用容器运行时接口(container runtime interface),来请求docker守护进程创建容器运行时。 此时,docker守护进程会创建一个协程来接收容器运行时的标准输出日志,这个协程最终将STDOUT(标准输出)的日志写到容器运行时所在节点的对应目录下: /var/lib/docker/containers/container_id/{container_id-json.log} 如下图: 在web端查看对应实例的终端信息时,kubelet将接收的Api-server请求转化成docker client来请求docker守护进程。Docker守护进程到相应的目录下读取对应容器的日志文件数据,再由kubelet返回日志数据到Api-server,最终显示到web端,供用户查看。 容器日志的生命周期与容器的生命周期一致

C++学习(7)—— 函数提高

风流意气都作罢 提交于 2019-12-06 10:54:02
1. 函数默认参数 在C++中,函数的形参列表中的形参是可以有默认值的 语法: 返回值类型 函数名 (参数=默认值){} 注意 如果某个位置已经有了默认参数,那么从这个位置往后,从左到右都必须有默认值 如果函数的声明有了默认参数,那么函数的实现就不可以有默认参数 #include<iostream> using namespace std; //函数的默认参数 //如果我们自己传入数据,就用自己的数据,如果没有,那么用默认值 int func(int a, int b=20, int c=30){ return a+b+c; } //注意事项 //1. 如果某个位置已经有了默认参数,那么从这个位置往后,从左到右都必须有默认值 //2. 如果函数的声明有了默认参数,那么函数的实现就不可以有默认参数 int main(){ cout<<func(10,30)<<endl; return 0; }   2. 函数的占位参数 C++中函数的形参列表里可以有占位参数,用来做占位,调用函数时必须填补该位置 语法: 返回值类型 函数名(数据类型){} #include<iostream> using namespace std; //占位参数 //占位参数 可以有默认参数 void func(int a, int = 10){ cout<<"this is func"<<endl; } int

为什么“使用命名空间标准”被认为是不好的做法?

放肆的年华 提交于 2019-12-06 08:43:48
其他人告诉我, using namespace std; 编写 using namespace std; 在代码中是错误的,我应该直接使用 std::cout 和 std::cin 代替。 为什么 using namespace std; 认为是不好的做法? 是效率低下还是冒着声明模棱两可的变量(与 std 名称空间中的函数具有相同名称的变量)的风险? 它会影响性能吗? #1楼 请勿在全球范围内使用 仅在 全局使用 时才被视为“不良”。 因为: 您使正在编程的名称空间混乱。 当您使用 using namespace xyz 使用许多标识符时,读者将很难看到特定标识符的来源。 对于您的源代码的 其他 阅读者而言,正确的是对最常使用它的读者:您自己。 一两年后再来看看... 如果仅谈论 using namespace std 那么您可能不知道要获取的所有内容-当添加另一个 #include 或移动到新的C ++修订版时,可能会遇到您不认识的名称冲突。 您可以在本地使用 继续免费在本地(几乎)使用它。 当然,这可以防止您重复 std:: -重复也是不好的。 在本地使用它的习惯用法 在C ++ 03中,有一个习惯用法-样板代码-用于为您的类实现 swap 功能。 建议您实际上使用一个 using namespace std 的本地-或至少 using std::swap : class

k8s集群dashboard创建

佐手、 提交于 2019-12-06 07:49:20
kubernetes集群搭建完毕后,可以为集群创建dashboard,步骤如下 生产客户端证书 [root@k8s-master ~]# grep 'client-certificate-data' ~/.kube/config | head -n 1 | awk '{print $2}' | base64 -d >> kubecfg.crt [root@k8s-master ~]# grep 'client-key-data' ~/.kube/config | head -n 1 | awk '{print $2}' | base64 -d >> kubecfg.key [root@k8s-master ~]# openssl pkcs12 -export -clcerts -inkey kubecfg.key -in kubecfg.crt -out kubecfg.p12 -name "kubernetes-web-client" Enter Export Password: 设置证书密码,浏览器导入证书时需要 Verifying - Enter Export Password: 创建kubernetes-dashboard.yaml [root@k8s-master ~]# wget http://pencil-file.oss-cn-hangzhou.aliyuncs

使用traefik反向代理k8s dashboard

守給你的承諾、 提交于 2019-12-06 05:25:51
生产环境下,k8s集群对外暴露服务主要有LoadBalancer和Ingress两种方式: LoadBalancer:需要云厂商支持,使用k8s service的负载均衡能力,也就是依靠iptables/ipvs的能力,可用于各种协议 Ingress:相对更加灵活,通过反向代理服务器实现负载均衡,仅用于http/https协议,这种场景下需要额外的反向代理服务以及ingress controller,nginx是大家熟知的反向代理,在k8s时代,出现了 nginx-ingress ,就是nginx+ingress controller的组合,ingress controller负责根据ingress资源生成nginx配置,当配置有变化是重启nginx。同时也出现了云原生的反向代理traefik,它相当于把ingress controller包含到其中合为一体,并且能够动态感知路由规则变化,不需重启。 traefik是一个相对较新的反向代理,网上相关资料不是特别丰富,研究了好几天,才成功访问到k8s dashboard,将其中的关键点记录于此。 安装traefik 使用helm安装,最新chart使用的traefik 1.7.19: helm install stable/traefik -f traefik-values.yaml traefik-values.yaml: rbac

C#面向对象--命名空间

旧时模样 提交于 2019-12-06 04:58:57
  一、在C#中,使用命名空间(Namespace)可以帮助控制自定义类型的作用范围,同时对大量的类型进行组织;使用namespace关键字声明命名空间,命名空间可以嵌套使用: namespace MyNameSpace { namespace MyNestedNameSpace { class MyClass { public void MyFunc() { //do... } } } }   1.命名空间默认即为public,没有任何访问限制,不能使用任何访问修饰符;   2.在命名空间中的定义的五种基本类型(类class、结构struct、接口interface、枚举enum和委托delegate),只能是public或internal的,默认为internal的;   3.每一种类型根据其命名空间的不同会拥有一个唯一名称,即完全限定名称(Fully Qualified Name),例如上面自定义类型MyClass的完全限定名称为MyNameSpace.MyNestedNameSpace.MyClass;   ※完全限定名称才是CLR看到的实际类型名称;   二、使用using关键字引用指定的命名空间,这样可在当前代码范围内免去为每个类型指定命名空间的名称,通过.运算符分隔嵌套的命名空间: using MyNameSpace.MyNestedNameSpace;   ※此时

Mybatis笔记

ⅰ亾dé卋堺 提交于 2019-12-06 04:24:58
Mybatis下载地址: https://github.com/mybatis ,也可以用maven Mybatis概述 Mybatis,原名:iBatis,Mybatis是一个ORM(对象关系映射)框架,是一款基于Java的持久层框架,MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。 MyBatis可以使用简单的XML或注解来配置和映射原生信息,将接口和Java的POJOs(简单的Java对象、实体类)映射成数据库中的记录。 dao -> 持久层(用来数据持久化) -> db 持久层和dao层融合一起来使用, ORM框架解决的是面向对象程序设计语言和关系型数据库不匹配的问题,Mybatis能使操作数据库像使用面向对象语言一样; hibernate是纯ORM框架;而Mybatis是半ORM框架,要手写sql的 Mybatis要做的事:实体类和sql之间建立映射关系 Mybatis核心配置(见son4模块) mybatis开发dao层(见son4模块) 1.传统开发方式(不常用):mybatis对dao的支持:在daoimpl加成员变量sqlsession工厂 2.mapper代理开发方式(最常用):mybatis对dao的支持,只需实现接口,并保证和映射文件名字一致,会生成代理实现类, 使用mapper代理注意:namespace

二、ConfigMap

心已入冬 提交于 2019-12-06 02:43:13
1、使用目录创建 #创建两个配置文件 [root@k8s-master01-etcd01 dir]# ls game.properties test.conf [root@k8s-master01-etcd01 dir]# cat game.properties name=xiangwei age=22 weapon=sword [root@k8s-master01-etcd01 dir]# cat test.conf course=python log-config=INFO #创建configmap [root@k8s-master01-etcd01 dir]# kubectl create configmap base-config --from-file=../dir/ configmap/base-config created #查看 [root@k8s-master01-etcd01 dir]# kubectl get cm NAME DATA AGE base-config 2 27s [root@k8s-master01-etcd01 dir]# kubectl describe cm base-config Name: base-config Namespace: default Labels: <none> Annotations: <none> Data ==

MyBatis sql映射器 Mapper

半腔热情 提交于 2019-12-05 20:56:03
入门   MyBatis 基于动态代理机制,让我们无需再编写 Dao 的实现。    传统 Dao 接口,现在名称统一以 Mapper 结尾 , 还有我们映射器配置文件要和映射器在同一个包 . :   IDeptDao---->DeptMapper.java---DeptMapper.xml(namespace 直接写 DeptMapper.java 的全限定名 ) 1.创建个 User 类(首先得有个数据库中的表是User,并且还有对应的字段) public class User { private Long id; private String name; get和set和tostring此处省略。。。。(get和set和tostring是要的,太长了没复制) } 2.个上面的类建个接口 UserMapper import java.util.List; /** * 查询数据库中所有数据 * @return */ public interface UserMapper {   List<User> queryAll(); } 3.建个 UserMapper.xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http:/

图像变换之霍夫变换

帅比萌擦擦* 提交于 2019-12-05 20:37:33
第一个霍夫直线变换 Houghlines() ////HoughlinesP函数的使用 #include <opencv2/opencv.hpp> #include <opencv2/imgproc/imgproc.hpp> using namespace cv; using namespace std; int main() { VideoCapture capture(0 ); while (1) { //【1】载入原始图和Mat变量定义 Mat srcImage; capture >> srcImage; Mat midImage, dstImage;//临时变量和目标图的定义 //【2】进行边缘检测和转化为灰度图 Canny(srcImage, midImage, 50, 200, 3);//进行一此canny边缘检测 cvtColor(midImage, dstImage, COLOR_GRAY2BGR);//转化边缘检测后的图为灰度图 //【3】进行霍夫线变换 vector<Vec4i> lines;//定义一个矢量结构lines用于存放得到的线段矢量集合 HoughLinesP(midImage, lines, 1, CV_PI / 180, 80, 50, 10); //【4】依次在图中绘制出每条线段 for (size_t i = 0; i < lines