Java基礎相關
1、正規表達式裡,字元串“*”寫成“\\*”,“\”寫成“\\\\”,為什麼?
- 注意以下兩點:
- 1.字元串裡面表示斜杠就需要兩個斜杠如“\\”
- 2.正規表達式裡的斜杠需要轉意,是用“\”标示。
- 是以對于“\\\\”,第一個斜杠是轉義符,第二個斜杠是斜杠本身,第三個斜杠是轉義符,第四個斜杠是斜杠本身。這樣就成了4個斜杠在正規表達式裡面表示一個斜杠。
- 更多知識點:
- 引用說明:有正斜杠與反斜杠之分,正斜杠,一般就叫做斜杠,符号為“/”;反斜杠的符号為“\”。斜杠(/)在JAVA中沒有什麼特别的意義,就是代表一個字元‘/’;
- 反斜杠(\)則不然,它和緊跟着它的那個字元構成轉義字元,如“\n”(表示換行)、“\””(表示字元‘”’)等,是以在字元串中要表示字元’\’要用“\\”來表示,例:如果你這樣定義一個字元串String s = “name\sex”是錯誤的,要這樣定義String s = “name\\sex”;
- 正規表達式比對反斜杠——比對一個反斜杠要用四個反斜杠
- java 正斜杠與反斜杠之分
2、Java中的String.replace()和String.replaceAll()的差別?
- 如果獲得一個Matcher,Matcher m = Pattern.compile(“\\”).matcher(“\\”)将會報錯,你應當這樣寫Matcher m = Pattern.compile(“\\\\”).matcher(“\\”)才是正确且比對的引用
- String類中replace(CharSequence target,CharSequence replacement)方法與replaceAll(String regex, String replacement)方法的差別如下:
public static void main(String[] arg) throws OgnlException { String s ="sdf\\a\\aa"; //把s中的反斜杠\ 替換為\\ System.out.println(s); System.out.println(s.replaceAll("\\\\", "\\\\\\\\")); System.out.println(s.replace("\\", "\\\\")); }
- 上面兩種都傳回相同的替換結果。這裡的關鍵是String.replaceAll()是用regular expression 來作為參數的。但是java本身的字元串對于轉義符\也有類似的處理。首先,java會把“\\\\”解釋成一個字元串“\\”(其中包含兩個char)。接下來,由于replaceAll是以正規表達式作為參數,是以“\\”被解釋成一個regex。對于一個regex來說這就代表着一個字元,就是“\”。對後面的那個8個\來說,最終會被解釋成“\\”。
- 是以假設 String.replaceAll()是以普通字元串,而不是regex作為參數,那麼這樣寫代碼: String target = source.replaceAll(‘\\’, ‘\\\\’); 就可以了。其實就是replace的寫法。
- java 正斜杠與反斜杠之分
- JAVA API
3、什麼是字典序,為什麼字元串數組中最大的串是字典序排在最後的串?
- 根據ASCII排,具體如下:
0-9(對應數值48-59); A-Z(對應數值65-90); a-z(對應數值97-122);
- 标準序: 短在前,長在後,等長的依次比字母
如to < up < cap < cat < too < two <boat < boot < card
- 字典序: 依次比字母(按字典裡的順序比較)
如boat < boot <cap < card < cat < to < too< two < up
- 字典序是不忽略字元的大小寫的,大寫字元排在小寫字元前
如:“ZEBRA” < "alligator"
- Comparable接口的compareTo不忽略字元的大小寫,按照字典排序
public int compareTo(String anotherString) compareTo 按字典順序比較兩個字元串。該比較基于字元串中各個字元的 Unicode 值。将此 String 對象表示的字元序列與參數字元串所表示的字元序列進行比較。如果按字典順序此 String 對象在參數字元串之前,則比較結果為一個負整數。如果按字典順序此 String 對象位于參數字元串之後,則比較結果為一個正整數。如果這兩個字元串相等,則結果為 0;compareTo 隻有在方法 equals(Object) 傳回 true 時才傳回 0。
- 深入Python(1): 字典排序 關于sort()、reversed()、sorted()
- java排序接口–compareTo
Linux基礎相關
1、echo相關知識點:
- cat 和 echo 的差別:
cat:Concatenate FILE(s), or standard input, to standard output. echo: Echo the STRING(s) to standard output.
- echo > 和 ehco >> 的差別:>>是追加,>是覆寫
- 詳細案例點選:echo > 和 echo >>的差別
- shell中echo $+變量與echo ${變量}的差別:
如變量ABC=123, echo $ABC 與 echo ${ABC} 在絕大多數情況下是一緻的 不過後者更好,因為沒有歧義。 如還存在一個變量AB=888 那麼$ABC是什麼呢? 1. $ABC = $AB + "C" = 888 + "C" = 888C 2. $ABC = 123 如果使用${ABC}就沒有這樣的疑惑,SHELL很容易确定你要的就是變量ABC
- echo 字元串 和 echo $字元串 的差別:
echo 字元串-------->列印字元串 echo $字元串------->此時的字元串就相當于一個變量,列印的是變量的值,比如 echo $PATH,這個指令就是在螢幕上輸出環境變量
- @echo off在bat檔案中的作用:
echo [{on off}] [message] Sample:@echo off / echo hello world echo off是關閉回顯的功能。在沒有關閉回顯的情況下,每行指令都會在螢幕上顯示一遍,而關閉回顯後,螢幕就隻顯示指令的執行結果了。當再次出現echo on時下面的語句才為可見的(回顯),echo通常和@一起使用,@放在echo的前面,即是@echo,作用是讓@後面的句子不顯示出來,而@本身也是不顯示的,那麼通過 @echo off 可達到不顯示任何資訊的效果。 舉個例子: @echo off echo 123 顯示的結果為:123 而 echo 123的結果為: echo 123 123
- echo > 和 echo >>的差別
- inux裡echo $與linux echo $[]有什麼差別?
- 求問echo “字元串”和echo $”字元串”的差別
2、什麼是RAID中的chuck size?
- RAID:(Redundant Array of indenpensive Disk) 獨立磁盤備援陣列: 磁盤陣列是把多個磁盤組成一個陣列,當作單一磁盤使用,它将資料以分段(striping)的方式儲存在不同的磁盤中,存取資料時,陣列中的相關磁盤一起動作,大幅減低資料的存取時間,同時有更佳的空間使用率。磁盤陣列利用的不同的技術,稱為RAID level,不同的level針對不同的系統及應用,以解決資料安全的問題。簡單來說,RAID把多個硬碟組合成為一個邏輯扇區,是以,作業系統隻會把它當作一個硬碟。
- 一般高性能的磁盤陣列都是以硬體的形式來達成,進一步的把磁盤存取控制及磁盤陣列結合在一個控制器(RAID controler)或控制卡上,針對不同的使用者解決人們對磁盤輸輸入輸出系統的四大要求:
- (1)增加存取速度,
- (2)容錯(fault tolerance),即安全性
- (3)有效的利用磁盤使用率;
- (4)盡量的平衡CPU,記憶體及磁盤的性能差異,提高主機的整體工作性能。
- Chunk:可以了解為raid分儲資料時每個資料段的大小(通常為32/64/128等這類數字大小)。合理的選擇chunk大小非常重要,若chunk過大可能一塊磁盤上的帶區空間就可以滿足大部分的I/O操作,使得資料的讀寫隻局限于一塊硬碟上,這便不能充分發揮RAID并發的優勢;如果chunk設定過小,任何很小的I/O指令都可能引發大量的讀寫操作,不能良好發揮并發性能,占用過多的控制器總線帶寬,也影響了陣列的整體性能。一般預設為64位元組。
- 詳細資訊請移步:Linux陣列 RAID詳解
Android相關
1、如何自定義繪制圓形進度條?
- 效果圖如下:
- 詳細步驟移步到:Android 動态繪制圓形進度條
計算機基礎相關
1、什麼是海明碼,為什麼說海明碼是具有糾錯功能的校驗碼?
- 海明碼(Hamming Code)是一個可以有多個校驗位,具有檢測并糾正一位錯誤代碼的糾錯碼,是以它也僅用于信道特性比較好的環境中,如以太區域網路中,因為如果信道特性不好的情況下,出現的錯誤通常不是一位。
- 海明碼的檢錯、糾錯基本思想是将有效資訊按某種規律分成若幹組,每組安排一個校驗位進行奇偶性測試,然後産生多位檢測資訊,并從中得出具體的出錯位置,最後通過對錯誤位取反(也是原來是1就變成0,原來是0就變成1)來将其糾正。
- 海明碼糾錯的詳細步驟請移步:
- 你看得懂的海明碼校驗和糾錯原理(一)
- 你看得懂的海明碼校驗和糾錯原理(二)
2、什麼是邏輯異或運算?
- 異或(xor)是一個數學運算符。它應用于邏輯運算。異或的數學符号為“⊕”,計算機符号為“xor”。其運算法則為:
a⊕b = (¬a ∧ b) ∨ (a ∧¬b)
- 如果a、b兩個值不相同,則異或結果為1。如果a、b兩個值相同,異或結果為0。
- 異或也叫半加運算,其運算法則相當于不帶進位的二進制加法:二進制下用1表示真,0表示假,則異或的運算法則為:0⊕0=0,1⊕0=1,0⊕1=1,1⊕1=0(同為0,異為1),這些法則與加法是相同的,隻是不帶進位。
輸入 | 運算符 | 輸入 | 結果 |
---|---|---|---|
1 | ⊕ | 1 | |
1 | ⊕ | 1 | |
⊕ | |||
⊕ | 1 | 1 |
3、了解硬碟的CHS,即柱面(Cylinder),磁頭(Heads),扇區(Sector)。
- 硬碟最基本的組成部分是由堅硬金屬材料制成的塗以磁性媒體的盤片,不同容量硬碟的盤片數不等。每個盤片有兩面,都可記錄資訊。
- 磁道:Track,可以了解為一個圓形盤片由許許多多的同心圓組成,盤片表面上以盤片中心為圓心,不同半徑的同心圓稱為磁道。(硬碟是一個高速旋轉的東西,當磁盤旋轉時,磁頭若保持在一個位置上不動,則磁頭會在磁盤表面劃出一個圓形軌迹,這些圓形軌迹就叫做磁道)
- 扇區:Sector,可以聯想到“扇形區域”,磁盤上的每個磁道被等分為若幹個弧段,這些弧段便是磁盤的扇區,每個扇區可存儲128×2的N次方(N=0.1.2.3)位元組資訊。在DOS中每扇區是128×2的2次方=512位元組,磁盤驅動器在向磁盤讀取和寫入資料時應該以扇區為機關。
- 柱面:Cylinder,硬碟通常由重疊的一組盤片構成,每個盤面都被劃分為數目相等的磁道,并從外緣的0開始編号,具有相同編号的磁道形成一個圓柱,不同盤片相同半徑的磁道所組成的圓柱稱為柱面。磁道與柱面都是表示不同半徑的圓,在許多場合,磁道和柱面可以互換使用。顯然,磁盤的柱面數與一個盤面上的磁道數是相等的。
- 磁頭:Heads,當然是讀取資訊用的了。每個盤面都有自己的磁頭,如果盤面的雙面都記錄資訊,那麼雙面都應該有磁頭。是以,硬碟的容量計算公式如下:硬碟的容量=磁頭數×磁道(柱面)數×每道扇區數×每扇區位元組數(512)
- SDK中定義了一個叫做DISK_GEOMETRY的結構體:
typedef struct _DISK_GEOMETRY { LARGE_INTEGER Cylinders; MEDIA_TYPE MediaType; DWORD TracksPerCylinder; DWORD SectorsPerTrack; DWORD BytesPerSector; } DISK_GEOMETRY;
- 對于不同的硬碟,固件區的實體位置是不同的,有的位于比“0”磁道更靠近磁盤片外緣的磁道上,即我們常說的“負磁道”。有的位于磁盤片的中部,所記錄的程式的數量和功能也有差别。由于生産過程中不可能保證整個盤片完全一緻,必然有少部分扇區無法穩定讀寫資料,這就是我們所說的壞道。
- 認識硬碟的磁道、扇區、柱面和磁頭數
- 扇區、磁道、柱面和簇的介紹