招银面经合集java(自看)

数据库

  1. 用过数据库吗?索引?优缺点?MySQL,索引是帮助mysql快速查找排好序的数据结构,优点:降低排序成本,减少CPU消耗;提高查询效率,降低io成本,缺点:索引是一个表,主键和索引字段指向实体表记录,占空间;增删效率低,需要改索引信息;数据量较大的表需要大量时间创建最优索引
  2. 不适合建索引的情况:频繁增删改的字段,where中用不到的字段,sql表记录太少,具有较多重复内容的字段(唯一性差)
  3. 适合建索引的:主键自动建立索引,查询频繁的字段,外键关联字段,组合索引,需要排序的字段,分组字段
  4. 存储引擎
  • innodb 索引和数据一起存放,支持事务并实现SQL四个隔离级别,支持行锁和表锁,支持外键,适合增删改较多的字段(以及大数据)
  • myisam 非聚集:索引和数据分开存放,不支持事务,支持表锁,不支持外键,适合大量查询,读性能好
  1. 左连接,右连接,内连接,全外连接?左连接:左表全部记录与右表连接字段相同的记录;右连接:右表全部记录与左表连接字段相同的记录;内连接:左右表连接字段相同的行数;全外连接:左表右表全部记录和左右表连接字段相同的记录
  2. 子查询:select嵌套select
  3. redis为什么读取快:完全基于内存(相对于数据库少了内存到硬盘的步骤,数据存在内存中,查找操作O(1));数据结构简单,对数据操作也简单;多路复用io模型,非阻塞;单线程,避免进程/线程切换消耗的CPU,不存在加锁释放锁的操作,避免不必要的上下文切换和竞争条件;使用底层模型不同,自己的VM机制
  4. 多路I/O复用模型:利用select、poll、epoll监察多个流I/O时间的能力,空闲时将线程阻塞,有一个或多个IO事件时,从阻塞中唤醒
  5. 缓存击穿,缓存雪崩,缓存穿透
  6. sql注入:是web应用程序对用户输入的数据合法性没有判断或校验不足,攻击者可以在查询语句结尾加上额外的SQL语句,实现非法操作;广泛性,隐蔽性(一般嵌入在普通HTTP请求中),危害大,简单

计算机网络

1. 301,404,500?
301:永久重定向,将一个url重定向到新的url下,资源永久移动;302:临时重定向,在未登录时访问个人中心,临时重定向到登陆页面
400:请求有语法错误,不能被服务器识别;402:预留支付类的错误代码(虚拟货币可能使用) 403:服务器收到请求但拒绝提供服务(认证失败)404:请求资源不存在;
500:服务器内部发生错误,web不能执行操作
2. TCP如何确保可靠性传输,信息传递时一方突然断开,服务器如何判断,报文格式是什么?
校验和;超时重传;序列号和确认报文;拥塞控制(滑动窗口);流量控制;
服务器有个计时保活器,当一定时间没有接受到客户端传来的消息时,服务器发送探测报文段,发送10次没有应答后,关闭连接。
TCP报文:源端口,目的端口,序列号,应答号,数据偏移,标志位(ACK,FIN,SYN,RST),窗口,校验和,紧急指针,padding
IP首部+IP数据报数据部分(TCP首部+TCP报文段数据部分)
3. url到页面的过程
DNS域名解析:浏览器缓存——系统缓存(hosts文件)——路由器缓存(路由器映射表)——本地DNS服务器(LDNS)——其他服务器(直到根服务器)
TCP连接(三次握手)
发送HTTP请求,接受HTTP响应  request请求报文:请求行(请求方式+HTTP版本+url路径) 请求头(主机号,浏览器的设置信息) 空行 消息体
response响应报文:状态行(状态码、http版本、状态说明) 响应头(内容格式、服务器信息) 空行 消息体
浏览器解析服务端发送的数据,进行页面渲染
4. TCP和UDP区别:
TCP 可靠性、面向字节流、有连接、全双工、传输速率慢、拥塞控制——慢开始拥塞避免快重传快恢复
UDP 不可靠、面向报文、无连接、一对一一对多多对一多对多、传输速率快
5. request库中有哪些HTTP请求方式
get post put delete request head(获取报头,类似于get,没有具体内容) patch
6. http get和post区别
get 在地址栏(url)进行传输,安全性低,效率高,有长度限制(1024),从服务端获取资源
post 在报文中进行传输,安全性高,效率低,理论上没有长度限制,有一些特殊字符时需要用post传输,向服务端传递资源
7. http和https的区别
http 端口80,连接无状态,明文传输,不需要认证证书
https 端口443,由SSL和HTTP协议构建的可加密传输、身份认证的网络协议,更加安全,需要认证证书


LINUX

1. 常用指令:
top 性能分析工具,实时显示进程所占资源状况(类似任务管理器)
find 查找文件
cd 切换当前目录   ls展示文件夹内容   cp复制文件  mv移动文件、目录、更名   rm删除文件或目录  mkdir 创建目录
grep 分析一行的信息
ps查看进程运行情况
kill 终止进程
file 判断文件的基本数据
tar 对文件进行打包
cat 查看文件内容

JVM

  1. 堆和栈的区别
堆:内存共享,是GC回收的主要内容,主要存放对象,数组,存取慢,动态分配内存
栈:内存不共享,对象的引用,局部变量,基本数据类型,存取快,栈内存生命周期结束自动释放内存
方法区:静态区,内存共享,包含class和static变量
2. OOM

数据结构

1. 树的遍历:前序遍历,中序遍历,后序遍历  深度优先遍历DFS(栈实现)优先纵向挖掘深入

做题

1.给一个学生表,写出查询语句(语文和数学同时及格的名字和学号)SELECT sname,sid FROM stu WHERE chinese>=60 AND math>=60;
2.给一个成绩表,查找一个班级里平均分大于90的学生姓名 SELECT sname FROM stu WHERE score>(select AVG(score) from stu);
3.测试一个刷脸支付的平板,你认为应该测试哪些方面?功能:正常距离使用刷脸设备,正对屏幕摄像头是否可刷脸支付。安全:低头玩手机,路过,照片,偷刷别人的脸。UI,易用,性能,兼容,弱网和突然断网情况下
4.手机银行转账的测试用例:根据业务功能编写测试计划  转账金额大于等于小于余额,转账金额有没有限制,字段校验(非数字、负数、边界值、SQL相关字符,空),正常测试,取消转账,密码错误、余额不足,转账成功,兼容测试,弱网,断网下测试
5.一张员工表:员工姓名,部门号,薪水, 查各部门平均薪水 SELECT AVG(sal) a_sal, job FROM emp GROUP BY job; 查大于部门‘a’平均薪水的部门SELECT j.job FROM (SELECT AVG(sal) asal, job FROM emp GROUP BY job) j WHERE j.asal > (SELECT AVG(sal) a_sal FROM emp WHERE job = 'a');
6.给定 a b c 输出a b c ab ac bc abc
    public static void main(String[] args) {
        List<String> list = new ArrayList<String>(Arrays.asList("A", "B", "C", "D"));
        getFullAssembly(list);
    }
 
    public static void getFullAssembly(List<String> list) {
        int size = list.size();
        for (int i = 1; i <= (1 << size) - 1; i++) {
            StringBuffer stringBuffer = new StringBuffer();
            for (int j = 0; j < size; j++) {
                if (((i >> j) & 1) == 1) {
                    stringBuffer.append(list.get(j));
                    // 001 得到A
                    // 011 先取list.get(0)再取list.get(1),即AB
                }
            }
            System.out.println(stringBuffer.toString());
        }
    }
思路:当n大于2时,n个数的全组合一共有(2^n)-1种。
当对n个元素进行全组合的时候,可以用一个n位的二进制数表示取法。
1表示在该位取,0表示不取。例如,对ABC三个元素进行全组合,
100表示取A,010表示取B,001表示取C,101表示取AC
110表示取AB,011表示取BC,111表示取ABC
注意到表示取法的二进制数其实就是从相对应的十进制数
全部评论

相关推荐

3 38 评论
分享
牛客网
牛客企业服务