2021届Java开发求职-------面试实战之美团财务实习

一.介绍

暑期实习的面试,看了一下考并发包知识比较多,正好我借机复习一下JUC

二.正文

一面 2h

实习项目难点,搭建框架时候的难点

项目开发过程中遇到的难点,数据标注平台开发 中的逻辑,怎么发现有问题的,标注批次计数?

最近怎么学的 并发,博客,怎么保证博客写的是对的,没有看书吗

4.sychronized底层原理? monitor对象头里面是什么?锁升级?

每个对象有一个监视器锁(monitor)。当monitor被占用时就会处于锁定状态,线程执行monitorenter指令时尝试获取monitor的所有权

对象头,monitor,java并发相关知识

reetrantlock底层原理?AQS的等待队列 线程安全吗?

AQS详解

5.volatile,CAS

可以看我博客的文章

6.为什么要需要 并发安全处理

多个执行线程共享一个资源的情景,是最常见的并发编程情景之一。为了解决访问共享资源错误或数据不一致的问题,人们引入了临界区的概念:用以访问共享资源的代码块,这个代码块在同一时间内只允许一个线程执行。

8. 事务的特性,解释

ACID,

9.事务隔离级别

读未提交,读已提交,可重复读,可串行化

10.存储引擎?Inodb,myisam区别? inodb索引,myisam索引?
  1. InnoDB支持事务,MyISAM不支持,对于InnoDB每一条SQL语言都默认封装成事务,自动提交,这样会影响速度,所以最好把多条SQL语言放在begin和commit之间,组成一个事务;

  2. InnoDB支持外键,而MyISAM不支持。对一个包含外键的InnoDB表转为MYISAM会失败;

  3. InnoDB是聚集索引,使用B+Tree作为索引结构,数据文件是和(主键)索引绑在一起的(表数据文件本身就是按B+Tree组织的一个索引结构),必须要有主键,通过主键索引效率很高。但是辅助索引需要两次查询,先查询到主键,然后再通过主键查询到数据。因此,主键不应该过大,因为主键太大,其他索引也都会很大。

  4. InnoDB不保存表的具体行数,执行select count(*) from table时需要全表扫描。而MyISAM用一个变量保存了整个表的行数,执行上述语句时只需要读出该变量即可,速度很快(注意不能加有任何WHERE条件)

  5. Innodb不支持全文索引,而MyISAM支持全文索引,在涉及全文索引领域的查询效率上MyISAM速度更快高;PS:5.7以后的InnoDB支持全文索引了

  6. InnoDB支持表、行(默认)级锁,而MyISAM支持表级锁

  7. InnoDB表必须有主键(用户没有指定的话会自己找或生产一个主键),而Myisam可以没有

11.*为什么主键要自增,叶子节点key为什么有序?
从业务上说:

在设计数据库时不需要费尽心思去考虑设置哪个字段为主键。然后是这些字段只是理论上是唯一的,例如使用图书编号为主键,这个图书编号只是理论上来说是唯一的,但实践中可能会出现重复的 情况。所以还是设置一个与业务无关的自增ID作为主键,然后增加一个图书编号的唯一性约束。

从技术上说:

如果表使用自增主键,那么每次插入新的记录,记录就会顺序添加到当前索引节点的后续位置,当一页写满,就会自动开辟一个新的页。 总的来说就是可以提高查询和插入的性能。

对InnoDB来说
1: 主键索引既存储索引值,又在叶子节点中存储行的数据,也就是说数据文件本身就是按照b+树方式存放数据的。
2: 如果没有定义主键,则会使用非空的UNIQUE键做主键 ; 如果没有非空的UNIQUE键,则系统生成一个6字节的rowid做主键;
聚簇索引中,N行形成一个页(一页通常大小为16K)。如果碰到不规则数据插入时,为了保持B+树的平衡,会造成频繁的页分裂和页旋转,插入速度比较慢。所以聚簇索引的主键值应尽量是连续增长的值,而不是随机值(不要用随机字符串或UUID)。
故对于InnoDB的主键,尽量用整型,而且是递增的整型。这样在存储/查询上都是非常高效的。

12.最左前缀匹配原则?

mysql优化相关

13.算法题,打印出一个字符串中所有的回文子串

二面:2h(4.11)

程序计数器工作原理?作用?

PC用于存放指令的地址。比如说有两个线程A和B,线程A暂时挂起,CPU去执行其他代码,等到切回线程A时,能定位到下一行执行代码的位置,这就是程序计数器的作用。

JVM调优经历dump之类的操作?

JVM DUMP分析

垃圾收集器CMS工作原理? Concurrent体现在哪?用户停顿?垃圾收集为什么要开启多个线程?

CMS使用标记清除算法进行垃圾回收,Concurrent体现在和用户线程并发执行,获得最短停顿时间,开启多个线程肯定是为了利用多核CPU的性能,提升效率

知道哪些锁?事务隔离级别? 可串行化怎么实现的?

这题如果是数据库方面那就是四种 IX IS X S 可以看本人文章 MYSQL相关
可串行化实现:读数据加互斥锁

索引结构?为什么使用B+索引?

1.单次请求涉及的磁盘IO次数少(出度d大,且非叶子节点不包含表数据,树的高度小);
2.查询效率稳定(任何关键字的查询必须走从根结点到叶子结点,查询路径长度相同);
3.遍历效率高(从符合条件的某个叶子节点开始遍历即可);

查询性能优化?Explain里都能获取什么信息

本人文章 慢查询优化

concurrentHashMap并发原理?扩容机制?

从JDK1.7版本的ReentrantLock+Segment+HashEntry ; JDK1.8版本中synchronized+CAS+HashEntry+红黑树。

线程池?知道哪些具体的线程池?如果自己实现一个线程池都要考虑哪些参数?拒绝策略有哪些?

本人文章有

AQS等待队列为什么设计成双向链表?

在队列同步器中,头节点是成功获取到同步状态的节点,而头节点的线程释放了同步状态后,将会唤醒其他后续节点,后继节点的线程被唤醒后需要检查自己的前驱节点是否是头节点,如果是则尝试获取同步状态。

所以需要设计成双向链表

Arraylist和Linkedlist区别

一个底层是数组,一个是链表,可以侧重说一下 链表和数组的区别

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值