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为主,技术是主流的技术

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值