美团——面经1

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引用的对象

发布了208 篇原创文章 · 获赞 0 · 访问量 5961

猜你喜欢

转载自blog.csdn.net/qq_40058686/article/details/104782739