CloudJavaRegular

一、基础规范
(1)必须使用InnoDB存储引擎
解读:支持事务、行级锁、并发性能更好、CPU及内存缓存页优化使得资源利用率更高

(2)新库默认使用utf8mb4字符集
解读:utf8mb4是utf8的超集,emoji表情以及部分不常见汉字在utf8下会表现为乱码,故需要升级至utf8mb4。标准,万国码,无需转码,无乱码风险
阿里云上RDS服务如果要从utf8升级为utf8mb4,需要重启实例

(3)数据表、数据字段必须加入中文注释
解读:N年后谁tm知道这个r1,r2,r3字段是干嘛的

(4)禁止使用存储过程、视图、触发器、Event
解读:高并发大数据的互联网业务,架构设计思路是“解放数据库CPU,将计算转移到服务层”,并发量大的情况下,这些功能很可能将数据库拖死,业务逻辑放到服务层具备更好的扩展性,能够轻易实现“增机器就加性能”。数据库擅长存储与索引,CPU计算还是上移吧

(5)禁止存储大文件或者大照片
解读:为何要让数据库做它不擅长的事情?大文件和照片存储在文件系统,数据库里存URI多好

二、命名规范
(6)只允许使用内网域名,而不是ip连接数据库

(7)线上环境、开发环境、测试环境数据库内网域名遵循命名规范

(8)库名、表名、字段名:小写,下划线风格,不超过32个字符,必须见名知意,禁止拼音英文混用

(9)表名t_xxx,非唯一索引名idx_xxx,唯一索引名uniq_xxx

三、表设计规范
(10)单实例表数目必须小于500

(11)单表列数目必须小于30

(12)表必须有主键,例如自增主键
解读:
a)主键递增,数据行写入可以提高插入性能,可以避免page分裂,减少表碎片提升空间和内存的使用
b)主键要选择较短的数据类型, Innodb引擎普通索引都会保存主键的值,较短的数据类型可以有效的减少索引的磁盘空间,提高索引的缓存效率
c) 无主键的表删除,在row模式的主从架构,会导致备库夯住

(13)禁止使用外键,如果有外键完整性约束,需要应用程序控制
解读:外键会导致表与表之间耦合,update与delete操作都会涉及相关联的表,十分影响sql 的性能,甚至会造成死锁。高并发情况下容易造成数据库性能,大数据高并发业务场景数据库使用以性能优先

四、字段设计规范
(14)必须把字段定义为NOT NULL并且提供默认值
解读:
a)null的列使索引/索引统计/值比较都更加复杂,对MySQL来说更难优化
b)null 这种类型MySQL内部需要进行特殊处理,增加数据库处理记录的复杂性;同等条件下,表中有较多空字段的时候,数据库的处理性能会降低很多
c)null值需要更多的存储空,无论是表还是索引中每行中的null的列都需要额外的空间来标识
d)对null 的处理时候,只能采用is null或is not null,而不能采用=、in、<、<>、!=、not in这些操作符号。如:where name!=’shenjian’,如果存在name为null值的记录,查询结果就不会包含name为null值的记录

(15)禁止使用TEXT、BLOB类型
解读:会浪费更多的磁盘和内存空间,非必要的大量的大字段查询会淘汰掉热数据,导致内存命中率急剧降低,影响数据库性能

(16)禁止使用小数存储货币
解读:使用整数吧,小数容易导致钱对不上
解决方案:使用“分”作为单位,这样数据库里就是整数了。

(17)必须使用varchar(20)存储手机号
解读:
a)涉及到区号或者国家代号,可能出现+-()
b)手机号会去做数学运算么?
c)varchar可以支持模糊查询,例如:like“138%”

(18)禁止使用ENUM,可使用TINYINT代替
解读:
a)增加新的ENUM值要做DDL操作
b)ENUM的内部实际存储就是整数,你以为自己定义的是字符串?

五、索引设计规范
(19)单表索引建议控制在5个以内

(20)单索引字段数不允许超过5个
解读:字段超过5个时,实际已经起不到有效过滤数据的作用了

(21)禁止在更新十分频繁、区分度不高的属性上建立索引
解读:
a)更新会变更B+树,更新频繁的字段建立索引会大大降低数据库性能
b)“性别”这种区分度不大的属性,建立索引是没有什么意义的,不能有效过滤数据,性能与全表扫描类似

(22)建立组合索引,必须把区分度高的字段放在前面
解读:能够更加有效的过滤数据

六、SQL使用规范
(23)禁止使用SELECT *,只获取必要的字段,需要显示说明列属性
解读:
a)读取不需要的列会增加CPU、IO、NET消耗
b)不能有效的利用覆盖索引
c)使用SELECT *容易在增加或者删除字段后出现程序BUG

(24)禁止使用INSERT INTO t_xxx VALUES(xxx),必须显示指定插入的列属性
解读:容易在增加或者删除字段后出现程序BUG

(25)禁止使用属性隐式转换
解读:SELECT uid FROM t_user WHERE phone=13812345678 会导致全表扫描,而不能命中phone索引,猜猜为什么?(这个线上问题不止出现过一次)

(26)禁止在WHERE条件的属性上使用函数或者表达式
解读:SELECT uid FROM t_user WHERE from_unixtime(day)>='2017-02-15' 会导致全表扫描
正确的写法是:SELECT uid FROM t_user WHERE day>= unix_timestamp('2017-02-15 00:00:00')

(27)禁止负向查询,以及%开头的模糊查询
解读:
a)负向查询条件:NOT、!=、<>、!<、!>、NOT IN、NOT LIKE等,会导致全表扫描
b)%开头的模糊查询,会导致全表扫描

(28)禁止大表使用JOIN查询,禁止大表使用子查询
解读:会产生临时表,消耗较多内存与CPU,极大影响数据库性能

(29)禁止使用OR条件,必须改为IN查询
解读:旧版本Mysql的OR查询是不能命中索引的,即使能命中索引,为何要让数据库耗费更多的CPU帮助实施查询优化呢?

(30)应用程序必须捕获SQL异常,并有相应处理

行为规范:
(31)禁止使用应用程序配置文件内的帐号手工访问线上数据库

(32)禁止非DBA对线上数据库进行写操作,修改线上数据需要提交工单,由DBA执行,提交的SQL语句必须经过测试

(33)分配非DBA以只读帐号,必须通过VPN+跳板机访问授权的从库

(34)开发、测试、线上环境隔离
Java编码规范 是否满足命名规约 包名
类名和接口名
方法名
变量名
常量名
编码格式是否良好 每行代码宽度为120个字符
使用Ctrl+Shift+F进行格式化
注释是否完整清晰 注释是否完整
意义是否明确
语法是否正确
是否存在多余的代码 是否有被注释掉的方法和变量等
是否有未使用的方法和变量等
是否有重复的代码
是否存在不必要的Import语句
提示信息是否正确 意义是否明确
语法是否正确
是否做国际化处理(如果要求)
数组声明是否正确,如:使用int[] packets,而非int packets[]
相对独立的程序块与块之间是否有空行
是否尽量避免使用deprecated方法
需要换行的话,尽量用 println 来代替在字符串中使用"\n"。
是否用pathSeptarator()方法代替路径中的“:”或“;”  
是否用separator()方法代替路径中的“/”或“\”
If,While,for语句块为单行时,是否使用{}
是否存在魔法数字(应根据其意义,定义成常量)
连接多个字符串时,是否使用StringBuffer对象,而不是String
是否存在空的Catch语句
 
在保证代码规范的基础上,请对程序逻辑和性能等方面进行检查,可以协助使用以下工具:
1.FindBugs,PMD检查程序潜在的缺陷
2.cobertura检查单体测试覆盖率
方法相关 方法的参数是否做了适当校验
数组类结构是否做了边界校验
变量在使用前是否做了初始化
是否存在体积过于庞大的方法
对命令行执行的代码,需要详细检查命令行参数,如果不满足,需打印Usage
方法API是否被良好定义,即是否尽量面向接口编程,便于维护和重构
对于循环语句 循环结束条件是否准确
是否避免了死循环的产生
不要在循环中构造和释放对象
Java对象处理 对象生命周期的处理,是否对象的reference已经失效,能够设置为null,并被回收
在对象的传值和传参方面有无问题,对象的clone方法使用是否过度
是否大量经常的创建临时对象
是否尽量使用局部对象(堆栈对象)
在只需要对象reference的地方是否创建了新的对象实例
 
数据库方面 数据库设计或SQL语句是否便于移植(注意和性能方面会存在冲突)
数据库资源是否正常关闭和释放
数据库访问模块是否正确封装,便于管理和提高性能
是否采用合适的事务隔离级别
是否采用PreparedStatement以提高性能
 
异常处理方面 每次当方法返回时是否正确处理了异常,如最简单的处理,记录日志到日志文件中
是否对数据的值和范围进行合法性校验,包括采用断言(assertion)
在出错路径上是否所有的资源和内存都已经释放
所有抛出的异常都得到正确的处理,特别是对子方法抛出的异常,在整个调用栈中必须能够被捕捉并处理
当调用导致错误发生时,方法的调用者应该得到一个通知
是否对错误处理部分的代码进行测试,很多代码在正常情况下执行良好,而一旦出错,整个系统就崩溃
 
面向对象方面 类设计和抽象是否合适
是否符合面向接口编程的思想
是否采用合适的设计范式
 
性能方面 在海量数据出现时,队列,表,文件,在传输,upload等方面是否会出现问题,有无控制,如分配的内存块大小,队列长度等控制参数
对hashtable,vector等集合类数据结构的选择和设置是否合适,如正确设置capacity,load factor等参数,数据结构是否是同步的
有无滥用String对象的现象,在处理 String 的时候要尽量使用 StringBuffer 类;在StringBuffer的构造函数里设定它的初始化容量,这样可以明显地提升性能
是否采用通用的线程池、对象池模块等cache技术以提高性能
类的接口是否定义良好,如参数类型等,避免内部转换
是否采用内存或硬盘缓冲机制以提高效率
并发访问时的应对策略
I/O方面是否使用了合适的类或采用良好的方法以提高性能(如减少序列化,使用buffer类封装流等)
同步方法的使用是否得当,是否过度使用,避免太多的使用 synchronized 关键字
递归方法中的叠代次数是否合适,应该保证在合理的栈空间范围内
如果调用了阻塞方法,是否考虑了保证性能的措施
错误发生时是否所有的对象被释放,如数据库连接、Socket、文件等
 
线程相关 需要被多个线程访问的对象是否线程安全,检查有无通过同步方法保护
同步对象上的锁是否按相同的顺序获得和释放以避免死锁,注意错误处理代码
是否存在可能的死锁或是竞争,当用到多个锁时,避免出现类似情况:线程A获得锁1,然后锁2,线程B获得锁2,然后锁1
在保证线程安全的同时,要注意避免过度使用同步,导致性能降低
 
单体测试相关 是否每个公共接口方法都有对应的单体测试程序
是否针对多种条件值进行测试
是否对异常系进行测试
其他 日志是否正常输出和控制
配置信息如何获得,是否有硬编码

概述: 主要存放新产品研发的架构部署,架构解决方案,持续集成,持续部署和自动化的一些资料等。
###################################################################################
新产品自动化测试方案和计划 Test Plan
01 梳理新产品自动化的核心业务模块和一些数据业务 包括夜审 价格算法 和房量算法
02 使用SQL语句和业务脑图 梳理清楚 核心模块的 业务流程用例
03 使用Python SQL 开发和实现 业务核心的自动化 用例
04
05
使用自动化 用例 集成CI Jenkins 对核心业务进行验证
JMeter 核心接口压力测试 压测
################################################################################### 日志测试SQL语句##############
use log_dev database, change your table name and timestamp day value, and excute it
select log_cd,func_cd,log_dhms from log_operate_1709 where created_date >= to_timestamp('2017-09-11', 'yyyy-mm-dd')
and log_cd <> '日志类型' order BY created_date DESC;
select log_cd,func_cd,log_dhms,infurl,infnm from log_pdt_data_1709 where created_date >= to_timestamp('2017-09-11', 'yyyy-mm-dd')
and log_cd <> '日志类型' ORDER BY created_date DESC;
--testing log SQL statements
select log_cd,func_cd,log_dhms,from_ip from log_operate_1709 where
created_date >= to_timestamp('2017-09-14', 'yyyy-mm-dd')
and log_cd <> '日志类型' order BY created_date DESC;
select log_cd,func_cd,log_dhms,infurl,infnm,from_ip from log_pdt_data_1709 where
created_date >= to_timestamp('2017-09-14', 'yyyy-mm-dd')
and log_cd <> '日志类型' ORDER BY created_date DESC;
--count log_operate_1709 and log_pdt_data_1709 tables current date record
select count(log_cd) from log_operate_1709 where log_cd <> '日志类型' and
created_date >= to_timestamp('2017-09-14', 'yyyy-mm-dd');
select count(log_cd) from log_pdt_data_1709 where log_cd <> '日志类型' and
created_date >= to_timestamp('2017-09-14', 'yyyy-mm-dd');
#################################################################################################################
白盒测试 需求用例 名词解释 houseblock锁房 RT+ 只改房含 RT* 不管改不改房含 只要改了房价 noshow 预定未到 结账folio 就是结账账单-已结账下面 下个+下面的
001.房价=====================================================
每日房价记录数与住店时间一致
houseblock记录数与住店时间一致
每日收取的房含要出现在每日房含表中的每一天,首日房含只能出现在首日
一期所有每日房价的价格代码、折扣一样
RT+只能有一套房含
RT只能有一套房含,且每日价格设定一样
002.预订=====================================================
没有来期大于等于今日的noshow账户
没有离期小于今日的在店账户
没有来期小于今日的预订账户
没有来期大于今日的在店账户
每个账户至少有一个住店客人,且账户表里的住店客人ID对应的存在
每个账户只能有一个预订人,且账户表里的预订人ID对应的存在
003.账务====================================================
客账交易金额与账务明细金额一致,12个细项金额也一致
账单的余额为0
已结账户余额为0
结账folio里的几个金额与明细一致
转账folio里的几个金额与明细一致
004.客房====================================================
空房态没有在店账户
占用房态必有在店账户
维修房态有对应的维修记录
houseblock
###################################################################
白盒测试 by 20170622
房价 housingprice_test001 housingprice_test002 housingprice_test003
1.每日房价记录数与住店时间一致
SELECT country, SUM( CASE WHEN sex = '1' THEN population ELSE 0 END), --男性人口 SUM( CASE WHEN sex = '2' THEN population ELSE 0 END) --女性人口 FROM Table_A GROUP BY country
2.houseblock记录数与住店时间一致
select * from emp where empno=7369 for update;
3.每日收取的房含要出现在每日房含表中的每一天,首日房含只能出现在首日
select * from emp where empno=7369 for update;
4.一期所有每日房价的价格代码、折扣一样
select * from emp where empno=7369 for update;
5.RT+只能有一套房含
select * from emp where empno=7369 for update;
6.RT
只能有一套房含,且每日价格设定一样
select * from emp where empno=7369 for update;
7.每日房含12个分项的合计与每日房价的一致
select * from emp where empno=7369 for update;

预订 reserve_test001 reserve_test002
1.没有来期大于等于今日的noshow账户
SELECT arr_dt,dpt_dt,acct_no,resv_no FROM rsv_account WHERE acct_stus='NSW' AND arr_dt>今日
2.没有离期小于今日的在店账户
SELECT arr_dt,dpt_dt,acct_no,resv_no FROM rsv_account WHERE acct_stus='STY' AND dpt_dt<今日
3.没有来期小于今日的预订账户
SELECT arr_dt,dpt_dt,acct_no,resv_no FROM rsv_account WHERE acct_stus='RSV' AND arr_dt<今日
4.没有来期大于今日的在店账户

SELECT arr_dt,dpt_dt,acct_no,resv_no FROM rsv_account WHERE acct_stus='STY' AND arr_dt>今日
5.每个账户至少有一个住店客人,且账户表里的住店客人ID对应的存在

SELECT resv_no,acct_no,acct_stus FROM rsv_account WHERE acct_stus IN ('RSV','STY','WAT') AND resv_no NOT IN ( SELECT DISTINCT(M.resv_no) FROM rsv_account M INNER JOIN rsv_account_guest D ON M.resv_no=D.resv_no AND M.acct_no=D.acct_no WHERE acct_stus IN ('RSV','STY','WAT') AND guest_flg='RE' ORDER BY M.resv_no)
6.每个账户只能有一个预订人,且账户表里的预订人ID对应的存在

(SELECT guest_id FROM rsv_account m INNER JOIN rsv_account_guest d ON m.resv_no=d.resv_no AND m.bkguest_id=d.guest_id WHERE acct_stus IN ('RSV','STY','WAT') AND guest_flg='BK'
ORDER BY m.resv_no,d.acct_no)
SELECT acct_stus,resv_no,acct_no FROM rsv_account WHERE acct_stus IN ('RSV','STY','WAT') AND acct_no IN ( SELECT d.acct_no FROM rsv_account m INNER JOIN rsv_account_guest d ON m.resv_no=d.resv_no AND m.acct_no=d.acct_no WHERE acct_stus IN ('RSV','STY','WAT') AND guest_flg='BK' GROUP BY d.acct_no HAVING COUNT(*)>1)

账务 financial_test001 financial_test002

1.客账交易金额与账务明细金额一致,12个细项金额也一致
金额一致:
SELECT * from (SELECT mtrn_id,SUM(trntot_amt) as amt1 FROM hpt_fin_transaction GROUP BY mtrn_id) A, (SELECT trn_id,SUM(trn_amt) as amt2 FROM hpt_fin_transaction_jrnl WHERE jrnl_typ='REVN' GROUP BY trn_id) B WHERE A.mtrn_id=B.trn_id AND amt1<>amt2
细项一致:
SELECT * FROM (SELECT mtrn_id,acct_no,room_num,trn_cd,trn_drpt,trntot_amt AS amt1,trn_net+trn_tax1+trn_tax2+trn_tax3+trn_tax4+trn_tax5+trnsvc_net+trnsvc_tax1+trnsvc_tax2+trnsvc_tax3+trnsvc_tax4+trnsvc_tax5 AS amt2 FROM hpt_fin_transaction) A WHERE A.amt1<>A.amt2
2.账单的余额为0
SELECT acct_no,bill_no,SUM(trntot_amt) from hpt_fin_transaction WHERE COALESCE(bill_no,'')<>'' GROUP BY acct_no,bill_no HAVING SUM(trntot_amt)>0 ORDER BY acct_no
3.已结账户余额为0
SELECT a.acct_no,SUM(trntot_amt) from rsv_account a LEFT JOIN hpt_fin_transaction t ON a.acct_no=t.acct_no WHERE a.acct_stus='OUT' GROUP BY a.acct_no HAVING SUM(trntot_amt)>0
4.结账folio里的几个金额与明细一致
SELECT F.acct_no,F.folio_no,credit_amt,debit_amt,check_amt,T.acct_no,T.bill_no,T.normal,trnamt FROM hpt_fin_folio F LEFT JOIN (SELECT acct_no,bill_no,normal,sum(trntot_amt) AS trnamt FROM hpt_fin_transaction WHERE bill_no<>'' GROUP BY acct_no,bill_no,normal ORDER BY acct_no,bill_no) T ON F.acct_no=T.acct_no AND F.folio_no=T.bill_no WHERE F.folio_typ='BILL' AND COALESCE(credit_amt,0)<>COALESCE(debit_amt,0) OR CASE T.normal WHEN 'C' THEN COALESCE(debit_amt,0)<>trnamt WHEN 'D' THEN COALESCE(credit_amt,0)<>trnamt ELSE 1=1 END

5.转账folio里的几个金额与明细一致
SELECT F.acct_no,F.folio_typ,F.folio_no,credit_amt,debit_amt,check_amt,J.trn_amt from hpt_fin_folio F LEFT JOIN (SELECT acct_no,pkgfolio_no,sum(trn_amt) AS trn_amt FROM hpt_fin_transaction_jrnl WHERE jrnl_typ='MOVE' GROUP BY acct_no,pkgfolio_no ORDER BY acct_no,pkgfolio_no) J ON F.acct_no=J.acct_no AND F.folio_no=J.pkgfolio_no WHERE F.folio_typ='MVIN' OR F.folio_typ='MVOUT' AND (COALESCE(credit_amt,0)+COALESCE(debit_amt,0)<>COALESCE(check_amt,0) OR COALESCE(check_amt,0)<>COALESCE(trn_amt,0))
SELECT F.acct_no,F.folio_typ,F.folio_no,credit_amt,debit_amt,check_amt,J.normal,J.trn_amt from hpt_fin_folio F LEFT JOIN (SELECT acct_no,pkgfolio_no,normal,sum(trn_amt) AS trn_amt FROM hpt_fin_transaction_jrnl WHERE jrnl_typ='MOVE' GROUP BY acct_no,pkgfolio_no,normal ORDER BY acct_no,pkgfolio_no,normal) J ON F.acct_no=J.acct_no AND F.folio_no=J.pkgfolio_no WHERE F.folio_typ='MVIN' OR F.folio_typ='MVOUT' AND CASE J.normal WHEN 'C' THEN COALESCE(credit_amt,0)<>J.trn_amt WHEN 'D' THEN COALESCE(debit_amt,0)<>J.trn_amt ELSE 1=1 END

客房 hotelroom_test001 hotelroom_test002
1.空房态没有在店账户
SELECT arr_dt,dpt_dt,resv_no,acct_no,room_num FROM rsv_account WHERE acct_stus='STY' AND room_num IN (SELECT room_num FROM hpt_hk_room WHERE fo_room_stus='V')
2.占用房态必有在店账户
SELECT arr_dt,dpt_dt,resv_no,acct_no,room_num FROM rsv_account WHERE acct_stus='STY' AND room_num IN (SELECT room_num FROM hpt_hk_room WHERE fo_room_stus<>'O')
3.维修房态有对应的维修记录
SELECT room_num FROM hpt_hk_room WHERE room_stus='OOO' AND room_num NOT IN (SELECT room_num FROM hpt_hk_room_repair WHERE repair_typ='OOO' AND start_dt<=当日 AND end_dt>=当日)
PMS Clean SQL Statements
####################delete clean all data################
delete from grp_crm_corp;
delete from grp_crm_corp_address;
delete from grp_crm_corp_blacklist;
delete from grp_crm_corp_contact;
delete from grp_crm_corp_contactway;
delete from grp_crm_corp_contract;
delete from grp_crm_corp_manageunit;
delete from grp_crm_corp_notice;
=====================================================
delete from grp_crm_profile;
delete from grp_crm_profile_address;
delete from grp_crm_profile_blacklist;
delete from grp_crm_profile_certificate;
delete from grp_crm_profile_class;
delete from grp_crm_profile_company;
delete from grp_crm_profile_contactway;
delete from grp_crm_profile_notice;
#############################################################################################################
delete from hpt_fin_folio;
delete from hpt_fin_transaction;
delete from hpt_fin_transaction_jrnl;
delete from rsv_account;
delete from rsv_account_guest;
delete from rsv_account_package;
delete from rsv_account_package_price;
delete from rsv_account_rate;
delete from rsv_account_rate_copy;
delete from rsv_account_roomrequest;
delete from rsv_houseblock;
update hpt_hk_room set room_stus='V',clean_stus='C',fo_room_stus='V'

悲观锁(Pessimistic Lock)/ 乐观锁(Optimistic Lock) :
悲观锁(Pessimistic Lock) 每次获取数据的时候,都会担心数据被修改,所以每次获取数据的时候都会进行加锁,确保在自己使用的过程中数据不会被别人修改,使用完成后进行数据解锁。由于数据进行加锁,期间对该数据进行读写的其他线程都会进行等待。
乐观锁(Optimistic Lock):每次获取数据的时候,都不会担心数据被修改,所以每次获取数据的时候都不会进行加锁,但是在更新数据的时候需要判断该数据是否被别人修改过。如果数据被其他线程修改,则不进行数据更新,如果数据没有被其他线程修改,则进行数据更新。由于数据没有进行加锁,期间该数据可以被其他线程进行读写操作。 适用场景:
悲观锁:比较适合写入操作比较频繁的场景,如果出现大量的读取操作,每次读取的时候都会进行加锁,这样会增加大量的锁的开销,降低了系统的吞吐量。
乐观锁:比较适合读取操作比较频繁的场景,如果出现大量的写入操作,数据发生冲突的可能性就会增大,为了保证数据的一致性,应用层需要不断的重新获取数据,这样会增加大量的查询操作,降低了系统的吞吐量。
总结:两种所各有优缺点,读取频繁使用乐观锁,写入频繁使用悲观锁。houseblock

#################################################################
1016 ./pullCode.sh
1017 cd jw-source/
1018 git log --stat
1019 git log --sortstat
1020 git log --stat --sortstat
1021 git log --sort stat
1022 git log --shortstat
1023 git log --author="jiann" --pretty=tformat: --numstat | gawk '{ add += $1 ; subs += $2 ; loc += $1 - $2 } END { printf "added lines: %s removed lines : %s total lines: %s\n",add,subs,loc }' -
1024 git log --author="bwliu" --pretty=tformat: --numstat | gawk '{ add += $1 ; subs += $2 ; loc += $1 - $2 } END { printf "added lines: %s removed lines : %s total lines: %s\n",add,subs,loc }' -
1025 git log --shortstat --author="jiann"
1026 git log --author="bwliu" --pretty=tformat: --numstat | gawk '{ add += $1 ; subs += $2 ; loc += $1 - $2 } END { printf "added lines: %s removed lines : %s total lines: %s\n",add,subs,loc }' -
1027 git log --author="jiann" --pretty=tformat: --numstat | gawk '{ add += $1 ; subs += $2 ; loc += $1 - $2 } END { printf "added lines: %s removed lines : %s total lines: %s\n",add,subs,loc }' -
1028 git log --author="jiann" --pretty=tformat: --numstat | gawk '{ add += $1 ; subs += $2 ; loc += $1 - $2 } END { printf "added lines: %s removed lines : %s total lines: %s\n",add,subs,loc }' -
1029 git log --shortstat --author="jiann" --since=1.days
1030 git log --shortstat --author="jiann" --since=1.days|wc -l
1031 git log --pretty='%aN' | sort | uniq -c | sort -k1 -n -r | head -n 5
1032 cd ..
1033 ls
1034 cd cw-hms-source/
1035 git log --pretty='%aN' | sort | uniq -c | sort -k1 -n -r | head -n 5
1036 cd ..
1037 ls
1038 cd cw-unit-interface/
1039 git log --pretty='%aN' | sort | uniq -c | sort -k1 -n -r | head -n 5
1040 cd ..
1041 ls
1042 cd cw-hms-web/
1043 git log --pretty='%aN' | sort | uniq -c | sort -k1 -n -r | head -n 5
1044 cd ..
1045 ls
1046 ./pullCode.sh
1047 clear
1048 ls
1049 ./pullCode.sh
1050 cleaer
1051 clear
1052 ls
1053 ./pullCode.sh
1054 clear
1055 ./pullCode.sh
1056 clear
1057 ./pullCode.sh
1058 clear
1059 ./pullCode.sh
1060 clear
1061 ./pullCode.sh
1062 cd cw-unit-interface/
1063 touch cwdbsqlscript.sql
1064 cd ..
1065 clear
1066 ls
1067 ./pullCode.sh
1068 clear
1069 ./pullCode.sh
1070 clear
1071 ls
1072 clear
1073 ./pullCode.sh
1074 perl -pi -e "s/aaa/bbb/gi" /mnt/cw-unit-interface/docker-center/a.txt
1075 cd /mnt
1076 ls
1077 ./pullCode.sh
1078 clear
1079 ls
1080 ./pullCode.sh
1081 mkdir softwarepms
1082 exit
1083 mkdir testdir
1084 sudo mkdir testdir
1085 su
1086 cd /media/softwareluke/Ubuntu\ 17.0/
1087 ls
1088 cd pmscodes/
1089 ls
1090 clear
1091 ls
1092 git clone -b develop git@gogs.jwops.cn:CW-NRD/cw-hms-web.git
1093 cd ..
1094 ls
1095 ls -ll pmscodes/
1096 mkdir softwarepmscode
1097 ls -ll
1098 clear
1099 cd /mnt
1100 ls
1101 mkdir jwpmsdir
1102 ls
1103 rm -rf jw-source
1104 rm -rf cw-hms-source
1105 clear
1106 ls
1107 cd /mnt
1108 ls
1109 cd jwpmsdir/
1110 ls
1111 touch 111 aaa
1112 222 bbb
1113 333 cccc
1114 ls
1115 touch a.txt b.txt
1116 vim a.txt
1117 vim b.txt
1118 awk 'NR==FNR{a[$1]=$2;}NR!=FNR && a[$1]{print $1","a[$1]","$2","$3}' a.txt b.txt
1119 awk -v OFS="," 'NR==FNR{a[$1]=$2;} NR!=FNR && $1 in a { print $1,a[$1],$2,$3}' a.txt b.txt
1120 ls
1121 touch repea
1122 vim repea
1123 awk '{for(i=1;i<=NF;i++)a[i]=$i;asort(a);for(i=1;i<=length(a);i++)printf a[i]"\t";printf "\n"}' repea|sort|uniq
1124 awk '{a[$0]=$0;if (!($2 OFS $1 in a)) print a[$0] }' repea
1125 history
1126 ls
1127 awksedshell.sh
1128 touch awksedshell.sh
1129 vim awksedshell.sh
1130 clear

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,198评论 4 359
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,663评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 106,985评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,673评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 51,994评论 3 285
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,399评论 1 211
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,717评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,407评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,112评论 1 239
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,371评论 2 241
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,891评论 1 256
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,255评论 2 250
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,881评论 3 233
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,010评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,764评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,412评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,299评论 2 260

推荐阅读更多精彩内容