2021秋招--shopee面经--java后台开发

2020.8.24 一面

不会的问题

tcp与udp,面向字节流与面向报文的区别,应用中有什么体现出差别?

UDP: 面向报文的传输方式是,不管应用层交给UDP多长的报文,UDP就照样发送,即一次发送一个报文。UDP对应用层交下来的报文,既不合并,也不拆分,而是保留这些报文的边界。

TCP把应用程序看成是一连串的无结构的字节流,如果应用层交付下来的数据过大,就会对数据分段,然后发送;如果应用程序一次只发送一个字节,则通过滑动窗口协议来控制通信双发的数据

讲讲IO多路复用,select模型与epoll模型的区别

select模型:
(1)单进程可以打开fd有限制;
(2)对socket进行扫描时是线性扫描,即采用轮询的方法,效率较低;
(3)用户空间和内核空间的复制非常消耗资源;
poll模型:
和select不同的地方:采用链表的方式替换原有fd_set数据结构,而使其没有连接数的限制。
epoll模型:
1. 减少了用户态和内核态之间的文件描述符拷贝
2. 减少了对就绪文件描述符的遍历

为何epoll模型更加高效呢?

首先回忆一下 select 模型,当有 I/O 事件到来时, select 通知应用程序有事件到了快去处理,而应用程序必须轮询所有的 FD 集合,测试每个 FD 是否有事件发生,并处理事件;

调用select和poll的程序需要遍历监听的所有文件描述符找到是谁处于就绪

1:select、poll都需要将有关文件描述符的数据结构拷贝进内核,最后再拷贝出来。而epoll创建的有关文件描述符的数据结构本身就存于内核态中,系统调用返回时也采用mmap共享存储区,需要拷贝的次数大大减少。
2:select、poll采用轮询的方式来检查文件描述符是否处于就绪态,而epoll采用回调机制。造成的结果就是,随着fd的增加,select和poll的效率会线性降低,而epoll不会受到太大影响,除非活跃的socket很多。

管道怎么用的?编程中的实现?

管道的本质就是一个pipe文件,一个进程往这个文件中写入数据,一个进程从这个文件中读数据
只能半双工通信

通过pipe()系统调用来创建管道,fd[0]读,fd[1]写,而且只能父子进程间通信

java

说一下java 容器?为什么要弄一个接口?接口下实现不同的类呢?
多线程怎么用的?你说定制版的线程池是什么?参数
如何来定制我需要的线程池呢? 参数怎么设置的

你熟悉的数据结构和算法有哪些?
优先队列怎么实现的?二叉堆实现

数据库

我要创建一个表,怎么设计一个表?
满足范式,三大范式是什么?
数据库不按照这些范式设计会怎么样?
什么时候需要数据冗余呢?
按照范式,学生基本表与课程表应该在一张表的呢?为什么呢?
怎么加索引?什么时候加?哪有字段加?
为什么加索引会查询更快? 索引为何能加快查询速度?
B+树如何进行范围查询呢?

查询 between 10 and 20
首先找叶子节点为10所在的节点,再找叶子节点为20所在的节点,从10所在的节点开始顺序遍历到20截止

聚簇索引与非聚簇索引
事务的特性,分别的含义
隔离级别
可重复读与提交读的区别,脏读与不可重复读,怎么解决呢?

操作系统

IO多路复用,三种模式区别是什么?
进程与线程的区别
进程间通信机制
为何进程奔溃不会影响其他进程奔溃?
管道与有名管道,从编程角度怎么实现? 代码中哪个系统调用来做的?
会redis吗? 必须学啊,背面经起来,我简历都写了

孤儿进程与僵尸进程
僵尸进程怎么解决?

计算机网络

tcp与udp的区别
tcp与udp,面向字节流与面向报文的区别,应用中有什么体现出差别?

三次握手与四次挥手
四次挥手中的状态,比如time-wait, close-wait什么时候?这里说错了,但是我是会的,没说清楚
断开连接只能客户端发起吗?

算法

2-sum 秒杀

应用场景

一个大文件内有很多单词,统计出现次数最多的topk个单词

反问

主要是Go技术栈,之后可能会再分部门,目前没有确定部门

8.28 二面

自我介绍
java线程的状态,各个状态如何转化
两个线程的并发控制

synchronized
reentrantLock
wait()notify()
阻塞队列

sychronizied的具体实现

从 JDK 1.6 开始,Java 对 Synchronized 同步锁做了充分的优化,甚至在某些场景下,它的性能已经超越了 Lock 同步锁。

多线程下synchronized的加锁就是对同一个对象的对象头中的MarkWord中的变量进行CAS操作.

锁的升级过程,具体讲一下

两个线程需要同步时的手段

线程间的同步方法大体可以分为两类:用户模式和内核模式
1、用户模式:原子操作,临界区
2、内核模式:事件、信号量、互斥量

JVM如何管理内存
怎么判断是垃圾?
为何要区分新生代和老年代
JVM如何执行字节码文件? 执行的过程 不会
指令是如何执行的?与机器执行的二进制有什么不同?
频繁发生GC,如何定位这个问题? 上次问过 针对不会的问题博客中有写 针对一下,更详细的答案
Spring 的主要作用?说一下静态织入?
那为何又要Spring boot呢?

说一下mysql的索引? 介绍b+索引
查询的时间复杂度
节点的大小如何定的?
这么定大小的好处是什么?

联合索引 说一个例子哪些会用到索引
自增主键的好处? 都问过 针对不会的问题博客中有写
自增主键对索引有什么好处呢?

sql的优化,慢查询如何优化? 针对不会的问题博客中有写

海量数据问题
10个大文件,里面有很多订单是重复的,如何去重?然后输出到一个文件中, 每个文件1G,内存只有500M

说一下微软的项目
遇到新的技术栈如何去学习?
基于微服务还是单服务器开发的?

微服务
分布式事务
都不会

你个人最大的亮点?

我认为是我的专业,本硕专业都是计算机,在较长一段时间内专注于一个领域,
当需要用到某些新技术时,能够快速上手,并能深入底层来学习这项技术

具体部门要到hr才知道
Mysql, mybatis, redis, 队列卡夫卡,Go和java为主,技术是主流的技术

你可能感兴趣的:(面经)