0086 shopee面试题汇总

shopee 后端面试题目

1、我的大数据方向

leetcode hard 寻找两个有序数组的中位数

了解MVCC吗

MVCC:多版本并发控制。

特点

1.MVCC其实广泛应用于数据库技术,像Oracle,PostgreSQL等也引入了该技术,即适用范围广

2.MVCC并没有简单的使用数据库的行锁,而是使用了行级锁,row_level_lock,而非InnoDB中的innodb_row_lock.

基本原理:MVCC的实现,通过保存数据在某个时间点的快照来实现的。这意味着一个事务无论运行多长时间,在同一个事务里能够看到数据一致的视图。根据事务开始的时间不同,同时也意味着在同一个时刻不同事务看到的相同表里的数据可能是不同的。

  • Mysql两种引擎对比
InnoDB myisam
储存方式 聚集索引(B+树存储索引和数据) 非聚集(B+树存储索引;数据表存数据)
事务安全 事务安全 非事务安全
表锁、行锁 表锁
全文索引 不支持(5.5之前) 支持
外键 支持 不支持
事物处理,具有ACID(原子性,一致性,隔离性,持久性)事物支持等特性,如果在应用中大量使用insert和update操作,应选用InnoDB。 管理非事物表,提供高速存储和检索以及全文搜索的能力,如果在应用中执行大量的select操作,应选用MyISAM

脏读 幻读 不可重复读

脏读:读取另一个事务未提交的数据

幻读:同样的条件,第一次和第二次读出来的记录条数不一样。(新增或删除)。

不可重复读:同样的查询条件,查询到的结果都不一样(中间有对数据进行了修改)。

bonus:

1、事务的四种隔离级别:读取未提交、读取已提交、可重复读,串行化

事务隔离级别 脏读 不可重复读 幻读
读未提交(read-uncommitted)
读取已提交(read-committed)
可重复读(repeatable-read)
串行化(serializable)

2、MySQL默认隔离级别:可重复读,因此只会出现幻读

  • 进程间通信方式,常用的哪种

进程间通信方式

信号量、共享内存、无名管道、命名管道(FIFO)、消息队列、套接字、全双工管道

后两者适用于远程通信,适合网络编程。

bonus:

1、全双工管道:数据通讯是双向的,int pipe(int fd[]); fd[0]/fd[1]分别对应:读、写;

三次握手:

  • 第一次:客户端发送初始序号x和syn=1请求标志
  • 第二次:服务器发送请求标志syn,发送确认标志ACK,发送自己的序号seq=y,发送客户端的确认序号ack=x+1
  • 第三次:客户端发送ACK确认号,发送自己的序号seq=x+1,发送对方的确认号ack=y+1

img

三次握手

img

四次挥手过程分析

第一次:客户端请求断开FIN,seq=u

第二次:服务器确认客户端的断开请求ACK,ack=u+1,seq=v

第三次:服务器请求断开FIN,seq=w,ACK,ack=u+1

第四次:客户端确认服务器的断开ACK,ack=w+1,seq=u+1

为什么要三次握手四次挥手,两次握手三次挥手不行吗?

三次握手原因:考虑到因为网络导致的报文失效情况。客户端发出请求,因网络原因延迟很久,客户端认为这条失效,而服务端在某个时刻受到,它将回应,但是客户端不会理会这个回应(失效),于是服务端就等着客户端发请求,就会白白浪费服务端资源;

四次挥手原因:为了保证数据完整传输。服务端的数据可能还没有全部被客户端受到。

Http状态码,1.2.3.4.5开头的啥意思

分类 分类描述
1** 信息,服务器收到请求,需要请求者继续执行操作
2** 成功,操作被成功接收并处理
3** 重定向,需要进一步的操作以完成请求
4** 客户端错误,请求包含语法错误或无法完成请求
5** 服务器错误,服务器在处理请求的过程中发生了错误

常用的:

  • 200 - 请求成功
  • 301 - 资源(网页等)被永久转移到其它URL
  • 404 - 请求的资源(网页等)不存在
  • 500 - 内部服务器错误
  • 502 - 网关错误 Bad Gateway
  • 504 - 响应超时 Gateway Time-out

Hashmap底层原理

解决哈希冲突的方法

链式分离法、开放地址法,双哈希法、溢出表

数组和链表的区别

kafka原理讲一下

kafka的topic与partition关系

Kafka消息是否有序

Hdfs数据存储过程是怎样的

Hadoop的map reduce过程是怎样的

Spark有哪几种算子

Spark的shuffle过程是怎样的

如何解决spark的数据倾斜

Spark 如何优化两个大小表的jion操作

大数据中寻找top-K的方法 (小顶堆),算法复杂度?(nlogK)

二面:

算法,寻找奇点

LeetCode 162

反射了解吗?使用场景?

反射是指运行中的java程序能动态获取类的方法、属性、构造函数。

反射的流程:

1、获取指定名称的Class对象,方法有:Class.forName()、obj.getClass()、类名.class()

2、实例化对象,获取类的方法、属性和构造函数;

3、访问属性、方法、调用构造函数创建对象。

img

应用场景

1、反编译:.class --> .java

2、Spring IoC

3、Tomcat服务器(IO、ServerSocket、反射)

反射的优缺点

优点:运行期类型的判断,动态加载类,提高代码灵活度,提高了应用程序的***可扩展性***;

缺点:反射相当于一系列解释操作,通知 JVM 要做的事情,性能比直接的java代码要很多(性能问题)。

序列化及其使用场景

序列化:将对象写入到IO流中

 private static void serialize(String filename) throws IOException {
   
        File f = new File(filename); // 定义保存路径
        OutputStream out = new FileOutputStream(f); // 文件输出流
        ObjectOutputStream oos = new ObjectOutputStream(out); // 对象输出流
        oos.writeObject(new Person("Jack", 30, Sex.MALE)); // 保存对象
     
        oos.close();
        out.close
  • 3
    点赞
  • 70
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值