在CSDN上面下载了两篇银行信息技术岗位(计算机)笔试的汇总,准备一下接下来的两场考试,粗略的看了一下很多题都是计算机专业的基础科目里的一些基础概念题(很银行的风格了),虽然大部分都忘得差不多了,anyway既然决定参加,还是全力以赴吧~
应该是行测题,计算机知识题,英语题这样一个大概组成:
- 行测题看天
- 英语题看积累
- 计算机相关知识题看准备
基于此,那就先看计算机相关的知识题,here we go~
- C/C++的标识符只能以字母和下划线开头,大小写字母敏感
2.面相对象的基本特征:
1).封装
把客观事物抽象成类进行封装
2).继承
它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。
3).多态
允许将子类类型的指针赋值给父类类型的指针
实现多态,有二种方式,覆盖,重载。
覆盖,是指子类重新定义父类的虚函数的做法。
重载,是指允许存在多个同名函数,而这些函数的参数表不同(或许参数个数不同,或许参数类型不同,或许两者都不同)。
3.C++预处理
预处理器是一些指令,指示编译器在实际编译之前所需完成的预处理。
- 在1983年C++被命名
5.静态指针与指向静态类型的指针
第一种情况:pointer to const
注意:const修饰符绑定到离他最近的那个东西上。
const int* u; //u是一个指针,指向一个const int。即 为 (const int) (*u)
int const* v;//这个表达方式实际上与上面的那个表达式是一个意思!即 (int const) *v
要使指针本身变成const,你必须将const修饰符放在*的右边,如下所示:
int d =1;
int* const w = &d;
w是一个指针,它是const的,指向一个int类型
6.C++中引用和指针
引用很容易与指针混淆,它们之间有三个主要的不同:
一、不存在空引用。引用必须连接到一块合法的内存。
二、一旦引用被初始化为一个对象,就不能被指向到另一个对象。指针可以在任何时候指向到另一个对象。
三、引用必须在创建时被初始化。指针可以在任何时间被初始化。
eg:
int i = 17;
int& r = i; double& s = d;
在这些声明中,& 读作引用。因此,第一个声明可以读作 "r 是一个初始化为 i 的整型引用",第二个声明可以读作 "s 是一个初始化为 d 的 double 型引用"。下面的实例使用了 int 和 double 引用:
#include <iostream>
using namespace std;
int main ()
{
// 声明简单的变量
int i;
double d;
// 声明引用变量
int& r = i;
double& s = d;
i = 5;
cout << "Value of i : " << i << endl;
cout << "Value of i reference : " << r << endl;
d = 11.7;
cout << "Value of d : " << d << endl;
cout << "Value of d reference : " << s << endl;
return 0;
}
C++之所以增加引用类型, 主要是把它作为函数参数,以扩充函数传递数据的功能。
C++ 函数传参:
(1)将变量名作为实参和形参。这时传给形参的是变量的值,传递是单向的。如果在执行函数期间形参的值发生变化,并不传回给实参。因为在调用函数时,形参和实参不是同一个存储单元。// 同 c
(2) 传递变量的指针。形参是指针变量,实参是一个变量的地址,调用函数时,形参(指针变量)指向实参变量单元。这种通过形参指针可以改变实参的值。// 同 c
(3) C++提供了 传递变量的引用。形参是引用变量,和实参是一个变量,调用函数时,形参(引用变量)指向实参变量单元。这种通过形参引用可以改变实参的值。
int*& value这样一个声明,我们从最接近value的符号看起,是个&,说明value是一个引用,它是一个什么引用呢?再看*,它是一个指针的引用,即指针的别名,我们用*value就可以访问到实参的值了
7.关于函数参数默认值
我们可以赋予函数参数默认值。所谓默认值就是在调用时,可以不写某些参数的值,编译器会自动把默认值传递给调用语句中。默认值可以在声明或定义中设置;也可在声明或定义时都设置,都设置时要求默认值是相同的。
如果一个函数中有多个默认参数,则形参分布中,
默认参数应从右至左逐渐定义。当调用函数时,只能向左匹配参数。例如:
void func(int a=1,int b,int c=3, int d=4); //error
void func(int a, int b=2,int c=3,int d=4); //ok
对于第2个函数声明,其调用的方法规定为:
func(10,15,20,30); //ok:调用时给出所有实参
func(); //error:参数a没有默认值
func(2,12); //ok:参数c和d默认
func(2,15,20); //error:只能从右到左顺序匹配默认
C++规定,默认参数只能放在形参列表的最后,而且一旦为某个形参指定了默认值,那么它后面的所有形参都必须有默认值。实参和形参的传值是从左到右依次匹配的,默认参数的连续性是保证正确传参的前提。
8.putchar
头文件:#include <stdio.h>
函数putchar()用于将给定的字符输出到控制台,其原型如下:
int putchar (int ch);
【参数】ch为要输出的字符。
【返回值】输出成功,返回该字符的ASCII码值,否则返回EOF。
说明:putchar()非真正函数,而是putc(ch, stdout)宏定义
9.static关键字在C++里面的使用
一、静态全局变量不能被其它文件所用(全局变量可以)
其它文件中可以定义相同名字的变量,不会发生冲突(自然了,因为static隔离了文件,其它文件使用相同的名字的变量,也跟它没关系了);
二、静态局部变量
静态局部变量保存在全局数据区,而不是保存在栈中,每次的值保持到下一次调用,直到下次赋新值。
(1)该变量在全局数据区分配内存(局部变量在栈区分配内存);
(2)静态局部变量在程序执行到该对象的声明处时被首次初始化,即以后的函数调用不再进行初始化(局部变量每次函数调用都会被初始化);
(3)静态局部变量一般在声明处初始化,如果没有显式初始化,会被程序自动初始化为0(局部变量不会被初始化);
(4)它始终驻留在全局数据区,直到程序运行结束。但其作用域为局部作用域,也就是不能在函数体外面使用它(局部变量在栈区,在函数结束后立即释放内存)
10.register/auto
①. auto自动变量:表明变量自动具有本地范围,在离开作用域,无论块作用域,文件作用域还是函数作用域,变量都会被程序隐藏或自动释放。然后等你重新进入该作用域,变量又重新被定义和调用。使用auto变量优势是无需考虑变量是否被释放。
②. static静态变量:简单说就是在函数等调用结束后,该变量也不会被释放,保存的值还保留。即它的生存期是永久的,直到程序运行结束,系统才会释放,但也无需手动释放。
③. register寄存器型变量:这个关键字要求编译器尽可能的将变量存储在CPU内部寄存器中,而不是通过内存寻址访问,以提高效率。但是这只是给系统的一个暗示,如果寄存器资源有限,系统也不会满足你的要求。register型变量存取速度比内存快很多,一般你在一些系统库文件,或诸如单片机官方接口库中使用较多,正常我们能用上较少。
④. extern外部变量:它属于变量声明,extern int a和int a的区别就是,前者告诉编译器,有一个int类型的变量a定义在其他地方,如果有调用请去其他文件中查找定义。
11.内联函数
C++内联函数提供了替代函数调用的方案,通过inline声明,编译器首先在函数调用处使用函数体本身语句替换了函数调用语句,然后编译替换后的代码。因此,通过内联函数,编译器不需要跳转到内存其他地址去执行函数调用,也不需要保留函数调用时的现场数据。
12.在类中不做特别说明,所指的数据均为私有类型
13.友元函数
友元提供了一种 普通函数或者类成员函数 访问另一个类中的私有或保护成员 的机制。也就是说有两种形式的友元:
(1)友元函数:普通函数对一个访问某个类中的私有或保护成员。
(2)友元类:类A中的成员函数访问类B中的私有或保护成员。
- 友元关系没有继承性
假如类B是类A的友元,类C继承于类A,那么友元类B是没办法直接访问类C的私有或保护成员。
- 友元关系没有传递性
加入类B是类A的友元,类C是类B的友元,那么友元类C是没办法直接访问类A的私有或保护成员,也就是不存在“友元的友元”这种关系。
在类声明的任何区域中声明,而定义则在类的外部。
friend <类型><友元函数名>(<参数表>); 友元的实现: void c(A &_A){ cout<<_A.b<<endl; } 注意,形参那里要用类的&,下面访问类中的成员要用.
注意,友元函数只是一个普通函数,并不是该类的类成员函数,它可以在任何地方调用,友元函数中通过对象名来访问该类的私有或保护成员。
14.指向类成员的指针
类的成员函数是指那些把定义和原型写在类定义内部的函数,就像类定义中的其他变量一样。类成员函数是类的一个成员,它可以操作类的任意对象,可以访问对象中的所有成员。
定义:类成员函数指针(member function pointer),是C++语言的一类指针数据类型,用于存储一个指定类具有给定的形参列表与返回值类型的成员函数的访问信息。
基本上要注意的有两点:
①函数指针赋值要使用 &
②使用.(实例对象)或者->(实例对象指针)调用类成员函数指针所指向的函数
15.拷贝构造函数
拷贝构造函数是一种特殊的构造函数,它在创建对象时,是使用同一类中之前创建的对象来初始化新创建的对象。拷贝构造函数通常用于:
一、通过使用另一个同类型的对象来初始化新创建的对象。
二、复制对象把它作为参数传递给函数。
三、复制对象,并从函数返回这个对象。
在class中定义类似于:
A(const A &obj){
cout<<"copying...."<<endl;
主要是 const 类名 &拷贝以后的类名 这样一个结构
16.类中const数据成员初始化只能通过初始化列表进行
17.关于构造函数的顺序
一个有趣的现象是,成员对象初始化的次序完全不受它们在初始化表中次序的影响, 只由成员对象在类中声明的次序决定。这是因为类的声明是唯一的,而类的构造函数可以有多个,因此会有多个不同次序的初始化表。如果成员对象按照初始化表的次序进行构造,这将导致析构函数无法得到唯一的逆序。”
18.常成员函数
常成员函数不能修改任何值
注意,const的位置在函数花括号之前:
void fun(int val)const{
cout << "num = " << num << endl;
age = val;//此时是错误的。
}
如果const在函数名前面:
const void fun(int){
//这里就可以修改值了
}
19.虚函数
这个例子是虚函数的一个典型应用,通过这个例子,也许你就对虚函数有了一些概念。它虚就虚在所谓“推迟联编”或者“动态联编”上,一个类函数的调用并不是在编译时刻被确定的,而是在运行时刻被确定的。由于编写代码的时候并不能确定被调用的是基类的函数还是哪个派生类的函数,所以被成为“虚”函数。
虚函数只能借助于指针或者引用来达到多态的效果。
20.抽象类
在很多情况下,基类本身生成对象是不合情理的。例如,动物作为一个基类可以派生出老虎、孔雀等子类,但动物本身生成对象明显不合常理。
为了解决上述问题,引入了纯虚函数的概念,将函数定义为纯虚函数(方法:virtual ReturnType Function()= 0;),则编译器要求在派生类中必须予以重载以实现多态性。同时含有纯虚拟函数的类称为抽象类,它不能生成对象。这样就很好地解决了上述两个问题。
带有纯虚函数的类称为抽象类。抽象类是一种特殊的类,它是为了抽象和设计的目的而建立的,它处于继承层次结构的较上层。抽象类是不能定义对象的,在实际中为了强调一个类是抽象类,可将该类的构造函数说明为保护的访问控制权限。
21.操作系统选择题:
分时系统具有多路性、交互性、“独占”性和及时性的特征
分时操作系统的时间片一定,那么用户数越多,则响应时间越长
分时操作系统使用的是时间轮片
并发性 (Concurrence) 是指两个或多个事件在同一时间间隔内发生。通常的程序是静态实体(Passive Entity),在多道程序系统中,它们是不能独立运行的,更不能和其它程序并发执行。在操作系统中引入进程就是为了使多个程序能并发执行。
并行性才是同一时刻发生,并发性是同一时间间隔内发生
批处理缺乏交互性
实时操作系统采用多道程序设计技术提高CPU和外部设备的利用率
什么是信号量?信号量(semaphore)的数据结构为一个值和一个指针,指针指向等待该信号量的下一个进程。信号量的值与相应资源的使用情况有关。
当它的值大于0时,表示当前可用资源的数量;
当它的值小于0时,其绝对值表示等待使用该资源的进程个数。
注意,信号量的值仅能由PV操作来改变。
原语是不可中断的过程
互斥信号量的初值一般为1
进程的几种状态:
一般有三个状态:
就绪状态、运行状态、阻塞状态
就绪状态:进程已经具备运行条件,但是CPU还没有分配过来
运行状态:进程占用了CPU,并在CPU上面运行
阻塞状态:进程因等待某件事发生而暂时不能运行
就绪->运行:很好理解,准备好了,CPU有空了,时间片分配给你运行
运行->就绪:进程在CPU一直运行,时间超时,或者优先级不够,CPU就把这个进程踢回去,变成就绪,继续等着
运行->阻塞:正在CPU里面运行, 但是需要其他操作来继续运行,就变成了阻塞状态
阻塞->就绪:进程等待的事情已经发生,变成就绪,等待CPU召唤,CPU不会从阻塞的状态里面挑选,都是从就绪的状态里面挑选
进程被唤醒的意思是进入了就绪状态
进程是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位
关于进程死锁
进程死锁的四个必要条件,都满足的时候才会发生死锁:
1)互斥条件:资源只能被一个进程占用,不能同时被多个进程占用
2)不可抢占条件:进程占用的资源只能自己主动释放,不能被踢出去
3)占有且申请条件:进程已经占有一个资源的情况下,又申请新的资源
4)循环等待条件,存在一个进程等待序列,A进程等待B占有的资源,B又等待A占有的资源
银行家算法是一种死锁避免的算法
周转时间是指从作业提交给系统到作业完成的时间间隔
一种既有利于短小作业又兼顾到长作业的作业调度算法是最高响应比优先
考虑作业等待时间,又考虑作业执行时间的还是高响应比优先
若所有作业同时到达,则平均等待时间最短的算法是短作业优先
平均周转时间是按照任务结束的时间点加起来算的
Shell既是一种命令语言,又是一种程序设计语言
访管指令:
(1)需要有一条指令,能使处理机从目态进入管态,并向操作系统提交要代为完成的工作;
(2)在管态下由操作系统完成用户程序的请求;
(3)操作系统完成所做工作后能返回到用户程序,即从管态回到原来的目态。
解决这个问题要靠访管指令。访管指令本身不是特权指令,其基本功能是让程序拥有“自愿进管”的手段,从而引起访管中断。
所谓特权指令是指有特权权限的指令,由于这类指令的权限最大,如果使用不当,将导致整个系统崩溃。比如:清内存、置时钟、分配系统资源、修改虚存的段表和页表,修改用户的访问权限等。如果所有的程序都能使用这些 指令,那么你的系统一天死机n回就不足为奇了。为了保证系统安全,这类指令只能用于操作系统或其他系统软件,不直接提供给用户使用。因此,特权执行必须在核心态执行。实际上,cpu在核心态下可以执行指令系统的全集。形象地说,特权指令就是 那些儿童不宜的东西,而非特权指令则是老少皆宜。
辅助存储器是什么?
外储存器是指除[计算机]内存及[CPU缓存]以外的储存器,此类储存器一般断电后仍然能保存[数据])。常见的[外存]储器有[硬盘]、[软盘]、[光盘]、U盘等。
Spooling技术:利用高速共享设备(通常是磁鼓或者是磁带)将低速的独享设备模拟为高速的共享设备,这样,从逻辑上讲,计算机系统为每一个用户都分配了一台独立的高速独享设备
SPOOLing是Simultaneous Peripheral Operation On-Line (即外部设备联机并行操作)的缩写,它是关于慢速字符设备如何与计算机主机交换信息的一种技术,通常称为“假脱机技术”。
中断(interrupt)是指程序执行过程中,当发生某个事件时,中止CPU上现行程序的运行,引出处理该事件的服务程序执行的过程
简单点说就是,中断是一个过程。其中,引起中断的事件称为中断源,发现中断源并产生中断的硬件成为中断装置
处理器每执行完一条指令后,硬件的中断装置立即检查有无中断事件发生,若有中断事件发生,则暂停现行进程的执行,而让操作系统的中断处理程序占用处理器,这一过程称为“中断响应”。
是硬件发现,且是执行完一条指令以后
进程的执行状态分为:核心态和用户态。两者的主要区别就在于进程能否获取计算机的所有资源(核心态可以,用户态则受到限制)。凡是涉及到计算机根本运行的事情都应该在内核态下执行而中断、时钟日期、存储映象图都属于系统级(相对应的是用户级)的资源,对这些资源的修改都必须在核心态,但是读取则没有强制要求。
操作系统,并行和共享!
分时——多用户
优先级调度算法:
在[非抢占式]优先数算法下,系统一旦把[处理机]分配给就绪[队列]中优先数最高的进程后,这个进程就会一直运行,直到完成或发生某事件使它放弃处理机,这时系统才能重新将处理机分配给就绪队列中的另一个优先数最高的进程。
在[抢占式]优先数算法下,系统先将[处理机]分配给就绪[队列]中优先数最高的进程度让它运行,但在运行的过程中,如果出现另一个优先数比它高的进程,它就要立即停止,并将处理机分配给新的高优先数进程。
页式虚拟存储系统的逻辑地址是由页号和页内地址两部分组成,地址变换过程如图7-3所示。假定页面的大小为4K,图7-3中所示的十进制逻辑地址8203经过地址变换后,形成的物理地址a应为十进制。
页号: 8203/4096 = 2;页内偏移:8203%4096= 11;物理地址:物理块号*页面大小+ 页内偏移= 28683。
在固定分区管理中,每个分区的大小是可以不同但预先固定长度的
文件控制块FCB是管理文件的数据结构,保存一些管理文件所需的信息目录文件的每个目录项存放文件名,
计算机网络相关:
各种城域网建设方案有几个共同点,那就是:传输介质采用光纤,交换结点采用基于IP交换的高速路由交换机或ATM交换机,在体系结构上采用核心交换层、业务汇聚层与接入层的3层模式,以适应各种业务需求、不同协议与不同类型用户的接入需要。只用到七层模型的底层三层
UDP:不可靠,面向数据报,消息比较短,大量CLIENT,网络负担很重但是响应速度要求高,面向无连接的,可以一对多,多对一
TCP:可靠,三次握手,丢包重发,面向有连接的协议,但是只能是点对点一对一,全双工可靠信道
TCP建立连接要进行3次握手,而断开连接要进行4次
VLAN中,同一逻辑组中的成员不一定要连接在同一个物理网段上
windows NT server 以域为单位,有良好的文件和打印能力,没有优秀的目录
点对点式和广播式有重大区别是,点对点式需要采用分组存储转发和路由选择
误码率是衡量数据在规定时间内数据传输精确性的指标。误码率=传输中的误码/所传输的总码数*100%。如果有误码就有误码率。是数据传输过程中的基本技术参数,另外一个是数据传输速率
NAT(Network Address Translation,网络地址转换),也叫做网络掩蔽或者IP掩蔽。NAT是一种网络地址翻译技术,主要是将内部的私有IP地址(private IP)转换成可以在公网使用的公网IP(public IP)。
ARP:主机发送信息时将包含目标IP地址的ARP请求广播到网络上的所有主机,并接收返回消息,以此确定目标的物理地址;收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源。地址解析协议是建立在网络中各个主机互相信任的基础上的,网络上的主机可以自主发送ARP应答消息,其他主机收到应答报文时不会检测该报文的真实性就会将其记入本机ARP缓存
OSI是国际标准,TCP/IP是“事实上的国际标准”
CSMA/CD(Carrier Sense Multiple Access with Collision Detection,载波侦听多路访问/冲突检测协议),已广泛应用于局域网中。
所谓载波侦听(Carrier Sense),意思是网络上各个工作站在发送数据前都要确认总线上有没有数据传输。若有数据传输(称总线为忙),则不发送数据;若无数据传输(称总线为空),立即发送准备好的数据。
所谓多路访问(Multiple Access),意思是网络上所有工作站收发数据共同使用同一条总线,且发送数据是广播式的。
所谓冲突(Collision),意思是若网上有两个或两个以上工作站同时发送数据,在总线上就会产生信号的混合,这样哪个工作站都辨别不出真正的数据是什么。这种情况称为数据冲突,又称为碰撞。
为了减少冲突发生后的影响,工作站在发送数据过程中还要不停地检测自己发送的数据,看有没有在传输过程中与其他工作站的数据发生冲突,这就是冲突检测(Collision Detected)。
计算机组成原理:
8421码是最常用的有权BCD码,四位二进制为一组,一组转为一个十进制数
颜色数为256色即颜色位数为8bit。进行2D应用时占用显存容量=水平分辨率×垂直分辨率×颜色位数/8bit=1024x1024x8bit/8bit=1048576byte=1MB。
DMA(Direct Memory Access,直接内存存取) 是所有现代电脑的重要特色,它允许不同速度的硬件装置来沟通,而不需要依赖于 CPU 的大量中断负载。否则,CPU 需要从来源把每一片段的资料复制到[暂存器],然后把它们再次写回到新的地方。在这个时间中,CPU 对于其他的工作来说就无法使用。
所谓中断是指CPU对系统发生的某个事件做出的一种反应,CPU暂停正在执行的程序,保留现场后自动地转去执行相应的处理程序,处理完该事件后再返回断点继续执行被“打断”的程序。
中断可分为三类:
第一类是由CPU外部引起的,称作中断,如I/O中断、时钟中断、控制台中断等。
第二类是来自CPU的内部事件或程序执行中的事件引起的过程,称作异常,如由于CPU本身故障(电源电压低于105V或频率在47~63Hz之外)、程序故障(非法操作码、地址越界、浮点溢出等)等引起的过程。
第三类由于在程序中使用了请求系统服务的系统调用而引发的过程,称作“陷入”(trap,或者陷阱)。
前两类通常都称作中断,它们的产生往往是无意、被动的,而陷入是有意和主动的。
对中断请求的整个处理过程是由硬件和软件结合起来而形成的一套中断机构实施的
1.串行链接方式
在串行链接方式下,总线使用权的分配通过三根控制线来实现:总线可用、总线请求和总线忙信号线
所有的功能部件经过一条公共的总线请求信号线向总线控制器发出要求使用总线的请求
2.定时查询方式
采用查询方式的集中式总线控制方式。
查询方式的原理是在总线控制器中设置一个查询计数器。
3.3.独立请求方式
每个部件都有各自的一对总线请求和总线允许线,各部件可以独立地向
控制器发出总线请求
总线已被分配信号线是所有部件公用的。
高速Cache采取随机存取方式
在多体交叉存储器中可知,I/O向主存请求的级别高于CPU访存,这就出现了CPU等待I/O访存的现象,致使CPU空等一段时间,甚至可能等待几个主存周期,从而降低了CPU的工作效率。为了避免CPU与I/O争抢访存,可在CPU与主存之间加一级缓存,这样,主存可将CPU要取的信息提前送至缓存,一旦主存在与I/O交换时,CPU可直接从缓存中读取所需信息,不必空等而影响效率。
从另一角度来看,主存速度的提高始终跟不上CPU的发展。据统计CPU的速度平均每年改进60%,而组成主存的动态RAM速度平均每年只改进7%,结果是CPU和动态RAM之间的速度间隙平均每年增大50%。因此也希望由高速缓存Cache来解决主存与CPU的不匹配问题。
一般Cache采用高速的SRAM制作,其价格比主存贵。
CPU由两部分组成,运算器和控制器,ALU是运算器的一种
原码,第一位是符号位,正数取0,负数取1
反码,正数就是其本身,负数,符号位不变,其他按此取反
补码,正数是其本身,负数符号位不变,其他位取反加一,就是反码的基础上加一