java面试题-看到那记录到哪

哈希冲突

  如果两个不同的元素,通过哈希函数得到的实际存储地址相同怎么办?也就是说,当我们对某个元素进行哈希运算,得到一个存储地址,然后要进行插入的时候,发现已经被其他元素占用了,其实这就是所谓的哈希冲突,也叫哈希碰撞。

  哈希函数的设计至关重要,好的哈希函数会尽可能地保证简单和散列地址分布均匀。但是我们需要清楚的是,数组是一块连续的固定长度的内存空间,在好的哈希函数也不能保证得到的存储地址决定不发生冲突。

  哈希冲突的解决办法有多种:开发地址法(发生冲突,继续寻找下一块未被占用的存储地址),再散列函数法,链地址法,而HashMap即是采用了链地址法,也就是数组+链表的方式。

  HashMap由数组+链表组成的,数组是HashMap的主体,链表则是为了解决哈希冲突而存在的;

 

redis 的持久化机制

  RDB:是Redis默认的持久化方案,在指定的时间间隔内,执行指定次数的写操作,则会将内存中的数据写入到磁盘中,在指定目标下生成一个dump.rdb文件。redis重启会通过加载dump.rdb文件恢复数据;  

  AOF:Redis默认不开启,它的出现是为了弥补RDB的不足(数据的不一致性),所以它采用日志的形式来记录每个写操作,并追加到文件中。redis重启的会根据日志文件的内容将写指令从前到后执行一次已完成数据的恢复工作;

 

Spring AOP 

  AOP 能够将那些与业务无关,却为业务模块所共同调用的逻辑(事务,日志,权限)封装起来,便于减少系统的代码重复,降低模块间的耦合度,并有利于未来的可扩展性和可维护性。

  Spring AOP是基于动态代理的,如果要代理的对象实现了某个接口,那么Spring AOP就使用JDK动态代理去创建代理对象,而对于没有实现接口的对象,就无法使用JDK动态代理,转而使用CGlib动态代理生成一个被代理的对象的子类作为代理。

 

数据库隔离级别

  数据库事务的隔离级别有4个,由低到高依次为Read uncommitted(读未提交) ,Read committed(读提交) ,Repeatable read(重复读) ,Serializable(序列化) 这四个隔离级别可以逐个解决脏读,不可重复读,幻读这几类问题。

 

 Mysql 行锁和表锁的区别

  

 

   如上图,从锁的粒度,可以分为2大类

  表锁:开销大,加锁快,不会出现死锁,锁定力度大,发生锁冲突的概率高,并发度低。

  行锁:开销小,加锁慢,会出现死锁,锁定力度小,发生锁冲突的概率低,并发读高。

 

你的系统如何支持高并发?

  1.系统集群化部署

  2.数据库分库分表 + 读写分离

  3.缓存集群引入

  4.引入消息中间件集群MQ

 

HTTP和HTTPS区别

1.https协议需要到ca申请证书,一般免费证书比较少,因而需要一定费用。

2.http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。

3.http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。

4.http的连接很简单,是无状态的;https协议是由SSL+HTTP协议构建的可进行加密传输,身份认证的网络协议,比http协议安全。

posted @ 2019-11-26 15:49  超人不会飞er  阅读(262)  评论(0编辑  收藏  举报