新加坡Shopee后端一二三面凉经
Shopee一面8.13(1h30min)
-
面试官介绍Shopee,介绍一下本次面试流程(先Coding,后根据简历问,然后问基础)
-
算法题,删除链表中所有重复出现的节点
-
跑一个例子,看一下,优化一下输入(写成数组输入)
-
如果多个输入,再怎么优化(没有get到,一开始是打印输出,查看结果是否正确,面试官最后说想让写成LeetCode那样,给输入和答案,输出true/false)
-
项目相关
-
Servlet生命周期,什么时候会destroy?
-
Reactor介绍一下,为什么有Reactor模型,传统模型是什么样的?
-
主Reactor和主从Reactor有什么区别?为什么还要有第二个呢?
-
Synchronize和Lock有什么区别?
-
什么时候会用Lock的中断呢?(回答了破坏死锁)
-
那是怎么发现是死锁的?
-
代理模式和装饰着模式在JDK中 有哪些体现?它们有什么区别?
-
B+树整个的一个查找过程是什么样?
-
B+树为什么叶子节点有链表?B+树非叶子节点不存放数据是因为什么?
-
数据库隔离级别,读已提交会产生哪些问题?
-
微服务是怎么解决TCP粘包问题的?
-
Netty是如何做到心跳机制的?(回答不知道),那让你实现你怎么完成呢?
-
给一个不懂技术的人介绍一下人脸识别是如何做到的(项目相关)
-
有一个程序读一个网络文件,通过socket发送出去,整个过程中涉及到几次拷贝?拷贝次数太多了,如何优化?
-
两个进程打开同一个文件,一个进程会一行一行的读,另一个进程将文件truncate或者清空,那么第一个进程能否感知到?
-
硬链接和软连接有什么区别?
-
如何查端口占用,知道的越多越好,不止命令,查看一些文件也可以
-
netstat是怎么实现的?(不知道),看过代码吗?(没有)你就不好奇吗hahha
-
物理内存和虚拟内存有什么区别?
-
在程序中Debug看到的是物理内存还是虚拟内存?
-
进程之间通信的共享内存是怎么实现的?还有其他进程通信方式吗?
-
OSI模型,链路层是做什么的?
-
TCP是如何做到可靠性的?TCP有哪些定时器?
-
如果数据库量很大的话什么办,有十亿上百亿数据
-
场景设计题,一个订单有oid(order),uid(user),sid(shop),拆为多个库多个表该怎么做,才能使得几个id之间可以相互查询,你这样有什么缺点或者说需要注意什么?怎么解决呢?
- 反问
Shopee二面8.14(1h)
-
自我介绍
-
算法题,单词拆分,LeetCode139
-
写个case测试一下,讲一下优化思路
-
HashSet的实现
-
HashMap具体是怎么实现的?在发生扩容时,如果我要复制的元素特别多,要等所有的元素复制完成才能进行吗?如果你要实现你该怎么办?
-
HTTPS是如何保证安全的?
-
事务的隔离级别
-
数据分库之后,让事务跨数据运行,你了解有什么方法吗?
-
你了解有哪些分布式共识协议吗?有听说过zookeeper和etcd吗?
-
比较一下MySQL和Redis,分别在什么时候用
-
Redis做缓存如何跟MySQL同步呢?如何让缓存失效?
-
如果删除失败的话,那之后读到的旧数据,那怎么办?
-
描述一个你做的项目,你的微服务是怎么拆分的?有分开部署吗?
-
你使用JWT放在cookie做身份的校验,把权限放入Redis中了,为什么不放在JWT里边?
-
比较一下JWT和传统的Session的优劣?
-
假设有一个功能使用了JWT,用户改完密码之后,所有在线的用户要求登出,有没有办法做到这个功能?比如是两个浏览器,我一个浏览器用户登出,另一个如何让它页面登出?
-
你的系统的瓶颈在哪里,如果有很多用户都在用的话?
-
你了解数据库分库分表的方式吗?
-
一致性哈希的话,如果我要加一个节点需要什么操作?就比如我新加一个节点,它是空的,我需要转移数据吗?
-
假设我的数据全部存在一台Server上,我现在增加了一台,我如何平滑的把一部分数据放到另一台上呢,并且保证业务还是有读取、更新的操作。进行读取的时候,如何判断数据在哪一台Server上?
-
反问
Shopee三面 8.17(54min)
-
之前面试感觉怎么样?你觉得答的怎么样?
-
有其他公司的offer吗?
-
你是怎么知道Shopee的?
-
对于来新加坡工作有什么想法?
-
算法题(没有实际写),两个数组A,B,找到A,B两个共同的元素
-
使用Set空间复杂度,时间复杂度是多少?
-
假设A,B有序的话,如果优化,空间复杂度,时间复杂度是多少?
-
假设A里面有1million个元素,B里面有1000个元素,有什么办法进一步优化?空间复杂度是多少?
-
Set结构的时间复杂度是多少?
-
你能简单描述一下CPU是怎么运行一个程序的?会全量把程序加载进内存吗?
-
你能描述一下内存布局是什么样的?堆和栈的区别
-
什么情况下我们要使用堆?
-
在堆上的访问成本要比栈上的访问成本高,怎么解释?
-
有听说过栈缓冲区溢出漏洞吗?
-
传值和传指针有什么区别(感觉一直在问非Java的问题,就说了熟悉Java一些)
-
ConcurrentHashMap和HashMap有什么区别?
-
自旋是什么?什么时候会用到?用来解决什么问题的?
-
CAS是Java里的吗?CAS是运行在内核态还是用户态的?
-
在CPU运行时,有一个L1,L2 Cache是做什么的?
-
为什么不能把CPU缓存做大呢?
-
一般什么数据是存放在L1,L2中的呢?
-
如果它不够的话,如何选择它的淘汰策略?
-
LRU是什么意思?这个算法是怎么实现的?
-
场景设计题,有一个API,要限制它的使用次数,要求同一个IP,在1s内只能访问两次
-
你设计的方案中有什么问题,或者需要注意什么?
-
假如需求变成1000次,1w次,你的方案会有什么问题?
-
如果不使用redis,在本地中,把你设计的对应的数据结构写一下。那数据如何清理?谁来清理?
8.25收到感谢信
9.2 被捞
Shopee三面 (57min)9.14
-
之前面的怎么样?
-
自我介绍
-
上过软件工程或者计算机相关的课程吗?
-
为什么对后端开发职位感兴趣?
-
项目相关
-
你是怎么知道Shopee的?
-
算法题,给了一组人0~N-1,给出一组关系,即个人和他父母的编号,判断任意两个人是否有血缘关系(前面一直在往二叉树想,各种乱写了一堆,最后面试完想到并查集就直接解决了。。)
-
反问
-
你有offer吗
-
如果这边给你offer你会来吗,想来新加坡吗
Shopee HR(18min) 9.18
-
自我介绍
-
为什么想要申请新加坡的职位?
-
你是怎么了解到Shopee的?
-
有跟父母沟通过去国外工作吗?
-
有实习经历吗?
-
目前有拿到哪些公司的offer?开多少钱?
-
你自己在选择公司的时候更看重哪些内容?
-
你对自己的期望薪资大概是多少?为什么是这个数?
-
之前帮你换了一个team,这个对你来说ok的吗?
-
你之前有来新加坡吗?有家人、同学或者认识的人在新加坡吗?
-
介绍一下自己的优缺点
-
反问