restful和rpc的区别?
restful是一种架构风格,用于约束客户端和服务器交互,满足约束条件和原则的应用程序或设计就是restful。比如http协议使用的是同一个url地址,通过get,post,put,delete等方式实现操作。
rpc是远程方法调用,就是像调用本地方法一样去调用远程方法,采用的是客户端与服务端模式,双方通过约定皆苦进行交互
主要区别:restful使用的是http协议,rpc使用的是tcp协议,而http是运行在tcp上的,所以,rpc性能更加高效,但是灵活度没有restful高
什么是Service mesh?
service mesh是为了解决传统微服务框架“胖客户端”方式引入的问题:与业务无关的服务治理逻辑与业务代码强耦合,强绑定
避免多线程竞争时有哪些手段?
不可变变量(final),互斥锁(synchronized),ThreadLocal对象,CAS操作
Http的常用method?
get:获取资源
post:提交,添加资源
head:获取报头信息
delete:删除资源
options:允许客户端查看服务器的性能
https的实现原理?
申请证书,添加证书信任,密文通信
HashMap为什么会发生死循环?
因为当多个线程同时执行put操作时,假如这个这个要put的key的hashcode是相同的,那么就会被放到同一个链表下,假如这个时候是A.next = B,但是进行重新计算位置并放入新的table里是是用的头插法,即这个时候B.next=A,但是另一个线程在执行这个操作时可能看到的是A.next=B,这样的话A.next=B,B.next=A,就会形成死循环
ConcurrentHashMap的size操作?
jdk1.7中,先不加锁计算三次,如果三次的结果都一样,则不用进行加锁,如果三次结果不一致,再加锁
jdk1.8:由于size()方法可能会返回int的最大值,所以一般使用mappingCount()方法。他们都会调用一个方法,sumCount(),其实这个方法才是真正的size()方法,有两个属性baseCount和CounterCells,假如最后CounterCells不为空,那么size就为baseCount+CounterCells。其中baseCount是一个volatile变量,在进行remove或是put方法后会更改这个变量,而CounterCells主要是在CAS修改失败后,利用CAS修改CounterCells的值,而在fullAddCount方法中会一直循环直到操作成功,所以size的值就是CounterCells+baseCount的值
两个线程交替打印1——100?
最标准的版本,volatile+Atomic一起使用,volatile主要是利用他的可见性,Atomic主要利用CAS操作
sql语句慢查询如何调优?
a.开启慢查询日志(slow_query_log)
b.用explain来分析语句,假如type是index或者all的话就需要去优化语句,看看是索引没有还是索引失效了,这个时候去看下是否语句以%开头,因为这样会导致索引失效,看看是否是使用了多列索引的查询语句,只有使用了索引的第一个字段才能使用索引
主键索引和普通索引的区别?
主键索引是一级索引,它存储着数据和索引,普通索引是二级索引,只存储着主键的id值。索引如果要通过普通索引来查找,需要两次查找,而主键索引只需要一次就行了,即主键索引的查询效率更高
说说MVCC?
mvcc是通过保存某个时间点的快照来实现的,在innoDB中,主要是通过在每行记录后面添加两个隐藏的列来实现的,一个是创建的系统版本号,一个是过期的系统版本号,每当开始一个事务时,版本号自动递增
如何解决的超卖?
将商品的库存预存在redis里,假如只有100个的话那么每个请求到达减1,最多只能到达100个请求,后面的请求直接拒绝,然后消费者再来消费这些请求真正地从数据库中扣除库存。
可以作为GCROOT的对象?
a.虚拟机栈中的引用对象
b.方法区中的类静态属性引用的对象
c.方法区中的常量引用的对象
d.本地方法栈中JNI引用的对象