1.自我介绍

2.项目经验介绍
3.zk*机制,可以聊聊Hadoop HA 高可用的原理
4.zk通知机制
5.mr shuffle机制
6.hive数据倾斜
7.一个字段分区一个字段排序 用啥

image.png

8.问了一些kafka的问题,但是kafka回答不好,记不清了

Spring

25个经典的Spring面试问答.html

Sping进阶面试题目

1、介绍一下 Spring MVC 常用的一些注解

在实际项目中,我们最常用的几个注解,包括 @Controller、@RestController、 @RequestMapping、@PathVariable、@RequestParam 以及 @RequestBody,此次主要介绍下这几个注解常用的使用方式和特点
_
@Controller 作用在类上。在SpringMVC中,controller主要负责处理前端控制器(DispatcherServlet )发过来的请求,经过业务逻辑层处理之后封装层一个model,并将其返回给view进行展示。@controller注解通常用于类上,如果结合Thymeleaf模板使用的话,会返回一个页面。如果是前后端分离的项目,则使用@RestController,表明返回的是json格式数据。
@RestController注解里面包含了@Controller注解和@ResponseBody注解,@ResponseBody 注解是将返回的数据结构转换为 JSON 格式,所以说可以这么理解:@RestController = @Controller + @ResponseBody ,省了很多事,我们使用 @RestController 之后就不需要再使用 @Controller 了。

@RequestMapping 是一个用来处理请求地址映射的注解,它可以用于类上,也可以用于方法上。用于类上的注解会将一个特定请求或者请求模式映射到一个控制器之上,表示类中的所有响应请求的方法都是以该地址作为父路径;
value 属性:指定请求的实际地址,value 可以省略不写;
method 属性:指定请求的类型,主要有 GET、PUT、POST、DELETE,默认为 GET。
produces 属性:指定返回内容类型,如 produces = “application/json; charset=UTF-8”。

2、Spring 事务


事务是逻辑上的一组操作,要么都执行,要么都不执行.

原子性: 事务是最小的执行单位,不允许分割。事务的原子性确保动作要么全部完成,要么完全不起作用;
一致性: 执行事务前后,数据保持一致;
隔离性: 并发访问数据库时,一个用户的事物不被其他事物所干扰,各并发事务之间数据库是独立的;
持久性: 一个事务被提交之后。它对数据库中数据的改变是持久的,即使数据库发生故障也不应该对其有任何影响。

Spring并不直接管理事务,而是提供了多种事务管理器
**

  • PlatformTransactionManager: (平台)事务管理器
  • TransactionDefinition: 事务定义信息(事务隔离级别、传播行为、超时、只读、回滚规则)
  • TransactionStatus: 事务运行状态

在典型的应用程序中,多个事务并发运行,经常会操作相同的数据来完成各自的任务(多个用户对统一数据进行操作)。并发虽然是必须的,但可能会导致一下的问题。

脏读(Dirty read): 当一个事务正在访问数据并且对数据进行了修改,而这种修改还没有提交到数据库中,这时另外一个事务也访问了这个数据,然后使用了这个数据。因为这个数据是还没有提交的数据,那么另外一个事务读到的这个数据是“脏数据”,依据“脏数据”所做的操作可能是不正确的。

丢失修改(Lost to modify): 指在一个事务读取一个数据时,另外一个事务也访问了该数据,那么在第一个事务中修改了这个数据后,第二个事务也修改了这个数据。这样第一个事务内的修改结果就被丢失,因此称为丢失修改。

例如:事务1读取某表中的数据A=20,事务2也读取A=20,事务1修改A=A-1,事务2也修改A=A-1,最终结果A=19,事务1的修改被丢失。

不可重复读(Unrepeatableread): 指在一个事务内多次读同一数据。在这个事务还没有结束时,另一个事务也访问该数据。那么,在第一个事务中的两次读数据之间,由于第二个事务的修改导致第一个事务两次读取的数据可能不太一样。这就发生了在一个事务内两次读到的数据是不一样的情况,因此称为不可重复读。

幻读(Phantom read): 幻读与不可重复读类似。它发生在一个事务(T1)读取了几行数据,接着另一个并发事务(T2)插入了一些数据时。在随后的查询中,第一个事务(T1)就会发现多了一些原本不存在的记录,就好像发生了幻觉一样,所以称为幻读。

image.png

https://blog.csdn.net/u013490280/article/details/82598097 Spring事务面试题

3、Spring拦截器

https://blog.csdn.net/baichoufei90/article/details/82938530

Spring拦截器Interceptor的使用

Spring过滤器和拦截器的区别

JAVA

https://blog.csdn.net/sufu1065/article/details/88051083

1、JAVA基本数据类型

Java语言提供了八种基本类型。六种数字类型(四个整数型,两个浮点型),一种字符类型,还有一种布尔型。

byte:

  • byte 数据类型是8位、有符号的,以二进制补码表示的整数;
  • 最小值是 -128(-2^7)
  • 最大值是 127(2^7-1)
  • 默认值是 0
  • byte 类型用在大型数组中节约空间,主要代替整数,因为 byte 变量占用的空间只有 int 类型的四分之一;
  • 例子:byte a = 100,byte b = -50。

short:

  • short 数据类型是 16 位、有符号的以二进制补码表示的整数
  • 最小值是 -32768(-2^15)
  • 最大值是 32767(2^15 - 1)
  • Short 数据类型也可以像 byte 那样节省空间。一个short变量是int型变量所占空间的二分之一;
  • 默认值是 0
  • 例子:short s = 1000,short r = -20000。

int:

  • int 数据类型是32位、有符号的以二进制补码表示的整数;
  • 最小值是 -2,147,483,648(-2^31)
  • 最大值是 2,147,483,647(2^31 - 1)
  • 一般地整型变量默认为 int 类型;
  • 默认值是 0
  • 例子:int a = 100000, int b = -200000。

long:

  • long 数据类型是 64 位、有符号的以二进制补码表示的整数;
  • 最小值是 -9,223,372,036,854,775,808(-2^63)
  • 最大值是 9,223,372,036,854,775,807(2^63 -1)
  • 这种类型主要使用在需要比较大整数的系统上;
  • 默认值是 0L
  • 例子: long a = 100000L,Long b = -200000L。
    “L”理论上不分大小写,但是若写成”l”容易与数字”1”混淆,不容易分辩。所以最好大写。

float:

  • float 数据类型是单精度、32位、符合IEEE 754标准的浮点数;
  • float 在储存大型浮点数组的时候可节省内存空间;
  • 默认值是 0.0f
  • 浮点数不能用来表示精确的值,如货币;
  • 例子:float f1 = 234.5f。

double:

  • double 数据类型是双精度、64 位、符合IEEE 754标准的浮点数;
  • 浮点数的默认类型为double类型;
  • double类型同样不能表示精确的值,如货币;
  • 默认值是 0.0d
  • 例子:double d1 = 123.4。

boolean:

  • boolean数据类型表示一位的信息;
  • 只有两个取值:true 和 false;
  • 这种类型只作为一种标志来记录 true/false 情况;
  • 默认值是 false
  • 例子:boolean one = true。

char:

  • char类型是一个单一的 16 位 Unicode 字符;
  • 最小值是 \u0000(即为0);
  • 最大值是 \uffff(即为65,535);
  • char 数据类型可以储存任何字符;
  • 例子:char letter = ‘A’;。

2.GC

https://blog.csdn.net/csdn_aiyang/article/details/72876272

GC的两个职能:1.检测垃圾、2.回收垃圾**。

image.png

Java虚拟机(JVM)你只要看这一篇就够了!

image.png

image.png

MySQL

事务、索引、存储过程、锁

mysql 常见面试题

mysql 基础面试题

一、为什么用自增列作为主键

1、如果我们定义了主键(PRIMARY KEY),那么InnoDB会选择主键作为聚集索引。
如果没有显式定义主键,则InnoDB会选择第一个不包含有NULL值的唯一索引作为主键索引。
如果也没有这样的唯一索引,则InnoDB会选择内置6字节长的ROWID作为隐含的聚集索引(ROWID随着行记录的写入而主键递增,这个ROWID不像ORACLE的ROWID那样可引用,是隐含的)。
2、数据记录本身被存于主索引(一颗B+Tree)的叶子节点上,这就要求同一个叶子节点内(大小为一个内存页或磁盘页)的各条数据记录按主键顺序存放
因此每当有一条新的记录插入时,MySQL会根据其主键将其插入适当的节点和位置,如果页面达到装载因子(InnoDB默认为15/16),则开辟一个新的页(节点)
3、如果表使用自增主键,那么每次插入新的记录,记录就会顺序添加到当前索引节点的后续位置,当一页写满,就会自动开辟一个新的页
4、如果使用非自增主键(如果身份证号或学号等),由于每次插入主键的值近似于随机,因此每次新纪录都要被插到现有索引页得中间某个位置
此时MySQL不得不为了将新记录插到合适位置而移动数据,甚至目标页面可能已经被回写到磁盘上而从缓存中清掉,此时又要从磁盘上读回来,这增加了很多开销
同时频繁的移动、分页操作造成了大量的碎片,得到了不够紧凑的索引结构,后续不得不通过OPTIMIZE TABLE来重建表并优化填充页面。

二、为什么使用数据索引能提高效率

**

  1. 数据索引的存储是有序的
  2. 在有序的情况下,通过索引查询一个数据是无需遍历索引记录的
  3. 极端情况下,数据索引的查询效率为二分法查询效率,趋近于 log2(N)

基础问题

  1. concurrenthashmap源码(分段锁和CAS)
  2. hashmap与concurrenthashmap的区别
  3. 死锁
  4. tcp/ip体系结构
  5. tcp三次握手,二次会发生什么
  6. HTTP/1.0与HTTP/1.1的区别
  7. 长连接和短连接
  8. 判断链表有环
  9. hashset源码
  10. 设计一种hashmap缓存
  11. 设计模式
  12. 取火柴问题

    腾讯

  13. 项目相关

  14. 内部类
  15. static
  16. 类加载
  17. 内存泄漏
  18. GC
  19. 智力题

    京东

  20. 项目相关

  21. HashMap是线程安全吗?
  22. hashmap源码
  23. Concurrenthashmap为什么线程安全?
  24. java如何实现线程安全
  25. 单例模式
  26. volatile

    数太奇

  27. 项目相关

  28. SpringMVC过程
  29. 冒泡排序
  30. 快速排序
  31. 将200w数据去重排序

    方正国际

  32. SpringBoot是什么

  33. redis里存放的是什么
  34. mysql和redis一致
  35. 注册和登录怎么实现的
  36. 密码加密怎么实现的
  37. nginx的Session共享
  38. 异步怎么实现的
  39. redis持久化
  40. map有有序的吗

    东方畅享

  41. 项目相关

  42. dao层怎么实现
  43. spring中都用了哪些库
  44. 接口怎么实现

    佳龙集团

  45. 常见的数据结构介绍一下

  46. hashmap介绍一下
  47. 快排
  48. 冒泡
  49. 斐波那契数列
  50. 判断回文数
  51. 约瑟环
  52. springmvc生命周期
  53. restful了解吗
  54. 分布式缓存

    长城软件

  55. 登陆模块怎么做的

  56. 项目部署在tomcat步骤
  57. tomcat启动流程
  58. 介绍下redis
  59. 异步处理是怎么实现的

    星宇联合

  60. ==和equals的区别

  61. arrarylist和linkedlist区别
  62. synchronized
  63. 单例模式
  64. sql查询

    用友

  65. spring ioc用到的注解

  66. 未登陆用户拦截
  67. sql左连接和右连接
  68. 消息队列怎么实现的
  69. spring bean用到的注解

    每日优鲜

  70. 快排

  71. sql左连接和右连接
  72. mysql的索引
  73. b+树介绍一下
  74. redis的list是什么数据结构
  75. linux的常用操作
  76. mybatis的注解
  77. 多线程的实现
  78. 线程池的配置
  79. linux怎么查找一个文件中数据

    小米

  80. 赞踩功能是怎么实现的

  81. 为什么赞踩要用消息队列
  82. 消息队列怎么实现的
  83. synchronized和volatile
  84. synchronized实现原理
  85. volatile可见性
  86. 线程池有哪几种
  87. 具体怎么用
  88. 说下常用设计模式
  89. 单例模式在项目中有用到吗
  90. 观察者模式说一下
  91. get和post区别
  92. tcp三次握手
  93. rcp了解吗
  94. 为什么不是两次和四次握手
  95. jvm内存模型
  96. jvm垃圾收集器
  97. gc算法
  98. linux查找一个文件中的某个字
  99. linux的ping命令是什么
  100. linux常用的命令
  101. maven常用命令
  102. git常用命令
  103. mysql的引擎
  104. 各个引擎的区别
  105. innodb实现原理
  106. 异常的分类
  107. http了解多少
  108. https
  109. ca证书里有什么
  110. 滑动窗口和拥塞控制
  111. 长连接和短连接
  112. cookie和session区别
  113. cookie欺诈
  114. 最小字典序

    沪江

  115. hashmap

  116. linkedlist
  117. 单例模式
  118. 快排
  119. json格式
  120. 多线程实现
  121. 线程池
  122. string可变吗?
  123. final
  124. 登陆怎么实现的
  125. 如何判断用户已经登陆
  126. jdbc连接过程

    借贷宝

  127. 登陆模块怎么实现的

  128. mybatis映射
  129. springmvc用到的注解
  130. restful
  131. c中的指针是什么
  132. java中为什么没有
  133. ajax
  134. 什么是异步
  135. mysql数据库引擎
  136. innodb和myisam的区别

    芯智引擎

  137. 说下你知道的数据结构

  138. 红黑树能写出来吗?
  139. 红黑树的特点
  140. b树
  141. 图在代码中怎么表示
  142. 怎么求图中两节点最短距离
  143. 说下基于比较的排序有哪些
  144. 各个排序的时间复杂度
  145. 线程池
  146. 线程同步
  147. synchronized实现原理
  148. monitor实现原理
  149. osi七层模型
  150. 各层模型的协议
  151. java中集合类
  152. 集合类运用场景
  153. 操作系统,知道啥
  154. 页面置换算法
  155. 进程线程
  156. 死锁