您的位置:首页 > 其它

工作小知识总结

2017-04-06 22:14 281 查看
1.实现函数多样性:函数重载和虚函数(虚函数存在于继承的环境中)

2.静态联编和动态联编 虚函数是动态联编的基础(运行时的多态)

3.基类指针可以指向派生类对象,因此存在动态联编的可能性

4.定义的静态静态成员和静态成员函数是所有对象公开的,不依赖于某个对象
静态成员分为静态数据成员和静态成员函数
静态数据的使用:
1)头文件中定义 static int num;
//num不属于某个对象,共享成员
2)在.cpp文件中进行初始化 int 对象名::num=0;
3)调用展示 对象名::num来进行显示

5.类模板
C++模板可以分为 类模板和函数模板
1)函数模板
eg:template <class T>
T min(T x,T y)
{
if(x> y)
return x;
else return y;
}
2)类模板
eg:template <class arg1,class arg2,class arg3>
class MyClass
{
}

MFC与Windows编程 学习总结

1.MFC概念和作用

2.Windows应用程序的特点和运行机制

3.消息的概念,编写Windows应用程序过程种不过涉及到的消息种类

4.消息的发送和接收的基本过程和机制

5.利用 MFC AppWizard来创建工程的步骤和方法

6.消息映射、消息处理函数的概念以及二者的关系

一。

HDC 设备描述表句柄

HINSTANCE 应用程序的运行实例句柄

HWND 窗口句柄

方法一:m_hWnd可以获取到窗口对象的句柄

方法二:定义句柄,调用MFC类的成员函数Attach()将句柄与MFC类对象联系在一起
此时的句柄就成为了该MFC类对象的句柄
注意:在退出对象作用域之前,要调用Detach()将句柄和对象分离。因为在销毁对象时
构造函数将自动销毁与它联系到一起的句柄,造成句柄的重复销毁,使系统发生异常

创建对象和new出来的对象指针的差别 分别存放在哪?

在函数中new出来的对象是在走出函数时,销毁的吗?

1.动态库与静态库的区别---------(库是源文件的二进制文件)
1).因为有些函数需要重复调用,为了方便,将重复调用的函数封装成库,使调用方便,便于开发.
2).windows静态库以.lib后缀,动态库(共享库)以.dll后缀
linux下静态库以.a为后缀,共享库是以.so为后缀
3).生成方式
linux下静态库: 
将源文件编译成目标文件gcc -c a.c b.c
生成静态库:ar -rc libstatic.a a.o b.o
linux下动态库:
将源文件编译成目标文件gcc -c a.c b.c
生成共享库:gcc -fPIC -shared -o libshared.so a.o b.o
4).链接
静态库:gcc -o staticcode -L. -lstatic main.c -static(默认库在当前文件夹下)
动态库:gcc -o sharedcode -L. -lshared main.c(默认库在当前文件夹下)
5).加载的区别
静态库:库中目标文件所含有的函数机器码全部copy到最终的可执行文件中。最终可执行代码量较多,相当于编译器
把代码补充完整了,运行起来相对较快
缺点:占用磁盘和内存空间
动态库:与动态库连接的可执行程序只包含所需要的函数的引用表,程序直行时函数代码才被拷贝到内存中。
可执行文件比较小,节省磁盘空间。操作系统使用虚拟内存,使得动态库驻留在内存中被多个程序使用,节约内存空间
缺点:运行时会去链接库花费时间,直行速度慢。
总体来说:静态库是牺牲了空间效率,换取了时间。共享库是牺牲了时间效率换取了空间效率。

二。boost库的学习
1.boost是一个标准库,相当于STL的延续和扩充,设计理念和STL比较接近,利用泛型让复用达到最大化。
STL集中在算法部分,boost包含了不少工具类,可以完成比较具体的工作。
2.boost包含几大类:字符串及文本处理、容器、迭代器、算法、函数对象和高阶编程、泛型编程、模板元编程、预处理编程、并发编程、
数学相关、纠错和测试、数据结构、输入/输出、跨语言支持、内存相关、语法分析、杂项。有些库是跨类别包含.
3.库中类型说明
文本处理部分:conversion/lexcial_case类实现数学类型和字符串之间的转化。代替C语言中的atoi,itoa之类的函数
format提供了对流"printf-like"功能,format为stream增加了这个功能,并且功能比原始的printf更强
regex正则表达式库
tokenizer库 与splite有相同功能,但他支持正则表达式库
array提供了一个常量大小数组的一个包装
dynamic_bitset动态分配大小的bitset
graph提供图的容器和相关算法。
multi_array提供了对多维数组的封装
thread,并发编程里的一个库,提供了一个可移植的线程库(windows用处不大)
数值处理方面的类库,rational分数类,random随机数类
static_assert,提供了编译器的assert功能。
compressed_pair,跟STL里的pair差不多。不过对空元素做了优化
tuple可以让函数返回多个值

pool内存池
smart_ptr:智能指针
date_time,这个是平台、类库无关的实现,如果程序需要跨平台
value_initialized:数值初始化,可以保证声明的对象都被明确的初始化
4.生成物
一个简单的Boost库默认将会产生八个不同的库

1)例如:Boost.Datatime库在Unix类系统下面将被处理成:
libboost_date_time-gcc-d-1_31.so
libboost_date_time-gcc-mt-d-1_31.so
libboost_date_time-gcc-1_31.so
libboost_date_time-gcc-mt-1_31.so
libboost_date_time-gcc-d-1_31.a
libboost_date_time-gcc-mt-d-1_31.a
libboost_date_time-gcc-1_31.a
libboost_date_time-gcc-mt-1_31.a
5.Windows下安装
1)http://www.boost.org下载,解压缩boost库
2)进入c:/ProgramFiles/Microsoft Visual Studio/VC98/Bin目录
3)运行VCVARS32.BAT(此操作对控制台注册VC的环境变量)
4)进入Boost的目录例如c:/boost_1_33_1/tools/build/jam_src
5)修改build.bat脚本的参数(如果必要的话,你的安装目录不是c:盘)
将原参数if EXIST "C:/Program Files/Microsoft Visual Studio/VC98/bin/VCVARS32.BAT" (       set BOOST_JAM_TOOLSET=msvc

        set BOOST_JAM_TOOLSET_ROOT=C:/Program Files/Microsoft Visual Studio/VC98/    goto :eof)

  修改为(就是你的VC6.0安装的目录,我这里举个例子)

  if EXIST "D:/Program Files/Microsoft Visual Studio/VC98/bin/VCVARS32.BAT" (       set BOOST_JAM_TOOLSET=msvc      

  set BOOST_JAM_TOOLSET_ROOT=D:/Program Files/Microsoft Visual Studio/VC98/    goto :eof)

6)控制台下运行
D:/d/boost_1_33_1/tools/build/jam_src/build.bat

最终会在目录下生成一个名为bin.ntx86的文件夹里面包含一个bjam.exe可执行文件,将其拷贝到D:/boost_1_33_1目录下
7)安装python可以在www.python.org获得

8)设置环境变量
SET

  MSVC_ROOT="c:/Program Files/Microsoft Visual Studio/VC98" SET VISUALC="c:/Program Files/Microsoft Visual Studio/VC98" SET JAM_TOOLSET=VISUALC SET

  PYTHON_ROOT=D:/Program Files/Python23 SET PYTHON_VERSION=2.3
9)开始编译
bjam -sTOOLS=msvc install(将会安装在默认目录C:/Boost)
这样编译就完成了
10)boost类库在VC6.0的IDE环境中的配置
Tools”-> “Options” -> “Diretories” -> “Show Diretories for”中的下拉框选择: 
1) 在Include files 中添加C:/BOOST/INCLUDE/BOOST-1_33_1/BOOST目录。

  2) 在Library files  中添加C:/BOOST/LIB目录
11)测试
如果你不能确定,你的编译是否成功。就需要进行一下测试,拿正则表达式类为例。测试如下程序
#include "stdafx.h" 
#include <cstdlib> 
#include <stdlib.h> 
#include<boost/regex.hpp> 
#include <string> 
#include <iostream>
using namespace std; 
using namespace boost;
regex expression("^select([a-zA-Z]*) from ([a-zA-Z]*)");
int main(int argc, char* argv[]) 
{      
std::string in;      
cmatch what;     
cout << "enter test string" << endl;      
getline(cin,in);      
if(regex_match(in.c_str(), what, expression))      
{            
for(inti=0;i<what.size();i++)            
cout<<"str :"<<what[i].str()<<endl;      
}
else      
{         
cout<<"Error Input"<<endl;      
}         
return 0; 
}
输入:select name from database;
输出:str:select name from table    str:name    str:table

单个库编译方法:(以regex为例)
编译boost.regex的另一种办法 1.运行vcvars32.bat,可以帮助设置好vc命令行环境 2.cd boost_1_33_1/libs/regex/build

3.nmake -vc6.mak
这种方式可以只编译regex 这时会在当前目录下生成vc6目录,里面有已编译好的lib和dll文件, 
这样以后的步骤中可以设置regex库时指向这里, 包含文件需要设置到boost_1_33_1目录

  另修正补充: 用bjam编译regex时,选项-sTOOLS=vc7中vc7改成vc71,否则下面最终生成工程时需要改个文件名
( libboost_regex-vc7-mt-sgd-1_33_1.lib -> libboost_regex-vc71-mt-sgd-1_33_1.lib)

三。应用程序框架类
1.CCmdTarget类 接收所有窗口消息和命令的对象基类。派生类都要处理和使用消息映射表,消息映射表就是将窗口消息与处理消息的类成员函数
关联起来的机制。CCmdTarget类和消息映射表共同实现MFC的消息映射技术
2.CCmdUI类
提供了更新用户界面对象状态的函数。通过使用消息来产生命令目标对象,从而自动更新菜单状态
3.CWinThread类
MFC程序的线程类。Windows应用程序包括两种不同的线程:操作者线程和用户界面线程。
用户界面线程:用来处理用户同界面的交互操作,是主线程
操作者线程:是抢占式的win32线程,可以定义一些操作者线程处理后台操作。如处理从通信接口接收的数据等。
4.CWinApp类
是从CWinThread类继承过来的,代表了一个windows应用程序
CWinApp有一些可供重载的函数,用来给开发者初始化应应用程序或在程序结束时添加一些收尾工作。
5.文档/视图类:提供了文档/视图结构。实现数据存取和数据显示的分离。
6.调试支持类和异常类
CDumpContect类和CMemoryState类来帮助调试,在调试时,可以使用CRuntimeClass来确定任何对象的所属类
异常类提供了一套程序运行时基于CException类的异常类管理机制。

小贴士:explicit的学习(用来防止隐式转换的)

enum FindModes{Mon=0,Tues,Wes,Thrs,Fri};
可以阻止不应该允许的经过转换构造函数进行的隐式转换的发生。
声明为explicit的构造函数不能在隐式转换中使用。

经典学习教材:Phyton核心编程、boost程序库完全开发指南、STL源码剖析、C++ Qt设计模式、C++并发编程实战。

static 
static的作用具有隐藏作用,使当前源文件不被其它文件可见,防止命名冲突
static保持变量内容持久,存储在静态数据区的变量在程序刚开始行时就完成初始化
static默认初始化为0
总结:static具有隐藏作用,对其它源文件具有隐藏作用。变量具有持久性和默认值0.限制变量的作用域

const
是变量,只是不能修改它。所以理解为常量。const意味着"只读"
阻止一个变量被改变,可以使用const关键字。定义const常量时,通常需要对它进行初始化。

引用
别名:占用控件较少。并且具有自动释放的工程。

explicit
声明为explicit的构造函数不能在隐式转换中使用

extern
以标示变量或者函数的定义在别的文件中。提示编译器遇到此变量和函数时在其他模块中寻找其定义。
此外extern也可用来进行链接指定。

打包程序总结学习:

1.对程序进行部署、打包。安装命名为"SetupTestWindows"

2.右边的"应用程序文件夹"右点击“文件”,选择"testwindows"项目

3.右边的"应用程序文件夹"上添加"文件",选择“C:/windows”"system32""msiexec.exe"文件”,选择

4.右边的“用户的程序菜单”上添加“文件”,选择一个*.ico的图标文件

5.右边的“用户桌面”上添加“文件”,然后选择一个适合的桌面上显示的图标后显示完成后显示如下

6.开始菜单快捷方式:在“主输出来自testwindows”上右击“创建”

三。STL学习(STL中容器可容纳一些数据的模板类)
1.STL中三大核心部分:容器、算法、迭代器、容器适配器、函数对象(functor)
2.队列容器:队列容器按照线性排列来存储T类型值的集合,队列中每个成员都有自己的特有的位置。
 向量容器:vector是一种动态数组,是基本数组的类模板。
3.双端队列(queue容器类):与vector类似,支持随机访问和快速插入删除,在容器某一位置上的操作所花费的
是线性时间。deque支持从开始端插入数据:push_front()。但deque不支持capacity()、reserver()类似操作
4.链表(双线性列表)--智能线性访问
merge():合并两个链表;
splice():拼接两个链表;
sort():列表的排序;
5.集和多集
一个集合通过链表来组织,在插入操作和删除操作上比向量(vector)快,但查找和添加末尾的元素都比较慢

jom命令和nmake的区别

宏定义中的省略号有什么作用

1.宏定义中的省略号表示一串可变的参数,这一参数可用args加以引用,标识一串数目不限的参数列表

Windows消息循环机制:

1.所有硬件输入设备都由Windows监控->事件发生将输入消息放入系统消息队列中
->将输入消息拷贝到相应应用程序队列中
->应用程序中消息循环从它消息队列中检索每一个消息并发送给相应的窗口函数。

备注:Windows程序是事件驱动的。

RDS-TMC规范:RDS-TMC方式数字化的传输经过编码的交通及出行者信息(TTI)

RDS-TMC标准由交通部公路科学研究所提出,是全国智能运输系统标准化技术委员会确定的计划标准之一

中国地图全部缓存成18级图片,百度和高德的核心是 
1)采用cache功能,根据样式和数据自动切块生成预渲染的地图
2)如何将渲染后的图片保存在服务器上
3)从服务器上下载地图,根据数据链接去组织x,y,z

矢量地图的切分
1)矢量地图的优点:数据量小,可以在客户端改变地图显示样式,更好的提升客户体验

栅格数据都是存在服务器上的,缓存客户端和服务器都有不同的缓存算法,都是为了渲染速度和用户体验

底图使用了矢量渲染
矢量渲染的优点:
1)数据更新更快更及时--客户端矢量渲染理论可以支持实时更新
2)释放客户端的缓存空间,节省流量

3)客户端支持矢量编辑

遥感影像问题
遥感影像数据都是栅格技术,由服务端生成切片,客户端异步请求加载

POI搜索
关键字搜索
周边搜索
多边形搜索

Flask Web开发:基于python的web应用开发实践

数据库

web常用基于关系模型的数据库--SQL数据库(属于结构化查询语言)

NoSql数据库:文档数据库和键值对数据库

数据库抽象层代码包:SQLAlchemy 和MongoEngine--直接处理高等级的python对象

选择数据库框架因素:易用性、性能、可移植性、Flask集成度

Flask-SQLAlchemy 也使用pip 安装:(venv) $ pip install flask-sqlalchemy

Flask-SQLAlchemy 根据模型类来创建数据库

迁移数据库--在虚拟环境中安装Flask-Migrate:(venv) $ pip install flask-migrate

电子邮件:使用Flask-Mail提供电子邮件支持

使用pip 安装Flask-Mail:(venv) $ pip install flask-mail

SMTP服务器:简单邮件传输协议 Simple Mail Transfer Protocol

使用“2”个参数调用“DownloadFile”时发生异常:“远程服务器返回错误: (404) 未找

到。”

所在位置 行:1 字符: 152

+ [System.Net.WebRequest]::DefaultWebProxy.Credentials = [System.Net.Credential

Cache]::DefaultCredentials; (new-object System.Net.WebClient).DownloadFile <<<<

 ('https://pypi.python.org/packages/source/s/setuptools/setuptools-8.4.zip', 'D

:\\Python27\\temp\\setuptools-8.4.zip')

    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException

    + FullyQualifiedErrorId : DotNetMethodException

Flask结构总结:

flask

--app Flask程序

   --templates

   --static

   --main
---_init__.py
---errors.py
---forms.py
---views.py

   --__init__py

   --errors.py

   --forms.py

   --views.py

--migrations migrations包含数据库迁移脚本

--tests 单元测试编写

   --__init__.py

   --test.py

--venv 包含python虚拟环境

--requirements.txt 列出了所有依赖包,便于其他电脑中重新生成相同的虚拟环境

--config.py 存储配置

--manage.py 启动程序以及其他的程序任务

主函数manage.py  --create_app
---Manager(app)
---Migrate(app,db)

安装flask_sqlalchemy、flask_moment、flask_mail、alembic、

安装sqlalchemy error flask_sqlalchemy、sqlalchemy 
Could not find a version

D:\Python27\Scripts;D:\QtDevelop4.8.6\Qt4.8.6\include;

D:\QtDevelop4.8.6\Qt4.8.6\include\QtGui;

D:\QtDevelop4.8.6\Qt4.8.6\include\QtCore;

D:\QtDevelop4.8.6\Qt4.8.6\include\QtCore;

D:\Rdt\jom_1_0_16;D

:\Cheetah-2.4.4;

D:\Program Files (x86)\CMake 2.8\bin;

D:\Rdt\Perl\site\bin;

%JAVA_HOME%\bin;

%JAVA_HOME%\jre\bin;

D:\Rdt\Perl\bin;

D:\QtForAndroid\Install\Java\jdk1.8.0_101\bin;

D:\Qt\Qt5.1.1\5.1.1\android_armv7\bin;

D:\QtForAndroid\package\adt-bundle-windows-x86-20131030\adt-bundle-windows-x86-20131030\sdk\tools;

C:\ProgramData\Oracle\Java\javapath;

%SystemRoot%\system32;

%SystemRoot%;

%SystemRoot%\System32\Wbem;

%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\;

C:\Program Files (x86)\Microsoft SQL Server\90\Tools\binn\;

D:\Program Files\TortoiseSVN\bin;

C:\Program Files\Microsoft\Web Platform Installer\;

C:\Program Files (x86)\Microsoft ASP.NET\ASP.NET Web Pages\v1.0\;

C:\Program Files (x86)\Windows Kits\8.0\Windows Performance Toolkit\;

C:\Program Files\Microsoft SQL Server\110\Tools\Binn\;

C:\Program Files (x86)\Autodesk\Backburner\;

C:\Program Files (x86)\Common Files\Autodesk Shared\;

D:\Python27;D:\Program Files (x86)\CMake 2.8\bin;

C:\Program Files (x86)\Microsoft SDKs\TypeScript\1.0\;

C:\Program Files\Microsoft SQL Server\120\Tools\Binn\
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: