博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
面试题总结
阅读量:3932 次
发布时间:2019-05-23

本文共 3313 字,大约阅读时间需要 11 分钟。

文章目录

在这里插入图片描述
在这里插入图片描述

Spring

1. 你对Spring的了解

  • 轻量级框架
  • 特性:IOC控制反转和AOP面向切面
    • IOC:将创建对象的操作交给spring容器管理,通过Autowired/Resource来注入,由spring创建的对象,作用域有单例(默认)、原型、请求、会话、全局等
    • AOP:在不修改原有业务的基础上,动态织入一些其他业务,最常用的打印日志
  • 单例:会引起多线程安全问题
  • 注解:
    • component和bean的区别

2. SpringBoot运行机制

3. SpringCloud

组件:注册中心eureka,网关zuul,负载均衡ribbon,配置中心config,熔断器…

  • eureka自我保护机制:不会立马挂掉

  • 负载均衡策略:轮询、权重、一致性hash、最小活跃度

  • 熔断器:

Mybatis(ORM框架)

1.缓存有哪几种,通过什么开启

一级缓存:一次查询之后放入一级缓存,下一次直接从缓存中取,能满足日常需求

二级缓存:

​ 开启方式:在mybatis配置文件中开启,并在mybatis.xml中打上cache标签

​ 弊端:不太友好,可使用Redis替代

2. Redis缓存雪崩和缓存穿透

缓存雪崩:大量请求到达数据库;

  • 发生场景:redis中的key大量同时过期,请求直接到达数据库

  • 解决办法:在给key设置过期时间时,不用固定的时间,可使用随机时间;对于热点key,可设置较长过期时间;

缓存穿透:Redis和数据库都没有该数据,导致每次的恶性循环

  • 发生场景:恶意攻击

  • 解决办法:

    • 和Redis结合:即使数据库没有查出数据,也要往Redis里存入一个key;
    • 限制恶意Ip访问;
    • 布隆过滤器

3. xml标签

select、update、where、if、trim、

sql、include

foreach、when

4. 执行器有哪些

5. 动态代理的实现

接口和xml的绑定:

1. xml的namespace指定接口类全路径2. xml中sql的id与接口中方法名一致

4. 嵌套查询和嵌套结果的区别

  • 嵌套查询:
  • 嵌套结果:一条sql就能拿到结果

5. #和$的区别

#防止sql注入

$相当于拼接,会引起sql注入

Mysql

### 1. mysql索引底层数据结构是什么样的

答:

  1. 索引(.frm文件):

    类型:唯一索引、组合索引、聚集索引、非聚集索引

    优点:提高查询效率

    缺点:牺牲了插入删除等性能,因为每次数据变更都需要重新维护索引结构,所以创建的时候对经常变更的字段不应该建立索引

  2. 索引底层数据结构:hash和B+tree

    1. hash不支持范围查询
    2. B+tree支持范围查询
  3. mysql搜索引擎:myisam和innodb,都支持hash和B+tree

    1. myisam没有事务的概念,所以没有隔离级别

2. 搜索引擎

3. 隔离级别

默认可重复读

可重复读:

不可重复读:

脏读:

幻读:

4. 优化

  1. 对常用字段建立索引
  2. 避免编写导致索引失效的sql,比如:

5. 常用函数

count、max、min、

6. 分页

limit(开始索引,条数)

基础

1. cookie和session

  • cookie

    • 保留在客户端,在每次请求时都回传给后台,所以一般情况session依赖于cookie,若客户端禁用cookie,可以使用url携带
    • 存储大小:4k
  • session

    • 由服务器生成和存储的,创建之后返回给客户端,之后再由cookie携带sessionId来认证身份
    • 存储大小:

2. 死锁

3. 统计一个字符串中每个字符出现的次数

字符串转数组,遍历+1

4. String的常用方法

indexof、substring、split、replace、trim、

5. servlet生命周期

加载和实例化——初始化——请求处理——服务终止

6. http/https

http https(http+ssl)
安全性 明文传输,不安全 加密传输,使用会话密钥进行对称加密,减少加密耗费时间
状态 无状态 无状态

img

7. ssl四次握手

客户端 服务端
1.支持的协议版本,比如TLS 1.0版
2.一个客户端生成的随机数,稍后用于生成"对话密钥"
3.支持的加密方法,比如RSA公钥加密
4.支持的压缩方法
1.确认使用的加密通信协议版本,比如TLS 1.0版本。如果浏览器与服务器支持的版本不一致,服务器关闭加密通信。
2.一个服务器生成的随机数,稍后用于生成"对话密钥"
3.确认使用的加密方法,比如RSA公钥加密
4.服务器证书
验证服务器证书
1.一个随机数pre-master key。该随机数用服务器公钥加密,防止被窃听
2.编码改变通知,表示随后的信息都将用双方商定的加密方法和密钥(客户端+服务端+pre-master key)发送
3.客户端握手结束通知,表示客户端的握手阶段已经结束。这一项同时也是前面发送的所有内容的hash值,用来供服务器校验
4.发送证书及相关信息(非必须,如果服务器要求的话,会发送客户端证书)
1.编码改变通知,表示随后的信息都将用双方商定的加密方法和密钥(客户端+服务端+pre-master key)发送
2.服务器握手结束通知,表示服务器的握手阶段已经结束。这一项同时也是前面发送的所有内容的hash值,用来供客户端校验
  • 为什么要有第三个随机数pre-master key的存在?

    答:SSL协议不信任每个主机都能产生完全随机的随机数,如果随机数不随机,那么pre master secret就有可能被猜出来,因此必须引入新的随机因素,那么客户端+服务器+pre-master key三个随机数一同生成的密钥就不容易被猜出了

img

8. tcp/udp/

tcp三次握手、四次挥手

挥手:time_wait主动挥手时才有

tcp udp
共同点 同属于tcp/ip协议簇
是否连接 通信之前要建立安全连接,三次握手连接 无需连接
传输可靠性 可靠 不可靠
速度
数据量 大量 少量

9. 线程的状态

新建、就绪、运行、阻塞、死亡

img

10. 自定义注解

11.Java特性

12. List/Map/Set

13. 怎么打出线程栈信息

思路: 可以说一下jps,top ,jstack这几个命令,再配合一次排查线上问题进行解答。

我的答案:

输入jps,获得进程号。

top -Hp pid 获取本进程中所有线程的CPU耗时性能
jstack pid命令查看当前java进程的堆栈状态
或者 jstack -l > /tmp/output.txt 把堆栈信息打到一个txt文件。
可以使用fastthread 堆栈定位,fastthread.io/

14. 强引用、软引用、弱引用、虚引用的区别?

https://blog.csdn.net/qq_41701956/article/details/100074023 第10点

15. JVM内存模型

线程共享:

​ 方法区:存放字符串常量、静态变量

​ 堆:new的对象

线程私有:

​ 栈:对象的引用地址

​ 本地方法栈:

​ 程序计数器:

16. Java设计模式-单例模式

单例的懒汉、饿汉模式

懒汉模式:在被调用的时候才创建;

饿汉模式:

17. JWT

有三部分组成:头部+载荷+签名

  • 头部header:声明类型+加密算法,然后将头部进行base64加密,构成了第一部分;
  • 载荷payload:存放用户身份信息和jwt过期时间;
  • 签名:需要base64加密后的header和base64加密后的payload使用.连接组成的字符串,然后通过header中声明的加密方式进行加密

​ 完整的头部就像下面这样的JSON:

{
'type': 'JWT', 'alg': 'SHS256'}

缺点:消耗性能

使用session,分布式可能存在的问题:

​ session只有每次请求都在登录的这台服务器上,用户才能认证成功;

​ 解决方式:用Redis集群来存放session

18. springcloud 网关

你可能感兴趣的文章
ubuntu下解决csdn网页打不开的问题
查看>>
uninstall software on ubuntu
查看>>
install kinnect senor on ubuntu
查看>>
calibrate kinnect v1 on ubuntu
查看>>
flann中关于数据的stride
查看>>
cv::Mat ptr 和 at 注意事项
查看>>
cuda更新过后, findcuda找不到怎么办?
查看>>
cast shared_ptr to shared_ptr
查看>>
Elastic Job入门示例-实现DataflowJob接口
查看>>
Elastic Job入门示例-Console控制台
查看>>
Elastic Job入门示例-实现原理介绍
查看>>
HTTP状态码对照表
查看>>
Spring Cloud Feign 服务间调用 -超时
查看>>
MySQL 中事务、事务隔离级别详解
查看>>
Telnet 命令在Windows与Linux/Unix下的区别
查看>>
Java传统IO / NIO基础知识
查看>>
Netty3- 入门示例
查看>>
Netty3 - 多连接的客户端示例
查看>>
Netty3 -会话状态监听
查看>>
Netty3 - 对象的序列化与反序列化ProtoBuf
查看>>