写在最后
作为一名即将求职的程序员,面对一个可能跟近些年非常不同的 2019 年,你的就业机会和风口会出现在哪里?在这种新环境下,工作应该选择大厂还是小公司?已有几年工作经验的老兵,又应该如何保持和提升自身竞争力,转被动为主动?
就目前大环境来看,跳槽成功的难度比往年高很多。一个明显的感受:今年的面试,无论一面还是二面,都很考验Java程序员的技术功底。
最近我整理了一份复习用的面试题及面试高频的考点题及技术点梳理成一份“Java经典面试问题(含答案解析).pdf和一份网上搜集的“Java程序员面试笔试真题库.pdf”(实际上比预期多花了不少精力),包含分布式架构、高可扩展、高性能、高并发、Jvm性能调优、Spring,MyBatis,Nginx源码分析,Redis,ActiveMQ、Mycat、Netty、Kafka、Mysql、Zookeeper、Tomcat、Docker、Dubbo、Nginx等多个知识点高级进阶干货!
由于篇幅有限,为了方便大家观看,这里以图片的形式给大家展示部分的目录和答案截图!
Java经典面试问题(含答案解析)
阿里巴巴技术笔试心得
test
org.junit.vintage
junit-vintage-engine
org.springframework.boot
spring-boot-maven-plugin
自定义Swagger配置信息
新建Swagger配置类,需要注意的是“Swagger scan base package”,这是扫描注解的配置,即API接口位置,对前端调用方提供服务接口的位置。
package com.yoodb.study.demo07.config;
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.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
@Configuration
@EnableSwagger2
public class SwaggerConfig {
private ApiInfo apiInfo() {
return new ApiInfoBuilder().title(“API接口文档”)
.description(““Java精选”微信公众号信息”)
.version(“1.0.0”)
.build();
}
@Bean
public Docket createRestApi() {
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.select()
.apis(RequestHandlerSelectors.basePackage(“com.yoodb.study.demo07”)) //API接口所在的包位置
.paths(PathSelectors.any())
.build();
}
}
新建Controller类文件
新建HelloWorldController类文件,创建GET和POST两种请求方法,以接口方式提供给前端调用,具体代码如下:
package com.yoodb.study.demo07;
import io.swagger.annotations.*;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
@Api(value = “hello”)
@RestController
public class HelloWorldController {
/**
-
根据公众号名称获取详细描述信息
-
@return
*/
@ApiOperation(value = “获取公众号详细描述信息”, notes = “根据公众号名称获取详细描述信息”)
@ApiImplicitParam(name = “name”, value = “公众号名称”, required = true, dataType = “String”, paramType = “path”)
@ApiResponses(value = {
@ApiResponse(code = 200, message = “Successful — 请求已完成”),
@ApiResponse(code = 400, message = “请求语法问题或无法满足请求”),
@ApiResponse(code = 401, message = “Unauthorized,未授权访问”),
@ApiResponse(code = 404, message = “服务器找不到资源;文件不存在”),
@ApiResponse(code = 500, message = “服务器不能完成请求”)}
)
@GetMapping(“getName/{name}”)
public String getName(@PathVariable(value = “name”) String name) {
return “关注微信公众号“” +name+ “”(w_z90110),” +
“Spring Boot系列文章持续更新中,” +
“带你从入门到精通,玩转Spring Boot框架。”;
}
/**
-
根据公众号编号获取详细描述信息
-
@return
*/
@ApiOperation(value = “获取公众号详细描述信息”, notes = “根据公众号编号获取详细描述信息”)
@ApiImplicitParam(name = “id”, value = “公众号编号”, required = true, dataType = “String”, paramType = “path”)
@ApiResponses(value = {
@ApiResponse(code = 200, message = “Successful — 请求已完成”),
@ApiResponse(code = 400, message = “请求语法问题或无法满足请求”),
@ApiResponse(code = 401, message = “Unauthorized,未授权访问”),
@ApiResponse(code = 404, message = “服务器找不到资源;文件不存在”),
@ApiResponse(code = 500, message = “服务器不能完成请求”)}
)
@PostMapping(“getId/{id}”)
public String getId(@PathVariable(value = “id”) String id) {
return “关注微信公众号“Java精选”(” +id+ “),” +
“Spring Boot系列文章持续更新中,” +
“带你从入门到精通,玩转Spring Boot框架。”;
}
}
设置访问API文档
在application.yml配置文件中,增加配置信息如下:
springfox.documentation.swagger.v2.path: /api-docs
此配置信息是指以json串的形式访问request mapping,可以自定义,防止与自身代码冲突,使用位置参考截图所示(项目启动后通过地址访问该服务)如果目前在找工作或者以后要跳槽考虑,可以搜索微信小程序“Java精选面试题”,内涵3000道初中高级面试题以及几千到选择题,选择题内涵答案解析:
添加启动类文件
新建启动类文件,使用@EnableSwagger2注解,具体代码如下:
package com.yoodb.study.demo07;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
@SpringBootApplication
@EnableSwagger2
public class SpringbootStudyDemo07Application {
public static void main(String[] args) {
SpringApplication.run(SpringbootStudyDemo07Application.class, args);
}
}
完成上述代码配置后,启动Spring Boot程序,访问swagger地址:
http://localhost:8080/swagger-ui.html
Swagger常用注解
@Api:用在类上,说明该类的作用。以标记一个Controller类做为swagger文档资源,如果目前在找工作或者以后要跳槽考虑,可以搜索微信小程序“Java精选面试题”,内涵3000道初中高级面试题以及几千到选择题,选择题内涵答案解析,使用方式参考如下:
@Api(value = “hello”)
@ApiOperation:用在方法上,说明方法的作用,Url资源的定义,使用方式参考如下:
@ApiOperation(value = “获取公众号详细描述信息”, notes = “根据公众号名称获取详细描述信息”)
@ApiImplicitParams : 用在方法上包含一组参数说明。
@ApiImplicitParam:用来注解来给方法入参增加说明。使用方式参考如下:
@ApiImplicitParam(name = “name”, value = “公众号名称”, required = true, dataType = “String”, paramType = “path”)
name:参数名
dataType:参数类型
required:参数是否必须传
value:说明参数的意思
defaultValue:参数的默认值
paramType:表示参数放在什么位置
paramType参数值包含如下:
header->请求参数的获取:@RequestHeader(代码中接收注解)
query->请求参数的获取:@RequestParam(代码中接收注解)
path(用于restful接口)–>请求参数的获取:@PathVariable(代码中接收注解)
body->请求参数的获取:@RequestBody(代码中接收注解)
form->(不常用)
@ApiResponses:用于方法上,表示一组响应。
@ApiResponse:在@ApiResponses注解内,一般用于表达一个错误的响应信息,使用方式参考如下:
@ApiResponses(value = {
@ApiResponse(code = 200, message = “Successful — 请求已完成”),
@ApiResponse(code = 400, message = “请求语法问题或无法满足请求”),
@ApiResponse(code = 401, message = “Unauthorized,未授权访问”),
@ApiResponse(code = 404, message = “服务器找不到资源;文件不存在”),
@ApiResponse(code = 500, message = “服务器不能完成请求”)}
)
总结
我们总是喜欢瞻仰大厂的大神们,但实际上大神也不过凡人,与菜鸟程序员相比,也就多花了几分心思,如果你再不努力,差距也只会越来越大。实际上,作为程序员,丰富自己的知识储备,提升自己的知识深度和广度是很有必要的。
Mybatis源码解析
总结
我们总是喜欢瞻仰大厂的大神们,但实际上大神也不过凡人,与菜鸟程序员相比,也就多花了几分心思,如果你再不努力,差距也只会越来越大。实际上,作为程序员,丰富自己的知识储备,提升自己的知识深度和广度是很有必要的。
Mybatis源码解析
[外链图片转存中…(img-Lj21mhvy-1715464886597)]
[外链图片转存中…(img-Jfzs6fHl-1715464886597)]