技术周总结 2024.07.22~07.28周日(Java Tidb Mysql)

文章目录

  • 一、 07.23 周二
    • 1.1)问题01:下面的java代码会发生NPE吗?String aa = "ss: "; String bb = null; aa + bb;
      • 解释
      • 完整示例
      • 输出
      • 总结
    • 1.2)问题02:Spring注解@ControllerAdvice 具体的使用方法
    • 1.3) 问题03: tidb中查询长时间运行的sql
      • 1.3.1)怎么杀死tidb当前实例 INFORMATION_SCHEMA.PROCESSLIST 中看不到,但是 整个集群 INFORMATION_SCHEMA.CLUSTER_PROCESSLIST 能看到的 活动会话呢?
      • 1. 查找目标会话
      • 2. 连接到目标 TiDB 实例
      • 3. 终止会话
      • 4. 验证终止结果
      • 示例流程
  • 二、07.25 周四
    • 2.1)问题01: 怎么修改 mysql表中的某一列的值为 一些自增的数字:
  • 三、07.27 周六
    • 3.1)问题01: mysql执行命令行,怎么保证终端关闭了,能继续执行mysql的相关命令?
      • 1. 使用 `nohup` 命令
        • 示例:
        • 查看输出:
      • 2. 使用 `screen` 或 `tmux` 会话管理器
        • 示例:
          • 使用 screen:
          • 使用 tmux:
      • 3. 使用计划任务 (Cron Jobs)
        • 示例:
      • 4. 使用 systemd 服务
        • 示例:
  • 四、07.28 周日
    • 4.1) 问题01: 哪些因素会导致linux中的进程进入sleep状态,怎么解决
      • 导致进程进入睡眠状态的因素:
      • 解决方法:

一、 07.23 周二

1.1)问题01:下面的java代码会发生NPE吗?String aa = "ss: "; String bb = null; aa + bb;

在 Java 中,字符串的连接操作(使用 + 运算符)对 null 值有特殊处理。如果你将一个 String 对象与 null 连接,null 会被转换为字符串 "null"。因此,下面的代码不会发生 NullPointerException (NPE)。

String aa = "ss: ";
String bb = null;
aa + bb;

解释

  • aa 是一个字符串 "ss: "
  • bbnull

当执行字符串连接操作 aa + bb 时,null 会被转换为字符串 "null",结果是 "ss: null"

完整示例

public class Main {public static void main(String[] args) {String aa = "ss: ";String bb = null;String result = aa + bb;System.out.println(result); // 输出 "ss: null"}
}

输出

ss: null

总结

在上述代码中,aa + bb 不会引发 NullPointerException。相反,null 会被转换为字符串 "null",并连接到字符串 aa 上。

1.2)问题02:Spring注解@ControllerAdvice 具体的使用方法

@ControllerAdvice 是 Spring MVC 提供的一个注解,用于统一处理控制器中抛出的异常。通过在一个类上添加 @ControllerAdvice 注解,这个类就成为全局异常处理类,可以针对不同的异常类型进行处理。

具体的使用方法如下:

  1. 创建一个类并添加 @ControllerAdvice 注解。
  2. 在类中定义异常处理方法,可以使用 @ExceptionHandler 注解来指定要处理的异常类型。
  3. 在异常处理方法中编写具体的异常处理逻辑,比如返回错误信息、跳转到错误页面等。

示例代码如下:

import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;@ControllerAdvice
public class GlobalExceptionHandler {@ExceptionHandler(Exception.class)@ResponseBodypublic String handleException(Exception e) {return "发生异常:" + e.getMessage();}@ExceptionHandler(MyCustomException.class)public String handleCustomException(MyCustomException e) {return "自定义异常:" + e.getMessage();}
}

在上面的示例中,GlobalExceptionHandler 类使用 @ControllerAdvice 注解标记为全局异常处理类,定义了两个异常处理方法。第一个方法处理所有类型的异常,将异常信息返回给前端;第二个方法处理自定义异常 MyCustomException,并返回自定义的错误信息。

这样,在控制器中抛出异常时,Spring MVC 就会自动调用对应的异常处理方法进行处理。这样可以统一处理异常,使代码更加健壮和可维护。

1.3) 问题03: tidb中查询长时间运行的sql

SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST WHERE DB = 'my_database' AND COMMAND != 'Sleep';
show processlist;

杀死 运行的查询的id

kill tidb queryId;

1.3.1)怎么杀死tidb当前实例 INFORMATION_SCHEMA.PROCESSLIST 中看不到,但是 整个集群 INFORMATION_SCHEMA.CLUSTER_PROCESSLIST 能看到的 活动会话呢?

在 TiDB 集群中,有时会遇到这种情况:某个活动会话在 INFORMATION_SCHEMA.PROCESSLIST 中看不到,但在 INFORMATION_SCHEMA.CLUSTER_PROCESSLIST 中可以看到。这通常是因为该会话在另一个 TiDB 实例上运行。

要终止这种会话,可以按照以下步骤进行操作:

1. 查找目标会话

首先,通过 INFORMATION_SCHEMA.CLUSTER_PROCESSLIST 找到目标会话,并获取其所在的 TiDB 实例。

SELECT * FROM INFORMATION_SCHEMA.CLUSTER_PROCESSLIST WHERE Id = 123;

假设返回的结果中包含以下重要信息:

  • ID: 123
  • USER: your_user
  • HOST: your_host
  • DB: your_db
  • COMMAND: Query
  • TIME: 100
  • STATE: executing
  • INFO: your_query
  • TIDB_SERVER: 10.0.0.1:4000 (假设会话在这个 TiDB 实例上)

2. 连接到目标 TiDB 实例

使用 mysql 客户端或其他数据库连接工具,连接到返回结果中 TIDB_SERVER 所在的 TiDB 实例。

mysql -h 10.0.0.1 -P 4000 -u your_user -p

3. 终止会话

连接到目标 TiDB 实例后,使用 KILL 命令终止该会话:

KILL 123;

4. 验证终止结果

再次查询 INFORMATION_SCHEMA.CLUSTER_PROCESSLIST,确保会话已经被终止:

SELECT * FROM INFORMATION_SCHEMA.CLUSTER_PROCESSLIST WHERE Id = 123;

如果会话已经被成功终止,那么该查询将不返回任何结果。

示例流程

以下是一个完整的示例流程:

-- 步骤 1: 查找目标会话
SELECT * FROM INFORMATION_SCHEMA.CLUSTER_PROCESSLIST WHERE Id = 123;

假设返回结果如下:

+-----+----------+-----------+---------+---------+------+-----------+------------+---------------+
| ID  | USER     | HOST      | DB      | COMMAND | TIME | STATE     | INFO       | TIDB_SERVER   |
+-----+----------+-----------+---------+---------+------+-----------+------------+---------------+
| 123 | your_user| your_host | your_db | Query   | 100  | executing | your_query | 10.0.0.1:4000 |
+-----+----------+-----------+---------+---------+------+-----------+------------+---------------+
-- 步骤 2: 连接到目标 TiDB 实例
mysql -h 10.0.0.1 -P 4000 -u your_user -p
-- 步骤 3: 终止会话
KILL 123;
-- 步骤 4: 验证终止结果
SELECT * FROM INFORMATION_SCHEMA.CLUSTER_PROCESSLIST WHERE Id = 123;

通过这种方式,你可以在 TiDB 集群环境中有效地管理和终止跨实例的活动会话。

二、07.25 周四

2.1)问题01: 怎么修改 mysql表中的某一列的值为 一些自增的数字:

你可以使用以下的 SQL 语句来修改 MySQL 表中某一列的值为一些自增的数字:

SET @row_number = 0;
UPDATE your_table_name
SET template_no = (@row_number:=@row_number+1);

在上面的 SQL 语句中,首先通过设置变量 @row_number 来记录自增的数字,然后通过 UPDATE 语句将表中的 template_no 列的值更新为自增的数字。

三、07.27 周六

3.1)问题01: mysql执行命令行,怎么保证终端关闭了,能继续执行mysql的相关命令?

要在 MySQL 中执行命令并确保即使在终端关闭后这些命令也能继续运行,您可以使用几种不同的方法。这里有一些推荐的策略:

1. 使用 nohup 命令

nohup 命令可以让您启动一个进程,并且即使您退出 shell 或者终端关闭,该进程也会继续运行。

示例:
nohup mysql -u username -p password -e "your_mysql_command" &
  • nohup: 表示不挂断。
  • &: 表示将命令放到后台执行。
查看输出:

nohup 运行的命令的标准输出会被重定向到 nohup.out 文件中(默认位置是当前目录)。

2. 使用 screentmux 会话管理器

screentmux 是两个流行的会话管理工具,可以在其中创建多个终端会话,并且即使客户端断开连接或终端关闭,这些会话中的进程仍然继续运行。

示例:
使用 screen:
screen
mysql -u username -p password -e "your_mysql_command"

Ctrl+A 后再按 D 可以分离 session 而不会关闭它。

使用 tmux:
tmux new -s mysession
mysql -u username -p password -e "your_mysql_command"

Ctrl+B 后再按 D 可以分离 session 而不会关闭它。

3. 使用计划任务 (Cron Jobs)

如果您希望定期执行 MySQL 命令,可以使用 cron jobs。

示例:
crontab -e

然后添加一行类似下面的内容:

* * * * * mysql -u username -p password -e "your_mysql_command"

4. 使用 systemd 服务

如果您的系统支持 systemd,您可以创建一个新的服务单元文件来持续运行 MySQL 命令。

示例:

创建一个新的 .service 文件:

sudo nano /etc/systemd/system/mysqlcommand.service

然后添加以下内容:

[Unit]
Description=MySQL Command Service[Service]
ExecStart=/usr/bin/mysql -u username -p password -e "your_mysql_command"[Install]
WantedBy=default.target

接着启用并启动服务:

sudo systemctl enable mysqlcommand.service
sudo systemctl start mysqlcommand.service

以上方法可以根据您的具体需求选择合适的方式。如果只是简单的定时任务,建议使用 cron jobs;如果需要长时间运行的任务并且需要管理,则可以考虑使用 screentmux;如果是系统级的服务,则可以考虑使用 systemd

这样的命令,会导致终端关闭时,运行关闭:

nohup mysql -u username -p password -e "your_mysql_command" > output-2.log 2>&1 &

修改为

nohup mysql -u username -p password -e "your_mysql_command"  &

即可
这样在别的 终端中,ps aux|grep mysql 可以看到这个执行的命令

四、07.28 周日

4.1) 问题01: 哪些因素会导致linux中的进程进入sleep状态,怎么解决

在Linux系统中,进程可能处于多种状态之一,其中包括睡眠状态(Sleep)。进程进入睡眠状态通常意味着它正在等待某种资源或条件变得可用。以下是可能导致进程进入睡眠状态的一些常见因素以及相应的解决方法:

导致进程进入睡眠状态的因素:

  1. 等待I/O操作完成

    • 如果一个进程正在进行磁盘读写或其他I/O操作,并且该操作还没有完成,进程将进入睡眠状态。
    • 解决方法:优化I/O操作,比如使用更快的硬盘驱动器、增加缓存等。
  2. 等待锁或信号量

    • 当进程试图获取已经被另一个进程锁定的资源时,它会进入睡眠状态直到资源可用。
    • 解决方法:确保锁的使用是正确的,并尽量减少锁的持有时间;考虑使用更高效的同步机制。
  3. 等待用户输入

    • 如果一个程序正在等待用户的键盘输入或其他交互式输入,它会进入睡眠状态。
    • 解决方法:优化用户界面设计,提高用户体验,减少不必要的等待时间。
  4. 等待网络连接

    • 如果进程正在等待网络数据包或响应,它也会进入睡眠状态。
    • 解决方法:检查网络连接状况,优化网络代码,使用超时设置防止无限期等待。
  5. 等待定时器到期

    • 使用select(), poll(), epoll_wait(), 或者 sleep()等函数可以让进程进入睡眠状态直到某个事件发生或某个时间点到达。
    • 解决方法:合理设置定时器的超时时间,避免不必要的长时间等待。
  6. 等待资源可用

    • 比如等待内存分配或等待某些系统资源变得可用。
    • 解决方法:优化资源管理,确保有足够的资源可用,或采用更好的资源分配策略。

解决方法:

  1. 优化资源使用

    • 对于等待I/O操作的情况,可以尝试使用异步I/O(如aio_read(), aio_write(), 或libaio)来提高效率。
    • 考虑使用多线程或多进程模型来允许其他任务在等待资源时继续执行。
  2. 改进算法和逻辑

    • 重新审视程序的算法和逻辑,看是否有优化的空间。
    • 确保所有必要的资源都在适当的时间点准备好。
  3. 使用超时

    • 在可能的情况下,为等待操作设置合理的超时时间,这样进程就不会无限期地阻塞。
  4. 监控和调试

    • 使用系统监控工具(如top, htop, ps等)来监控进程状态。
    • 使用调试工具(如gdb)来深入了解进程为何进入睡眠状态。
  5. 调整系统配置

    • 根据需要调整系统的调度策略和优先级。
    • 调整内核参数以优化性能。

通过上述方法,你可以有效地诊断和解决导致进程进入睡眠状态的问题。如果问题持续存在,你可能还需要深入调查程序的实现细节和系统配置。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/51553.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java人力资源招聘社会校招类型招聘小程序

✨💼【职场新风尚!解锁人力资源招聘新神器:社会校招类型招聘小程序】✨ 🎓【校招新体验,一键触达梦想企业】🎓 还在为错过校园宣讲会而懊恼?别怕,社会校招类型招聘小程序来救场&am…

日常进度提醒

今日进行学习的时联合和枚举,加油!

L2TP VPN

目录 一、实验目的 二、实验环境 三、实验内容 1、实验规划: 2、关键内容: 3、实施步骤: 四、实验总结 一、实验目的 1、了解L2TP的实现原理; 2、掌握Client-Initiated场景下的L2TP的配置。 二、实验环境 华为eNSP模拟器…

pytest 测试框架中 setup、teardown 方法不生效

pytest 测试框架中 setup、teardown 方法不生效 源码有改动: 将 setup、teardown改为:setup_method、teardown_method 可生效 def setup_method(self):print("测试用例执行前的初始化,如:打开浏览器,加载网页...")def setup_class…

MybatisPlus(一)

目录 入门: 使用MybatisPlus的基本步骤: 常见注解 常见配置 总结 核心功能 条件构造器 自定义SQL Service接口 IService接口基本用法 IService的Lambda查询 IService的Lambda更新 IService批量新增 入门: 使用MybatisPlus的基本步…

Flink CDC基本概念以及MySQL同步到MySQL

目录 欢迎来到Flink CDC 核心概念 数据管道(Data Pipeline) 数据源(Data Source) 数据接收器(Data Sink) 表ID(Table ID) 转换(Transform) 路由(Route) 连接器(connectors) 管道连接器(pipeline connectors) 支持连接器 开发自己的连接器 Flink源…

WebSocket程序设计

协议说明 WebSocket 是一种在单个TCP连接上进行全双工通信的协议。WebSocket 使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。Websocket主要用在B/S架构的应用程序中,在 WebSocket API 中,浏览器和服务器只…

[算法题]装箱问题

题目链接: 装箱问题 1. 动态规划(0、1背包问题) 2. 定义状态表示:dp[i][j] 表示在 1 - i 个物品中,选出不超过容量为 j 的物品的最大体积是多少。 3. 状态转移方程: 1)不选第 i 个物品:dp[i]…

2024全面解析:从零基础到精通的大模型学习路线,非常详细零基础入门到精通,收藏我这一篇就够了

大模型学习路线规划 第一阶段:基础理论入门 目标:了解大模型的基本概念和背景。 内容: 人工智能演进与大模型兴起。 大模型定义及通用人工智能定义。 GPT模型的发展历程。 第二阶段:核心技术解析 目标:深入学习大模…

C++ primer plus 第16章string 类和标准模板库, 函数和容器方法

C primer plus 第16章string 类和标准模板库, 函数和容器方法 C primer plus 第16章string 类和标准模板库, 函数和容器方法 文章目录 C primer plus 第16章string 类和标准模板库, 函数和容器方法16.6.4 函数和容器方法程序清单 16.18 16.6.4 函数和容器方法 有时可以选择使…

python 图片转文字、语音转文字、文字转语音保存音频并朗读

一、python图片转文字 1、引言 pytesseract是基于Python的OCR工具, 底层使用的是Google的Tesseract-OCR 引擎,支持识别图片中的文字,支持jpeg, png, gif, bmp, tiff等图片格式 2、环境配置 python3.6PIL库安装Google Tesseract OCR 3、安…

mac下通过brew安装mysql的环境调试

mac安装mysql 打开终端,运行命令(必须已经装过homebrew哦): 安装brewbin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"已安装brew直接运行:brew install mysql8.0报…

洛科威岩棉板在生产生活中广泛应用,以优秀表现实现隔热性能最大化

无论是在住宅领域还是工业生产领域,隔热保温都扮演着极其重要的角色,选用的材料是否足够出色,决定了大家居家生活的舒适度,以及生产过程中能耗的高低。近些年来,洛科威岩棉优秀的隔热性能逐渐得到了各行各业的青睐&…

HomeDepot commercedesk 平台EDI自测流程

Home Depot Canada 是一家全球知名的家居建材零售公司,在加拿大拥有多家分店。它是美国的家居建材零售巨头 Home Depot 在加拿大的子公司。Home Depot 主要销售各种家庭装修和建筑材料,包括工具、家具、装饰品、电器等。公司提供广泛的产品选择和专业的顾…

机器学习(二十四):信息增益、独热编码和回归树

一、纯度测量方式——熵 第一步,定义:一个子集里,某一类别的数据在子集中的占比 例如,下图这组输入数据,根据耳朵形状划分为两个子集,尖耳朵子集里,有四只猫,1只狗。则是4/5 第二步…

Pyppeteer 爬取实战

爬取目标 https://spa2.scrape.center/ 本节工作 遍历每页列表,获取每部电影详情页的 URL 爬取每部电影的详情页, 提取电影名称, 评分,类别,封面,简介等信息 将爬取的数据保存为 JSON数据 准备工作 安…

半监督学习方法的种类

半监督学习方法结合了少量标记数据和大量未标记数据,利用未标记数据来改进模型的性能。以下是几种常见的半监督学习方法: 1. **自训练(Self-training)**:模型先用少量标记数据进行训练,然后使用这个模型来…

NVIDIA正偷偷复活卡皇泰坦,性能秒杀5090Ti

PC 硬件圈的瓜年年有,但最近似乎格外的多噢! 首先针对 13、14 代酷睿 CPU 不稳定问题,Intel 终于做出了正式回应: 他们在对退回的 CPU 进行大量分析后得出,确认是过高的运行电压和微代码算法错误导致了不稳定情况。 …

2-48 基于matlab的EM算法聚类可视化程序

基于matlab的EM算法聚类可视化程序,通过期望最大化算法(EM)优化类别间距,使得类别间距最大、类内间距最小。输出聚类前后结果及收敛曲线。程序已调通,可直接运行。 2-48 期望最大化算法(EM) 聚类…

微信小程序教程002:代码结构介绍和新建小程序页面

文章目录 代码介绍1、小程序代码构成2、小程序页面组成部分3、JSON配置文件的作用3.1 app.json文件3.2 project.config.json文件3.3 sitemap.json文件3.4 页面的.json文件 新建小程序页面WXML和WXSS介绍1、什么是WXML2、什么是WXSS 小程序的JS文件1、JS文件2、小程序中JS文件分…