美团电话面试

美团电话面试总结:

1,Java三大特性,封装、继承、多态

2,Java是单继承,但是有很多类似多继承的例子比如?接口..

3,Java类的加载方式,类加载器是什么

4,数据库事务的四个特性,及隔离的几个方式(级别)分别是什么

5,MySQL,innodb如何实现行锁,锁的底层实现原理

6,Java垃圾收集器如何收集,分代策略

7,Spring IoC实现原理

8,Java集合类,List几种,Map几种及其区别

9,图以及图的遍历

10,算法:单链表的反转

查询的参考答案:

1,Java三大特性,封装、继承、多态

      封装可以隐藏实现细节,使得代码模块化;继承可以扩展已存在的代码模块(类);它们的目的都是为了——代码重用。而多态则是为了实现另一个目的——接口重用!多态的作用,就是为了类在继承和派生的时候,保证使用“家谱”中任一类的实例的某一属性时的正确调用。

多态的实现:

(1)、子类重写父类的方法。使子类具有不同的方法实现。

(2)、把父类类型作为参数类型,该父类及其子类对象作为参数转入。

(3)、运行时,根据实际创建的对象类型动态决定使用那个方法。

在运行时,java虚拟机会根据实际创建的对象类型决定使用那个方法。一般将这称为动态绑定

https://blog.csdn.net/fanfanzk1314/article/details/79695102

2,Java是单继承,但是有很多类似多继承的例子比如?

可以类实现多个接口,以及多个接口之间多继承;

可以内部类实现“多继承”,即本类单继承,但其内部有很多类,分别继承不同的类,实现多类的方法功能。

https://blog.csdn.net/rocling/article/details/82350515

3,Java类的加载方式,类加载器是什么

         类加载的过程主要分为三个部分: 加载 链接 初始化      

         而链接又可以细分为三个小部分: 验证 准备 解析

        类加载器是一个用来加载类文件的类。Java源代码通过javac编译器编译成类文件。然后JVM来执行类文件中的字节码来执行程序。类加载器负责加载文件系统、网络或其他来源的类文件。

        有三种默认使用的类加载器:Bootstrap类加载器、Extension类加载器和System类加载器(或者叫作Application类加载器)。 Java提供两种方法来达成动态行,一种是隐式的,另一种是显式的。这两种方式底层用到的机制完全相同,差异只有程序代码不同。隐式的就是当用到new这个Java关键字时,会让类加载器依需求载入所需的类。显式的又分为两种方法:一种是借用java.lang.Class里的forName()方法,另一种则是借用java.lang.ClassLoader里的loadClass()方法。

https://blog.csdn.net/Evankaka/article/details/48596661

4,数据库事务的四个特性,及隔离的几个方式(级别)分别是什么

原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)

MySQL数据库共定义了四种隔离级别:

  1. Serializable(串行化):有写操作时就单线程不允许其他操作(写或者读),可避免脏读、不可重复读、虚读情况的发生。
  2. Repeatable read(可重复读):多次进行同样数据读取内容一样,但不保证数据条数一样,可避免脏读、不可重复读情况的发生。(MySQL默认)
  3. Read committed(读已提交):只能看到事务已提交后的更新值,可避免脏读情况发生。
  4. Read uncommitted(读未提交):事务修改了但未提交,别的事务可以看见修改值,最低级别,以上情https://blog.csdn.net/w_linux/article/details/79666086

5,MySQL数据存储原理,innodb如何实现行锁,锁的底层实现原理

数据库数据存储原理

数据库数据都是以磁盘文件的方式存储到系统当中的,存储方式如下:信息存储在硬盘里,硬盘是由很多的盘片组成,通过盘片表面的磁性物质来存储数据。

       A、访盘请求完成过程

             硬盘在逻辑上被划分为磁道、柱面以及扇区。

            1)确定磁盘地址(柱面号,磁头号,扇区号),内存地址(源 / 目):当需要从磁盘读取数据的时候,系统会将数据的逻辑地址传递个磁盘,磁盘的控制电路按照寻址逻辑将逻辑地址翻译成物理地址,即确定要读的数据在哪个磁道,哪个扇区。

             2)为了读取这个扇区的数据,需要将磁头放到这个扇区上方,为了实现这一点:

              A. 首先必须找到柱面,即磁头需要移动对准相应磁道,这个过程叫做寻道,所耗费时间叫做寻道时间。

              B. 然后目标扇区旋转到磁头下,即磁盘旋转将目标扇区旋转到磁头下,这个过程耗费的时间叫做旋转时间。

              3)即一次访盘请求(读 / 写)完成过程由三个动作组成:

               A. 寻道(时间):磁头移动定位到指定磁道。

               B. 旋转延迟(时间):等待指定扇区从磁头下旋转经过。

               C. 数据传输(时间):数据在磁盘与内存之间的实际传输。

        B、磁盘的读写原理

       系统将文件存储到磁盘上时,按柱面、磁头、扇区的方式进行,即最先是第 1 磁道的第一磁头下的所有扇区,然后是同一柱面的下一个磁头……

         一个柱面存储满后就推进到下一个柱面,直到把文件内容全部写入磁盘。系统也以相同的顺序读出数据,读出数据时通过告诉磁盘控制器要读出扇区所在柱面号、磁头号和扇区号(物理地址的三个组成部分)进行。

        C、减少 I/O 的预读原理

       磁盘读取文件,效率太低,因此需要减少访问磁盘IO的频率。

       磁盘预读原理:      

       磁盘往往不是严格地按需读取,而是每次都会预读,即使只需要一个字节,磁盘也会从这个位置开始,顺序向后读取一定长度的数据放入内存。

https://blog.csdn.net/zhangcanyan/article/details/51439012

InnoDB行锁的实现

依靠意向锁来判断

总结一下就是:

  • IX,IS是表级锁,不会和行级的X,S锁发生冲突。只会和表级的X,S发生冲突
  • 行级别的X和S按照普通的共享、排他规则即可。所以之前的示例中第2步不会冲突,只要写操作不是同一行,就不会发生冲突。

解决完这个疑问,再来回答意向锁的作用。意向锁是在添加行锁之前添加。

当再向一个表添加表级X锁的时候

  • 如果没有意向锁的话,则需要遍历所有整个表判断是否有行锁的存在,以免发生冲突
  • 如果有了意向锁,只需要判断该意向锁与即将添加的表级锁是否兼容即可。因为意向锁的存在代表了,有行级锁的存在或者即将有行级锁的存在。因而无需遍历整个表,即可获取结果

 

参考https://blog.csdn.net/C_J33/article/details/79487941

数据库锁:悲观锁和乐观锁

共享(S)锁:多个事务可封锁一个共享页;任何事务都不能修改该页; 通常是该页被读取完毕,S锁立即被释放。 
排它(X)锁:仅允许一个事务封锁此页;其他任何事务必须等到X锁被释放才能对该页进行访问;X锁一直到事务结束才能被释放。 
更新(U)锁:更新锁在修改操作的初始化阶段用来锁定可能要被修改的资源,这样可以避免使用共享锁造成的死锁现象。因为使用共享锁时,修改数据的操作分为两步,首先获得一个共享锁,读取数据,然后将共享锁升级为排它锁,然后再执行修改操作。这样如果同时有两个或多个事务同时对一个事务申请了共享锁,在修改数据的时候,这些事务都要将共享锁升级为排它锁。这时,这些事务都不会释放共享锁而是一直等待对方释放,这样就造成了死锁。如果一个数据在修改前直接申请更新锁,在数据修改的时候再升级为排它锁,就可以避免死锁。
--------------------- 

数据库锁https://blog.csdn.net/qq_41701956/article/details/81623448

          数据同步需要依赖锁,那锁的同步又依赖谁?synchronized给出的答案是在软件层面依赖JVM,而Lock给出的方案是在硬件层面依赖特殊的CPU指令,大家可能会进一步追问:JVM底层又是如何实现synchronized的?

锁的底层实现原理参考文章:

https://blog.csdn.net/tingfeng96/article/details/52219649

https://blog.csdn.net/javazejian/article/details/72828483

6,Java垃圾收集器如何收集,分代策略

https://blog.csdn.net/qq_34337272/article/details/82177383

7,Spring IoC实现原理

https://blog.csdn.net/qq_22654611/article/details/52606960

8,Java集合类,List几种,Map几种及其区别

Set集合   List列表   Map映射

 ArrayList, LinkedList, Stack, VectorCopyOnWriteArrayList

ConcurrentHashMap,HashMap,Hashtable,TreeMap

HashMap实现原理:https://blog.csdn.net/u011202334/article/details/51496381

ConcurrentHashMap实现原理:https://blog.csdn.net/sihai12345/article/details/79383766

9,图以及图的遍历

10,算法:单链表的反转

设置一个前节点,当前节点,和下一个节点,防止断链

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值