git
git config --global mergetool.keepBackup false //配置git mergetool不产生*.orig文件
git push --set-upstream origin br_19A_s00428293_ci
git branch --set-upstream-to=origin/br_19A_s00428293_ci
git remote set-url origin git@code.huawei.com:5G_BTS/5G_BTS_L3_CODE.git //修改远程库的地址
git pull -p //在本地删除远程已删除的分支
git revert HEAD //提交完全反向的git commit
git reset HEAD <file> //取消git add的修改
git checkout . && git clean -xdf //放弃本地所有修改,包括untracked files
git config --global core.autocrlf false //解决windows和linux换行符不兼容的问题
git checkout [远程分支] + git pull //直接查看远程分支的代码
git clone -b [远程分支名] 仓库地址
git remote -v //查看远程源地址
git add -A //所有改变的文件
add . //创建文件和编辑文件
add -u //删除文件和编辑文件
cpp
segmentation fault 段错误;断点调试,添加监视
fstream infile("gNodeB_1_dbglog.DBG", ios::binary|ios::in);
while(infile.peek()!=EOF) 一直读到文件结尾处
infile.eof()返回true时是读到文件结束符0xFF,而文件结束符是最后一个字符的下一个字符
ios::beg 文件开头(beg是begin的缩写),这是默认值。
ios::cur 指针当前的位置(cur是current的缩写)。
ios::end 文件末尾。
linux
# 两步解决device or resource busy
lsof +D /path; umount /path
# 判断-fail是否在字符串file中 if [[file =~ -fail ]] # 或if [ file ={file/-fail/} ]
# 延迟执行脚本
sleep 1s [1m 1h 1d]
# 脚本的关键语句一定要验证返回码
set -e # 放在开头,则任何一个命令返回non-zero,终止脚本
# 调用另一个脚本的3种方式:sh/exec/source
# 新开sub-shell;同一个shell,但exec行之后的内容不再执行;同一个shell,能共享变量和环境变量
# 将test1中的所有文件和文件夹复制到test2
cp -r /TEST/test1/* /TEST/test2
# SUSE/Red Hat是企业级应用Linux的正统:‘export环境变量’ 放在/etc/profile; ‘自启动’ 放在/etc/init.d/after.local
find ./ -name mysql | xargs rm -rf
sed/awk/grep
# bash不支持浮点运算,借助awk处理
sumArr[i]=(awk "BEGIN{print {sumArr[i]}+value}") # 判断某个字符串是否是test的某一行 if grep -Fxq "testStr" test;then echo true;else echo false;fi # 提取文本文件中的指定字符串 grep 'status="run"' hlt_test_cecp_cu_ceim.xml | awk '{print2 5}' | sed 's/"/ /g;s/name=//;s/state=//;s/^/testcase:/' grep 'status="run"' hlt_test_cecp_cu_ceim.xml | cut -d '"' -f 2,8 | sed 's/"/ /;s/^/testcase: /' # 输出文本的最后5行 sed '{:jump;q;N;5,D;b jump}' test # 给所有文本行编号 sed '=' test | sed 'N;s/\n/ /' # 反序输出文本行 sed '1!G;h;!d' test # 或sed -n '1!G;h;p' test(两种方式在加了-i后有区别) # 删除line 3前的空白行 sed '/^/{N;/line 3/D}' test
# 允许用其他字符(!)作为分隔符
sed 's!/bin/bash!/bin/csh!' test
# 批量替换目录下所有文件中的字符串
sed -i "s/-j8/-j30/g" grep "\-j8" -rl ./
# 删除某一行后面的所有行
sed -i '/run.sh.log 2>&1/{p;:a;N;!ba;d}' test # sed使用多个命令;使用单引号的情况下,使用'"var"'引用变量
sed -e 'command1' -e 'command2' ... -e 'commandN' files
# 正则:^ $ . * [] < >
cmd
# 注释
1、:: 注释内容(第一个冒号后也可以跟任何一个非字母数字的字符)
2、rem 注释内容(不能出现重定向符号和管道符号)
3、%注释内容%(可以用作行间注释,不能出现重定向符号和管道符号)
4、:标签 注释内容(可以用作标签下方段的执行内容)
# 不显示后续命令行
@echo off
# 上一条语句的返回值
echo %errorlevel%
# 实际调用
taskkill /f /im uDeck.exe >nul 2>nul
start "" "C:\Program Files (x86)\Huawei\uDeck\uDeck.exe"
call c:\ucdos\ucdos.bat
位运算
或、与、非、异或(同0异1)、左移、右移
| & ~ ^ << >>
1)x & (x-1) 消去x最后一位的1
2)a ^ b ^ b = a
3)a&&5/a不会导致被零除;p&&*p++不会引用空指针
递归
1)把握住关键:初始条件;出口条件;递归的推进情况。
广泛的应用领域:dynamic programming; DFS; BFS; veb tree; 二叉树;图。
递归代码的执行顺序和平常的思维不一致,它不断地调用自身直到一个停止条件的满足,然后再回溯到第一个节点。
2)多刷题目:图的广度、深度遍历、动态规划等等。一定要学会递归的解决问题,但是要避免写递归的程序,设计出相应的非递归版本。
3)所有的递归程序,都可以改写成非递归的方法,但不得不维护一个调用栈,以达到跟递归一样的效果。
递归的书写效率高,但执行效率不一定高,调用栈大小有限,而递归的深度不好估计,可能造成调用栈溢出;在栈上开辟新空间、分配局部变量的时间也是不小的。
4)递归通过内部复杂精巧的机制,即程序栈的使用,以消耗大量内存为代价,做出了需要额外设计才能做到的事。
类比:提供一个大的stack,函数调用是往stack里丢东西,函数执行过程是在stack顶做“小动作”,函数返回是在栈顶踢出去一个元素。