Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537
ection 1
1.Core Java,就是Java基礎(chǔ)、JDK的類庫(kù),很多童鞋都會(huì)說,JDK我懂,但是懂還不足夠,知其然還要知其所以然,JDK的源代碼寫的非常好,要經(jīng)常查看,對(duì)使用頻繁的類,比如String,集合類(List,Map,Set)等數(shù)據(jù)結(jié)構(gòu)要知道它們的實(shí)現(xiàn),不同的集合類有什么區(qū)別,然后才能知道在一個(gè)具體的場(chǎng)合下使用哪個(gè)集合類更適合、更高效,這些內(nèi)容直接看源代碼就OK了
2.多線程并發(fā)編程,現(xiàn)在并發(fā)幾乎是寫服務(wù)端程序必須的技術(shù),那對(duì)Java中的多線程就要有足夠的熟悉,包括對(duì)象鎖機(jī)制、synchronized關(guān)鍵字,concurrent包都要非常熟悉,這部分推薦你看看《Java并發(fā)編程實(shí)踐》這本書,講解的很詳細(xì)
3.I/O,Socket編程,首先要熟悉Java中Socket編程,以及I/O包,再深入下去就是Java NIO,再深入下去是操作系統(tǒng)底層的Socket實(shí)現(xiàn),了解Windows和Linux中是怎么實(shí)現(xiàn)socket的
4.JVM的一些知識(shí),不需要熟悉,但是需要了解,這是Java的本質(zhì),可以說是Java的母體, 了解之后眼界會(huì)更寬闊,比如Java內(nèi)存模型(會(huì)對(duì)理解Java鎖、多線程有幫助)、字節(jié)碼、JVM的模型、各種垃圾收集器以及選擇、JVM的執(zhí)行參數(shù)(優(yōu)化JVM)等等,這些知識(shí)在《深入Java虛擬機(jī)》這本書中都有詳盡的解釋,或者去oracle網(wǎng)站上查看具體版本的JVM規(guī)范.
5.一些常用的設(shè)計(jì)模式,比如單例、模板方法、代理、適配器等等,以及在Core Java和一些Java框架里的具體場(chǎng)景的實(shí)現(xiàn),這個(gè)可能需要慢慢積累,先了解有哪些使用場(chǎng)景,見得多了,自己就自然而然會(huì)去用。
6.常用數(shù)據(jù)庫(kù)(Oracle、MySQL等)、SQL語句以及一般的優(yōu)化
7.JavaWeb開發(fā)的框架,比如Spring、iBatis等框架,同樣他們的原理才是最重要的,至少要知道他們的大致原理。
8.其他一些有名的用的比較多的開源框架和包,Netty網(wǎng)絡(luò)框架,Apache common的N多包,Google的Guava等等,也可以經(jīng)常去Github上找一些代碼看看。
section 2
每逢長(zhǎng)假都會(huì)有很多程序員跳槽,十一、過年是跳槽黃金時(shí)刻,尤其是過年。過年的時(shí)候年終獎(jiǎng)到手,沒有了多少牽掛,年終同學(xué)同事聚會(huì)比較多,溝通的就多,各種工作機(jī)會(huì)的消息也相應(yīng)會(huì)多,所以跳槽的機(jī)會(huì)也就會(huì)多。跳槽就必不可少的要經(jīng)過面試,那么作為一個(gè)Java程序員需要準(zhǔn)備哪些面試知識(shí)呢?下面就給大家說說。
1、集合框架:
從上圖可以看到主要是Collection和Map的繼承類和Iterator的實(shí)現(xiàn)類,重點(diǎn)掌握ArrayList、LinkedList、Vector、Stack、PriorityQueue、HashSet、LinkedHashSet、TreeSet、HashMap、LinkedHashMap、TreeMap、WeakHashMap、EnumMap、TreeMap、HashTable的特點(diǎn)和實(shí)現(xiàn)原理,還有多線程使用場(chǎng)景和插入多還是刪除多的時(shí)候使用什么樣的集合類效率會(huì)更高。
2、IO框架:
主要掌握Reader、Writer、InputStream、OutputStream的繼承類,重點(diǎn)掌握字節(jié)流(FileInputStream、FileOutputSteam、BufferedInputStream、BufferedOutputStream、DataInputStream、DataOutputStream)和字符流(FileReader、FileWriter、BufferedReader、BufferedWriter、InputStreamReader、OutputStreamWriter),并熟練運(yùn)用。還有就是NIO的工作原理要知道。
3、String先關(guān):
主要考察對(duì)String的處理,順帶考察多線程和算法,大公司就是喜歡考察字符串的算法,主要是字符串查找或者剔除,多線程打印字符串,超大字符串處理。
4、異常處理:
掌握Throwable繼承類,理解Error和Exception的區(qū)別,理解運(yùn)行時(shí)異常和編譯異常的區(qū)別,掌握異常的處理方法,掌握try、catch、finally、throw、throws關(guān)鍵字的意義,掌握try-catch-finally語句的執(zhí)行順序,掌握異常的工作原理,知道常見的異常有哪些。
5、多線程:
如何創(chuàng)建和啟動(dòng)一個(gè)線程,有哪些方法?多線程如何交互,線程之間的調(diào)度、讓步、合并,如何同步?生產(chǎn)和消費(fèi)者模型。還有就是掌握線程安全、線程池,死鎖。
6、JVM知識(shí):
掌握常見的垃圾回收機(jī)制,掌握程序計(jì)數(shù)器、堆、棧、方法區(qū)的作用,掌握類的加載機(jī)制。掌握內(nèi)存分代模型和工作原理。掌握J(rèn)VM啟動(dòng)參數(shù)常見配置,了解JVM調(diào)優(yōu)。
7、數(shù)據(jù)結(jié)構(gòu)與算法:
掌握常見查找和排序算法實(shí)現(xiàn)及其時(shí)間、空間復(fù)雜度。掌握常見數(shù)據(jù)結(jié)構(gòu)如鏈表、隊(duì)列、棧的基本原理和實(shí)現(xiàn)。
section 3
經(jīng)常主持對(duì)高級(jí)工程師和中基層Tech Leader的面試,一年下來總有百八十場(chǎng),我給大家分享一下我對(duì)于高級(jí)工程師的定位吧,雖然我主要負(fù)責(zé).Net團(tuán)隊(duì),但是對(duì)于其他語言應(yīng)該也是適用的。
一 理論基礎(chǔ):高級(jí)工程師必須有較好的理論基礎(chǔ),既包含一些基礎(chǔ)的學(xué)科知識(shí),也要包含個(gè)人專攻方向的前沿理論。我遇到過形形色色的求職者,有人自稱精通領(lǐng)域模式,卻不明白什么是聚合根(領(lǐng)域根)。甚至有人無法列舉常用的非線性結(jié)構(gòu),更別提偽碼實(shí)現(xiàn)和應(yīng)用場(chǎng)景分析了。這些人普遍振振有詞地說, 我有豐富的開發(fā)經(jīng)驗(yàn),項(xiàng)目需要實(shí)現(xiàn)的功能我都能做出來,我只是沒有去記那些術(shù)語名詞。抱歉,你不是沒有記術(shù)語名詞,你是根本沒有潛心看技術(shù)文章的心態(tài),你所謂的學(xué)習(xí)就是看一些諸如《21天精通Java》,《7天,從菜鳥到專家》之類的垃圾書,或者看點(diǎn)視頻。那么你這個(gè)高工,比別人高在哪里呢?當(dāng)單位需要你代表團(tuán)隊(duì)和合作機(jī)構(gòu)溝通,甚至發(fā)表專欄的時(shí)候,你是不是也準(zhǔn)備跟大家講”這個(gè)東西我不知道該怎么講,大家可以看一下我的代碼“。只有代碼可秀的人是碼農(nóng),不是高工,所以我給這類求職者的綜評(píng)是中+封頂。
二 工作經(jīng)驗(yàn):高級(jí)工程師必須有過在項(xiàng)目中擔(dān)心核心模塊開發(fā)或者整體架構(gòu)設(shè)計(jì)的經(jīng)驗(yàn),并且項(xiàng)目越高大上越好,比如你在互聯(lián)網(wǎng)企業(yè)搞過讀寫分離的實(shí)現(xiàn),你在電商搞過秒殺算法,你在電信行業(yè)做過網(wǎng)絡(luò)層,我必定會(huì)高看一眼。如果你就僅僅只是一個(gè)人全棧搞過幾個(gè)小網(wǎng)站,啪啪啪一大堆成熟框架用得倍溜,那么你只是一個(gè)裝配工。我給這類求職者的綜評(píng)是中+封頂。
三 培養(yǎng)潛力:高級(jí)工程師必須有全局思維,如果在你過往的工作歷程中,你對(duì)你兄弟團(tuán)隊(duì)或者部門的工作情形一問三不知,甚至于一個(gè)項(xiàng)目中,你只懂自己的模塊,其他同事負(fù)責(zé)的模塊你就只會(huì)call個(gè)API,那么你就是一個(gè)很難再進(jìn)一步的人。對(duì)于企業(yè)來說,有你不多,無你不少,所以我給這類求職者的綜評(píng)是中+封頂。
四 溝通能力:高級(jí)工程師在技術(shù)團(tuán)隊(duì)中是絕對(duì)的核心人中,小項(xiàng)目中你就是負(fù)責(zé)人,大項(xiàng)目中你也要負(fù)責(zé)帶新人,那么良好的溝通能力必不可少,如果你僅僅是自己一個(gè)人心里亮堂,你對(duì)企業(yè)的價(jià)值就要大打折扣。這類求職者,我也有錄用過不少,因?yàn)槌绦騿T木訥可以說是一種共性,在這方面沒法太挑剔,但是我給他們的綜評(píng)是高-封頂。
section 4
如果要應(yīng)聘高級(jí)開發(fā)工程師職務(wù),僅僅懂得Java的基礎(chǔ)知識(shí)是遠(yuǎn)遠(yuǎn)不夠的,還必須懂得常用數(shù)據(jù)結(jié)構(gòu)、算法、網(wǎng) 絡(luò)、操作系統(tǒng)等知識(shí)。因此本文不會(huì)講解具體的技術(shù),筆者綜合自己應(yīng)聘各大公司的經(jīng)歷,整理了一份大公司對(duì)Java高級(jí)開發(fā)工程師職位的考核綱要,希望可以幫助到需要的人。
1 Java基礎(chǔ)
1.1 Collection和Map
(1)掌握Collection和Map的繼承體系。
(2)掌握ArrayList、LinkedList、Vector、Stack、PriorityQueue、HashSet、 LinkedHashSet、TreeSet、HashMap、LinkedHashMap、TreeMap、WeakHashMap、EnumMap、 TreeMap、HashTable的特點(diǎn)和實(shí)現(xiàn)原理。
(3)掌握CopyOnWriteArrayList、CopyOnWriteArraySet、ConcurrentHashMap的實(shí)現(xiàn)原理和適用場(chǎng)景。
1.2 IO
(1)掌握InputStream、OutputStream、Reader、Writer的繼承體系。
(2)掌握字節(jié)流(FileInputStream、DataInputStream、BufferedInputStream、 FileOutputSteam、DataOutputStream、BufferedOutputStream)和字符流 (BufferedReader、InputStreamReader、FileReader、BufferedWriter、 OutputStreamWriter、PrintWriter、FileWriter),并熟練運(yùn)用。
(3)掌握NIO實(shí)現(xiàn)原理及使用方法。
1.3 異常
(1)掌握Throwable繼承體系。
(2)掌握異常工作原理。
(3)了解常見受檢異常(比如FileNotFoundException)、非受檢異常(比如NullPointerException)和錯(cuò)誤(比如IOError)。
1.4 多線程
(1)掌握Executors可以創(chuàng)建的三種(JAVA8增加了一種,共四種)線程池的特點(diǎn)及適用范圍。
(2)掌握多線程同步機(jī)制,并熟練運(yùn)用。
1.5 Socket
(1)掌握Socket通信原理。
(2)熟練使用多線程結(jié)合Socket進(jìn)行編程。
2 Java虛擬機(jī)
2.1 JVM內(nèi)存區(qū)域劃分
(1)掌握程序計(jì)數(shù)器、堆、虛擬機(jī)棧、本地方法棧、方法區(qū)(JAVA8已移除)、元空間(JAVA8新增)的作用及基本原理。
(2)掌握堆的劃分:新生代(Eden、Survivor1、Survivor2)和老年代的作用及工作原理。
(3)掌握J(rèn)VM內(nèi)存參數(shù)設(shè)置及調(diào)優(yōu)。
2.2 類加載
(1)掌握類的加載階段:加載、鏈接(驗(yàn)證、準(zhǔn)備、解析)、初始化、使用、卸載。
(2)掌握類加載器分類及其應(yīng)用:?jiǎn)?dòng)類加載器、擴(kuò)展類加載器、應(yīng)用程序類加載器、自定義加載器。
3 J2EE
(1) 掌握J(rèn)SP內(nèi)置對(duì)象、動(dòng)作及相關(guān)特點(diǎn)和工作原理。
(2) 掌握Servlet的特點(diǎn)和工作原理。
(3) 掌握Spring框架的IOC和AOP實(shí)現(xiàn)原理(反射和動(dòng)態(tài)代理)。
(4) 至少掌握一個(gè)MVC框架(Spring MVC,Struts等)的工作原理,并熟練運(yùn)用。
(5) 至少掌握一個(gè)ORM框架(Hibernate,MyBatis等)的工作原理,并熟練運(yùn)用。
4 數(shù)據(jù)結(jié)構(gòu)與算法
(1)掌握線性表和樹的特點(diǎn)并熟練運(yùn)用。
(2)掌握常用排序和查找算法:插入排序(直接插入排序、希爾排序)、選擇排序(直接選擇排序、堆排序)、交換排序(冒泡排序、快速排序)、歸并排序,順序查找、二分查找、哈希查找。
(3) 熟練運(yùn)用常見排序和查找算法思想解決編程問題。
(4)了解幾大基本算法:貪心算法、分治策略、動(dòng)態(tài)規(guī)劃。
5 計(jì)算機(jī)網(wǎng)絡(luò)
(1)掌握網(wǎng)絡(luò)的分層結(jié)構(gòu),及每層的功能特點(diǎn)。
(2)掌握TCP/IP的通信原理(三次握手、四次揮手)
6 數(shù)據(jù)庫(kù)
(1)掌握復(fù)雜的SQL語句編寫。
(2)掌握數(shù)據(jù)庫(kù)的優(yōu)化(SQL層面和表設(shè)計(jì)層面)。
(3)至少掌握一款數(shù)據(jù)庫(kù)產(chǎn)品。
(4)熟悉高并發(fā)、大數(shù)據(jù)情況下的數(shù)據(jù)庫(kù)開發(fā)。
7 Web技術(shù)
(1)掌握AJAX的工作原理。
(2)至少熟悉一款JS框架(比如JQuery)。
8 設(shè)計(jì)模式
(1)熟悉常見的設(shè)計(jì)模式。
(2)會(huì)將設(shè)計(jì)模式理論應(yīng)用到實(shí)際開發(fā)中。
9 Linux
(1)熟練運(yùn)用Linux常見命令。
(2)熟悉Linux操作系統(tǒng)基本概念及特點(diǎn)。
(3)熟悉Shell腳本。
10 操作系統(tǒng)
(1)掌握操作系統(tǒng)的進(jìn)程管理。
(2)了解操作系統(tǒng)的I/O。
11 正則表達(dá)式
(1)掌握常見正則表達(dá)式符號(hào)。
(2)熟練運(yùn)用正則表達(dá)式解決實(shí)際問題(比如匹配電話號(hào)碼、郵箱、域名等)。
Section 5
h5edu 的源碼
pure--響應(yīng)式css框架
Hadoop大數(shù)據(jù)
ERP系統(tǒng)開發(fā)
linux
freemarker
weblogic/jobss
webwhpere
webservice http://www.iteye.com/topic/1135747
bootstrap
HTML5
android
css/jslever
spring aop ssh ssm 徒手搭建
jquery源碼分析融匯
緩存 echacge
并發(fā)
頁面靜態(tài)化
UML
shell
pathy
github
網(wǎng)絡(luò)編程
ExtJS
網(wǎng)絡(luò)爬蟲
設(shè)計(jì)模式
多線程與并發(fā)
第三方支付/登錄http://wiki.connect.qq.com/%E7%BD%91%E7%AB%99%E6%8E%A5%E5%85%A5%E6%B5%81%E7%A8%8B
============================================高級(jí)工程====================================
找一些高級(jí)題目去做
借鑒理解源碼http://www.java1234.com/a/kaiyuan/javaWeb/
========================================================================================
1.Core Java部分
這是最基礎(chǔ)的,對(duì)于一個(gè)java高級(jí)開發(fā)/設(shè)計(jì)人員,你需要對(duì)這一部分達(dá)到精通的水平,重點(diǎn)內(nèi)容如下:
a.面向?qū)ο缶幊趟枷?封裝繼承多態(tài)接口)
b.字符串處理
c.java.lang包,java.util包等常用包
4.java異常處理
2.Java高級(jí)部分
a.Java I/O流
b.Java多線程技術(shù)
c.Java網(wǎng)絡(luò)編程
d.Java Swing
后兩項(xiàng)可以了解即可,如果項(xiàng)目需要可以深入研究
3.前端基本技能
* HTML + CSS網(wǎng)頁開發(fā)
* JavaScript
* Jquery
* 瀏覽器兼容性 CSS hack(了解)
4.熟練使用JSP + Servlet進(jìn)行開發(fā)
5.MVC設(shè)計(jì)模式,原理,以及相關(guān)框架,如Struts
6.SSH框架
7.緩存技術(shù) session & cookie
8.熟練使用一種以上Java開發(fā)工具
Eclipse/MyEclipse/Jbuilder/Jcreator
9.熟練使用XML
JDOM w3c.dom SAX
10.Java設(shè)計(jì)模式
工廠模式,單例模式==
11.Java反射機(jī)制
反射的各種用法
12.了解或熟悉 C, C++, .NET
13.熟悉JDK的配置,環(huán)境變量
14.數(shù)據(jù)庫(kù)oracle必學(xué),其他最好了解一種以上(mysql,sql server,access==)
oracle:視圖,索引,存儲(chǔ)過程,觸發(fā)器,游標(biāo),包,常用函數(shù)==
15.數(shù)據(jù)庫(kù)原理
事務(wù)的原理,鎖機(jī)制,表連接,復(fù)雜查詢語句(工作經(jīng)驗(yàn)),性能調(diào)優(yōu),鎖表以及解決方案==
16.JDBC,連接池
17.Ajax,反向Ajax
18.HTTP協(xié)議,request 和 response的原理,HTTP status(了解常用的),Https原理
19.熟悉Linux基本命令,使用過Linux/Unix系統(tǒng),可以編寫shell腳本,可以在Linux上部署項(xiàng)目
20.了解windows系統(tǒng)批處理腳本bat
21.了解HTML5,最好學(xué)習(xí)過
22.熟悉一種JS框架,如Prototype
23.J2EE原理 熟悉一種以上web容器如Tomcat,JBoss,websphere,weblogic==
24.熟悉ant或maven
25.熟悉一門腳本語言,如python ,ruby
26.了解php/ asp
27.了解ftp協(xié)議及原理
28.熟練使用Junit測(cè)試,熟悉Mockito等測(cè)試工具
29,熟悉javac,javadoc,native,native2ascii等常用命令
30.熟悉常用的排序算法,如冒泡排序,快速排序等,最好自己研究過一些的算法,下面的這個(gè)就是我曾經(jīng)研究過的一個(gè):
http wenku baidu com /view/391db3f0941ea76e58fa04e9點(diǎn)html
http://wenku.baidu.com/view.391db3f0941ea76e58fa04e9.html
31.了解Flex(不學(xué)也沒關(guān)系)
32.了解敏捷開發(fā)模式
33.工作流workflow至少用過一種,如OSworkflow,了解原理
34.使用過VPN了解其原理
35.熟悉jstl表達(dá)式和el表達(dá)式
36.熟悉webservice,WSDL,SOAP
37.圖片處理,如圖片上傳,預(yù)覽,限制大小等,下面共享一(垃圾勿噴):
http wenku baidu com/view/05337bfc770bf78a6529541b點(diǎn)html
38.版本控制工具,CVS VSS SVN
39,JSON技術(shù),JSON+AJAX
40.分頁技術(shù),最好自己實(shí)現(xiàn)過不僅僅是用過要知道原理
41.Java Mail
42.Java讀寫txt,excel
JXL技術(shù)
43.JVM原理,JVM內(nèi)存管理,GC,Java堆棧池
44.熟練使用下面的工具:
office辦公軟件,word,excel,ppt等
plsql,sqldevelop 數(shù)據(jù)庫(kù)開發(fā)工具
outlook大公司都用
ue編輯器
瀏覽器控制臺(tái),調(diào)試
SHH/PUTTY 遠(yuǎn)程
45.UML建模工具 Rational Rose等
46.使用log4j
47.使用過開放API如百度地圖,騰訊街景,新浪微博等
48.頁面靜態(tài)化技術(shù)(偽靜態(tài)頁面)UrlRwriter
49.報(bào)表技術(shù),使用過報(bào)表制作工具,如水晶易表
50.定時(shí)任務(wù),如Spring batch,學(xué)會(huì)自定義batch任務(wù)(不適用第三方工具)
51.了解uuid
52.B/s 和 C/s架構(gòu)
53.正則表達(dá)式
54.了解JNDI JMS
55. ERP
56.unicode編碼,亂碼的解決
57.開源網(wǎng)絡(luò)編輯器,如ckEditor
58.二進(jìn)制原理
59,使用過,了解開源論壇框架,如discuzz
60, GWT ,Closure框架
61.了解 大數(shù)據(jù),云計(jì)算
62.搜索引擎搜索技術(shù)
63.軟件工程,項(xiàng)目管理
1.你需要精通面向?qū)ο蠓治雠c設(shè)計(jì)(OOA/OOD)、涉及模式(GOF,J2EEDP)以及綜合模式。你應(yīng)該十分了解UML,尤其是class,object,interaction以及statediagrams。
2.你需要學(xué)習(xí)JAVA語言的基礎(chǔ)知識(shí)以及它的核心類庫(kù)(collections,serialization,streams,networking, multithreading,reflection,event,handling,NIO,localization,以及其他)。
3.你應(yīng)該了解JVM,classloaders,classreflect,以及垃圾回收的基本工作機(jī)制等。你應(yīng)該有能力反編譯一個(gè)類文件并且明白一些基本的匯編指令。
4.如果你將要寫客戶端程序,你需要學(xué)習(xí)WEB的小應(yīng)用程序(applet),必需掌握GUI設(shè)計(jì)的思想和方法,以及桌面程序的SWING,AWT, SWT。你還應(yīng)該對(duì)UI部件的JAVABEAN組件模式有所了解。
JAVABEANS也被應(yīng)用在JSP中以把業(yè)務(wù)邏輯從表現(xiàn)層中分離出來。
5.你需要學(xué)習(xí)java數(shù)據(jù)庫(kù)技術(shù),如JDBCAPI并且會(huì)使用至少一種persistence/ORM構(gòu)架,例如Hibernate,JDO, CocoBase,TopLink,InsideLiberator(國(guó)產(chǎn)JDO紅工廠軟件)或者iBatis。
6.你還應(yīng)該了解對(duì)象關(guān)系的阻抗失配的含義,以及它是如何影響業(yè)務(wù)對(duì)象的與關(guān)系型數(shù)據(jù)庫(kù)的交互,和它的運(yùn)行結(jié)果,還需要掌握不同的數(shù)據(jù)庫(kù)產(chǎn)品運(yùn)用,比如:oracle,mysql,mssqlserver。
7.你需要學(xué)習(xí)JAVA的沙盒安全模式(classloaders,bytecodeverification,managers,policyandpermissions,
codesigning, digitalsignatures,cryptography,certification,Kerberos,以及其他)還有不同的安全/認(rèn)證 API,例如JAAS(JavaAuthenticationandAuthorizationService),
JCE (JavaCryptographyExtension),JSSE(JavaSecureSocketExtension),以及JGSS (JavaGeneralSecurityService)。
8.你需要學(xué)習(xí)Servlets,JSP,以及JSTL(StandardTagLibraries)和可以選擇的第三方TagLibraries。
9.你需要熟悉主流的網(wǎng)頁框架,例如JSF,Struts,Tapestry,Cocoon,WebWork,以及他們下面的涉及模式,如MVC/MODEL2。
10.你需要學(xué)習(xí)如何使用及管理WEB服務(wù)器,例如tomcat,resin,Jrun,并且知道如何在其基礎(chǔ)上擴(kuò)展和維護(hù)WEB程序。
11.你需要學(xué)習(xí)分布式對(duì)象以及遠(yuǎn)程API,例如RMI和RMI/IIOP。
12.你需要掌握各種流行中間件技術(shù)標(biāo)準(zhǔn)和與java結(jié)合實(shí)現(xiàn),比如Tuxedo、CROBA,當(dāng)然也包括javaEE本身。
13.你需要學(xué)習(xí)最少一種的XMLAPI,例如JAXP(JavaAPIforXMLProcessing),JDOM(JavaforXMLDocumentObjectModel),DOM4J,或JAXR(JavaAPIforXMLRegistries)。
14.你應(yīng)該學(xué)習(xí)如何利用JAVAAPI和工具來構(gòu)建WebService。例如JAX-RPC(JavaAPIforXML/RPC),SAAJ (SOAPwithAttachmentsAPIforJava),JAXB(JavaArchitectureforXMLBinding),
JAXM(JavaAPIforXMLMessaging), JAXR(JavaAPIforXMLRegistries),或者JWSDP(JavaWebServicesDeveloperPack)。
15.你需要學(xué)習(xí)一門輕量級(jí)應(yīng)用程序框架,例如Spring,PicoContainer,Avalon,以及它們的IoC/DI風(fēng)格(setter,constructor,interfaceinjection)。
16.你需要熟悉不同的J2EE技術(shù),例如JNDI(JavaNamingandDirectoryInterface),JMS (JavaMessageService),JTA/JTS(JavaTransactionAPI/JavaTransactionService),JMX (J
面報(bào)道
(1)AngularJS在2015
(2)Vue.js:輕量高效的前端組件化方案
(3)avalon:小而美,輕量級(jí)前端MVVM框架
(4)解讀React
(5)探索React生態(tài)圈
(6)解讀Mobile Library背后的設(shè)計(jì)故事和理念
資訊
(1)外刊速遞:CACM
(2)大數(shù)據(jù)是如何改善倫敦公共交通的
(3)確保用正確的方法做事
(4)創(chuàng)業(yè)公司失敗的原因
(5)業(yè)界聲音
(6)數(shù)據(jù)與國(guó)際組織危機(jī)處理
(7)2015中國(guó)人工智能大會(huì)觀察
技術(shù)
(1)我是如何進(jìn)行異構(gòu)并行計(jì)算算法設(shè)計(jì)的
(2)電信行業(yè)服務(wù)化實(shí)踐
(3)如何像巫師那樣隔空操作
百味
(1)程序員的年齡天花板
《專家導(dǎo)讀》──流行前端框架展示,告訴你如何選擇? 文/ 程邵非
2014到2015年,隨著移動(dòng)互聯(lián)網(wǎng)的興起,前端框架開始從jQuery一統(tǒng)天下的局面,逐漸演變成了百花齊放的局面。從這些框架的功能和目標(biāo)來看,前端工程師的視角已經(jīng)逐漸從“兼容性”和“更好的API”轉(zhuǎn)向了“開發(fā)效率”,“表現(xiàn)和邏輯分離”,而后兩者正是更大規(guī)模軟件所需要的,這意味著前端這個(gè)崗位的職責(zé)開始發(fā)生變化,原來的前端只是負(fù)責(zé)切圖、頁面制作,而現(xiàn)在前端工程師更多涉及編程方面。
MVC模式誕生于1970年代,在前端領(lǐng)域,從Backbone起,借鑒這一模式的框架開始進(jìn)入開發(fā)者視野,如徐飛在本專題中所展示的AngularJS便是從微軟提出的MVVM中獲取靈感的框架,國(guó)內(nèi)工程師司徒正美更毫不掩飾自己對(duì)于微軟架構(gòu)的偏愛,連avalon這個(gè)名稱都是從Vista的codename而來。Vue.js也是MVVM框架中的優(yōu)秀之作,是由華人發(fā)起的、現(xiàn)在業(yè)內(nèi)框架中為數(shù)不多的在國(guó)外技術(shù)社區(qū)頗有影響力的框架,它以輕量、語法簡(jiǎn)潔和充分利用JavaScript的特點(diǎn),贏得了不少追求極簡(jiǎn)的開發(fā)者喜愛。
同樣是希望提供更優(yōu)秀的UI架構(gòu),F(xiàn)acebook的React提出的很晚,卻有后來居上的趨勢(shì),憑借Facebook的影響力和React Native,它的每一個(gè)新聞都極有沖擊力,它獨(dú)有的Flux跟一般意義上的MV*框架有很大區(qū)別,JSX語法也使得它的UI和代碼耦合性更強(qiáng)。其實(shí)React在各方面都可謂“叛逆”,而我了解到,在所有同時(shí)嘗試過AngularJS和React的團(tuán)隊(duì)中,幾乎一致地最終選擇了React,其中原因令人深思。
在本期封面報(bào)道中,我們也分享了手機(jī)淘寶的前端庫(kù)Mobile Library,與前面所述的框架不同,它是一組庫(kù),而非一個(gè)框架,Mobile Library更致力于解決移動(dòng)開發(fā)中的點(diǎn)的問題,而把架構(gòu)問題的答案留給框架去解決。
前端框架現(xiàn)在處于戰(zhàn)國(guó)時(shí)期,而實(shí)際的框架選擇,還是依賴于工程師對(duì)業(yè)務(wù)特征的判斷。架構(gòu)其實(shí)沒有對(duì)錯(cuò),唯有了解更多,才能更好地做出決策。
訂閱咨詢:
結(jié)合個(gè)人經(jīng)歷總結(jié)的前端入門方法,總結(jié)從零基礎(chǔ)到具備前端基本技能的道路、學(xué)習(xí)方法、資料。由于能力有限,不能保證面面俱到,只是作為入門參考,面向初學(xué)者,讓初學(xué)者少走彎路。
互聯(lián)網(wǎng)的快速發(fā)展和激烈競(jìng)爭(zhēng),用戶體驗(yàn)成為一個(gè)重要的關(guān)注點(diǎn),導(dǎo)致專業(yè)前端工程師成為熱門職業(yè),各大公司對(duì)前端工程師的需求量都很大,要求也越來越高,優(yōu)秀的前端工程師更是稀缺。個(gè)人感覺前端入門相對(duì)容易,但是也需要系統(tǒng)地認(rèn)真學(xué)習(xí),在打好基礎(chǔ)后堅(jiān)持學(xué)習(xí),成為優(yōu)秀前端工程師也只是時(shí)間問題。
學(xué)習(xí)任何知識(shí)最重要的都是興趣,如果經(jīng)過一段時(shí)間的學(xué)習(xí)感覺不喜歡,那可能強(qiáng)迫自己學(xué)習(xí)是很痛苦的,效果也不會(huì)好,畢竟這很可能就是以后很多年生存的技能。不過隨著互聯(lián)網(wǎng)行業(yè)的發(fā)展,前端必然是Web開發(fā)人員需要學(xué)習(xí)的知識(shí),有時(shí)候是沒有專業(yè)前端工程師一起合作的,所以即使不做專門的前端工程師,掌握基本的前端技能為工作帶來方便。
以下是個(gè)人覺得入門階段應(yīng)該熟練掌握的基礎(chǔ)技能:
HTML4,HTML5語法、標(biāo)簽、語義
CSS2.1,CSS3規(guī)范,與HTML結(jié)合實(shí)現(xiàn)各 種布局、效果
Ecma-262定義的javascript的語言核心,原生客戶端javascript,DOM操作,HTML5新增功能
一個(gè)成熟的客戶端javascript庫(kù),推薦jquery
一門服務(wù)器端語言:如果有服務(wù)器端開發(fā)經(jīng)驗(yàn),使用已經(jīng)會(huì)的語言即可,如果沒有服務(wù)器端開發(fā)經(jīng)驗(yàn),熟悉Java可以選擇Servlet,不熟悉的可以選PHP,能實(shí)現(xiàn)簡(jiǎn)單登陸注冊(cè)功能就足夠支持前端開發(fā)了,后續(xù)可能需要繼續(xù)學(xué)習(xí),最基本要求是實(shí)現(xiàn)簡(jiǎn)單的功能模擬,
HTTP
在掌握以上基礎(chǔ)技能之后,工作中遇到需要的技術(shù)也能快速學(xué)習(xí)。
基本開發(fā)工具
恰當(dāng)?shù)墓ぞ吣苡行岣邔W(xué)習(xí)效率,將重點(diǎn)放在知識(shí)本身,在出現(xiàn)問題時(shí)能快速定位并 解決問題,以下是個(gè)人覺得必備的前端開發(fā)工具:
文本編輯器:推薦Sublime Text,支持各種插件、主題、設(shè)置,使用方便
瀏覽器:推薦Google Chrome,更新快,對(duì)前端各種標(biāo)準(zhǔn)提供了非常好的支持
調(diào)試工具:推薦Chrome自帶的Chrome develop tools,可以輕松查看DOM結(jié)構(gòu)、樣式,通過控制臺(tái)輸出調(diào)試信息,調(diào)試javascript,查看網(wǎng)絡(luò)等
輔助工具:PhotoShop編輯圖片、取色,fireworks量尺寸,AlloyDesigner對(duì)比尺寸,以及前面的到的Chrome develop tools,
FQ工具:lantern, 壁虎漫步
學(xué)習(xí)方法和學(xué)習(xí)目標(biāo)
方法:
入門階段反復(fù)閱讀經(jīng)典書籍的中文版,書籍中的每一個(gè)例子都動(dòng)手實(shí)現(xiàn)并在瀏覽器中查看效果
在具備一定基礎(chǔ)之后可以上網(wǎng)搜各種教程、demo,了解各種功能的實(shí)際用法和常見功能的實(shí)現(xiàn)方法
閱讀HTML,CSS,Javascript標(biāo)準(zhǔn)全面完善知識(shí)點(diǎn)
閱讀前端牛人的博客、文章提升對(duì)知識(shí)的理解
善用搜索引擎
目標(biāo):
熟記前面知識(shí)點(diǎn)部分的重要概念,結(jié)合學(xué)習(xí)經(jīng)歷得到自己的理解
熟悉常見功能的實(shí)現(xiàn)方法,如常見CSS布局,Tab控件等。
入門之路
以下是入門階段不錯(cuò)的書籍和資料
HTML先看《HTML & CSS: Design and Build Websites》1-9章,然后《HTML5: The Missing Manual》1-4章。
CSS先看《CSS: The Missing Manual》,然后《CSS權(quán)威指南》
javascript先看《javascript高級(jí)程序設(shè)計(jì)》,然后《javascript權(quán)威指南》
HTTP看HTTP權(quán)威指南
在整個(gè)學(xué)習(xí)過程中HTML CSS JavaScript會(huì)有很多地方需要互相結(jié)合,實(shí)際工作中也是這樣,一個(gè)簡(jiǎn)單的功能模塊都需要三者結(jié)合才能實(shí)現(xiàn)。
動(dòng)手是學(xué)習(xí)的重要組成部分,書籍重點(diǎn)講解知識(shí)點(diǎn),例子可能不是很充足,這就需要利用搜索引擎尋找一些簡(jiǎn)單教程,照著教程實(shí)現(xiàn)功能。以下是一些比較好的教程網(wǎng)址
可以搜索各大公司前端校招筆試面試題作為練習(xí)題或者他人總結(jié)的前端面試題還有個(gè)人總結(jié)的面試題(帶參考答案)
http://code.tutsplus.com有各種各樣的教程
MDN也有很多教程,更重要的是里面有詳細(xì)的文檔,需要查找某個(gè)功能時(shí)在Google搜索:xxx site:https://developer.mozilla.org
http://www5rocks.com/zh/也有很多優(yōu)質(zhì)教程
http://www.sitepoint.com/
http://alistapart.com/
原生javascript是需要重點(diǎn)掌握的技能,在掌握原生javascript的基礎(chǔ)上推薦熟練掌握jQuery,在實(shí)際工作中用處很大,這方面的書籍有《Learning jQuery》或者去jQuery官網(wǎng)
建一個(gè)https://github.com/賬號(hào),保存平時(shí)學(xué)習(xí)中的各種代碼和項(xiàng)目。
有了一定基礎(chǔ)之后可以搭建一個(gè)個(gè)人博客,記錄學(xué)習(xí)過程中遇到的問題和解決方法,方便自己查閱也為其他人提供了幫助。也可以去http://www.cnblogs.com/或者h(yuǎn)ttp://www.csdn.net/這樣的網(wǎng)站注冊(cè)賬號(hào),方便實(shí)用
經(jīng)常實(shí)用Google搜索英文資料應(yīng)該經(jīng)常找到來自http://stackoverflow.com/的高質(zhì)量答案,與到問題可以直接在這里搜索,如果有精力,注冊(cè)一個(gè)賬號(hào)為別人解答問題也能極大提高個(gè)人能力。
經(jīng)典書籍熟讀之后,可以打開前面必備基礎(chǔ)技能部分的鏈接。認(rèn)真讀對(duì)應(yīng)標(biāo)準(zhǔn),全面掌握知識(shí)
繼續(xù)提高
有了前面的基礎(chǔ)之后,前端基本算是入門了,這時(shí)候可能每個(gè)人心中都有了一些學(xué)習(xí)方向,如果還是沒有。 可以參考前面必備技能部分提到的那兩個(gè)項(xiàng)目,從里面選一些進(jìn)行發(fā)展學(xué)習(xí)。以下是一些不錯(cuò)的方面:
Grunt:前端自動(dòng)化工具,提高工作效率
less css:優(yōu)秀的CSS預(yù)處理器
bootstrap:優(yōu)秀的CSS框架,對(duì)沒有設(shè)計(jì)師的團(tuán)隊(duì)很不錯(cuò),與less結(jié)合使用效果完美
requirejs:AMD規(guī)范的模塊加載器,前端模塊化趨勢(shì)的必備工具
Node.js:JavaScript也可以做后臺(tái),前端工程師地位更上一步
AngularJS:做Single Page Application的好工具
移動(dòng)端web開發(fā):智能手機(jī)的普及讓移動(dòng)端的流量正在逐步趕超PC端
Javascript內(nèi)存管理:SPA長(zhǎng)期運(yùn)行需要注意內(nèi)存泄露的問題
High Performance JavaScript(Build Faster Web Application Interfaces)
Best Practices for Speeding Up Your Web Site:重要技能
一些個(gè)人經(jīng)歷
LingyuCoder的學(xué)習(xí)經(jīng)歷
上面的大神都總結(jié)得差不多了,我這里就胡扯一些吧
工具
chrome dev tools:前端開發(fā)調(diào)試?yán)鳎刈⒁鈳讉€(gè)功能:
console(廢話)
elements:元素樣式調(diào)整,很常用
sources:代碼中添加斷點(diǎn),單步調(diào)試,以及單步調(diào)試過程中查看內(nèi)存中的對(duì)象
watch expression:通過表達(dá)式查看當(dāng)前內(nèi)存中的值
call stack:查看調(diào)用棧,開啟async,可以看異步調(diào)用棧(這個(gè)非常有用,尤其是ajax調(diào)試的時(shí)候)
scope variables:作用域鏈上的變量,非常有用
network:抓包查看每個(gè)請(qǐng)求,非常重要,前后端聯(lián)調(diào)必備
timeline:分析渲染、js執(zhí)行等等各個(gè)階段,性能優(yōu)化利器
emulation:模擬移動(dòng)端環(huán)境,mobile頁面開發(fā)必備
一些插件:
liveload: 修改頁面后自動(dòng)刷新,不用按F5
dimensions:直接在頁面上測(cè)量的利器
livestyle:css樣式修改后自動(dòng)起效果,不需要刷新,elements修改后也能同步到代碼中
image tool:測(cè)量,取色
UC二維碼:移動(dòng)端調(diào)試掃碼必備
pagespeed,YSlow:頁面性能分析和優(yōu)化插件
馬克飛象:優(yōu)秀的在線markdown編輯器,快速寫周報(bào),做記錄
sublime text2:編碼方便,插件多,速度快,性能好
emmet:提升html編碼速度必備
sublimelinter + 各種語言的lint和hint:代碼糾錯(cuò)
一些snippets:自動(dòng)補(bǔ)全,提升開發(fā)效率
Intellij IDEA和WebStorm:集成開發(fā)環(huán)境,集成了各種功能,開發(fā)比sublime要方便,但會(huì)比較吃性能
Mark Men:測(cè)量、取色、標(biāo)注利器,拿到視覺稿之后第一個(gè)打開的軟件
GFW Fucker:我用紅杏,可以的話買個(gè)虛擬服務(wù)器當(dāng)梯子
iHosts:非常優(yōu)秀的hosts管理軟件,輕松修改hosts,開發(fā)調(diào)試必備
Charles:Mac 平臺(tái)最好用的抓包分析工具
Rythem:AlloyTeam出品的代理抓包軟件,非常輕量,安裝簡(jiǎn)單,移動(dòng)端(真機(jī))開發(fā)調(diào)試很好用
Wunderlist:一個(gè)非常不錯(cuò)的Todo List,任務(wù)、需求多的時(shí)候管理起來很方便
技能
前端的技能其實(shí)除了JavaScript(包括NodeJS)、HTML、CSS以外,還有很多。其實(shí)前端的技能樹很大,這里只能列一些我開發(fā)中見到的說一說
語言基礎(chǔ)
JavaScript:
作用域鏈、閉包、運(yùn)行時(shí)上下文、this
原型鏈、繼承
NodeJS基礎(chǔ)和常用API
CSS:
選擇器
瀏覽器兼容性及常見的hack處理
CSS布局的方式和原理(盒子模型、BFC、IFC等等)
CSS 3,如animation、gradient、等等
HTML:
語義化標(biāo)簽
進(jìn)階
JavaScript:
異步控制(Promise、ES6 generator、Async)
模塊化的開發(fā)方式(AMD、CMD、KMD等等)
JavaScript解釋器的一些相關(guān)知識(shí)
異步IO實(shí)現(xiàn)
垃圾回收
事件隊(duì)列
常用框架使用及其原理
jQuery:基于選擇器的框架,但個(gè)人認(rèn)為不能叫框架,應(yīng)該算工具庫(kù),因?yàn)椴痪邆淠K加載機(jī)制,其中源碼很適合閱讀鉆研
AngularJS/Avalon等MVVM框架:著重理解MVVM模式本身的理念和雙向綁定的實(shí)現(xiàn),如何解耦
underscore:優(yōu)秀的工具庫(kù),方便的理解常用工具代碼片段的實(shí)現(xiàn)
polymer/React: 組件化開發(fā),面向未來,理解組件化開發(fā)的原理
CSS和HTML:主要是CSS3的特性和HTML5的特性,以及瀏覽器處理的流程和繪制原理
DOM樹、CSSOM樹、渲染樹的構(gòu)建流程及頁面渲染的過程
解析HTML、CSS、JavaScript時(shí)造成的阻塞
HTML5相關(guān)
SVG及矢量圖原理
Canvas開發(fā)及動(dòng)畫原理(幀動(dòng)畫)
Video和Audio
flex box布局方式
icon fonts的使用
常用NodeJs的package:
koa
express
underscore
async
gulp
grunt
connect
request
一些理念:
響應(yīng)式Web
優(yōu)雅降級(jí)、漸進(jìn)增強(qiáng)
dont make me think
網(wǎng)頁可用性、可訪問性、其中的意義
SEO搜索引擎優(yōu)化,了解搜索引擎的原理
SPA的好處和問題
性能優(yōu)化:
減少請(qǐng)求數(shù)量(sprite、combo)
善用緩存(application cache、http緩存、CDN、localstorage、sessionstorage,備忘錄模式)
減少選擇器消耗(從右到左),減少DOM操作(DOM和JavaScript解釋器的分離)
CSS的回流與重繪
項(xiàng)目
版本管理:首推Git,用過Git都不會(huì)想用SVN了
Git:本地版本管理的機(jī)制
SVN:遠(yuǎn)程中心的版本管理機(jī)制
自動(dòng)化構(gòu)建:主要就是less、模板、coffee等的預(yù)處理以及對(duì)代碼壓縮和合并
Gulp:基于流構(gòu)建,速度快、模塊質(zhì)量好
Grunt:獨(dú)立任務(wù)構(gòu)建,速度慢,配置蛋疼,靈活性高
預(yù)處理和模板引擎
less:語法簡(jiǎn)單,但功能有限
jade、ejs、velocity等模板引擎,各有各的長(zhǎng)處
coffee:python工程師最愛,我沒用過
環(huán)境搭建:主要是將線上代碼映射到本地,并在本地啟動(dòng)一個(gè)demo服務(wù)器,至于模擬數(shù)據(jù)的mock,見仁見智了
本地代理:ihosts
自動(dòng)化測(cè)試:在業(yè)務(wù)較為穩(wěn)定的情況下,可以通過自動(dòng)化測(cè)試來減少測(cè)試的事件,但需求較多的時(shí)候,維護(hù)測(cè)試用例的成本會(huì)很高,可能用自動(dòng)化測(cè)試會(huì)起到反效果
jasmine
mocha
生態(tài)系統(tǒng)
npm
bower
spm
搭建一個(gè)屬于自己的博客
git pages
hexo
jekyll
未來
Web Componets:面向未來的組件化開發(fā)方式
HTML模板
Shadow DOM
Custom Elements
HTML Import
移動(dòng)端Native開發(fā):這也是需要了解的,以后前端工程師會(huì)經(jīng)常地和webview打交道,也要了解native開發(fā)
其他
有些東西不是考敲碼就能弄好的,我參與實(shí)習(xí)的時(shí)候感受到了很多,這些是我遇到的也是我感覺自己做的不好的地方
對(duì)于業(yè)務(wù)的思考:我個(gè)人這方面非常欠缺,所以放在最前面,在敲碼前要多思考業(yè)務(wù)
交流和溝通能力:這個(gè)非常重要,前端同時(shí)需要與項(xiàng)目經(jīng)理、產(chǎn)品、交互、后臺(tái)打交道,溝通不善會(huì)導(dǎo)致很多無用功,延緩項(xiàng)目
知識(shí)管理、時(shí)間管理:input和output的平衡,output是最好的input。如何做好分享,參與社區(qū),做好交流,作好記錄
對(duì)新技術(shù)的渴望,以及敢于嘗試
入門書
入門可以通過啃書,但書本上的東西很多都已經(jīng)過時(shí)了,在啃書的同時(shí),也要持續(xù)關(guān)注技術(shù)的新動(dòng)態(tài)。這里推幾本我覺著不錯(cuò)的書:
《JavaScript高級(jí)編程》:可以作為入門書籍,但同時(shí)也是高級(jí)書籍,可以快速吸收基礎(chǔ),等到提升再回來重新看
《JavaScript權(quán)威指南》:不太適合入門,但是必備,不理解的地方就去查閱一下,很有幫助
《編寫可維護(hù)的JavaScript》和:
《Node.js開發(fā)指南》:不錯(cuò)的Nodejs入門書籍
《深入淺出Node.js》:Nodejs進(jìn)階書籍,必備
《JavaScript異步編程》:理解JS異步的編程理念
《JavaScript模式》和《JavaScript設(shè)計(jì)模式》:JavaScript的代碼模式和設(shè)計(jì)模式,將開發(fā)思維轉(zhuǎn)變到JavaScript,非常好的書
《JavaScript框架設(shè)計(jì)》:在用輪子同時(shí),應(yīng)當(dāng)知道輪子是怎么轉(zhuǎn)起來的,講解很詳細(xì),從源碼級(jí)別講解框架的各個(gè)部分的實(shí)現(xiàn),配合一個(gè)現(xiàn)有框架閱讀,可以學(xué)到很多東西
《Dont make me think》:網(wǎng)頁設(shè)計(jì)的理念,了解用戶行為,非常不錯(cuò)
《CSS禪意花園》:經(jīng)久不衰的一部著作,同樣傳遞了網(wǎng)頁設(shè)計(jì)中的理念以及設(shè)計(jì)中需要注意的問題
《高性能JavaScript》和《高性能HTML5》:強(qiáng)調(diào)性能的書,其中不只是性能優(yōu)化,還有很多原理層面的東西值得學(xué)習(xí)
《HTML5 Canvas核心技術(shù)》:我正在讀的一本書,對(duì)于canvas的使用,動(dòng)畫的實(shí)現(xiàn),以及動(dòng)畫框架的開發(fā)都非常有幫助
《HTTP權(quán)威指南》:HTTP協(xié)議相關(guān)必備,前端開發(fā)調(diào)試的時(shí)候也會(huì)經(jīng)常涉及到其中的知識(shí)
《響應(yīng)式Web設(shè)計(jì)》:技術(shù)本身不難,重要的是響應(yīng)式網(wǎng)頁的設(shè)計(jì)理念,以及移動(dòng)先行的思想
《JavaScript語言精粹》:老道的書,也是普及JavaScript的開發(fā)思維的一本好書,非常適合入門
一些不錯(cuò)的網(wǎng)站
github:沒啥好說的,多閱讀別人的源碼,多上傳自己的源碼,向世界各地的大牛學(xué)習(xí)
codepen:感受前端之美的必選之地,里面有很多酷炫的效果和優(yōu)秀的插件
echojs:快速了解js新資訊的網(wǎng)站
stackoverflow和segmentfault:基本上各種問題都能在上面獲得解答
google web fundamentals:每篇文章都適合仔細(xì)閱讀
static files:開放的CDN,很好用
iconfont:阿里的矢量圖標(biāo)庫(kù),非常不錯(cuò),支持CDN而且支持項(xiàng)目
html5 rocks: 一個(gè)不錯(cuò)的網(wǎng)站,很多瀏覽器的新特性以及前沿的技術(shù),都能在這上面找到文章
css tricks:如何活用CSS,以及了解CSS新特性,這里可以滿足你
JavaScript 秘密花園 JavaScript初學(xué)必看,非常不錯(cuò)
w3cplus:一個(gè)前端學(xué)習(xí)的網(wǎng)站,里面的文章質(zhì)量都挺不錯(cuò)的
node school:一個(gè)不錯(cuò)的node學(xué)習(xí)網(wǎng)站
learn git branch:一個(gè)git學(xué)習(xí)網(wǎng)站,交互很棒
前端亂燉:一個(gè)前端文章分享的社區(qū),有很多優(yōu)秀文章
正則表達(dá)式:一個(gè)正則表達(dá)式入門教程,非常值得一看
阮一峰的博客和張?chǎng)涡竦牟┛停嚎焖倭私饽承┲R(shí)的捷徑,但是如果需要深挖,還需要其他的資源
各路大牛的博客:這個(gè)太多了,就不貼了,知乎上有很全的
各種規(guī)范的官方網(wǎng)站,不懂得時(shí)候讀規(guī)范
歷程
以前是做Java SSH的,半路出家做的前端,所以水平比較弱,遇到問題也比較多。基本上入門靠看書和W3C School上的教程,以及一些前端博客,如湯姆大叔的博客。以前也只是使用jQuery,原生js也沒有太多的鉆研,后來逐漸看了很多本動(dòng)物書,比如老道的語言精粹等等。從這些書中學(xué)到了很多語言層面的知識(shí)。但這顯然是不夠的,所以我經(jīng)常會(huì)去社區(qū)上看看大家在談?wù)撌裁矗缓笕タ纯聪嚓P(guān)的資料,感興趣就會(huì)多找些資料看看,或者寫一寫demo。學(xué)CSS主要就是通過這種方式。后來開始更多的關(guān)注各路大牛的博客和一些比較深的書籍,以及關(guān)注一些新的知識(shí)和框架,并且不斷地練手提交代碼到github,這樣也學(xué)到了很多知識(shí)。在實(shí)習(xí)的過程中,切身參與到實(shí)際項(xiàng)目開發(fā)之中,能學(xué)到很多在學(xué)校學(xué)不到的理念和思維,這點(diǎn)也有很大的幫助。不說了,我要去搬磚求offer了…
MrRaindrop的學(xué)習(xí)經(jīng)歷
應(yīng)qiu神的邀請(qǐng)分享一下前端學(xué)習(xí)經(jīng)驗(yàn),這里對(duì)前端知識(shí)體系架構(gòu)就不做總結(jié)了,各位大神們的總結(jié)已經(jīng)相當(dāng)?shù)轿涣耍揖拓暙I(xiàn)幾個(gè)個(gè)人認(rèn)為還比較有用的鏈接大家研究研究就好,然后主要分享一下我在前端學(xué)習(xí)過程中遇到的問題和總結(jié)的經(jīng)驗(yàn)教訓(xùn)吧,如果能幫到想要入門的FE初學(xué)者(我就姑且假定為本文的讀者受眾類型了),讓他們少走點(diǎn)彎路,每走一步都知道自己下一步的方向,這是最好了。各位大神的總結(jié)和分享詳見qiu神整理的FE-learning。
先說下,前端這個(gè)東西每個(gè)人都可以有適合自己的學(xué)習(xí)方法,這篇僅作參考,寫的有點(diǎn)亂,各位湊合看。
緣起
我是屬于誤打誤撞進(jìn)了前端,之前一直往做游戲的方向去來著,搞過游戲網(wǎng)站,玩過游戲引擎,比如unity,unreal這種商業(yè)引擎,搗鼓了幾個(gè)游戲原型,不過自打研一進(jìn)了實(shí)驗(yàn)室,直接就被導(dǎo)師派去寫了js,導(dǎo)師給了我半個(gè)月時(shí)間讓我寫個(gè)基于百度地圖api的數(shù)據(jù)展示頁面,雖然這個(gè)時(shí)間還是相當(dāng)寬裕的,不過之前沒怎么寫過js,也不會(huì)用地圖api,于是我就一邊啃著《Javascript權(quán)威指南》(犀牛書)一邊參考實(shí)驗(yàn)室前人留下的“代碼”,總算是把功能都寫出來了。那個(gè)頁面算我的js入門作了,也是我前端學(xué)習(xí)路線的開始。
現(xiàn)在想來,雖然指派了去做前端,但是一直做下去并做好還是得靠興趣維持,當(dāng)然前端是一個(gè)趣味性十足的技術(shù)領(lǐng)域,而且社區(qū)每天都很“熱鬧”。
項(xiàng)目,下一個(gè)項(xiàng)目
我個(gè)人認(rèn)為前端的學(xué)習(xí),初學(xué)階段你可以完全脫離開書本,以項(xiàng)目驅(qū)動(dòng)。雖然我個(gè)人是從犀牛書開始啃的,不過如果你沒有充足的時(shí)間,或者覺得啃大部頭乏而無味的話,還是別像我這樣。當(dāng)然了如果決定啃書最好是把書里的例子都跟著敲一遍的。我上研之前沒接觸過js,4月份還沒開學(xué)呢就被直接被導(dǎo)師甩了個(gè)百度地圖api的項(xiàng)目到臉上,接著就是各種ERP,地圖數(shù)據(jù)展示,雖然換著花樣來一點(diǎn)不重樣,不過基本上都是前端的活,SSH和android開發(fā)也打過醬油,整個(gè)實(shí)驗(yàn)室就我一個(gè)人寫前端敢信?富客戶端SPA時(shí)代的后端就是一個(gè)restful接口,代碼量基本都在前端啊,寫的我一個(gè)人怎一個(gè)爽字了得…期間跟著導(dǎo)師感受了一把創(chuàng)業(yè),每天從7點(diǎn)搞到晚上10點(diǎn),也算是經(jīng)歷了一段快速成長(zhǎng)期。
掌握一門技術(shù)先掌握它的大體框架,想一個(gè)能實(shí)現(xiàn)的點(diǎn)子,做一個(gè)能跑就行的demo,再去完善它的細(xì)節(jié),等到demo完成了,對(duì)這門技術(shù)有了一個(gè)感性的認(rèn)識(shí),再去啃書,收獲會(huì)大很多。我從開始原生js寫到j(luò)query,再到extjs,再到angularjs,從導(dǎo)師指定技術(shù),到自己做技術(shù)選型,一個(gè)項(xiàng)目接著一個(gè)項(xiàng)目的練,就跟打怪升級(jí)似的。當(dāng)然沒有項(xiàng)目就去自己創(chuàng)造項(xiàng)目,動(dòng)手實(shí)現(xiàn)自己的想法是件有樂趣和成就感的事。
收集癖和知識(shí)管理
前端學(xué)習(xí)有個(gè)特點(diǎn),很多東西都很零碎,分散,需要你自己去整理、歸納和總結(jié)。在微博、知乎上follow了眾多的大神,你不僅僅是為了聽八卦,大神們的只言片語有時(shí)候留下的是無盡的余味,很有可能一個(gè)不經(jīng)意提到的一個(gè)詞就成為你下一個(gè)學(xué)習(xí)的目標(biāo)。收集這些信息,善用google,提問,思考。就像游戲里的收集要素,前端學(xué)習(xí)也是充滿搜集要素的一個(gè)“游戲”,只不過你需要一個(gè)知識(shí)管理工具來充當(dāng)物品欄和倉(cāng)庫(kù),我所知道的大牛們無一不是知識(shí)管理工具的重度使用者。以前用的oneNote,那時(shí)候還沒綁定到云存儲(chǔ),現(xiàn)在基本上用evernote,筆記已經(jīng)累計(jì)到1200+篇。書簽一直打算用delicious,因?yàn)樗腔趖ag管理的,但一直沒用起來。當(dāng)然重點(diǎn)不在于這些工具,但是趁手的工具可以提高你的學(xué)習(xí)效率。最關(guān)鍵當(dāng)然是隨時(shí)保持旺盛的學(xué)習(xí)欲望,你的目標(biāo)是了解有關(guān)前端的一切(當(dāng)然不是所有都要掌握,因?yàn)楫吘鼓愕木τ邢蓿椰F(xiàn)實(shí)的說這也不太可能)。
跟對(duì)神
這個(gè)可控性貌似不大…跟對(duì)老大這個(gè)就不多說了,一定程度要看造化。不過話說回來,多跟身邊的高手交流是王道,這個(gè)高手不一定要多高,但是一定要對(duì)技術(shù)有熱情。研一的時(shí)候熱情高漲,每天7點(diǎn)進(jìn)實(shí)驗(yàn)室門,然后發(fā)現(xiàn)有個(gè)家伙居然比我還早到。后來發(fā)現(xiàn)這家伙上午就走了,下午又來了,而且導(dǎo)師對(duì)此習(xí)以為常,原來這家伙晚上不睡覺通宵寫代碼,上午才跑回去睡。后來經(jīng)常和這位神討論問題,每次感覺經(jīng)驗(yàn)值蹭蹭蹭的往上漲。然后實(shí)驗(yàn)室還有一位神,被前面這位通宵神形容為“只能望其項(xiàng)背,一直在追趕,從來沒趕上”,兩位神的特點(diǎn)都是什么都了解一點(diǎn),所以什么都能跟你討論得起來,我有段時(shí)間做了個(gè)讀書計(jì)劃,從c/c++到vc/mfc再到unix網(wǎng)絡(luò)編程,最后一路看到j(luò)ava核心技術(shù)和MSDN上的C#編程指南,和神們也能扯得很high了。
總之就是這兩位神把我拉進(jìn)了坑,或者說從一個(gè)坑跳進(jìn)另一坑,雖然兩位神都不是搞前端的,不過技術(shù)之間總有相通之處。
讀書
讀書,多讀書,讀好書。在劉未鵬的博客里看到過一個(gè)公式,你第一個(gè)月的工資等于之前買過(讀過)的技術(shù)書價(jià)格總和(這里說的技術(shù)書指那些經(jīng)典的公認(rèn)的好書)。討論這個(gè)公式的正確性似乎沒什么意義,然而它的合理性是毋庸置疑的,那就是多讀經(jīng)典技術(shù)書。最極端的一個(gè)例子,google的徐宥在我的大學(xué)里面說他掃蕩了圖書館的整個(gè)TP312書架…對(duì)于前端的經(jīng)典書籍,后面列了一個(gè)我收集的前端書列(如果有遺漏的前端經(jīng)典好書,還請(qǐng)留言告訴我),有條件可以嘗試刷一遍這些書,我也是在找完整的時(shí)間去啃完它們。之前說的,前端知識(shí)點(diǎn)松散,收集零散的知識(shí)點(diǎn),從博客里快速學(xué)習(xí)等,這些只是前端學(xué)習(xí)的一個(gè)方面,如果你要想深入理解一個(gè)知識(shí)體系,了解它的來龍去脈,對(duì)它建立系統(tǒng)認(rèn)識(shí),讀經(jīng)典書還是必不可少的。
我從最開始啃完犀牛書,然后接著去看了其他一些和前端干系不大的經(jīng)典技術(shù)書,再后來通過實(shí)驗(yàn)室的項(xiàng)目和自己弄的一些小項(xiàng)目逐漸對(duì)前端領(lǐng)域比較上路以后,又看了《Javascript模式》、《Javascript設(shè)計(jì)模式》、《編寫可維護(hù)的Javascript》,后來了解到node并開始用node搞點(diǎn)小玩意兒,又看了本《NodeJS up and run》和《Mongodb權(quán)威指南》,不過感覺前者略坑。那會(huì)兒樸靈那本深入淺出(曬書么么噠)還沒出,后來出了就去圖書館借來看完,這么看下來感覺還不錯(cuò),不過感覺看的還是偏少了,還需要繼續(xù)刷(參照上面的書列)。
前端的定位
前端的定位關(guān)乎到你需要吸收什么樣的知識(shí)和技能,決定在技術(shù)世界里你對(duì)什么需要格外敏感。如果你認(rèn)為前端僅僅停留在切頁面,實(shí)現(xiàn)交互和視覺的要求,那你對(duì)前端的認(rèn)識(shí)還停留在初級(jí)階段。阿里終面的時(shí)候我問了考官這么個(gè)問題:前端技術(shù)日新月異,范圍越擴(kuò)越寬,標(biāo)準(zhǔn)越來越豐富,似乎任何一個(gè)觸角都能伸出很遠(yuǎn)。怎么給前端一個(gè)合適的定位?考官給我分析了半天,然后總結(jié)成一句話,就是用戶和網(wǎng)站的聯(lián)結(jié)者,用戶體驗(yàn)的創(chuàng)造者(原話不是這樣,但大體是這個(gè)意思)。也就是說前端的終極目標(biāo)其實(shí)就是創(chuàng)造用戶體驗(yàn),提升用戶體驗(yàn),以用戶體驗(yàn)為中心。不管你是從交互設(shè)計(jì)上下手,還是從性能優(yōu)化出發(fā),或者改進(jìn)工作流提升工作流效率,最終都是為了創(chuàng)造和提升用戶體驗(yàn),最終都要體現(xiàn)到用戶體驗(yàn)這一點(diǎn)上來。我認(rèn)為這個(gè)總結(jié)非常有道理(當(dāng)然“用戶體驗(yàn)”這個(gè)詞太寬泛了,并且不僅僅是前端工程師的范疇,比如開發(fā)后臺(tái)的時(shí)候?qū)σ粋€(gè)數(shù)據(jù)處理過程進(jìn)行優(yōu)化,提升了整體性能,這也是對(duì)用戶體驗(yàn)的一個(gè)提升)。
現(xiàn)在的前端工程師做到一定階段不可避免會(huì)接觸到很多比切頁面、實(shí)現(xiàn)視覺要求、實(shí)現(xiàn)交互等更深入的問題,比如前端自動(dòng)化、圖像編程、性能優(yōu)化等等,再往后推一點(diǎn)就是PHP/JSP/ASP/nodeJs,過去后端模板一般屬于后端的范疇,現(xiàn)在隨著前端架構(gòu)的演進(jìn),可能會(huì)讓你去寫后端模板的代碼,需要用到后端語言(PHP/Java/C#等),這就是所謂大前端(然而這與前端的定位并不是相背離的,大前端處理的依然是與用戶接觸的部分,仍然是對(duì)用戶體驗(yàn)的優(yōu)化)。可能最常見或者被談?wù)撟疃嗟木褪莕ode,其實(shí)這幾種技術(shù)選型都可以,bat三家據(jù)說百度用PHP比較多,阿里用node比較多。
玉伯在他的博客里提過所謂全端是橫向的,全棧是縱向的。全端即所有的終端說白了都是前端,因?yàn)槎缄P(guān)乎到用戶體驗(yàn),直接和用戶接觸。適應(yīng)多終端的開發(fā),要求你在web前端的基礎(chǔ)上,可能還要去擴(kuò)展android開發(fā)和ios開發(fā)的知識(shí),好在由于hybrid開發(fā)方式的流行,對(duì)使用native語言開發(fā)的技能會(huì)要求的不那么深入。
全棧可以說是最適合初創(chuàng)公司的一種發(fā)展類型,廣義上認(rèn)為是從前端干到后端,從開發(fā)干到運(yùn)維,這種就不說了,一般人應(yīng)該不會(huì)想要去往這個(gè)方向發(fā)展,想要成為這種意義上的full-stack dev的,可能用不著來看我這篇文章了;而狹義上的全棧特指使用js語言從前端寫到架設(shè)在nodeJs上的后端,前后端統(tǒng)一語言,統(tǒng)一編程模型,甚至公用同一套代碼。更多了解全棧開發(fā)可以看看玉伯這篇說說全棧工程師。
以上是我對(duì)前端以及衍生出來的技術(shù)路線的一些淺薄理解,學(xué)習(xí)一個(gè)領(lǐng)域掌握它的整體上的走向和趨勢(shì)還是挺重要的。另外如果想要對(duì)前端學(xué)習(xí)方向、職業(yè)成長(zhǎng)路徑有一個(gè)整體的認(rèn)識(shí),推薦看看拔赤總結(jié)的這篇前端開發(fā)十日談。
最后
貢獻(xiàn)幾個(gè)對(duì)前端學(xué)習(xí)、面試有幫助的鏈接:
前端面試問題合集(Front-end-Developer-Interview-Questions)(https://github.com/darcyclarke/Front-end-Developer-Interview-Questions)
前端技能匯總(JacksonTian)(https://github.com/JacksonTian/fks)
另一張前端技能匯總圖(http://www.f2er.info/)
前端那點(diǎn)事兒(書列)(http://book.douban.com/doulist/13701898/)
byr論壇yiyizym的建議
與grunt相比,學(xué)習(xí)gulp會(huì)比較簡(jiǎn)單
做SPA的話,推薦backbone.js和 backbone.marionette.js
FQ不用折騰,花十塊錢買一個(gè)月的 紅杏。
把基礎(chǔ)打扎實(shí)了再學(xué)這些都沒問題。
html 沒什么好說的,有空學(xué)學(xué)html5。
css 盡量看文檔 ,因?yàn)楹芏嘀形馁Y料都各執(zhí)一辭,看多了反而會(huì)糊涂。
有個(gè)網(wǎng)站可以查找html/css標(biāo)簽、屬性在各個(gè)瀏覽器中的支持情況,挺好用的。
javascript 就看 javascript高級(jí)程序設(shè)計(jì) 。不過這么厚的書看過就會(huì)忘。對(duì)javascript核心概念的講解:對(duì)象/原型鏈/ 構(gòu)造函數(shù)/執(zhí)行上下文/作用域鏈/閉包/this,這里有篇不錯(cuò)的文章。
有閑情可以看看 ecmascript 6,計(jì)劃明年6月就發(fā)布啦。阮一峰的網(wǎng)站有入門資料。
jquery 有很多 API,這個(gè)網(wǎng)站可以方便查到。有時(shí)間弄清楚jquery deferred 的用法。
多給 sublimetext 裝插件,比如說檢查代碼錯(cuò)誤的
*請(qǐng)認(rèn)真填寫需求信息,我們會(huì)在24小時(shí)內(nèi)與您取得聯(lián)系。