shopee java开发_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为主,技术是主流的技术

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值