面试问题总结(二)

面试问题总结

一 SpringBoot常用标签
1. 启动注解 @SpringBootApplication
@SpringBootApplication 是一个复合注解
主要注解:
	@SpringBootConfiguration  主要用于加载配置文件
	@EnableAutoConfiguration  主要用于开启自动配置功能
	@ComponentScan			  主要用于组件扫描和自动装配
2. Controller相关注解
  1. @Controller
    控制器,标明该类是一个处理请求的控制器,主要用于处理http请求
  2. @RestController
复合注解:
	@ResponseBody + @Controller
  1. @GetMapping
    用在Controller的方法中,标明该接口只处理Get请求
  2. @PostMapping
    用在Controller的方法中,标明该接口只处理Post请求
  3. @RequestMapping
    用于Controller的方法中,标明该接口的请求地址,可以指定get,post,put,delete四种请求方式
  4. @RequestParam
    用于Controller的参数中,用于接收普通的参数(非对象)
  5. @RequestBody
    用于Controller的参数中,用于接收POST请求体中的JSON,转换为参数对象
  6. @PathVariable
    用于Controller的参数中,用于接收URL中RESTFUL类型的参数
比如  : http://URL/getUser/12345
@RequestMapping("/getUser/{uid}")
public String getUser(@PathVariable("uid")Integer id) {
     System.out.println("id:"+id);
     return "user";
 }
  1. @ResponseBody
    将Controller返回值转换成JSON的格式传给前端
3. 注入Bean相关
  1. @Repository
    用于Dao层,标明这是访问数据库的持久层
  2. @Service
    用于业务逻辑层,其内部方法 包含具体的业务逻辑
  3. @Entity
    用于实体类中,标明与数据库中的表对应
    @Id、@Column注解用于标注实体类中的字段
  4. @Scope
    作用在类上和方法,标明该bean的作用域
  5. @Bean
    在配置类中使用,即类上需要加上@Configuration注解
    (如果你想要将第三方库中的组件装配到你的应用中,在这种情况下,是没有办法在它的类上添加@Component注解的,因此就不能使用自动化装配的方案了,但是我们可以使用@Bean)
  6. @Autowired
    作用在构造函数、方法、方法参数、类字段以及注解,主要用于Bean的注入
  7. @Component
    把普通pojo实例化到spring容器中,相当于配置文件中
4. 导入配置文件
  1. @PropertySource
    作用是引入properties文件
@PropertySource(value = {"classpath : xxxx/xxx.properties","classpath : xxxx.properties"})
  1. @ImportResource
    作用是导入xml配置文件,可以相对路径也可以绝对路径
@ImportSource(locations={"classpath : xxxx.xml" , "classpath : yyyy.xml"})
@ImportSource(locations= {"file : d:/hellxz/application.xml" , "file : d:/hellxz/dubbo.xml"})
  1. @Import
    作用是导入额外的配置信息
5. 事务注解

@Transactional
在Spring中,事务有两种实现方式,分别是编程式事务管理和声明式事务管理两种方式

  • 编程式事务管理: 编程式事务管理使用TransactionTemplate或者直接使用底层的PlatformTransactionManager。对于编程式事务管理,spring推荐使用TransactionTemplate。

  • 声明式事务管理: 建立在AOP之上的。其本质是对方法前后进行拦截,然后在目标方法开始之前创建或者加入一个事务,在执行完目标方法之后根据执行情况提交或者回滚事务,通过@Transactional就可以进行事务操作,更快捷而且简单。推荐使用

六. 全局异常处理
  1. @ControllerAdvice
    异常集中处理,更好的使业务逻辑与异常处理剥离开,可以指定某一个类为异常处理类,并包含各种类型的异常处理,作用在类上
// 定义这个类就是用来处理异常的
@ControllerAdvice
public class GlobalExceptionHandler {
}
  1. @ExceptionHandler
    统一处理某一类异常,从而能够减少代码重复率和复杂度,并生成对应的映射关系,作用在方法上
@ControllerAdvice
public class GlobalExceptionHandler {
	// 标明这个方法用来处理哪一种异常
    @ExceptionHandler(Exception.class)
    @ResponseBody
    String handleException(){
        return "Exception Deal!";
    }
}
二 MVC设计模型与三层架构描述
服务器端三层架构:
表现层 SpringMVC
业务层 Spring
持久层 Mybatis
MVC设计模式:
M -> Model 模型,也就是javaBean,操作的数据或信息
V -> View视图,jsp,html等,用于提供给用户交互
C -> Controller控制器,Servlet,根据View的指令选取Model层的数据,传给View
三 事务放在Dao还是Service

事务要一般都放在Service层,Controller如果有需要也可以加,但是不会放在Dao层,因为一个业务可能要处理多次数据库,如果放在Dao层,则第一次操作数据库成功第二次失败的时候就无法完全回滚.

四 MyBatis传递参数方法
一 普通类型参数
直接在Mapping文件中使用#{name}
public User queryUserById(Integer id);

<select id="queryUserById" resultType="com.webcode.pojo.User">
		select id,last_name lastName,sex from t_user where id = #{id}
</select>
二 多个普通类型参数
public List<User> queryUserByNameAndSex(String name, Integer sex);

<select id="queryUserByNameAndSex" resultType="com.webcode.pojo.User">
		<!-- 
			多个普通类型的参数,在配置sql语句的时候,
			方案一:那么在#{}占位符中,可以写0,1
			0表示第一个参数,1表示第二个参数。(不推荐使用)
			
			方案二:那么在#{}占位符中,可以写param1,param2……
			param1表示第一参数
			param2表示第二个参数
			以此类推 第n个参数,就是paramn
		 -->
		select id,last_name lastName,sex from t_user where last_name = #{param1} and sex = #{param2}
	</select>
三 @Param注解命名参数
public List<User> queryUserByNameAndSex(@Param("name") String name,
			@Param("sex") Integer sex);

<select id="queryUserByNameAndSex" resultType="com.webcode.pojo.User">
	<!-- 
		public List<User> queryUserByNameAndSex(@Param("name") String name,
			@Param("sex") Integer sex);
		当我们在方法的参数上使用了@Param注解给参数进行全名之后,我们可以在配置的sql语句中的占位符里写中参数的名
		 -->
		select id,last_name lastName,sex from t_user where last_name = #{name} and sex = #{sex}
	</select>
四 Map对象作为参数
public List<User> queryUserByMap(Map<String, Object> param);



<select id="queryUserByMap" resultType="com.webcode.pojo.User">
		<!-- 
			当参数是Map类型的时候,sql语句中的参数名必须和map的key一致
			map.put("name",xxx);
			map.put("sex",xxx);
		 -->
		select id,last_name lastName,sex from t_user where last_name = #{name} and sex = #{sex}
	</select>
五 JavaBean数据类型
public List<User> queryUserByUser(User user);

<select id="queryUserByUser" resultType="com.webcode.pojo.User">
		<!-- 当传递的参数是javaBean对象的时候,在sql语句的配置的占位符中,使用属性名 -->
		select id,last_name lastName,sex from t_user where last_name = #{lastName} and sex = #{sex}
	</select>
六 模糊查询
public List<User> queryUsersByNameLike(String lastName);

<select id="queryUsersByNameLike" resultType="com.webcode.pojo.User">
	<!-- 
		#{}		是占位符
		${}		是字符串原样输出,然后做字符串拼接(有sql注入的风险)
		concat 是mysql提供的字符串拼接函数。
	 -->
		select id,last_name lastName,sex from t_user where last_name like concat('%',#{lastName},'%')
	</select>
五 Linux查询日志,切换用户
一 查看日志
  1. tail -f XXX.log (最常用)
    实时查看日志 tail -n 10 XXX.log 查看后几行
  2. cat -n XXX.log |grep "关键字"(常用)
    根据关键字查看日志
  3. hard -n 10 XXX.log
    查看日志开头10行
  4. vim之后 /关键字 查看
  5. more/less如果显示太多不方便
cat -n test.log |grep "debug" |more  分页打印,(空格键翻页)
二 切换用户
su 用户名
或
sudo su 用户名
六 如何构建开发环境

给你一个GIT地址,如何搭建开发环境,需要向老员工要什么数据?

  1. 公司的maven私服地址
  2. Mysql的路径和用户信息
  3. Gitlab项目地址
  4. Redis的地址等其他
七 权限,如何不同用户看到的东西不同
八 如何弹出表单详情
九 VUE常用标签
v-text  可以与{{}}代替(不识别html标签)
v-html  页面添加html元素
v-bind  数据绑定,可以使用 : 代替
v-on    事件绑定,可以使用@代替
v-model   表单元素和数据的双向绑定
v-if v-else  判断
v-show   根据boolean值判断显示不显示
v-for     循环遍历(一定要设置key)
十 JQuery实现三个表单元素的数据连在一起发送给后端

有三个输入框name分别为a1,a2,a3如何将数据逗号隔开传到后台?
使用属性选择器匹配name属性以a开头的输入框

var data;
$("input[name^=a]').each(function(){
	data=data+$(this).val()
})
十一 JQuery选择器有哪些
id选择器
类选择器
元素选择器
属性选择器
后代选择器
子选择器
同辈选择器
等其他

参考博客
https://www.php.cn/js-tutorial-378052.html

十二 VUE实现动态追加class属性
<template>
  <div>
    <h2>动态添加类名</h2>
    <!-- 第一种方式:对象的形式 -->
    <!-- 第一个参数 类名, 第二个参数:boolean值 -->
    <!-- 对象的形式: 用花括号包裹起来,类名用引号, -->
    <!-- 优点: 以对象的形式可以写多个,用逗号分开 -->
    <p :class="{'p1' : true}">对象的形式(文字的颜色)</p>
    <p :class="{'p1' : false, 'p': true}">对象的形式(文字的颜色)</p>

    <!-- 第二种方式:三元表达式 注意点:放在数组中,类名要用引号-->
    <p :class="[ 1 < 2 ? 'p1' : 'p' ]" >三元表示式(文字的颜色)</p>

    <!-- 第三种方式: 数组的形式 -->
    <p :class="[isTrue, isFalse]">数组的形式(文字的颜色)</p>
 
    <!-- 数组中用对象 -->
    <p :class="[{'p1': false}, isFalse]">数组中使用对象(文字的颜色)</p>

 <!--补充: class中还可以传方法,在方法中返回类名-->
 <p :class="setClass">通过方法设置class类名</p>
  </div>
</template>


<script>
  export default {
    data () {
      return {
        isTrue: 'p1',
        isFalse: 'p'
      };
    },
 
 method: {
 setclass () {
    return 'p1';
   }
 }
  }
</script>


<style scoped>
  .p1 {
    color: red;
    font-size: 30px;
  }
  .p {
    color: blue
  }
</style>
十三 VUE的V-FOR标签的key的作用
十四 MyBatis标签
  1. select
  2. insert
  3. delete
  4. update
  5. if
  6. foreach
  7. resultMap
  8. Collection
  9. id
  10. sql
  11. trim
  12. accociation
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值