Hello World

Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub.

Quick Start

Create a new post

1
$ hexo new "My New Post"

More info: Writing

Run server

1
$ hexo server

More info: Server

Generate static files

1
$ hexo generate

More info: Generating

Deploy to remote sites

1
$ hexo deploy

More info: Deployment


Oracle 23ai FREE 相关学习记录

Oracle 23ai FREE 命令

Oracle 23ai FREE默认只能有一个数据库FREE,Oracle的用户和SqlServe的多个数据库实例相互对应,oracle每个用户管理自己的表,sqlserver使用数据库实例管理自己的表。

SHOW PARAMETER spfile;确定当前使用的参数文件

SHUTDOWN IMMEDIATE;关闭数据库

STARTUP;开启数据库

检查时间戳格式

1
2
SHOW PARAMETER nls_timestamp_format;
SHOW PARAMETER nls_timestamp_tz_format;

WPF_MVVM

MVVM设计模式将应用分为三层,Model(模型层/实体层) ViewModel(视图模型层/UI模型层)View(视图层/UI层)。目前主流的开发都习惯用ORM框架进行数据库的设计,这里的模型层,存放的实体类,与数据表的字段一一对应。UI模型层,可以将模型层的数据进行选择性的读取(数据塑形),避免隐私数据泄露,同时作为UI层的数据类,与视图实现双向绑定,完成UI开发与业务开发的解耦,扩展性大大提高。


WPF基本结构

1. WPF项目目录结构

框架使用NET 8.0

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
PS E:\PersonalCSharpProject\WPFLearning\WpfApp1> tree /F
卷 WorkDisc 的文件夹 PATH 列表
卷序列号为 507E-08F0
E:.
│ global.json
│ WpfApp1.sln

└─WpfApp1
│ App.xaml
│ App.xaml.cs
│ AssemblyInfo.cs
│ MainWindow.xaml
│ MainWindow.xaml.cs
│ WpfApp1.csproj
│ WpfApp1.csproj.user

App.xaml是程序的入口文件,StartupUri="MainWindow.xaml"配置程序的主窗体。


关于常量引用,左值引用,右值引用的一些理解

简单理解

代码块1:

1
2
3
double dval = 3.14;
// 使用右值引用接受隐式转换产生的临时量(字面量)
int &&rd = dval;

代码块2:

1
2
3
4
5
6
double dval = 3.14;
const int &ri = dval;
// 实际赋值过程如下,产生了一个中间变量
double dval = 3.14;
const int temp = dval;
const int &rt = temp;

上述代码都可以编译通过,看代码块2,在将dval的值赋值到ri上的时候,会生成中间变量,这个变量是一个临时值,也就是一个右值,这时想要创建引用,就必须使用右值引用来接收,代码块1编译通过,证明了这一点。

int &b = dval;会编译错误,不能使用左值引用来接受,是因为C++ 标准规定,非const左值引用不能绑定到临时对象上。这种设计的初衷是为了防止程序员意外修改转换后临时对象的值,或者在引用一个临时对象时产生意外的副作用。

为什么可以用const int temp来接收呢,因为临时量,也就是字面量,或者说右值,可以用来初始化变量,也可以用来初始化常量,int aa = dval;使用字面量初始化一个变量,编译通过。

为什么const int &rt = temp;就可以使用左值引用来接收,因为const int temp = dval;,已经将右值固化,有了固定的内存地址,此时temp是左值。两个步骤都必须存在const的原因就是为了延长临时对象的生命周期,安全绑定,避免意外转换造成引用为空。

引用的底层是常量指针,指针本身不可以修改,指向的对象可以修改。常量引用就可以理解为指向常量的常量指针,指针本身以及指向的对象都不可以修改。