13、简述zset实现原理
一两句话说不清楚,就是一种数据结构,打个比方
1、2、3、4、5、6、7、8、9
要找到8,我得遍历8次
如果我把1、3、5、7、9拎出来作为一个类似索引的东西
找8的时候,先在索引里面找,8在7和9中间,找到7以后再遍历1次就找到了8,总共遍历5次
而这个1、3、5、7、9的索引还可以拎个1、5、9出来,以此类推
回到zset,它维护了两个元素,一个是 dict,用来维护数据到分数的关系,一个是zskiplist,用来维护分数所在链表的关系
14、简述协程的优缺点
协程是一种轻量级线程
优点:
跨平台
跨体系架构
无需线程上下文切换的开销
无需原子操作锁定及同步的开销
方便切换控制流,简化编程模型
高并发+高扩展性+低成本:一个CPU支持上万的协程都不是问题。所以很适合用于高并发处理。
缺点:
无法利用多核资源,协程的本质是个单线程,它不能同时将 单个CPU 的多个核用上,协程需要和进程配合才能运行在多CPU上.当然我们日常所编写的绝大部分应用都没有这个必要,除非是cpu密集型应用。
进行阻塞(Blocking)操作(如IO时)会阻塞掉整个程序,这一点和事件驱动一样,可以使用异步IO操作来解决
15、如何判断一个hash函数好不好?
1、计算性能
2、离散性
hash算法一定要把数据哈希均匀,不能全部挤在一坨,对hash算法不太清楚的必须看看这篇文章,我以前花了整整一天时间写的,举了很多例,真正搞懂hashCode和hash算法
16、http中get和post的区别?
GET在浏览器回退时是无害的,而POST会再次提交请求。
GET产生的URL地址可以被Bookmark,而POST不可以。
GET请求会被浏览器主动cache,而POST不会,除非手动设置。
GET请求只能进行url编码,而POST支持多种编码方式。
GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。
GET请求在URL中传送的参数是有长度限制的,而POST么有。
对参数的数据类型,GET只接受ASCII字符,而POST没有限制。
GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。
GET参数通过URL传递,POST放在Request body中。
(本标准答案参考自w3schools)
然而实际上,它们的本质都是 TCP 连接,并无区别。上面的答案纯粹是为了应付面试官。真正导致产生区别的原因是 HTTP 的规定以及浏览器/服务器的限制,这才导致它们在应用过程中可能会有所不同。
17、解决hash冲突的方式?
拉链法
代表作:hashMap
原理:把所有hash值相同的元素放到链表中
再哈希法
原理:产生冲突时,对结果再进行一次hash,直到没有hash冲突,一般没人用,太鲁莽了,而且治标不治本,理论上永远不能彻底解决hash冲突
开放地址法
1、线性探测法
2、线性补偿探测法
3、伪随机探测
18、简述装饰者模式和适配器模式
装饰者模式
概括:在不改变现有对象结构的情况下,动态地给该对象增加一些职责(即增加其额外功能),它属于结构型模式,mybatis-plus的QueryWrapper就是装饰者模式的体现
适配器模式
概况:将一个接口转换成用户需要的另一个接口,使接口不兼容的那些类可以一起工作,也属于结构型模式,SpringMvc中的HandlerAdapter就是适配器模式的体现
19、hashCode和equals方法的联系
java规定:
如果两个对象的hashCode()相等,那么他们的equals()不一定相等。
如果两个对象的equals()相等,那么他们的hashCode()必定相等。
对hash算法不太清楚的同学必须看看这篇文章,我以前花了整整2天时间写的,举了很多例,真正搞懂hashCode和hash算法
20、什么是重写和重载?
1、重写是在子类存在方法与父类的方法的名字相同,而且参数的个数与类型一样,返回值也一样的方法,就称为重写(Override)
2、重载是一个类中定义了多个方法名相同,而他们的参数的数量不同或数量相同而类型和次序不同,则称为方法的重载(Overload)
3、重载是一个类的多态性表现,而重写是子类与父类的一种多态性表现
21、Java有几种基本数据类型?分别占用多少字节?
| 数据类型 | 占用字节 |
| — | — |
| byte | 1 |
| short | 2 |
| int | 4 |
| long | 8 |
| char | 2(c语言是1字节,可以存储一个汉字) |
| float | 4 |
| double | 8 |
| boolean | 1/8 |
22、Java异常有哪些类型?
Java所有的异常都继承至Throwable,分为Error和Exception两大类,其中:
Error是系统级错误,