整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          Linux文本分析工具,sort,uniq,cut,

          Linux文本分析工具,sort,uniq,cut,wc命令詳解

          ava識堂,一個高原創,高收藏,有干貨的微信公眾號,歡迎關注

          sort

          sort 命令對 File 參數指定的文件中的行排序,并將結果寫到標準輸出。如果 File 參數指定多個文件,那么 sort 命令將這些文件連接起來,并當作一個文件進行排序。

          sort語法

          [root@www ~]# sort [-fbMnrtuk] [file or stdin]
          
          選項與參數:
          -f :忽略大小寫的差異,例如 A 與 a 視為編碼相同;
          -b :忽略最前面的空格符部分;
          -M :以月份的名字來排序,例如 JAN, DEC 等等的排序方法;
          -n :使用『純數字』進行排序(默認是以文字型態來排序的);
          -r :反向排序;
          -u :就是 uniq ,相同的數據中,僅出現一行代表;
          -t :分隔符,默認是用 [tab] 鍵來分隔;
          -k :以那個區間 (field) 來進行排序的意思
          
          對/etc/passwd 的賬號進行排序
          
          [root@www ~]# cat /etc/passwd | sort
          adm:x:3:4:adm:/var/adm:/sbin/nologin
          apache:x:48:48:Apache:/var/www:/sbin/nologin
          bin:x:1:1:bin:/bin:/sbin/nologin
          daemon:x:2:2:daemon:/sbin:/sbin/nologin
          

          sort 是默認以第一個數據來排序,而且默認是以字符串形式來排序,所以由字母 a 開始升序排序。

          /etc/passwd 內容是以 : 來分隔的,我想以第三欄來排序,該如何

          [root@www ~]# cat /etc/passwd | sort -t ':' -k 3
          
          root:x:0:0:root:/root:/bin/bash
          uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
          operator:x:11:0:operator:/root:/sbin/nologin
          bin:x:1:1:bin:/bin:/sbin/nologin
          games:x:12:100:games:/usr/games:/sbin/nologin
          

          默認是以字符串來排序的,如果想要使用數字排序:

          cat /etc/passwd | sort -t ':' -k 3n
          
          root:x:0:0:root:/root:/bin/bash
          daemon:x:1:1:daemon:/usr/sbin:/bin/sh
          bin:x:2:2:bin:/bin:/bin/sh
          

          默認是升序排序,如果要倒序排序,如下

          cat /etc/passwd | sort -t ':' -k 3nr
          
          nobody:x:65534:65534:nobody:/nonexistent:/bin/sh
          ntp:x:106:113::/home/ntp:/bin/false
          messagebus:x:105:109::/var/run/dbus:/bin/false
          sshd:x:104:65534::/var/run/sshd:/usr/sbin/nologin
          

          如果要對/etc/passwd,先以第六個域的第2個字符到第4個字符進行正向排序,再基于第一個域進行反向排序。

          cat /etc/passwd | sort -t':' -k 6.2,6.4 -k 1r 
           
          sync:x:4:65534:sync:/bin:/bin/sync
          proxy:x:13:13:proxy:/bin:/bin/sh
          bin:x:2:2:bin:/bin:/bin/sh
          sys:x:3:3:sys:/dev:/bin/sh
          

          查看/etc/passwd有多少個shell:對/etc/passwd的第七個域進行排序,然后去重:

          cat /etc/passwd | sort -t':' -k 7 -u
          
          root:x:0:0:root:/root:/bin/bash
          syslog:x:101:102::/home/syslog:/bin/false
          daemon:x:1:1:daemon:/usr/sbin:/bin/sh
          sync:x:4:65534:sync:/bin:/bin/sync
          sshd:x:104:65534::/var/run/sshd:/usr/sbin/nologin
          

          uniq

          uniq命令可以去除排序過的文件中的重復行,因此uniq經常和sort合用。也就是說,為了使uniq起作用,所有的重復行必須是相鄰的。

          uniq語法

          [root@www ~]# uniq [-icu]
          
          選項與參數:
          -i :忽略大小寫字符的不同;
          -c :進行計數
          -u :只顯示唯一的行
          

          testfile的內容如下

          cat testfile
          hello
          world
          friend
          hello
          world
          hello
          

          直接刪除未經排序的文件,將會發現沒有任何行被刪除

          #uniq testfile 
          hello
          world
          friend
          hello
          world
          hello
          

          排序文件,默認是去重

          #cat words | sort |uniq
          friend
          hello
          world
          

          排序之后刪除了重復行,同時在行首位置輸出該行重復的次數

          #sort testfile | uniq -c
          1 friend
          3 hello
          2 world
          

          僅顯示存在重復的行,并在行首顯示該行重復的次數

          #sort testfile | uniq -dc
          3 hello
          2 world
          

          僅顯示不重復的行

          sort testfile | uniq -u
          friend 
          

          cut

          cut命令可以從一個文本文件或者文本流中提取文本列。

          cut語法

          [root@www ~]# cut -d'分隔字符' -f fields <==用于有特定分隔字符
          
          [root@www ~]# cut -c 字符區間 <==用于排列整齊的信息
          
          選項與參數:
          -d :后面接分隔字符。與 -f 一起使用;
          -f :依據 -d 的分隔字符將一段信息分割成為數段,用 -f 取出第幾段的意思;
          -c :以字符 (characters) 的單位取出固定字符區間;
          

          PATH 變量如下

          [root@www ~]# echo $PATH
          /bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin:/usr/X11R6/bin:/usr/games
          # 1 | 2 | 3 | 4 | 5 | 6 | 7
          

          將 PATH 變量取出,我要找出第五個路徑。

          #echo $PATH | cut -d ':' -f 5
          /usr/local/bin
          

          將 PATH 變量取出,我要找出第三和第五個路徑。

          #echo $PATH | cut -d ':' -f 3,5
          /sbin:/usr/local/bin
          

          將 PATH 變量取出,我要找出第三到最后一個路徑。

          echo $PATH | cut -d ':' -f 3-
          /sbin:/usr/sbin:/usr/local/bin:/usr/X11R6/bin:/usr/games
          

          將 PATH 變量取出,我要找出第一到第三個路徑。

          #echo $PATH | cut -d ':' -f 1-3
          /bin:/usr/bin:/sbin:
           
          

          將 PATH 變量取出,我要找出第一到第三,還有第五個路徑。

          echo $PATH | cut -d ':' -f 1-3,5
          /bin:/usr/bin:/sbin:/usr/local/bin
          

          實用例子:只顯示/etc/passwd的用戶和shell

          #cat /etc/passwd | cut -d ':' -f 1,7 
          root:/bin/bash
          daemon:/bin/sh
          bin:/bin/sh
          

          wc

          統計文件里面有多少單詞,多少行,多少字符。

          wc語法

          [root@www ~]# wc [-lwm]
          
          選項與參數:
          -l :僅列出行;
          -w :僅列出多少字(英文單字);
          -m :多少字符;
          

          默認使用wc統計/etc/passwd

          #wc /etc/passwd
          40 45 1719 /etc/passwd
          

          40是行數,45是單詞數,1719是字節數

          wc的命令比較簡單使用,每個參數使用如下:

          #wc -l /etc/passwd #統計行數,在對記錄數時,很常用
          40 /etc/passwd #表示系統有40個賬戶
          #wc -w /etc/passwd #統計單詞出現次數
          45 /etc/passwd
          #wc -m /etc/passwd #統計文件的字節數
          1719
          

          原文:https://www.cnblogs.com/ggjucheng/archive/2013/01/13/2858385.html

          子模型的理解 ?

          • 標準模式和混雜模式(IE)。
          • 在標準模式下瀏覽器按照規范呈現頁面;
          • 在混雜模式下,頁面以一種比較寬松的向后兼容的方式顯示。
          • 混雜模式通常模擬老式瀏覽器的行為以防止老站點無法工作。

          CSS 盒子模型具有內容 (content)、填充 (padding)、邊框 (border)、邊界 (margin)這些屬性。

          我們所說的 width,height 指的是內容 (content) 的寬高。

          一個盒子模型的中:

          • 寬度=width+ pdding(寬) + border(寬)。
          • 高度=height + padding(高) + border(高)。

          如何在頁面上實現一個圓形的可點擊區域 ?

          • 1、map+area 或者 svg
          • 2、border-radius
          • 3、純 js 實現,需要求一個點在不在圓上簡單算法、獲取鼠標坐標等等

          實現不使用 border 畫出 1px 高的線,在不同瀏覽器的標準模式與怪異模式下都能保持一致的效果。

          <div style="height:1px;overflow:hidden;background:red"></div>
          

          CSS 中哪些屬性可以同父元素繼承 ?

          繼承:(X)HTML 元素可以從其父元素那里繼承部分 CSS 屬性,即使當前元素并沒有定義該屬性,比如:color,font-size。

          box-sizing 常用的屬性有哪些 ?分別有什么作用 ?

          常用的屬性:content-box、 border-box 、inherit

          作用

          • content-box(默認):寬度和高度分別應用到元素的內容框。在寬度和高度之外繪制元素的內邊距和邊框(元素默認效果)。
          • border-box:元素指定的任何內邊距和邊框都將在已設定的寬度和高度內進行繪制。通過從已設定的寬度和高度分別減去邊框和內邊距才能得到內容的寬度和高度。

          頁面導入樣式時,使用 link 和 @import 有什么區別 ?

          • link 屬于 XHTML 標簽,除了加載 CSS 外,還能用于定義 RSS(是一種描述和同步網站內容的格式,是使用最廣泛的 XML 應用), 定義 rel 連接屬性等作用;
          • 而 @import 是 CSS 提供的,只能用于加載 CSS;
          • 頁面被加載的時,link 會同時被加載,而 @import 引用的 CSS 會等到頁面被加載完再加載;
          • import 是 CSS2.1 提出的,只在 IE5 以上才能被識別,而 link 是 XHTML 標簽,無兼容問題。
          • 總之,link 要優于 @import。

          常見兼容性問題?

          • 瀏覽器默認的 margin 和 padding 不同。解決方案是加一個全局的 *{margin: 0; padding: 0;} 來統一。
          • IE下 event 對象有 event.x,event.y 屬性,而 Firefox 下沒有。Firefox 下有 event.pageX,event.PageY 屬性,而 IE 下沒有。解決辦法:var mx=event.x ? event.x : event.pageX;
          • Chrome 中文界面下默認會將小于 12px 的文本強制按照 12px 顯示, 可通過加入 CSS 屬性 -webkit-text-size-adjust: none; 解決.
          • 超鏈接訪問過后 hover 樣式就不出現了,被點擊訪問過的超鏈接樣式不在具有 hover 和 active 了,解決方法是改變 CSS 屬性的排列順序: L-V-H-A : a:link {} a:visited {} a:hover {} a:active {}

          清除浮動,什么時候需要清除浮動,清除浮動都有哪些方法 ?

          一個塊級元素如果沒有設置 height,那么其高度就是由里面的子元素撐開,如果子元素使用浮動,脫離了標準的文檔流,那么父元素的高度會將其忽略,如果不清除浮動,父元素會出現高度不夠,那樣如果設置 border 或者 background 都得不到正確的解析。

          正是因為浮動的這種特性,導致本屬于普通流中的元素浮動之后,包含框內部由于不存在其他普通流元素了,也就表現出高度為 0(高度塌陷)。在實際布局中,往往這并不是我們所希望的,所以需要閉合浮動元素,使其包含框表現出正常的高度。

          清除浮動的方式

          • 父級 div 定義 height,原理:父級 div 手動定義 height,就解決了父級 div 無法自動獲取到高度的問題。
          • 結尾處加空 div 標簽 clear: both,原理:添加一個空 div,利用 css 提高的 clear: both 清除浮動,讓父級 div 能自動獲取到高度。
          • 父級 div 定義 overflow: hidden, 原理:必須定義 width 或 zoom: 1,同時不能定義 height,使用 overflow: hidden 時,瀏覽器會自動檢查浮動區域的高度
          • 父級 div 也一起浮動 。
          • 父級 div 定義 display: table 。
          • 父級 div 定義 偽類 :after 和 zoom 。
          • 結尾處加 br 標簽 clear: both, 原理:父級 div 定義 zoom: 1 來解決 IE 浮動問題,結尾處加 br 標簽 clear: both。

          總結:比較好的是倒數第 2 種方式,簡潔方便。

          position 、float 和 display 的取值和各自的意思和用法

          position

          • position 屬性取值:static(默認)、relative、absolute、fixed、inherit、sticky。
          • postision:static;始終處于文檔流給予的位置。看起來好像沒有用,但它可以快速取消定位,讓 top,right,bottom,left 的值失效。在切換的時候可以嘗試這個方法。
          • 除了 static 值,在其他三個值的設置下,z-index 才會起作用。確切地說 z-index 只在定位元素上有效。
          • position:relative 和 absolute 都可以用于定位,區別在于前者的 div 還屬于正常的文檔流,后者已經是脫離了正常文檔流,不占據空間位置,不會將父類撐開。定位原點 relative 是相對于它在正常流中的默認位置偏移,它原本占據的空間任然保留;absolute 相對于第一個 position 屬性值不為 static 的父類。所以設置了 position:absolute,其父類的該屬性值要注意,而且 overflow:hidden 也不能亂設置,因為不屬于正常文檔流,不會占據父類的高度,也就不會有滾動條。
          • fixed 舊版本 IE 不支持,卻是很有用,定位原點相對于瀏覽器窗口,而且不能變。常用于 header,footer 或者一些固定的懸浮 div,隨滾動條滾動又穩定又流暢,比 JS 好多了。fixed 可以有很多創造性的布局和作用,兼容性是問題。
          • position:inherit。規定從父類繼承 position 屬性的值,所以這個屬性也是有繼承性的,但需要注意的是 IE8 以及往前的版本都不支持 inherit 屬性。
          • sticky :設置了sticky 的元素,在屏幕范圍(viewport)時該元素的位置并不受到定位影響(設置是 top、left 等屬性無效),當該元素的位置將要移出偏移范圍時,定位又會變成 fixed,根據設置的 left、top 等屬性成固定位置的效果。

          float

          • float:left (或 right),向左(或右)浮動,直到它的邊緣碰到包含框或另一個浮動框為止。且脫離普通的文檔流,會被正常文檔流內的塊框忽略。不占據空間,無法將父類元素撐開。
          • 任何元素都可以浮動,浮動元素會生成一個塊級框,不論它本身是何種元素。因此,沒有必要為浮動元素設置 display:block。
          • 如果浮動非替換元素,則要指定一個明確的 width,否則它們會盡可能的窄。什么叫替換元素 ?根據元素本身的特點定義的, (X)HTML中的 img、input、textarea、select、object 都是替換元素,這些元素都沒有實際的內容。 (X)HTML 的大多數元素是不可替換元素,他們將內容直接告訴瀏覽器,將其顯示出來。

          display

          • display 屬性取值:none、inline、inline-block、block、table 相關屬性值、inherit。
          • display 屬性規定元素應該生成的框的類型。文檔內任何元素都是框,塊框或行內框。
          • display:none 和 visiability:hidden 都可以隱藏 div,區別有點像 absolute 和 relative,前者不占據文檔的空間,后者還是占據文檔的位置。
          • display:inline 和 block,又叫行內元素和塊級元素。表現出來的區別就是 block 獨占一行,在瀏覽器中通常垂直布局,可以用 margin 來控制塊級元素之間的間距(存在 margin 合并的問題,只有普通文檔流中塊框的垂直外邊距才會發生外邊距合并。行內框、浮動框或絕對定位之間的外邊距不會合并。);而 inline 以水平方式布局,垂直方向的 margin 和 padding 都是無效的,大小跟內容一樣,且無法設置寬高。inline 就像塑料袋,內容怎么樣,就長得怎么樣;block 就像盒子,有固定的寬和高。
          • inline-block 就介于兩者之間。
          • table 相關的屬性值可以用來垂直居中,效果一般。
          • flex

          定位機制

          上面三個屬性都屬于 CSS 定位屬性。CSS 三種基本的定位機制:普通流、浮動、絕對定位。

          css3 動畫效果屬性有哪些 ?

          • animation-name:規定需要綁定到選擇器的 keyframe 名稱。。
          • animation-duration:規定完成動畫所花費的時間,以秒或毫秒計。
          • animation-timing-function:規定動畫的速度曲線。
          • animation-delay:規定在動畫開始之前的延遲。
          • animation-iteration-count:規定動畫應該播放的次數。
          • animation-direction:規定是否應該輪流反向播放動畫。

          canvas 與 svg 的區別 ?

          • Canvas 是基于像素的即時模式圖形系統,最適合較小的表面或較大數量的對象,Canvas 不支持鼠標鍵盤等事件。
          • SVG 是基于形狀的保留模式圖形系統,更加適合較大的表面或較小數量的對象。
          • Canvas 和 SVG 在修改方式上還存在著不同。繪制 Canvas 對象后,不能使用腳本和 CSS 對它進行修改。因為 SVG 對象是文檔對象模型的一部分,所以可以隨時使用腳本和 CSS 修改它們。

          現在對兩種技術做對比歸納如下:

          Canvas

          1. 依賴分辨率
          2. 不支持事件處理器
          3. 弱的文本渲染能力
          4. 能夠以 .png 或 .jpg 格式保存結果圖像
          5. 最適合圖像密集型的游戲,其中的許多對象會被頻繁重繪

          SVG

          1. 不依賴分辨率
          2. 支持事件處理器
          3. 最適合帶有大型渲染區域的應用程序(比如谷歌地圖)
          4. 復雜度高會減慢渲染速度(任何過度使用 DOM 的應用都不快)
          5. 不適合游戲應用

          px 和 em 的區別 ?

          • px 像素(Pixel)。相對長度單位。像素 px 是相對于顯示器屏幕分辨率而言的。(引自CSS2.0手冊)
          • em 是相對長度單位。相對于當前對象內文本的字體尺寸。如當前對行內文本的字體尺寸未被人為設置,則相對于瀏覽器的默認字體尺寸。(引自CSS2.0手冊)
          • 任意瀏覽器的默認字體高都是 16px。所有未經調整的瀏覽器都符合:1em=16px。那么12px=0.75em,10px=0.625em。為了簡化 font-size 的換算,需要在 css 中的 body 選擇器中聲明 Font-size=62.5%,這就使 em 值變為 16px*62.5%=10px, 這樣 12px=1.2em, 10px=1em, 也就是說只需要將你的原來的 px 數值除以 10,然后換上 em 作為單位就行了。

          會不會用 ps 扣圖,png、jpg、gif 這些圖片格式解釋一下,分別什么時候用。如何優化圖像、圖像格式的區別 ?

          JPG 的特性

          • 支持攝影圖像或寫實圖像的高級壓縮,并且可利用壓縮比例控制圖像文件大小。
          • 有損壓縮會使圖像數據質量下降,并且在編輯和重新保存 JPG 格式圖像時,這種下降損失會累積。
          • JPG 不適用于所含顏色很少、具有大塊顏色相近的區域或亮度差異十分明顯的較簡單的圖片。

          PNG 的特性

          • 能在保證最不失真的情況下盡可能壓縮圖像文件的大小。
          • PNG 用來存儲灰度圖像時,灰度圖像的深度可多到 16 位,存儲彩色圖像時,彩色圖像的深度可多到 48 位,并且還可存儲多到 16 位的 α 通道數據。
          • 對于需要高保真的較復雜的圖像,PNG 雖然能無損壓縮,但圖片文件較大,不適合應用在 Web 頁面上。
          • 另外還有一個原則就是用于頁面結構的基本視覺元素,如容器的背景、按鈕、導航的背景等應該盡量用 PNG 格式進行存儲,這樣才能更好的保證設計品質。而其他一些內容元素,如廣告 Banner、商品圖片 等對質量要求不是特別苛刻的,則可以用 JPG 去進行存儲從而降低文件大小。

          GIF格式特點

          • 透明性: Gif 是一種布爾透明類型,既它可以是全透明,也可以是全不透明,但是它并沒有半透明(alpha 透明)。
          • 動畫:Gif 這種格式支持動畫。
          • 無損耗性:Gif 是一種無損耗的圖像格式,這也意味著你可以對 gif 圖片做任何操作也不會使得圖像質量產生損耗。
          • 水平掃描:Gif 是使用了一種叫作 LZW 的算法進行壓縮的,當壓縮 gif 的過程中,像素是由上到下水平壓縮的,這也意味著同等條件下,橫向的 gif 圖片比豎向的 gif 圖片更加小。例如 50010 的圖片比 10500 的圖片更加小。間隔漸進顯示:Gif 支持可選擇性的間隔漸進顯示

          由以上特點看出只有 256 種顏色的 gif 圖片不適合作為照片,它適合做對顏色要求不高的圖形。

          我們知道可以以外鏈的方式引入 CSS 文件,請談談外鏈引入 CSS 有哪些方式,這些方式的性能有區別嗎 ?

          CSS 的引入方式最常用的有三種

          第一:外鏈式

          這種方法可以說是現在占統治地位的引入方法。

          如同 IE 與瀏覽器。這也是最能體現 CSS 特點的方法;

          最能體現 DIV + CSS 中的內容離的思想,也最易改版維護,代碼看起來也是最美觀的一種。

          第二:內部樣式表

          這種方法的使用情況要少的多,最長見得就是訪問量大的門戶網站。或者訪問量較大的企業網站的首頁。

          與第一種方法比起來,優弊端也明顯。

          優點:速度快,所有的 CSS 控制都是針對本頁面標簽的,沒有多余的 CSS 命令;再者不用外鏈 CSS 文件。直接在文檔中讀取樣式。

          缺點:就是改版麻煩些,單個頁面顯得臃腫,CSS 不能被其他 HTML 引用造成代碼量相對較多,維護也麻煩些采用這種方法的公司大多有錢,對他們來說用戶量是關鍵,他們不缺人進行復雜的維護工作。

          第三:行內樣式

          認為 HTML 里不能出現 CSS 命令。其實有時候沒有什么大不了。比如通用性差,效果特殊,使用 CSS 命令較少,并且不常改動的地方,使用這種方法反而是很好的選擇。

          第四、@import 引入方式

          <style type="text/css">
          @import url(my.css);
          </style>
          

          CSS Sprite 是什么,談談這個技術的優缺點。

          加速的關鍵,不是降低重量,而是減少個數。傳統切圖講究精細,圖片規格越小越好,重量越小越好,其實規格大小無計算機統一都按 byte 計算。客戶端每顯示一張圖片都會向服務器發送請求。所以,圖片越多請求次數越多,造成延遲的可越大。

          • 利用 CSS Sprites 能很好地減少了網頁的 http 請求,從而大大的提高了頁面的性能,這也是 CSS Sprites 的優點,也是其被廣泛傳播和應用的主要原因;
          • CSS Sprites 能減少圖片的字節,曾經比較過多次 3 張圖片合并成 1 張圖片的字節總是小于這 3 張圖片的和。
          • 解決了網頁設計師在圖片命名上的困擾,只需對一張集合的圖片上命名就可以了,不需要對每一個小元素名,從而提高了網頁的制作效率。
          • 更換風格方便,只需要在一張或少張圖片上修改圖片的顏色或樣式,整個網頁的風格就可以改變。維護起方便。

          誠然 CSS Sprites 是如此的強大,但是也存在一些不可忽視的缺點,如下:

          • 在圖片合并的時候,你要把多張圖片有序的合理的合并成一張圖片,還要留好足夠的空間,防止板塊內不不必要的背景;這些還好,最痛苦的是在寬屏,高分辨率的屏幕下的自適應頁面,你的圖片如果不夠寬,很容背景斷裂;
          • CSS Sprites 在開發的時候比較麻煩,你要通過 photoshop 或其他工具測量計算每一個背景單元的精確位是針線活,沒什么難度,但是很繁瑣;幸好騰訊的鬼哥用 RIA 開發了一個 CSS Sprites 樣式生成工具,雖然些使用上的不靈活,但是已經比 photoshop 測量來的方便多了,而且樣式直接生成,復制,拷貝就 OK!
          • CSS Sprites 在維護的時候比較麻煩,如果頁面背景有少許改動,一般就要改這張合并的圖片,無需改的好不要動,這樣避免改動更多的 css,如果在原來的地方放不下,又只能(最好)往下加圖片,這樣圖片的字加了,還要改動 css。

          CSS Sprites 非常值得學習和應用,特別是頁面有一堆 ico(圖標)。總之很多時候大家要權衡一下再決定是不是應用 CSS Sprites。

          優先級算法如何計算?內聯和 important 哪個優先級高 ?

          • 優先級就近原則,樣式定義最近者為準
          • 載入樣式以最后載入的定位為準
          • 優先級為 !important > [ id > class > tag ]
          • Important 比內聯優先級高

          css 的基本語句構成是 ?

          回答:選擇器、屬性和屬性值。

          如果讓你來制作一個訪問量很高的大型網站,你會如何來管理所有 CSS 文件、JS 與圖片?

          回答:涉及到人手、分工、同步;

          • 先期團隊必須確定好全局樣式(globe.css),編碼模式 (utf-8) 等
          • 編寫習慣必須一致(例如都是采用繼承式的寫法,單樣式都寫成一行);
          • 標注樣式編寫人,各模塊都及時標注(標注關鍵樣式調用的地方);
          • 頁面進行標注(例如頁面模塊開始和結束);
          • CSS 跟 HTML 分文件夾并行存放,命名都得統一(例如 style.css)
          • JS 分文件夾存放,命名以該 JS 功能為準
          • 圖片采用整合的 png8 格式文件使用,盡量整合在一起使用,方便將來的管理。

          CSS 選擇符有哪些 ?哪些屬性可以繼承 ?優先級算法如何計算 ?新增偽類有那些 ?

          CSS 選擇符

          1. id 選擇器( #myid)
          2. 類選擇器(.myclassname)
          3. 標簽選擇器(div, h1, p)
          4. 相鄰選擇器(h1 + p)
          5. 子選擇器(ul > li)
          6. 后代選擇器(li a)
          7. 通配符選擇器( * )
          8. 屬性選擇器(a[rel="external"])
          9. 偽類選擇器(a: hover, li: nth - child)

          可繼承的樣式

          font-size,font-family,color,ul,li,dl,dd,dt;

          不可繼承的樣式

          border padding margin width height 事實上,寬度也不是繼承的,而是如果你不指定寬度,那么它就是 100%。由于你子 DIV 并沒有指定寬度,那它就是 100%,也就是與父 DIV 同寬,但這與繼承無關,高度自然也沒有繼承一說。

          優先級算法

          • 優先級就近原則,同權重情況下樣式定義最近者為準;
          • 載入樣式以最后載入的定位為準;
          • 優先級為: !important > id > class > tag , important 比 內聯優先級高

          CSS3 新增偽類舉例

          • :root 選擇文檔的根元素,等同于 html 元素
          • :empty 選擇沒有子元素的元素
          • :target 選取當前活動的目標元素
          • :not(selector) 選擇除 selector 元素意外的元素
          • :enabled 選擇可用的表單元素
          • :disabled 選擇禁用的表單元素
          • :checked 選擇被選中的表單元素
          • :after 選擇器在被選元素的內容后面插入內容
          • :before 選擇器在被選元素的內容前面插入內容
          • :nth-child(n) 匹配父元素下指定子元素,在所有子元素中排序第 n
          • :nth-last-child(n) 匹配父元素下指定子元素,在所有子元素中排序第 n,從后向前數
          • :nth-child(odd) 奇數
          • :nth-child(even) 偶數
          • :nth-child(3n+1)
          • :first-child
          • :last-child
          • :only-child
          • :nth-of-type(n) 匹配父元素下指定子元素,在同類子元素中排序第 n
          • :nth-last-of-type(n) 匹配父元素下指定子元素,在同類子元素中排序第 n,從后向前數
          • :nth-of-type(odd)
          • :nth-of-type(even)
          • :nth-of-type(3n+1)
          • :first-of-type
          • :last-of-type
          • :only-of-type
          • ::selection 選擇被用戶選取的元素部分
          • :first-line 選擇元素中的第一行
          • :first-letter 選擇元素中的第一個字符

          CSS3 有哪些新特性 ?

          • CSS3 實現圓角(border-radius:8px)
          • 陰影(box-shadow:10px)
          • 對文字加特效(text-shadow)
          • 線性漸變(gradient)
          • 旋轉、縮放、定位、傾斜
           transform: rotate(9deg) scale(0.85,0.90) translate(0px,-30px) skew(-9deg,0deg);
          
          • 增加了更多的 CSS 選擇器
          • 多背景 rgba

          collapse、overflow、float 這些特性相互疊加后會怎么樣?

          margin collapse 我覺得這里的意思應該是 Collapsing margins,即外邊距折疊,指的是毗鄰的兩個或多個外邊距 (margin) 會合并成一個外邊距。

          其中所說的 margin 毗鄰,可以歸結為以下兩點:

          • 這兩個或多個外邊距沒有被非空內容、padding、border 或 clear 分隔開。
          • 這些 margin 都處于普通流中。
          1. 兩個或多個毗鄰的普通流中的塊元素垂直方向上的 margin 會折疊。
          2. 浮動元素、inline-block 元素、絕對定位元素的 margin 不會和垂直方向上其他元素的 margin 折疊.
          3. 創建了塊級格式化上下文的元素,不和它的子元素發生 margin 折疊

          absolute 的 containing block(容器塊) 計算方式跟正常流有什么不同 ?

          無論屬于哪種,都要先找到其祖先元素中最近的 position 值不為 static 的元素,然后再判斷:

          • 若此元素為 inline 元素,則 containing block 為能夠包含這個元素生成的第一個和最后一個 inline box 的 padding box (除 margin,border 外的區域) 的最小矩形;
          • 否則,則由這個祖先元素的 padding box 構成。
          • 如果都找不到,則為 initial containing block。

          補充:

          1. static / relative:簡單說就是它的父元素的內容框(即去掉 padding 的部分)
          2. absolute: 向上找最近的定位為 absolute / relative 的元素
          3. fixed: 它的 containing block 一律為根元素(html / body),根元素也是 initial containing block

          對 BFC 規范(塊級格式化上下文:blockformatting context)的理解 ?

          W3C CSS 2.1 規范中的一個概念,它是一個獨立容器,決定了元素如何對其內容進行定位,以及與其他元素的關系和相互作用。

          • 一個頁面是由很多個 Box 組成的,元素的類型和 display 屬性,決定了這個 Box 的類型。
          • 不同類型的 Box,會參與不同的 Formatting Context(決定如何渲染文檔的容器),因此 Box 內的元素會以不同的方式渲染,也就是說 BFC 內部的元素和外部的元素不會互相影響。

          .冒泡排序(Bubble Sort)

          (1)算法描述

          冒泡排序是一種簡單的排序算法。它重復地走訪過要排序的數列,一次比較兩個元素,如果它們的順序錯誤就把它們交換過來。走訪數列的工作是重復地進行直到沒有再需要交換,也就是說該數列已經排序完成。這個算法的名字由來是因為越小的元素會經由交換慢慢“浮”到數列的頂端。

          (2)算法描述和實現

          具體算法描述如下:

          • <1>.比較相鄰的元素。如果第一個比第二個大,就交換它們兩個;

          • <2>.對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最后一對,這樣在最后的元素應該會是最大的數;

          • <3>.針對所有的元素重復以上的步驟,除了最后一個;

          • <4>.重復步驟1~3,直到排序完成。

          JavaScript代碼實現:

          改進冒泡排序: 設置一標志性變量pos,用于記錄每趟排序中最后一次進行交換的位置。由于pos位置之后的記錄均已交換到位,故在進行下一趟排序時只要掃描到pos位置即可。

          改進后算法如下:

          傳統冒泡排序中每一趟排序操作只能找到一個最大值或最小值,我們考慮利用在每趟排序中進行正向和反向兩遍冒泡的方法一次可以得到兩個最終值(最大者和最小者) , 從而使排序趟數幾乎減少了一半。

          改進后的算法為:

          三種算法的運行時間為:

          由運行結果可以看出時間復雜度更低,耗時更短了。大家可以親自嘗試下,運行的時候最好將三種算法寫在一個文件中運行,否則會由于瀏覽器等原因產生誤差。

          冒泡排序的動態圖演示:

          (3)算法分析

          • 最佳情況:T(n)=O(n)

            當輸入的數據已經是正序時

          • 最壞情況:T(n)=O(n2)

            當輸入的數據是反序時

          • 平均情況:T(n)=O(n2)

          2.選擇排序(Selection Sort)

          表現最穩定的排序算法之一,因為無論什么數據進去都是O(n2)的時間復雜度…..所以用到它的時候,數據規模越小越好。唯一的好處可能就是不占用額外的內存空間了吧。理論上講,選擇排序可能也是平時排序一般人想到的最多的排序方法了吧。

          (1)算法簡介

          選擇排序(Selection-sort)是一種簡單直觀的排序算法。它的工作原理:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再從剩余未排序元素中繼續尋找最小(大)元素,然后放到已排序序列的末尾。以此類推,直到所有元素均排序完畢。

          (2)算法描述和實現

          n個記錄的直接選擇排序可經過n-1趟直接選擇排序得到有序結果。具體算法描述如下:

          • <1>.初始狀態:無序區為R[1..n],有序區為空;

          • <2>.第i趟排序(i=1,2,3…n-1)開始時,當前有序區和無序區分別為R[1..i-1]和R(i..n)。該趟排序從當前無序區中-選出關鍵字最小的記錄 R[k],將它與無序區的第1個記錄R交換,使R[1..i]和R[i+1..n)分別變為記錄個數增加1個的新有序區和記錄個數減少1個的新無序區;

          • <3>.n-1趟結束,數組有序化了。

          Javascript代碼實現:

          (3)算法分析

          • 最佳情況:T(n)=O(n2)

          • 最差情況:T(n)=O(n2)

          • 平均情況:T(n)=O(n2)

          學習前端的同學注意了!!!

          學習過程中遇到什么問題或者想獲取學習資源的話,歡迎加入前端學習交流群461593224,我們一起學前端!


          主站蜘蛛池模板: 国产精品成人一区无码| 国产福利一区二区三区在线视频 | 无码人妻一区二区三区免费看| 中文乱码字幕高清一区二区| 精品国产亚洲一区二区三区在线观看 | 亚欧免费视频一区二区三区 | 亚洲日韩精品一区二区三区无码| 亚洲欧美一区二区三区日产| 中文字幕一区二区三匹| 日韩精品福利视频一区二区三区| 国产人妖视频一区二区破除| 亚洲Av无码一区二区二三区| 中文字幕日韩人妻不卡一区 | 无码视频一区二区三区| 亚洲AV午夜福利精品一区二区| 久久久不卡国产精品一区二区| 国模一区二区三区| 午夜一区二区免费视频| 亚洲色无码专区一区| 中文字幕乱码亚洲精品一区| 亚洲国产一区在线观看| 亚洲不卡av不卡一区二区| 无码人妻精品一区二区在线视频| 国产一区二区中文字幕| 精品日韩亚洲AV无码一区二区三区| 国产一区三区三区| 国产自产V一区二区三区C| 风间由美性色一区二区三区| 国产亚洲福利精品一区| 少妇精品久久久一区二区三区 | 濑亚美莉在线视频一区| 武侠古典一区二区三区中文| 麻豆AV无码精品一区二区| 中文无码一区二区不卡αv| 免费一本色道久久一区| 国产一区二区精品在线观看| 久久久人妻精品无码一区| 亚洲日韩精品一区二区三区无码 | 海角国精产品一区一区三区糖心 | 综合久久久久久中文字幕亚洲国产国产综合一区首 | 久久精品无码一区二区日韩AV|