Java高级阶段考试题库

1.Maven中A依赖B,B依赖C,那么A可以使用C中的类吗?

答案:
此时要看B依赖C时的范围(scope),如果是compile范围则A可以使用C,如果test或provided范围则A不能使用C.

2.SpringBoot中有一个类标记了@Controller注解,现在想要通过自动包扫描机制把这个类的对象加入IOC容器,那么这个类应该放在拿?

答案:
方案A:将标记了@Controller注解的类放在主启动类所在包的子包下。
方案B:在主启动类上使用@ComponentScan注解

3.Git 在向远程origin推送dev分支的代码时失败,需要解决冲突,如何操作

答案:
(1)先运行 git pull orgin dev
(2)发现有冲突后,修改冲突文件
(3)运行git add 文件名;git commit “注释”
(4)运行git push origin dev

4.下面依赖信息对应的jar包在Maven仓库根目录下的路径是什么?

<dependency>
		<groupId>org.apache.commons</groupId>
		<artifactId>commons-lang3</artifactId>
		<version>3.1</version>
</dependency>

答案:Maven本地库根目录/org/apache/commons/commons-lang3/3.1/commons-lang3-3.1.jar

5.项目的单一架构和分布式架构有什么本质区别?

答案:
单一架构应用打包后是一个war包,在一个台Tomcat上运行。分布式架构应用打包后有很多的war包,分别在不同Tomcat上运行。

6.分布式架构有什么好处?

答案:
1.模块化、组件化程度高。项目容易开发、维护、分工。
2.高内聚、低耦合
3.既可以单独部署到Tomcat上,又可以将某一组件配置集群。所以分布式架构可以提升性能。

7.分布式和集群这两个概念有什么区别?

答案:
分布式系统在多台服务器上运行不同模块,集群在多台服务器上运行相同模块。

8.什么是方法的远程调用?

答案:
服务提供方将方法暴露在网络上,消费方通过网络调用目标方法。这个过程中底层需要消费方发送请求,接收响应。

9.在分布式架构应用中注册中心起到了什么作用?

答案:
注册中心中存储服务提供方所暴露的服务的详细信息,借助注册中心中存储的信息就能通过远程方法调用框架实现声明式调用(像调用本地方法一样调用远程方法)。

10.你如何理解负载均衡?

答案:
在负载沉重时由多台服务器分担负载。具体工作时由负载均衡服务器基于特定算法将每一个具体请求分配到具体服务器上。

11.Redis有哪些常用的数据类型?

答案:
string、list、set、hash、zset

12.在Linux中如何通过命令查看指定进程信息?(比如查看mysql进程)

答案:
ps -ef | grep mysql

13.Redis是单线程还是多线程?为什么能支持访问量和高并发?

答案:
单线程
1)完全基于内存,绝大部分请求为纯内存操作,非常快速。数据存在内存中,类似于HashMap,HashMap的优势就是查找和操作的时间复杂度 都是O(1)
2)采用单线程,避免了不必要的上下文切换和竞争条件,也不存在多进程或者多进程导致的切换二小号CPU,不用考虑各种锁的问题,不存在加锁和放锁操作,没有因为可能出现死锁而导致的性能消耗。
3)使用多路I/O复用模型。非阻塞IO

14.Linux命令中的管道要使用什么符号?它是如何工作的?

答案:
管道符号是 “ | ”,表示前面命令的输出作为后面命令的输入。

15.简单介绍一下SpringCloud中的服务熔断机制。

答案:
微服务系统中由于调用链很长,所以一处出现问题或者超时时,会逐渐蔓延到整个系统。为了避免这样的问题,熔断机制要求给被调用的方法准备备用方案,一旦目标方法调用失败则调用备用方法返回相同类型的返回值。备用方法要求入参、返回值和原方法一样。

16.mkdir -p /aaa/bbb/ccc命令中-p表示什么?

答案:
表示一次性创建多层目录。

17.Springboot和SpringCloud开发中常用的注解

答案:
@EnableDiscoveryClient
@SpringBootApplication
@Configuration
@RestController
@EnableFeignClients
@FeignClient
@ServletComponentScan
@MapperScan
@EnableTransactionManagement
@Bean
@EnableDiscoveryClient

18.pwd命令的作用是什么?

答案:
打印当前所在目录的绝对路径

19.为什么说Ribbon是一种客户端的负载均衡?

答案:
因为是使用Ribbon时从consumer出发在Eureka中查询对应的微服务信息,决定从集群中访问哪一个实例。

20.说说Redis哈希槽的概念?

答案:
Redis集群没有使用一致性hash,而是引入了哈希槽的概念,Redis集群中有16384个哈希槽,每个key通过CRC16校验后对16384取模来决定放置哪个槽,集群的每个节点负责一部分hash槽。

21.Maven中A依赖B,B依赖C,那么A可以使用C中的类吗?

答案:
此时要看B依赖C时的范围,如果complie范围A可以使用C,如果是test或者provided范围则A不能使用C。

22.SpringBoot中有一个类标记了@Controller注解,现在想要通过自动扫描包机制把这个类的对象加入IOC容器,那么这个类应该放在哪?

答案:
方案A:将标记了@Controller注解的类放在主启动类所在包的子包下。
方案B:在主启动类上使用@ComponentScan注解。

23.通过Maven下载jar包,下载失败了怎么办?(提示:分*.lastUpdated和内部损坏两种情况说明)

答案:
.lastUpdated情况:将.lastUpdated文件删除,重新下载。如果*.lastUpdated这样的文件很多,则使用专门的批处理脚本统一清理。
内部损坏情况:删除损坏的jar包重新下载。

24.你如何理解悲观锁和乐观锁?

答案:
如果判断当前环境容易发生碰撞,那么在操作数据时会进行锁定,这是悲观锁。如果判断当前环境不容易发生碰撞,那么在操作数据时不进行锁定,在偶尔发生碰撞时释放自身操作,这是乐观锁。

25.以下命令执行的结果是什么?

答案:
lpush fruitlist apple banana grape orange
lrange fruitlist 0 -1
结果:
orange
grape
banana
apple

26.Redis有哪些持久化机制?它们分别是如何工作的?

答案:
RDB: 每隔一段时间将数据快照保存到硬盘上
AOF: 每隔一段时间将生成数据的命令保存到硬盘上。

27.Redis主从复制集群中配置哨兵能起到什么作用?

答案:
在master宕机后自动从slave中选举新的master。在slave宕机再重新启动后自动建立主从关系。

28.cp -r /aaa/bbb/ccc /aaa/bbb/ddd命令中-r表示什么?

答案:
表示当前复制操作的目标是目录。

29.MyBatis的Mapper.xml配置文件中#{}和${}有什么区别?

答案:#{}会将表达式的值通过“?”占位符传入SQL语句,而${}会以拼字符串的形式传入SQL语句。

30.在Linux中如何通过命令查看指定进程占用的端口号信息?(比如查看mysql占用的端口号)

答案:
netstat -anp | grep mysql

31.springcloud组件有哪些

答案:
服务发现——Netflix Eureka
客服端负载均衡——Netflix Ribbon
断路器——Netflix Hystrix
服务网关——Netflix Zuul
分布式配置——Spring Cloud Config

32.在Linux中如何通过命令查看指定进程占用的端口号信息?(比如查看mysql占用的端口号)

答案:
netstat -anp | grep mysql
ps -ef |grep mysql

33.Nginx有哪些基本功能?

答案:(1)反向代理(2)负载均衡(3)动静分离