文末
如果30岁以前,可以还不知道自己想去做什么的话,那30岁之后,真的觉得时间非常的宝贵,不能再浪费时间在一些碎片化的事情上,比如说看综艺,电视剧。一个人的黄金时间也就二,三十年,不能过得浑浑噩噩。所以花了基本上休息的时间,去不断的完善自己的知识体系,希望可以成为一个领域内的TOP。
同样是干到30岁,普通人写业务代码划水,榜样们深度学习拓宽视野晋升管理。
这也是为什么大家都说30岁是程序员的门槛,很多人迈不过去,其实各行各业都是这样都会有个坎,公司永远都缺的高级人才,只用这样才能在大风大浪过后,依然闪耀不被公司淘汰不被社会淘汰。
269页《前端大厂面试宝典》
包含了腾讯、字节跳动、小米、阿里、滴滴、美团、58、拼多多、360、新浪、搜狐等一线互联网公司面试被问到的题目,涵盖了初中级前端技术点。
开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】
前端面试题汇总
JavaScript
===========================================================================
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();
}
}
com.nonglin
service_base
0.0.1-SNAPSHOT
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
定义在类上:@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.1、在common模块里创建子模块common_utils
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;//失败
}
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;
}
}
com.nonglin
common_utils
0.0.1-SNAPSHOT
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();
}
}
}
==============================================================================
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();
}
}
- 例子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);
}
浏览器测试:
==================================================================================
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();
}
}
案例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查询结果
================================================================================
在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);
}
}
学习笔记
主要内容包括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);
}
}
学习笔记
主要内容包括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)]