java3-5年面试题——高级篇

关于linux操作:

1.常用的文件操作命令

(1).ls命令:查看当前目录中的文件信息

ls -a         查看所有文件列表(可查看隐藏文件)
ls -l         以列表方式显示文件的详细信息
ls -h         配合-l以人性化的方式显示文件大小
ls -l -h      显示文件大小更加直观
ls -lh 
ls -hl
ls -lha 

(2).cd命令:切换工作路径

linux下文件和目录特点:
.     代表当前目录
..    代表上一级目录
 
cd        切换目录
cd ~      切换到当前用户的主目录(家目录~)
cd .      保持在当前目录不变
cd ..     切换到上级目录
cd -      可以在最近两次工作目录之间来回切换

(3).mkdir命令 :创建空白的目录

参数:
-p         可以递归递归创建出具有嵌套叠层关系的文件目录
 
mkdir 文件夹名           创建一个新的目录
例如:
mkdir -p a/b/c/d        递归创建多个目录

(4).clear命令:用于清屏
(5).rm命令:删除文件或目录
(6).vi(Visual interface)命令:如果文件已存在,会直接打开该文件;如果文件不存在,会新建一个文件

末行模式命令:
w        保存
q        退出
q!       强行退出,不保存退出
wq       保存并退出
x        保存并退出

(7).tar命令:对文件进行打包压缩或解压

参数:
-c     用于创建压缩文件
-x     用于解压文件
-t     查看压缩包内有哪些文件
-z     用Gzip压缩或解压
-j     用bzip压缩或解压
-v     显示压缩或解压的过程
-f     目标文件名,f后面一定是.tar文件,所以必须放选项最后
-p     保留原始的权限与属性
-P     使用绝对路径来压缩
-C     指定解压到的目录
-c和-x     参数不能同时使用
用户使用时则是根据文件的后缀来决定应使用何种格式参数进行解压。
tar -cvf 打包文件.tar 被打包的文件/路径(多个文件空格分开)           打包文件
tar -xvf 打包文件.tar                                             解包文件
gzip压缩
tar -zcvf 打包文件.tar.gz 被压缩的文件/路径...                     压缩文件
tar -zxvf 打包文件.tar.gz                                        解压缩文件
tar -zxvf 打包文件.tar.gz  -C 目标路径                           解压缩到指定路径
bzip2压缩
tar -jcvf 打包文件.tar.gz 被压缩的文件/路径...                    压缩文件
tar -jxvf 打包文件.tar.gz                                       解压缩文件
tar -jxvf 打包文件.tar.gz  -C 目标路径                           解压缩到指定路径

2.查看线程信息的命令

ps命令
查找指定线程

 ps -ef | grep mmp-front  //mmp-front是进程关键字

查看端口:

ps -aux | grep tomcat

查看进程

1、ps 命令用于查看当前正在运行的进程。
grep 是搜索
例如: ps -ef | grep java
表示查看所有进程里 CMD 是 java 的进程信息

2、ps -aux | grep java
-aux 显示所有状态

3. kill 命令用于终止进程
例如: kill -9 [PID]

3.项目部署命令

转:https://blog.csdn.net/m0_56915142/article/details/125414778

4.常用的数据结构

数据结构有:1.数组;2.栈;3.队列;4.链表(单链表、双向链表、循环链表);5.数;6.散列表;7.堆;8.图

5.hashmap是什么数据结构

链表散列:数组和链表的结合体

6.堆、栈、队列的特性是什么?

转:https://www.cnblogs.com/guoxiaoyan/p/8664150.html

7.树的应用场景是什么?

B-tree:B树作为索引存储结构的有mongodb,postgres,oracle,sqlserver
B+tree:mysql(innerdb)

1、AVL树: 最早的平衡二叉树之一。应用相对其他数据结构比较少。windows对进程地址空间的管理用到了AVL树。

2、红黑树: 平衡二叉树,广泛用在C++的STL中。如map和set都是用红黑树实现的。还有Linux文件管理。

3、B/B+树: 用在磁盘文件组织 数据索引和数据库索引。

4、Trie树(字典树): 用在统计和排序大量字符串,如自动机、M数据库索

8.二叉树与红黑树的理解

最多有 2 个孩子的树称为二叉树。由于二叉树中的每个元素只能有 2 个孩子,我们通常将它们命名为左孩子和右孩子。

红黑树是一种自平衡二叉搜索树,每个节点都有一个额外的位置用来存储节点的颜色(红色或黑色)。这些颜色用于确保树在插入和删除过程中保持平衡。虽然树的平衡性并不完美,但足以减少搜索时间并保持在 O(log n) 时间左右,其中 n 是树中元素的总数

9.分布式框架有哪些?

里巴巴的Dubbo,HSF,腾讯的Tars,京东的JSF,新浪的Motan

Dubbo是阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和 Spring框架无缝集成

Dubbo是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。

10.dubbo和spring cloud的比较

转:https://blog.csdn.net/xuri24/article/details/89283802

11.Restful风格的接口的理解

Restful风格的API是一种软件架构风格,设计风格而不是标准,只是提供了一组设计原则和约束条件。它主要用于客户端和服务器交互类的软件

主要由概括性的注解@RequestMapping,细分成了@DeleteMapping, @GetMapping, @PostMapping,@PatchMapping,@PutMapping等

12.rpc框架有哪些?如何使用?

Dubbo:国内最早开源的 RPC 框架,由阿里巴巴公司开发并于 2011 年末对外开源,仅支持 Java 语言。

Motan:微博内部使用的 RPC 框架,于 2016 年对外开源,仅支持 Java 语言。

Tars:腾讯内部使用的 RPC 框架,于 2017 年对外开源,仅支持 C++ 语言。

Spring Cloud:国外 Pivotal 公司 2014 年对外开源的 RPC 框架,仅支持 Java 语言

具体使用
1.Dubbo 的架构主要包含四个角色,其中 Consumer 是服务消费者,Provider 是服务提供者,Registry 是注册中心,Monitor 是监控系统。
具体的交互流程是 Consumer 一端通过注册中心获取到 Provider 节点后,通过 Dubbo 的客户端 SDK 与 Provider 建立连接,并发起调用。Provider 一端通过 Dubbo 的服务端 SDK 接收到 Consumer 的请求,处理后再把结果返回给 Consumer

2.Motan 与 Dubbo 的架构类似,都需要在 Client 端(服务消费者)和 Server 端(服务提供者)引入 SDK,其中 Motan 框架主要包含下面几个功能模块。

register:用来和注册中心交互,包括注册服务、订阅服务、服务变更通知、服务心跳发送等功能。

protocol:用来进行 RPC 服务的描述和 RPC 服务的配置管理,这一层还可以添加不同功能的 filter 用来完成统计、并发限制等功能。

serialize:将 RPC 请求中的参数、结果等对象进行序列化与反序列化

transport:用来进行远程通信,默认使用 Netty NIO 的 TCP 长链接方式。

cluster:请求时会根据不同的高可用与负载均衡策略选择一个可用的 Server 发起远程调用。

3.Spring Cloud微服务架构是由多个组件一起组成的,各个组件的交互流程如下。

》请求统一通过 API 网关 Zuul 来访问内部服务,先经过 Token 进行安全认证。

》通过安全认证后,网关 Zuul 从注册中心 Eureka 获取可用服务节点列表。

》从可用服务节点中选取一个可用节点,然后把请求分发到这个节点。

》整个请求过程中,Hystrix 组件负责处理服务超时熔断,Turbine 组件负责监控服务间的调用和熔断相关指标,Sleuth 组件负责调用链监控,ELK 负责日志分析。

13.rpc和http的对比

http请求是使用具有标准语义的通用的接口定向到资源的,这些语义能够被中间组件和提供服务的来源机器进行解释。与之相比较,rpc的机制是根据语言的API来定义的,而不是根据基于网络的应用来定义的。
RPC——远程过程调用协议
HTTP——超文本传输协议

14.负载均衡的理解

负载均衡(Load Balance,简称 LB)是高并发、高可用系统必不可少的关键组件,目标是 尽力将网络流量平均分发到多个服务器上,以提高系统整体的响应速度和可用性。

负载均衡的主要作用如下:

高并发:负载均衡通过算法调整负载,尽力均匀的分配应用集群中各节点的工作量,以此提高应用集群的并发处理能力(吞吐量)。

伸缩性:添加或减少服务器数量,然后由负载均衡进行分发控制。这使得应用集群具备伸缩性。

高可用:负载均衡器可以监控候选服务器,当服务器不可用时,自动跳过,将请求分发给可用的服务器。这使得应用集群具备高可用的特性。

安全防护:有些负载均衡软件或硬件提供了安全性功能,如:黑白名单处理、防火墙,防 DDos 攻击等。

15.常用的mq的种类

ActiveMQ
比较古老的项目的维护,可能会应用到ActiveMQ。新的项目应用很少。单从ActiveMQ的性能上来说,笔者认为其和RabbitMQ是不分伯仲的。现在很少应用的原因笔者认为是其功能较为单一造成的。

RabbitMQ:
对于数据量不是特别大的业务场景,RabbitMQ是最为合适的选择。从功能方面说,RabbitMQ提供了程序员在MQ使用过程中各种需求的机制,功能还是比较丰富的。从使用成本上考虑,RabbitMQ相比于RocketMQ,Kafka对服务器的要求都比较低。所以对于大部分中小型企业来说,都选择了RabbitMQ作为了消息中间件。

Kafka:
如果单是从作为MQ来使用的话,选择Kafka作为MQ笔者认为这不是一个合理的选择。Kafka用于MQ使用的话,其功能性相对来说还是比较单一的。比如说,Kafka并没有提供类似于RabbitMQ中死信队列的机制,总体感觉就是Kafka在收发消息中只实现了基本的功能,没有为程序员提供各种需求的处理机制。
但是Kafka在大数据领域发挥出了特别的作用。其流处理功能等特性,被大数据广泛应用。所以笔者说单纯作为MQ使用的话,Kafka不是第一首选。但是Kafka涉及的生态比较多,所以在实际生产中,我们常常看见Kafka既作为了MQ在使用,又作为了数据治理的工具来使用。

RocketMQ:
上面说到单纯用于MQ使用,Kafka不是 第一选择,那么在大数据量的场景下使用MQ,应该如何选择呢?没错,使用RocketMQ。虽然RocketMQ的前身出自Kafka。但是在Kafka的基础上,衍生出了很多MQ独有的特性和功能。RocketMQ对于服务器的要求较高,成本较大,所以没有大数据量的业务场景下,还是不要为了装逼而选择RocketMQ了,比较老板心疼的是钱,而不是技术的逼格有多高。

EMQX:
EMQX相当于物联网领域的Kafka,支持大数据量业务场景。其实现了MQTT协议,并在此基础上扩展出很多MQ的特性和机制。对于单纯的java程序员来说,可能对EMQX并不熟悉,但是EMQX也可以作为一款高性能MQ,满足大多数的业务场景。

16.RabbitMQ的作用

RabbitMQ的常见作用有三种,分别是服务间解耦、实现异步通信、流量削峰。

应用场景一:用户订单,库存处理。【服务间解耦】

应用场景二:用户注册,发送手机短信,邮件。【实现异步通信】

应用场景三:商品秒杀和抢购。【流量削峰】

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值