『壹』 bdd是什麼意思
行為驅動開發(Behavior-Driven Development)(簡寫BDD),在軟體工程中,BDD是一種敏捷軟體開發的技術。
行為驅動開發(BDD)是測試驅動開發的延伸,開發使用簡單的,特定於領域的腳本語言。這些DSL將結構化自然語言語句轉換為可執行測試。結果是與給定功能的驗收標准以及用於驗證該功能的冊芹測試之間的關系更密切。因此,它一般是測試驅清前動開發(TDD)測試的自然延伸。
BDD 作為一種設計方法,可以有效的改善設計,並在系統的演化過程中為團隊指明前進方向。
行為驅動開發的根基是一種「通用語言」。這種通用語言同時被客戶和開發者用來定義系統的行為。由於客戶和開發者使用同一種「語言」來描述同一個系統,可以最大程度避免表達不一致帶來的問題。
表達不一致是軟體開發中最常見的問題,由此造成的結果就是開發人員最終做出來的東西就不是客戶期望的。使用通用語言,客戶和開發者可以一起定義出系統的行為,從而做出符合客戶需求的設計。但如果光有設計,而沒有驗證的手段,就無法檢驗我們的實現是不是符合設計。所以 BDD還是答姿清要和測試結合在一起,用系統行為的定義來驗證實現代碼。
『貳』 python BDD自動化測試框架有哪些
Python自動化測試框架比較有名的就是python+selenium,還有單元測試框架PyUnit,還有一個叫做Robot Framework的自動化測試框架,大大小小的有很多
BDD顧名思義Behavior Driven Development,譯作"行為驅動開發",是基於TDD(Test Driven Development 測試驅動開發)的軟體開發過程和方法。BDD可以讓項目成員(甚至是不懂編程的)使用自然語言來描述系統功能和場景,從而根據這些描述步驟進行系統自動化的測試。
BDD的自動化測試框架的話,目前應用最好的是Ruby下的Cucumber,Python下有類似的Behave、Lettuce及Freshen等,這三個都差不多,個人推薦Behave
可以網路這篇文章(我寫的):Python BDD自動化測試框架初探
Bazel:來自Google的構建工具,可以快速、可靠地構建代碼。官網
Gradle:使用Groovy(非XML)進行增量構建,可以很好地與Maven依賴管理配合工作。官網
Buck:Facebook構建工具。官網
位元組碼操作
編程方式操作位元組碼的開發庫。
ASM:通用底層位元組碼操作和分析開發庫。官網
Byte Buddy:使用流式API進一步簡化位元組碼生成。官網
Byteman:在運行時通過DSL(規則)操作位元組碼進行測試和故障排除。官網
Javassist:一個簡化位元組碼編輯嘗試。官網
集群管理
在集群內動態管理應用程序的框架。
Apache Aurora:Apache Aurora是一個Mesos框架,用於長時間運行服務和定時任務(cron job)。官網
Singularity:Singularity是一個Mesos框架,方便部署和操作。它支持Web Service、後台運行、調度作業和一次性任務。官網
代碼分析
測量代碼指標和質量工具。
Checkstyle:代碼編寫規范和標准靜態分析工具。官網
Error Prone:將常見編程錯誤作為運行時錯誤報告。官網
FindBugs:通過位元組碼靜態分析查找隱藏bug。官網
jQAssistant:使用基於Neo4J查詢語言進行代碼靜態分析。官網
PMD:對源代碼分析查找不良的編程習慣。官網
SonarQube:通過插件集成其它分析組件,對過去一段時間內的數據進行統計。官網
編譯器生成工具
用來創建解析器、解釋器或編譯器的框架。
ANTLR:復雜的全功能自頂向下解析框架。官網
JavaCC:JavaCC是更加專門的輕量級工具,易於上手且支持語法超前預測。官網
外部配置工具
支持外部配置的開發庫。
config:針對JVM語言的配置庫。官網
owner:減少冗餘配置屬性。官網
約束滿足問題求解程序
幫助解決約束滿足問題的開發庫。
Choco:可直接使用的約束滿足問題求解程序,使用了約束規劃技術。官網
JaCoP:為FlatZinc語言提供了一個介面,可以執行MiniZinc模型。官網
OptaPlanner:企業規劃與資源調度優化求解程序。官網
Sat4J:邏輯代數與優化問題最先進的求解程序。官網
持續集成
Bamboo:Atlassian解決方案,可以很好地集成Atlassian的其他產品。可以選擇開源許可,也可以購買商業版。官網
CircleCI:提供託管服務,可以免費試用。官網
Codeship:提供託管服務,提供有限的免費模式。官網
fabric8:容器集成平台。官網
Go:ThoughtWork開源解決方案。官網
Jenkins:支持基於伺服器的部署服務。官網
TeamCity:JetBrain的持續集成解決方案,有免費版。官網
Travis:通常用作開源項目的託管服務。官網
Buildkite: 持續集成工具,用簡單的腳本就能設置pipeline,而且能快速構建,可以免費試用。官網
CSV解析
簡化CSV數據讀寫的框架與開發庫
uniVocity-parsers:速度最快功能最全的CSV開發庫之一,同時支持TSV與固定寬度記錄的讀寫。官網
資料庫
簡化資料庫交互的相關工具。
Apache Phoenix:HBase針對低延時應用程序的高性能關系資料庫層。官網
Crate:實現了數據同步、分片、縮放、復制的分布式數據存儲。除此之外還可以使用基於SQL的語法跨集群查詢。官網
Flyway:簡單的資料庫遷移工具。官網
H2:小型SQL資料庫,以可以作為內存資料庫使用著稱。官網
HikariCP:高性能JDBC連接工具。官網
JDBI:便捷的JDBC抽象。官網
Protobuf:Google數據交換格式。官網
SBE:簡單二進制編碼,是最快速的消息格式之一。官網
Wire:整潔輕量級協議緩存。官網
幫實現依賴翻轉範式的開發庫。官網
Apache DeltaSpike:CDI擴展框架。官網
Dagger2:編譯時注入框架,不需要使用反射。官網
Guice:可以匹敵Dagger的輕量級注入框架。官網
HK2:輕量級動態依賴注入框架。官網
開發流程增強工具
從最基本的層面增強開發流程。
ADT4J:針對代數數據類型的JSR-269代碼生成器。官網
AspectJ:面向切面編程(AOP)的無縫擴展。官網
Auto:源代碼生成器集合。官網
DCEVM:通過修改JVM在運行時支持對已載入的類進行無限次重定義。官網
HotswapAgent:支持無限次重定義運行時類與資源。官網
Immutables:類似Scala的條件類。官網
JHipster:基於Spring Boot與AngularJS應用程序的Yeoman源代碼生成器。官網
JRebel:無需重新部署,可以即時重新載入代碼與配置的商業軟體。官網
Lombok:減少冗餘的代碼生成器。官網
Spring Loaded:類重載代理。官網
vert.x:多語言事件驅動應用框架。官網
分布式應用
用來編寫分布式容錯應用的開發庫和框架。
Akka:用來編寫分布式容錯並發事件驅動應用程序的工具和運行時。官網
Apache Storm:實時計算系統。官網
Apache ZooKeeper:針對大型分布式系統的協調服務,支持分布式配置、同步和名稱注冊。官網
Hazelcast:高可擴展內存數據網格。官網
Hystrix:提供延遲和容錯。官網
JGroups:提供可靠的消息傳遞和集群創建的工具。官網
Orbit:支持虛擬角色(Actor),在傳統角色的基礎上增加了另外一層抽象。官網
Quasar:為JVM提供輕量級線程和角色。官網
分布式資料庫
對應用程序而言,在分布式系統中的資料庫看起來就像是只有一個數據源。
Apache Cassandra:列式資料庫,可用性高且沒有單點故障。官網
Apache HBase:針對大數據的Hadoop資料庫。官網
Druid:實時和歷史OLAP數據存儲,在聚集查詢和近似查詢方面表現不俗。官網
Infinispan:針對緩存的高並發鍵值對數據存儲。官網
發布
以本機格式發布應用程序的工具。
Bintray:發布二進制文件版本控制工具。可以於Maven或Gradle一起配合使用。提供開源免費版本和幾種商業收費版本。官網
Central Repository:最大的二進制組件倉庫,面向開源社區提供免費服務。Apache Maven默認使用Central官網Repository,也可以在所有其他構建工具中使用。
IzPack:為跨平台部署建立創作工具(Authoring Tool)。官網
JitPack:打包GitHub倉庫的便捷工具。可根據需要構建Maven、Gradle項目,發布可立即使用的組件。官網
Launch4j:將JAR包裝為輕量級本機Windows可執行程序。官網
Nexus:支持代理和緩存功能的二進制管理工具。官網
packr:將JAR、資源和JVM打包成Windows、linux和Mac OS X本地發布文件。官網
文檔處理工具
處理Office文檔的開發庫。
Apache POI:支持OOXML規范(XLSX、DOCX、PPTX)以及OLE2規范(XLS、DOC、PPT)。官網
documents4j:使用第三方轉換器進行文檔格式轉換,轉成類似MS Word這樣的格式。官網
jOpenDocument:處理OpenDocument格式(由Sun公司提出基於XML的文檔格式)。官網
函數式編程
函數式編程支持庫。
Cyclops:支持一元(Monad)操作和流操作工具類、comprehension(List語法)、模式匹配、trampoline等特性。官網
Fugue:Guava的函數式編程擴展。官網
Functional Java:實現了多種基礎和高級編程抽象,用來輔助面向組合開發(composition-oriented development)。官網
Javaslang:一個函數式組件庫,提供持久化數據類型和函數式控制結構。官網
jOOλ:旨在填補Java 8 lambda差距的擴展,提供了眾多缺失的類型和一組豐富的順序流API。官網
游戲開發
游戲開發框架。
jMonkeyEngine:現代3D游戲開發引擎。官網
libGDX:全面的跨平台高級框架。官網
LWJGL:對OpenGL/CL/AL等技術進行抽象的健壯框架。官網
GUI
現代圖形化用戶界面開發庫。
JavaFX:Swing的後繼者。官網
Scene Builder:開發JavaFX應用的可視化布局工具。官網
高性能計算
涵蓋了從集合到特定開發庫的高性能計算相關工具。
Agrona:高性能應用中常見的數據結構和工具方法。官網
Disruptor:線程間消息傳遞開發庫。官網
fastutil:快速緊湊的特定類型集合(Collection)。官網
GS Collections:受Smalltalk啟發的集合框架。官網
HPPC:基礎類型集合。官網
Javolution:實時和嵌入式系統的開發庫。官網
JCTools:JDK中缺失的並發工具。官網
Koloboke:Hash set和hash map。官網
Trove:基礎類型集合。官網
High-scale-bli:Cliff Click 個人開發的高性能並發庫官網
IDE
簡化開發的集成開發環境。
Eclipse:老牌開源項目,支持多種插件和編程語言。官網
IntelliJ IDEA:支持眾多JVM語言,是安卓開發者好的選擇。商業版主要針對企業客戶。官網
NetBeans:為多種技術提供集成化支持,包括Java SE、Java EE、資料庫訪問、HTML5
Imgscalr:純Java 2D實現,簡單、高效、支持硬體加速的圖像縮放開發庫。官網
Picasso:安卓圖片下載和圖片緩存開發庫。官網
Thumbnailator:Thumbnailator是一個高質量Java縮略圖開發庫。官網
ZXing:支持多種格式的一維、二維條形碼圖片處理開發庫。官網
im4java: 基於ImageMagick或GraphicsMagick命令行的圖片處理開發庫,基本上ImageMagick能夠支持的圖片格式和處理方式都能夠處理。官網
Apache Batik:在Java應用中程序以SVG格式顯示、生成及處理圖像的工具集,包括SVG解析器、SVG生成器、SVG DOM等模塊,可以集成使用也可以單獨使用,還可以擴展自定義的SVG標簽。官網
JSON
簡化JSON處理的開發庫。
Genson:強大且易於使用的Java到JSON轉換開發庫。官網
Gson:谷歌官方推出的JSON處理庫,支持在對象與JSON之間雙向序列化,性能良好且可以實時調用。官網
Jackson:與GSON類似,在頻繁使用時性能更佳。官網
LoganSquare:基於Jackson流式API,提供對JSON解析和序列化。比GSON與Jackson組合方式效果更好。官網
Fastjson:一個Java語言編寫的高性能功能完善的JSON庫。官網
Kyro:快速、高效、自動化的Java對象序列化和克隆庫。官網
JVM與JDK
目前的JVM和JDK實現。
JDK 9:JDK 9的早期訪問版本。官網
OpenJDK:JDK開源實現。官網
基於JVM的語言
除Java外,可以用來編寫JVM應用程序的編程語言。
Scala:融合了面向對象和函數式編程思想的靜態類型編程語言。官網
Groovy:類型可選(Optionally typed)的動態語言,支持靜態類型和靜態編譯。目前是一個Apache孵化器項目。官網
Clojure:可看做現代版Lisp的動態類型語言。官網
Ceylon:RedHat開發的面向對象靜態類型編程語言。官網
Kotlin:JetBrain針對JVM、安卓和瀏覽器提供的靜態類型編程語言。官網
Xtend:一種靜態編程語言,能夠將其代碼轉換為簡潔高效的Java代碼,並基於JVM運行。官網
日誌
記錄應用程序行為日誌的開發庫。
Apache Log4j 2:使用強大的插件和配置架構進行完全重寫。官網
kibana:分析及可視化日誌文件。官網
Logback:強健的日期開發庫,通過Groovy提供很多有趣的選項。官網
logstash:日誌文件管理工具。官網
Metrics:通過JMX或HTTP發布參數,並且支持存儲到資料庫。官網
SLF4J:日誌抽象層,需要與具體的實現配合使用。官網
機器學習
提供具體統計演算法的工具。其演算法可從數據中學習。
Apache Flink:快速、可靠的大規模數據處理引擎。官網
Apache Hadoop:在商用硬體集群上用來進行大規模數據存儲的開源軟體框架。官網
Apache Mahout:專注協同過濾、聚類和分類的可擴展演算法。官網
Apache Spark:開源數據分析集群計算框架。官網
DeepDive:從非結構化數據建立結構化信息並集成到已有資料庫的工具。官網
Deeplearning4j:分布式多線程深度學習開發庫。官網
H2O:用作大數據統計的分析引擎。官網
Weka:用作數據挖掘的演算法集合,包括從預處理到可視化的各個層次。官網
QuickML:高效機器學習庫。官網、GitHub
消息傳遞
在客戶端之間進行消息傳遞,確保協議獨立性的工具。
Aeron:高效可擴展的單播、多播消息傳遞工具。官網
Apache ActiveMQ:實現JMS的開源消息代理(broker),可將同步通訊轉為非同步通訊。官網
Apache Camel:通過企業級整合模式(Enterprise Integration Pattern EIP)將不同的消息傳輸API整合在一起。官網
Apache Kafka:高吞吐量分布式消息系統。官網
Hermes:快速、可靠的消息代理(Broker),基於Kafka構建。官網
JBoss HornetQ:清晰、准確、模塊化,可以方便嵌入的消息工具。官網
JeroMQ:ZeroMQ的純Java實現。官網
Smack:跨平台XMPP客戶端函數庫。官網
Openfire:是開源的、基於XMPP、採用Java編程語言開發的實時協作伺服器。 Openfire安裝和使用都非常簡單,並可利用Web界面進行管理。官網GitHub
Spark:是一個開源,跨平台IM客戶端。它的特性支持集組聊天,電話集成和強大安全性能。如果企業內部部署IM使用Openfire+Spark是最佳的組合。官網GitHub
Tigase: 是一個輕量級的可伸縮的 Jabber/XMPP 伺服器。無需其他第三方庫支持,可以處理非常高的復雜和大量的用戶數,可以根據需要進行水平擴展。官網
雜項
未分類其它資源。
Design Patterns:實現並解釋了最常見的設計模式。官網
Jimfs:內存文件系統。官網
Lanterna:類似curses的簡單console文本GUI函數庫。官網
LightAdmin:可插入式CRUD UI函數庫,可用來快速應用開發。官網
OpenRefine:用來處理混亂數據的工具,包括清理、轉換、使用Web Service進行擴展並將其關聯到資料庫。官網
RoboVM:Java編寫原生iOS應用。官網
Quartz:強大的任務調度庫.官網
應用監控工具
監控生產環境中應用程序的工具。
AppDynamics:性能監測商業工具。官網
JavaMelody:性能監測和分析工具。官網
Kamon:Kamon用來監測在JVM上運行的應用程序。官網
New Relic:性能監測商業工具。官網
SPM:支持對JVM應用程序進行分布式事務追蹤的性能監測商業工具。官網
Takipi:產品運行時錯誤監測及調試商業工具。官網
原生開發庫
用來進行特定平台開發的原生開發庫。
JNA:不使用JNI就可以使用原生開發庫。此外,還為常見系統函數提供了介面。官網
自然語言處理
用來專門處理文本的函數庫。
Apache OpenNLP:處理類似分詞等常見任務的工具。官網
CoreNLP:斯坦佛CoreNLP提供了一組基礎工具,可以處理類似標簽、實體名識別和情感分析這樣的任務。官網
LingPipe:一組可以處理各種任務的工具集,支持POS標簽、情感分析等。官網
Mallet:統計學自然語言處理、文檔分類、聚類、主題建模等。官網
網路
網路編程函數庫。
Async Http Client:非同步HTTP和WebSocket客戶端函數庫。官網
Grizzly:NIO框架,在Glassfish中作為網路層使用。官網
Netty:構建高性能網路應用程序開發框架。官網
OkHttp:一個android和Java應用的HTTP+SPDY客戶端。官網
Undertow:基於NIO實現了阻塞和非阻塞API的Web伺服器,在WildFly中作為網路層使用。官網
ORM
處理對象持久化的API。
Ebean:支持快速數據訪問和編碼的ORM框架。官網
EclipseLink:支持許多持久化標准,JPA、JAXB、JCA和SDO。官網
Hibernate:廣泛使用、強健的持久化框架。Hibernate的技術社區非常活躍。官網
MyBatis:帶有存儲過程或者SQL語句的耦合對象(Couples object)。官網
OrmLite:輕量級開發包,免除了其它ORM產品中的復雜性和開銷。官網
Nutz:另一個SSH。官網,Github
JFinal:JAVA WEB + ORM框架。官網,Github
用來幫助創建PDF文件的資源。
Apache FOP:從XSL-FO創建PDF。官網
Apache PDFBox:用來創建和操作PDF的工具集。官網
DynamicReports:JasperReports的精簡版。官網
flyingsaucer:XML/XHTML和CSS 2.1渲染器。官網
iText:一個易於使用的PDF函數庫,用來編程創建PDF文件。注意,用於商業用途時需要許可證。官網
JasperReports:一個復雜的報表引擎。官網
性能分析
性能分析、性能剖析及基準測試工具。
jHiccup:提供平台中JVM暫停的日誌和記錄。官網
JMH:JVM基準測試工具。官網
JProfiler:商業分析器。官網
LatencyUtils:測量和報告延遲的工具。官網
VisualVM:對運行中的應用程序信息提供了可視化界面。官網
YourKit Java Profiler:商業分析器。官網
響應式開發庫
用來開發響應式應用程序的開發庫。
Reactive Streams:非同步流處理標准,支持非阻塞式反向壓力(backpressure)。官網
Reactor:構建響應式快速數據(fast-data)應用程序的開發庫。官網
RxJava:通過JVM可觀察序列(observable sequence)構建非同步和基於事件的程序。官網
REST框架
用來創建RESTful 服務的框架。
Dropwizard:偏向於自己使用的Web框架。用來構建Web應用程序,使用了Jetty、Jackson、Jersey和Metrics。官網
Feign:受Retrofit、JAXRS-2.0和WebSocket啟發的HTTP客戶端連接器(binder)。官網
Jersey:JAX-RS參考實現。官網
RESTEasy:經過JAX-RS規范完全認證的可移植實現。官網
RestExpress:一個Java類型安全的REST客戶端。官網
RestX:基於註解處理和編譯時源碼生成的框架。官網
Retrofit:類型安全的REST客戶端。官網
Spark:受到Sinatra啟發的Java REST框架。官網
Swagger:Swagger是一個規范且完整的框架,提供描述、生產、消費和可視化RESTful Web Service。官網
Blade:國人開發的一個輕量級的MVC框架. 它擁有簡潔的代碼,優雅的設計。官網
科學計算與分析
用於科學計算和分析的函數庫。
DataMelt:用於科學計算、數據分析及數據可視化的開發環境。官網
JGraphT:支持數學圖論對象和演算法的圖形庫。官網
JScience:用來進行科學測量和單位的一組類。官網
搜索引擎
文檔索引引擎,用於搜索和分析。
Apache Solr:一個完全的企業搜索引擎。為高吞吐量通信進行了優化。官網
Elasticsearch:一個分布式、支持多租戶(multitenant)全文本搜索引擎。提供了RESTful Web介面和無schema的JSON文檔。官網
Apache Lucene:是一個開放源代碼的全文檢索引擎工具包,是一個全文檢索引擎的架構,提供了完整的查詢引擎和索引引擎,部分文本分析引擎。官網
安全
用於處理安全、認證、授權或會話管理的函數庫。
Apache Shiro:執行認證、授權、加密和會話管理。官網
Bouncy Castle,涵蓋了從基礎的幫助函數到PGP/SMIME操作。官網:多途加密開發庫。支持JCA提供者(JCA provider)
Cryptomator:在雲上進行客戶端跨平台透明加密。官網
Keycloak:為瀏覽器應用和RESTful Web Service集成SSO和IDM。目前還處於beta版本,但是看起來非常有前途。官網
PicketLink:PicketLink是一個針對Java應用進行安全和身份認證管理的大型項目(Umbrella Project)。官網
序列化
用來高效處理序列化的函數庫。
FlatBuffers:高效利用內存的序列化函數庫,無需解包和解析即可高效訪問序列化數據。官網
Kryo:快速、高效的對象圖形序列化框架。官網
FST:提供兼容JDK的高性能對象圖形序列化。官網
MessagePack:一種高效的二進制序列化格式。官網
應用伺服器
用來部署應用程序的伺服器。
Apache Tomcat:針對Servlet和JSP的應用伺服器,健壯性好且適用性強。官網
Apache TomEE:Tomcat加Java EE。官網
Jetty:輕量級、小巧的應用伺服器,通常會嵌入到項目中。官網
WebSphere Liberty:輕量級、模塊化應用伺服器,由IBM開發。官網
WildFly:之前被稱作JBoss,由Red Hat開發。支持很多Java EE功能。官網
模板引擎
在模板中替換表達式的工具。
Apache Velocity:提供HTML頁面模板、email模板和通用開源代碼生成器模板。官網
FreeMarker:通用模板引擎,不需要任何重量級或自己使用的依賴關系。官網
Handlebars.java:使用Java編寫的模板引擎,邏輯簡單,支持語義擴展(semantic Mustache)。官網
Thymeleaf:旨在替換JSP,支持XML文件的工具。官網
測試
測試內容從對象到介面,涵蓋性能測試和基準測試工具。
Apache JMeter:功能性測試和性能評測。官網
Arquillian:集成測試和功能行測試平台,集成Java EE容器。官網
AssertJ:支持流式斷言提高測試的可讀性。官網
Awaitility:用來同步非同步操作的DSL。官網
Cucumber:BDD測試框架。官網
Gatling:設計為易於使用、可維護的和高性能負載測試工具。官網
Hamcrest:可用來靈活創建意圖(intent)表達式的匹配器。官網
JMockit:用來模擬靜態、final方法等。官網
JUnit:通用測試框架。官網
Mockito:在自動化單元測試中創建測試對象,為TDD或BDD提供支持。官網
PowerMock: 支持模擬靜態方法、構造函數、final類和方法、私有方法以及移除靜態初始化器的模擬工具。官網
REST Assured:為REST/HTTP服務提供方便測試的Java DSL。官網
Selenide:為Selenium提供精準的周邊API,用來編寫穩定且可讀的UI測試。官網
Selenium:為Web應用程序提供可移植軟體測試框架。官網
Spock:JUnit-compatible framework featuring an expressive Groovy-derived specification language.官網兼容JUnit框架,支持衍生的Groovy范的語言。
TestNG:測試框架。官網
Truth:Google的斷言和命題(proposition)框架。官網
Unitils:模塊化測試函數庫,支持單元測試和集成測試。官網
WireMock:Web Service測試樁(Stub)和模擬函數。官網
通用工具庫
通用工具類函數庫。
Apache Commons:提供各種用途的函數,比如配置、驗證、集合、文件上傳或XML處理等。官網
args4j:命令行參數解析器。官網
CRaSH:為運行進行提供CLI。官網
Gephi:可視化跨平台網路圖形化操作程序。官網
Guava:集合、緩存、支持基本類型、並發函數庫、通用註解、字元串處理、I/O等。官網
JADE:構建、調試多租戶系統的框架和環境。官網
javatuples:正如名字表示的那樣,提供tuple支持。盡管目前tuple的概念還有留有爭議。官網
JCommander:命令行參數解析器。官網
Protégé:提供存在論(ontology)編輯器以及構建知識系統的框架。官網
網路爬蟲
用於分析網站內容的函數庫。
Apache Nutch:可用於生產環境的高度可擴展、可伸縮的網路爬蟲。官網
Crawler4j:簡單的輕量級網路爬蟲。官網
JSoup:刮取、解析、操作和清理HTML。官網
Web框架
用於處理Web應用程序不同層次間通訊的框架。
Apache Tapestry:基於組件的框架,使用Java創建動態、強健的、高度可擴展的Web應用程序。官網
Apache Wicket:基於組件的Web應用框架,與Tapestry類似帶有狀態顯示GUI。官網
Google Web Toolkit:一組Web開發工具集,包含在客戶端將Java代碼轉為JavaScript的編譯器、XML解析器、RCP官網API、JUnit集成、國際化支持和GUI控制項。
Grails:Groovy框架,旨在提供一個高效開發環境,使用約定而非配置、沒有XML並支持混入(mixin)。官網
Ninja:Java全棧Web開發框架。非常穩固、快速和高效。官網
Pippo:小型、高度模塊化的類Sinatra框架。官網
Play:使用約定而非配置,支持代碼熱載入並在瀏覽器中顯示錯誤。官網
PrimeFaces:JSF框架,提供免費和帶支持的商業版本。包括若干前端組件。官網
Ratpack:一組Java開發函數庫,用於構建快速、高效、可擴展且測試完備的HTTP應用程序。官網
Spring Boot:微框架,簡化了Spring新程序的開發過程。官網
Spring:旨在簡化Java EE的開發過程,提供依賴注入相關組件並支持面向切面編程。官網
Vaadin:基於GWT構建的事件驅動框架。使用服務端架構,客戶端使用Ajax。官網
Blade:國人開發的一個輕量級的MVC框架. 它擁有簡潔的代碼,優雅的設計。官網
業務流程管理套件
流程驅動的軟體系統構建。
jBPM:非常靈活的業務流程管理框架,致力於構建開發與業務分析人員之間的橋梁。官網
Activity:輕量級工作流和業務流程管理框架。官網github
資源
社區
『肆』 怎麼查看linux下的模塊
1、lsmod 列加以掛載的內核模塊;
lsmod 是列出目前系統中已載入的模塊的名稱及大小等;另外我們還可以查看 /proc/moles ,我們一樣可以知道系統已經載入的模塊;
代碼:
[root@localhost beinan]# lsmod
2、modinfo 查看模塊信息;
modinfo 可以查看模塊的信息,通過查看模塊信息來判定這個模塊手譽殲的用途;
代碼:
[root@localhost beinan]# moinfo 模塊名
舉例:
代碼:
[root@localhost beinan]# modinfo ne2k-pcifilename: /lib/moles/2.6.11-1.1369_FC4/kernel/drivers/net/ne2k-pci.koauthor: Donald Becker / Paul Gortmakerdescription: PCI NE2000 clone driverlicense: GPLparmtype: debug:intparmtype: options:array of intparmtype: full_plex:array of intparm: debug:debug level (1-2)parm: options:Bit 5: full plexparm: full_plex:full plex setting(s) (1)vermagic: 2.6.11-1.1369_FC4 686 REGPARM 4KSTACKS gcc-4.0depends: 8390alias: pci:v000010ECd00008029sv*sd*bc*sc*i*alias: pci:v00001050d00000940sv*sd*bc*sc*i*alias: pci:v000011F6d00001401sv*sd*bc*sc*i*alias: pci:v00008E2Ed00003000sv*sd*bc*sc*i*alias: pci:v00004A14d00005000sv*sd*bc*sc*i*alias: pci:v00001106d00000926sv*sd*bc*sc*i*alias: pci:v000010BDd00000E34sv*sd*bc*sc*i*alias: pci:v00001050d00005A5Asv*sd*bc*sc*i*alias: pci:v000012C3d00000058sv*sd*bc*sc*i*alias: pci:v000012C3d00005598sv*sd*bc*sc*i*alias: pci:v00008C4Ad00001980sv*sd*bc*sc*i*srcversion: 6ACE95F441CD26DF9DC31C2
上 面的例子是我們查看 ne2k-pci 這個模塊的信息,通過查看,我們知道ne2k-pci 模塊是8029網卡(PCI NE2000 clone driver)的驅動;模塊是位於 /lib/moles/2.6.11-1.1369_FC4/kernel/drivers/net/ 中ne2k-pci.ko
我們現在常用的網卡也有8139的,8139網卡所用的驅動是 8139too ;查查看?
代碼:
[root@localhost beinan]# modinfo 8139too
我們再查查vfat 和ntfs 的模塊信息;
代碼:
[root@localhost beinan]# modinfo vfat[root@localhost beinan]# modinfo ntfs
自己嘗試一下;
注意: 模塊名是不能帶有後綴的,我們通過modprobe -l 所看到的模塊,都是帶有.ko 或.o後綴;
3、modprobe 掛載新模塊以及新模塊相依賴的模塊
modprobe 我們常用的功能就是掛載模塊,在虛渣掛載某個內核模塊的同時,這個模塊所依賴的模塊也被同時掛畢沖載;當然modprobe 也有列出內核所有模塊,還有移除模塊的功能;下在我們舉個例子說一說咱們常用的功能和參數;
代碼:
modprobe [-v] [-V] [-C config-file] [-n] [-i] [-q] [-o ] [parameters...]
modprobe -r [-n] [-i] [-v] ...
modprobe -l -t [ -a ...]
上面是modprobe 的用法,具體更為詳細的幫助,我們可以查看 man modprobe ;
代碼:
[root@localhost beinan]# modprobe -c
modprobe -c 可以查看moles 的配置文件,比如模塊的別名是什麼等;
代碼:
[root@localhost beinan]# modprobe -l
modprobe -l 是列出內核中所有的模塊,包括已掛載和未掛載的;通過modprobe -l ,我們能查看到我們所需要的模塊,然後根據我們的需要來掛載;其實modprobe -l 讀取的模塊列表就位於 /lib/moles/'uname -r' 目錄中;其中uname -r 是內核的版本;
代碼:
[root@localhost beinan]# uname -r2.6.11-1.1369_FC4[root@localhost beinan]# ls /lib/moles/2.6.11-1.1369_FC4/
通過上面的命令,自己試試看?
代碼:
[root@localhost beinan]# modprobe 模塊名 註:掛載一個模塊;
舉例:
代碼:
[root@localhost beinan]# modprobe ne2k-pci 註:掛載 ne2k-pci 模塊;[root@localhost beinan]# modprobe vfat 註:掛載vfat 模塊[root@localhost beinan]# modprobe ntfs 註:掛載ntfs 模塊[root@localhost beinan]# lsmod 註:列出已掛載模塊, 我們會看到ne2k-pci ,vfat ,ntfs的模塊 ;
注意: 模塊名是不能帶有後綴的,我們通過modprobe -l 所看到的模塊,都是帶有.ko 或.o後綴;
代碼:
[root@localhost beinan]# modprobe -r 模塊名 註:移除已載入的模塊,和rmmod 功能相同;
注意:模塊名是不能帶有後綴的,我們通過modprobe -l 所看到的模塊,都是帶有.ko 或.o後綴;
代碼:
[root@localhost beinan]# modprobe -r 模塊名
舉例:
代碼:
[root@localhost beinan]# modprobe -r ne2k-pci
就說這么多吧,更為詳細的還是用 man modprobe 來查看和嘗試;
4、rmmod 移除已掛載模塊;
命令格式:
代碼:
rmmod 模塊名
注意: 模塊名是不能帶有後綴的,我們通過modprobe -l 所看到的模塊,都是帶有.ko 或.o後綴;
舉例:
代碼:
[root@localhost beinan]# rmmod vfat 註:移除已掛載的模塊vfat
5、depmod 創建模塊依賴關系的列表
這 個模塊管理工具是創建模塊依賴關系的列表,有幾個參數我們注意一下就行了,目前的的Linux 發行版所用的內核是2.6x版本,是自動解決依賴關系,所以這個命令知道就行了;模塊之前也有依賴關系,比如我們想驅動USB 移動硬碟,目前有兩種驅動,一種是udev ,在內核中有,但目前不太穩定;另一種辦法是用usb-storage驅動,而usb-storage 依賴的模塊是scsi 模塊,所以我們要用usb-storage 的模塊,也得把scsi 編譯安裝;
再 舉個例子:sata的硬碟,在Linux中的設備表示的是/dev/sd* ,比如 /dev/sda,/dev/sdb 等... 系統要驅動 sata硬碟,則需要把sata在內核中選中,或編譯成模塊,或內置於內核之中,在此同時,還需要在內核中選中ide ,scsi 的支持等;
depmod 工具的洋文原意:depmod — program to generate moles.dep and map files.(我譯的:為moles.dep 文件或映射文件創建依賴關系)
代碼:
[root@localhost beinan]# depmod -a 註:為所有列在/etc/modprobe.conf 或/etc/moles.conf 中的所有模塊創建依賴關系,並且寫入到moles.dep文件;[root@localhost beinan]# depmod -e 註:列出已掛載但不可用的模塊;[root@localhost beinan]# depmod -n 註:列出所有模塊的依賴關系,但僅僅是輸出出來 (Write the dependency file on stdout only)
註:moles.dep 位於 /lib/moles/內核版本 目錄
比如 Fedora Core 4.0 中,系統默認的內核:
代碼:
[root@localhost beinan]# ls /lib/moles/2.6.11-1.1369_FC4/moles.dep/lib/moles/2.6.11-1.1369_FC4/moles.dep
6、insmod 掛載模塊;
insmod 這個工具,和modprobe 有點類似,但功能上沒有modprobe 強,modprobe 在掛載模塊是不用指定模塊文件的路徑,也不用帶文件的後綴.o 或.ko ;而insmod 需要的是模塊的所在目錄的絕對路徑,並且一定要帶有模塊文件名後綴的(molefile.o 或molesfile.ko );
對於這個工具,我們只是介紹一下, 並不推薦使用。因為模塊有依賴關系,對於新手來說,可能不知道這個模塊依賴和哪個模塊依賴;
舉例:
代碼:
[root@localhost beinan]# insmod /lib/moles/2.6.11-1.1369_FC4/kernel/drivers/net/tg3.ko
我們要到 /lib/moles/內核版本 uname -r 的命令輸出/kernel/drivers 中找相對應的模塊才行,要有絕對路徑,而且必須要用到文件名的全稱,不能把文件名的後綴省略;
四、與內核模塊載入相關的配置文件;
1、模塊的配置文件 moles.conf 或 modprobe.conf
內 核模塊的開機自動掛載模塊一般是位於一個配置文件,一般的Linux發行版本都有 /etc/moles.conf 或 /etc/modprobe.conf 。比如Fedora Core 4.0 內核模塊開機自動載入文件是 /etc/modprobe.conf ;在這個文件中,一般是寫入模塊的載入命令或模塊的別名的定義等;比如我們在moles.conf 中可能會發行類似的一行 ;
代碼:
alias eth0 8139too
而8029的網卡應該是
代碼:
alias eth0 ne2k-pci
這樣系統啟動的時候,首先會modprobe 8139too ,然後再為8139too 指定別名為 eth0,然後我們在登錄的時候,用 ifconfig 就會查看到網卡的IP 等情況,當然您得為網卡設置IP 才行;
一 般的情況下,modproe.conf 或moles.conf的內容 是我們用相應的硬體配置工具而生成的;如果您的硬體驅動是沒有被內核支持,您自己到硬體的廠商下載而來的驅動。一般的情況下都有安裝和幫助文件。他們的驅 動在配置時,他會寫入硬體的支持到moles.conf 或modprobe.conf 文件中。
再比如我們的音效卡在moles.conf 或modprobe.conf 中也有相應的內容,這是由alsaconf 配置工具生成的,明白了吧;同理網卡在modprobe.conf 或moles.conf中的內容也是由網卡的配置工具而來的。
有些硬體是以內核模塊的方式驅動的,模塊一旦載入上就能用,也沒有什麼配置工具,比如vfat 和ntfs 的支持;如果是硬體驅動不以模塊的方式支持,而是直接編入內核,也不會用在modprobe.conf 或 moles.conf 中加入什麼內容;
如果您有些模塊不能開機載入,您想讓一些模塊加機自動載入,就可以把modprobe 模塊 直接寫入配置文件;
2、內核模塊其它配置文件
內核模塊的其它配置文件還是需要了解的,比如 /lib/moles/內核版本目錄下的幾個文件;了解一下就行;比如:
代碼:
[root@localhost beinan]# uname -r2.6.11-1.1369_FC4[root@localhost beinan]# ls /lib/moles/2.6.11-1.1369_FC4/build misc moles.ccwmap moles.ieee1394map moles.isapnpmap moles.symbols sourcekernel moles.alias moles.dep moles.inputmap moles.pcimap moles.usbmap
五、硬體驅動在系統中的目錄;
硬體驅動在內核中以模塊支持的目錄;
硬 件驅動是必須由內核支持的,無論是我們自己安裝驅動,還是內核自帶的驅動都是如此。硬體驅動如果是以內核模塊支持的,驅動目錄位於: /lib/moles/內核版本/kernel/目錄 或 /lib/moles/內核版本/kernel/drivers 目錄中;
代碼:
[root@localhost beinan]# uname -r2.6.11-1.1369_FC4[root@localhost beinan]# ls /lib/moles/2.6.11-1.1369_FC4/kernelarch crypto drivers fs lib net sound
註:只有驅動在內核中以模塊的方法支持,驅動才位於 /lib/moles/相應的目錄;如果是直接置入內核的,不會出現在/lib/moles驅動相關的目錄;
六、自己編譯驅動的辦法;
通 過源碼編譯驅動一般是./configure ;make;make install ,有時程序不提供./configure ,我們可以make或make install ,或者執行make;make install ;如果不能make install ,則需要我們自己復制.o或者.ko文件到 /lib/moles/內核版本/kernel/目錄 或 /lib/moles/內核版本/kernel/drivers 目錄中相應的驅動目錄;
這個還是自己嘗試吧,說也說不清楚,遇到問題後就知道怎麼弄了;具體的還是驅動的REAME和INSTALL為准;
現在大多驅動都是在編譯安裝時,都自動復制.o或.ko 文件到內核模塊目錄,大多不用我們自己動手復制過去。如果您嘗試編譯安裝音效卡驅動 alsa-drivers 就會明白我所說的意思。
建議系統學習下linux,可以看看《linux就該這么學》
『伍』 Web前端崗位面試題有哪些
前端面試題匯總,基本上會有四大類問題,具體如下:
一、HTML
1、Doctype作用?嚴格模式與混雜模式如何區分?它們有何意義?
2、HTML5 為什麼只需要寫 <!DOCTYPE HTML>?
3、行內元素有哪些?塊級元素有哪些? 空(void)元素有那些?
4、頁面導入樣式時,使用link和@import有什麼區別?
5、介紹一下你對瀏覽器內核的理解?
6、常見的瀏覽器內核有哪些?
7、html5有哪些新特性、移除了那些元素?如何處理HTML5新標簽的瀏覽器兼容問題?如何區分 HTML 和 HTML5?
8、簡述一下你對HTML語義化的理解?
9、HTML5的離線儲存怎麼使用,工作原理能不能解釋一下?
10、瀏覽器是怎麼對HTML5的離線儲存資源進行管理和載入的呢?
11、請描述一下 cookies,sessionStorage 和 localStorage 的區別?
12、iframe有那些缺點?
13、Label的作用是什麼?是怎麼用的?(加 for 或 包裹)
14、HTML5的form如何關閉自動完成功能?
15、如何實現瀏覽器內多個標簽頁之間的通信? (阿里)
16、webSocket如何兼容低瀏覽器?(阿里)
17、頁面可見性(Page Visibility)API 可以有哪些用途?
18、如何在頁面上實現一個圓形的可點擊區域?
19、實現不使用 border 畫出1px高的線,在不同瀏覽器的Quirksmode和CSSCompat模式下都能保持同一效果。
20、網頁驗證碼是幹嘛的,是為了解決什麼安全問題?
21、tite與h1的區別、b與strong的區別、i與em的區別?
二、css
1、介紹一下標準的CSS的盒子模型?與低版本IE的盒子模型有什麼不同的?
2、CSS選擇符有哪些?哪些屬性可以繼承?
3、CSS優先順序演算法如何計算?
4、CSS3新增偽類有那些?
5、如何居中div?如何居中一個浮動元素?如何讓絕對定位的div居中?
6、display有哪些值?說明他們的作用。
7、position的值relative和absolute定位原點是?
8、CSS3有哪些新特性?
9、請解釋一下CSS3的Flexbox(彈性盒布局模型),以及適用場景?
10、用純CSS創建一個三角形的原理是什麼?
11、一個滿屏 品 字布局 如何設計?
三、常見兼容性問題?
1、li與li之間有看不見的空白間隔是什麼原因引起的?有什麼解決辦法?
2、經常遇到的瀏覽器的兼容性有哪些?原因,解決方法是什麼,常用hack的技巧 ?
3、為什麼要初始化CSS樣式。
4、absolute的containing block計算方式跟正常流有什麼不同?
5、CSS里的visibility屬性有個collapse屬性值是幹嘛用的?在不同瀏覽器下以後什麼區別?
6、position跟display、margin collapse、overflow、float這些特性相互疊加後會怎麼樣?
7、對BFC規范(塊級格式化上下文:block formatting context)的理解?
8、CSS權重優先順序是如何計算的?
9、請解釋一下為什麼會出現浮動和什麼時候需要清除浮動?清除浮動的方式
10、移動端的布局用過媒體查詢嗎?
11、使用 CSS 預處理器嗎?喜歡那個?
12、CSS優化、提高性能的方法有哪些?
13、瀏覽器是怎樣解析CSS選擇器的?
14、在網頁中的應該使用奇數還是偶數的字體?為什麼呢?
15、margin和padding分別適合什麼場景使用?
16、抽離樣式模塊怎麼寫,說出思路,有無實踐經驗?[阿里航旅的面試題]
17、元素豎向的百分比設定是相對於容器的高度嗎?
18、全屏滾動的原理是什麼?用到了CSS的那些屬性?
19、什麼是響應式設計?響應式設計的基本原理是什麼?如何兼容低版本的IE?
20、視差滾動效果,如何給每頁做不同的動畫?(回到頂部,向下滑動要再次出現,和只出現一次分別怎麼做?)
21、::before 和 :after中雙冒號和單冒號 有什麼區別?解釋一下這2個偽元素的作用。
22、如何修改chrome記住密碼後自動填充表單的黃色背景 ?
23、你對line-height是如何理解的?
24、設置元素浮動後,該元素的display值是多少?(自動變成display:block)
25、怎麼讓Chrome支持小於12px 的文字?
26、讓頁面里的字體變清晰,變細用CSS怎麼做?(-webkit-font-smoothing: antialiased;)
27、font-style屬性可以讓它賦值為「oblique」 oblique是什麼意思?
28、position:fixed;在android下無效怎麼處理?
29、如果需要手動寫動畫,你認為最小時間間隔是多久,為什麼?(阿里)
30、display:inline-block 什麼時候會顯示間隙?(攜程)
31、overflow: scroll時不能平滑滾動的問題怎麼處理?
32、有一個高度自適應的div,裡面有兩個div,一個高度100px,希望另一個填滿剩下的高度。
33、png、jpg、gif 這些圖片格式解釋一下,分別什麼時候用。有沒有了解過webp?
34、什麼是Cookie 隔離?(或者說:請求資源的時候不要讓它帶cookie怎麼做)
35、style標簽寫在body後與body前有什麼區別?
四、JavaScript
1、介紹JavaScript的基本數據類型。
2、說說寫JavaScript的基本規范?
3、JavaScript原型,原型鏈 ? 有什麼特點?
4、JavaScript有幾種類型的值?(堆:原始數據類型和 棧:引用數據類型),你能畫一下他們的內存圖嗎?
5、Javascript如何實現繼承?
6、Javascript創建對象的幾種方式?
7、Javascript作用鏈域?
8、談談This對象的理解。
9、eval是做什麼的?
10、什麼是window對象? 什麼是document對象?
11、null,undefined的區別?
12、寫一個通用的事件偵聽器函數(機試題)。
13、[「1」, 「2」, 「3」].map(parseInt) 答案是多少?
14、關於事件,IE與火狐的事件機制有什麼區別? 如何阻止冒泡?
15、什麼是閉包(closure),為什麼要用它?
16、javascript 代碼中的」use strict」;是什麼意思 ? 使用它區別是什麼?
17、如何判斷一個對象是否屬於某個類?
18、new操作符具體幹了什麼呢?
19、用原生JavaScript的實現過什麼功能嗎?
20、Javascript中,有一個函數,執行時對象查找時,永遠不會去查找原型,這個函數是?
21、對JSON的了解?
22、[].forEach.call($$("*"),function(a){ a.style.outline="1px solid #"+(~~(Math.random()*(1<<24))).toString(16) }) 能解釋一下這段代碼的意思嗎?
23、js延遲載入的方式有哪些?
24、Ajax 是什麼? 如何創建一個Ajax?
25、同步和非同步的區別?
26、如何解決跨域問題?
27、頁面編碼和被請求的資源編碼如果不一致如何處理?
28、模塊化開發怎麼做?
29、AMD(Moles/Asynchronous-Definition)、CMD(Common Mole
Definition)規范區別?
30、requireJS的核心原理是什麼?(如何動態載入的?如何避免多次載入的?如何 緩存的?)
31、讓你自己設計實現一個requireJS,你會怎麼做?
32、談一談你對ECMAScript6的了解?
33、ECMAScript6 怎麼寫class么,為什麼會出現class這種東西?
34、非同步載入的方式有哪些?
35、documen.write和 innerHTML的區別?
36、DOM操作——怎樣添加、移除、移動、復制、創建和查找節點?
37、.call() 和 .apply() 的含義和區別?
38、數組和對象有哪些原生方法,列舉一下?
39、JS 怎麼實現一個類。怎麼實例化這個類
40、JavaScript中的作用域與變數聲明提升?
41、如何編寫高性能的Javascript?
42、那些操作會造成內存泄漏?
43、JQuery的源碼看過嗎?能不能簡單概況一下它的實現原理?
44、jQuery.fn的init方法返回的this指的是什麼對象?為什麼要返回this?
45、jquery中如何將數組轉化為json字元串,然後再轉化回來?
46、jQuery 的屬性拷貝(extend)的實現原理是什麼,如何實現深拷貝?
47、jquery.extend 與 jquery.fn.extend的區別?
48、jQuery 的隊列是如何實現的?隊列可以用在哪些地方?
49、談一下Jquery中的bind(),live(),delegate(),on()的區別?
50、JQuery一個對象可以同時綁定多個事件,這是如何實現的?
51、是否知道自定義事件。jQuery里的fire函數是什麼意思,什麼時候用?
52、jQuery 是通過哪個方法和 Sizzle 選擇器結合的?(jQuery.fn.find()進入Sizzle)
53、針對 jQuery性能的優化方法?
54、Jquery與jQuery UI有啥區別?
55、JQuery的源碼看過嗎?能不能簡單說一下它的實現原理?
56、jquery 中如何將數組轉化為json字元串,然後再轉化回來?
57、jQuery和Zepto的區別?各自的使用場景?
58、針對 jQuery 的優化方法?
59、Zepto的點透問題如何解決?
60、jQueryUI如何自定義組件?
61、需求:實現一個頁面操作不會整頁刷新的網站,並且能在瀏覽器前進、後退時正確響應。給出你的技術實現方案?
62、如何判斷當前腳本運行在瀏覽器還是node環境中?(阿里)
63、移動端最小觸控區域是多大?
64、jQuery 的 slideUp動畫 ,如果目標元素是被外部事件驅動, 當滑鼠快速地連續觸發外部元素事件, 動畫會滯後的反復執行,該如何處理呢?
65、把 Script 標簽 放在頁面的最底部的body封閉之前 和封閉之後有什麼區別?瀏覽器會如何解析它們?
66、移動端的點擊事件的有延遲,時間是多久,為什麼會有? 怎麼解決這個延時?(click 有 300ms 延遲,為了實現safari的雙擊事件的設計,瀏覽器要知道你是不是要雙擊操作。)
67、知道各種JS框架(Angular, Backbone, Ember, React, Meteor, Knockout…)么? 能講出他們各自的優點和缺點么?
68、Underscore 對哪些 JS 原生對象進行了擴展以及提供了哪些好用的函數方法?
69、解釋JavaScript中的作用域與變數聲明提升?
70、那些操作會造成內存泄漏?
71、JQuery一個對象可以同時綁定多個事件,這是如何實現的?
72、Node.js的適用場景?
(如果會用node)知道route, middleware, cluster, nodemon, pm2, server-side rendering么?
73、解釋一下 Backbone 的 MVC 實現方式?
74、什麼是「前端路由」?什麼時候適合使用「前端路由」? 「前端路由」有哪些優點和缺點?
75、知道什麼是webkit么? 知道怎麼用瀏覽器的各種工具來調試和debug代碼么?
76、如何測試前端代碼么? 知道BDD, TDD, Unit Test么? 知道怎麼測試你的前端工程么(mocha, sinon, jasmin, qUnit..)?
77、前端templating(Mustache, underscore, handlebars)是幹嘛的, 怎麼用?
78、簡述一下 Handlebars 的基本用法?
79、簡述一下 Handlerbars 的對模板的基本處理流程, 如何編譯的?如何緩存的?
80、用js實現千位分隔符?(來源:前端農民工,提示:正則+replace)
檢測瀏覽器版本版本有哪些方式?
81、我們給一個dom同時綁定兩個點擊事件,一個用捕獲,一個用冒泡,你來說下會執行幾次事件,然後會先執行冒泡還是捕獲
『陸』 Ideal BDD啟動報Can』t find any datasource
Ideal BDD啟動報Can』t find any datasource需要修改模板。
BDD,Behavior Driven Development,行為驅姿皮動開發。
如果你不是很了解BDD,可以參考我四年前的一篇文章說起BDD,你會想到亂敬什麼,其中介紹過BDD的理論和應用。
我們可以這樣來概括BDD:
BDD採用統一的領域特定語言(DSL)來描述業務場景和用戶行為,讓團隊各個不同角色對業務需求有一致認識,從而做到更有效的溝通和更高效的協作;嘩冊慎
BDD的目的不是自動化測試,但是BDD可以有效指導自動化測試,基於BDD的自動化測試相當於維護了一份需求活文檔,對項目需求的維護和管理非常有價值。
『柒』 安全開發你必須使用的28個DevSecOps工具
將安全融入開發過程,更早捕獲並修復應用漏洞,你需要這五類共28款DevSecOps工具。
DevSecOps 是將安全集成到整個應用開發周期的過程,是從內到外強化應用,使其能夠抵禦各種潛在威脅的理想方式。因為很多公司企業不斷開發應用以滿足客戶和商業合作夥伴的需求,DevSecOps的吸引力也與日俱增。
敏捷開發方法與DevOps操作幫助公司企業達成持續開發的目標。雲原生應用架構也成為了DevSecOps運動的有力貢獻者,推動採用公共雲提供商、容器技術和容器平台為應用提供計算能力。DevSecOps將安全過程與工具集成進工作流並加以自動化,擺脫了傳統方法按時間點進行的潛在干擾,是個無縫且持續的過程。
咨詢公司 Data Bridge Market Research 稱,鑒於網路安全威脅數量與危害性的持續上升,全球DevSecOps市場預計將從2018年的14.7億美元增長至2026年的136.3億美元。
市場繁榮之下,DevSecOps工具必將呈現百花齊放百家爭鳴的局面。下面就按核心門類為您呈上多款優秀DevSecOps工具。
開發應用的時候很容易忽略掉安全漏洞。下面的工具為開發人員提供了潛在安全異常及缺陷的警報功能,可供開發人員及時調查並修復這些漏洞,不至於走得太遠回不了頭。有些工具專用於警報功能,比如開源的Alerta 。其他工具則兼具測試等別的功能,比如 Contrast Assess。
1. Alerta
(https://alerta.io/)
該開源工具可將多個來源的信息整合去重,提供快速可視化功能。Alerta與Prometheus、Riemann、Nagios、Cloudwatch及其他監視/管理服務集成,開發人員可通過API按需定製Alerta。
2. Contrast Assess
(https://www.contrastsecurity.com/interactive-application-security-testing-iast)
作為一款互動應用安全測試(IAST)工具,Contrast Assess 與用戶應用集成,在後台持續監視代碼,並在發現安全漏洞時發出警報。據稱即便是非安全開發人員也可使用 Contrast Assess 自行識別並修復漏洞。
3. Contrast Protect
(https://www.contrastsecurity.com/runtime-application-self-protection-rasp)
該運行時應用自保護(RASP)工具採用了 Contrast Assess 同款嵌入式代理。Contrast Protect 在生產環境中查找漏洞利用程序和未知威脅,並將結果提交給安全信息及事件管理(SIEM)控制台、防火牆或其他安全工具。
4. ElastAlert
(https://elastalert.readthedocs.io/en/latest/)
ElastAlert提供近實時接收警報的框架,可接收來自Elasticsearch數據的安全異常、流量激增及其他模式。ElastAlert查詢Elasticsearch並根據一系列規則比較這些數據。一旦出現匹配,ElastAlert便發出警報並隨附建議動作。
大多數DevSecOps工具都提供一定程度的自動化。此類工具自動掃描、發現並修復安全缺陷,只是自動化程度各有不同,從條件式事件驅動的自動化到運用深度學習技術的自動化都有。
1. CodeAI
(http://www.qbitlogic.com/codeai/)
旨在通過深度學習技術自動查找並修復源代碼中的安全漏洞,號稱可為開發人員提供可供參考的解決方案列表,而不僅僅是安全問題列表。其供應商QbitLogic宣稱,已為CodeAI饋送了數百萬個現實世界漏洞修復樣本供訓練。
2. Parasoft tool suite
(https://www.parasoft.com/)
Parasoft提供包括應用開發安全測試在內的多種自動化工具:
1)Parasoft C/C++test
(https://www.parasoft.com/procts/ctest)
用於開發過程早期缺陷識別;
2)Parasoft Insure++
(https://www.parasoft.com/procts/insure)
可以查找不規范編程及內存訪問錯誤;
3)Parasoft Jtest
(https://www.parasoft.com/procts/jtest)
用於Java軟體開發測試;
4) Parasoft dotTEST
(https://www.parasoft.com/procts/jtest)
以深度靜態分析和高級覆蓋作為 Visual Studio 工具的補充。
3. Red Hat Ansible Automation
(https://www.redhat.com/en/technologies/management/ansible)
該工具包含三個模塊——Ansible Tower、Ansible Engine 和 Red Hat Ansible Network Automation,可作為無代理IT自動化技術單獨或聯合使用。盡管不是專門的安全工具,Ansible Automation 卻可供用戶定義規則以確定自身軟體開發項目中哪些部分是安全的。
4. StackStorm
(https://stackstorm.com)
該開源工具號稱「可進行條件式運營」,其事件驅動的自動化能在檢測到安全漏洞時提供腳本化的修復與響應,並附有持續部署、ChatOps優化等功能。
5. Veracode
(https://www.veracode.com/devsecops)
該公司提供DevSecOps環境中廣泛使用的一系列自動化安全工具,包括在代碼編寫時即時自動掃描的Greenlight;在沙箱中掃描代碼漏洞的 Developer Sandbox;識別漏洞組件的 Software Composition Analysis (SCA);以及識別應用缺陷的 Static Analysis。
專用DevSecOps儀錶板工具可使用戶在同一圖形界面中查看並共享從開發伊始到運營過程中的安全信息。有些DevSecOps應用,比如ThreatModeler和Parasoft已自帶儀錶板。
1. Grafana
(https://grafana.com/)
該開源分析平台允許用戶創建自定義儀錶板,聚合所有相關數據以可視化及查詢安全數據。如果不想自行構建,還可以在其網站上選用社區構建的儀錶板。
2. Kibana
(https://www.elastic.co/procts/kibana)
如果你使用Elasticsearch,該開源工具可在統一圖形界面中集成成千上萬的日誌條目,包括運營數據、時間序列分析、應用監視等等。
威脅建模DevSecOps工具用以在復雜的攻擊界面中識別、預測並定義威脅,以便用戶可以做出主動安全決策。有些工具可根據用戶提供的系統及應用信息自動構建威脅模型,並提供可視化界面以幫助安全及非安全人員 探索 威脅及其潛在影響。
1. IriusRisk
(https://continuumsecurity.net/threat-modeling-tool/)
出自 Continuum Security 的解決方案,既可雲部署,也可現場部署,能以基於問卷的界面自動化風險及需求分析,並設計出威脅模型和技術性安全要求。IriusRisk還可幫助用戶管理代碼構建及安全測試階段。
2. ThreatModeler
(https://threatmodeler.com/)
該自動化威脅建模系統有兩個版本:AppSec版和雲版。在提供了用戶應用或系統的功能性信息後,ThreatModeler會基於更新的威脅情報自動就整個攻擊界面進行數據分析和潛在威脅識別。
3. OWASP Threat Dragon
(https://www.owasp.org/index.php/OWASP_Threat_Dragon)
一款基於Web的開源工具,提供系統圖解和用於自動化威脅建模與緩解的規則引擎。Threat Dragon 承諾可與其他軟體開發生命周期(SDLC)工具無縫集成,且界面易於使用。
在開發過程中測試應用以找出潛在漏洞是DevSecOps的關鍵部分,能夠事先發現安全漏洞,避免漏洞被黑客利用。盡管其他工具往往包含了測試功能,比如Parasoft出品的那些,下列工具仍然在應用安全測試上表現強勁。
1. BDD-Security
(https://continuumsecurity.net/bdd-security/)
該出自 Continuum Security 的開源框架可使安全人員在敏捷開發過程中測試行為驅動開發(BDD)語言編寫的功能及非功能性安全場景。此BDD框架旨在使安全功能獨立於應用特定的導航邏輯,讓同樣的安全要求能夠更容易地應用到多個應用程序上。
2. Checkmarx CxSAST
(https://www.checkmarx.com/procts/static-application-security-testing/)
可對25種編程及腳本語言進行未編譯/未構建源代碼掃描的靜態應用安全測試(SAST)工具,能在SDLC早期發現成百上千種安全漏洞。CxSAST兼容所有集成開發環境(IDE),是Checkmarx軟體暴露平台的一部分——該平台可在DevOps所有階段植入安全。Checkmarx的互動式應用安全測試(IAST)工具可檢測運行中應用的安全漏洞。
3. Chef InSpec
(https://github.com/inspec/inspec)
整個開發過程中的每一階段都可以運用該開源工具自動化安全測試以確保針對傳統伺服器及容器和雲API的合規、安全及其他政策要求。
4. Fortify
(https://www.microfocus.com/en-us/solutions/application-security)
Micro Focus 出品,提供端到端應用安全,可供進行覆蓋整個軟體開發生命周期的現場及按需測試。Fortify on Demand 是 Micro Focus 的應用安全即服務產品,提供靜態、動態和移動應用安全測試,以及生產環境中Web應用的持續監視。
5. Gauntlt
(http://gauntlt.org/)
流行測試框架,旨在推動易操作的安全測試及安全、開發和運營團隊間的溝通。GauntIt便於產生攻擊測試用例,且能方便地鉤入現有工具及進程。
6. Synopsys suite
(https://www.synopsys.com/)
Synopsys提供多個應用安全測試工具,包括:
1)SAST工具Coverity
(https://www.synopsys.com/software-integrity/security-testing/static-analysis-sast.html)
自動化測試且融入持續集成/持續交付(CI/CD)管道;
2)SCA工具 Black Duck
(https://www.synopsys.com/software-integrity/security-testing/software-composition-analysis.html)
採用容器及應用中的開源和第三方代碼檢測並管理安全;
3)SeekerIAST
(https://www.synopsys.com/software-integrity/security-testing/interactive-application-security-testing.html)
識別可暴露敏感數據的運行時安全漏洞;
以及一系列用於應用安全測試的託管服務。
以下DevSecOps工具同樣含有上述工具提供的功能,但或多或少略有不同。
1. Aqua Security
(https://www.aquasec.com/)
在整個CI/CD管道和運行時環境中管理端到端安全,可用於所有平台和雲環境的容器及雲原生應用。
2. Dome9 Arc
(https://www.checkpoint.com/solutions/devops-security/)
被 Check Point 收購,提供自動化測試及安全實施,使開發人員能夠將安全及合規融入公共雲應用的構建、部署及運營。
3. GitLab
(https://about.gitlab.com/)
該工具可將DevSecOps架構融入CI/CD過程,在提交時測試每一塊代碼,使開發人員能夠在編程期間緩解安全漏洞,並提供涵蓋所有漏洞的儀錶板。
4. Red Hat OpenShift
(https://www.redhat.com/en/technologies/cloud-computing/openshift)
為基於容器的應用提供內置安全,比如基於角色的訪問控制、以安全增強的Linux(SELinux)實現隔離,以及貫穿整個容器構建過程的核查。
5. RedLock
(https://www.paloaltonetworks.com/procts/secure-the-cloud/redlock/cloud-security-governance)(前身為Evident.io)
Palo Alto Networks 出品,適用於部署階段,幫助開發人員快速發現並緩解資源配置、網路架構及用戶活動中的安全威脅,尤其是在亞馬遜S3存儲桶和彈性塊存儲(EBS)卷上。
6. SD Elements
(https://www.securitycompass.com/sdelements/)
出品自 Security Compass 的自動化平台,旨在收集客戶軟體信息,發現威脅及對策,突出相關安全控制措施以幫助公司企業實現其安全和合規目標。
7. WhiteHat Sentinel 應用安全平台
(https://www.whitehatsec.com/procts/solutions/devsecops/)
該解決方案提供貫穿整個SDLC的應用安全,適用於需將安全集成進工具中的敏捷開發團隊,以及需持續測試以保證生產環境應用安全的安全團隊。
8. WhiteSource
(https://www.whitesourcesoftware.com/)
用於解決開源漏洞,可集成進用戶的生成過程,無論用戶採用什麼編程語言、生成工具或開發環境。WhiteSource使用經常更新的開源代碼資料庫持續檢查開源組件的安全及授權。
『捌』 TypeError: an integer is required (got type bytes)
https://github.com/pytest-dev/pytest-bdd/issues/354
您正在使用毀胡做哪個版本的pytest-bdd?
卸載本地安裝的 pytest-bdd ,就可以了。
pip3 uninstall pytest-bdd==3.0.1
BDD行為驅動簡介及Pytest-bdd基礎使用 :
後纖衡續自己學習下做悄
https://www.cnblogs.com/superhin/p/11454716.html
『玖』 如何編譯Docker源碼
本文根據docker官方給出的docker代碼編譯環境搭建指南做更深入的分析。官方給出的指導比較簡單,但是由於國內的網路問題經常會編譯失敗,了解了編譯步驟後,也可以結合自身遇到的網路問題進行「規避」。
docker的編譯環境實際上是創建一個docker容器,在容器中對代碼進行編譯。 如果想快速的查看編譯環境搭建指導,而不關注環境搭建的機制和細節,可以直接跳到最後一章「總結」。
前提
機器上已經安裝了docker,因為編譯環境是個docker容器,所以要事先有docker(daemon),後面會創建個編譯環境容器,在容器裡面編譯代碼。本文中使用物理機,物理機上運行著docker (daemon)。
機器(物理機)上安裝了git 。 後續使用git下載docker源碼
機器(物理機)上安裝了make。
下載ubuntu 14.04的docker鏡像
下載docker源碼
git clone
會把代碼下載到當前目錄下,後面會把代碼拷貝到容器中。
編譯前分析
官方給的編譯方法是make build 和 make binary等。下面先分析Makefile,看懂Makefile後,編譯環境的准備流程就比較清楚了。
Makefile
在下載的docker源碼中可以看到它的Makefile,Makefile中比較關鍵的幾個參數:
DOCKER_MOUNT := $(if $(BIND_DIR),-v "$(CURDIR)/$(BIND_DIR):/go/src/github.com/docker/docker/$(BIND_DIR)") DOCKER_MOUNT 表示創建容器時的mount參數。因為編譯環境是一個容器,在後續的步驟中啟動容器時使用DOCKER_MOUNT參數,會將物理機上的目錄mount給容器容器,容器中該目錄是編譯生成docker二進制文件的目錄。
DOCKER_FLAGS := docker run --rm -i --privileged $(DOCKER_ENVS) $(DOCKER_MOUNT) 這是後面創建docker容器時的命令行的一部分,其中包含了前面的DOCKER_MOUNT參數。
DOCKER_IMAGE := docker-dev$(if $(GIT_BRANCH),:$(GIT_BRANCH)) 這是docker image參數,鏡像的名字是docker-dev,以當前git中docker版本作為tag名。這個鏡像是在make build一步做出來的。
DOCKER_RUN_DOCKER := $(DOCKER_FLAGS) "$(DOCKER_IMAGE)" 創建docker容器的命令行,組合了前面的DOCKER_FLAGS 和 DOCKER_IMAGE 。 從命令行中可以看出,啟動容器使用的參數有 --rm -i --privileged,使用了一些環境變數,還有使用了-v參數把物理機上目錄mount給容器,在容器中編譯好二進制文件後放到該目錄中,在物理機上就能獲得docker二進制文件。啟動的的docker 容器鏡像名字是docker-dev。下文會介紹docker-dev鏡像是怎麼來的。
由於官方給出的「構建編譯環境」的方法是執行 make build,下面在Makefile中看到build分支是這樣的:
make build時會調用 docker build -t "$(DOCKER_IMAGE)" . 去製作一個叫做DOCKER_IMAGE的鏡像。
進行源碼編譯的方式是執行 make binary來編譯代碼,在Makefile中make binary的分支如下:
make binary除了進行 make build以外,會執行$(DOCKER_RUN_DOCKER),即上文提到的docker run命令行。由於執行過了build,會build出來docker-dev鏡像,所以在docker run時直接使用前面build出來的鏡像。docker run時的命令行參數是hack/make.sh binary。make binary的過程實際上是創建一個容器,在容器中執行hack/make.sh binary腳本。接下來會詳細介紹make build和make binary所做的內容。
make build
根據官方的指導,先執行make build來搭建編譯環境。上面分析了,make build實際上是製作了一個鏡像,這個鏡像里會包含編譯代碼所需的環境。下面來介紹下這個鏡像。
Dockerfile
在和Makefile相同的目錄下(源碼的根目錄),有Dockerfile。執行make build 相當於調用docker build,使用的就是該Dockerfile。Dockerfile中的幾個主要步驟(有些步驟這里略過):
FROM ubuntu:14.04 使用ubuntu 14.04作為基礎鏡像;在宿主機上,要事先下載好ubuntu 14.04鏡像。
安裝一些編譯需要的軟體;
用git下載lvm2源碼,並編譯安裝;
下載並安裝GO 1.5.1;
安裝GO相關的tools 可以做code coverage test 、 go lint等代碼檢查
安裝registry和notary server;
安裝docker-py 後面跑集成測試用的
將物理機的contrib/download-frozen-image.sh 腳本拷貝到鏡像中/go/src/github.com/docker/docker/contrib/
運行contrib/download-frozen-image.sh 製作鏡像 實際上這一步只是下載了3個鏡像的tar文件。注意:docker build相當於創建一個臨時的容器(在臨時的容器中執行Dockerfile中的每一步,最後在保存成鏡像),「運行contrib/download-frozen-image.sh 製作鏡像」這個動作出現在Dockerfile中,相當於在docker build所創建的臨時的容器中下載docker鏡像,有docker-in-docker容器嵌套的概念。下一小節會對download-frozen-image.sh腳本做詳細分析。
ENTRYPOINT ["hack/dind"] 做出來的鏡像,使用它啟動的容器可以自動運行源碼目錄中的hack/dind腳本。 dind這個腳本是a wrapper script which allows docker to be run inside a docker container 。後面的小節會對hack/dind腳本做詳細的分析。
COPY . /go/src/github.com/docker/docker 把物理機上的docker源碼文件打入到鏡像中
download-frozen-image.sh腳本
上一小節里提到,在Dockerfile中,有一步會調用contrib/download-frozen-image.sh ,它主要作用是下載3個鏡像的tar包,供後續docker load。在Dockerfile中的調用方式如下:
download-frozen-image.sh腳本中會依次解析參數,其中/docker-frozen-images作為base dir,後面下載的東西全放到這里。之後的3個參數是鏡像,裡麵包含了鏡像名(例如busybox)、鏡像tag(例如latest)、鏡像id(例如),後面會在循環中依次下載這3個鏡像的tar文件。
download-frozen-image.sh腳本中會通過curl從registry上獲取如下信息:
token:獲取token,後面curl獲取的其他信息時都需要使用token。例如本例中 token='signature=,repository="library/busybox",access=read'
ancestryJson:把鏡像相關聯的歷史層次的id也都獲取到,因為每一層的tar都需要下載。本例中 ancestryJson='["", ""]'
這里可以看到這個鏡像只有2層,兩層的id這里都列了出來。 每個鏡像包含的層數不同,例如。第三個鏡像jess/unshare共有10層。
VERSION、json、tar: 每一層鏡像id的目錄下,都下載這3個文件,其中VERSION文件內容目前都是「1.0」,json文件是該層鏡像的json文件,tar文件是該層鏡像的真正內容,以.tar保存。
下載好的各層鏡像目錄結構如下:
$ls
$tree
hack/dind腳本
在Dockerfile中,ENTRYPOINT ["hack/dind"] ,表示在鏡像啟動後,運行該腳本,下面分析一下這個腳本的功能。
腳本在代碼根目錄下的hack目錄中,作者對腳本的描述是 DinD: a wrapper script which allows docker to be run inside a docker container.
就是可以在docker容器中創建docker容器。它就做了一個事,那就是在容器中創建好cgroup目錄,並把各個cgroup子系統mount上來。
為了方便理解,我們可以先看看物理機。在宿主機上如果創建docker容器,需要宿主機上必須事先mount cgroup子系統,因為cgroup是docker容器的一個依賴。同理docker-in-docker也要求外層的docker容器中有cgroup子系統,dind腳本在容器啟動後,先去/proc/1/cgroup中獲取cgroup子系統,然後依次使用mount命令,將cgroup mount上來,例如mount -n -t cgroup -o "cpuset" cgroup "/cgroup/cpuset"
最終在運行make build後,會製作出一個叫docker-dev的鏡像。
make binary
執行make binary 就可以編譯出docker二進制文件。編譯出來的二進制文件在源碼目錄下的bundles/1.10.0-dev/binary/docker-1.10.0-dev ,其中還包含md5和sha256文件。
Makefile中的binary
Makefile中關於make binary流程是
先執行build,即上一節介紹的,製作docker-dev編譯環境鏡像。
再執行DOCKER_RUN_DOCKER,創建容器,DOCKER_RUN_DOCKER就是執行docker run,使用docker-dev鏡像啟動容器,並且會mount -v 將容器生成二進制文件的路徑與宿主機共享。DOCKER_RUN_DOCKER在「編譯前分析」一章中有介紹。啟動的容器運行的命令行是 hack/make.sh binary 。docker run完整的形式如下:
docker run --rm -i --privileged -e BUILDFLAGS -e DOCKER_CLIENTONLY -e DOCKER_DEBUG -e DOCKER_EXECDRIVER -e DOCKER_EXPERIMENTAL -e DOCKER_REMAP_ROOT -e DOCKER_GRAPHDRIVER -e DOCKER_STORAGE_OPTS -e DOCKER_USERLANDPROXY -e TESTDIRS -e TESTFLAGS -e TIMEOUT -v "/home/mu/src/docker/docker/bundles:/go/src/github.com/docker/docker/bundles" -t "docker-dev:master" hack/make.sh binary
hack/make.sh腳本
上一節提到的make binary中創建的容器啟動命令是hack/make.sh binary,運行容器中的(docker源碼目錄下的)hack/make.sh腳本,參數為binary。
make.sh中根據傳入的參數組裝後續編譯用的flags(BUILDFLAGS),最後根據傳入的參數依次調用 hack/make/目錄下對應的腳本。例如我們的操作中傳入的參數只有一個binary。那麼在make.sh的最後,會調用hack/make/binary腳本。
hack/make/binary腳本中,就是直接調用go build進行編譯了,其中會使用BUILDFLAGS LDFLAGS LDFLAGS_STATIC_DOCKER等編譯選項。
如果最終生成的docker二進制文件不在bundles/1.10.0-dev/binary/目錄下,那麼可能是編譯參數BINDDIR設置的不正確,可以在執行make binary時增加BINDDIR參數,例如
make BINDDIR=. binary , 將BINDDIR設置為當前目錄。
總結
編譯步驟總結:
1、編譯前在物理機上安裝好make、git,並下載好docker代碼。下載好ubuntu:14.04鏡像
2、執行make build 。這步執行完會在物理機上創建出一個docker-dev的鏡像。
3、執行make binary 。 這步會使用docker-dev鏡像啟動一個容器,在容器中編譯docker代碼。編譯完成後在物理機上直接可以看到二進制文件。默認二進制文件在 bundles/1.10.0-dev/binary/目錄下
4、docker代碼里有很多test,可以使用此套編譯環境執行test,例如 make test 。 更多參數可以看Makefile
搭建環境心得:
1、在make build時,使用Dockerfile創建製作鏡像,這個鏡像有40多層,其中一層失敗就會導致整個build過程失敗。由於Dockerfile中很多步驟是要連到國外的網站去下載東西,很容易失敗。好在docker build有cache機制,如果前面的層成功了,下次重新build時會使用cache跳過,節省了很多時間。所以如果make build中途失敗(一般是由於國內連國外的網路原因),只要重新執行make build就會在上次失敗的地方繼續,多試幾次可以成功。
2、如果其他人已經build出了docker-dev鏡像,可以把它下載到自己的環境上。這樣在自己make build時,會跳過那些已經在本地存在的層,可以節省時間。
3、每一次編譯會自動刪除掉前面已經生成的二進制文件,所以不用擔心二進制文件不是最新的問題。
『拾』 bdd是什麼意思
行為驅動開發(Behavior-Driven Development)(簡寫BDD),在軟體工程中,BDD是一種敏捷軟體開發的技術。
行為驅動開發(BDD)是測試驅動開發的延伸,開發使用簡伍氏單的,特定於領域的腳本語言。這些DSL將結構化自然語言語句轉換為可執行測試。結果是與給定功能的驗收標准以及用於驗證該功能的測試之間的關系更密切。因此,它一般是測試驅腔此散動開發(TDD)測試的自然延伸。
其他意思
bdd是韓國LCK賽區Gen.G戰隊中單的游戲名,全名叫郭普成。
2015年4月,BDD加入CJE戰隊開啟自己的職業生涯,但由於年齡不足的原因,他一直作為CoCo的替補。
2016年LCK春季賽,BDD與另一名中單選手SKY輪換上場,共出場22場。CJE以8勝10位列常規賽第八,未能進入季後賽。同年LCK夏季賽,BDD共出場27場。但CJE在常規賽僅取得3勝15負的戰績,排名聯賽墊底。12月6日,LZ戰隊宣布原扒神CJE戰隊中單選手BDD加入。