钾肥喵的窝

我在 CODING 部署的 Hexo 博客

0%

什么是Git

根据官方网站上的介绍: Git是免费开源的分布式版本控制系统.

什么是版本控制

首先来看这个场景:

张三和李四还有王五要共同完成一份报表, 他们决定分工合作, 一人填写一部分, 然后用QQ发送给对方.

三天以后, 文件夹里躺着十几个同名文件, 王五忍不下去了, 决定改变这个现状, 他决定给文件加上命名规范, 于是文件夹里的文件变成了这个样子:

文件名 解析
财务报表_王五_Part1_20211026.xlsx 王五在2021年10月26日对第一部分进行了修改
财务报表_张三_Part10_20210926.xlsx 张三在2021年9月26日对第十部分进行了修改
财务报表_李四_Part3_20211016.xlsx 李四在2021年10月16日对第三部分进行了修改

一大堆同名文件总算是可以区分了, 这就是一种简陋的手动的版本控制, 可是这样还是不太方便, 我们需要自动化的版本控制.

Git的诞生

Git最初是Linus为了管理Linux的源码而编写的, 最初的代码管理是手动进行的, 后来BitKeeper决定为Linux社区开放免费授权, 但是Linux社区的大佬们岂能受这商业公司的约束, 他们开始对其进行逆向工作. 合作自然是告吹了, Linus决定自行开发自动化版本控制系统, 以十天的时间编写出Git第一个版本.

开始使用Git

本着按需学习的原则, 此处直接介绍如何与Github配合使用.

阅读全文 »

首先上代码:

打印div的几种写法

法一: 替换当前页面

1
2
3
4
5
6
7
function PrintDiv(ID){
var needPrint = document.getElementById(ID).innerHTML;
var old = document.body.innerHTML;
document.body.innerHTML=needPrint;
window.print();
document.body.innerHTML=old;
}

此法能很好的保留样式, 但是在Blazor中存在一个问题: 调用以后页面中所有的按钮都会失效.

问题的产生应该与Blazor框架的底层机制有关, 在此不深究.

法二: 在新页面中打印

此法需要注意一点: 如果需要保留样式, 需要将CSS引用一并写入新页面, 需要等待页面加载完成后才能开始打印, 否则打印结果不带样式.

等待页面加载完成在 Firefox 和 Chrome 中的写法不一样, 具体请看代码.

什么是Blazor

MSDN1中的定义十分贴切, 此处照搬过来:

Blazor 是一个使用 .NET 生成交互式客户端 Web UI 的框架:
使用 C# 代替 JavaScript 来创建信息丰富的交互式 UI。
共享使用 .NET 编写的服务器端和客户端应用逻辑。
将 UI 呈现为 HTML 和 CSS,以支持众多浏览器,其中包括移动浏览器。
与新式托管平台(如 Docker)集成。

不严谨地说, Blazor就是用C#部分代替JavaScript来写前端.

阅读全文 »

题面

https://www.luogu.com.cn/problem/P1953

基本思路

很显然就是一个字符串处理的模拟题, 说到字符串, 就想到美国人的算法, 就想到今年下半年, 正则表达式 是一个常用工具, 而 C++ 11 中引入了对正则表达式的支持(在 <regex> 中), 我们可以用正则表达式进行匹配与替换.

原生字符串

这是 C++11 中引入的语法糖, 格式为 R"(A_String)" , A_String 的字面值会被原封不动的保存, 这样我们的正则表达式中就不用每次都用 \\ 来转义了.

regex的使用

出门右拐 CppReference:

https://zh.cppreference.com/w/cpp/header/regex

网络上也有很多介绍, 在此就不赘述了.

注意:

smatchstr() 函数, 参数为 0 时返回的是匹配的整个串.

阅读全文 »

核心部分-Coliru

Coliru是一个支持自定义命令行的在线编译器.

值得一提的是官方FAQ中给的示例代码还是http请求, 使用前应该替换成https.

语法高亮-ace.js

参考资料: 利用ace.js编写一个JavaScript编辑器(带智能补全)

需要指出的是文章存在一些问题

1
2
3
4
5
6
var text = document.getElementById('editor').innerText; 
/*存在只能获取可见部分的问题, 实际上ace.js提供了直接获取代码的方法, 无需处理行号
例: var code = editor.getSession().getValue();
*/
var ctext = "<script>"+text.replace(/\d\n/g, "")+'<\/script>';
//正则只能匹配一位数字, 应该改成/\d{1,}\n/g

传送门

在线运行C++代码

由于换了渲染器, 不支持内嵌HTML了, 以下是源码:

入门

环境

classpath

classpath 是 JVM 用到的一个环境变量, 用来指示 JVM 到何处去搜索 class

在 Windows 系统中, 不同目录间用 ; 分隔, 带空格的目录使用 "" 包裹

例:

1
.;C:\work\project1\bin;C:\shared;"D:\jiafeimiao\project1\bin"

需要注意的是当前目录使用 . 代表, JVM 的按照 classpath 中的路径顺序查找, 如果在某个路径下找到了对应的 class 文件就不再继续搜索, 如果所有路径都没找到, 即报错.

阅读全文 »

char到底占几个字节?

两个 (65536个码位, 0 ~ 65535)

这个Unicode它保真吗?

2020-03-10 发布的 Unicode 13.0.0 包含 143,859 个字符.[1]

来做一道简单的比较大小: 143859 和 65536

那么 char 使用的 Unicode 保真吗?

答案是保真的, 接下来简单介绍一下 Unicode 相关知识

阅读全文 »

WAV格式解析

Waveform Audio File Format(WAVE, 或者是经常看到的扩展名WAV), 是巨硬与IBM共同开发的存储音频流的编码格式, 属于资源交换文件格式(Resource Interchange File Format, RIFF)的一种应用.

下面简要介绍一下RIFF文件, RIFF文件由一个简单的表头 (header) 跟随着多个 "chunks" 组成, 详见Wikipedia页面.

接下来介绍WAV文件, 以下仅介绍最简单的形式, 不包含扩展信息.

阅读全文 »

题面

在Animal类和其子类Dog类中均定义了一个名为age的整形变量, 则按照多态原理, 下列程序中访问的是Dog类中的age变量.

1
2
Animal a=new Dog();
System.out.println(a.age);

解析

属性的继承

Java方法重写是子类重写父类同名的方法, 子类方法覆盖了父类的方法. 而对于属性, 子类不会覆盖父类同名的属性.

如果子类没有定义属性, 子类会继承最近父类的属性.

如果创建子类对象后, 父类和子类对象都会保存一份自己的属性, 子类对象引用向上转型为父类对象引用, 父类对象引用调用的是子类重写的方法, 调用的属性仍然是父类的属性.

阅读全文 »