面经--携程

携程一面

相邻五分钟面了携程两次,估计应该是两个部门的
一个面的稀烂,一个面的挺好。。。逗

第一个

上来先介绍项目

对一个全局缓存如何确保并发访问安全

实现生产者消费者模型

生产/消费者问题是个非常典型的多线程问题,涉及到的对象包括“生产者”、“消费者”、“仓库”和“产品”。他们之间的关系如下:

  1. 生产者仅仅在仓储未满时候生产,仓满则停止生产。
  2. 消费者仅仅在仓储有产品时候才能消费,仓空则等待。
  3. 当消费者发现仓库没产品可消费时候会通知生产者生产。
  4. 生产者在生产出可消费产品时候,应该通知等待的消费者去消费。

解决生产者/消费者问题的方法可分为两类:(1)采用某种机制保护生产者和消费者之间的同步;(2)在生产者和消费者之间建立一个管道。

生产者消费者保证同步的方法:

  • 采用synchronized锁以及wait()/notify()方法实现
  • 采用Lock锁以及await()/signal()方法实现
  • BlockingQueue阻塞队列方法
  • Semaphore方法实现同步

管道的方法:

  • PipedInputStream / PipedOutputStream

Spring加载的顺序

NIO

ThreadLocal实现原理

数据库设计

一个用户有多个角色,每个角色对应一种权限,应该怎么设计数据库表

一个用户可以有多个角色,那么就应该创建对应的角色表。
1 角色表。
id,roleName 很简单的说明,你有哪些角色

2 角色关系表
id,uid,roleId 哪些角色分配给了哪些用户,这是多对多的关系

3用户表
id , userName 用户表

当然,你的角色应该还有相应的功能。可能是菜单角色,也可能是功能角色。这个具体看角色表关联到哪些功能的表了。
假设你和菜单有关系。
那么
角色表应该和菜单表有一个关系表
角色菜单关系表
id , roleId,menuId 某个角色,拥有哪些菜单

第二个

刚挂了电话没5分钟就来第二个

先介绍项目

ArrayList

HashMap

快速排序和归并排序

内连接,外链接,左连接,右连接区别

算法

判断单链表是否有环

两个指针,速度不一样

大数据情况下排序

分割 排序 合并
字典树