Day1
1.学习了redis
Window下Redis的安装和部署详细图文教程(Redis的安装和可视化工具的使用)_redis安装-CSDN博客
2.MD5 文件指纹校验实现
对前端传过来的明文密码进行md5加密处理
直接在代码中加入也可
password = DigestUtils.md5DigestAsHex(password.getBytes());
3.swagger进行测试接口
/**
* 通过knife4j生成接口文档
* @return
*/
@Bean
public Docket docket() {
ApiInfo apiInfo = new ApiInfoBuilder()
.title("苍穹外卖项目接口文档")
.version("2.0")
.description("苍穹外卖项目接口文档")
.build();
Docket docket = new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo)
.select()
.apis(RequestHandlerSelectors.basePackage("com.sky.controller"))
.paths(PathSelectors.any())
.build();
return docket;
}
/**
* 设置静态资源映射
* @param registry
*/
protected void addResourceHandlers(ResourceHandlerRegistry registry) {
log.info("开始静态资源映射");
registry.addResourceHandler("/doc.html").addResourceLocations("classpath:/META-INF/resources/");
registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
}
}
4.基础面试
1. Cookie和Session的区别
#1.1. 回答技术是什么?解决什么问题
- Cookie是在客户端存储数据的一种机制,通过在浏览器端保存少量文本信息,与域名相关联。
- Session是在服务器端存储用户状态的机制,用于跟踪用户的状态,通常通过在服务器上存储一个会话标识来实现。
#1.2. 结合业务场景说具体示例
- 在网站用户登录的业务场景中,可以说明Cookie用于在客户端存储用户的标识信息,
- 而Session则用于在服务器端存储用户的登录状态和其他相关信息。
- 例如,当用户成功登录时,服务器可以创建一个Session,将用户信息存储在Session中,同时在客户端设置一个包含会话标识的Cookie。后续用户的请求会携带这个Cookie,服务器通过Cookie中的会话标识找到对应的Session,从而实现用户的身份认证和状态管理。
#1.3. 根据面试官提问的细节问题作答
- 那你了解Cookie和Session的安全性问题吗?
- Cookie是存储在客户端的,可能会受到跨站脚本攻击(XSS)和跨站请求伪造攻击(CSRF)的影响,需要通过设置HttpOnly和Secure等属性来增加安全性。
- Session在服务器端存储,相对较安全,但需要注意会话劫持和会话固定等攻击,可以通过使用HTTPS协议、定期更新会话标识等方式来提高安全性。
- 那你了解Cookie的大小限制吗?
- 是的,Cookie的大小限制因浏览器而异,通常在4KB左右。因此,存储大量数据时需要注意大小限制,以防止被截断或丢失。
- Session的存储方式有哪些,各有什么特点?
- Session的存储方式包括基于内存、文件、数据库等不同的实现方式。
- 基于内存的方式速度较快但不适用于分布式环境,基于文件和数据库的方式适用于分布式环境但可能会影响性能,需要根据业务需求选择合适的存储方式。
#2. ArrayList的扩容机制
#2.1. 回答技术是什么?解决什么问题
ArrayList是Java中的动态数组实现,用于存储元素。其扩容机制是为了解决在元素数量超过当前容量时的动态扩展需求。
#2.2. 结合业务场景说具体示例
在一个需要存储动态元素的应用中,比如在处理用户输入数据时,使用ArrayList来动态管理和存储这些数据。当元素数量逐渐增加,ArrayList会自动扩容以容纳更多元素,确保不会因为容量不足而导致数组溢出。
#2.3. 根据面试官提问的细节问题作答
- 那你了解ArrayList的默认初始化容量是多少吗?
- 是的,ArrayList的默认初始化容量是10。
- ArrayList是如何进行扩容的?
- 当添加元素时,ArrayList会检查当前元素数量是否超过数组容量。如果超过,则会触发扩容操作。
- 扩容时,会创建一个新的数组,其大小通常是当前容量的1.5倍(可以通过调整负载因子来改变这个倍数)。
- 然后,将原数组中的元素复制到新数组中,并将新元素添加到新数组中。
- 最后,ArrayList将引用指向新数组。
- 如何优化ArrayList的使用?
- 在能够预估元素数量时,可以使用带初始容量参数的构造函数初始化ArrayList,避免频繁的扩容操作。
- 避免在中间位置插入或删除大量元素,因为这会导致大量元素的移动。
- 在大量操作时,可以使用LinkedList等数据结构,因为它们对插入和删除操作的开销较小。
#3. 使用Knife4j有哪些好处?
#3.1. 回答技术是什么?解决什么问题
Knife4j是一款基于Swagger的增强工具,用于生成和展示API文档。
#3.2. 结合业务场景说具体示例
在开发过程中,使用Knife4j可以方便地生成美观且交互友好的API文档,提供了在线测试功能,方便开发人员测试接口。同时,它还支持在文档中添加自定义信息,便于团队协作和理解接口设计。
#3.3. 根据面试官提问的细节问题作答
- Knife4j与Swagger有什么区别?
- Knife4j是基于Swagger的增强工具,提供了更丰富的功能和更好的用户体验。它对Swagger进行了定制和扩展,增加了一些额外的功能,如接口在线调试、接口文档中的Markdown支持等。
- 使用Knife4j需要注意什么?
- 在使用Knife4j时,需要注意及时更新版本,以获取最新的功能和修复可能存在的bug。
- 需要保持对接口文档的维护,确保与实际接口的一致性,避免文档与代码不一致的情况。
#4. Nginx负载均衡的常见算法有哪些?
#4.1. 回答技术是什么?解决什么问题
Nginx负载均衡是一种将请求分发到多个服务器以提高性能和可靠性的技术。常见的算法包括轮询、权重轮询、IP哈希、最小连接数等。
#4.2. 结合业务场景说具体示例
在一个大型网站中,Nginx负载均衡可以确保用户请求被均匀地分发到多个服务器,提高整体系统的并发处理能力,同时通过一些算法可以根据服务器的性能分配更多或更少的请求,以优化资源利用率。
#4.3. 根据面试官提问的细节问题作答
- 轮询算法的优缺点是什么?
- 优点:简单、公平,适用于各个服务器性能相近的情况。
- 缺点:无法考虑服务器性能差异,可能导致性能不佳的服务器得到过多的请求。
- IP哈希算法的使用场景是什么?
- IP哈希算法会根据客户端的IP地址将请求分发到特定的服务器,适用于需要保持用户会话一致性的场景,如登录状态的保持。
#5. 接口文档和Swagger的区别是什么?
#5.1. 回答技术是什么?解决什么问题
接口文档是对API接口进行详细描述的文档,用于指导开发人员如何使用和调用接口。Swagger是一种用于设计、构建和文档化API的开源工具。
#5.2. 结合业务场景说具体示例
在一个团队协作的开发项目中,使用接口文档可以帮助团队成员更好地理解接口设计和使用规范,提高团队协同效率。而Swagger则可以自动生成美观的API文档,提供在线测试功能,方便开发人员查看和测试接口。
#5.3. 根据面试官提问的细节问题作答
- Swagger的优点是什么?
- 自动生成文档:无需手动编写文档,通过注解自动生成API文档。
- 在线测试:提供在线测试功能,方便开发人员测试接口。
- 规范统一:通过Swagger规范,使接口文档更加规范和易读。
- 接口文档中的哪些信息是必须包含的?
- 接口地址、请求方法、请求参数、响应数据结构、错误码等是接口文档中必须包含的信息。
#6. 开发过程中代码回滚的重要性?
#6.1. 回答技术是什么?解决什么问题
代码回滚是指在软件开发过程中,将代码恢复到之前某个可用状态的操作。它解决了在部署新代码后出现问题时能够快速恢复到稳定状态的需求。
#6.2. 结合业务场景说具体示例
在一个线上服务的更新过程中,如果新版本的代码导致了严重的问题,需要迅速回滚到上一个稳定版本,以避免影响用户体验和系统的正常运行。
#6.3. 根据面试官提问的细节问题作答
- 代码回滚的操作步骤是什么?
- 恢复代码:将代码库切换到需要回滚的版本。
- 编译构建:重新编译构建回滚
#7.谈谈Java程序员对nginx的使用
#1. nginx是什么?它能带来什么好处?
Nginx是一个高性能的HTTP和反向代理服务器,可以作为web服务器使用,也可以作为反向代理、负载均衡器和HTTP缓存。
它的特点是占用内存小、并发能力强,能提高Java web应用的性能和扩展能力。
#2. Java程序员会在什么业务场景下使用nginx?
例如在部署一个大流量Java web项目时,可以让nginx作为web服务器,利用其高并发处理静态资源的能力。
也可以用nginx作为反向代理和负载均衡器,将请求分发到后端的Tomcat集群,提高系统整体并发能力。
标签:java,deepseek,接口,Session,文档,服务器,Cookie,ArrayList,跟着 From: https://blog.csdn.net/hyq0817__/article/details/145412513