总结
虽然面试套路众多,但对于技术面试来说,主要还是考察一个人的技术能力和沟通能力。不同类型的面试官根据自身的理解问的问题也不尽相同,没有规律可循。
上面提到的关于这些JAVA基础、三大框架、项目经验、并发编程、JVM及调优、网络、设计模式、spring+mybatis源码解读、Mysql调优、分布式监控、消息队列、分布式存储等等面试题笔记及资料
有些面试官喜欢问自己擅长的问题,比如在实际编程中遇到的或者他自己一直在琢磨的这方面的问题,还有些面试官,尤其是大厂的比如 BAT 的面试官喜欢问面试者认为自己擅长的,然后通过提问的方式深挖细节,刨根到底。
首先,让我们创建一个简单的Spring Boot应用程序,以便了解如何使用Spring MVC来创建RestAPI。以下是一个简单的RestAPI示例,它返回一条简单的问候消息:
@RestController
public class GreetingController {
@GetMapping("/greet")
public String greet() {
return "Hello, World!";
}
}
这个控制器只有一个
greet
端点,当访问/greet
时,它将返回"Hello, World!"。在应用程序的
application.properties
文件中,我们可以配置端口号和其他一些属性。我们将在这个示例中使用默认的配置:
server.port=8080
你可以使用Spring Boot的内置Tomcat服务器来运行应用程序,只需执行
mvn spring-boot:run
或者在你的IDE中运行主应用程序类。
使用HTTPS加密RestAPI
为了加密RestAPI,我们通常会使用HTTPS(Hypertext Transfer Protocol Secure)。HTTPS是HTTP的安全版本,它通过使用SSL/TLS协议来加密数据传输。Spring Boot可以通过配置来启用HTTPS。
首先,我们需要为应用程序生成一个自签名的SSL证书。您可以使用Java的keytool工具来生成这个证书。以下是一个示例命令:
keytool -genkey -alias myapp -storetype PKCS12 -keyalg RSA -keysize 2048 -keystore keystore.p12 -validity 3650
这个命令将生成一个名为
keystore.p12
的证书文件,其中包含了自签名证书。接下来,我们需要在
application.properties
文件中配置应用程序以使用这个证书:
server.port=8443
server.ssl.key-store=classpath:keystore.p12
server.ssl.key-store-password=password
server.ssl.key-store-type=PKCS12
server.ssl.key-alias=myapp
现在,当我们启动应用程序时,它将在8443端口上启用HTTPS。您可以使用
https://localhost:8443/greet
来访问/greet
端点。
使用Spring Security增加安全性
虽然HTTPS可以确保数据在传输过程中的机密性,但Spring Security可以提供更多的安全性,包括身份验证和授权。
首先,让我们添加Spring Security依赖项到我们的Maven项目:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
接下来,我们可以配置Spring Security,以便我们的RestAPI要求用户进行基本身份验证。在
application.properties
文件中,我们可以配置用户名和密码:
spring.security.user.name=user
spring.security.user.password=password
现在,我们的应用程序将要求用户在访问RestAPI之前进行基本身份验证。这意味着您需要在每个请求中包含用户名和密码。
使用JWT实现令牌身份验证
为了更进一步提高安全性,我们可以使用JWT(JSON Web Token)来实现令牌身份验证。JWT是一种轻量级的令牌,通常用于在客户端和服务器之间传递身份验证信息。它可以包含用户的信息和签名以确保其真实性。
首先,让我们添加Spring Security和JWT依赖项到我们的Maven项目:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
</dependency>
接下来,我们需要创建一个
JwtTokenProvider
类,该类将用于生成和验证JWT令牌。以下是一个示例:
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import org.springframework.security.core.Authentication;
import org.springframework.stereotype.Component;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
@Component
public class JwtTokenProvider {
private final String secret = "yourSecretKey";
private final long validityInMilliseconds = 3600000; // 1 hour
public String createToken(Authentication authentication) {
Map<String, Object> claims = new HashMap<>();
String username = authentication.getName();
Date now = new Date();
Date validity = new Date(now.getTime() + validityInMilliseconds);
return Jwts.builder()
.setClaims(claims)
.setSubject(username)
.setIssuedAt(now)
.setExpiration(validity)
.signWith(SignatureAlgorithm.HS256, secret)
.compact();
}
public boolean validateToken(String token) {
try {
Jwts.parser().setSigningKey(secret).parseClaimsJws(token);
return true;
} catch (Exception e) {
return false;
}
}
}
上面的代码中,JwtTokenProvider类包含了创建和验证JWT令牌的方法。我们可以使用createToken方法为已验证的用户创建令牌,然后在请求头中包含这个令牌以进行访问。
接下来,我们需要配置Spring Security,以使用JWT令牌进行身份验证。在SecurityConfig类中,我们可以添加以下配置:
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private JwtTokenProvider tokenProvider;
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable()
# 最后
金三银四马上就到了,希望大家能好好学习一下这些技术点
学习视频:
![](https://img-blog.csdnimg.cn/img_convert/abd3a6a36c8069ba61fd382d14b17bb6.webp?x-oss-process=image/format,png)
大厂面试真题:
![](https://img-blog.csdnimg.cn/img_convert/3ca880b22b87e3e4a321e322bf04e623.webp?x-oss-process=image/format,png)
> **本文已被[CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)收录**
**[需要这份系统化的资料的朋友,可以点击这里获取](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)**
]
大厂面试真题:
[外链图片转存中...(img-faJmXJm9-1715558028891)]
> **本文已被[CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)收录**
**[需要这份系统化的资料的朋友,可以点击这里获取](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)**