关于java后端开发的一些面试题
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是一个进程。
- 关于进行java学习和Android开发,本人认为的一些基础的入门必需知识,全程手敲
- 关于Java开发不明白的一些问题
- 各大公司Java后端开发面试题总结
- 各大公司Java后端开发面试题总结
- java关于Timer schedule执行定时任务 1、在应用开发中,经常需要一些周期性的操作,比如每5分钟执行某一操作等
- 关于java的一些经典面试题
- 各大公司Java后端开发面试题总结
- 关于java集合的一些面试题
- 浅谈关于离线(内网环境)使用IDEA开发阿里云MaxCompute JAVA UDF的体验与遇到的一些坑
- (最新)各大公司Java后端开发面试题总结
- 各大公司Java后端开发面试题总结
- 各大公司Java后端开发面试题总结
- 各大公司Java后端开发面试题总结
- 各大公司Java后端开发面试题总结
- 各大公司Java后端开发面试题总结
- 一些关于Java基础的面试题
- 关于一些Java开发工具的使用心得(不断更新)
- 关于Java开发UI的一些感想
- 原创:关于一些Java开发工具的使用心得(不断更新)
- 自己收集的关于java开发的一些视频