Daizc
count.articles52
count.tags25
count.categories3
Java Stream Reduce 注意事项

Java Stream Reduce 注意事项

[Csharp]Class与RecordStruct

[Csharp]Class与RecordStruct

[Csharp]Task相关

[Csharp]Task相关

[Csharp]WPF集成Sqlite与数据库加解密

[Csharp]WPF集成Sqlite与数据库加解密

一句话总结

关于依赖安装
抽象层选用Entity Framework Core,只能安装3.x.x版本的。
因为.NETFramework是传统框架,只支持到3版本,不然就只能装大版本为6的Entity Framework(EF6),但是由于EF6已经不积极维护了,综合考虑还是更建议装EFC3

关于数据库加密
SQLite原版没有实现数据库加密,要加密就只能选用其他的SqLite发行版,他们的加密方式各异,用谁创建的数据库就得用谁读写。
推荐SQLiteStudio工具,可以选择很多加解密方式。

关于WPF集成SqLite加密
巨硬官方已经出了例子了.

1
2
3
dotnet remove package Microsoft.Data.Sqlite    # 这是个集成包,删掉
dotnet add package Microsoft.Data.Sqlite.Core # 这才是微软对Sqlite的封装核心
dotnet add package SQLitePCLRaw.bundle_e_sqlcipher # 这个真正想使用的Sqlite发行版的bundle包

修改ConnectString即可

1
2
3
4
5
6
7
# 记得别直接字符串拼,到时候被人注入了
SqliteConnectionStringBuilder sqliteConnectionStringBuilder = new SqliteConnectionStringBuilder {
Password = "xxxxxxxxxx",
Mode = SqliteOpenMode.ReadWriteCreate,
DataSource = "xxxxxxx.db"
};
var connectString = sqliteConnectionStringBuilder.ToString();
[Csharp]可为空的类型

[Csharp]可为空的类型

[Csharp]可为空的类型

一句话总结

值类型的不能?操作符的是通过Nullable<T>包装实现的,而引用类型由于本来就可以为空,所以?操作符只是个供编译器推断的标识而已。

[Csharp]循环链表封装

[Csharp]循环链表封装

[Csharp]循环链表封装

要求

  • 需要具有线程安全特性
  • 可以直接找出上一个、当前值和下一个值

思路

一开始是打算直接拿LinkedList改改的,打算直接把LinkedListNode首尾连起来,然后直接用就是了。
但随即发现一个问题:要是谁谁谁不小心for了一下这list,那还得了?而且线程安全也没法保证啊。
设计一个CreateCircularList,通过CreateCircularIterator方法生产一个Iterator,再去迭代这个Iterator就没问题了。
但随后也发现一个问题,这不够通用,我必须new一个CreateCircularList

集群爆炸,但是修好了

集群爆炸,但是修好了

周一到公司来一看,本地集群连不上了,据说是周末停电关了服务器造成的。
既然环境爆炸那啥也干不了只能挂机了, 那可不行,赶快修好了开始干活。

Bash脚本经验之谈

Bash脚本经验之谈

最近将CI/CD从Gitlab迁移到我自己写的CI/CD平台(自豪),在切换期间,需要使用脚本打通两个系统,于是乎这几天都在写bash脚本,真的快写吐了,各种命令语法花里胡哨,超简单的操作都需要绕半天才能成功.
总的来说就是’使用各种不规范的写法调用各种东拼西凑来的工具来处理各种稀奇古怪的数据’.
写的过程中也积累了不少经验教训,做个笔记分享一下(虽然也没人看).

PostgreSql单表存储多关联关系

PostgreSql单表存储多关联关系

PostgreSql bit varying

PostgreSql bit varying