银行笔试面试题整理

5 篇文章 0 订阅
3 篇文章 0 订阅

1、c++三大特性

封装、继承、多态。
多态的定义:指允许不同类的对象对同一消息做出响应。即同一消息可以根据发送对象的不同而采用多种不同的行为方式。(发送消息就是函数调用)实现多态的技术称为:动态绑定(dynamic binding),是指在执行期间判断所引用对象的实际类型,根据其实际的类型调用其相应的方法。
多态存在的三个必要条件
一、要有继承;
二、要有重写;
三、父类引用指向子类对象。

2、OSI七层模型

  • 1.物理层:通过媒介传输比特,确定机械和电气规范。(比特bit)
    2.数据链路层:将比特组装成帧和点对点的传递。(帧frame)

    3.网络层:负责数据包从源到宿的传递和网际互联。(包packet)

    4.传输层:提供端对端的可靠的报文传递和错误恢复。(段seqment)

    5.会话层:会话的创建,管理和销毁。(会话协议数据单元SPDU)

    6.表现层:对数据进行解析,翻译,加密,压缩。(表示协议数据单元PPDU)

    7.应用层:允许访问OSI环境操作。(应用协议数据单元APDU)

3、数据库事务的四大特性

原子性、一致性、隔离性、持久性
原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚。
隔离性是指当多个用户并发访问数据库时,比如同时访问一张表,数据库每一个用户开启的事务,不能被其他事务所做的操作干扰,多个并发事务之间,应当相互隔离。

4、编程题

题目:
某人在银行排队等号时,观察到以下场景。
银行有m个服务窗口,假设当前有n个人等待办理业务,那么这n个人会被顺序分配一个从1到n的号码。
等待办理业务的流程如下:
从第1号到第n号顺序的进行排队。
假设当前第1号到第i-1号都正在办理或已经办理完业务,且某个窗口A没有客人正在办理业务,那么第i号会马上到窗口A办理他的业务。
如果有多个这样的窗口,第i号会随意选择一个窗口。
在0时刻,他观察到m个窗口都没有客人正在办理业务,而n个人正在等待办理业务。
为了简化问题,假设第i号不管在哪个窗口办理业务,办理业务的时间都为ai。想知道有多少对(i,j),满足1≤i<j≤n,且第i号办理业务完成的时间严格大于第j号办理业务完成的时间。

class Solution {
    long long cnt;
    void merge(vector<long long>& t, int b, int mid, int e){
        if(b >= e)
            return;
        vector<long long> L(t.begin()+b, t.begin()+mid+1);
        vector<long long> R(t.begin()+mid+1, t.begin()+e+1);
        int i = 0;
        int j = 0;
        int k = b;
        while(i<L.size() && j<R.size()){
            if(L[i]<=R[j]){
                t[k] = L[i];
                cnt += j;
                ++i;
            }
            else{
                t[k] = R[j];;
                ++j;
            }
            ++k;
        }
        while(i<L.size()){
            cnt += j;
            t[k] = L[i];
            ++k;
            ++i;
        }
        while(j<R.size()){
            t[k] = R[j];
            ++k;
            ++j;
        }
    }
    void mergeSort(vector<long long>& t, int b, int e){
        if(b >= e)
            return;
        int mid = b + (e-b)/2;
        mergeSort(t, b, mid);
        mergeSort(t, mid+1, e);
        merge(t, b, mid, e);
    }
public:
    /**
     * 求解合法的(i,j)对的数量
     * @param n int整型 n个人
     * @param m int整型 m个窗口
     * @param a int整型vector 长度为n的vector,顺序表示1-n号客人的办理业务所需时间
     * @return long长整型
     */
    long long getNumValidPairs(int n, int m, vector<int>& a) {
        // write code here
        vector<long long> tmp(m, 0);
        priority_queue<long long, vector<long long>, greater<long long> > pq(tmp.begin(), tmp.end());

        vector<long long> t(n);
        for(int i=0; i<n; ++i){
            long long tmp = pq.top() + a[i];
            t[i] = tmp;
            pq.pop();
            pq.push(tmp);
        }
        cnt = 0;
        mergeSort(t,0,n-1);
        return cnt;
    }
};

5、==和equals的区别

1、功能不同

"=="是判断两个变量或实例bai是不是指向同一个内存空间。

"equals"是判断两个变量或实例所指向的内存空间的值是不是相同。

2、定义不同

"equals"在JAVA中是一个方法。

"=="在JAVA中只是一个运算符合。
3、运行速度不同

equals()没有==运行速度快。因为双等于只是比较引用。

6、&&和&的区别

Java中&&和&都是表示du与的逻辑运算符,都表示逻辑运输符and,当两边的表达式都为true的时候,整个运算结果才为true,否则为false。
&&的短路功能,当第一个表达式的值为false的时候,则不再计算第二个表达式;&则两个表达式都执行。
&可以用作位运算符,当&两边的表达式不是Boolean类型的时候,&表示按位操作。

7、hashmap安全吗?不安全的话哪个map安全?

不安全。
HashMap之所以线程不安全,就是resize这里出的问题。
HashMap在put的时候,插入的元素超过了容量(由负载因子决定)的范围就会触发resize扩容操作,扩容操作中,在多线程的环境下,存在同时其他的元素也在进行扩容过程的put操作,可能会导致 原来的链表形成一个循环链表, 然后进行get操作时 就可能引起死循环(cpu100%)。

8、String是基本数据类型吗

string在Java中是引用类型。
java中的基本类型一共有8个,它们分别为:
1 字符类型:byte,char
2 基本整型:short,int,long
3 浮点型:float,double
4 布尔类型:boolean

9、函数的形参是对象的话是值传递还是引用传递

Java 编程语言只有值传递参数。当一个对象实例作为一个参数被传递到方法中时,参数的值就是该对象的引用一个副本。指向同一个对象,对象的内容可以在被调用的方法中改变,但对象的引用(不是引用的副本)是永远不会改变的。
基本数据类型传递的是形参,形参不影响实参;引用数据类型传递的是地址,形参在方法内被改变,实参也会改变,若在方法内实例化了同名对象,即产生了新的地址,对这个同名对象的改变,由于地址不一样,所以不影响原来的对象。

10、ArrayList和LinkedList的区别

1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。

2.对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。

3.对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。

11、MySQL有几种隔离级别

1、读未提交内容;2、读取提交内容;3、可重复读;4、可串行化。

12、Linux的常用指令

1、ls命令
就是 list 的缩写,通过 ls 命令不仅可以查看 linux 文件夹包含的文件,而且可以查看文件权限(包括目录、文件夹、文件权限)查看目录信息等等。
2、cd 命令
cd [目录名]
切换当前目录至 dirName。
3、pwd 命令
pwd 命令用于查看当前工作目录路径。
4、mkdir 命令
用于创建文件夹。
5、rm 命令
删除一个目录中的一个或多个文件或目录,如果没有使用 -r 选项,则 rm 不会删除目录。如果使用 rm 来删除文件,通常仍可以将该文件恢复原状。
6、rmdir 命令
从一个目录中删除一个或多个子目录项,删除某目录时也必须具有对其父目录的写权限。
注意:不能删除非空目录。
7、mv 命令
移动文件或修改文件名,根据第二参数类型(如目录,则移动文件;如为文件则重命令该文件)。
当第二个参数为目录时,第一个参数可以是多个以空格分隔的文件或目录,然后移动第一个参数指定的多个文件到第二个参数指定的目录中。
8、cp 命令
将源文件复制至目标文件,或将多个源文件复制至目标目录。
注意:命令行复制,如果目标文件已经存在会提示是否覆盖,而在 shell 脚本中,如果不加 -i 参数,则不会提示,而是直接覆盖!
9、cat 命令

  • 1.一次显示整个文件: cat filename
    2.从键盘创建一个文件: cat > filename 只能创建新文件,不能编辑已有文件。
    3.将几个文件合并为一个文件: cat file1 file2 > file

10、more 命令
功能类似于 cat, more 会以一页一页的显示方便使用者逐页阅读,而最基本的指令就是按空白键(space)就往下一页显示,按 b 键就会往回(back)一页显示。
11、less 命令
less 与 more 类似,但使用 less 可以随意浏览文件,而 more 仅能向前移动,却不能向后移动,而且 less 在查看之前不会加载整个文件。
12、head 命令
head 用来显示档案的开头至标准输出中,默认 head 命令打印其相应文件的开头 10 行。
13、tail 命令
用于显示指定文件末尾内容,不指定文件时,作为输入信息进行处理。常用查看日志文件。
14、find 命令
用于在文件树中查找文件,并作出相应的处理。
15、chmod 命令
用于改变 linux 系统文件或目录的访问权限。用它控制文件或目录的访问权限。该命令有两种用法。一种是包含字母和操作符表达式的文字设定法;另一种是包含数字的数字设定法。
每一文件或目录的访问权限都有三组,每组用三位表示,分别为文件属主的读、写和执行权限;与属主同组的用户的读、写和执行权限;系统中其他用户的读、写和执行权限。
16、grep 命令
强大的文本搜索命令,grep(Global Regular Expression Print) 全局正则表达式搜索。
在一个或多个文件中搜索字符串模板。如果模板包括空格,则必须被引用,模板后的所有字符串被看作文件名。搜索的结果被送到标准输出,不影响原文件内容。
13、面向对象是什么 有什么用途 封装的用途
面向对象的三大特征是抽象、继承、多态。
优点:模块化、可扩充、代码重用。

14、查出数据库中两条完全相同的数据、增删改查

select * from noid a group by id,name,age having count(*)>0
增insert删delete改update查select

15、数据库锁

MySQL大致可归纳为以下3种锁:

  • 表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低。
    行级锁:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高。
    页面锁:开销和加锁时间界于表锁和行锁之间;会出现死锁;锁定粒度界于表锁和行锁之间,并发度一般。

从数据库系统角度分为三种:排他锁、共享锁、更新锁。

  • 共享锁(Share Lock) S锁,也叫读锁,用于所有的只读数据操作。共享锁是非独占的,允许多个并发事务读取其锁定的资源。
    排他锁(Exclusive Lock)
    X锁,也叫写锁,表示对数据进行写操作。如果一个事务对对象加了排他锁,其他事务就不能再给它加任何锁了。 更新锁
    U锁,在修改操作的初始化阶段用来锁定可能要被修改的资源,这样可以避免使用共享锁造成的死锁现象。

16、重写、重载

重写(Override)是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。即外壳不变,核心重写!
重载(overloading) 是在一个类里面,方法名字相同,而参数不同。返回类型可以相同也可以不同。每个重载的方法(或者构造函数)都必须有一个独一无二的参数类型列表。最常用的地方就是构造器的重载。

17、sleep和wait区别

1、这两个方法来自不bai同的类分别是duThread和Object
2、最主要是sleep方法没zhi有释dao放锁,而wait方法释放了锁,使得容其他线程可以使用同步控制块或者方法。
3、wait,notify和notifyAll只能在同步控制方法或者同步控制块里面使用,而sleep可以在任何地方使用(使用范围)
4、sleep必须捕获异常,而wait,notify和notifyAll不需要捕获异常
5、sleep是Thread类的静态方法。sleep的作用是让线程休眠制定的时间,在时间到达时恢复,也就是说sleep将在接到时间到达事件事恢复线程执行。wait是Object的方法,也就是说可以对任意一个对象调用wait方法,调用wait方法将会将调用者的线程挂起,直到其他线程调用同一个对象的notify方法才会重新激活调用者。

18、封装

将抽象性函式接口的实现细节部分包装、隐藏起来,防止该类的代码和数据被外部类定义的代码随机访问。要访问该类的代码和数据,必须通过严格的接口控制。
封装最主要的功能在于我们能修改自己的实现代码,而不用修改那些调用我们代码的程序片段。适当的封装可以让程式码更容易理解与维护,也加强了程式码的安全性。
封装的优点:

  1. 良好的封装能够减少耦合。

  2. 类内部的结构可以自由修改。

  3. 可以对成员变量进行更精确的控制。

  4. 隐藏信息,实现细节。

19、编程调试

选择一个编程软件:c语言用的Visual C++,写前端用的visual studio code。
在重要的代码位置加断点,开始调试。
查看和修改变量的值。
如果还没得到想要的结果,就进行逐语句调试和逐过程调试。

20、完全图

在无向图中,若每对顶点之间都有一条边相连,则称该图为完全图
在有向图中,若每对顶点之间都有二条有向边相互连接,则称该图为完全图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值