熟悉简单测试面经

SQL语句中增、删、查、改的关键字

MySQL中SQL语句删除语句有哪些?区别是啥。

"=="和equals的区别

["String s = "1""与"String s = new String("1")"中的s一样吗?](#“String s = "1"”与“String s = new String("1")”中的s一样吗?)

StringBuilder与StringBuffer的区别

洗牌问题

HTTP、HTTPS、UDP和TCP的简单介绍:

SSL/TLS层是什么


SQL语句中增、删、查、改的关键字

增(添加):INSERT INTO

删(删除):DELETE FROM

查(查询):SELECT FROM

改(更新):UPDATE

MySQL中SQL语句删除语句有哪些?区别是啥。

1. DELETE语句

sql 复制代码
DELETE FROM table_name WHERE condition;
  • 用途:DELETE语句用于从表中删除满足特定条件的行。如果不指定WHERE子句,则会删除表中的所有行(这通常是不推荐的,因为它会移除表中的所有数据)。
  • 性能:DELETE语句会逐行删除数据,并在事务日志中记录每一行的删除操作。这意味着如果表中有大量数据,DELETE操作可能会相对较慢,并且会占用更多的日志空间。
  • 可回滚性:由于DELETE语句将删除操作记录在事务日志中,因此它是可回滚的。如果在执行DELETE操作后发生了错误或需要撤销更改,可以使用事务回滚来恢复数据。

2. TRUNCATE TABLE语句

sql 复制代码
TRUNCATE TABLE table_name;
  • 用途:TRUNCATE TABLE语句用于快速删除表中的所有行,但保留表的结构(如列、索引等)。它不能用于有外键约束引用的表,除非外键约束被明确设置为ON DELETE CASCADE。
  • 性能:TRUNCATE TABLE通常比DELETE语句快得多,因为它不逐行删除数据,也不记录每行的删除操作。相反,它仅重置表中的数据并释放存储空间,这可能会更快且对系统资源的占用更少。
  • 可回滚性:TRUNCATE TABLE在某些数据库管理系统中被视为不可回滚的操作(尽管这取决于具体的数据库配置和版本)。在MySQL中,如果启用了事务并且autocommit设置为0,则TRUNCATE TABLE也是可回滚的,但通常不建议依赖于此行为。

区别总结

  • 用途:DELETE用于删除表中的特定行,而TRUNCATE TABLE用于删除表中的所有行。
  • 性能:TRUNCATE TABLE通常比DELETE更快,因为它不记录每行的删除操作。
  • 可回滚性:DELETE是可回滚的,而TRUNCATE TABLE在某些情况下可能被视为不可回滚(尽管在MySQL中,如果启用了事务,它也是可回滚的)。
  • 触发器:DELETE可以触发删除触发器,而TRUNCATE TABLE不会。
  • 外键约束:对于由外键约束引用的表,应使用DELETE而不是TRUNCATE TABLE,除非外键约束被明确设置为ON DELETE CASCADE。

"=="和equals的区别

**==**:是Java中的基本数据类型比较运算符,用于比较两个变量的值是否相等。对于对象,==比较的是两个对象的引用是否相同,即它们是否指向内存中的同一块地址。

**equals()**:是Java中所有对象都继承自Object类的一个方法。默认情况下,equals()方法的行为与==相同,即比较两个对象的引用是否相同。但是,许多类(如String、Integer等)都重写了equals()方法,以便比较两个对象的内容是否相等,而不是它们的引用。

"String s = "1""与"String s = new String("1")"中的s一样吗?

在Java中,String s = "1"; 和 String s = new String("1"); 在功能上是相似的,因为它们都创建了一个内容为"1"的字符串,但它们在内存中的表现方式有所不同。

String s = "1";:这里,字符串字面量"1"会被放入字符串常量池中(如果它尚不存在)。s变量会被赋予指向这个常量池中字符串的引用。

String s = new String("1");:这里,首先会在字符串常量池中查找是否存在"1"这个字符串(如果存在,则不会重复创建)。然后,new String("1")会在堆内存中创建一个新的字符串对象,其内容是"1",s变量会被赋予指向这个新创建对象的引用。

因此,从内容上看,这两个字符串是相同的,但从引用的角度看,它们可能指向不同的对象(除非字符串常量池中已经存在"1")。

StringBuilder与StringBuffer的区别

线程安全性:StringBuffer是线程安全的,而StringBuilder不是。这意味着在多线程环境下,如果你不需要同步操作,使用StringBuilder可以获得更好的性能。

性能:由于StringBuilder没有线程安全的开销,所以在单线程环境下,它比StringBuffer要快。

使用场景:如果你在多线程环境下工作,并且需要频繁地修改字符串,那么StringBuffer是更好的选择。然而,在大多数情况下,尤其是在单线程应用中,StringBuilder是更受欢迎的选择,因为它提供了更好的性能。

洗牌问题

java 复制代码
  public static void shuffle(int[] arr) {
        Random random = new Random();
        for (int i = arr.length - 1; i > 0; i--) {
            // 生成一个[0, i]之间的随机数
            int index = random.nextInt(i + 1);
            // 交换arr[i]和arr[index]
            int temp = arr[i];
            arr[i] = arr[index];
            arr[index] = temp;
        }
    }

HTTP、HTTPS、UDP和TCP的简单介绍:

  • HTTP(超文本传输协议):HTTP是一种应用层协议,用于在万维网上传输超媒体文档(如HTML)。它基于客户端-服务器模型,是互联网上应用最广泛的一种网络协议,用于从WWW服务器传输超文本到本地浏览器的传送协议。
  • HTTPS(超文本传输安全协议):HTTPS是HTTP的安全版本,通过在HTTP下加入SSL/TLS层来提供加密传输、身份认证和数据完整性保护。它广泛用于互联网上安全敏感的通信,如在线购物和网银事务。()
  • UDP(用户数据报协议):UDP是一种无连接的、不可靠的传输层协议,它不需要在发送数据之前建立连接。UDP提供面向事务的简单不可靠信息传送服务,适合对实时性要求高而准确性要求不高的应用,如视频流、在线游戏等。
  • TCP(传输控制协议):TCP是一种面向连接的、可靠的、基于字节流的传输层通信协议。TCP在传输数据之前必须建立连接,数据在传输时采用三次握手和四次挥手的方式确保数据的可靠传输。TCP适用于对可靠性要求高的应用,如文件传输、电子邮件等。

SSL/TLS层是什么

  • SSL/TLS层是一个安全通信框架,它为网络通信提供加密、身份认证和数据完整性保护。
  • HTTP加上SSL/TLS层就成了HTTPS
  • SSL/TLS层位于TCP/IP协议与应用层协议之间,它利用密码学中的对称密码、公钥密码、数字签名、消息认证码等技术,对传输的数据进行加密和完整性校验,确保数据在传输过程中不被窃听、篡改或伪造。同时,SSL/TLS层还通过证书认证机制,验证通信双方的身份,确保数据发送到正确的客户机和服务器。
相关推荐
Cuit小唐14 分钟前
C++ 状态模式详解
开发语言·c++·状态模式
落羽的落羽40 分钟前
【落羽的落羽 C++】stack和queue、deque、priority_queue、仿函数
开发语言·c++
阿乾之铭1 小时前
Java后端文件类型检测(防伪造)
java·开发语言
sunbyte1 小时前
Three.js + React 实战系列 - 联系方式提交表单区域 Contact 组件✨(表单绑定 + 表单验证)
开发语言·javascript·react.js
(ღ星辰ღ)1 小时前
js应用opencv
开发语言·javascript·opencv
HY小海1 小时前
【数据结构】双链表
c语言·开发语言·数据结构·学习
Go Dgg2 小时前
Go语言实现豆瓣电影Top250爬虫
开发语言·爬虫·golang
真的想上岸啊2 小时前
c语言第一个小游戏:贪吃蛇小游戏03
c语言·开发语言·算法
User_芊芊君子2 小时前
【Java继承】——面向对象编程的基石
java·开发语言