腾讯后台开发 一面

一、手撕

合并升序链表     合并两个排序的链表_牛客题霸_牛客网

顺时针翻转矩阵  顺时针旋转矩阵_牛客题霸_牛客网

二、八股

1、静态变量和实例变量

public class House {
    public static String buildDate = "2024-10-27"; // 静态变量
    public String color; // 实例变量

    public House(String color) {
        this.color = color; // 初始化实例变量
    }

    public static void main(String[] args) {
        House house1 = new House("red");
        House house2 = new House("blue");
        System.out.println(House.buildDate); // 通过类名访问静态变量
        System.out.println(house1.color); // 通过对象访问实例变量
    }
}

2、jvm垃圾回收算法

JAVA基础-2-优快云博客

3、Linux如何显示正在进行的程序指令

ps

ps aux:显示所有进程的详细信息(用户、CPU、内存占用等)。

ps -ef | grep <进程名>:快速查找特定进程。

top

实时显示系统进程,按 CPU/Memory 排序,默认每3秒刷新一次。

strace

跟踪进程的系统调用,如 strace -p <PID> 查看指定进程的指令。

lsof

显示进程打开的文件和网络连接,如 lsof -i :<端口> 查看端口占用情况。

4、MySQL的索引

MySQL索引详解 | JavaGuide

按照数据结构维度划分:

  • BTree 索引:MySQL 里默认和最常用的索引类型。只有叶子节点存储 value,非叶子节点只有指针和 key。存储引擎 MyISAM 和 InnoDB 实现 BTree 索引都是使用 B+Tree,但二者实现方式不一样。
  • 哈希索引:类似键值对的形式,一次即可定位。
  • RTree 索引:一般不会使用,仅支持 geometry 数据类型,优势在于范围查找,效率较低,通常使用搜索引擎如 ElasticSearch 代替。
  • 全文索引:对文本的内容进行分词,进行搜索。目前只有 CHARVARCHARTEXT 列上可以创建全文索引。一般不会使用,效率较低,通常使用搜索引擎如 ElasticSearch 代替。

按照底层存储方式角度划分:

  • 聚簇索引:索引结构和数据一起存放的索引,InnoDB 中的主键索引就属于聚簇索引。
  • 非聚簇索引:索引结构和数据分开存放的索引,二级索引(辅助索引)就属于非聚簇索引。MySQL 的 MyISAM 引擎,不管主键还是非主键,使用的都是非聚簇索引。

按照应用维度划分:

  • 主键索引:加速查询 + 列值唯一(不可以有 NULL)+ 表中只有一个。
  • 普通索引:仅加速查询。
  • 唯一索引:加速查询 + 列值唯一(可以有 NULL)。
  • 覆盖索引:一个索引包含(或者说覆盖)所有需要查询的字段的值。
  • 联合索引:多列值组成一个索引,专门用于组合搜索,其效率大于索引合并。
  • 全文索引:对文本的内容进行分词,进行搜索。目前只有 CHARVARCHARTEXT 列上可以创建全文索引。一般不会使用,效率较低,通常使用搜索引擎如 ElasticSearch 代替。
  • 前缀索引:对文本的前几个字符创建索引,相比普通索引建立的数据更小,因为只取前几个字符。

5、主从同步有哪几种

  1. 异步复制(Asynchronous)

    • 原理:主库不等待从库确认,直接提交事务。
    • 优缺点:性能高,但可能丢失数据。
  2. 半同步复制(Semi-Synchronous)

    • 原理:主库等待至少一个从库确认后再提交。
    • 优缺点:平衡性能与数据一致性,减少数据丢失风险。
  3. 全同步复制(Fully Synchronous)

    • 原理:主库等待所有从库确认后才提交。
    • 优缺点:数据零丢失,但延迟高,性能差。

6、长连接和短连接

7、SQL注入

  1. 动态SQL的构造方式
    应用程序在处理用户输入时,直接将输入内容拼接到SQL语句中,形成动态SQL查询。例如:

    SELECT * FROM users WHERE username = '输入的用户名' AND password = '输入的密码';

    如果用户输入未经过滤或转义,攻击者可以插入恶意SQL代码,改变查询逻辑。

  2. 输入未过滤或验证
    程序员未对用户输入的数据进行严格的校验和转义,导致恶意代码能直接拼接到SQL语句中。

  3. 攻击者构造恶意输入
    攻击者通过输入特殊字符(如单引号'、分号;、注释符--等)或逻辑表达式,闭合原SQL语句并注入新的SQL命令。恶意输入会破坏原SQL语句的逻辑结构,执行攻击者意图的操作,例如:绕过身份验证,获取敏感数据,删除或篡改数据,执行系统命令


    例如:

正常登录流程
用户输入用户名admin和密码123,生成的SQL语句为:

SELECT * FROM users WHERE username = 'admin' AND password = '123';

攻击者输入恶意代码
攻击者在密码字段输入:1' OR '1'='1,则拼接后的SQL语句变为:

SELECT * FROM users WHERE username = 'admin' AND password = '1' OR '1'='1';

单引号'闭合原密码字段的值。

OR '1'='1'始终为真,使得条件成立,无需正确密码即可登录。

执行结果
数据库返回用户名为admin的第一条记录,攻击者成功绕过登录验证。


防御关键点

 参数化查询(预编译语句)

  • 核心原理:将用户输入作为参数传递,而非直接拼接到SQL语句中,确保输入数据不会被解释为SQL代码。
  • 实现方式
    • 使用PreparedStatement等API
      String sql = "SELECT * FROM orders WHERE user_id = ?";
      PreparedStatement pstmt = connection.prepareStatement(sql);
      pstmt.setString(1, id); // 自动处理引号和特殊字符
  • 优势:彻底阻断恶意SQL的注入路径,是防御SQL注入的最有效方法

8、安全XXS

这篇文章写的很清楚

XSS攻击详解_xxs原理-优快云博客

总结

对于安全的知识不是那么了解,还需要继续学习

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值