2025腾讯测试开发面经

2025腾讯测试开发面经

  • 1.常见算法时间复杂度:
  • 2.冒泡排序时间复杂度:
  • 3.HTTP和HTTPS的区别:
  • 4.HTTPS加密过程(SSL/TLS四次握手的过程):
  • 5.对称密钥和非对称密钥的区别
  • 6.非对称加密应用场景
  • 7. 数字签名的加密过程
  • 8. 加密技术除了HTTPS还有什么应用:
  • 9. 反射机制
  • 10.IOC是什么
  • 11.常用锁有哪些:
  • 12. synchronized是公平锁吗
  • 13. 公平锁有哪些
  • 14.原子类有哪些
  • 15.手撕算法题

1.常见算法时间复杂度:

  • O(1)

2.冒泡排序时间复杂度:

  • 最小时间复杂度O(n),最大时间复杂度:O(n²),平均时间复杂度:O(n²)

3.HTTP和HTTPS的区别:

  • HTTPS安全性比HTTP更高:HTTP是明文传输,HTTP用加密传输,数据用对称密钥加密,对称密钥用非对称密钥加密;
  • 端口号不一样:HTTPS 443;HTTP 80
  • 优先级不一样:HTTPS的网站优先级更高

4.HTTPS加密过程(SSL/TLS四次握手的过程):

  • 首先客户端给服务器打招呼Client Hello,并且还将自己支持的TLS版本、加密套件和生成的第一个随机数发送给服务端;
  • 服务器打招呼Serve Hello,选择TLS版本、加密套件和生成的第二个随机数、证书、公钥都发送给客户端;
  • 客户端生成预主密钥(第三个随机数),用公钥加密后发送给服务器,并发送握手结束通知和加密算法改变通知;
  • 服务器用私钥进行解密,向客户端发出握手结束通知和加密算法改变通知。
  • 后面数据传输都用随机数1+随机数2+预主密钥(随机数3)形成的对称密钥进行加密传输。

5.对称密钥和非对称密钥的区别

  • 密钥数量:对称密钥加密使用同一把密钥,非对称密钥加密有公钥和私钥两把密钥,公钥公开,私钥保密;
  • 加密速度:对称密钥加密速度快,适合大量数据加密;非对称密钥加密速度慢,常用于加密少量关键数据;
  • 安全性:对称密钥泄露,数据易被破解;非对称密钥只要私钥不泄露,仅公钥被截获难以破解数据;
  • 应用场景:对称密钥用于数据加密存储,应用于对速度要求高的场景;非对称密钥用于数字签名、身份认证、密钥交换等安全性要求高的场景;

6.非对称加密应用场景

  • 数字签名;
  • 身份认证;
  • 密钥交换;

7. 数字签名的加密过程

  • 数字签名的加密过程主要涉及哈希函数公钥加密算法:
    • 发送方:
      • 对需要签名的消息M进行哈希运算,生成固定长度的消息摘要H(M) ;
      • 使用私钥SK对哈希值H(M)进行加密,生成数字签名S;
      • 发送原始消息M和签名S给接收方;
    • 接收方:
      • 接收到消息M,进行哈希运算得到H’(M);
      • 接收方用公钥解密S,得到H(M);
      • 比较H’(M)和H(M),若一样则说明签名有效,消息未被篡改;

8. 加密技术除了HTTPS还有什么应用:

  • VPN(IPSec、SSL/TLS);
  • 无线网络安全(WPA3);
  • 邮件加密(PGP);
  • 数据库加密(TDE);
  • 密码哈希存储(BCrypt、PBKDF2、Argon2)

9. 反射机制

  • 反射机制是指在程序运行时,可以动态获取一个类的所有信息(属性、方法、构造函数),并能操作这些信息(创建对象、调用方法、修改字段)。

10.IOC是什么

  • IOC(Inversion of Control)控制反转,通过注入依赖DI来管理对象,避免手动创建对象。

11.常用锁有哪些:

  • 互斥锁(排他锁)
    • synchronized:JVM 内置锁。
    • ReentrantLock
      • 可重入(指的是同一个线程可以多次获取同一把锁,而不会发生死锁);
      • 可选公平/非公平;
      • 需手动 lock()/unlock()。
  • 读写锁
    • ReadWriteLock:读共享,写互斥,适用于读多写少的场景。
    • StampedLock:支持乐观读,比 ReadWriteLock 性能更高,但不可重入。
  • 自旋锁
    • CAS(Compare-And-Swap):无锁机制,适用于高并发、低竞争场景,如 AtomicInteger

12. synchronized是公平锁吗

  • synchronized 不是公平锁,后来的线程有可能会抢占锁,甚至是在前面的线程还没有释放锁的情况下。
  • 公平锁是指多个线程按照请求锁的顺序依次获得锁,即先请求的线程先获得锁。
  • 非公平锁是指线程可以抢占锁,即使之前的线程还未释放锁,后续线程也有可能在它释放之前先获取锁。

13. 公平锁有哪些

  • ReentrantLock (公平锁模式):通过在创建锁时指定 true 参数,锁会以公平模式工作。
import java.util.concurrent.locks.ReentrantLock;

public class FairLockExample {
    private final ReentrantLock lock = new ReentrantLock(true); // 公平锁

    public void doSomething() {
        lock.lock();
        try {
            // 业务逻辑
        } finally {
            lock.unlock();
        }
    }
} 

  • Semaphore (信号量):通过构造函数中的 true 参数实现公平信号量,确保线程按顺序获取资源。
  • ReentrantReadWriteLock (读写锁):通过传递 true 参数启用公平锁,保证读写锁按顺序获取。

14.原子类有哪些

  • 原子类(Atomic Classes)是指通过使用底层的CAS(Compare-And-Swap)操作来确保线程安全的类:
    • AtomicInteger:处理整数类型的原子操作。
    • AtomicLong:处理长整型(long)的原子操作。
    • AtomicBoolean:处理布尔类型的原子操作。
    • AtomicReference:处理对象引用类型的原子操作。
    • AtomicXXXArray:处理整型、长整型或对象数组的原子操作

15.手撕算法题

  • 买卖股票的最佳时机。给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。 如果你最多只允许完成一笔交易(即买入和卖出一支股票一次),设计一个算法来计算你所能获取的最大利润 。注意:你不能在买入股票前卖出股票。
//暴力:
public class Solution {
    public int maxProfit(int[] prices) {
        int maxprofit = 0;
        for (int i = 0; i < prices.length - 1; i++) {
            for (int j = i + 1; j < prices.length; j++) {
                int profit = prices[j] - prices[i];
                if (profit > maxprofit) {
                    maxprofit = profit;
                }
            }
        }
        return maxprofit;
    }
}
//一次遍历
public class Solution {
    public int maxProfit(int prices[]) {
        int minprice = Integer.MAX_VALUE;
        int maxprofit = 0;
        for (int i = 0; i < prices.length; i++) {
            if (prices[i] < minprice) {
                minprice = prices[i];
            } else if (prices[i] - minprice > maxprofit) {
                maxprofit = prices[i] - minprice;
            }
        }
        return maxprofit;
    }
}

你可能感兴趣的:(java)