緣由
很簡單,用svn合base,出現了各種各樣奇怪的問題,雖然最終沒有造成什么大的線上問題,但過程也是曲折的,耗費個人精力,也占用他人資源,不好不好,一點都不佛系。
究其原因,還是對為什么出現各種沖突不明了,查了些資料,稍微實踐和思考了下,有點理解分享出來。
沖突出現原因
總結起來一句話:在不同版本的同一個位置出現了不同的東西。
具體解釋如下:
- 版本:每一次提交都會是當前項目的一個版本,會有一個編號;
- 不同版本:沖突一定是出現在不同版本間的,通常是出現在相隔兩個版本號的兩個版本之間;
- 同一個位置:這里指的是同一個文件路徑,或者同一個文件路徑下同一個文件中的同一行等;
- 不同的東西:這里說的是不同的代碼,或者不同的路徑,或者不同的文件;
舉個栗子:
- 程序員A在版本1001編寫了文件a和文件b,文件a中第5行代碼為
print("shit happens")
- 程序員BUpdate代碼后,在1001版本上編寫了文件a,把第5行代碼改寫為
print("who says")
- 並上傳代碼,生成版本1002;
- 程序員A發覺代碼不對(拖出去祭天),修改a文件第5行代碼為
print("no shit happens")
- 並提交代碼,svn提示 out of date
- 更新代碼,提示沖突
不想解釋了,自己對照着看吧。
同理,文件的沖突也是這樣,有人刪除了文件,甚至文件夾等
這篇博客:svn conflict 沖突解決 用截圖展示了過程,可以看下。
解決沖突
總結起來一句話:根據改動內容以及項目情況決定。
具體而言,這是一句廢話,但又是最容易忘記的真理。
舉個栗子
- A改了文件b,文件a,刪除了文件c,提交了代碼,版本號1003
- B更新代碼,改動了文件b,改動了文件d,提交代碼,版本號1004
- 經過了多次變動...
- A修改了文件b,提交代碼,有沖突,沖突情況為
- 文件b代碼沖突;
- 文件d代碼沖突
- 文件a tree conflict
- 版本號1100
- 其他
分析下
- 文件b大家都動了,這個時候要特別小心的看別人的代碼是干嘛的,再根據自己代碼的作用進行處理;常規動作是,都保留,排排順序;
- 文件d,程序A從來沒有操作過,應該是不應該出現代碼沖突的,以1009版本代碼為准即可;(當然還是要具體看看哪里出現沖突的,應該是之前代碼不規范書寫導致)
- 文件a出現tree conflict,也就是說a應該是被刪除了,咨詢之前的開發人員,為啥刪了我的a~~~然后刪除他;
- 注意自己的版本號什么的,信息和數據是王道
另外,比如后端程序員合分支遇到前端代碼沖突的,請盡量不要亂動好么~~
以上,以及以下
以上就是我大概踩過的坑了
另外,這兩天還有一些學習記錄下
StringUtils.defaultString
org.apache.commons.lang3.StringUtils.defaultString
String a = "ddd";
String v = StringUtils.defaultString(a,null);
//等價於
String vv = null == a ? null : a;
看似廢物,但是,若是
StringUtils.defaultString(classA.getData().getIou(),null);
null == classA.getData().getIou() ? null : classA.getData().getIou();
哪一個更清爽?
Byte
前兩天,被一個Byte的比較給搞暈了...郁悶
其實就是一篇博客的問題
Java 有8中基本數據類型,分別是byte、int、long、char、float、double、boolean。
1.byte、char的簡單介紹
有時候總是搞不清byte、char,所以就現在好好的整理一下:一個byte型整數在內存中占8位,也就是一個字節. 表數范圍:-128 --127 . (字符類型char 2個字節)。
Java 中整形常量有三種表示方式:
其中8進制的整數常量以0開頭. 16進制的整數以0x或0X開頭,10-15分別a-f開頭(此處的a--f不區分大小寫)來表示.
字符型
字符型通常用於表示單個字節,字符常量必須使用單引號('')括起來.JAVA語言使用16位的Unicode編碼集作為編碼方式,它支持各種語言的字符.
字符常量有三種表示形式:
直接通過單個字符來指定字符常量:例如,'A'、'a'、'8'等。
通過轉義字符表示特殊的字符常量.例如:'\n'、'\t'等。
直接適用Unicode值來表示字符常量.格式是:'\uXXXX',其中XXXX代表一個16的整數.
字符型常量也可以用16進制編碼方式表示,范圍是:'\u0000'----'\uFFFF',一共可以表示65536個字符,其中前256個字符('\u0000'---'\u00FF')和ASCII碼中的字符完全重合.不僅如此,字符型的值也可以作為整數型來使用,但它是無符號整數,即全部是整數,但他是一個16位的無符號整數,表數范圍:0----65535.
如果把一個0---65535內的int型整數賦給char類型的變量,系統會自動把這個int型整數當成char類型來處理。
下面是一個簡單的例子:
public class TestChar { public static void main(String[] args) { //直接指定單個字符作為字符常量 char aChar='a'; //使用轉義字符作為字符常量. char enterChar='\r'; //使用Unicode編碼值來作為字符常量 char ch='\u9999'; System.out.println(ch); //定義一個中字符常量 char zhong='中'; //直接將一個char變量當成int變量類型使用 int zhongValue=zhong; System.out.println(zhongValue); //直接將一個0--65535的int型整數賦值給一個char變量 char c=97; System.out.println(c); } }2.轉義字符
Java中的單引號、雙引號和反斜線都有特殊的用途,應該使用轉義字符的表示形式.
例如我們想在JAVA程序中表示一個絕對路徑:"c:\codes,但這種寫法得不到我們希后一個反斜線組成望的結果,因為JAVA會把反斜線當成轉義字符,所以我們應該寫成如下形式:"c:\codes",只有同時寫兩個反斜線,JAVA會把第一個反斜線當成轉義字符,和后一個反斜線組成真正的斜線.
JAVA中 常用的轉義字符:
\b 退格符
\n 換行符
\r 回車符
\t 制表符
" 雙引號
' 單引號
\ 反斜線
3.強制類型轉換
下面程序示范了強制類型轉換的實例public class NarrowConversion { public static void main(String[] args) { int iValue=233; //強制把一個int類型的值轉換成byte類型的值 byte bValue=(byte) iValue; //將輸出-23 System.out.println(bValue); double dValue=3.98; //強制把一個double型的值轉換為int int i=(int) dValue; System.out.println(i); } }運行后的輸出結果:
-23 3上面程序中,將一個233整型強制類型轉換為byte類型,從而變成了-23,這就是典型的溢出。
現在就上面的結果進行一下分析:
首先我們來了解一知識下計算機的基礎:
所有數字在計算機底層都是以2進制形式存在的 ,原碼就是直接將一個10進制數轉換成2進制數,但計算機是以補碼的形式保存所有的整數。補碼的計算規則如下:正數的補碼和原碼完全相同,負數的補碼是其反碼加1;反碼是對原碼按位取反,除了最高位(符號位)保持不變。
現在繼續,看看上面的轉換問題,下面示范了轉換的過程:
//32位的int型 00000000000000000000000011101001 //轉換為8位的byte型11101001上圖,就是負數補碼和源碼轉換的示意圖!
下面的程序時隨機生成一個6位的字符串!
public class RandomStr { public static void main(String[] args) { //定義一個空的字符串 String result=""; //進行6次循環 for(int i=0;i<6;i++){ //生成一個97--122的int型整數 int intVal=(int) (Math.random() *26+97); //將int 強制轉換為char后連接到result后面 result=result+(char)intVal; } //隨機輸出字符串 System.out.println(result); System.out.println((char)97); System.out.println((char)122); } }
對於我而言,其實就是記得Byte是小型的int就好了..基本類型哦~
java中計時
long begintime = System.currentTimeMillis();
long endtinme=System.currentTimeMillis();
long costTime = (endtime - begintime);
當然,還有啥更精確的計時
也就是說第一種方法計算毫秒級的,這個能精確到納秒級,對於我的level來說,脫褲子放屁誒~
tomcat中war和war explode部署方式
war模式:將WEB工程以包的形式上傳到服務器 ;
war exploded模式:將WEB工程以當前文件夾的位置關系上傳到服務器;
Tomcat部署時war和war exploded區別以及平時踩得坑這篇講的還是挺准確的
所以,我會用tomcat發布自己的東西哈?
