小米6

安装twrp:【教程】以小米6为例,教你如何刷机_哔哩哔哩_bilibili

MIUI下载:小米各机型 MIUI 历史版本分类索引 MIUISTORE 下载

改包:【MIUI12.5降级】手把手教你如何从MIUI12.5降级到旧版本<2>_哔哩哔哩_bilibili

MiFlash:MiFlash 线刷工具下载合集 – MIUI历史版本

Magisk获取Root:


卡刷9.93开发版ROM总是会无限重启,使用MiFlash线刷,又会一直无法完成。最终,通过对有线刷包版本的MIUI进行改包的方式,成功安装(虽然MiFlash线刷会报错,但实际能成功安装)。

安装开发版后,可能是小米已经停止维护root权限的开放,开启小米官方的root权限流程会出现下载失败,转而通过Magisk来获取Root权限。

缓苗

收到番茄苗后:

  1. 室内阴凉通风处缓苗。
  2. 对根部进行适量喷水保湿。
  3. 摘除已经发黄或枯萎的叶子。

移栽定植

  1. 保持原土团的完整,避免损伤根系。
  2. 将番茄苗放入新盆中(大小?),填充土壤并轻轻压实,确保植株稳定。
  3. 盆土浇透水,放到散射光通风处。
  4. 1-2天后,放到阳台能让阳光直晒的位置。

日常养护

  1. 光照:喜光,有助于积累养分。
  2. 温度:15 - 25 ℃。夏季需要遮荫降温,避免晒伤
  3. 土壤:富含有机质、疏松、排水性好。PH 6.0 - 7.0。
  4. 浇水:保持土壤湿润不要过湿
  5. 施肥:薄肥勤施。30天追肥1次,花期、结果期15天1次。施肥不要太靠近根部,避免烧苗。

搭架吊蔓

什么时候进行这步操作?

  1. 沿番茄苗主干插入支架,避免损伤根部。
  2. 用绳子将植株固定在支架上,增强空气流通,改善光照、促进番茄的成熟。

开花授粉

  1. 开花后,用棉签轻轻蘸取雄蕊上的花粉,将其均匀涂抹雌蕊上以及花朵内侧
  2. 授粉后避免淋雨

收获

开花到果实成熟,一般需要1个月左右时间。当果实呈现出品种应有的色泽即可收获。

简介

mysqldumpMySQL 自带的逻辑备份工具。

它的备份原理是通过协议连接到 MySQL 数据库,将需要备份的数据查询出来,将查询出的数据转换成对应的insert 语句,当我们需要还原这些数据时,只要执行这些 insert 语句,即可将对应的数据还原。


备份命令

mysqldump [选项] 数据库名 [表名] > 脚本名

mysqldump [选项] --all-databases [选项]  > 脚本名

选项

参数名 缩写 含义
–host -h 服务器IP地址
–port -P 服务器端口号
–user -u MySQL 用户名
–pasword -p MySQL 密码
–databases 指定要备份的数据库
–all-databases 备份mysql服务器上的所有数据库
–compact 压缩模式,产生更少的输出
–comments 添加注释信息
–complete-insert 输出完成的插入语句
–lock-tables 备份前,锁定所有数据库表
–no-create-db/–no-create-info 禁止生成创建数据库语句
–force 当出现错误时仍然继续备份操作
–default-character-set 指定默认字符集
–add-locks 备份数据库表时锁定数据库表

示例

备份所有数据库:

mysqldump -uroot -p --all-databases > /backup/mysqldump/all.db

备份指定数据库:

mysqldump -uroot -p test > /backup/mysqldump/test.db

备份指定数据库指定表(多个表以空格间隔)

mysqldump -uroot -p  mysql db event > /backup/mysqldump/2table.db

备份指定数据库排除某些表

mysqldump -uroot -p test --ignore-table=test.t1 --ignore-table=test.t2 > /backup/mysqldump/test2.db

还原命令

# 在导入备份数据库前,如果没有db_name,需要创建; 而且与db_name.db中数据库名一样才可以导入。
mysqladmin -uroot -p create db_name
mysql -uroot -p  db_name < /backup/mysqldump/db_name.db

参考

MySQL之mysqldump的使用 - MarkLogZhu - 博客园

需求

前言:Windows下通过GitHub+Hexo搭建个人博客的步骤

传统利用Hexo发布博文,需要:

  1. 执行hexo new "文章标题"命令,编写博文
  2. 执行hexo generate命令,生成静态网页文件
  3. 执行hexo deploy命令,将静态网页文件部署到Github Pages
  • 问题1:
    如果想用git进行版本控制,每部署一次,也要git addgit commitgit push三连。版本控制与博客的部署操作是割裂的,很难一次性完成。
  • 问题2:
    随着文章越来越多,编译的时间也越来越长,每次执行hexo generate命令都需要花费大量时间,这对个人博客来说是不划算的。
  • 问题3:
    可能会遇到本地安装的Node.js 版本升级后,与 Hexo 不兼容的问题

那么有没有什么方法,可以搞定这些痛点,自动部署Hexo博客呢?
Github Actions是一个白嫖的好答案。它是Github推出的持续集成服务,可以自动化地执行各种任务,比如编译、测试、打包、发布等等

最终效果:

Github Actions自动部署Hexo博客流程

阅读全文 »

现象

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
    <version>3.4.0</version>
</dependency>

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-core</artifactId>
    <version>2.18.1</version>
</dependency>

Redis缓存数据,使用GenericJackson2JsonRedisSerializer作为value和hash value的序列化器

// 将用户信息存入redis
redisTemplate.opsForValue().set(RedisConstants.LOGIN_USER_ID + loginUser.getUser().getId(), loginUser);

// 从redis中获取用户信息
LoginUser loginUser = (LoginUser) redisTemplate.opsForValue().get(RedisConstants.LOGIN_USER_ID + userId);

从redis中获取用户信息时,会报错:LinkedHashMap cannot convert to LoginUser

阅读全文 »

现象

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
    <version>3.4.0</version>
</dependency>

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-core</artifactId>
    <version>2.18.1</version>
</dependency>

Redis缓存数据,使用GenericJackson2JsonRedisSerializer作为value和hash value的序列化器

使用如下方式存储哈希对象:

// 不使用任何查询条件,从数据库中获取所有博文信息
List<Article> articles = articleMapper.selectList(null);

Map<String, Long> viewCountMap = articles.stream()
    .collect(Collectors.toMap(article -> article.getId().toString(), Article::getViewCount));

// 将id、浏览量存入redis
redisTemplate.opsForHash().putAll("article:viewCount", viewCountMap);

当需要从中取出数据时,如果viewCountMap的Long类型的value数值大小可以被Integer所存储,反序列化的数据会变成Integer类型

// 从redis读出浏览量,需要先指定泛型,如果直接调用到entries只能得到Object类型
BoundHashOperations<String, String, Long> boundHashOps = redisTemplate.boundHashOps("article:viewCount");
Map<String, Long> viewCountMap = boundHashOps.entries();
assert viewCountMap != null;
List<Article> articleList = viewCountMap.entrySet()
    .stream()
    .map(entry -> new Article(Long.valueOf(entry.getKey()),
                              entry.getValue()))
    .toList();

呈现出来的现象就是:对Map进行 JSON 序列化,其中值中包含Long类型的数据,反序列化后强转Long时报了类型转换异常

java.lang.ClassCastException: class java.lang.Integer cannot be cast to class java.lang.Long (java.lang.Integer and java.lang.Long are in module java.base of loader ‘bootstrap’)

阅读全文 »

System.lineSeparator()

换行符使用System.lineSeparator()获取,避免不同操作系统的换行符不一致。

org.springframework.util.StringUtils

字符串判空

字符串对象的判空是经常需要处理的流程,通常会使用str != null && !str.isEmpty(),每次手动写全浪费时间。Spring框架提供了String工具类,对字符串对象的判空做了封装:

org.springframework.util.StringUtils.hasLength(String str)


java.time.LocalDateTime

Date 类不是线程安全的,这意味着在多线程环境中使用 Date 类时需要特别小心,以避免并发问题。

  1. LocalDateTime类是不可变的(immutable),因此它是线程安全的。
  2. LocalDateTime还明确地将日期和时间分开,提供了 LocalDateLocalTime 类来分别处理日期和时间,更加直观和灵活。
  3. LocalDateTime与MySQL的 DATETIME 类型语义一致。

简介

Kotlin是一种现代但已经成熟的编程语言,它简洁、安全、可与Java和其他语言互操作,并提供了许多在多个平台之间重用代码的方法。它由JetBrains公司于2011年设计和开发,并在2016年正式发布。Kotlin旨在解决Java语言在编码效率和代码质量方面存在的问题,并且与Java语言完全兼容。Kotlin通过简化语法、提供更强大的功能以及减少样板代码的编写,使得开发者能够更高效地编写清晰、简洁而又安全的代码。

阅读全文 »
0%