来自oppo社招Java一面

简介: 1、项目相关

1、项目相关


2、线程池参数及其作用。


corePollSize:核心线程数。在创建了线程池后,线程中没有任何线程,等到有任务到来时才创建线程去执行任务。


maximumPoolSize:最大线程数。表明线程中最多能够创建的线程数量。


keepAliveTime:空闲的线程保留的时间。


TimeUnit:空闲线程的保留时间单位。


BlockingQueue:阻塞队列,存储等待执行的任务。参数有ArrayBlockingQueue、LinkedBlockingQueue、SynchronousQueue可选。


ThreadFactory:线程工厂,用来创建线程


RejectedExecutionHandler:队列已满,而且任务量大于最大线程的异常处理策略。


ThreadPoolExecutor.AbortPolicy:丢弃任务并抛出RejectedExecutionException异常。


ThreadPoolExecutor.DiscardPolicy:也是丢弃任务,但是不抛出异常。


ThreadPoolExecutor.DiscardOldestPolicy:丢弃队列最前面的任务,然后重新尝试执行任务(重复此过程)


ThreadPoolExecutor.CallerRunsPolicy:由调用线程处理该任务。


3、Redis的持久化方式


两种持久化方式


RDB持久化:将Reids在内存中的数据库记录定时dump到磁盘上的RDB持久化


AOF(append only file)持久化:将Reids的操作日志以追加的方式写入文件


二者的区别


RDB持久化是指在指定的时间间隔内将内存中的数据集快照写入磁盘,实际操作过程是fork一个子进程,先将数据集写入临时文件,写入成功后,再替换之前的文件,用二进制压缩存储。


image.png

image.png

AOF持久化以日志的形式记录服务器所处理的每一个写、删除操作,查询操作不会记录,以文本的方式记录,可以打开文件看到详细的操作记录。

image.png

4、过期键的删除策略。


定时删除:在设置键的过期时间的同时,创建一个定时器,让定时器在键的过期时间来临时,立即执行对键的删除操作。


惰性删除:放任键过期不管,但是每次从键空间中获取键时,都检查取得的键是否过期,如果过期的话,就删除该键;如果没有过期,就返回该键。


定期删除:每隔一段时间,程序就对数据库进行一次检查,删除里面的过期键。至于要删除多个过期键,以及要检查多少个数据库,则由算法决定。


5、rocketmq用在什么场景。


 异步处理,应用解耦,流量削锋和消息通讯四个场景


异步处理


场景说明:用户注册后需要发送注册邮件和短信。


串行方式


先保存用户注册信息, 然后发送注册邮件, 再发送注册短信。


并行方式


保存用户信息后, 同时发送注册邮件和短信。


应用解耦


场景说明: 用户下单后系统减库存,传统模式是订单系统调用库存接口,订单系    统与库存系统耦合,引入消息队列方案后,用户下单后,保存订单,将消息


  写入消息队列,返回结果,库存系统订阅下单消息进行操作。


流量削峰


场景说明:秒杀活动中, 一般会因为流量过大导致应用挂掉, 加入消息队列可


  以缓解压力首先将用户请求写入消息队列,队列长度超过最大数据就丢弃


  掉请求,系统根据队列的请求消息再做后续处理。


6、四次挥手。


客户端进程发出连接释放报文,并且停止发送数据。释放数据报文首部,FIN=1,其序列号为seq=u(等于前面已经传送过来的数据的最后一个字节的序号加1),此时,客户端进入FIN-WAIT-1(终止等待1)状态。TCP规定,FIN报文段即使不携带数据,也要消耗一个序号。


服务器收到连接释放报文,发出确认报文,ACK=1,ack=u+1,并且带上自己的序列号seq=v,此时,服务端就进入了CLOSE-WAIT(关闭等待)状态。TCP服务器通知高层的应用进程,客户端向服务器的方向就释放了,这时候处于半关闭状态,即客户端已经没有数据要发送了,但是服务器若发送数据,客户端依然要接受。这个状态还要持续一段时间,也就是整个CLOSE-WAIT状态持续的时间。


客户端收到服务器的确认请求后,此时,客户端就进入FIN-WAIT-2(终止等待2)状态,等待服务器发送连接释放报文(在这之前还需要接受服务器发送的最后的数据)


服务器将最后的数据发送完毕后,就向客户端发送连接释放报文,FIN=1,ack=u+1,由于在半关闭状态,服务器很可能又发送了一些数据,假定此时的序列号为seq=w,此时,服务器就进入了LAST-ACK(最后确认)状态,等待客户端的确认。


客户端收到服务器的连接释放报文后,必须发出确认,ACK=1,ack=w+1,而自己的序列号是seq=u+1,此时,客户端就进入了TIME-WAIT(时间等待)状态。注意此时TCP连接还没有释放,必须经过2∗∗MSL(最长报文段寿命)的时间后,当客户端撤销相应的TCB后,才进入CLOSED状态。


服务器只要收到了客户端发出的确认,立即进入CLOSED状态。同样,撤销TCB后,就结束了这次的TCP连接。可以看到,服务器结束TCP连接的时间要比客户端早一些。


相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
1月前
|
存储 安全 Java
[Java] 阿里一面~说一下ArrayList 与 LinkedList 区别
[Java] 阿里一面~说一下ArrayList 与 LinkedList 区别
127 1
|
7月前
|
负载均衡 NoSQL Java
阿里Java一面,难度适中!(下篇)
阿里Java一面,难度适中!(下篇)
130 0
阿里Java一面,难度适中!(下篇)
|
1月前
|
Java
[Java 源码] 美团一面~ArrayList 的底层实现
[Java 源码] 美团一面~ArrayList 的底层实现
|
1月前
|
存储 Java
[JVM] 京东一面~说一下Java 类加载过程
[JVM] 京东一面~说一下Java 类加载过程
|
7月前
|
NoSQL Java 测试技术
淘天Java一面,难度适中!(上篇)
淘天Java一面,难度适中!(上篇)
77 1
|
7月前
|
Dubbo Java 应用服务中间件
阿里一面:说一说Java、Spring、Dubbo三者SPI机制的原理和区别
大家好,我是三友~~ 今天来跟大家聊一聊Java、Spring、Dubbo三者SPI机制的原理和区别。 其实我之前写过一篇类似的文章,但是这篇文章主要是剖析dubbo的SPI机制的源码,中间只是简单地介绍了一下Java、Spring的SPI机制,并没有进行深入,所以本篇就来深入聊一聊这三者的原理和区别。
|
缓存 NoSQL 安全
【腾讯一面】我对我的Java基础不自信了
【腾讯一面】我对我的Java基础不自信了
132 0
【腾讯一面】我对我的Java基础不自信了
|
人工智能 分布式计算 网络协议
【个人百度一面】----Java后端开发岗位----【校招提前批】
【个人百度一面】----Java后端开发岗位----【校招提前批】
109 0
【个人百度一面】----Java后端开发岗位----【校招提前批】
|
存储 SQL 网络协议
好友阿里一面后端Java开发秋招题目
好友阿里一面后端Java开发秋招题目
115 0
好友阿里一面后端Java开发秋招题目
|
存储 缓存 算法
每日一面 - 聊一聊Java为何需要平衡方法调用与内联
每日一面 - 聊一聊Java为何需要平衡方法调用与内联
每日一面 - 聊一聊Java为何需要平衡方法调用与内联