您的位置:首页 > 编程语言 > Java开发

关于java后端开发的一些面试题

2020-06-05 09:50 120 查看

 

1.springboot的多环境配置

在application.yml中增加spring.profiles.active=dev,那么接下来创建application-dev.yml这个配置文件,再次配置端口server.port=8081  即可访问当前环境的配置文件。

2.springboot的日志

在springboot-starter中默认集成了logback。日志级别分别为error,warn,info,debug,trace

3.springboot的自动装配原理

在启动类中有一个这个样的注解@springbootApplication,这个注解其中又集成了三个注解@configuration,@EnableAutoConfiguration和@ComponentScan,configuration注解其实是一个ioc容器的配置类,ComponentScan注解主要是将当前包下的关于@Component(组件),@Repository(存储),@Service,@Controller等被注解的类注入启动类的ioc容器中,EnableAutoConfiguration这个注解把所有符合条件的配置类(用@Configuration修饰)注入到启动类的ioc容器。并且这个注解下的类AutoConfigurationImportSelector中的方法springFactoriesLoader引入了jar中meta-inf中的一些类,这些类就是自动装配所需要的类。

4.springboot常用的注解

@import 导入其他配置类,@importResource 加载xml文件,@autowired 自动导入依赖的bean,@reposity 确保为dao层提供转义,被@EnableAutoScan发现,@bean等价于在xml中使用bean,@value 注入yml中的属性值,@Component 组件,当一个组件不好归类时使用它,@Resource(name="name1",type="type1")默认类型为byname,和@autowire类似(bytype),@PathVariable 获取参数

spring JDA

5.JPA常用的一些注解

@Entity 定义在实体类之上 。@Table(name=“name1”)name1表示表名,如果表名和实体名一样,则忽略属性不填,@Column 表示字段名,一样也可以不填,@id 主键 。@GeneratedValue(strategy=GenerationType.SEQVENCE,generator=“requar_seq”)这里是主键生成策略,指定SEQVENCE名字叫requar_seq。@JsonIgnore json序列化将bean中的一些属性省略。@JoinColumn(name="loginId"),一对一,表中字段指向另外一个表的外键;一对多,另一个表指向本表的外键。@OneToOne,@OneToMany一对一,一对多

6.springboot的自定义注解

首先在pom.xml中添加aop依赖,然后自定义一个类实现3个元注解@Target()表示出现的位置,@Rentention表示这个注解保留多久(一般使用runtime),@Documented文档,接着在类中使用public+@public +类名{}的方式,在打括号中创建方法,那么类名即为注解名,方法名即注解中的属性名。接下来需要再创建一个切面类加上注解@Aspect,@Component,@Pointcut(此处写入刚刚创建的注解类的地址),最后根据具体的业务逻辑加入诸如@Around方法或@Before,@AfterRunning等

7.什么是springboot

基于spring的开发,提供更快的入门体验,无需xml配置,提供快速使用spring的方式。

8.springboot的优缺点

优点:轻量级。缺点:配置较重,导致耗时较多

9.mybatis的原理

通过sqlSessionFactory创建sqlsession,sqlsession中包含执行sql语句的方法,然后通过sqlsession映射sql语句。

10.mybatis中mapper的工作流程及原理

xml中的namespace表示找到当前对应的java类,id表示java接口中的方法名,出入参:paramType/resultType对应方法中的出入参。原理:mybatis使用jdk的动态代理方式为mapper接口创建了proxy对象,代理对象从而拦截接口中的方法,执行mapperStatment所代表的sql,最后将执行结果返回。

11.mybatis接口绑定的方式

使用注解@select,@update等实现一些简单sql语句,如果sql语句较复杂,可以在xml中定义sql,通过xml的映射解析sql

12.mybatis实现一对多

使用resultmap属性,其中property表示java类中定义的属性名,column表示数据库的字段名,oftype/javaType表示java中的数据类型,jdbcType表示数据库中对应的数据类型,一对一一的情况下使用assocation标签,儿一对多的情况使用collection标签来收集多一方的数据。

13.mybatis中的动态sql

<where>标签,如果where返回的内容以and和or开头,默认将会省略掉这些关键字;<set>标签,如果包含的语句以逗号结束会省略掉,<trim>标签可以定义属性perefix(前缀)prefixOverriders/suffixOverrides(省略的关键字或符号);<choose>标签,按顺序半段where标签中tst条件是否满足,如果成立则结束,如果where中的条件都不满足,则执行otherwise;引用sql片段使用<includ>标签,属性refid=“sqltemp“,定义一个id为sqltemp的sql,<sql id=sqltemp>

14#{}和${}的区别

${}是配置文件中的变量占位符,作用域sql内部,#{}是参数占位符,#{}最终会被替换成?

15.mybatis的一级缓存二级缓存

mybatis默认支持一级缓存,在使用sqlsession查询后,mybatis会将其放在缓存中,如果之后再次查询,并且缓存没有超时的情况下,sqlsession都会取出当前缓存的数据,二级缓存需要开启,操作的对象需要进行序列化,配置文件中需要使用<cache>标签,

然后将对象存入第三方缓存库中。

16.mybatis延迟加载(懒加载)

在配置文件中加入LayLoadingEnabled=true/false

17.springcloud的优缺点

每个服务足够内聚,代码容易理解。开发效率更高,一个服务只做一件事。可以灵活搭配链接公库/私库

18.springcloud和dubbo的区别

调用方式dubbo为rpc,cloud为rest api;注册中心dubbo为zookeeper,cloud为euraka;cloud有zuul路由网关作为路由器,同样支持断路器,与git完美集成版本控制,dubbo只能通过第三方实现。

19.rest和rpc对比

rest是轻量级的接口,服务的提供和调用并不存在耦合。只需要约定经行规范;rpc主要缺陷是服务方和调用方式依赖太强,需要对每个微服务接口定义。

20.负载均衡的意义

负载均衡改善计算机资源的工作负载分布,能够优化资源的使用最大吞吐量和最小相应时间 ,避免单一资源过载

21.微服务之间的通信

远程调用使用fegin,通过远程服务访问service

22.实现服务注册

服务发布时,指定对应的服务名注册到注册中心,在注册中心加上注解@EnableEurekaServer,在服务中加上@EnableDiscoveryClient,然后用fegin进行调用。

23.Eureka和zookeeper的区别

Eueka注重可用性,zookeeper注重一致性;zokeepe在选举期间,注册服务瘫痪;Eureka有自我保护机制,不会从注册列表中移除因为长时间没有收到心跳而过期的服务,依然能接受新的服务;Eureka本质上是一个工程,而zookeeper是一个进程。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: