●strstr(char *str1, char *str2):在字符串中查找完全匹配的子字符串。
int a=strlen(str); //a=10; >>>> strlen 计算字符串的长度,以结束符 0x00 为字符串结束。
int b=sizeof(str); //而b=20; >>>> sizeof 计算的则是分配的数组 str[20] 所占的内存空间的大小,不 受里面存储的内容改变。
声明:向程序表明变量的类型和名字
浅复制:资源不重新分配
1.基类的静态变量或全局变量
2.派生类的静态变量或全局变量
3.基类的成员变量
4.派生类的成员变量
1.默认构造
2.复制构造
3.析构
4.赋值运算符重载
5.取址运算符重载
6.const取址运算符重载
1.select * from A where T
2.insert into A() values() 或者 insert into A() select 字段名 from A where T
3.update A set 字段名=字段值 where T
4.delete from A where T
5.create table A()
6.drop table A
7.grant
8.revoke
9.inner join、left outer join、right outer join、fuul outet join
其他常用关键字:and、or、avg、check、not exists、having、group by
1.硬件要求 2.架构要求 3.安全要求 4.系统维护 5.重用性 6.用户接口
1.更大的地址空间
2.更小的路由表,地址分配遵循聚类原则
3.增强的组播支持以及对流的支持
4.更高的安全性,可对网络层的数据进行加密
1.块式:浪费,易于管理
2.页式:利用率比块式高(物理单位,大小固定,由系统分配;一维)
3.段式:利用率比页式高,不易于管理(逻辑单位,大小不固定,由用户程序决定;二维,段名、段内地址)
4.段页式:段中有页,结合了两者优点(取数据,要访问3次内存:段号、段内页号及页内地址)
逻辑地址:段内偏移地址
线性地址:虚拟地址到物理地址变幻之间的中间层
物理地址:CPU外部地址总线上的寻址物理内存的地址信号
1.随机(RAND):随机数发生器产生一个替换块号
2.先进先出(FIFO):最先进去的信息块替换出去
3.近期最少使用(LRU):顾名思义,但不能保证过去和将来
4.最优替换(OPT):必须先执行一次程序,一种理想化的算法
动态链接库:.exe或.dll,一个包含可由多个程序同时使用的代码和数据的库,可包含其他库
●KMP算法:一个字符串中定位另一个串的高效算法。根据子串的最后一个字符定位,预先计算可能匹配的位置,只比较主串中与其相等的值,当然要有一个中间变量next[最后一个字符]=下一个在主串出现的下标。
●函数调用方式:1.函数表达式,如max(x,y);2.函数语句,如printf();3.函数实参。
●assert(p):可用作使用指针前的指针判空
1) ISAPI主要是开发基于浏览器客户端与服务器端程序。效率比CGI方式高,而且也扩展了CGI没有的一些 功能。(基于TCP/IP模型中的应用层)
2) CGI主要是开发基于浏览器客户端与服务器端程序。(基于TCP/IP模型中的应用层)
3) WinInet主要是开发客户端程序。(基于TCP/IP模型中的应用层)
4) Winsock主要是基于socket来开发客户端与服务器端程序。(基于TCP/IP模型中的各层)要想开发低 层协议的程序的话就要了解协议的报文格式。
●内联函数什么时候不展开:递归调用
●初始化列表:foo(string s, int i):name(s), id(i){} ;效率高,能用就用。对于类类型,可减少调用一次 默认构造函数
●四种网络编程方式的区别:
●见到图要想到邻接矩阵
内存溢出即用户在对其数据缓冲区操作时,超过了其缓冲区的边界;尤其是对缓冲区写操作时,缓冲区的溢 出很可能导致程序的异常。
0x12 | 0x34 | 0x56 | 0x78
小端模式:低地址 ------------------> 高地址
0x78 | 0x56 | 0x34 | 0x12
●内存泄露是指程序在运行过程中动态申请的内存空间不再使用后没有及时释放,从而很可能导致应用程序内存 无线增长。更广义的内存泄露包括未对系统的资源的及时释放,比如句柄等。
●非递归方法遍历二叉树:使用栈
●大端模式:低地址 -----------------> 高地址
●判断单链表是否有环:设置两个指针(fast, slow),初始值都指向头,slow每次前进一步,fast每次前进二 步,如果链表存在环,则fast必定先进入环,而slow后进入环,两个指针必定相遇。(当然,fast先行头到尾 部为NULL,则为无环链表)
●volatile修饰随时可能变化的数据,以被不同线程访问,每次取值都要重内存中重新读取,否则可能会利用 cache中的原有数据
●(a++) += a;不合法,值装入寄存器后加1 (++a) += a;合法,地址上直接加1
●float和double不能直接用==0.0,要转化为>= && <=
●explicit,可以阻止不应该允许的经过转换构造函数进行的隐式转换的发生。声明为explicit的构造函数不能 在隐式转换中使用。Test2 t2 = 12; //编译错误,不能隐式调用其构造函数
●回调函数就是一个通过函数指针调用的函数。
●char str[20]="0123456789";
●针对指针只能使用"==""!=",不能使用其他比较符号
●野指针:指向不可用内存的指针,free后,没有p = null
●内存泄露:由于忽略或错误造成程序未能释放已经不再使用的内存,for(;;)p = malloc(20);
●内联函数与宏的不同:内联函数采用的是值传递(有类型检查),而宏定义采用的是对等替换;内联函数在预 处理阶段,进行插入,而宏定义进行替换
●struct在C、C++中有什么不同:1.C中不能包含成员函数;2.C中没有权限,如public;3.C的struct没有继承
●求解整形数的二进制表示中有多少个1:count++;x = x & (x-1);
●C++函数传参方式:1.值2.指针3.引用4.全局变量
●默认构造函数不能在函数体内调用重载的单参构造函数
●定义:为变量分配存储空间,还可以设定初值
●函数参数为指针时,先用assert确定指针不是NULL
●atof(字转浮点)、atoi(字转整型)、atol(字转长整)、itoa(整形转字)、ltoa(长整转字)
●深复制:类的对象存在资源,发生复制过程时,资源重新分配
●友元函数:指某些虽然不是类成员却能够访问类的所有成员的函数。
●变量初始化顺序(类):
●C++空类默认成员函数:
●while(int i=1){cout<<i;i--;}//程序会一直输出1
●abs()//求绝对值
●最简单的病毒:while(1) int *p = new int[10000000];
●短路求值:(T1 && T2)如果T1是false,T2被忽略;(T1 || T2)类似
●printf():有返回值,返回值是打印变量所占的字符个数
●求余运算的符号和被除数的符号相同:-3=-3 16%-3=1
●SQL的功能包括:数据查询、数据操作、数据定义、数据控制
●常用SQL:
●事务是指作为单个逻辑工作单元执行的一系列操作。四属性:原子性、一致性、隔离性、持久性
●死锁必要条件:1.互斥2.请求与保持等待3.不可剥夺4.环路等待
●共享锁简称S锁,也叫读锁。用于不更改或不更新数据的操作。
●互斥锁简称X锁,也叫排它锁。用于数据修改,确保不被同时多重更新。
●取出21~30的记录:select top 10 * from S where ID NOT IN (select top 20 ID from S)
●视图是一个虚拟表,并不在数据库中以存储的数据值集形式存在
●触发器(trigger)是个特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发
●索引是一种提高DB查询速度的机制,是一个在DB的表或视图上按照某个关键字段的值,升序或降序创建的对象
●回滚是指将数据库的状态恢复到执行事务之前的状态
●数据库备份:1.完全备份2.差异备份3.事务日志备份4.增量备份
●游标:一种能从包括多条数据记录的结果集中每次提取一条记录的机制
●数据库日志满了,基本上处于不能使用的状态,因为任何写操作都要记录日志
●C/S和B/S不同:
●MVC:模型(Model)、视图(View)、控制(Controller)
●路由表:路由器或其他互联网网络设备上存储的表,它决定如何将包从一个子网传递到另一个子网
●ping是一个用于测试网络连接量的程序
●阻塞模式下, 程序在调用接收函数时(如recv), 如果没有数据到达, 此函数会一直等待, 即当前线程会被阻 塞, 直到有数据时才返回!
●常用网络安全防护措施:1.加密技术 2.验证码技术 3.认证技术 4.访问控制技术
●IPv6相对IPv4主要有的优点:
●线程的同步机制:1.临界区 2.互斥量 3.信号量 4.事件
●内存管理方式:
●虚拟地址:由段选择符和段内偏移地址组成
●Cache替换算法:
●静态链接库:.lib,需要链接到可执行文件中去,不可包含其他库
●每个进程都会有两个栈,一个用户栈、一个内核栈
●UML一般有哪些图:类、对象、用例、交互、状态、活动、构件、部署
●CMMI(软件能力成熟度模型集成)初始级、可重复级、定义级、管理级、优化级