编程知识体系(Java为主)

1.	平台(按程序运行的地方分类)
			1.1 桌面平台
					1.1.1 Linux       Linux是著名的黑客Linus在大学开发的开源操作系统,建立在早期的Unix内核基础上。由于它优良的特性及开源的管理方式,吸引了全球大批的开发者使用。Linux一般是用于服务器,因为它作为一个操作系统来说本身极其优秀,适合在后台作为服务器系统持续稳定地运行。 Linux上的编程是比较基础的,考察你对命令的掌握情况,不过对于新手的话,还是有一定难度的。虽然号称掌握了Linux就说明是个大牛,但是至少这种言论是片面的。不过学习Linux确实能提高对计算机的理解能力,这方面比较好的书有一个叫[《鸟哥的Linux私房菜》](http://vbird.dic.ksu.edu.tw),专门为学Linux写的好多书,业界评价很高。
					1.1.2 Windows     Windows是使用最为广泛的操作系统,粗略分类也可以为分个人用户版本(专业版,基本版,家庭版等)和服务器版本(Windows Server)。不过由于Win10的推出,Windows现在实行全平台统一内核的方式管理,又新增了嵌入式版本的Windows。 Windows上的编程是最基本的,因为绝大多数人都在用Windows。从QQ到英雄联盟,从快播到书店管理系统,从ATM到银行交易,基本都是在用Windows(当然,很大一部分后台都是Linux。Windows和Linux是最重要的操作系统)。Windows下有很多的编程框架,大致可以分为两种:一种是微软出品的(限于Windows就是微软的)以.NET为代表的编程框架,另一种是其他第三方的平台。
							1.1.2.1 .NET平台   
											以前的.NET只能运行在装有特定版本的Windows操作系统上。.NET伴随着Windows的更新也一直从1.0升级到如今的4.5.以.NET为母体,如今微软将.NET开源了,苹果和linux都可以用了。通过mono,可以在各个操作系统上调用.NET。不过,真正拿.NET主力开发的,恐怕大多数还是windows吧。有MFC(C++,非常古老)、WinForm(C#,主流)、WPF(C#)等编程框架。
									  			-- MFC:很古老的一种编程框架,用C++写的,有控件,有事件,有服务,很完备。缺点就是东西太古老,不好用,现在各高校仍然有课程在用(比如图像处理等),但是做这东西事倍功半,不推荐;
									  			-- WinForm:非常主流的编程框架,很多软件都是用这个框架做的。用C#作为编程语言,运行很稳定,好上手,开发成本低。
									  			-- WPF:微软新推出的编程架构,界面很绚丽,用XAML+C#作为开发语言,优秀的MVC架构,是未来的趋势。可惜发布时伴随着Vista系统的失利,加上其本身庞大的资源消耗,所以基本上没有多少人在用。不过它的思想是先进的,一路走来赶上win8和win10(商店应用)都是在用的。
							1.1.2.2 非.NET平台(非.NET平台的框架一般都可以跨平台使用。)
											Qt:诺基亚出品的编程框架,用C++开发。有自己的界面库,支持跨平台。在前些年很火,不过现在不流行了。
											Java平台:Java本身是个语言,但是基于Java有很多开源的框架和平台,如Swing等,都提供自己的控件。不过运行效率太低,因为Java本身就是个虚拟机。目前随着硬件平台效率的提高,已经不是问题。绝大多数服务器后台都运行的是java。
											还有其他的平台,在Windows上使用率基本很少。

					1.1.3 Mac          Mac是苹果专用操作系统,苹果系统很大一部分软件都是用Mac下的软件开发工具做的。Mac下的开发框架叫Cocoa,iPhone下的叫CocoaTouch(多了个touch)。当然,Mac下的软件也可以用上面的跨平台的框架来开发。这方面不做过多介绍。
			1.2 移动平台
					1.2.1 安卓Android     安卓是一个开源的操作系统,在2008年首次推出,之后由Google收购,到现在是最火的操作系统。Android的内核是基于Linux的,由于其开源的特性,所以很好定制,使得Android在短短几年内迅速占据移动操作系统的三分之二。 Android开发是基于Android提供的SDK(软件开发包)进行的。主要的开发语言是Java(用来写后台逻辑)和XML(用来写界面)。 Android开发有一些书,这方面比较有代表性的是[《疯狂Android讲义》](疯狂Android讲义_百度百科). 早期(2013年前)Android的开发环境是Eclipse,配合Android的SDK、模拟器等,后来Google推出了整套的Android Studio进行安卓开发,效率非常高,现在基本都在采用Android Studio进行开发。
					1.2.2 iOS            iOS是苹果iPhone以及iPad上的操作系统,只能在苹果机开发,只能用在苹果产品上。iOS是一个及其优秀的移动操作系统,安卓在发展的早起,很多都是借鉴了iOS的开发经验做的(当然,后来就互相抄袭了)。iOS开发使用苹果出品的XCode软件进行,这个软件还可以用来开发Mac下的软件。XCode是一整套的开发工具的集合,可以设计界面、进行调试、上传到应用商店等。iOS开发使用Objective-C编程语言和Swift编程语言,后者是苹果在2013年6月推出的新一代编程语言,集合了当下所有语言的优良特性,大有取代Objective-C的意思。所以Swift一直很火。
					1.2.3 Windows Phone  Windows Phone是微软出品的手机操作系统,现在已升级到了Windows Mobile 10.它的开发环境是Visual Studio,用C#进行开发,基本就是windows下开发软件(WPF)的模型是一致的。虽然我在大学做的最多的就是WP(因为上手快,微软的教程给力),但是它的市场占有率多年来一直升不上去。希望得益于Windows10的爆发,能给点力。
			1.3 Web平台   Web平台的编程基本是基于服务器的编程。这方面分为网页(前端)和服务(后端)。
					1.3.1 前端
									前端就是我们所看到的网页。比如[百度](百度一下,你就知道)的首页很朴素,[QQ浏览器](QQ浏览器9官方网站 - 浏览器_浏览器下载_微信电脑版)的首页就很酷炫,等等。这些是用什么实现的? 实现语言会在后面再介绍。概括来说
									- html是所有网页语言的鼻祖,网页都得用它;html5是最新的html的版本,支持众多的界面特性。QQ浏览器的首页就是用html5做的。
									- CSS就是一个样式选择器,那些字体、颜色等都是用的CSS来控制的;
									- javascript是网页脚本(它可和java没有半点关系),是用来写简单的后台逻辑交互和前端界面交互的;
					1.3.2 后端
									后端是用户看不到的,小到注册一个用户,大到处理几十万的数据,都是后端来做。这方面典型的开发语言是C++、Java、php和python、ASP等。 后端是基于服务器进行的开发。基本上在软件工程中处于很顶级的地位。这方面用Java开发是业界很流行的,因为Java没有C++那么难写,本身又有很多框架,比如Spring等,非常适合写后台的数据交互。
2.	编程语言
			主流语言介绍:
					C:C是基础性语言。它不是面向对象的,是面向过程的语言。C诞生于1972年,其优良的特性很高的效率使它长期占据编程语言排行榜第一名。C可被广泛用于桌面、服务器、嵌入式开发中。
					C++:C++可以看作是对C的扩展,增加了面向对象的机制。什么是面向对象?简单来说就是,所有的要操作的物体都是对象,比如一个人是一个对象,一条狗也是一个对象。接着就可以在对象上定义操作,比如人走路是一个函数,人吃饭也是一个函数。这样设计的好处就是可以封装起来多次使用,也可以进行继承。保留总体的相似性,又不失个体的个性。比如张三和李四都是继承人这个类,但是张三吃饭要3分钟,李四就要10分钟,这就是个性。面向对象设计的思想可以在[这里](什么是面向对象编程思想? - Java - 知乎)找到进一步的阐述,这基本是所有现代主流语言的基础。会面向对象,所有的语言学起来特别快。 C++可以被广泛用于桌面端、服务器和嵌入式的编程,使用程度非常广泛,但是由于它的语法很难(主要是指针操作)、没有现成的SDK进行封装,所以并不是很适合用来写移动端的应用。 可以认为,C++什么都能干,它太基础了,效率是高级语言中最高的,但是术业有专攻,它并不是都适合写各个平台的应用。
					C#:C#是微软是2000年推出的在.NET平台上的编程语言,没有指针,集合了大多数面向对象语言的精髓,好学好用,效率也不低,是主流的windows桌面应用和部分windows服务器后台的编程语言。
					Java:Java和C#类似,差不多简单。但是Java是跨平台的,可以写桌面、移动(安卓)和后台服务器,用处非常广泛,框架也最多。
					object-C:Object-C通常写作Objective-C或者Obj-C或OC,是根据C语言所衍生出来的语言,继承了C语言的特性,是扩充C的面向对象编程语言。它主要使用于Mac OS X和GNUstep这两个使用OpenStep标准的系统,而在NeXTSTEP和OpenStep中它更是基本语言。Objective-C可以在gcc运作的系统写和编译,因为gcc含Objective-C的编译器。在MAC OS X系统下,运用苹果提供的SDK等开发工具包,可以用来做IOS开发,开发后的程序在Iphone虚拟机中进行测试,运用的主要语言为Object-c。与C#类似。Object-c仅支持单一父类继承,不支持多重继承。
					Swift:Swift 是一种支持多编程范式和编译式的开源编程语言,苹果于2014年WWDC(苹果开发者大会)发布,用于开发 iOS,OS X 和 watchOS 应用程序。Swift 结合了 C 和 Objective-C 的优点并且不受 C 兼容性的限制。Swift 在 Mac OS 和 iOS 平台可以和 Object-C 使用相同的运行环境。
					Python:Python是一种脚本语言,执行效率很低,但是语法异常简单,c++写几十行的东西,它几行就可以搞定。Python理论上可以用在任何地方,但是基本上常用于后台服务器和一部分科学研究。作为脚本语言,Python是优秀的。
					PHP:php是用来开发服务器后端的语言,非常好学好用,语法很简单。
					ASP.NET:http://ASP.NEThttp://ASP.NET是微软出的写服务器后端与部分前端的框架。用C#和html编程。
			主流IDE介绍:	
					Visual Studio:微软出品的宇宙最强编程工具,没有之一。 VS可以被广泛用于桌面、服务器和移动端的编程,最新的VS也可以用来做安卓和iOS,其性能之彪悍功能之强大是宇宙第一。写C、C++、C#的天然平台,也可以用来写Python、html等。
					Eclipse:Eclipse是免费开源的软件。它是一个软件平台,配合丰富的插件,可以用来写Java、php、C++、Python等,用来写桌面、服务器应用。
					intellji IDEA:Intellij IDEA是捷克Jetbrains公司出品的收费的编程软件。是Eclipse的替代品。可以把它叫做java界的Visual studio。用来开发基于Java的任何应用。Android Studio就是基于这个软件的框架进行开发的。
					Android Studio:开发安卓的集成工具。
					XCode:XCode是用来开发iOS和Mac下的软件的,也就是说它只能运行在苹果电脑上。XCode可以编写的语言主要有C/C++,Objective-C以及swift等。其他XCode个人感觉并不是太优秀,有很多不如人意的地方,不过没办法,你想做苹果的东西只能用这个。JetBrains公司出了一个Mac下写苹果软件的IDE叫做AppCode,我也用过,体验还可以。不过话说回来,有官方的东西就有官方的支持,用第三方的难免会出现不必要的问题,最多也就当个备用吧。
					PyCharm:PyCharm也是JetBrains公司出的专门用来写Python的IDE。它基本可以说是Python界的Visual Studio,想要的功能基本都有。更新也很频繁,目前我一直在用它。	
	算法与数据结构		
	设计模式(高效简洁的编码/UML建模)
					创建型模式
							1、抽象工厂模式(Abstract factory pattern): 提供一个接口, 用于创建相关或依赖对象的家族, 而不需要指定具体类.
							2、生成器模式(Builder pattern): 使用生成器模式封装一个产品的构造过程, 并允许按步骤构造. 将一个复杂对象的构建与它的表示分离, 使得同样的构建过程可以创建不同的表示.
							3、工厂模式(factory method pattern): 定义了一个创建对象的接口, 但由子类决定要实例化的类是哪一个. 工厂方法让类把实例化推迟到子类.
							4、原型模式(prototype pattern): 当创建给定类的实例过程很昂贵或很复杂时, 就使用原形模式.
							5、单例了模式(Singleton pattern): 确保一个类只有一个实例, 并提供全局访问点.
							6、多例模式(Multition pattern): 在一个解决方案中结合两个或多个模式, 以解决一般或重复发生的问题.
					结构型模式
							1、适配器模式(Adapter pattern): 将一个类的接口, 转换成客户期望的另一个接口. 适配器让原本接口不兼容的类可以合作无间. 对象适配器使用组合, 类适配器使用多重继承.
							2、桥接模式(Bridge pattern): 使用桥接模式通过将实现和抽象放在两个不同的类层次中而使它们可以独立改变.
							3、组合模式(composite pattern): 允许你将对象组合成树形结构来表现"整体/部分"层次结构. 组合能让客户以一致的方式处理个别对象以及对象组合.
							4、装饰者模式(decorator pattern): 动态地将责任附加到对象上, 若要扩展功能, 装饰者提供了比继承更有弹性的替代方案.
							5、外观模式(facade pattern): 提供了一个统一的接口, 用来访问子系统中的一群接口. 外观定义了一个高层接口, 让子系统更容易使用.
							6、亨元模式(Flyweight Pattern): 如想让某个类的一个实例能用来提供许多"虚拟实例", 就使用蝇量模式.
							7、代理模式(Proxy pattern): 为另一个对象提供一个替身或占位符以控制对这个对象的访问.
					行为型模式
							1、责任链模式(Chain of responsibility pattern): 通过责任链模式, 你可以为某个请求创建一个对象链. 每个对象依序检查此请求并对其进行处理或者将它传给链中的下一个对象.
							2、命令模式(Command pattern): 将"请求"封闭成对象, 以便使用不同的请求,队列或者日志来参数化其他对象. 命令模式也支持可撤销的操作.
							3、解释器模式(Interpreter pattern): 使用解释器模式为语言创建解释器.
							4、迭代器模式(iterator pattern): 提供一种方法顺序访问一个聚合对象中的各个元素, 而又不暴露其内部的表示.
							5、中介者模式(Mediator pattern) : 使用中介者模式来集中相关对象之间复杂的沟通和控制方式.
							6、备忘录模式(Memento pattern): 当你需要让对象返回之前的状态时(例如, 你的用户请求"撤销"), 你使用备忘录模式.
							7、观察者模式(observer pattern): 在对象之间定义一对多的依赖, 这样一来, 当一个对象改变状态, 依赖它的对象都会收到通知, 并自动更新.
							8、状态模式(State pattern): 允许对象在内部状态改变时改变它的行为, 对象看起来好象改了它的类.
							9、策略模式(strategy pattern): 定义了算法族, 分别封闭起来, 让它们之间可以互相替换, 此模式让算法的变化独立于使用算法的客户.
							10、模板方法模式(Template pattern): 在一个方法中定义一个算法的骨架, 而将一些步骤延迟到子类中. 模板方法使得子类可以在不改变算法结构的情况下, 重新定义算法中的某些步骤.
							11、访问者模式(visitor pattern): 当你想要为一个对象的组合增加新的能力, 且封装并不重要时, 就使用访问者模式.
3.	前端
		Html+CSS(Font Awesome...)
		JavaScript
				客户端:jQuery、Prototype、dojo、AngularJS、Vue.js、React.js...
				服务端:Node.js...
		Ajax+XML+JSON+YAML
		web前端控件
				UI框架:jQueryUI、JQueryEasyUI、Bootstrap、DWZ_JUI、Sencha、Extjs...
				图表插件:FusionCharts、Highcharts、D3、rGraph、华为华表...
				树插件:Ztree、Treeview、jsTree...
				在线编辑器插件:ckeditor、KindEditor、ueditor、WPS、Foxit、markdown...
				地图插件:百度地图插件、高德地图插件、谷歌地图插件...
				播放器插件:Flex、Speakker...
				Ajax框架:DWR...
				文件上传插件:Uploadify、Plupload...
				时间插件:Minical...
				打印插件:Lodop... 
				语音电话控件:华为控件、avaya控件...
				支付接口:支付宝、腾讯钱包、百度钱包...
4.	数据库
			SQL
							Mysql
							Oracle
							Sql Server2008
			NoSQL
							列存储数据库:Hbase、Cassandra、Hypertable...
							文档存储数据库:MongDB、CouchDB...
							key-value存储数据库:Redis、Memcached、ttserver...
							图存储数据库:Neo4J、FlockDB...
							对象存储数据库:db4o、Versant ...
							xml数据库 :Berkeley DB XML、BaseX...
			大数据处理框架 
							Storm
							Spark
							Hadoop
			Ftp服务器:
							windows:FileZilla_Server
						    Linux:vsftpd
5.	后端
		服务器技术:
					Web服务器(优化处理http协议):Apache、Nginx、IIS...
					应用服务器(支持http协议):Tomcat、Jetty、Weblogic、Websphere、Jboss...
		JavaEE平台(组件构成):
							分布式事务:JTA、JTS
							JavaEE容器:EJB
							其他:JDBC、JNDI、RMI、Java IDL/CORBA 、Servlet、
								JSP、XML、JMS、JavaMail、JAF
		web后端框架(在JavaEE基础上形成):
							mvc框架 :Struts2、SpringS(SpringMVC)、Tapestry...
							依赖注入框架 :Spring(七大模块)
													核心容器(Spring core):核心容器提供Spring框架的基本功能。Spring以bean的方式组织和管理Java应用中的各个组件及其关系。Spring使用BeanFactory来产生和管理Bean,它是工厂模式的实现。BeanFactory使用控制反转(IoC)模式将应用的配置和依赖性规范与实际的应用程序代码分开。BeanFactory使用依赖注入的方式提供给组件依赖。
													Spring上下文(Spring context):Spring上下文是一个配置文件,向Spring框架提供上下文信息。Spring上下文包括企业服务,如JNDI、EJB、电子邮件、国际化、校验和调度功能。
													Spring面向切面编程(Spring AOP):通过配置管理特性,Spring AOP 模块直接将面向方面的编程功能集成到了 Spring框架中。所以,可以很容易地使 Spring框架管理的任何对象支持 AOP。Spring AOP 模块为基于 Spring 的应用程序中的对象提供了事务管理服务。通过使用 Spring AOP,不用依赖 EJB 组件,就可以将声明性事务管理集成到应用程序中。
													Spring DAO模块:DAO模式主要目的是将持久层相关问题与一般的的业务规则和工作流隔离开来。Spring 中的DAO提供一致的方式访问数据库,不管采用何种持久化技术,Spring都提供一直的编程模型。Spring还对不同的持久层技术提供一致的DAO方式的异常层次结构。	
													Spring ORM模块:Spring 与所有的主要的ORM映射框架都集成的很好,包括Hibernate、JDO实现、TopLink和IBatis SQL Map等。Spring为所有的这些框架提供了模板之类的辅助类,达成了一致的编程风格。	
													Spring Web模块:Web上下文模块建立在应用程序上下文模块之上,为基于Web的应用程序提供了上下文。Web层使用Web层框架,可选的,可以是Spring自己的MVC框架,或者提供的Web框架,如Struts、Webwork、tapestry和jsf。
													Spring MVC框架(Spring WebMVC):MVC框架是一个全功能的构建Web应用程序的MVC实现。通过策略接口,MVC框架变成为高度可配置的。Spring的MVC框架提供清晰的角色划分:控制器、验证器、命令对象、表单对象和模型对象、分发器、处理器映射和视图解析器。Spring支持多种视图技术。
										 SpringBoot(基于Spring4的条件注册的一套快速开发整合包)
										 Gravity
										 DNA
							持久层框架:
										JPA接口实现: 
													Hibernate
													Spring Data
														Spring-data-jpa
														Spring-data-template
														Spring-data-mongodb
														Spring-data-redis
										非JPA接口实现:
													Mybatis...
							远程调用框架:
										阿里hsf、dubbo(开源)、zokeerper
										Facebook的thrift(开源)
										Google grpc(开源)
										Twitter的finagle						
		组件类库:
							测试单元框架:Junit
							缓存框架:
									multicache4j(用于为Java集成各种cache组件,远程本地缓存混合模式\远程缓存模式\本地缓存模式)
									remote cache: 
												Memcache(开源项目)\Memcached(守护线程)
												Memcachedb(基于Memcached,额外提供了数据持久化存储)
												redis
												coherence...
									local cache:
												cache4j
												ehcache... 
												
							数据库连接池
											开源连接池:Dbcp、C3P0、Proxool、Druid(阿里)...
											中间件连接池:weblogic的连接池、websphere的连接池
							调度框架:Quartz....
							工作流引擎:jBpm、Activiti...
							模板引擎:FreeMarker 、Groovy 、Thymeleaf 、Velocity 、JSP ...
							日志门面框架:slf4j 
							日志框架:Log4j...
							WebService(SOAP、WSDL、UDDI):uddi4j、WSIL4J、Restful(http)、CXF...
							HTML解析:NekoHTML、JTidy...
							XML解析:JDOM、Dom4j..
							Excel解析:Apache POI...
							PDF解析:iText...
							收索引擎框架:
											全文收索: Lucene、Solr...
											图片收索: Lire...
							语音合成识别:百度语音、科大讯飞...
							短信平台接入:阿里短信平台...
							人脸识别 :科大讯飞...
							验证码框架:jcaptcha...
							权限管理:Apache shiro、Spring Security...
6.	移动APP
							原生模式Andriod(Androidstudio开发工具是主流)
							原生模式IOS(Xcode开发工具是主流)
							纯页面模式HTML5+JS模式App
							混合模式(原生+HTML5)   主流模式,像淘宝大型app
7.	持续环境搭建
							集群和分布式部署:
											Ganglia:分布式监控系统
											fleet:分布式init系统
							版本控制系统:
											CVS:版本控制系统鼻祖,基本不再使用
											SVN:
													SVN是Subversion的简称,是一个开放源代码的版本控制系统,Subversion搭建私服
													TortoiseSVN 是 Subversion 版本控制系统的一个免费开源客户端
													EclipseSVN插件,安装在Eclipse的插件,连接Subversion 服务器
											Git:
													git 是一种版本控制系统,是一个命令,是一种工具 
													gitlib 是用于实现git功能的开发库 
													github 是一个基于git实现的在线代码仓库,包含一个网站界面,向互联网开放 
													TortoiseGit是一个开放的,为的git版本控制系统的源客户端
													gitlab 是一个基于git实现的在线代码仓库软件,你可以用gitlab自己搭建一个类似于github一样的系统,一般用于在企业、学校等内部网络搭建git私服
													EclipseGit插件,安装在Eclipse的插件,连接git服务器
							持续集成系统:Jenkins、Hudson...
							代码质量管理平台:Sonar 
							构建工具:Ant、Maven、Gradle
							Maven私服:
										Sonatype的Nexus
										Apache基金会的Archiva
										JFrog的Artifactory
							开发工具:Eclipse(svn、plantUML...)、MyEclipse、IDEA...
							创建环境技术:虚拟机、Docker...
							项目管理平台:Redmine、Trac...
							API服务平台:Swagger、SosoApi...
							Web服务器性能/压力测试工具/负载均衡器:
												  http_load:程序非常小,解压后也不到100K
												  webbench:是Linux下的一个网站压力测试工具,最多可以模拟3万个并发连接去测试网站的负载能力
												  ab:ab是apache自带的一款功能强大的测试工具
												  Siege:一款开源的压力测试工具,可以根据配置对一个WEB站点进行多用户的并发访问,记录每个用户所有请求过程的相应时间,并在一定数量的并发访问下重复进行。
												  squid(前端缓存),nginx(负载),nodejs(没错它也可以,自己写点代码就能实现高性能的负载均衡器):常用的负载均衡器
												  Piwik:开源网站访问量统计系统
												  ClickHeat:开源的网站点击情况热力图
												  HAProxy:高性能TCP /HTTP负载均衡器
												  ElasticSearch:搜索引擎基于Lucene
												  Page Speed SDK和YSLOW
												  HAR Viewer:HAR分析工具
												  protractor:E2E(end to end)自动化测试工具
8. 其他知识
							OGRE:大名鼎鼎的3D图形渲染引擎
							OpenVDB:梦工厂C++的特效库,开源的
							cocos2d:跨平台2D游戏引擎
							Unity3D:跨平台3D游戏引擎,很火的哦

你可能感兴趣的:(0,前言)