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数据库共定义了四种隔离级别:
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行锁的实现
依靠意向锁来判断
总结一下就是:
解决完这个疑问,再来回答意向锁的作用。意向锁是在添加行锁之前添加。
当再向一个表添加表级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, Vector,CopyOnWriteArrayList
ConcurrentHashMap,HashMap,Hashtable,TreeMap
HashMap实现原理:https://blog.csdn.net/u011202334/article/details/51496381
ConcurrentHashMap实现原理:https://blog.csdn.net/sihai12345/article/details/79383766
9,图以及图的遍历
10,算法:单链表的反转
设置一个前节点,当前节点,和下一个节点,防止断链