一 微软基础类库(Microsoft Foundation Classes,简称MFC),是一个微软公司提供的类库。以C++类的形式封装了Windows API,并且包含一个应用程序框架,以减少应用程序开发人员的工作量。其中包含的类包含大量Windows句柄封装类和很多Windows的内建控件和组件的封装类。
VC++是微软公司开发的c/c++的集成开发环境,所谓集成开发环境就是说利用它可以编辑、编译、调试,而不是使用多种工具轮换操作,灵活性较大。vc也指它的内部编译器,集成开发环境必须有一个编译器内核,例如DevC++其中一个编译器内核就是gcc。MFC除了是一个类库以外,还是一个框架,在vc++里新建一个MFC的工程,开发环境会自动帮你产生许多文件,同时它使用了mfcxx.dll。xx是版本,它封装了mfc内核,所以你在你的代码看不到原本的SDK编程中的消息循环等等东西,因为MFC框架帮你封装好了,这样你就可以专心的考虑你程序的逻辑,而不是这些每次编程都要重复的东西,但由于是通用框架,没有最好的针对性,当然也就丧失了一些灵活性和效率。但是MFC的封装很浅,所以效率上损失不大。
MFC中最重要的封装是对Win32 API的封装,因此,理解Windows object和MFC object之间的关系是理解MFC的关键之一。所谓Windows object(Windows对象)是win32下用句柄表示的Windows操作系统对象,所谓MFC object(MFC对象)是一个C++类的实例。
进程和线程:
进程就是一个应用程序在处理机上的一次执行过程,它是一个动态的概念,而线程是进程中的一部分,进程包含多个线程在运行。
二 动态链接库:.dll
dll只是一组源代码的模块,每个模块包含一些可供应用程序或其他dll调用的函数,在应用程序调用一个dll里面的函数的时候,操作系统会将dll的文件映射到进程的地址空间中,这样进程中所有的线程就可以调用dll中的函数了。
DLL,即Dynamic Link Library|(动态链接库)。在Windows环境下有大量.dll格式的文件,这些文件就是动态链接库文件 ,其实也是一种可执行文件格式,跟.exe文件不同的是,dll文件不能直接执行,他们通常由.exe在执行时装入,内含有一些资源及可执行代码等。其实Windows的三大模块就是一DLL的形式提供的(Kernel32.dll,User32.dll,GDI32.dll),里面就含有了API函数的执行代码。为了使用DLL中的API函数,必须要有API函数的声明(.h)和其导入库(.lib),导入库是为了在DLL中找到API的入口点而使用的。为了使用API函数,我们就要有跟API所对应的.h和.lib文件,而SDK正是提供了一整套开发Windows应用程序所需的相关文件、范例和工具的工具包。
SDK包含了使用API的必须资料,所以人们也常把仅使用API来编写Windows应用程序的开发方式叫做“SDK编程”。而API和SDK是开发Windows应用程序所必需的东西,所以其他编程框架和类库都是建立在他们之上的,比如VCL和MFC。
dll加载完成后,这个时候dll对于进程中的线程来说只是一些被放在地址进程空间附加的代码和数据,操作系统为了节省空间内存,同一个dll在内存中只有一个,也就是说如果你的两个应用程序都需要加载user32.dll,那么操作系统也只会加载一次user32.dll到内存中。因为代码段在内存中的权限都是为只读的,所以当多个应用程序加载同一个dll的时候,不用担心应用程序会修改dll的代码段。当线程调用dll的一个函数,函数会在线程栈中取得传递给他的参数,并使用线程栈来存放他需要的变量。
三 API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或源码,或理解内部工作机制的细节。API函数包含在Windows系统目录下的动态链接库文件中。Windows API是一套用来控制Windows的各个部件的外观和行为的预先定义的Windows函数。用户的每个动作都会引发一个或几个函数的运行以告诉Windows发生了什么。这在某种程度上很像Windows的天然代码。而其他的语言只是提供一种能自动而且更容易的访问API的方法。当你点击窗体上的一个按钮时,Windows会发送一个消息给窗体,VB获取这个调用并经过分析后生成一个特定事件。
Windows系统除了协调应用程序的执行、内存的分配、系统资源的管理外,同时他也是一个很大的服务中心。调用这个服务中心的各种服务(每一种服务就是一个函数)可以帮助应用程序达到开启视窗、描绘图形和使用周边设备等目的,由于这些函数服务的对象就是应用程序,所以称之为Application Programming Interface,简称API函数。Win32API就是MicrosoftWindows32位平台的应用程序编程接口。
API与GUI
API接口属于一种操作系统或程序接口,GUI接口属于一种图形操作系统。两者都属于直接用户接口。
lib导入库,目前以lib后缀的库有两种,一种为静态链接库,另一种为动态链接库。静态库是一个或多个obj文件的打包,所以有人干脆把从obj文件生成lib的过程称为Archive,即合并到一起。比如你链接一个静态库,如果其中有错,他会准确的找到是哪个obj有错,即静态lib只是壳子。动态库一般会有对应的导入库,方便程序静态载入动态链接库,否则你就可能需要自己LoadLibrary调入DLL文件,然后再手工GetPro从Address获得对应函数了。有了导入库,你只需要链接导入库后按照头文件函数接口的声明调用函数就可以了。
LivePool:
是一个基于NodeJS,类似于Fiddler支持抓包和本地替换的web开发调试工具,是Tencent AlloyTeam在开发实践过程总结出的一套的便捷的WorkFlow以及调试方案。
Node.js是一个可以快速构建网络服务及应用的平台。该平台的构建是基于Chrome's javaScript runtime,也就是说,实际上它是对GoogleV8引擎进行了封装。
V8引擎执行JavaScript的速度非常快。Node对一些特殊用例进行了优化,提供了替代的API,使得V8在非浏览器环境下运行的更好。
单线程和多线程:
多线程编程的目的就是“最大限度的利用CPU资源”。
*线程相对于进程的优点:
1.开销小
2.资源共享性好
*线程相对于进程的缺点:
1.共享资源需要耗费一定的锁资源,同步相对复杂。
2.一个县城崩溃可能导致整个进程崩溃。
什么是进程?
当一个程序开始运行时,他就是一个进程。进程包括运行中的程序和程序所使用到的内存和系统资源。而一个进程又是由多个线程所组成的。
什么是线程?
线程是程序中的一个执行流,每个线程都有自己的专有寄存器(栈指针、程序计数器等),但代码区是共享的,即不同的线程可以执行同样的函数。
什么是多线程?
多线程是指程序中包含多个执行流,即在一个程序中可以同时运行多个不同的线程来执行不同的任务,也就是说允许单个程序创建多个并执行的线程来完成各自的任务。
多线程的好处:可以提高CPU的利用率。在多线程程序中,一个线程必须等待的时候,CPU可以运行其他的线程而不是等待,这样就大大提高了程序的效率。
多线程的不利方面:
线程也是程序,所以线程需要占用内存,线程越多占用内存也越多;多线程需要协调管理,所以需要CPU时间跟踪线程。
线程之间对共享资源的访问会相互影响,必须解决竞用共享资源的问题;线程太多会导致控制太复杂,最终可能会造成很多Bug。
了解了多线程的好处以后,就要了解应该在什么样的情况下使用多线程技术。因为并不是说所有情况下用多线程都是好事,因为多线程的情况下,CPU还要花时间去维护。
sdk:软件开发工具包(software Development Kit,SDK)
一般都是一些软件工程师为特定的软件包、软件框架、硬件平台、操作系统等建立应用软件的开发工具的集合。
软件开发工具包广义指辅助开发某一类软件的相关文档、范例和工具的集合。
软件开发工具包是一些被软件工程师用于为特定的软件包、软件框架、硬件平台、操作系统等创建应用软件的开发工具的集合,一般而言SDK即开发Windows平台下的应用程序所使用的SDK。它可以简单的为某个程序设计语言提供应用程序接口API的一些文件,但也可能包括能与某种嵌入式系统通讯的复杂硬件。一般的工具包括用于调试和其他用途的实用工具。SDK还经常包括示例代码、支持性的技术注解或者其他的为基本参考资料澄清疑点的支持文档。
架构设计:
架构,又名软件架构,是有关软件整体结构与组件的抽象描述,用于指导大型软件系统各个方面的设计。架构描述语言ADL用于描述软件的体系架构。现在已有很多架构描述语言,如Wright,Acme,c2,Darwin.ADl的基本构成包括组件、连接器和配置。
软件架构是一系列相关的抽象模式,用于指导大型软件系统各个方面的设计。软件架构是一个系统的草图。软件架构描述的对象是直接构成系统的抽象组件。各个组件之间的连接则明确和相对细致的描述组件之间的通讯。在实现阶段,这些抽象组件被细化为实际的组件。
数据库:
数据库是按照数据结构来组织、存储和管理数据的仓库,它产生于距今六十多年前,随着信息技术和市场的发展,数据管理不再仅仅是存储和管理数据,而转变成用户所需要的各种数据管理的方式。数据库有很多种类型,从最简单的存储有各种数据的表格到能够进行海量数据存储的大型数据库系统都在各个方面得到了广泛的应用。
系统运维:
运维指互联网运维,通常属于技术部门,与研发、测试、系统管理同为互联网产品技术支撑的4大部门。
一个互联网产品的生成一般经历的是:产品经理需求分析、研发部门开发、测试部门测试、运维部门部署发布以及长期的运行维护。
运维的职责覆盖了从产品设计到发布、运行维护、变更升级至下线的生命周期。
ios:
是由苹果公司开发的移动操作系统。
Android:安卓
Android是一种基于Linux的自由及开放源代码的操作系统,主要用于移动设备。由Google公司和开放手机
联盟领导开发。
前端开发:
以一个网站为例包括网站设计、前端开发、程序开发等。网站设计就是网站的外观,平面的东西。程序开发也好理解,就是功能实现。而前端开发就是把平面效果图转换成网页,把静态转换成动态。它的工作包括了:切图、写样式、做鼠标效果和图片切换效果等。而优秀的前端开发可以保障实现这些效果的同时,既不能影响网站的打开速度、浏览器兼容性还有搜索引擎的记录,还可以让用户体验更加舒适,使网站在访问中显得更精细、更用心。访客使用起来更简便。另外,现在前段工作不仅仅只是网页的制作,还有微网站、APP的制作、游戏制作,例如可以将你开发的web页面直接打包成手机使用的APP应用,游戏的互动界面是以前端开发技术为主。
web前端:
HTML5
HTML5就是HTML最新标准,是现在web程序开发的核心、标准通用标记语言下的一个应用HTML的第五次重大修改,这是一项推荐标准。虽然除css3和HTML5是两个语言,但通常说HTML5也都泛指包括CSS3,因为他们两个常在一起配合使用的。当然还不止这些,从技术本身分析看,现在完成一些页面制作、webapp、微网站开发以及网页游戏等,现在都是使用HTML5标准完成的。虽然开发这类的应用其实是以js为主,但因为HTML5这个概念很流行,所以微网站开发、webapp等应用,很多人都会说使用HTML5开发。
前端与HTML5的区别:
现在好多人都把HTML5和前端的概念弄混淆了。例如,H5是HTML5的简称,现在好多人把HTML5看成了是前端开发的总称。HTML5其实只是前端开发中重要的一部分技术,是现在前端开发的标准组件,特别是在移动端的特效开发、游戏开发、以及APP的开发方向上非常流行。如果把前端开发比作要建设的一座大厦,HTML5就相当于“钢筋水泥”。现在好多人都说开发“XX功能”使用“HTML5”技术,其实理解的有一些问题,他们所说的HTML5其实说的就是前端技术,只不过HTML5这个词比较活跃也比较流行,所以多数人都将前端救赎叫成HTML5了。
前端开发学习什么?
学习HTML、CSS和DIV+CSS技术来制作web页面;学习JavaScript、DOM、BOM等用建立开发基础;学习potoshop和Axure等软件应用,完成页面UI设计;也要认识一下NodeJS和PHP加上数据库等这样的后端语言,方便前后端开发配合;学习HTML5、CSS3、响应式页面布局、微网站制作等开发移动互联网技术的应用;像Ajax、JQuery Mobile、Bootstrap、AngularJS等更是前端开发必学的高级技术;HTML5地理位置应用、离线应用、webworker多线程实现、websocket、跨平台开发技术和webAPP开发等,这些企业级应用技术也是现在开发的主流,现在前端开发最热门要人最多,就是使用canvas开发网页游戏动画,以及会用Cocos2d-js制作游戏等开发。
Css(层叠样式表),是一种用来体现HTML(标准通用标记语言的一个应用)或XML(标准通用标记语言的一个子集)等文件样式的计算机语言。CSS不仅可以静态地修饰网页,还可以配合各种脚本语言动态地对网页各元素进行格式化。CSS能够对网页中元素位置的排序进行像素级精确控制,支持几乎所有的字体字号样式,拥有对网页对象和模型样式编辑的能力。