static局部变量相关知识
- 静态变量在内存的静态存储区,静态数据一直占有着该存储区单元直到程序结束;
- 静态局部变量只声明一次,一旦申请内存成功,不再接受重复申请;
- 静态局部变量的作用域与一般局部变量一样,二者区别:一般局部变量在函数调用结束后释放变量占用的存储单元,而静态局部变量不释放。
注:由于静态局部变量在内存中存在的时间较长,即占用内存时间较长,故应尽量少使用static来修饰变量。
恒生公司2016研发工程师笔试卷选择题分析
-
A.静态变量与常量作用不同:
static:改变生命周期和限制作用域
(1)作用于变量
(2)作用与函数
const:“只读”
(1)定义常量
(2)修饰指针
(3)修饰函数中的参数和返回值
B.函数中的静态变量:用static声明,使变量成为静态局部变量,编译时就为变量分配内存,直到程序退出时释放内存,在函数结束后不会被释放
C.静态变量只进行一次初始化,但是它的值是可以改变的,也就是说可以被赋值
D.static静态全局变量只能在定义它的文件中使用,作用域不是一个程序的所有源文件。 -
公用(public):访问权限最高;除派生类外,外部函数也可以直接访问(无论是成员变量还是成员函数)。
私有(private):访问权限最低;只能是该类内部函数互相调用,派生类、外部函数都不能访问。
保护(protect):访问权限中间;该类内部函数、派生类都能访问,外部类、外部函数不能访问
我们这样来记会更加容易一些,在继承时:
1、不管采用哪种形式(public, protected或private),基类中的私有成员都不可以被继承;如果非要在派生类中使用基类的私有成员,可以有两种方法:一是使用属性,二是使用友元类或友元函数。
2、如果采用public形式,则基类除了私有成员的其它所有都被原样的继承到派生类中;即在基类中是public的,在派生类中还是public的,在基类中是protected的,在派生类中还是protected的。
3、如果采用protected形式,则基类中除了私有成员的其它说有都被以protected的形式继承到派生类中。
C++中的继承方式有:
public、private、protected三种(它们直接影响到派生类的成员、及其对象对基类成员访问的规则)。
(1)public(公有继承):继承时保持基类中各成员属性不变,并且基类中private成员被隐藏。派生类的成员只能访问基类中的public/protected成员,而不能访问private成员;派生类的对象只能访问基类中的public成员。
(2)private(私有继承):继承时基类中各成员属性均变为private,并且基类中private成员被隐藏。派生类的成员也只能访问基类中的public/protected成员,而不能访问private成员;派生类的对象不能访问基类中的任何的成员。
(3)protected(保护性继承):继承时基类中各成员属性均变为protected,并且基类中private成员被隐藏。派生类的成员只能访问基类中的public/protected成员,而不能访问private成员;派生类的对象不能访问基类中的任何的成员。 -
A.只要允许,任何时候都应该添加索引以加快查询速度。(×)
B.无论记录多少,使用索引都能给查询带来性能提升。(×)
错误原因:对于表数据量少,插入,更新操作多的表,添加索引可能会使查询速度变慢。
C.每次update/insert/delete操作都会导致索引被重新修改。(√)
D.索引可以避免全表扫描。(√)
正确原因:索引并不适合表频繁的update,
insert,delete操作,这样会频繁的修改索引,造成性能低下。索引类似于指针访问,又类似于数组的下标访问,所以可以快速定位,避免全局扫描。当全表扫描速度快于索引查询速度时,索引会失效。 -
在Java中,哪种数据类型需要的内存最多?
JAVA语言中定义了8种基本的数据类型,来保存变量。JAVA要求程序中的每一个变量都规定自己的类型。正因为如此,JAVA属于强类型语言,从而不同于JavaScript这样的弱类型脚本语言。
byte:8位,最大存储数据量是255,存放的数据范围是-128~127之间。
short:16位,最大数据存储量是65536,数据范围是-32768~32767之间。
== int==:32位,最大数据存储容量是2的32次方减1,数据范围是负的2的31次方到正的2的31次方减1。
long:64位,最大数据存储容量是2的64次方减1,数据范围为负的2的63次方到正的2的63次方减1。
float:32位,数据范围在3.4e-45~1.4e38,直接赋值时必须在数字后加上f或F。
double:64位,数据范围在4.9e-324~1.8e308,赋值时可以加d或D也可以不加。
boolean:只有true和false两个取值。
char:16位,存储Unicode码,用单引号赋值。
所以,整型数据类型中,需要内存空间最多的是long。
Object 是引用数据类型,只声明而不创建实例时,只会在栈内存中开辟空间,默认为空,空占1 bit。new Object()是16个字节,8个字节的Mark Word,4个字节的class类型信息,最后4个字节为填充。 -
视图除了进行查询记录外,也可以利用视图进行插入、更新、删除记录的操作,减少对基表中信息的直接操作,提高了数据的安全性。
在视图上使用INSERT语句添加数据时,要符合以下规则:
(1)使用INSERT语句向数据表中插入数据时,用户必须有插入数据的权利。
(2)由于视图只引用表中的部分字段,所以通过视图插入数据时只能明确指定视图中引用的字段的取值。而那些表中并未引用的字段,必须知道在没有指定取值的情况下如何填充数据,因此视图中未引用的字段必须具备下列条件之一。
该字段允许空值。
该字段设有默认值。
该字段是标识字段,可根据标识种子和标识增量自动填充数据。
该字段的数据类型为timestamp或uniqueidentifier。
(3)视图中不能包含多个字段值的组合,或者包含使用统计函数的结果。
(4)视图中不能包含DISTINCT或GROUP BY子句。
(5)如果视图中使用了WITH CHECK
OPTION,那么该子句将检查插入的数据是否符合视图定义中SELECT语句所设置的条件。如果插入的数据不符合该条件,SQL Server会拒绝插入数据。
(6)不能在一个语句中对多个基础表使用数据修改语句。因此,如果要向一个引用了多个数据表的视图添加数据时,必须使用多个INSERT语句进行添加。