【社招-java-视频面2】shopee凉面

再分享一波shopee的面试,上回以为自己凉了,没想到被捞起来了,感觉又有希望,然后沉住气继续准备,面试题一如既往地不按套路出牌,这次终于彻底凉了。

  • 自我介绍
  • coding : nums=[1,2,3,4] => products=[24,12,8,6], products[i] = nums[0] *~ nums[nums.length - 1] except nums[i], 考虑nums[i] == 0, 考虑多个0
  • 主键索引与二级索引的区别
  • 主键索引存储什么数据
  • 为什么主键用auto_increment
  • 如何生成唯一主键 A:UUID
  • UUID的缺点
  • mysql如何实现事务中持久性
  • 间隙锁
  • 刷题网 105. Construct Binary Tree from Preorder and Inorder Traversal
  • kafka如何保证可靠,高可用,幂等
  • redis的IO模型
  • 解释同步/异步/阻塞/非阻塞
  • 一致性哈希的工作原理,优点,缺点
  • redis持久化的方式
  • hashtable的操作get和put的时间复杂度
  • 解决哈希冲突的方法
  • keep_alive
  • 四次挥手为什么要等Timewait
  • timewait为多少
  • cookies和session的区别
  • 多个微服务如何共享session

问原理底层的东西,挂了不可惜,因为没探究过真的很难想到,最悲催的是面试的时候coding短路做不出,简直想捶死自己的心都有,更难受的是,面试完了冷静下来再做,一下子就出来了。心塞!!!

#Shopee##社招##面经##Java工程师#
全部评论
老哥工作几年了
1 回复 分享
发布于 2019-11-28 19:37
主键索引与二级索引的区别 innodb中,二级索引作为检索条件时,先从二级索引树中定位到聚集索引,然后从聚集索引中定位到具体行记录,因为innodb中聚集索引中直接存储了行记录,聚集索引默认使用主键索引建立,没有主键索引就使用第一个非空唯一字段,再没有就使用内部生成的rowId 所以主键索引树的叶子节点存储行记录,二级索引树的叶子节点存储聚集索引/主键索引值。
1 回复 分享
发布于 2020-02-15 09:48
这是今年经验呢
点赞 回复 分享
发布于 2019-12-11 21:22
深圳的虾皮吗?
点赞 回复 分享
发布于 2019-12-13 08:14
主键索引存储什么数据 所以主键索引直接存储行记录,索引与记录共同存储,也是聚集索引明明的由来。
点赞 回复 分享
发布于 2020-02-15 09:49
为什么主键用auto_increment 提高插入性能。数据按主键顺序存储,自增主键能把随机写转化为顺序写。 参考:[使用自增主键是否总是最佳实践?](https://www.zhihu.com/question/27603761)
点赞 回复 分享
发布于 2020-02-15 10:30
如何生成唯一主键 1.利用数据库自增ID,特点是趋势递增,全局唯一,需要保证高可用环境下,使用不同初始值+相同步长,但是扩展性有限制 2.利用单点服务串行化生成递增ID,特点是全局递增,全局唯一,例如存储在redis中,并利用redis原子操作生成,性能瓶颈取决于redis读写性能 3.每台机器自己生成UUID,特点是无序,全局唯一,一般是字符串的数据类型使得检索低效,无序的特性使得插入低效 4.每台主机获取当前的毫秒数,特点是趋势递增,可能出现全局不唯一,不推荐 5.参考snowflake算法,41bit毫秒数+10bit机器序号+12bit毫秒内序列号,特点是趋势递增,全局唯一 根据业务权衡选取2或者5,其次是1,其次是3,最后是4 UUID的缺点 无序,全局唯一,一般是字符串的数据类型使得检索低效,无序的特性使得插入低效 另外附上: [UUID如何保证唯一性?](https://zhuanlan.zhihu.com/p/70375430) [UUID是如何保证唯一性的?](https://www.zhihu.com/question/34876910)
点赞 回复 分享
发布于 2020-02-15 17:05
mysql如何实现事务中持久性 通过redo log实现持久性,通过undo log实现原子性,通过锁机制和MVCC实现隔离性,然后所有这些措施最终为了实现数据一致性。
点赞 回复 分享
发布于 2020-02-15 21:45
间隙锁 间隙锁是一种对索引区间进行加锁的机制,需要在innodb,可重复读的隔离级别下。 比如select ... where name = '' for update 如果不存在特定记录命中,就对某个区间/间隙加锁 如果命中特定记录,在判断name的索引类型         如果name是普通索引,对区间/间隙加锁         如果name是主键索引或者唯一索引,对命中记录加记录锁而不是间隙锁 间隙锁的机制影响了比如删除不存在的记录的加锁方式。
点赞 回复 分享
发布于 2020-02-15 21:52
kafka如何保证可靠,高可用,幂等 一般通过超时重发消息的方法保证可靠性,通过集群提供服务保证高可用 可靠性和幂等性是相互矛盾的两个方面,在重复投递保证可靠性的机制下,就需要通过唯一ID排重保证幂等性。
点赞 回复 分享
发布于 2020-02-15 21:56
redis的IO模型 redis使用非阻塞IO复用模型 解释同步/异步/阻塞/非阻塞 比如,服务A调用服务B 服务A等待服务B处理结果,称服务A阻塞调用服务B;服务A不等待服务B处理结果,称服务A不阻塞调用服务B 服务B处理得出结果后返回,称服务B是同步方法;服务B马上响应,但处理得出结果后回调服务A,称服务B是异步方法 同步阻塞就是常见的方法调用,同步非阻塞就是创建子线程调用,异步阻塞与异步非阻塞差别不大,因为异步方法都会马上返回结果,真正处理完成后再回调
点赞 回复 分享
发布于 2020-02-17 12:40
一致性哈希的工作原理,优点,缺点 一致性哈希将哈希值空间构成一个圆环,数据根据哈希值分布在所在哈希值空间后一台机器上 优点: 数据均匀分布,增删节点不引起全量数据迁移 缺点: 有可能存在流量均匀和负载均匀的现象,但是这种缺陷应该在任何负载均衡算法都会存在 一致性哈希算法的缺陷是什么? - lorneli的回答 - 知乎 https://www.zhihu.com/question/307084129/answer/561795909
点赞 回复 分享
发布于 2020-02-17 12:55
redis持久化的方式 rdb,生成数据库快照 aof,记录每个操作 hashtable的操作get和put的时间复杂度 O(1) 解决哈希冲突的方法 open hashing,通过链表记录key有相同哈希值的数据 open addressing,通过遍历法使用下一个地址记录key有相同哈希值的数据
点赞 回复 分享
发布于 2020-02-17 13:00
keep_alive http的keep_alive是http用于创建长连接的配置,使得多个http请求能共享一个tcp连接 tcp的keep_alive是tcp的保鲜机制,用于确保该tcp连接是否有效,无效则进行关闭 四次挥手为什么要等Timewait 四次挥手最后响应关闭请求之后,预计经历1MSL时,对方收到关闭响应,如果此时对方未收到关闭响应则会重发关闭请求,本端将在1MSL后重发的关闭请求,所以等待timewait为了确保收到对方顺利收到关闭请求,或者确保自己及时收到对方重发的关闭请求 timewait为多少 timewait=2MSL
点赞 回复 分享
发布于 2020-02-17 13:07
cookies和session的区别 http是无状态的连接,cookies和session是为了记录http连接的状态,cookies记录在浏览器,每次发送http请求时能带上相应的cookies数据,比如账号密码,使得能保持登陆的状态,但是由于在浏览器端记录用户信息以及在网络中传输不安全且占用带宽,于是在服务器使用session记录,而浏览器使用cookies记录sessionID,则能根据sessionID找到用户信息实现状态化。 多个微服务如何共享session 1.使用cookies存储,不安全,占用带宽 2.多个微服务之间进行session同步,session信息太多 3.反向代理层负载均衡一致性,根据请求端ip信息每次负载均衡到相同的服务节点 4.共享存储,db或者cache
点赞 回复 分享
发布于 2020-02-17 13:16
coding 1 : 刷题网 238. Product of Array Except Self
点赞 回复 分享
发布于 2021-04-25 15:25

相关推荐

M_bao:换个排版吧哥们,看着费劲
点赞 评论 收藏
分享
点赞 评论 收藏
分享
11 83 评论
分享
牛客网
牛客企业服务