手里有一个旧版本的私有化部署的 GitLab 数据,临时要启动一下看一下之前的代码。由于之前就是 Docker 部署的,所以在数据文件里查了下之前部署的版本号,直接就用 Docker 启动了。启动都很顺利,但是问题出在已经没人记得之前的管理员密码了,所以需要重置管理员密码。

阅读全文 »

由于 Chromebook 不是安卓就是 Linux 程序,那么比较起来还是 Linux 的观影体验比较好,毕竟在操作逻辑上还是 Linux 程序更加习惯。而 Linux 下的视频播放器,首选就是 VLC 了——支持的格式多,用户基数大且开源。VLC 的安装过程不再赘述,由于 Linux 子系统选择的是 Debian,直接 sudo apt install vlc 即可。安装后会自动生成软件图标,点击即可使用。
理论上 VLC 是支持中文的,但是翻遍了系统设置也没找到更改语言的地方。百度到的截图也确实都是在设置界面更改,而且一个个也都是说是 Linux 下的,但是自己这边就是没有。老规矩,百度不到去谷歌,只能说中文的搜索结果还是不行,抄来抄去就算了,还都是错的。

阅读全文 »

线上生产环境一直使用 Rancher(v2.6.5) 管理集群,在某一次通过 Web 查看 pod 日志时,因为 Rancher 默认查看 30 分钟的日志,而当时服务日志量过大,导致无法查看日志。几番搜索尝试后,发现重启机器(后面发现其实重启 rancher 的 docker 容器即可)可以解决这个问题,但后面某次在使用 kubectl 时又发生了同样的问题。仔细查看发现,出现症状后不只是 Web 无法查看日志,通过命令行 kubectl 命令也无法管理集群,唯一可以执行 kubectl 的地方是 Rancher Web 上面的命令行。因为生产环境不能频繁重启机器,所以觉得这次一定要找到好用的解决方案,好在最后也成功解决。

阅读全文 »

好不容易开到了 Oracle 的 Arm 机器,因为内存还是比较多的,所以打算用 Rancher 安装 k8s 使用。由于以前在生产环境使用 Ubuntu 安装过 Rancher,所以直接上手,可没想到这次一路波折。 因为 CentOS 8 已经停止维护了,Oracle 上面 CentOS 的镜像也更新成为了 CentOS Stream,加上也不太想用 Oracle Linux,所以直接开了最新的 Ubuntu 22.04,噩梦开始的地方。

阅读全文 »

虽然现在 Chrome 的版本号已经刷到了 101(目前个人在使用 103 的开发者版本),但是在 Chromebook 中仍然没有原生支持在其 Linux 子系统中输入除了英文之外的其他语言。所以如果想要在 Linux 及其 GUI 程序中输入中文,则需要自己安装中文输入法并配置相关环境。

fydeOS 作为本地化的 Chrome OS,官方编写了在 Linux 子系统中安装中文输入法的文章,但是步骤并不完整,导致半路无法进行,且使用了 deprecated 的文件配置环境变量,存在某个版本被删除导致出错的风险,所以重新整理下完整步骤。

阅读全文 »

之前我们提到项目上有一个跨库进行 MySQL join 操作的需求,当时选择使用了 MySQL 的 FEDERATED 存储引擎来解决这个问题,具体可以看 MySQL FEDERATED 存储引擎介绍及使用。但是 FEDERATED 本身只支持 MySQL 数据库,如果我们需要对多个不同种类的数据库进行关联操作,那么还是要依赖第三方组件来进行,比如这次要介绍的 Trino。

Trino 是基于 Java 开发的高性能的、分布式的大数据 SQL 查询引擎,支持基本上所有的常见数据源以及你所想象不到的中间件存储比如 Kafka,同时也支持在单个查询中使用多个数据源来进行关联查询。

官网:Trino

阅读全文 »

偶然间看到了一道算法题,第一眼看起来还挺简单,但是想了想发现不止这么简单,应该会有更优解。拿“波浪排序”作为关键字在百度上进行搜索,发现并没有相关题目。又以“sort wave”为关键字在谷歌上进行搜索,终于发现了相关解析,这里用自己的方式记录一下解题思路。

首先来看题目:

将给定的数组中的元素进行波浪形排序,输出任意正确结果。
波浪形排序是指: arr[0] ≥ arr[1] ≤ arr[2] ≥ arr[3] ≤ arr[4] ≥ arr[5]
例如:
输入: 1, 2, 6, 7, 5, 3, 4
输出: 4, 1, 7, 5, 6, 2, 3

解法参考:Sort an array in a waveform

阅读全文 »

项目上遇到了一个需求,需要在 MySQL(不同实例)进行跨库 join 操作。我们都知道如果是同一实例,那么 MySQL 跨库查询肯定是没有问题的,但是不同实例的跨库查询之前一直没有做过。不过以前还在用 Oracle 的时候,Oracle 有个功能叫做 DATABASE LINK(参见 CREATE DATABASE LINK),是将远程数据库映射到本地,这样就可以在一个实例中访问其他数据库了。在谷歌搜索 MySQL 跨库查询的时候,发现 MySQL 也有类似的东西,叫做 FEDERATED 存储引擎。所以我们就可以使用 FEDERATED 将需要 join 的远端表映射到本地数据库,这样在做查询的时候使用上就跟本地表一样了。

官方文档:The FEDERATED Storage Engine

阅读全文 »

由于种种原因,项目上在做数据查询时,没有选择任何的 ORM 框架而是使用了 JdbcTemplate 进行数据库查询。查询出来也没做太多事情,只是简单地对数据做了下封装,然后直接返回给了前端。

1
2
3
4
5
6
7
8
9
10
11
12
List<Map<String, Object>> data = new ArrayList<>();
JdbcTemplate jdbcTemplate = new JdbcTemplate(ds);
SqlRowSet sqlRowSet = jdbcTemplate.queryForRowSet(sql);

int columnSize = sqlRowSet.getMetaData().getColumnNames().length;
while (sqlRowSet.next()) {
Map<String, Object> tmp = new LinkedHashMap<>();
for (int i = 1; i <= columnSize; i++) {
tmp.put(i + "", sqlRowSet.getObject(i));
}
data.add(tmp);
}

本来一直岁月静好,知道某一天查了一张新表,然后后台报了异常:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
Caused by: com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found for class java.io.ByteArrayInputStream and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS) (through reference chain: com.demo.web.rest.util.ResponseEnvelope["data"]->com.demo.service.dto.SqlQueryDto["data"]->java.util.ArrayList[0]->java.util.LinkedHashMap["LOG_MSG"]->javax.sql.rowset.serial.SerialClob["asciiStream"])
at com.fasterxml.jackson.databind.exc.InvalidDefinitionException.from(InvalidDefinitionException.java:77)
at com.fasterxml.jackson.databind.SerializerProvider.reportBadDefinition(SerializerProvider.java:1300)
at com.fasterxml.jackson.databind.DatabindContext.reportBadDefinition(DatabindContext.java:400)
at com.fasterxml.jackson.databind.ser.impl.UnknownSerializer.failForEmpty(UnknownSerializer.java:46)
at com.fasterxml.jackson.databind.ser.impl.UnknownSerializer.serialize(UnknownSerializer.java:29)
at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:728)
at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:774)
at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:178)
at com.fasterxml.jackson.databind.ser.std.MapSerializer.serializeFields(MapSerializer.java:808)
at com.fasterxml.jackson.databind.ser.std.MapSerializer.serializeWithoutTypeInfo(MapSerializer.java:764)
at com.fasterxml.jackson.databind.ser.std.MapSerializer.serialize(MapSerializer.java:720)
at com.fasterxml.jackson.databind.ser.std.MapSerializer.serialize(MapSerializer.java:35)
at com.fasterxml.jackson.datatype.hibernate5.PersistentCollectionSerializer.serialize(PersistentCollectionSerializer.java:244)
at com.fasterxml.jackson.databind.ser.impl.IndexedListSerializer.serializeContents(IndexedListSerializer.java:119)
at com.fasterxml.jackson.databind.ser.impl.IndexedListSerializer.serialize(IndexedListSerializer.java:79)
at com.fasterxml.jackson.databind.ser.impl.IndexedListSerializer.serialize(IndexedListSerializer.java:18)
at com.fasterxml.jackson.datatype.hibernate5.PersistentCollectionSerializer.serialize(PersistentCollectionSerializer.java:244)
at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:728)
at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:774)
at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:178)
at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:728)
at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:774)
at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:178)
at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider._serialize(DefaultSerializerProvider.java:480)
at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider.serializeValue(DefaultSerializerProvider.java:319)
at com.fasterxml.jackson.databind.ObjectWriter$Prefetch.serialize(ObjectWriter.java:1518)
at com.fasterxml.jackson.databind.ObjectWriter.writeValue(ObjectWriter.java:1007)
at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.writeInternal(AbstractJackson2HttpMessageConverter.java:454)
... 123 common frames omitted

乍一看,可以通过提示所说的设置 SerializationFeature.FAIL_ON_EMPTY_BEANSfalse 来避免这个问题,但这个问题其实远远没有这么简单。

阅读全文 »
0%