Java知识

1,Object有哪些方法

2,重写equals方法的时候为啥要重写hashcode?

equals要满足以下规则

  • 自反性:  x.equals(x) 一定是true
  • 对null:  x.equals(null) 一定是false
  • 对称性:  x.equals(y)  和  y.equals(x)结果一致
  • 传递性:  a 和 b equals , b 和 c  equals,那么 a 和 c也一定equals。
  • 一致性:  在某个运行时期间,2个对象的状态的改变不会影响equals的决策结果,那么,在这个运行时期间,无论调用多少次equals,都返回相同的结果。

导致两个相同的实例具有不相等的散列码(hash code),违背了hashCode的约定。map的put方法把person对象存在一个散列桶(hash bucket)中,然而get却在另外的一个散列桶中找对象,结果可想而知。

3,两个字符串相等,hashcode一定相等吗?hashcode相等的两个字符串equals比较是否一定相等

一定相等 hashcode相等 equals不一定相等

4,synchronized的原理

原子性、可见性、有序性

5,ReentrantLock的原理,和synchronized的区别

①等待可中断;②可实现公平锁;③可实现选择性通知

6,AtomicInteger的原理

它是一个具有原子性的Integer类

内部有 volatile修饰value compareAndCas 当且仅当内存值与期望值一致时,才会把内存值更新为新值

7,volatile

(不会将该变量上的操作与其他内存操作一起重排序)volatile变量不会被缓存在寄存器或者对其他处理器不可见的地方,因此在读取volatile类型 的变量时总会返回最新写入的值

保证内存可见性 禁止重排序 内存屏障

8,HashMap,ConcurrentHashMap,HashSet

jdk1.8 hashMap hash(key)方法 return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16); key的hashcode值 与hashcode 右移16位 进行异或

异或 相同为0 不同为1

 

 

9,BIO,NIO,AIO,多路复用io

https://github.com/Snailclimb/JavaGuide/blob/master/docs/java/BIO-NIO-AIO.md

https://mp.weixin.qq.com/s?__biz=Mzg3MjA4MTExMw==&mid=2247484746&idx=1&sn=c0a7f9129d780786cabfcac0a8aa6bb7&source=41#wechat_redirect

 

10,自定义线程池

 

11,数据库索引及数据结构

索引(Index)是帮助MySQL高效获取数据的数据结构

  1. hash 优点:一次查询到 时间复杂度为o(1) 缺点:不支持范围查询 不支持排序
  2. 二叉树 优点:查询速度快 缺点:检索时间与树的高度有关,树的高度越高,检索次数及时间相对就会越久 极端情况下,如果数据本身就是有序的,二叉搜索树会退化成链表,性能会急剧降低。
  3. 红黑树 优点:相对二叉树 不会用很右倾的问题 解决二叉搜索树的极端情况的退化问题缺点:检索时间依旧与树的高度有关,当数据量很大时,树的高度就会很高,检索的次数就会比较多,检索的时间会比较久,效率低。
  4. Btree
  5. B+tree 和Btree的不同点在于:Btree的每个节点(包括根节点和子节点) 都可以存储数据,而B+tree则只有叶节点(最下面的一排)可以存储数据

聚集索引:数据行的物理顺序与列值(一般是主键的那一列)的逻辑顺序相同,一个表中只能拥有一个聚集索引。

非聚集索引:该索引中索引的逻辑顺序与磁盘上行的物理存储顺序不同,一个表中可以拥有多个非聚集索引。

 

12,索引原理,索引失效的原因,ABC联合索引实际建了几个索引,MYASIAM和INNODB的区别

https://blog.csdn.net/ligh_sqh/article/details/87784031

abc建了三个索引

MYASIAM和INNODB的区别

MYASIAM: 有三个文件 .frm表结构 .myd表数据 myi索引文件 不支持事务 支持表级锁

INNODB: 两个文件 .frm表结构 .ibd数据和索引文件 支持事务 支持行级锁

13,B+Tree

堆 是一个完全二叉树 每个结点的值都大于或者等于子结点的称为最大堆 每个结点的值都小于或者等于子结点的称为最小堆

如下图展示

 

 

 

 

14,慢sql优化

1、避免在where子句中使用 is null 或 is not null 对字段进行判断。

2、避免在 where 子句中使用 != 或 <> 操作符。

3、避免在 where 子句中使用 or来链接条件。

4、少用 in 或 not in。

5、注意 like 中通配符的使用。

6、避免在 where 子句中对字段进行表达式操作。

7、避免在 where 子句中对字段进行函数操作。

8、在子查询中,用 exists 代替 in 是一个好的选择。

15,什么情况下锁行,什么情况下锁表,MySql乐观锁,排它锁,间隙锁,

只有通过索引条件检索数据,InnoDB才会使用行锁,否则使用表锁。

乐观锁 是通过版本号机制,也叫乐观并发控制,它假设多用户并发的事务在处理时不会彼此互相影响,各事务能够在不产生锁的情况下处理各自影响的那部分数据。在提交数据更新之前,每个事务会先检查在该事务读取数据后,有没有其他事务又修改了该数据。如果其他事务有更新的话,那么当前正在提交的事务会进行回滚

共享锁(S):允许一个事务去读一行,阻止其他事务获得相同数据集的排它锁。

排他锁(X):允许获得排它锁的事务更新数据,阻止其他事务取得相同数据的共享读锁和排他写锁。

 

间隙锁 使用范围条件查询的时候,对于在条件范围内,但不存在的数据,叫做间隙,InnoDB也会对这个间隙进行加锁。

搜索id>100的数据,但是数据只有101,102;此时会对102以后的不存在的数据进行加锁。间隙锁是为了防止幻读,如果查找id>100的记录,第一次查找之后,其中有线程进行了同范围内的插入数据,那么在此查找的时候就会引起幻读。

意向锁:

意向锁是如何让表锁和行锁共存的?

有了意向锁之后,前面例子中的事务A在申请行锁(写锁)之前,数据库会自动先给事务A申请表的意向排他锁。当事务B去申请表的写锁时就会失败,因为表上有意向排他锁之后事务B申请表的写锁时会被阻塞。

所以,意向锁的作用就是:当一个事务在需要获取资源的锁定时,如果该资源已经被排他锁占用,则数据库会自动给该事务申请一个该表的意向锁。如果自己需要一个共享锁定,就申请一个意向共享锁。如果需要的是某行(或者某些行)的排他锁定,则申请一个意向排他锁。

https://blog.csdn.net/huangwei18351/article/details/82595211

https://www.cnblogs.com/balfish/p/8495798.html

16,Select for update分别在主键,唯一索引,分索引列,锁了哪些东西

https://www.cnblogs.com/balfish/p/8495798.html

只有通过索引条件检索数据,InnoDB才会使用行锁,否则使用表锁。

17,MySql分库分表策论

18,读写分离

19,JMM

20,JVM内存模型,GC算法,CMS和G1

21,频繁GC的可能原因

22,事务的原理,事务的特性,事务的传播行为,事务的隔离级别

23,分布式锁

24,CAP,BASE理论,最终一致性的概念

25,Redis支持的数据类型,每种数据类型的底层数据结构

26,Explain查看sql执行计划

https://www.cnblogs.com/zjxiang/p/9160564.html

27,Redis的缓存淘汰策略有哪些

28,kafka原理

29,es的原理

30,画一个自己熟悉项目的架构图

31,项目中遇到的印象深刻的bug

32,mysql事务隔离级别

https://www.cnblogs.com/shihaiming/p/11044740.html

 

算法题

1,abcd全排列

2,单向链表反转

3,二叉树遍历(递归及非递归)

4,无序数组求等差数列的最大长度

5,求开平方数(保留5位小数)

6,爬楼梯(n阶楼梯,每次能上1阶或者2阶,求有多少种方法上楼)

7,快排

8,单向链表求和

9,最长上升子序列

10,归并排序

11,一个农场主目前有M金,有P个人,有一天突然在自己的农场中发现一个金矿,农场主可以以M金的价格从市场买人,请问在D天最大能采集到多少金?

第二问,一个农场主目前有M金,有P个人,有一天突然在自己的农场中发现一个金矿,农场主可以以M金的价格从市场买人,如果要想挖到N金,最少需要多少天?

12,判断一棵二叉树是否是平衡二叉树

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值