2024年Day02--搭建项目环境、后台讲师模块,2024年最新web前端面试问的问题

文末

如果30岁以前,可以还不知道自己想去做什么的话,那30岁之后,真的觉得时间非常的宝贵,不能再浪费时间在一些碎片化的事情上,比如说看综艺,电视剧。一个人的黄金时间也就二,三十年,不能过得浑浑噩噩。所以花了基本上休息的时间,去不断的完善自己的知识体系,希望可以成为一个领域内的TOP。

同样是干到30岁,普通人写业务代码划水,榜样们深度学习拓宽视野晋升管理。

这也是为什么大家都说30岁是程序员的门槛,很多人迈不过去,其实各行各业都是这样都会有个坎,公司永远都缺的高级人才,只用这样才能在大风大浪过后,依然闪耀不被公司淘汰不被社会淘汰。

269页《前端大厂面试宝典》

包含了腾讯、字节跳动、小米、阿里、滴滴、美团、58、拼多多、360、新浪、搜狐等一线互联网公司面试被问到的题目,涵盖了初中级前端技术点。

开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

前端面试题汇总

JavaScript

6、配置Swagger2

===========================================================================

swagger作用:生成一个在线的文档,在这个文档里可以方便接口的测试。

在这里插入图片描述

6.1、编写swagger配置类


在这里插入图片描述

在这里插入图片描述

package com.nonglin.baseservice;

import com.google.common.base.Predicates;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

import springfox.documentation.builders.ApiInfoBuilder;

import springfox.documentation.builders.PathSelectors;

import springfox.documentation.service.ApiInfo;

import springfox.documentation.service.Contact;

import springfox.documentation.spi.DocumentationType;

import springfox.documentation.spring.web.plugins.Docket;

import springfox.documentation.swagger2.annotations.EnableSwagger2;

@Configuration//配置类

@EnableSwagger2 //swagger注解

public class SwaggerConfig {

@Bean

public Docket webApiConfig(){

return new Docket(DocumentationType.SWAGGER_2)

.groupName(“webApi”)

.apiInfo(webApiInfo())

.select()

.paths(Predicates.not(PathSelectors.regex(“/admin/.*”)))

.paths(Predicates.not(PathSelectors.regex(“/error.*”)))

.build();

}

private ApiInfo webApiInfo(){

return new ApiInfoBuilder()

.title(“网站-课程中心API文档”)

.description(“本文档描述了课程中心微服务接口定义”)

.version(“1.0”)

.contact(new Contact(“java”, “http://atguigu.com”, “1123@qq.com”))

.build();

}

}

6.2、


在这里插入图片描述

com.nonglin

service_base

0.0.1-SNAPSHOT

6.3、


在这里插入图片描述

package com.nonglin.eduservice;

import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication;

import org.springframework.context.annotation.ComponentScan;

/**

  • @Description :

  • @Author :lenovo

  • @Date :2021/2/21 18:59

*/

@SpringBootApplication

@ComponentScan(basePackages = {“com.nonglin”})

public class EduApplication {

public static void main(String[] args) {

SpringApplication.run(EduApplication.class,args);

}

}

6.4、浏览器地址栏访问:http://localhost:8001/swagger-ui.html


在这里插入图片描述

6.5、定义接口说明和参数说明


定义在类上:@Api

定义在方法上:@ApiOperation

定义在参数上:@ApiParam

package com.nonglin.eduservice.controller;

import com.nonglin.eduservice.entity.EduTeacher;

import com.nonglin.eduservice.service.EduTeacherService;

import io.swagger.annotations.Api;

import io.swagger.annotations.ApiOperation;

import io.swagger.annotations.ApiParam;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.web.bind.annotation.*;

import java.util.List;

/**

  • 讲师 前端控制器

  • @author Lenovo

  • @since 2021-02-21

*/

@Api(description=“讲师管理”)

@RestController

@RequestMapping(“/eduservice/teacher”)

public class EduTeacherController {

//把service注入

@Autowired

private EduTeacherService eduTeacherService;

//查询所有讲师信息

@ApiOperation(value = “所有讲师列表”)

@GetMapping(“/findAll”)

public List findAll() {

List list = eduTeacherService.list(null);

return list;

}

//删除讲师

@ApiOperation(value = “根据ID删除讲师”)

@DeleteMapping(“{id}”)

public boolean deleteTeacher( @ApiParam(name = “id”, value = “讲师ID”, required = true) @PathVariable String id) {

boolean flag = eduTeacherService.removeById(id);

return flag;

}

}

7、统一结果返回

=======================================================================

7.1、在common模块里创建子模块common_utils


在这里插入图片描述

7.2、创建interface,定义数据发挥状态码


在这里插入图片描述

package com.nonglin.commonutils;

/**

  • @Description :

  • @Author :lenovo

  • @Date :2021/2/21 21:19

*/

public interface ReslutCode {

public static Integer SUCCESS = 20000;//成功

public static Integer ERROR = 20001;//失败

}

7.3、


在这里插入图片描述

package com.nonglin.commonutils;

import io.swagger.annotations.ApiModelProperty;

import lombok.Data;

import java.util.HashMap;

import java.util.Map;

@Data

public class R {

@ApiModelProperty(value = “是否成功”)

private Boolean success;

@ApiModelProperty(value = “返回码”)

private Integer code;

@ApiModelProperty(value = “返回消息”)

private String message;

@ApiModelProperty(value = “返回数据”)

private Map<String, Object> data = new HashMap<String, Object>();

private R(){}

public static R ok(){

R r = new R();

r.setSuccess(true);

r.setCode(ResultCode.SUCCESS);

r.setMessage(“成功”);

return r;

}

public static R error(){

R r = new R();

r.setSuccess(false);

r.setCode(ResultCode.ERROR);

r.setMessage(“失败”);

return r;

}

public R success(Boolean success){

this.setSuccess(success);

return this;

}

public R message(String message){

this.setMessage(message);

return this;

}

public R code(Integer code){

this.setCode(code);

return this;

}

public R data(String key, Object value){

this.data.put(key, value);

return this;

}

public R data(Map<String, Object> map){

this.setData(map);

return this;

}

}

7.4、引入依赖


在这里插入图片描述

com.nonglin

common_utils

0.0.1-SNAPSHOT

7.5、把接口返回方法改成R


在这里插入图片描述

package com.nonglin.eduservice.controller;

import com.nonglin.commonutils.R;

import com.nonglin.eduservice.entity.EduTeacher;

import com.nonglin.eduservice.service.EduTeacherService;

import io.swagger.annotations.Api;

import io.swagger.annotations.ApiOperation;

import io.swagger.annotations.ApiParam;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.web.bind.annotation.*;

import java.util.List;

/**

  • 讲师 前端控制器

  • @author Lenovo

  • @since 2021-02-21

*/

@Api(description=“讲师管理”)

@RestController

@RequestMapping(“/eduservice/teacher”)

public class EduTeacherController {

//把service注入

@Autowired

private EduTeacherService eduTeacherService;

//查询所有讲师信息

@ApiOperation(value = “所有讲师列表”)

@GetMapping(“/findAll”)

public R findAll() {

List list = eduTeacherService.list(null);

return R.ok().data(“items”,list);

}

//删除讲师

@ApiOperation(value = “根据ID删除讲师”)

@DeleteMapping(“{id}”)

public R deleteTeacher( @ApiParam(name = “id”, value = “讲师ID”, required = true) @PathVariable String id) {

boolean flag = eduTeacherService.removeById(id);

if(flag){

return R.ok();

}else{

return R.error();

}

}

}

8、后台讲师管理模块,分页查询

==============================================================================

8.1、首先在配置类中引入mybatis-plus分页插件


package com.nonglin.eduservice.config;

import com.baomidou.mybatisplus.core.injector.ISqlInjector;

import com.baomidou.mybatisplus.extension.injector.LogicSqlInjector;

import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;

import org.mybatis.spring.annotation.MapperScan;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

import org.springframework.stereotype.Component;

/**

  • @Description :

  • @Author :lenovo

  • @Date :2021/2/21 19:02

*/

@Configuration

@MapperScan(“com.nonglin.eduservice.mapper”)

public class EduConfig {

/**

  • 分页插件

*/

@Bean

public PaginationInterceptor paginationInterceptor() {

return new PaginationInterceptor();

}

}

8.2、在controller类中编写讲师分页查询方法


  • 例子1、

//讲师分页查询方法

//current:当前页

//limit:每页人数

@ApiOperation(value = “分页讲师列表”)

@GetMapping(“/pagepageTeacher/{current}/{limit}”)

public R pageListTeacher(@ApiParam(name = “page”, value = “当前页码”, required = true)

@PathVariable long current,

@ApiParam(name = “limit”, value = “每页记录数”, required = true)

@PathVariable long limit){

//创建page对象

Page pageTeacher = new Page<>(current,limit);

//调用方法实现分页

//调用方法时候,底层封装,把分页所有数据封装到pageTeacher对象中

eduTeacherService.page(pageTeacher, null);

long total = pageTeacher.getTotal();//总记录数

List records = pageTeacher.getRecords();//数据list集合

return R.ok().data(“total”,total).data(“rows”,records);

}

浏览器测试:

在这里插入图片描述

9、后台讲师管理模块,带条件的分页查询

==================================================================================

9.1、引入分页插件


在这里插入图片描述

package com.nonglin.eduservice.config;

import com.baomidou.mybatisplus.core.injector.ISqlInjector;

import com.baomidou.mybatisplus.extension.injector.LogicSqlInjector;

import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;

import org.mybatis.spring.annotation.MapperScan;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

import org.springframework.stereotype.Component;

/**

  • @Description :

  • @Author :lenovo

  • @Date :2021/2/21 19:02

*/

@Configuration

@MapperScan(“com.nonglin.eduservice.mapper”)

public class EduConfig {

/**

  • 分页插件

*/

@Bean

public PaginationInterceptor paginationInterceptor() {

return new PaginationInterceptor();

}

}

9.2、编写讲师分页查询接口的方法


案例1、查询数据controller代码

在这里插入图片描述

//带条件查询讲师信息

@GetMapping(“pageTeacherCondition/{current}/{limit}”)

public R pageTeacherCondition(@PathVariable long current, @PathVariable long limit,

TeacherQuery teacherQuery){

//创建pege对象

Page pageTeacher = new Page<>(current,limit);

//构建条件

QueryWrapper wrapper = new QueryWrapper<>();

//条件组合查询

String name = teacherQuery.getName();

Integer level = teacherQuery.getLevel();

String begin = teacherQuery.getBegin();

String end = teacherQuery.getEnd();

//判断条件值是否为空,如果不为空便捷条件

if(!StringUtils.isEmpty(name)){

wrapper.like(“name”,name);

}

if(!StringUtils.isEmpty(level)){

wrapper.eq(“level”,level);

}if(StringUtils.isEmpty(begin)){

wrapper.ge(“gmt_create”,begin);

}if(StringUtils.isEmpty(end)){

wrapper.le(“gmt_create”,end);

}

//调用方法实现分页查询

eduTeacherService.page(pageTeacher,null);

long total = pageTeacher.getTotal();//总局路条数

List records = pageTeacher.getRecords();//数据list集合

return R.ok().data(“total”,total).data(“rows”,records);

}

输入查询条件:

在这里插入图片描述

浏览器输出查询结果:

在这里插入图片描述

案例2、使用json传查询的数据

需要将请求方法改为@postMapping,并在传参时加上@RequestBody注解,该注解用于传输json数据

在这里插入图片描述

//带条件查询讲师信息

@PostMapping(“pageTeacherCondition/{current}/{limit}”)

public R pageTeacherCondition(@PathVariable long current, @PathVariable long limit,

@RequestBody(required = false) TeacherQuery teacherQuery){

//创建pege对象

Page pageTeacher = new Page<>(current,limit);

//构建条件

QueryWrapper wrapper = new QueryWrapper<>();

//条件组合查询

String name = teacherQuery.getName();

Integer level = teacherQuery.getLevel();

String begin = teacherQuery.getBegin();

String end = teacherQuery.getEnd();

//判断条件值是否为空,如果不为空便捷条件

if(!StringUtils.isEmpty(name)){

wrapper.like(“name”,name);

}

if(!StringUtils.isEmpty(level)){

wrapper.eq(“level”,level);

}if(StringUtils.isEmpty(begin)){

wrapper.ge(“gmt_create”,begin);

}if(StringUtils.isEmpty(end)){

wrapper.le(“gmt_create”,end);

}

//调用方法实现分页查询

eduTeacherService.page(pageTeacher,null);

long total = pageTeacher.getTotal();//总局路条数

List records = pageTeacher.getRecords();//数据list集合

return R.ok().data(“total”,total).data(“rows”,records);

}

json传递查询条件:

在这里插入图片描述

json查询结果

在这里插入图片描述

10、后台管理–添加,修改讲师模块

================================================================================

准备1、:自动填充封装


在service-base模块中添加,创建包handler,创建自动填充类 MyMetaObjectHandler

package com.nonglin.commonutils.Handler;

import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;

import org.apache.ibatis.reflection.MetaObject;

import org.springframework.stereotype.Component;

import java.util.Date;

/**

  • @Description :

  • @Author :lenovo

  • @Date :2021/2/22 11:05

*/

@Component

public class MyMetaObjectHandler implements MetaObjectHandler {

@Override

public void insertFill(MetaObject metaObject) {

this.setFieldValByName(“gmtCreate”,new Date(),metaObject);

this.setFieldValByName(“gmtModified”,new Date(),metaObject);

}

@Override

public void updateFill(MetaObject metaObject) {

this.setFieldValByName(“gmtModified”,new Date(),metaObject);

}

}

准备2、在实体类添加自动填充注解

学习笔记

主要内容包括html,css,html5,css3,JavaScript,正则表达式,函数,BOM,DOM,jQuery,AJAX,vue等等

开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

HTML/CSS

**HTML:**HTML基本结构,标签属性,事件属性,文本标签,多媒体标签,列表 / 表格 / 表单标签,其他语义化标签,网页结构,模块划分

**CSS:**CSS代码语法,CSS 放置位置,CSS的继承,选择器的种类/优先级,背景样式,字体样式,文本属性,基本样式,样式重置,盒模型样式,浮动float,定位position,浏览器默认样式

HTML5 /CSS3

**HTML5:**HTML5 的优势,HTML5 废弃元素,HTML5 新增元素,HTML5 表单相关元素和属性

**CSS3:**CSS3 新增选择器,CSS3 新增属性,新增变形动画属性,3D变形属性,CSS3 的过渡属性,CSS3 的动画属性,CSS3 新增多列属性,CSS3新增单位,弹性盒模型

JavaScript

**JavaScript:**JavaScript基础,JavaScript数据类型,算术运算,强制转换,赋值运算,关系运算,逻辑运算,三元运算,分支循环,switch,while,do-while,for,break,continue,数组,数组方法,二维数组,字符串

Handler implements MetaObjectHandler {

@Override

public void insertFill(MetaObject metaObject) {

this.setFieldValByName(“gmtCreate”,new Date(),metaObject);

this.setFieldValByName(“gmtModified”,new Date(),metaObject);

}

@Override

public void updateFill(MetaObject metaObject) {

this.setFieldValByName(“gmtModified”,new Date(),metaObject);

}

}

准备2、在实体类添加自动填充注解

学习笔记

主要内容包括html,css,html5,css3,JavaScript,正则表达式,函数,BOM,DOM,jQuery,AJAX,vue等等

开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

HTML/CSS

**HTML:**HTML基本结构,标签属性,事件属性,文本标签,多媒体标签,列表 / 表格 / 表单标签,其他语义化标签,网页结构,模块划分

**CSS:**CSS代码语法,CSS 放置位置,CSS的继承,选择器的种类/优先级,背景样式,字体样式,文本属性,基本样式,样式重置,盒模型样式,浮动float,定位position,浏览器默认样式

[外链图片转存中…(img-xYrG5oqY-1715341094828)]

HTML5 /CSS3

**HTML5:**HTML5 的优势,HTML5 废弃元素,HTML5 新增元素,HTML5 表单相关元素和属性

**CSS3:**CSS3 新增选择器,CSS3 新增属性,新增变形动画属性,3D变形属性,CSS3 的过渡属性,CSS3 的动画属性,CSS3 新增多列属性,CSS3新增单位,弹性盒模型

[外链图片转存中…(img-tBAMax3U-1715341094829)]

JavaScript

**JavaScript:**JavaScript基础,JavaScript数据类型,算术运算,强制转换,赋值运算,关系运算,逻辑运算,三元运算,分支循环,switch,while,do-while,for,break,continue,数组,数组方法,二维数组,字符串

[外链图片转存中…(img-nWBmfkXW-1715341094829)]

  • 9
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
微信小程序项目源码毕业设计期末大作业课程设计前端源码 微信小程序项目源码毕业设计期末大作业课程设计前端源码 微信小程序项目源码毕业设计期末大作业课程设计前端源码 微信小程序项目源码毕业设计期末大作业课程设计前端源码 微信小程序项目源码毕业设计期末大作业课程设计前端源码 微信小程序项目源码毕业设计期末大作业课程设计前端源码 微信小程序项目源码毕业设计期末大作业课程设计前端源码 微信小程序项目源码毕业设计期末大作业课程设计前端源码 微信小程序项目源码毕业设计期末大作业课程设计前端源码 微信小程序项目源码毕业设计期末大作业课程设计前端源码 微信小程序项目源码毕业设计期末大作业课程设计前端源码 微信小程序项目源码毕业设计期末大作业课程设计前端源码 微信小程序项目源码毕业设计期末大作业课程设计前端源码 微信小程序项目源码毕业设计期末大作业课程设计前端源码 微信小程序项目源码毕业设计期末大作业课程设计前端源码 微信小程序项目源码毕业设计期末大作业课程设计前端源码 微信小程序项目源码毕业设计期末大作业课程设计前端源码 微信小程序项目源码毕业设计期末大作业课程设计前端源码 微信小程序项目源码毕业设计期末大作业课程设计前端源码 微信小程序项目源码毕业设计期末大作业课程设计前端源码 微信小程序项目源码毕业设计期末大作业课程设计前端源码 微信小程序项目源码毕业设计期末大作业课程设计前端源码 微信小程序项目源码毕业设计期末大作业课程设计前端源码 微信小程序项目源码毕业设计期末大作业课程设计前端源码 微信小程序项目源码毕业设计期末大作业课程设计前端源码 微信小程序项目源码毕业设计期末大作业课程设计前端源码 微信小程序项目源码毕业设计期末大作业课程设计前端源码 微信小程序项目源码毕业设计期末大作业课程设计前端源码 微信小程序项目源码毕业设计期末大作业课程设计前端源码 微信小程序项目源码毕业设计期末大作业课程设计前端源码 微信小程序项目源码毕业设计期末大作业课程设计前端源码 微信小程序项目源码毕业设计期末大作业课程设计前端源码

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值