shell脚本中echo显示内容带颜色显示,echo显示带颜色,需要使用参数-e 格式如下: echo -e \033[字背景颜色;文字颜色m字符串\033[0m 例如: echo -e \033[41;36m something here \033[0m 其中41的位置代表底色, 36的位置是代表字的颜色 注: 1、字背景颜色和文字颜色之间是英文的 2、文字颜色后面有个m 3、字符串前后可以没有空格,如果有的话,输出也是同样有空格 下面是相应的字和背景颜色,可以自己来尝试找出不同颜色搭配 例 echo -e “\033[31m 红色字 \033[0m” echo -e “\033[34m 黄色字 \033[0m” echo -e “\033[41;33m 红底黄字 \033[0m” echo -e “\033[41;37m 红底白字 \033[0m” 字颜色:30—–37 echo -e “\033[30m 黑色字 \033[0m” echo -e “\033[31m 红色字 \033[0m” echo -e “\033[32m 绿色字 \033[0m” echo -e “\033[33m 黄色字 \033[0m” echo -e “\033[34m 蓝色字 \033[0m” echo -e “\033[35m 紫色字 \033[0m” echo -e “\033[36m 天蓝字 \033[0m” echo -e “\033[37m 白色字 \033[0m” 字背景颜色范围:40—–47 echo -e “\033[40;37m 黑底白字 \033[0m” echo -e “\033[41;37m 红底白字 \033[0m” echo -e “\033[42;37m 绿底白字 \033[0m” echo -e “\033[43;37m 黄底白字 \033[0m” echo -e “\033[44;37m 蓝底白字 \033[0m” echo -e “\033[45;37m 紫底白字 \033[0m” echo -e “\033[46;37m 天蓝底白字 \033[0m” echo -e “\033[47;30m 白底黑字 \033[0m” 最后面控制选项说明 \33[0m 关闭所有属性 \33[1m 设置高亮度 \33[4m 下划线 \33[5m 闪烁 \33[7m 反显 \33[8m 消隐 \33[30m — \33[37m 设置前景色 \33[40m — \33[47m 设置背景色 \33[nA 光标上移n行 \33[nB 光标下移n行 \33[nC 光标右移n行 \33[nD 光标左移n行 \33[y;xH设置光标位置 \33[2J 清屏 \33[K 清除从光标到行尾的内容 \33[s 保存光标位置 \33[u 恢复光标位置 \33[?
本文节选自霍格沃兹测试开发学社内部教材
JavaScript 是一种脚本语言,有的场景需要使用 js 脚本注入辅助我们完成 Selenium 无法做到的事情。
当 webdriver 遇到无法完成的操作时,可以使用 JavaScript 来完成,webdriver 提供了 execute_script() 方法来调用 js 代码。
执行 js 有两种场景:
在页面上直接执行 js
在某个已经定位的元素上执行 js
执行js
Selenium 可以通过 execute_script() 来执行 JavaScript 脚本。
driver.execute_script:同步执行 JavaScript 在当前的窗口框架下
js 脚本可以在浏览器的开发者工具 -> Console 中进行调试
js的返回结果
获取元素控件中的属性值
与 Selenium 结合,在代码中返回 js 结果
Python 版本
# 获取网页性能的响应时间,js脚本中使用return代表返回获取的结果js = return JSON.
需要将数组[丁,乙,甲,丙],按甲、乙、丙、丁排序,但是C#的字符串排序规则没有该排序类型,所以预指定顺序,再匿名生成IComparer接口的实现类。
var classOrderList = new List<string>{甲,乙,丙,丁}; var comparer = Comparer<string>.Create((k1, k2) => classOrderList.IndexOf(k1) - classOrderList.IndexOf(k2));
Sanitizers简介 Address Sanitizer(ASAN)是一个快速的内存错误检测工具。它非常快,只拖慢程序两倍左右(比起Valgrind快多了)。它包括一个编译器instrumentation模块和一个提供malloc()/free()替代项的运行时库。
Sanitizers是谷歌发起的开源工具集,包括了AddressSanitizer, MemorySanitizer, ThreadSanitizer, LeakSanitizer,Sanitizers项目本是LLVM项目的一部分,但GNU也将该系列工具加入到了自家的GCC编译器中。GCC从4.8版本开始支持Address和Thread Sanitizer,4.9版本开始支持Leak Sanitizer和UB Sanitizer,这些都是查找隐藏Bug的利器。(gcc 4.9及以上版本体验更好)
valgrind特点 工具相对简单,对于一些复杂的内存泄露可能无法解析出来而且有一个问题就是只有检测的进程退出后才会输出内存泄露信息。
ASAN特点 sanitizer可以在检测到内存泄露第一时间立刻终止进程,并且它可以深入检测(随应用进程一起编译)。
ASAN支持检测的内存问题 使用已释放内存(野指针) 堆内存越界(读写) 栈内存越界(读写) 全局变量越界(读写) 函数返回局部变量 内存泄漏 使用方法 ASAN工具最常用的编译选项如下:
-fsanitize=address #开启地址越界检查功能 -fno-omit-frame-pointer #开启后,可以出界更详细的错误信息 -fsanitize=leak #开启内存泄露检查功能 -ggdb #方便调试 (1)CMake中使用
set(CMAKE_CXX_FLAGS -std=c++11 -m64 -Wno-write-strings -fexceptions -fno-inline -rdynamic -fsanitize=address -fsanitize-recover=all -fsanitize=leak) 注意事项 (1)ASan发现内存访问违规的时,应用程序并不会自动崩溃。 这是由于在使用模糊测试工具时,它们通常都是通过检查返回码来检测这种错误。当然,我们也可以在模糊测试进行之前通过将环境变量 ASAN_OPTIONS修改成如下形式来迫使软件崩溃:
export ASAN_OPTIONS='abort_on_error=1'/export ASAN_OPTIONS='abort_on_error=1'/ 参考文献 内存检测工具sanitizer[内存泄漏、内存越界] VS valgrind Address Sanitizer(Asan)原理及实战定位
曲线 https://blog.csdn.net/u010241908/article/details/123328550 https://zhuanlan.zhihu.com/p/38940994
https://zhuanlan.zhihu.com/p/344304259
启发式函数 https://blog.csdn.net/qq_31815513/article/details/118092663
开源工具包https://www.guyuehome.com/34106
如何扩展 符合车辆运动学的 相邻节点
如何更新节点状态及父节点
如何设计启发式函数 如何实现无障碍物考虑运动学 及 无运动学考虑障碍物的启发式函数
现代物流的发展,催生了越来越多的网络交易。伴随交易的产生,订单管理成为了企业物流运转尤为重要的部分,为适应现代社会企业发展的信息化进程,解决传统办公中人工管理订单的诸多缺点,订单管理系统成为了企业解决这一难题的钥匙。
接受客户订单信息,以及仓储管理系统发来的库存信息,然后按客户和紧要程度给订单归类,对不同仓储地点的库存进行配置,并确定交付日期,这样的一个系统称为订单管理系统。订单管理系统可以对企业的订单管理和分配进行统一的管理。企业通过订单管理系统,可以给用户提供整合的一站式的订单链条服务,同时让企业的仓库运输和订单形成一个有机的整体。随着时代的发展,订单管理系统可以运用的方面也越来越广,从原来的企业到现在的中小型企业,外卖店铺,都可以使用订单管理系统来对店内的订单进行相应的管理。
LR.JAVA订单管理系统通过对商品交易各环节的统一衔接管理,实现客户、商品、订单数据多维汇总分析,为企业经营决策提供数据支撑,减少可控损失。
仓储管理模块,系统根据类别将产品分类规整,连接订单系统实现信息化的数量管理,以便企业及时了解和控制产品库存,管理仓库进出库情况、完成货物盘点工作。
销售业绩的好坏往往决定着公司的直接收入。当销售与客户沟通时,需要展示报价、签订合同、记录发货信息。通过销售管理模块,业务员可以实现快速录入订单,实时查询订单状态,并进行发货退货。
通过产品管理模块,业务员可快速录入、根据条件筛选查询产品信息,并关联仓库,让用户实时把握销售情况。
客户管理模块,通过对客户信息建档,方便办事人员快捷查找合作客户的具体信息。
财务管理模块的统计报表和直供客户的对账都可以自动生成EXCEL电子表格文件,避免了大量烦琐的计算和文件格式转换。总览表能够明确地反映每个直供客户的款项明细。
利用强大的BI功能,多维度展现销售数据。汇总订单数、销售总额、商品销售排行榜等各项指标,方便运营部门提炼重要数据信息,进行阶段性工作复盘。用户可根据自行需要呈现商品销量占比、销量汇总、销量排行等各类指标数据,为商品生产数量、仓储比例等提供数据支撑。
不仅如此,LeaRun还自带API接口,可以对接外部的订单管理平台,方便企业在LeaRun也能充分利用其他平台的原始订单数据,实现业务订单管理闭环。
订单管理是企业管理中的重要部分,利用自动化的系统实现,避免了人为因素造成的各种麻烦。使用LeaRun一站式开发平台,投资回报率高,订单安全得到保障,还减少了大量的重复劳动,节约了纸张等办公用品的成本问题等。
MySQL源码分析之 通信协议(二)
mysql 通信包括,握手连接阶段、命令执行阶段和主从复制协议。在连接执行以下任务,客户端和服务器数据交换,如果请求加密设置 ssl 连接通道,根据服务器对客户端进行身份验证。
服务器和客户端完整交互如下:
1、登录认证交互报文
初始化握手,初始化握手从服务端发送 Protocol::Handshake 包开始,然后客户端可以选择使用 SSL 协议。接着客户端发送 Protocol::HandshakeResponse数据包。
接下来介绍一下 HandshakeV10数据报文,其他版本可以参考源码文档
protocol version: 服务协议版本号,恒为10,该值由 PROTOCOL_VERSION 宏定义决定(参考MySQL源代码/include/mysql_version.h头文件定义)
server version: 服务版本信息,该值为字符串,由 MYSQL_SERVER_VERSION 宏定义决定(参考MySQL源代码/include/mysql_version.h头文件定义)
thread id: 服务器为当前连接创建的线程 id
auth-plugin-data-part-1: 挑战随机数前8字节(第一部分),MySQL数据库用户认证采用的是挑战/应答的方式,服务器生成该挑战数并发送给客户端,由客户端进行处理并返回相应结果,然后服务器检查是否与预期的结果相同,从而完成用户认证的过程.
filler: 填充值 0x00, 终止挑战随机数前8字节。
capability_flags_1:服务权能标志的低16位
character_set: 字符编码,标识服务器用的字符集。只包含低8位。
status_flags: 服务器状态,状态值定义如下(参考MySQL源代码/include/mysql_com.h中的宏定义)
enum SERVER_STATUS_flags_enum { SERVER_STATUS_IN_TRANS = 1, /**< 当使用显示事务活关闭自动提交时会触发*/ SERVER_STATUS_AUTOCOMMIT = 2, /**< 服务处于自动提交模式 */ SERVER_MORE_RESULTS_EXISTS = 8, /**< 使用 mulit query 时,存在下一条 query */ SERVER_QUERY_NO_GOOD_INDEX_USED = 16, /**< 查询没有使用好的索引 */ SERVER_QUERY_NO_INDEX_USED = 32, /**< 查询没有使用任何索引 */ /** 服务器能够满足客户机的请求,并为查询打开了一个只读的不可滚动游标,此标志用于响应COM_STMT_EXECUTE和COM_STMT_FETCH命令 由二进制协议结果集使用,表示必须使用COM_STMT_FETCH来获取行数据 @todo Refify Binary Protocol Resultset and COM_STMT_FETCH.
1、查找当前目录下所有以.tar结尾的文件然后移动到指定目录:
find . -name “*.tar” -exec mv {}./backup/ ;
注解:find –name 主要用于查找某个文件名字,-exec 、xargs可以用来承接前面的结果,然后将要执行的动作,一般跟find在一起用的很多,find使用我们可以延伸-mtime查找修改时间、-type是指定对象类型(常见包括f代表文件、d代表目录),-size 指定大小,例如经常用到的:查找当前目录30天以前大于100M的LOG文件并删除。
find . -name *.log –mtime +30 –typef –size +100M |xargs rm –rf {};
2、批量解压当前目录下以.zip结尾的所有文件到指定目录:
for i in `find . –name “*.zip”–type f `dounzip –d $i /data/www/img/done
注解:forI in (command);do … done为for循环的一个常用格式,其中I为变量,可以自己指定。
3、sed常用命收集:test.txt做测试
如何去掉行首的.字符: sed-i 's/^.//g' test.txt在行首添加一个a字符: sed's/^/a/g' test.txt在行尾添加一个a字符: sed's/$/a/' tets.txt在特定行后添加一个c字符:sed '/wuguangke/ac' test.txt在行前加入一个c字符: sed'/wuguangke/ic' test.txt
更多sed命令请查阅相关文档。
4、如何判断某个目录是否存在,不存在则新建,存在则打印信息。
if[! –d /data/backup/];thenMkdir–p /data/backup/elseechoThe Directory alreadyexists,please exitfi
注解:if…;then …else ..fi:为if条件语句,!叹号表示反义“不存在“,-d代表目录。
这门课程的学习主要是在reading中完成的,视频讲解也穿插在了reading中 故按照CS 61A 2018的参考书的章节作为分段,记录章节的重点信息 之前的内容比较简单,故本章从1.5节开始记录
1.5 Control reading的网址:http://composingprograms.com/pages/15-control.html 1.5.1 Statements Control statements are statements that control the flow of a program's execution based on the results of logical comparisons. Statements differ fundamentally from the expressions that we have studied so far. They have no value. Instead of computing something, executing a control statement determines what the interpreter should do next. statement与expression的区别: If you want to do something with the result of an expression, you need to say so: you might store it with an assignment statement or return it with a return statement.
安装所需环境 //一键安装上面四个依赖yum -y install gcc-c++ gcc zlib zlib-devel pcre pcre-devel openssl openssl-devel
2、创建nginx目录并下载安装包 //进入usr/local目录 cd /usr/local //创建nginx目录 mkdir nginx //进入nginx目录 cd nginx //下载tar包 wget http://nginx.org/download/nginx-1.13.7.tar.gz //解压tar tar -xvf nginx-1.13.7.tar.gz 3、安装nginx //进入nginx目录 cd /usr/local/nginx/nginx-1.13.7 //执行命令 ./configure//执行命令 考虑到后续安装ssl证书 添加两个模块 ./configure --with-http_stub_status_module --with-http_ssl_module //执行make命令(要是执行不成功请检查最开始安装的四个有没有安装成功) make //执行make install命令 make install 4、启动nginx //进入/usr/local/nginx/sbin目录,输入./nginx即可启动nginx ./nginx/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf 配置nginx.conf # 打开配置文件 vi /usr/local/nginx/conf/nginx.conf 将端口号改成8089(随便挑个端口),因为可能apeache占用80端口,apeache端口尽量不要修改,我们选择修改nginx端口。
将localhost修改为你服务器的公网ip地址。
重启nginx
/usr/local/nginx/sbin/nginx -s reload //关闭nginx ./nginx -s quit 或者 ./nginx -s stop //重启nginx .