ection 1
1.Core Java,就是Java基础、JDK的类库,很多童鞋都会说,JDK我懂,但是懂还不足够,知其然还要知其所以然,JDK的源代码写的非常好,要经常查看,对使用频繁的类,比如String,集合类(List,Map,Set)等数据结构要知道它们的实现,不同的集合类有什么区别,然后才能知道在一个具体的场合下使用哪个集合类更适合、更高效,这些内容直接看源代码就OK了
2.多线程并发编程,现在并发几乎是写服务端程序必须的技术,那对Java中的多线程就要有足够的熟悉,包括对象锁机制、synchronized关键字,concurrent包都要非常熟悉,这部分推荐你看看《Java并发编程实践》这本书,讲解的很详细
3.I/O,Socket编程,首先要熟悉Java中Socket编程,以及I/O包,再深入下去就是Java NIO,再深入下去是操作系统底层的Socket实现,了解Windows和Linux中是怎么实现socket的
4.JVM的一些知识,不需要熟悉,但是需要了解,这是Java的本质,可以说是Java的母体, 了解之后眼界会更宽阔,比如Java内存模型(会对理解Java锁、多线程有帮助)、字节码、JVM的模型、各种垃圾收集器以及选择、JVM的执行参数(优化JVM)等等,这些知识在《深入Java虚拟机》这本书中都有详尽的解释,或者去oracle网站上查看具体版本的JVM规范.
5.一些常用的设计模式,比如单例、模板方法、代理、适配器等等,以及在Core Java和一些Java框架里的具体场景的实现,这个可能需要慢慢积累,先了解有哪些使用场景,见得多了,自己就自然而然会去用。
6.常用数据库(Oracle、MySQL等)、SQL语句以及一般的优化
7.JavaWeb开发的框架,比如Spring、iBatis等框架,同样他们的原理才是最重要的,至少要知道他们的大致原理。
8.其他一些有名的用的比较多的开源框架和包,Netty网络框架,Apache common的N多包,Google的Guava等等,也可以经常去Github上找一些代码看看。
section 2
每逢长假都会有很多程序员跳槽,十一、过年是跳槽黄金时刻,尤其是过年。过年的时候年终奖到手,没有了多少牵挂,年终同学同事聚会比较多,沟通的就多,各种工作机会的消息也相应会多,所以跳槽的机会也就会多。跳槽就必不可少的要经过面试,那么作为一个Java程序员需要准备哪些面试知识呢?下面就给大家说说。
1、集合框架:
从上图可以看到主要是Collection和Map的继承类和Iterator的实现类,重点掌握ArrayList、LinkedList、Vector、Stack、PriorityQueue、HashSet、LinkedHashSet、TreeSet、HashMap、LinkedHashMap、TreeMap、WeakHashMap、EnumMap、TreeMap、HashTable的特点和实现原理,还有多线程使用场景和插入多还是删除多的时候使用什么样的集合类效率会更高。
2、IO框架:
主要掌握Reader、Writer、InputStream、OutputStream的继承类,重点掌握字节流(FileInputStream、FileOutputSteam、BufferedInputStream、BufferedOutputStream、DataInputStream、DataOutputStream)和字符流(FileReader、FileWriter、BufferedReader、BufferedWriter、InputStreamReader、OutputStreamWriter),并熟练运用。还有就是NIO的工作原理要知道。
3、String先关:
主要考察对String的处理,顺带考察多线程和算法,大公司就是喜欢考察字符串的算法,主要是字符串查找或者剔除,多线程打印字符串,超大字符串处理。
4、异常处理:
掌握Throwable继承类,理解Error和Exception的区别,理解运行时异常和编译异常的区别,掌握异常的处理方法,掌握try、catch、finally、throw、throws关键字的意义,掌握try-catch-finally语句的执行顺序,掌握异常的工作原理,知道常见的异常有哪些。
5、多线程:
如何创建和启动一个线程,有哪些方法?多线程如何交互,线程之间的调度、让步、合并,如何同步?生产和消费者模型。还有就是掌握线程安全、线程池,死锁。
6、JVM知识:
掌握常见的垃圾回收机制,掌握程序计数器、堆、栈、方法区的作用,掌握类的加载机制。掌握内存分代模型和工作原理。掌握JVM启动参数常见配置,了解JVM调优。
7、数据结构与算法:
掌握常见查找和排序算法实现及其时间、空间复杂度。掌握常见数据结构如链表、队列、栈的基本原理和实现。
section 3
经常主持对高级工程师和中基层Tech Leader的面试,一年下来总有百八十场,我给大家分享一下我对于高级工程师的定位吧,虽然我主要负责.Net团队,但是对于其他语言应该也是适用的。
一 理论基础:高级工程师必须有较好的理论基础,既包含一些基础的学科知识,也要包含个人专攻方向的前沿理论。我遇到过形形色色的求职者,有人自称精通领域模式,却不明白什么是聚合根(领域根)。甚至有人无法列举常用的非线性结构,更别提伪码实现和应用场景分析了。这些人普遍振振有词地说, 我有丰富的开发经验,项目需要实现的功能我都能做出来,我只是没有去记那些术语名词。抱歉,你不是没有记术语名词,你是根本没有潜心看技术文章的心态,你所谓的学习就是看一些诸如《21天精通Java》,《7天,从菜鸟到专家》之类的垃圾书,或者看点视频。那么你这个高工,比别人高在哪里呢?当单位需要你代表团队和合作机构沟通,甚至发表专栏的时候,你是不是也准备跟大家讲”这个东西我不知道该怎么讲,大家可以看一下我的代码“。只有代码可秀的人是码农,不是高工,所以我给这类求职者的综评是中+封顶。
二 工作经验:高级工程师必须有过在项目中担心核心模块开发或者整体架构设计的经验,并且项目越高大上越好,比如你在互联网企业搞过读写分离的实现,你在电商搞过秒杀算法,你在电信行业做过网络层,我必定会高看一眼。如果你就仅仅只是一个人全栈搞过几个小网站,啪啪啪一大堆成熟框架用得倍溜,那么你只是一个装配工。我给这类求职者的综评是中+封顶。
三 培养潜力:高级工程师必须有全局思维,如果在你过往的工作历程中,你对你兄弟团队或者部门的工作情形一问三不知,甚至于一个项目中,你只懂自己的模块,其他同事负责的模块你就只会call个API,那么你就是一个很难再进一步的人。对于企业来说,有你不多,无你不少,所以我给这类求职者的综评是中+封顶。
四 沟通能力:高级工程师在技术团队中是绝对的核心人中,小项目中你就是负责人,大项目中你也要负责带新人,那么良好的沟通能力必不可少,如果你仅仅是自己一个人心里亮堂,你对企业的价值就要大打折扣。这类求职者,我也有录用过不少,因为程序员木讷可以说是一种共性,在这方面没法太挑剔,但是我给他们的综评是高-封顶。
section 4
如果要应聘高级开发工程师职务,仅仅懂得Java的基础知识是远远不够的,还必须懂得常用数据结构、算法、网 络、操作系统等知识。因此本文不会讲解具体的技术,笔者综合自己应聘各大公司的经历,整理了一份大公司对Java高级开发工程师职位的考核纲要,希望可以帮助到需要的人。
1 Java基础
1.1 Collection和Map
(1)掌握Collection和Map的继承体系。
(2)掌握ArrayList、LinkedList、Vector、Stack、PriorityQueue、HashSet、 LinkedHashSet、TreeSet、HashMap、LinkedHashMap、TreeMap、WeakHashMap、EnumMap、 TreeMap、HashTable的特点和实现原理。
(3)掌握CopyOnWriteArrayList、CopyOnWriteArraySet、ConcurrentHashMap的实现原理和适用场景。
1.2 IO
(1)掌握InputStream、OutputStream、Reader、Writer的继承体系。
(2)掌握字节流(FileInputStream、DataInputStream、BufferedInputStream、 FileOutputSteam、DataOutputStream、BufferedOutputStream)和字符流 (BufferedReader、InputStreamReader、FileReader、BufferedWriter、 OutputStreamWriter、PrintWriter、FileWriter),并熟练运用。
(3)掌握NIO实现原理及使用方法。
1.3 异常
(1)掌握Throwable继承体系。
(2)掌握异常工作原理。
(3)了解常见受检异常(比如FileNotFoundException)、非受检异常(比如NullPointerException)和错误(比如IOError)。
1.4 多线程
(1)掌握Executors可以创建的三种(JAVA8增加了一种,共四种)线程池的特点及适用范围。
(2)掌握多线程同步机制,并熟练运用。
1.5 Socket
(1)掌握Socket通信原理。
(2)熟练使用多线程结合Socket进行编程。
2 Java虚拟机
2.1 JVM内存区域划分
(1)掌握程序计数器、堆、虚拟机栈、本地方法栈、方法区(JAVA8已移除)、元空间(JAVA8新增)的作用及基本原理。
(2)掌握堆的划分:新生代(Eden、Survivor1、Survivor2)和老年代的作用及工作原理。
(3)掌握JVM内存参数设置及调优。
2.2 类加载
(1)掌握类的加载阶段:加载、链接(验证、准备、解析)、初始化、使用、卸载。
(2)掌握类加载器分类及其应用:启动类加载器、扩展类加载器、应用程序类加载器、自定义加载器。
3 J2EE
(1) 掌握JSP内置对象、动作及相关特点和工作原理。
(2) 掌握Servlet的特点和工作原理。
(3) 掌握Spring框架的IOC和AOP实现原理(反射和动态代理)。
(4) 至少掌握一个MVC框架(Spring MVC,Struts等)的工作原理,并熟练运用。
(5) 至少掌握一个ORM框架(Hibernate,MyBatis等)的工作原理,并熟练运用。
4 数据结构与算法
(1)掌握线性表和树的特点并熟练运用。
(2)掌握常用排序和查找算法:插入排序(直接插入排序、希尔排序)、选择排序(直接选择排序、堆排序)、交换排序(冒泡排序、快速排序)、归并排序,顺序查找、二分查找、哈希查找。
(3) 熟练运用常见排序和查找算法思想解决编程问题。
(4)了解几大基本算法:贪心算法、分治策略、动态规划。
5 计算机网络
(1)掌握网络的分层结构,及每层的功能特点。
(2)掌握TCP/IP的通信原理(三次握手、四次挥手)
6 数据库
(1)掌握复杂的SQL语句编写。
(2)掌握数据库的优化(SQL层面和表设计层面)。
(3)至少掌握一款数据库产品。
(4)熟悉高并发、大数据情况下的数据库开发。
7 Web技术
(1)掌握AJAX的工作原理。
(2)至少熟悉一款JS框架(比如JQuery)。
8 设计模式
(1)熟悉常见的设计模式。
(2)会将设计模式理论应用到实际开发中。
9 Linux
(1)熟练运用Linux常见命令。
(2)熟悉Linux操作系统基本概念及特点。
(3)熟悉Shell脚本。
10 操作系统
(1)掌握操作系统的进程管理。
(2)了解操作系统的I/O。
11 正则表达式
(1)掌握常见正则表达式符号。
(2)熟练运用正则表达式解决实际问题(比如匹配电话号码、邮箱、域名等)。
Section 5
h5edu 的源码
pure--响应式css框架
Hadoop大数据
ERP系统开发
linux
freemarker
weblogic/jobss
webwhpere
webservice http://www.iteye.com/topic/1135747
bootstrap
HTML5
android
css/jslever
spring aop ssh ssm 徒手搭建
jquery源码分析融汇
缓存 echacge
并发
页面静态化
UML
shell
pathy
github
网络编程
ExtJS
网络爬虫
设计模式
多线程与并发
第三方支付/登录http://wiki.connect.qq.com/%E7%BD%91%E7%AB%99%E6%8E%A5%E5%85%A5%E6%B5%81%E7%A8%8B
============================================高级工程====================================
找一些高级题目去做
借鉴理解源码http://www.java1234.com/a/kaiyuan/javaWeb/
========================================================================================
1.Core Java部分
这是最基础的,对于一个java高级开发/设计人员,你需要对这一部分达到精通的水平,重点内容如下:
a.面向对象编程思想(封装继承多态接口)
b.字符串处理
c.java.lang包,java.util包等常用包
4.java异常处理
2.Java高级部分
a.Java I/O流
b.Java多线程技术
c.Java网络编程
d.Java Swing
后两项可以了解即可,如果项目需要可以深入研究
3.前端基本技能
* HTML + CSS网页开发
* JavaScript
* Jquery
* 浏览器兼容性 CSS hack(了解)
4.熟练使用JSP + Servlet进行开发
5.MVC设计模式,原理,以及相关框架,如Struts
6.SSH框架
7.缓存技术 session & cookie
8.熟练使用一种以上Java开发工具
Eclipse/MyEclipse/Jbuilder/Jcreator
9.熟练使用XML
JDOM w3c.dom SAX
10.Java设计模式
工厂模式,单例模式==
11.Java反射机制
反射的各种用法
12.了解或熟悉 C, C++, .NET
13.熟悉JDK的配置,环境变量
14.数据库oracle必学,其他最好了解一种以上(mysql,sql server,access==)
oracle:视图,索引,存储过程,触发器,游标,包,常用函数==
15.数据库原理
事务的原理,锁机制,表连接,复杂查询语句(工作经验),性能调优,锁表以及解决方案==
16.JDBC,连接池
17.Ajax,反向Ajax
18.HTTP协议,request 和 response的原理,HTTP status(了解常用的),Https原理
19.熟悉Linux基本命令,使用过Linux/Unix系统,可以编写shell脚本,可以在Linux上部署项目
20.了解windows系统批处理脚本bat
21.了解HTML5,最好学习过
22.熟悉一种JS框架,如Prototype
23.J2EE原理 熟悉一种以上web容器如Tomcat,JBoss,websphere,weblogic==
24.熟悉ant或maven
25.熟悉一门脚本语言,如python ,ruby
26.了解php/ asp
27.了解ftp协议及原理
28.熟练使用Junit测试,熟悉Mockito等测试工具
29,熟悉javac,javadoc,native,native2ascii等常用命令
30.熟悉常用的排序算法,如冒泡排序,快速排序等,最好自己研究过一些的算法,下面的这个就是我曾经研究过的一个:
http wenku baidu com /view/391db3f0941ea76e58fa04e9点html
http://wenku.baidu.com/view.391db3f0941ea76e58fa04e9.html
31.了解Flex(不学也没关系)
32.了解敏捷开发模式
33.工作流workflow至少用过一种,如OSworkflow,了解原理
34.使用过VPN了解其原理
35.熟悉jstl表达式和el表达式
36.熟悉webservice,WSDL,SOAP
37.图片处理,如图片上传,预览,限制大小等,下面共享一(垃圾勿喷):
http wenku baidu com/view/05337bfc770bf78a6529541b点html
38.版本控制工具,CVS VSS SVN
39,JSON技术,JSON+AJAX
40.分页技术,最好自己实现过不仅仅是用过要知道原理
41.Java Mail
42.Java读写txt,excel
JXL技术
43.JVM原理,JVM内存管理,GC,Java堆栈池
44.熟练使用下面的工具:
office办公软件,word,excel,ppt等
plsql,sqldevelop 数据库开发工具
outlook大公司都用
ue编辑器
浏览器控制台,调试
SHH/PUTTY 远程
45.UML建模工具 Rational Rose等
46.使用log4j
47.使用过开放API如百度地图,腾讯街景,新浪微博等
48.页面静态化技术(伪静态页面)UrlRwriter
49.报表技术,使用过报表制作工具,如水晶易表
50.定时任务,如Spring batch,学会自定义batch任务(不适用第三方工具)
51.了解uuid
52.B/s 和 C/s架构
53.正则表达式
54.了解JNDI JMS
55. ERP
56.unicode编码,乱码的解决
57.开源网络编辑器,如ckEditor
58.二进制原理
59,使用过,了解开源论坛框架,如discuzz
60, GWT ,Closure框架
61.了解 大数据,云计算
62.搜索引擎搜索技术
63.软件工程,项目管理
1.你需要精通面向对象分析与设计(OOA/OOD)、涉及模式(GOF,J2EEDP)以及综合模式。你应该十分了解UML,尤其是class,object,interaction以及statediagrams。
2.你需要学习JAVA语言的基础知识以及它的核心类库(collections,serialization,streams,networking, multithreading,reflection,event,handling,NIO,localization,以及其他)。
3.你应该了解JVM,classloaders,classreflect,以及垃圾回收的基本工作机制等。你应该有能力反编译一个类文件并且明白一些基本的汇编指令。
4.如果你将要写客户端程序,你需要学习WEB的小应用程序(applet),必需掌握GUI设计的思想和方法,以及桌面程序的SWING,AWT, SWT。你还应该对UI部件的JAVABEAN组件模式有所了解。
JAVABEANS也被应用在JSP中以把业务逻辑从表现层中分离出来。
5.你需要学习java数据库技术,如JDBCAPI并且会使用至少一种persistence/ORM构架,例如Hibernate,JDO, CocoBase,TopLink,InsideLiberator(国产JDO红工厂软件)或者iBatis。
6.你还应该了解对象关系的阻抗失配的含义,以及它是如何影响业务对象的与关系型数据库的交互,和它的运行结果,还需要掌握不同的数据库产品运用,比如:oracle,mysql,mssqlserver。
7.你需要学习JAVA的沙盒安全模式(classloaders,bytecodeverification,managers,policyandpermissions,
codesigning, digitalsignatures,cryptography,certification,Kerberos,以及其他)还有不同的安全/认证 API,例如JAAS(JavaAuthenticationandAuthorizationService),
JCE (JavaCryptographyExtension),JSSE(JavaSecureSocketExtension),以及JGSS (JavaGeneralSecurityService)。
8.你需要学习Servlets,JSP,以及JSTL(StandardTagLibraries)和可以选择的第三方TagLibraries。
9.你需要熟悉主流的网页框架,例如JSF,Struts,Tapestry,Cocoon,WebWork,以及他们下面的涉及模式,如MVC/MODEL2。
10.你需要学习如何使用及管理WEB服务器,例如tomcat,resin,Jrun,并且知道如何在其基础上扩展和维护WEB程序。
11.你需要学习分布式对象以及远程API,例如RMI和RMI/IIOP。
12.你需要掌握各种流行中间件技术标准和与java结合实现,比如Tuxedo、CROBA,当然也包括javaEE本身。
13.你需要学习最少一种的XMLAPI,例如JAXP(JavaAPIforXMLProcessing),JDOM(JavaforXMLDocumentObjectModel),DOM4J,或JAXR(JavaAPIforXMLRegistries)。
14.你应该学习如何利用JAVAAPI和工具来构建WebService。例如JAX-RPC(JavaAPIforXML/RPC),SAAJ (SOAPwithAttachmentsAPIforJava),JAXB(JavaArchitectureforXMLBinding),
JAXM(JavaAPIforXMLMessaging), JAXR(JavaAPIforXMLRegistries),或者JWSDP(JavaWebServicesDeveloperPack)。
15.你需要学习一门轻量级应用程序框架,例如Spring,PicoContainer,Avalon,以及它们的IoC/DI风格(setter,constructor,interfaceinjection)。
16.你需要熟悉不同的J2EE技术,例如JNDI(JavaNamingandDirectoryInterface),JMS (JavaMessageService),JTA/JTS(JavaTransactionAPI/JavaTransactionService),JMX (J
面报道
(1)AngularJS在2015
(2)Vue.js:轻量高效的前端组件化方案
(3)avalon:小而美,轻量级前端MVVM框架
(4)解读React
(5)探索React生态圈
(6)解读Mobile Library背后的设计故事和理念
资讯
(1)外刊速递:CACM
(2)大数据是如何改善伦敦公共交通的
(3)确保用正确的方法做事
(4)创业公司失败的原因
(5)业界声音
(6)数据与国际组织危机处理
(7)2015中国人工智能大会观察
技术
(1)我是如何进行异构并行计算算法设计的
(2)电信行业服务化实践
(3)如何像巫师那样隔空操作
百味
(1)程序员的年龄天花板
《专家导读》──流行前端框架展示,告诉你如何选择? 文/ 程邵非
2014到2015年,随着移动互联网的兴起,前端框架开始从jQuery一统天下的局面,逐渐演变成了百花齐放的局面。从这些框架的功能和目标来看,前端工程师的视角已经逐渐从“兼容性”和“更好的API”转向了“开发效率”,“表现和逻辑分离”,而后两者正是更大规模软件所需要的,这意味着前端这个岗位的职责开始发生变化,原来的前端只是负责切图、页面制作,而现在前端工程师更多涉及编程方面。
MVC模式诞生于1970年代,在前端领域,从Backbone起,借鉴这一模式的框架开始进入开发者视野,如徐飞在本专题中所展示的AngularJS便是从微软提出的MVVM中获取灵感的框架,国内工程师司徒正美更毫不掩饰自己对于微软架构的偏爱,连avalon这个名称都是从Vista的codename而来。Vue.js也是MVVM框架中的优秀之作,是由华人发起的、现在业内框架中为数不多的在国外技术社区颇有影响力的框架,它以轻量、语法简洁和充分利用JavaScript的特点,赢得了不少追求极简的开发者喜爱。
同样是希望提供更优秀的UI架构,Facebook的React提出的很晚,却有后来居上的趋势,凭借Facebook的影响力和React Native,它的每一个新闻都极有冲击力,它独有的Flux跟一般意义上的MV*框架有很大区别,JSX语法也使得它的UI和代码耦合性更强。其实React在各方面都可谓“叛逆”,而我了解到,在所有同时尝试过AngularJS和React的团队中,几乎一致地最终选择了React,其中原因令人深思。
在本期封面报道中,我们也分享了手机淘宝的前端库Mobile Library,与前面所述的框架不同,它是一组库,而非一个框架,Mobile Library更致力于解决移动开发中的点的问题,而把架构问题的答案留给框架去解决。
前端框架现在处于战国时期,而实际的框架选择,还是依赖于工程师对业务特征的判断。架构其实没有对错,唯有了解更多,才能更好地做出决策。
订阅咨询:
结合个人经历总结的前端入门方法,总结从零基础到具备前端基本技能的道路、学习方法、资料。由于能力有限,不能保证面面俱到,只是作为入门参考,面向初学者,让初学者少走弯路。
互联网的快速发展和激烈竞争,用户体验成为一个重要的关注点,导致专业前端工程师成为热门职业,各大公司对前端工程师的需求量都很大,要求也越来越高,优秀的前端工程师更是稀缺。个人感觉前端入门相对容易,但是也需要系统地认真学习,在打好基础后坚持学习,成为优秀前端工程师也只是时间问题。
学习任何知识最重要的都是兴趣,如果经过一段时间的学习感觉不喜欢,那可能强迫自己学习是很痛苦的,效果也不会好,毕竟这很可能就是以后很多年生存的技能。不过随着互联网行业的发展,前端必然是Web开发人员需要学习的知识,有时候是没有专业前端工程师一起合作的,所以即使不做专门的前端工程师,掌握基本的前端技能为工作带来方便。
以下是个人觉得入门阶段应该熟练掌握的基础技能:
HTML4,HTML5语法、标签、语义
CSS2.1,CSS3规范,与HTML结合实现各 种布局、效果
Ecma-262定义的javascript的语言核心,原生客户端javascript,DOM操作,HTML5新增功能
一个成熟的客户端javascript库,推荐jquery
一门服务器端语言:如果有服务器端开发经验,使用已经会的语言即可,如果没有服务器端开发经验,熟悉Java可以选择Servlet,不熟悉的可以选PHP,能实现简单登陆注册功能就足够支持前端开发了,后续可能需要继续学习,最基本要求是实现简单的功能模拟,
HTTP
在掌握以上基础技能之后,工作中遇到需要的技术也能快速学习。
基本开发工具
恰当的工具能有效提高学习效率,将重点放在知识本身,在出现问题时能快速定位并 解决问题,以下是个人觉得必备的前端开发工具:
文本编辑器:推荐Sublime Text,支持各种插件、主题、设置,使用方便
浏览器:推荐Google Chrome,更新快,对前端各种标准提供了非常好的支持
调试工具:推荐Chrome自带的Chrome develop tools,可以轻松查看DOM结构、样式,通过控制台输出调试信息,调试javascript,查看网络等
辅助工具:PhotoShop编辑图片、取色,fireworks量尺寸,AlloyDesigner对比尺寸,以及前面的到的Chrome develop tools,
FQ工具:lantern, 壁虎漫步
学习方法和学习目标
方法:
入门阶段反复阅读经典书籍的中文版,书籍中的每一个例子都动手实现并在浏览器中查看效果
在具备一定基础之后可以上网搜各种教程、demo,了解各种功能的实际用法和常见功能的实现方法
阅读HTML,CSS,Javascript标准全面完善知识点
阅读前端牛人的博客、文章提升对知识的理解
善用搜索引擎
目标:
熟记前面知识点部分的重要概念,结合学习经历得到自己的理解
熟悉常见功能的实现方法,如常见CSS布局,Tab控件等。
入门之路
以下是入门阶段不错的书籍和资料
HTML先看《HTML & CSS: Design and Build Websites》1-9章,然后《HTML5: The Missing Manual》1-4章。
CSS先看《CSS: The Missing Manual》,然后《CSS权威指南》
javascript先看《javascript高级程序设计》,然后《javascript权威指南》
HTTP看HTTP权威指南
在整个学习过程中HTML CSS JavaScript会有很多地方需要互相结合,实际工作中也是这样,一个简单的功能模块都需要三者结合才能实现。
动手是学习的重要组成部分,书籍重点讲解知识点,例子可能不是很充足,这就需要利用搜索引擎寻找一些简单教程,照着教程实现功能。以下是一些比较好的教程网址
可以搜索各大公司前端校招笔试面试题作为练习题或者他人总结的前端面试题还有个人总结的面试题(带参考答案)
http://code.tutsplus.com有各种各样的教程
MDN也有很多教程,更重要的是里面有详细的文档,需要查找某个功能时在Google搜索:xxx site:https://developer.mozilla.org
http://www5rocks.com/zh/也有很多优质教程
http://www.sitepoint.com/
http://alistapart.com/
原生javascript是需要重点掌握的技能,在掌握原生javascript的基础上推荐熟练掌握jQuery,在实际工作中用处很大,这方面的书籍有《Learning jQuery》或者去jQuery官网
建一个https://github.com/账号,保存平时学习中的各种代码和项目。
有了一定基础之后可以搭建一个个人博客,记录学习过程中遇到的问题和解决方法,方便自己查阅也为其他人提供了帮助。也可以去http://www.cnblogs.com/或者http://www.csdn.net/这样的网站注册账号,方便实用
经常实用Google搜索英文资料应该经常找到来自http://stackoverflow.com/的高质量答案,与到问题可以直接在这里搜索,如果有精力,注册一个账号为别人解答问题也能极大提高个人能力。
经典书籍熟读之后,可以打开前面必备基础技能部分的链接。认真读对应标准,全面掌握知识
继续提高
有了前面的基础之后,前端基本算是入门了,这时候可能每个人心中都有了一些学习方向,如果还是没有。 可以参考前面必备技能部分提到的那两个项目,从里面选一些进行发展学习。以下是一些不错的方面:
Grunt:前端自动化工具,提高工作效率
less css:优秀的CSS预处理器
bootstrap:优秀的CSS框架,对没有设计师的团队很不错,与less结合使用效果完美
requirejs:AMD规范的模块加载器,前端模块化趋势的必备工具
Node.js:JavaScript也可以做后台,前端工程师地位更上一步
AngularJS:做Single Page Application的好工具
移动端web开发:智能手机的普及让移动端的流量正在逐步赶超PC端
Javascript内存管理:SPA长期运行需要注意内存泄露的问题
High Performance JavaScript(Build Faster Web Application Interfaces)
Best Practices for Speeding Up Your Web Site:重要技能
一些个人经历
LingyuCoder的学习经历
上面的大神都总结得差不多了,我这里就胡扯一些吧
工具
chrome dev tools:前端开发调试利器,着重注意几个功能:
console(废话)
elements:元素样式调整,很常用
sources:代码中添加断点,单步调试,以及单步调试过程中查看内存中的对象
watch expression:通过表达式查看当前内存中的值
call stack:查看调用栈,开启async,可以看异步调用栈(这个非常有用,尤其是ajax调试的时候)
scope variables:作用域链上的变量,非常有用
network:抓包查看每个请求,非常重要,前后端联调必备
timeline:分析渲染、js执行等等各个阶段,性能优化利器
emulation:模拟移动端环境,mobile页面开发必备
一些插件:
liveload: 修改页面后自动刷新,不用按F5
dimensions:直接在页面上测量的利器
livestyle:css样式修改后自动起效果,不需要刷新,elements修改后也能同步到代码中
image tool:测量,取色
UC二维码:移动端调试扫码必备
pagespeed,YSlow:页面性能分析和优化插件
马克飞象:优秀的在线markdown编辑器,快速写周报,做记录
sublime text2:编码方便,插件多,速度快,性能好
emmet:提升html编码速度必备
sublimelinter + 各种语言的lint和hint:代码纠错
一些snippets:自动补全,提升开发效率
Intellij IDEA和WebStorm:集成开发环境,集成了各种功能,开发比sublime要方便,但会比较吃性能
Mark Men:测量、取色、标注利器,拿到视觉稿之后第一个打开的软件
GFW Fucker:我用红杏,可以的话买个虚拟服务器当梯子
iHosts:非常优秀的hosts管理软件,轻松修改hosts,开发调试必备
Charles:Mac 平台最好用的抓包分析工具
Rythem:AlloyTeam出品的代理抓包软件,非常轻量,安装简单,移动端(真机)开发调试很好用
Wunderlist:一个非常不错的Todo List,任务、需求多的时候管理起来很方便
技能
前端的技能其实除了JavaScript(包括NodeJS)、HTML、CSS以外,还有很多。其实前端的技能树很大,这里只能列一些我开发中见到的说一说
语言基础
JavaScript:
作用域链、闭包、运行时上下文、this
原型链、继承
NodeJS基础和常用API
CSS:
选择器
浏览器兼容性及常见的hack处理
CSS布局的方式和原理(盒子模型、BFC、IFC等等)
CSS 3,如animation、gradient、等等
HTML:
语义化标签
进阶
JavaScript:
异步控制(Promise、ES6 generator、Async)
模块化的开发方式(AMD、CMD、KMD等等)
JavaScript解释器的一些相关知识
异步IO实现
垃圾回收
事件队列
常用框架使用及其原理
jQuery:基于选择器的框架,但个人认为不能叫框架,应该算工具库,因为不具备模块加载机制,其中源码很适合阅读钻研
AngularJS/Avalon等MVVM框架:着重理解MVVM模式本身的理念和双向绑定的实现,如何解耦
underscore:优秀的工具库,方便的理解常用工具代码片段的实现
polymer/React: 组件化开发,面向未来,理解组件化开发的原理
CSS和HTML:主要是CSS3的特性和HTML5的特性,以及浏览器处理的流程和绘制原理
DOM树、CSSOM树、渲染树的构建流程及页面渲染的过程
解析HTML、CSS、JavaScript时造成的阻塞
HTML5相关
SVG及矢量图原理
Canvas开发及动画原理(帧动画)
Video和Audio
flex box布局方式
icon fonts的使用
常用NodeJs的package:
koa
express
underscore
async
gulp
grunt
connect
request
一些理念:
响应式Web
优雅降级、渐进增强
dont make me think
网页可用性、可访问性、其中的意义
SEO搜索引擎优化,了解搜索引擎的原理
SPA的好处和问题
性能优化:
减少请求数量(sprite、combo)
善用缓存(application cache、http缓存、CDN、localstorage、sessionstorage,备忘录模式)
减少选择器消耗(从右到左),减少DOM操作(DOM和JavaScript解释器的分离)
CSS的回流与重绘
项目
版本管理:首推Git,用过Git都不会想用SVN了
Git:本地版本管理的机制
SVN:远程中心的版本管理机制
自动化构建:主要就是less、模板、coffee等的预处理以及对代码压缩和合并
Gulp:基于流构建,速度快、模块质量好
Grunt:独立任务构建,速度慢,配置蛋疼,灵活性高
预处理和模板引擎
less:语法简单,但功能有限
jade、ejs、velocity等模板引擎,各有各的长处
coffee:python工程师最爱,我没用过
环境搭建:主要是将线上代码映射到本地,并在本地启动一个demo服务器,至于模拟数据的mock,见仁见智了
本地代理:ihosts
自动化测试:在业务较为稳定的情况下,可以通过自动化测试来减少测试的事件,但需求较多的时候,维护测试用例的成本会很高,可能用自动化测试会起到反效果
jasmine
mocha
生态系统
npm
bower
spm
搭建一个属于自己的博客
git pages
hexo
jekyll
未来
Web Componets:面向未来的组件化开发方式
HTML模板
Shadow DOM
Custom Elements
HTML Import
移动端Native开发:这也是需要了解的,以后前端工程师会经常地和webview打交道,也要了解native开发
其他
有些东西不是考敲码就能弄好的,我参与实习的时候感受到了很多,这些是我遇到的也是我感觉自己做的不好的地方
对于业务的思考:我个人这方面非常欠缺,所以放在最前面,在敲码前要多思考业务
交流和沟通能力:这个非常重要,前端同时需要与项目经理、产品、交互、后台打交道,沟通不善会导致很多无用功,延缓项目
知识管理、时间管理:input和output的平衡,output是最好的input。如何做好分享,参与社区,做好交流,作好记录
对新技术的渴望,以及敢于尝试
入门书
入门可以通过啃书,但书本上的东西很多都已经过时了,在啃书的同时,也要持续关注技术的新动态。这里推几本我觉着不错的书:
《JavaScript高级编程》:可以作为入门书籍,但同时也是高级书籍,可以快速吸收基础,等到提升再回来重新看
《JavaScript权威指南》:不太适合入门,但是必备,不理解的地方就去查阅一下,很有帮助
《编写可维护的JavaScript》和:
《Node.js开发指南》:不错的Nodejs入门书籍
《深入浅出Node.js》:Nodejs进阶书籍,必备
《JavaScript异步编程》:理解JS异步的编程理念
《JavaScript模式》和《JavaScript设计模式》:JavaScript的代码模式和设计模式,将开发思维转变到JavaScript,非常好的书
《JavaScript框架设计》:在用轮子同时,应当知道轮子是怎么转起来的,讲解很详细,从源码级别讲解框架的各个部分的实现,配合一个现有框架阅读,可以学到很多东西
《Dont make me think》:网页设计的理念,了解用户行为,非常不错
《CSS禅意花园》:经久不衰的一部著作,同样传递了网页设计中的理念以及设计中需要注意的问题
《高性能JavaScript》和《高性能HTML5》:强调性能的书,其中不只是性能优化,还有很多原理层面的东西值得学习
《HTML5 Canvas核心技术》:我正在读的一本书,对于canvas的使用,动画的实现,以及动画框架的开发都非常有帮助
《HTTP权威指南》:HTTP协议相关必备,前端开发调试的时候也会经常涉及到其中的知识
《响应式Web设计》:技术本身不难,重要的是响应式网页的设计理念,以及移动先行的思想
《JavaScript语言精粹》:老道的书,也是普及JavaScript的开发思维的一本好书,非常适合入门
一些不错的网站
github:没啥好说的,多阅读别人的源码,多上传自己的源码,向世界各地的大牛学习
codepen:感受前端之美的必选之地,里面有很多酷炫的效果和优秀的插件
echojs:快速了解js新资讯的网站
stackoverflow和segmentfault:基本上各种问题都能在上面获得解答
google web fundamentals:每篇文章都适合仔细阅读
static files:开放的CDN,很好用
iconfont:阿里的矢量图标库,非常不错,支持CDN而且支持项目
html5 rocks: 一个不错的网站,很多浏览器的新特性以及前沿的技术,都能在这上面找到文章
css tricks:如何活用CSS,以及了解CSS新特性,这里可以满足你
JavaScript 秘密花园 JavaScript初学必看,非常不错
w3cplus:一个前端学习的网站,里面的文章质量都挺不错的
node school:一个不错的node学习网站
learn git branch:一个git学习网站,交互很棒
前端乱炖:一个前端文章分享的社区,有很多优秀文章
正则表达式:一个正则表达式入门教程,非常值得一看
阮一峰的博客和张鑫旭的博客:快速了解某些知识的捷径,但是如果需要深挖,还需要其他的资源
各路大牛的博客:这个太多了,就不贴了,知乎上有很全的
各种规范的官方网站,不懂得时候读规范
历程
以前是做Java SSH的,半路出家做的前端,所以水平比较弱,遇到问题也比较多。基本上入门靠看书和W3C School上的教程,以及一些前端博客,如汤姆大叔的博客。以前也只是使用jQuery,原生js也没有太多的钻研,后来逐渐看了很多本动物书,比如老道的语言精粹等等。从这些书中学到了很多语言层面的知识。但这显然是不够的,所以我经常会去社区上看看大家在谈论什么,然后去看看相关的资料,感兴趣就会多找些资料看看,或者写一写demo。学CSS主要就是通过这种方式。后来开始更多的关注各路大牛的博客和一些比较深的书籍,以及关注一些新的知识和框架,并且不断地练手提交代码到github,这样也学到了很多知识。在实习的过程中,切身参与到实际项目开发之中,能学到很多在学校学不到的理念和思维,这点也有很大的帮助。不说了,我要去搬砖求offer了…
MrRaindrop的学习经历
应qiu神的邀请分享一下前端学习经验,这里对前端知识体系架构就不做总结了,各位大神们的总结已经相当到位了,我就贡献几个个人认为还比较有用的链接大家研究研究就好,然后主要分享一下我在前端学习过程中遇到的问题和总结的经验教训吧,如果能帮到想要入门的FE初学者(我就姑且假定为本文的读者受众类型了),让他们少走点弯路,每走一步都知道自己下一步的方向,这是最好了。各位大神的总结和分享详见qiu神整理的FE-learning。
先说下,前端这个东西每个人都可以有适合自己的学习方法,这篇仅作参考,写的有点乱,各位凑合看。
缘起
我是属于误打误撞进了前端,之前一直往做游戏的方向去来着,搞过游戏网站,玩过游戏引擎,比如unity,unreal这种商业引擎,捣鼓了几个游戏原型,不过自打研一进了实验室,直接就被导师派去写了js,导师给了我半个月时间让我写个基于百度地图api的数据展示页面,虽然这个时间还是相当宽裕的,不过之前没怎么写过js,也不会用地图api,于是我就一边啃着《Javascript权威指南》(犀牛书)一边参考实验室前人留下的“代码”,总算是把功能都写出来了。那个页面算我的js入门作了,也是我前端学习路线的开始。
现在想来,虽然指派了去做前端,但是一直做下去并做好还是得靠兴趣维持,当然前端是一个趣味性十足的技术领域,而且社区每天都很“热闹”。
项目,下一个项目
我个人认为前端的学习,初学阶段你可以完全脱离开书本,以项目驱动。虽然我个人是从犀牛书开始啃的,不过如果你没有充足的时间,或者觉得啃大部头乏而无味的话,还是别像我这样。当然了如果决定啃书最好是把书里的例子都跟着敲一遍的。我上研之前没接触过js,4月份还没开学呢就被直接被导师甩了个百度地图api的项目到脸上,接着就是各种ERP,地图数据展示,虽然换着花样来一点不重样,不过基本上都是前端的活,SSH和android开发也打过酱油,整个实验室就我一个人写前端敢信?富客户端SPA时代的后端就是一个restful接口,代码量基本都在前端啊,写的我一个人怎一个爽字了得…期间跟着导师感受了一把创业,每天从7点搞到晚上10点,也算是经历了一段快速成长期。
掌握一门技术先掌握它的大体框架,想一个能实现的点子,做一个能跑就行的demo,再去完善它的细节,等到demo完成了,对这门技术有了一个感性的认识,再去啃书,收获会大很多。我从开始原生js写到jquery,再到extjs,再到angularjs,从导师指定技术,到自己做技术选型,一个项目接着一个项目的练,就跟打怪升级似的。当然没有项目就去自己创造项目,动手实现自己的想法是件有乐趣和成就感的事。
收集癖和知识管理
前端学习有个特点,很多东西都很零碎,分散,需要你自己去整理、归纳和总结。在微博、知乎上follow了众多的大神,你不仅仅是为了听八卦,大神们的只言片语有时候留下的是无尽的余味,很有可能一个不经意提到的一个词就成为你下一个学习的目标。收集这些信息,善用google,提问,思考。就像游戏里的收集要素,前端学习也是充满搜集要素的一个“游戏”,只不过你需要一个知识管理工具来充当物品栏和仓库,我所知道的大牛们无一不是知识管理工具的重度使用者。以前用的oneNote,那时候还没绑定到云存储,现在基本上用evernote,笔记已经累计到1200+篇。书签一直打算用delicious,因为它是基于tag管理的,但一直没用起来。当然重点不在于这些工具,但是趁手的工具可以提高你的学习效率。最关键当然是随时保持旺盛的学习欲望,你的目标是了解有关前端的一切(当然不是所有都要掌握,因为毕竟你的精力有限,而且现实的说这也不太可能)。
跟对神
这个可控性貌似不大…跟对老大这个就不多说了,一定程度要看造化。不过话说回来,多跟身边的高手交流是王道,这个高手不一定要多高,但是一定要对技术有热情。研一的时候热情高涨,每天7点进实验室门,然后发现有个家伙居然比我还早到。后来发现这家伙上午就走了,下午又来了,而且导师对此习以为常,原来这家伙晚上不睡觉通宵写代码,上午才跑回去睡。后来经常和这位神讨论问题,每次感觉经验值蹭蹭蹭的往上涨。然后实验室还有一位神,被前面这位通宵神形容为“只能望其项背,一直在追赶,从来没赶上”,两位神的特点都是什么都了解一点,所以什么都能跟你讨论得起来,我有段时间做了个读书计划,从c/c++到vc/mfc再到unix网络编程,最后一路看到java核心技术和MSDN上的C#编程指南,和神们也能扯得很high了。
总之就是这两位神把我拉进了坑,或者说从一个坑跳进另一坑,虽然两位神都不是搞前端的,不过技术之间总有相通之处。
读书
读书,多读书,读好书。在刘未鹏的博客里看到过一个公式,你第一个月的工资等于之前买过(读过)的技术书价格总和(这里说的技术书指那些经典的公认的好书)。讨论这个公式的正确性似乎没什么意义,然而它的合理性是毋庸置疑的,那就是多读经典技术书。最极端的一个例子,google的徐宥在我的大学里面说他扫荡了图书馆的整个TP312书架…对于前端的经典书籍,后面列了一个我收集的前端书列(如果有遗漏的前端经典好书,还请留言告诉我),有条件可以尝试刷一遍这些书,我也是在找完整的时间去啃完它们。之前说的,前端知识点松散,收集零散的知识点,从博客里快速学习等,这些只是前端学习的一个方面,如果你要想深入理解一个知识体系,了解它的来龙去脉,对它建立系统认识,读经典书还是必不可少的。
我从最开始啃完犀牛书,然后接着去看了其他一些和前端干系不大的经典技术书,再后来通过实验室的项目和自己弄的一些小项目逐渐对前端领域比较上路以后,又看了《Javascript模式》、《Javascript设计模式》、《编写可维护的Javascript》,后来了解到node并开始用node搞点小玩意儿,又看了本《NodeJS up and run》和《Mongodb权威指南》,不过感觉前者略坑。那会儿朴灵那本深入浅出(晒书么么哒)还没出,后来出了就去图书馆借来看完,这么看下来感觉还不错,不过感觉看的还是偏少了,还需要继续刷(参照上面的书列)。
前端的定位
前端的定位关乎到你需要吸收什么样的知识和技能,决定在技术世界里你对什么需要格外敏感。如果你认为前端仅仅停留在切页面,实现交互和视觉的要求,那你对前端的认识还停留在初级阶段。阿里终面的时候我问了考官这么个问题:前端技术日新月异,范围越扩越宽,标准越来越丰富,似乎任何一个触角都能伸出很远。怎么给前端一个合适的定位?考官给我分析了半天,然后总结成一句话,就是用户和网站的联结者,用户体验的创造者(原话不是这样,但大体是这个意思)。也就是说前端的终极目标其实就是创造用户体验,提升用户体验,以用户体验为中心。不管你是从交互设计上下手,还是从性能优化出发,或者改进工作流提升工作流效率,最终都是为了创造和提升用户体验,最终都要体现到用户体验这一点上来。我认为这个总结非常有道理(当然“用户体验”这个词太宽泛了,并且不仅仅是前端工程师的范畴,比如开发后台的时候对一个数据处理过程进行优化,提升了整体性能,这也是对用户体验的一个提升)。
现在的前端工程师做到一定阶段不可避免会接触到很多比切页面、实现视觉要求、实现交互等更深入的问题,比如前端自动化、图像编程、性能优化等等,再往后推一点就是PHP/JSP/ASP/nodeJs,过去后端模板一般属于后端的范畴,现在随着前端架构的演进,可能会让你去写后端模板的代码,需要用到后端语言(PHP/Java/C#等),这就是所谓大前端(然而这与前端的定位并不是相背离的,大前端处理的依然是与用户接触的部分,仍然是对用户体验的优化)。可能最常见或者被谈论最多的就是node,其实这几种技术选型都可以,bat三家据说百度用PHP比较多,阿里用node比较多。
玉伯在他的博客里提过所谓全端是横向的,全栈是纵向的。全端即所有的终端说白了都是前端,因为都关乎到用户体验,直接和用户接触。适应多终端的开发,要求你在web前端的基础上,可能还要去扩展android开发和ios开发的知识,好在由于hybrid开发方式的流行,对使用native语言开发的技能会要求的不那么深入。
全栈可以说是最适合初创公司的一种发展类型,广义上认为是从前端干到后端,从开发干到运维,这种就不说了,一般人应该不会想要去往这个方向发展,想要成为这种意义上的full-stack dev的,可能用不着来看我这篇文章了;而狭义上的全栈特指使用js语言从前端写到架设在nodeJs上的后端,前后端统一语言,统一编程模型,甚至公用同一套代码。更多了解全栈开发可以看看玉伯这篇说说全栈工程师。
以上是我对前端以及衍生出来的技术路线的一些浅薄理解,学习一个领域掌握它的整体上的走向和趋势还是挺重要的。另外如果想要对前端学习方向、职业成长路径有一个整体的认识,推荐看看拔赤总结的这篇前端开发十日谈。
最后
贡献几个对前端学习、面试有帮助的链接:
前端面试问题合集(Front-end-Developer-Interview-Questions)(https://github.com/darcyclarke/Front-end-Developer-Interview-Questions)
前端技能汇总(JacksonTian)(https://github.com/JacksonTian/fks)
另一张前端技能汇总图(http://www.f2er.info/)
前端那点事儿(书列)(http://book.douban.com/doulist/13701898/)
byr论坛yiyizym的建议
与grunt相比,学习gulp会比较简单
做SPA的话,推荐backbone.js和 backbone.marionette.js
FQ不用折腾,花十块钱买一个月的 红杏。
把基础打扎实了再学这些都没问题。
html 没什么好说的,有空学学html5。
css 尽量看文档 ,因为很多中文资料都各执一辞,看多了反而会糊涂。
有个网站可以查找html/css标签、属性在各个浏览器中的支持情况,挺好用的。
javascript 就看 javascript高级程序设计 。不过这么厚的书看过就会忘。对javascript核心概念的讲解:对象/原型链/ 构造函数/执行上下文/作用域链/闭包/this,这里有篇不错的文章。
有闲情可以看看 ecmascript 6,计划明年6月就发布啦。阮一峰的网站有入门资料。
jquery 有很多 API,这个网站可以方便查到。有时间弄清楚jquery deferred 的用法。
多给 sublimetext 装插件,比如说检查代码错误的
*请认真填写需求信息,我们会在24小时内与您取得联系。