个人面经整理中信银行

索引的数据结构

  1. B树
    相对二叉树来说要更矮一些,磁盘io次数更少。
    M阶的B树,任意非叶子结点只有M个儿子。
    非叶子结点的关键字个数=儿子数-1
    所有叶子结点都位于同一层

  2. B+树
    有n颗子树的非叶节点含有n+1个关键字
    叶子结点按照从小到大的顺序连接,叶子结点包含全部的结点信息
    所有的非叶子结点可以看成是索引的一部分,只包括子树中最大或者最小的关键字

B+树和B树的区别
B+树的中间结点不保存数据,磁盘可以容纳更多结点元素,更加的矮胖
B+树更稳定
B+树的查找只需要遍历叶子结点,B树需要中序遍历

堆栈
栈后进先出,是线性结构
堆是树形结构,可以实现优先队列

内存中的堆栈
栈是向下增长的,对是向上增长的
栈分配局部变量,堆分配程序员申请的内存空间
栈由系统自动分配,速度快。堆用new分配,速度慢。

https
在http的基础上通过加密传输和身份认证保证传输的安全性
https在http的基础上加入了SSL层

tcp、udp

static

  1. 全局变量加上static变成静态全局变量。
    没初始化的会自动初始化为0
    在声明他的整个文件可见,在其他文件不可见
    存放在全局区
  2. 局部变量加上static变成静态局部变量
    在全局数据区分配内存。始终驻留在全局数据区,知道程序运行结束。作用域为局部作用域,定义的函数语句块结束的时候作用域随之结束。
  3. 静态函数
    只能在声明他的文件中可见
    定义同名的函数不会冲突
  4. 类里面的数据成员加static就是静态数据成员
    静态数据成员在程序中只有一份拷贝,由所有对象共享访问,静态数据成员的值对每个对象都是一样的。
  5. 静态成员函数
    为整个类服务而不是为某个对象服务。静态成员函数不具有this指针,无法访问类对象的非静态数据成员和非静态成员函数。

java类型
==和equals
==是直接比较两个对象的内存地址,如果相等则是指向同一个对象的地址的
Equals比较的是对象的内容

内存分配
C++分为堆、栈、自由存储区、全局存储区、常量存储区
栈:局部变量在栈上创建,函数执行结束自动释放
堆:程序内存动态分配
自由存储区:
全局区:在程序编译时已经分配好,程序整个运行期都存在
常量存储区:存放的是const,不允许修改

多态
在基类函数前面加上virtual关键字,在派生类中重写该函数,运行时根据实际类型来调用相应的函数,如果对象类型是派生类,就调用派生类函数,如果对象类型是基类,就调用基类函数。
Static变量怎么存

堆栈分配内存

数据库调优

  1. 创建索引,避免全表扫描,在where和order by上建立索引
  2. 避免在索引上使用计算
  3. 尽量将多条sql语句压缩到一条执行(设计到建立网络连接,权限校验等)
  4. 用where替换having,having是把所有的晒出来之后才对结果进行过滤
  5. Select少用*,把列名列出来

数据库表新增一列的sql语句
alter table tableName add newColumn varchar(8) comment ‘新添加的字段’
• STL中的常用容器有哪些

• vector的容量用完了怎么办

• 一个空类的大小是多少
• 左连接和右连接
• left join on/where,具体给了个例子
• 分组查询的条件关键字:having
筛选分组后的各种数据,where是在聚合前先筛选记录的。Group by+having是先聚合再筛选。
单独使用having的作用和where是差不多的。
Group by根据一个或多个列对结果集进行分组。

• 事务的隔离级别,如何实现的?

  1. 读未提交 ,每次读都是最新版本
  2. 读已提交
  3. 可重复读
  4. 串行化, 加锁的方式避免并行访问
    数据库事务在开始的时候会申请一个id,id随着时间递增,先开始的事务id小。

• TCP的三次握手、四次挥手讲一下?
• 数据包出现time wait的情况?
Tcp连接四次挥手关闭连接时,主动关闭连接的以防会在最后一条ack报文后维持一段2msl(最大生存时间)的等待时间才会进入closed状态,这段时间主动关闭连接的一方的状态就是time_wait.
• 进程间的通信方法讲一下?
管道
消息队列
信号量
共享内存

• 死锁讲一下?
两个或者两个以上的线程,由于竞争资源造成通信阻塞,若无外力的作用将无法继续推进。
四个必要条件:
互斥
请求和保持
不可剥夺
循环等待

数据库分页查询如何实现
Mysql 用limit分页

group by怎么过滤数据

实现线程的方式,两种方式什么时候用
进程间通信方式
.常用linux命令
3. 查看进程内存的命令,详细的内容
Ps
Free

3.为什么可用内存较少
5.二叉搜索树
6.快排
2.谈谈对mysql的理解
&&和&的区别
MySQL有几种隔离级别
3) 讲一下堆 和 栈?
4) 指针 和 引用的区别?
5) 你了解数据库吗?数据库搜索引擎有了解吗?
3) 你怎么知道中信银行?如何看待中信银行?
待遇好、氛围好、发展空间大、工作环境好
4) 说三点你觉得中信银行适合你的原因

指针
链表和顺序表
顺序表是在内存中以数组形式保存的线性表
指针指向的是变量的?
继承
一个变量可以继承多个父类吗
C++一个类可以继承多个父类,多重继承

Class和object
对象是对客观事物的抽象,类是对对象的抽象。
对象是类的实例,类是对象的模板。
对象是new 类产生的,调用的是类的构造方法

左连接
进程线程
栈和队列
二叉树的遍历,各种排序,介绍一下冒泡排序以及时间复杂度,递归
事务提交
事物就是一组操作,要么都执行,要么都不执行
事物提交就是事物里所有操作的正常完成
事物回滚是程序或数据恢复到上一次正确状态的行为

New/delete、malloc/free
New和malloc申请动态内存位于堆中,无法被操作系统自动回收,需要用delete和free释放空间
Malloc和free是C/C++的标准库函数,new/delete是C++的运算符。
New会调用构造函数,delete会调用析构函数。而malloc和free不会调用
Malloc只分配内存,不会进行初始化类成员的工作,free也不会调用析构函数
Malloc得到的指针无类型,void*类型必须要强制转化,new的指针是带有类型信息的

猜你喜欢

转载自blog.csdn.net/alike_meng/article/details/106684642