笔试题总结

博客主页:hyhWTX的博客主页

欢迎关注🖱点赞🎀收藏⭐留言✒

本文由hyhWTX原创,csdn首发!

系列专栏:面试题解

🀄如果觉得博主的文章还不错的话,请三连支持一下博主哦

题目一

HTTP与HTTPS的区别
解答:
HTTP(超文本传输协议)和HTTPS(安全超文本传输协议)是用于在Web浏览器和服务器之间传输数据的协议。以下是它们之间的主要区别:

  1. 安全性:HTTPS通过使用SSL / TLS加密传输数据,可以提供更高的安全性,可以保护用户的敏感信息,例如用户名,密码和信用卡号码。HTTP不提供加密,因此数据容易被黑客截获和窃取。

  2. 默认端口:HTTP使用端口80,而HTTPS使用端口443。

  3. 证书:HTTPS需要使用数字证书来验证网站的身份。这些证书由认证机构颁发,可以确保用户与正确的网站进行通信。HTTP不需要数字证书。

  4. 速度:HTTPS由于加密和解密数据而比HTTP慢。但是,现代的计算机和服务器处理速度很快,因此这种差异通常很小。

总之,HTTPS比HTTP更安全,但速度稍慢。在传输敏感信息时,建议使用HTTPS。

题目二

常见的网络状态码并解释其含义
解答:
以下是常见的网络状态码及其含义:

  1. 1xx(信息性状态码):服务器收到请求,正在处理。

  2. 2xx(成功状态码):服务器成功接收、理解并处理请求。

    • 200 OK:请求已成功,服务器返回请求的内容。
    • 201 Created:请求已成功,并创建了一个新的资源。
    • 204 No Content:请求已成功,但没有返回任何内容。
  3. 3xx(重定向状态码):需要客户端采取进一步的操作才能完成请求。

    • 301 Moved Permanently:请求的资源已永久移动到新位置。
    • 302 Found:请求的资源已暂时移动到新位置。
    • 304 Not Modified:客户端缓存的资源未被修改,可以直接使用缓存。
  4. 4xx(客户端错误状态码):请求包含语法错误或无法完成请求。

    • 400 Bad Request:请求语法错误或无法被服务器理解。
    • 401 Unauthorized:请求需要身份验证。
    • 403 Forbidden:服务器拒绝请求。
    • 404 Not Found:请求的资源不存在。
  5. 5xx(服务器错误状态码):服务器无法完成请求。

    • 500 Internal Server Error:服务器遇到了意外的错误。
    • 502 Bad Gateway:服务器作为网关或代理,从上游服务器接收到无效的响应。
    • 503 Service Unavailable:服务器暂时无法处理请求,通常是由于过载或维护。

以上是网络状态码的常见类型和含义,可以帮助开发人员快速定位问题并解决。

题目三

HTTP的请求方式有哪些?
解答:
常用的请求方法有以下几种:

  1. GET:从服务器获取资源,请求的数据会附在URL后面,以?分割URL和传输数据的参数,多个参数用&连接。

  2. POST:向服务器提交数据,数据包含在请求体中,适合提交表单等数据。

  3. PUT:上传指定资源,包含了完整的请求体,用于修改或新增资源。

  4. DELETE:删除指定资源。

  5. HEAD:获取资源的元数据,只获取响应头部,不返回响应体,用于检查资源是否存在、是否修改过等。

  6. OPTIONS:查询服务器支持的HTTP方法。

  7. TRACE:回显服务器收到的请求,用于测试或诊断。

以上是HTTP的常用请求方法,每种请求方法都有各自的特点和使用场景,可以根据需要选择合适的请求方法。

题目四

何时编写项目测试用例?
解答:
项目测试用例应该在项目开发早期就开始编写,以确保在开发过程中对每个功能进行测试,并且在项目交付或发布之前进行全面的测试。测试用例应该根据软件需求规格说明书(SRS)编写,以验证每个功能是否按照规格说明书的要求工作。测试用例应该包括输入数据、预期输出和实际输出,并且应该考虑各种边界条件和异常情况。测试用例应该经过多次测试和修订,以确保其准确性和可靠性。同时,测试用例应该在项目开发的每个阶段都进行更新和修改,以反映新功能和需求的变化。

题目五

StringBuilder是那种设计模式的应用体现?或者使用了那些设计模式的思想?
解答:
StringBuilder类是一种建造者模式(Builder Pattern)的应用体现。
建造者模式是一种对象创建型设计模式,它允许分步骤创建复杂对象,同时使得创建过程更加灵活。在建造者模式中,一个对象的构建过程被分解为多个步骤,每个步骤都由一个Builder对象负责完成。最终,将所有步骤的结果组合起来创建出一个完整的对象。
StringBuilder类实现了建造者模式的思想,它允许程序员通过append()方法逐步构建一个字符串,最终得到一个完整的字符串对象。StringBuilder类的实现方式与建造者模式中的Builder对象类似,它通过多次调用append()方法来逐步构建一个字符串对象。同时,StringBuilder类还提供了一些其他方法,如insert()、replace()等,这些方法可以在构建字符串的过程中对字符串进行修改和替换。

题目六

软件成分重用通常分为的级别?
解答:
软件成分重用通常分为三个级别:

  1. 基础设施级别(Infrastructure level):这一级别的重用涉及到底层的软件基础设施,例如操作系统、数据库、通信协议等。这些基础设施是软件系统的核心组成部分,因此它们的重用对于提高软件系统的可靠性和效率非常重要。

  2. 构件级别(Component level):这一级别的重用涉及到软件系统中的组件或模块,例如用户界面组件、数据访问组件、业务逻辑组件等。这些组件通常是独立的、可重用的软件单元,可以在不同的软件系统中进行重复使用。

  3. 对象级别(Object level):这一级别的重用涉及到软件系统中的对象或类,例如Java中的类或C++中的对象。这些对象通常是具有特定功能的软件单元,可以在不同的软件系统中进行重复使用。对象级别的重用通常需要进行更加细致的设计和实现,以确保对象的复用性和灵活性。

题目七

确定目标系统必须具有什么功能是软件定义时期的什么阶段?
解答:
确定目标系统必须具有什么功能是软件定义时期的需求分析阶段。

需求分析是软件开发过程中最重要的阶段之一,它是从用户需求出发,将用户需求转换为软件系统能够理解和实现的形式,确定软件系统必须具备的功能和性能特性的过程。在需求分析阶段,软件开发团队需要与客户或用户进行充分的沟通和交流,以了解用户的需求和期望,并将这些需求和期望转化为系统的功能和性能要求。

确定目标系统必须具有什么功能是需求分析阶段的核心工作之一。在这个阶段,软件开发团队需要对用户需求进行分析和整理,识别出目标系统必须具备的功能和性能要求,并将这些要求进行详细的描述和规范化,以便在后续的设计和实现阶段进行使用。同时,在需求分析阶段还需要考虑到系统的可用性、可靠性、安全性等方面的要求,以确保目标系统能够满足用户的需求和期望。

题目八

ArrayList(10)到ArrayList(25)需要扩充几次?
解答:
在Java中,ArrayList是一种动态数组,它可以自动扩展其容量以适应添加的元素。如果在创建ArrayList时指定了初始容量,则ArrayList将在达到该容量时自动扩展其容量。

在这个问题中,我们需要将一个初始容量为10的ArrayList扩展到容量为25。ArrayList的扩展机制是通过增加当前容量的50%来实现的。因此,在将ArrayList从容量10扩展到容量25时,需要进行2次扩容,即:

  1. 当容量达到15时,进行第一次扩容,将容量增加到22(10*1.5)。
  2. 当容量达到22时,进行第二次扩容,将容量增加到33(22*1.5)。
  3. 最后,当容量达到25时,ArrayList不再进行扩容。

因此,将ArrayList(10)扩展到ArrayList(25)需要进行2次扩容。

题目九

阐述@After和@AfterReturning的区别?
解答:
@After和@AfterReturning都是Spring框架中的注解,用于在方法执行后执行一些逻辑,但二者有一些区别。

  1. @After注解表示在目标方法执行之后执行,无论目标方法是否抛出异常。它通常用于资源的释放,如关闭文件或数据库连接等。

  2. @AfterReturning注解表示在目标方法执行之后执行,仅当目标方法正常返回时才会执行。它通常用于日志记录或清理工作。

举个例子,假设我们有一个UserService接口,其中有一个方法getUserById(int id),用于根据用户id获取用户信息。我们可以使用@After和@AfterReturning注解来实现一些逻辑:

public interface UserService {
    User getUserById(int id);
}

@Service
public class UserServiceImpl implements UserService {
    @Override
    public User getUserById(int id) {
        // 根据id获取用户信息
        User user = userRepository.findById(id);

        return user;
    }
}

@Aspect
@Component
public class UserServiceAspect {
    @After("execution(* com.example.service.UserService.getUserById(int))")
    public void afterGetUserById() {
        System.out.println("getUserById方法执行完毕");
    }

    @AfterReturning(pointcut = "execution(* com.example.service.UserService.getUserById(int))", returning = "user")
    public void afterReturningGetUserById(User user) {
        System.out.println("getUserById方法正常返回,返回值为:" + user);
    }
}

在上面的例子中,@After注解表示在getUserById方法执行后执行,无论是否正常返回。@AfterReturning注解表示在getUserById方法正常返回后执行,并且可以获取到返回值。

以上题目内容是博主将自身遇到的测试题目总结并解答出来的结果,若有解答不足之处,欢迎各位留言指出!

  • 9
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值