Ⅰ 2021年你讀了哪些覺得比較好的計算機書籍
[美] 馬丁·福勒(Martin Fowler) 著,徐昊,鄭曄,熊節 譯
領域特定語言DSL,通過java和C語言分析具體案例,講解DSL的構造方式和通用原則,軟體開發程序員的教程,馬丁·福勒新的力作。
《領域特定語言》是領域特定語言(Domain-Specific Language,DSL)領域的豐碑之作,由軟體開發大師馬丁·福勒(Martin Fowler)歷時多年寫作而成。
全書共57章,分為6個部分,全面介紹了DSL概念、DSL常見主題、外部DSL主題、內部DSL主題、備高段選計算模型以及代碼生成等內容,揭示了與編程語言無關的通用原則和模式,闡釋了如何通過DSL有效提高開發人員的生產力以及增進與領域專家的有效溝通,能為開發人員選擇和使用DSL提供有效的決策依據和指導方法。
本書適合想要了解各種DSL及其構造方式,理解其通用原則、模式和適用場景,以提高開灶念州發生產力和溝通能力的軟體開發人員閱讀。
[美] 肯尼思·,A.蘭伯特(Kenneth,A.,Lambert,) 著,肖鑒明 譯
數據結構演算法入門教程,基於python語言進行講解,國外高等院校教材升級,書中包含大量習題和編程項目,隨書贈送配套資源。
本書用 Python 語言來講解數據結構及實現方法。全書首先概述 Python 編程的功能—這些功能是實際編程和解決問題時所必需的;其次介紹抽象數據類型的規范、實現和應用,多項集類型,以及介面和實現之間的重要差異;隨後介紹線性多項集、棧、隊列和列表;最後介紹樹、圖等內容。本書附有大量的復習題和編程項目,旨在幫助讀者鞏固所學知識。
本書不僅適合高等院校計算機專業師生閱讀,也適合對 Python 感興趣的讀者和程序員閱讀。
喬恩·克萊因伯格(Jon Kleinberg) 著,王海鵬 譯
用實際示例闡明枯燥的演算法理論,更注重演算法設計思維的培養,適合作為演算法入門書。
這是一本被眾多名校採用的演算法設計課程教材,強調用實際示例闡明枯燥的演算法理論,更注重演算法設計思路而非演算法復雜度分析。本書採用新穎的教學方式,通過分析真實世界的問題來激發演算法思想。兩位作者以一種清晰、直接的方式,指導學生自己分析和定義問題,並從中找出適用於給定場景的演算法設計原則。本書鼓勵讀者更深入地理解演算法設計過程, 探索 演算法在計算機科學的更廣闊領域中的應用。
本書具有以下特色:
王爭著
20個數據結構與演算法,100個真實項目場景案例,300多幅演算法手繪圖解
本書分為11章。第1章介紹復雜度分析方法。第2章介紹數組、鏈表、棧和隊列這些基礎的線性表數據結構。第3章介紹遞歸編程技巧、8種經典排序、二分查找及二分查找的變體問題。第4章隱蔽介紹哈希表、點陣圖、哈希演算法和布隆過濾器。第5章介紹樹相關的數據結構,包括二叉樹、二叉查找樹、平衡二叉查找樹、遞歸樹和B+樹。第6章介紹堆,以及堆的各種應用,包括堆排序、優先順序隊列、求Top K、求中位數和求百分位數。第7章介紹跳錶、並查集、線段樹和樹狀數組這些比較高級的數據結構。第8章介紹字元串匹配演算法,包括BF演算法、RK演算法、BM演算法、KMP演算法、Trie樹和AC自動機。第9章介紹圖及相關演算法,包括深度優先搜索、廣度優先搜索、拓撲排序、Dijkstra演算法、Floyd演算法、A*演算法、Z小生成樹演算法、Z大流演算法和Z大二分匹配等。第10章介紹4種演算法思想,包括貪心、分治、回溯和動態規劃。第11章介紹4個經典項目中的數據結構和演算法的應用,包括Redis、搜索引擎、鑒許可權流和短網址服務。另外,附錄A為書中的思考題的解答。
[美] 阿爾·斯維加特(Al Sweigart) 著
Python編程從入門到實踐姊妹篇,零基礎自學Python教程書籍,提供配套同步教學視頻、在線編程環境!針對Python3.X版本更新
在本書中,你將學習利用Python編程在幾分鍾內完成手動需要幾小時的工作,無須事先具備編程經驗。通過閱讀本書,你會學習Python的基本知識, 探索 Python豐富的模塊庫,並完成特定的任務(例如,從網站抓取數據,讀取PDF和Word文檔等)。本書還包括有關輸入驗證的實現方法,以及自動更新CSV文件的技巧。一旦掌握了編程的基礎知識,你就可以毫不費力地創建Python程序,自動化地完成很多繁瑣的工作,包括:
何華平 著
Python編程零基礎入門實踐教程,用Python處理Excel、Word、PPT、PDF、圖像文件,提升職場辦公效率,解決辦公難題,附贈學習資源和教學視頻
這是一本關於如何利用Python提高日常辦公效率的書,書中凝聚了作者多年的實踐經驗和獨特思考,旨在幫助讀者准確、高效地完成大量高重復度的工作。
《學Python,不加班:輕松實現辦公自動化》匯集了日常辦公和處理文檔時常見的問題,通過實例的演示與講解,幫助讀者靈活有效地使用Python處理工作中遇到的問題。全書共11章,涵蓋Python的各種應用場景,具體包括文件管理自動化,網路信息自動獲取,TXT、XLS/XLSX、DOC/DOCX、PPT、PDF、圖片文件的自動化處理,模擬滑鼠、鍵盤操控本地軟體,自動化運行管理等。本書力圖淡化編程中的抽象概念,貼合工作場景,注重實戰效果,通過對Python技術的巧妙講解,幫助讀者成為高效率的辦公室「超人」。
雷明 著
人工智慧深度學習領域教程,AI程序員的數學參考書,透徹理解機器學習演算法,從數學層面搞懂核心演算法原理的邏輯,python程序講解
本書的目標是幫助讀者全面、系統地學習機器學習所必須的數學知識。全書由8章組成,力求精準、最小地覆蓋機器學習的數學知識。包括微積分,線性代數與矩陣論,最優化方法,概率論,資訊理論,隨機過程,以及圖論。本書從機器學習的角度講授這些數學知識,對它們在該領域的應用舉例說明,使讀者對某些抽象的數學知識和理論的實際應用有直觀、具體的認識。 本書內容緊湊,結構清晰,深入淺出,講解詳細。可用作計算機、人工智慧、電子工程、自動化、數學等相關專業的教材與教學參考書。對人工智慧領域的工程技術人員與產品研發人員,本書也有很強的參考價值。對於廣大數學與應用的數學愛好者,本書亦為適合自學的讀本。
張逸 著
DDD領域驅動設計教程,進一步精化領域驅動設計方法體系,通過實戰案例演示統一過程的實施,可幫助讀者提高領域建模及軟體設計能力。
本書全面闡釋了領域驅動設計(domain-driven design,DDD)的知識體系,內容覆蓋領域驅動設計的主要模式與主流方法,並在此基礎上提出「領域驅動設計統一過程」(domain-driven design unified process,DDDUP),將整個軟體構建過程劃分為全局分析、架構映射和領域建模3個階段。除給出諸多案例來闡釋領域驅動設計統一過程中的方法與模式之外,本書還通過一個真實而完整的案例全面展現了如何進行領域驅動設計統一過程的實施和落地。為了更好地運用領域驅動設計統一過程,本書還開創性地引入了業務服務、菱形對稱架構、領域驅動架構、服務驅動設計等方法與模式,總結了領域驅動設計能力評估模型與參考過程模型。本書提出的一整套方法體系已在多個項目中推廣和落地。
劉遄 著
Linux入門教程書籍,基於Linux系統RHEL8編寫,每章帶有圖表及習題,知識點覆蓋紅帽認證RHCE考試要求。
1.本書耗時近3年時間,修訂1500餘次,內容源自國內每天訪問量近60000人次的同名Linux培訓課程;
2.在上一版的基礎上進行了系統的更新,基於Linux系統RHEL 8編寫,適用於CentOS、Fedora、Ubuntu等主流衍生版本;
3.面向零基礎讀者,從Linux基礎知識講起,漸進式地提高內容難度。
《Linux就該這么學(第2版)》在上一版的基礎上進行了大量的更新,基於紅帽RHEL 8系統編寫,且內容適用於CentOS、Fedora等系統。本書共分為20章,內容涵蓋了部署Linux系統,常用的Linux命令,與文件讀寫操作有關的技術,使用Vim編輯器編寫和修改配置文件,用戶身份與文件許可權的設置,硬碟設備分區、格式化以及掛載等操作,部署RAID磁碟陣列和LVM,firewalld防火牆與iptables防火牆的區別和配置,使用ssh服務管理遠程主機,使用Apache服務部署靜態網站,使用vsftpd服務傳輸文件,使用Samba或NFS實現文件共享,使用BIND提供域名解析服務,使用DHCP動態管理主機地址,使用Postfix與Dovecot部署郵件系統,使用Ansible服務實現自動化運維,使用iSCSI服務部署網路存儲,使用MariaDB資料庫管理系統,使用PXE+Kickstart無人值守安裝服務,使用LNMP架構部署動態網站環境等。此外,本書的配套站點還深度點評了紅帽RHCSA、RHCE、RHCA認證,方便讀者備考。
張鑫旭 著
CSS3.0入門到進階教程,前端博客"鑫空間-鑫生活"博主十年經驗沉澱之作,大量實戰案例且具有在線Demo演示,配套官方網站,隨時與作者溝通學習。
本書是「CSS世界三部曲」的最後一部。這是一本關於CSS的進階讀物,專門講CSS3及其之後版本的新特性。在本書中,作者結合自己多年的從業經驗,講解CSS基礎知識,並充分考慮前端開發者的需求,以CSS新特性的 歷史 背景為線索,去粗取精,注重細節,深入淺出地介紹了上百個CSS新特性。此外,作者專門還為本書開發了配套網站,用於書中實例效果的在線展示和問題答疑。
本書的所有內容都是作者經過深入思考和 探索 後提煉出來的,知識點多且內容豐富,注重技術細節、經驗分享和解決問題的思路。本書的主要目標是幫助前端開發者突破CSS技能提升的瓶頸,非常適合具有一定CSS基礎的前端開發者閱讀。
[美] 威廉·肖特斯(William Shotts) 著,門佳,李偉 譯
手把手教你學Linux操作系統,腳本shell編程代碼書寫,系統管理編程運維,學習使用bash(LinuxShell)編寫完整的程序。
本書對Linux命令行進行詳細的介紹,全書內容包括4個部分,第一部分由Shell的介紹開啟命令行基礎知識的學習之旅;第二部分講述配置文件的編輯,如何通過命令行控制計算機;第三部分探討常見的任務與必備工具;第四部分全面介紹Shell編程,讀者可通過動手編寫Shell腳本掌握Linux命令的應用,從而實現常見計算任務的自動化。通過閱讀本書,讀者將對Linux命令有更加深入的理解,並且可以將其應用到實際的工作中。
本書適合Linux初學人員、Linux系統管理人員及Linux愛好者閱讀。
[美] 布萊恩·W.克尼漢(Brian,W.,Kernighan) 著,韓磊 譯
UNIX的誕生記與發展史,計算機先驅布萊恩·W.克尼漢繼C程序設計語言後又一力作,講述貝爾實驗室的幕後故事,C/C++等重要發明的起源,探尋計算科學之光!
自1969年在貝爾實驗室的閣樓上誕生以來,Unix操作系統的發展遠遠超出其創造者們的想像。它帶動了許多創新軟體的開發,影響了無數程序員,改變了整個計算機技術的發展軌跡。
本書不但書寫Unix的 歷史 ,而且記錄作者的回憶,一探Unix的起源,試圖解釋什麼是Unix,Unix是如何產生的,以及Unix為何如此重要。除此之外,本書以輕松的口吻講述了一群在貝爾實驗室工作的發明天才的有趣往事,本書中每一個故事都是鮮為人知卻又值得傳播的寶貴資源。
本書適合對計算機或相關 歷史 感興趣的人閱讀。讀者不需要有太多的專業技術背景,就可以欣賞Unix背後的思想,了解它的重要性。
[印] 拉胡爾·沙瑪(Rahul Sharma)[芬]韋薩·凱拉維塔 著,鄧世超 譯
Rust系統編程指南自學教程書籍,學習Rust編程語言基礎,掌握更高端的編程範式,成就高段位的編程極客。
本書內容共17章,由淺入深地講解Rust相關的知識,涉及基礎語法、軟體包管理器、測試工具、類型系統、內存管理、異常處理、高級類型、並發模型、宏、外部函數介面、網路編程、HTTP、資料庫、WebAssembly、GTK+框架和GDB調試等重要知識點。
本書適合想學習Rust編程的讀者閱讀,希望讀者能夠對C、C++或者Python有一些了解。書中豐富的代碼示例和詳細的講解能夠幫助讀者快速上手,高效率掌握Rust編程。
Ⅱ java工程師面試時最看重的是什麼
一、專業技能
熟練的使用Java語言進行面向對象程序設計,有良好的編程習慣,熟悉常用的JavaAPI,包括集合框架、多線程(並發編程)、I/O(NIO)、Socket、JDBC、XML、反射等。
熟悉基於JSP和Servlet的JavaWeb開發,對Servlet和JSP的工作原理和生命周期有深入了解,熟練的使用JSTL和EL編寫無腳本動態頁面,有使用監聽器、過濾器等Web組件以及MVC架構模式進行JavaWeb項目開發經驗。
對Spring的IoC容器和AOP原理有深入了解,熟練的運用Spring框架管理各種Web組件及其依賴關系,熟練的使用Spring進行事務、日誌、安全性等的管理,有使用SpringMVC作為表示層技術以及使用Spring提供的持久化支持進行Web項目開發的經驗,熟悉Spring對其他框架的整合。
熟練的使用Hibernate、MyBatis等ORM框架,熟悉Hibernate和MyBatis的核心API,對Hibernate的關聯映射、繼承映射、組件映射、緩存機制、事務管理以及性能調優等有深入的理解。
熟練的使用HTML、CSS和JavaScript進行Web前端開發,熟悉jQuery和Bootstrap,對Ajax技術在Web項目中的應用有深入理解,有使用前端MVC框架(AngularJS)和JavaScript模板引擎(HandleBars)進行項目開發的經驗。
熟悉常用的關系型資料庫產品(MySQL、Oracle),熟練的使用SQL和PL/SQL進行資料庫編程。
熟悉面向對象的設計原則,對GoF設計模式和企業應用架構模式有深入的了解和實際開發的相關經驗,熟練的使用UML進行面向對象的分析和設計,有TDD(測試驅動開發)和DDD(領域驅動設計)的經驗。
熟悉Apache、NginX、Tomcat、WildFly、Weblogic等Web伺服器和應用伺服器的使用,熟悉多種伺服器整合、集群和負載均衡的配置。
熟練的使用產品原型工具Axure,熟練的使用設計建模工具PowerDesigner和Enterprise Architect,熟練的使用Java開發環境Eclipse和IntelliJ,熟練的使用前端開發環境WebStorm,熟練的使用軟體版本控制工具SVN和Git,熟練的使用項目構建和管理工具Maven和Gradle。
說明: 上面羅列的這些東西並不是每一項你都要爛熟於心,根據企業招聘的具體要求可以做相應的有針對性的准備。但是前6項應該是最低要求,是作為一個Java軟體工程師必須要具備的專業技能。
二、項目經驗
項目介紹
本系統是X委託Y開發的用於Z的系統,系統包括A、B、C、D等模塊。系統使用了Java企業級開發的開源框架E以及前端技術F。表示層運用了G架構,使用H作為視圖I作為控制器並實現了REST風格的請求;業務邏輯層運用了J模式,並通過K實現事務、日誌和安全性等功能,通過L實現緩存服務;持久層使用了M封裝CRUD操作,底層使用N實現數據存取。整個項目採用了P開發模型。 說明: E通常指spring(Java企業級開發的一站式選擇); F最有可能是jQuery庫及其插件或者是Bootstrap框架,當然如果要構建單頁應用(SPA)最佳的方案是前端MVC框架(如AngularJS)和JavaScript模板引擎(如HandleBars);G顯然是MVC(模型-視圖-控制),最有可能的實現框架是spring MVC,除此之外還有Struts 2、JSF以及Apache為JSF提供的MyFaces實現; H是JSP,JSP作為MVC中的V,也可使用模板引擎(如Freemarker和Velocity)來生成視圖還可以是各種文檔或報表(如Excel和PDF等); I是Servlet或者自定義的控制器,他們是MVC中的C,當然Spring MVC中提供了作為前端控制器的DispatcherServlet; J通常是事務腳本; K應該是AOP(面向切面編程)技術; L目前廣泛使用的有memcached和Redis; M的選擇方案很多,最有可能的是hibernate和MyBatis,也可以兩種技術同時運用,但通常是將增刪改交給hibernate來處理,而復雜的查詢則由MyBatis完成,此外TopLink、jOOQ也是優秀的持久層解決方案; N底層的數據存取傳統上是使用關系型資料庫,可以是MySQL、Oracle、SQLServer、DB2等,隨著大數據時代的來臨,也可以採用NoSQL(如MongoDB、MemBase、BigTable等)和其他大數據存取方案(如GFS、HDFS等); P是項目的開發模型,可以是瀑布模型、快速原型模型、增量模型、螺旋模型、噴泉模型、RAD模型等。
項目開發流程
1、可行性分析:可行性分析報告、項目開發計劃書;
2、需求分析:需求規格說明書OOAD(用例圖、時序圖、活動圖);
界面原型:幫助理解需求、業務層設計時推導事務腳本;
3、設計:概要設計說明書、詳細設計說明書;
*抽取業務實體(領域對象):類圖、E-R圖(概念設計階段);
分層架構:確定各層的技術實現方案(具體到使用的框架、資料庫伺服器、應用伺服器等);
*業務層設計:事務腳本模式(事務:用戶發送一次請求就是一個事務;
腳本:一個方法或一個函數;
*事務腳本:把一次請求封裝為一個方法或一個函數;事務腳本模式:一個事務開始於腳本的打開,終止於腳本的關閉);
*業務層涉及的對象有三種類型:事務腳本類(封裝了業務的流程)、數據訪問對象(DAO,封裝了持久化操作)、數據傳輸對象(DTO,封裝了失血/貧血領域對象),三者之間的關系是事務腳本類組合(聚合)數據訪問對象,這二者都依賴了數據傳輸對象正向工程(UML類圖生成Java代碼)和逆向工程(Java代碼生成UML類圖)資料庫物理設計(ER圖轉換成表間關系圖、建庫和建表、使用工具插入測試數據);
3、編碼;
4、測試:測試報告、缺陷報告;
*單元測試:對軟體中的最小可測試單元進行檢查和驗證,在Java中是對類中的方法進行測試,可以使用JUnit工具來實施;
*集成測試:集成測試也叫組裝測試或聯合測試。在單元測試的基礎上,將所有模塊按照設計要求組裝成為子系統進行測試;
*系統測試:將已經確認的軟體、硬體、外設、網路等元素結合在一起,進行信息系統的各種組裝測試和確認測試,系統測試是針對整個產品系統進行的測試,目的是驗證系統是否滿足了需求規格的定義,找出與需求規格不符或與之矛盾的地方,從而提出更加完善的方案;
*驗收測試:在軟體產品完成了單元測試、集成測試和系統測試之後,產品發布之前所進行的軟體測試活動。它是技術測試的最後一個階段,也稱為交付測試。驗收測試的目的是確保軟體准備就緒,並且可以讓最終用戶將其用於執行軟體的既定功能和任務;
5、交付和維護:用戶手冊、操作手冊;
三、項目管理
版本控制:CVS/SVN/Git
自動構建:Ant/Maven/Ivy/Gradle
持續集成:Hudson/Jenkins
四、系統架構
負載均衡伺服器:F5、A10;
應用伺服器: HTTP伺服器:Apache、NginX(HTTP、反向代理、郵件代理伺服器);
Servlet容器:Tomcat、Resin
EJB容器:WildFly(JBoss Application Server)、GlassFish、Weblogic、Websphere;
資料庫伺服器:MySQL、Eclipse、Oracle;
五、第三方工具(插件)應用
圖表工具:基於jQuery的圖表插件(如jQchart、Flot、Charted等)、Chart.js、Highcharts等。
報表工具:Pentaho Reporting、iReport、DynamicReports等。
文檔處理:POI、iText等。
工作流引擎:jBPM、OpenWFE、Snaker、SWAMP等。
作業調度:Quartz、JobServer、Oddjob等。
緩存服務:EhCache、memcached、SwarmCache等。
消息隊列:Open-MQ、ZeroMQ、ActiveMQ等。
安全框架:Shiro、PicketBox等。
搜索引擎:IndexTank、Lucene、ElasticSearch等。
Ajax框架:jQuery、ExtJS、DWR等。
UI插件:EasyUI、MiniUI等。
富文本框:UEditor、CKEditor等。
六、面試提問
項目是為哪個公司開發的?項目的投入是多少?
有多少人參與了項目開發?整個團隊中,測試人員、開發人員、項目經理比例是多少?
項目開發了多長時間?項目總的代碼量有多少?你的代碼量有多少?
項目採用了怎樣的開發模型或開發流程?項目的架構是怎樣的?項目的技術選型是怎樣的?
你在項目中擔了怎樣的職責?是否經常開會或加班?項目完成後有哪些收獲或是經驗教訓?
項目中最困難的部分是什麼?如何解決團隊開發時遇到的各種沖突?
七、面試時可以反問面試官的問題
我注意到你們使用了X技術,請問你們是如何解決Y問題的?
為什麼你們的產品使用了X技術而不是Y技術?據我所知,X技術雖然有A、B、C等好處,但也存在D和E問題,而Y技術可以解決D和E問題。
我對您說的X技術不是太熟悉,但我感覺它是一個不錯的解決方案,您能多講講它的工作原理嗎?
你們團隊是如何進行項目規劃的?一周會有幾次例會?每周的代碼量大概是多少?
就X問題我能想到的解決方案目前就只有Y了,請問您會怎麼解決這個問題?
八、S.A.R.法則
九、面談原則
聲音適中、口齒清楚、面帶微笑、個人形象精神,講禮貌。
主動跟面試官聊他感興趣的話題,讓面試官滿意。
主動的大膽的跟面試官聊自己熟悉有經驗的內容:項目、技術點等,做到揚長避短。
一定要表達自己非常想得到這個崗位,自己很願意學習不懂的技術。
根據自己的實際水平提出合理的待遇要求。
十、自我評價
學習能力(搞IT行業的人需要不斷的了解新的技術、工具和方法)
團隊意識(相比個人英雄主義,IT行業更倡導團隊合作)
抗壓能力(很多IT企業的工作強度相對來說還是比較大的)