cde

云原生系列6 基于springcloud架构风格的本地debug实现

余生长醉 提交于 2021-02-20 01:01:33
debug是程序员在日常开发中最常使用的操作, 那么,你是如何快速在微服务架构风格下快速debug后端服务呢? 开发现状 开发的理想状态 本地调测的使用步骤 登录智能网关 如果集成开发环境是在本地局域网,则这一步可以省略, 否则需要使用智能网关,这里使用的是阿里云的智能网关, 用途是把本地开发机器跟远程的集成开发环境机器组成一个局域网; 配置服务染色标记 场景覆盖 通过网关直接到本地服务 通过Feign到本地服务 应用二开调用其它应用或者服务 实现原理 服务染色 网关路由劫持 自定义ribbon负载均衡规则 小结 一句话小结本篇: 通过对客户端的流量染色跟服务染色来实现把 集成开发环境的流量转发到本地实现本地debug加快开发的速度; 借助 transmittable-thread-local 工具, 解决了ThreadLocal的不同线程共享线程本地变量的问题。 原创不易,关注诚可贵,转发价更高!转载请注明出处,让我们互通有无,共同进步,欢迎沟通交流。 来源: oschina 链接: https://my.oschina.net/carterspring/blog/4956987

复制构造函数与赋值函数

笑着哭i 提交于 2021-02-13 20:47:25
构造函数、析构函数、赋值函数是每个类最基本的的函数。每个类只有一个析构函数和一个赋值函数。但是有很多构造函数(一个为复制构造函数,其他为普通构造函数。对于一个类A,如果不编写上述四个函数,c++编译器将自动为A产生四个默认的函数,即: A(void) //默认无参数构造函数 A(const A &a) //默认复制构造函数 ~A(void); //默认的析构函数 A & operator = (const A &a); //默认的赋值函数 既然能自动生成函数,为什么还需要自定义?原因之一是“默认的复制构造函数”和"默认的赋值函数“均采用”位拷贝“而非”值拷贝“ 位拷贝 v.s. 值拷贝 为便于说明,以自定义String类为例,先定义类,而不去实现。 #include <iostream> using namespace std; class String { public: String(void); String(const String &other); ~String(void); String & operator =(const String &other); private: char *m_data; int val; }; 位拷贝拷贝的是地址,而值拷贝拷贝的是内容。 如果定义两个String对象a, b。当利用位拷贝时,a=b,其中的a.val=b.val;但是a

MySQL学习笔记(22)——字符函数

时光怂恿深爱的人放手 提交于 2021-02-08 15:58:23
字符函数 1. CONCAT()——字符连接 例如:SELECT CONCAT(“A”,”B”,”C”); 输出:ABC 实际用途有: SELECT CONCAT(username,password) AS concat FROM user3; 2. CONCAT_WS()——用指定的分隔符将字符进行连接 例如: SELECT CONCAT_WS(“-“,”坚”,”持”); 输出:坚-持 3. FORMAT()——数字格式化 例如: SELECT FORMAT(12345.67,2); //后面的2是小数点保留位数 输出:12,345.67 4. UPPER()——转换为大写字母 例如: SELECT UPPER(“lt”); 输出:LT 5. LOWER()——转换为小写字母 例如:SELECT LOWER(UPPER(“lt”)); //就是突然想皮一下 输出:lt 6.LEFT()、RIGHT()——获取左、右侧字符 例如:SELECT LEFT(“ABCDE”,2); 输出:AB 例如:SELECT RIGHT(“ABCDE”,3); 输出:CDE 7.LENGTH()——获取字符串长度 例如:SELECT LENGTH(“MYSQL”); 输出:5 8.LTRIM()、RTRIM()、TRIM()——删除前导空格、删除后续空格、删除前导和后续空格 例如:SELECT

建行基于以太坊发行首个区块链债券背后,值得注意的四点

99封情书 提交于 2021-01-15 19:23:18
根据新加坡南华早报最新的消息,中国建设银行已经与香港金融科技公司扶桑(Fusang)达成了一项合作,基于区块链发行30亿美元的债券,用户可以在Fusang交易所上通过美元或者比特币购买该债券,期限为三个月;到期时收益率约为0.75%,该收益率高于银行的0.25%。V|jasonbody 此前,银行债券主要通过存单形式出售,一般每单的价格在几万元人民币,主要的对象是专业投资者或者其他银行,这些债券通常被用于银行间的拆借,特别是国内的小型银行。 这次不同的是,主要是债券的面额都有比较小(100美元),这意味着只要100美元就能进入,最大的也不超过100万美元,这将准入门槛大大降低,更多的人可与参与进来。并且,通过区块链技术大大提升了常规金融工具(如股票和债券)发行的可能性,减少了发行过程中所涉及的金融中介。 这次债券是建行首次发行的区块链债券,也是我国大型国有银行发行的首支数字债券,对于这次债券的发行,Fusang首席执政官亨利·张(Henry Zhang)表示,这次债券的发行将会受到投资者的欢迎,后续该公司希望继续与建设银行推动包括人民币在内的其他货币金融工具的发行。 对于这次债券的发行,它的实际发起人是 中国建设银行纳闽分行(CCBL),而非建行国内的主体机构。 此次发行所筹集的资金将以定期存款的形式存入 CCBL,时长 3 个月,到期日为 2021 年 2 月。

【每日蓝桥】3、一三年省赛JavaC组真题“马虎的算式”

天涯浪子 提交于 2021-01-14 12:47:43
你好呀,我是灰小猿,一个超会写bug的程序猿! 欢迎大家关注我的专栏“ 每日蓝桥 ”,该专栏的主要作用是和大家分享近几年蓝桥杯省赛及决赛等真题,解析其中存在的算法思想、数据结构等内容,帮助大家学习到更多的知识和技术! 标题: 马虎的算式 小明是个急性子,上学的时候经常把老师的算式抄错。 有一次,老师出的题目是:36 * 495 = ? 他却抄成了:396 * 45 = ? 但结果却很戏剧性,他的答案居然是对的! 因为 36*495=396*45=17820 类似这样的巧合情况可能还有很多,比如:27*594=297*54 假设 a b c d e 代表1~9不同的5个数字(注意是各不相同的数字,且不含0) 能满足形如:ab * cde = adb * ce 这样的算式一共有多少种呢? 请你利用计算机的优势寻找所有的可能,并回答不同算式的种类数。 满足乘法交换律的算式计为不同的种类,所以答案肯定是个偶数 答案直接通过浏览器提交 注意:只提交一个表示最终统计种类数的数字,不要提交解答过程或其他多余的内容 解题思路: 本题主要把握题干中所给的重点内容: 假设 a b c d e 代表1~9不同的5个数字(注意是各不相同的数字,且不含0) 能满足形如:ab * cde = adb * ce 这样的算式一共有多少种呢? 所以我们可以通过枚举的方式将所有可能的组合全都找出来并进行判断,

第四届蓝桥杯省赛 (JavaB组)

回眸只為那壹抹淺笑 提交于 2021-01-13 21:00:57
第二题:马虎的算式 小明是个急性子,上小学的时候经常把老师写在黑板上的题目抄错了。 有一次,老师出的题目是:36 x 495 = ? 他却给抄成了:396 x 45 = ? 但结果却很戏剧性,他的答案竟然是对的!! 因为 36 * 495 = 396 * 45 = 17820 类似这样的巧合情况可能还有很多,比如:27 * 594 = 297 * 54 假设 a b c d e 代表1~9不同的5个数字(注意是各不相同的数字,且不含0) 能满足形如: ab * cde = adb * ce 这样的算式一共有多少种呢? 请你利用计算机的优势寻找所有的可能,并回答不同算式的种类数。 满足乘法交换律的算式计为不同的种类,所以答案肯定是个偶数。 答案直接通过浏览器提交。 注意:只提交一个表示最终统计种类数的数字,不要提交解答过程或其它多余的内容。 //这种填空题就暴力跑一下,怎么快怎么来 public static void main(String[] args) { // TODO Auto-generated method stub int count=0 ; for ( int a=1;a<=9;a++ ) { for ( int b=1;b<=9;b++ ) { for ( int c=1;c<=9;c++ ) { for ( int d=1;d<=9;d++ ) { for (

vi字符串替换命令

北城余情 提交于 2021-01-13 07:40:23
vi 编辑器提供简单的字符串替换命令,在末行模式下可以使用替换命令,其命令格式如下: [range]s/s1/s2/ [option] [range] 表示检索范围,省略时表示当前行。 下面是一些检索范围的例子。 1,10 表示从第 1 行到 10 行。 % 表示整个文件,同 1, $ 。 . ,$ 从当前行到文件尾。 s 为替换命令。 s1 要被替换的串,s2 为替换的串。 option 表示选项: /g 表示在全局文件中进行替换。 /c 表示在每次替换之前需要用户进行确认。 省略时仅对每行第一个匹配串进行替换。 下面实例演示了字符串替换命令,将第 10~22 行的 printf 标识符替换为 PRINT。 1) 在 vi 编辑器中编辑以下代码: int main(void) { struct stat buf; /*存储文件状态信息*/ if ( stat ( "s1" , &buf) == - 1 ) { perror ( "fail to stat" ); exit ( 1 ); } printf ( "permission : %d\n" , buf.st_mode); printf ( "inode number : %d\n" , buf.st_ino); printf ( "device number : %d\n" , buf.st_dev); printf (

正则中圆括号()和方括号[]的区别是什么(总结)

偶尔善良 提交于 2021-01-09 18:06:58
正则中圆括号()和方括号[]的区别是什么(总结) 一、总结 一句话总结: 1、圆括号是取多个,圆括号将括号里面的内容作为一组,方括号是取一个,就算写成这样 [es|ed|s|ly|ing|d]也是一个个取,正确做法是用圆括号 2、方括号里面的|选择符号没有意义 3、圆括号还表示组,表示反向引用, 4、大括号表示数目 二、正则中圆括号()方括号[]大括号{}的区别和用法 之前遇到要用正则判断输入字符串的小需求中遇到了问题,连续的字符串不知道怎么判断。 如邮箱结尾的.com .cn .net等。 于是乎查阅资料: 括号() : 括号是多个匹配,它把括号内的当做一组来处理,限制一些多选的范围,比如上面的需求只能是com cn net结尾的用括号就是最好的选择。 括号能提取字符串,如(com|cn|net)就可以限制 ,只能是com或cn或net。 括号将括号里面的内容作为一组 ,这就是与[]不同的地方。 方括号[] : 方括号是单个匹配,如[abc]他限制的不是abc连续出现,而是只能是其中一个 ,这样写那么规则就是找到这个位置时只能是a或是b或是c; 方括号是正则表达式中最常用的,常用的用法有:[a-zA-Z0-9]匹配所有英文字母和数字,[^a-zA-Z0-9]匹配所有非英文字母和数字。 大括号{}: 大括号的用法很简单,就是匹配次数 ,它需要和其他有意义的正则表达式一起使用。 比如

数独高阶技巧之八——SDC

半城伤御伤魂 提交于 2021-01-09 07:06:57
在本系列的第四篇“ 简单异数链 ”中,向大家介绍了XY-Wing等一系列Wing类技巧,并提到可以用(拐弯的)数组的观念来理解这些结构,经过第六篇 ALS 的学习之后,大家回过头再去看Wing,应该可以发现相关的实例都可以用ALS去解释。本篇则要介绍一种与上述结构类似的删除技巧——SDC(Sue de Coq)。 一、基本形态 Sue de Coq这个命名来自于SDC技巧最早发现者的论坛昵称,更正式的名称应该是Two-Sector Disjoint Subsets(双分离子集删除法),我们先来看SDC的两种基本形态。 图1 SDC-01 图1中,B4和R5深色背景4个待解格中存在且仅存在(A、B、C、D)4个候选数,可将这4个候选数分成红(A、B)、绿(C、D)两个分离子集(红∩绿=Ø),将4个待解格按其所在单元分为宫B、行R两个子集,红色(A、B)存在于子集B三格中,绿色(C、D)存在于子集R三格中,两个待解格子集存在交集X(交叠区域两格,X=B∩R), X中的候选数为红、绿两个候选数分离子集的并集,若满足这些条件,红、绿两个子集可各自对所在单元其他格内的候选数进行摈除 。 为什么可以这样删数呢?以ALS的视角来看原理很简单,将这四格按所在单元分为宫、行两组ALS( 每组都是3格4数 ),此时: 1、若宫行相交区域的A、B都不成立,则R5深色3格中只能填入C、D两个候选数

vi字符串替换命令

冷暖自知 提交于 2021-01-06 16:50:55
vi 编辑器提供简单的字符串替换命令,在末行模式下可以使用替换命令,其命令格式如下: [range]s/s1/s2/ [option] [range] 表示检索范围,省略时表示当前行。 下面是一些检索范围的例子。 1,10 表示从第 1 行到 10 行。 % 表示整个文件,同 1, $ 。 . ,$ 从当前行到文件尾。 s 为替换命令。 s1 要被替换的串,s2 为替换的串。 option 表示选项: /g 表示在全局文件中进行替换。 /c 表示在每次替换之前需要用户进行确认。 省略时仅对每行第一个匹配串进行替换。 下面实例演示了字符串替换命令,将第 10~22 行的 printf 标识符替换为 PRINT。 1) 在 vi 编辑器中编辑以下代码: int main(void) { struct stat buf; /*存储文件状态信息*/ if ( stat ( "s1" , &buf) == - 1 ) { perror ( "fail to stat" ); exit ( 1 ); } printf ( "permission : %d\n" , buf.st_mode); printf ( "inode number : %d\n" , buf.st_ino); printf ( "device number : %d\n" , buf.st_dev); printf (