Nboxff's Blog

记录学习,记录生活

0%

前言

准备打开我的Ubuntu虚拟机进行愉快的编程时,发现Ubuntu系统进入了GRUB界面,那天正好时1024程序员节,这份特殊的礼物真让人喜欢崩溃。

Ubuntu GRUB

猜测一下原因:可能是开着虚拟机的时候电脑蓝屏,导致grub文件收到损坏了

阅读全文 »

Typora 主题介绍

Typora作为轻量级的Markdown语言编辑器,深受广大用户喜爱。在Typora中,提供了GithubNewsprint等内置主题,可渲染出不同的、漂亮的文档。

除此之外,Typora官网还提供了更多主题供用户免费下载:

更多主题: Themes Gallery — Typora (typoraio.cn)

Typora主题文件就是一个CSS文件,因此我们可以很轻松的修改/编写自己的主题。

Typora中Latex 主题推荐

项目地址:https://github.com/Keldos-Li/typora-latex-theme

该主题初衷是为了简化中国大陆本科生小型通识课论文的撰写,生成Latex主题很符合我的审美。Github仓库提供了效果展示和安装说明,这里不再赘述。

阅读全文 »

项目地址:https://github.com/CompilerBagel/CompilerBagel

本项目为2023 年华为毕昇杯 CompilerBagel 组参赛作品,基于Java语言和Antlr框架,实现从SysY2022语言(C语言的子集)到RISC-V架构下汇编语言的完整编译器。

项目整体流程:词法、语法分析->中间代码生成->目标代码生成->寄存器分配->代码优化

Lexer and Parser

一个现代的编译器,总是从词法分析器(lexer)和语法分析器(Parser)开始。如今,词法分析和语法分析技术已经相当成熟,有许多现成的工具可以帮助我们自动生成词法分析器和语法分析器。这里我们选用Antlr作为编译器前端生成的工具。

Write a g4 file

我们需要为SysY2022语法编写词法和语法的g4文件,例如(节选)

SysYLexer.g4:

1
2
3
4
5
6
7
8
9
10
IDENT : (LETTER | '_') (LETTER | DIGIT | '_')* ;

fragment
DECIMAL_CONST : '0' | [1-9] [0-9]*;

fragment
OCTAL_CONST : '0' [0-7]+;

fragment
HEX_CONST : ('0x' | '0X') (DIGIT | [a-fA-F])+ ;
阅读全文 »

基本语句

  1. switch语句要有default分支,除非switch的条件变量是枚举类型
  2. if-else if类型的条件判断,最后应包含一个else分支
  3. 不能用浮点数作为循环变量

类的使用

覆写时要加上@override注解

原因:

  • 如果覆写时因为疏忽,导致子类方法的参数同父类不一致,编译时会报错,使问题在编译期就被发现。
  • 如果父类修改了方法的定义造成子类不再覆写父类方法,也能使问题在编译期尽早被发现。

未使用@override注解可能难以发现的错误:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class Vehicle {
void run() {
System.out.println("Vehicle is running");
}
}

// 子类编写方法覆写父类方法
void rum() { // 方法名不正确
System.out.println("the Car is running");
}

void run(String name) { // 方法参数不正确
System.out.println(name + "drives the Car is running");
}
阅读全文 »

操作系统实验lab3

本实验为南京大学软件学院操作系统课程第三次实验,本文是实验完成后的回顾总结,也可作为本实验的指南。

实验要求

nasm + bochs平台上完成一个接受键盘输入,回显到屏幕上的程序

功能要求

基本功能

  1. 从屏幕左上角开始,以白色显示键盘输入的字符。可以输入并显示 a-z,A-Z

0-9 字符。

  1. 大小写切换包括 Shift 组合键以及大写锁定两种方式。大写锁定后再用 Shift组合键将会输入小写字母

  2. 支持回车键换行

  3. 支持用退格键删除输入内容

  4. 支持空格键Tab 键(4 个空格,可以被统一的删除)

  5. 每隔 20 秒左右, 清空屏幕。输入的字符重新从屏幕左上角开始显示。

  6. 要求有光标显示, 闪烁与否均可, 但⼀定要跟随输入字符的位置变化。

  7. 不要求支持屏幕滚动翻页,但输入字符数不应有上限。

  8. 不要求支持方向键移动光标。

阅读全文 »

写在前面

在靠近底层方面的编程,C语言具有Java、Python都不具有的优势——直接操作内存。即使这样,仍然有一些操作需要“汇编代码”的帮助,例如对具体寄存器的操作,实现指令的原子性等。因此,C和汇编的混合编程在实际程序中很重要(也成为了C语言项目移植的难题)。

参考文章

arm 嵌入汇编 - 知乎 (zhihu.com)包含起来即可,对应的汇编指令就会被执行。)

(34条消息) 原子操作与 x86 上的 lock 指令前缀_x86 lock前缀_zacklin的博客-CSDN博客

6. 并发控制基础 (jyywiki.cn)

C语言嵌入汇编代码

asm代码

在C语言中嵌入汇编代码由gcc编译器实现,gcc提供了asm__asm__关键字,asm__asm__的别名。最简单的使用方法:

1
asm("mov r1, r2")

上面的代码实现了将寄存器r2的值复制给寄存器r1

然而,寄存器r1, r2可能已经被使用,我们需要更安全、更有意义地使用汇编语言。

阅读全文 »

写在前面

2023年3月26日,软件学院科协赛事部在EL大赛策划会议后举行了第二次内训。本次内训如愿线下举行,内容轻松愉快,讲述了如何将二进制运用到程序设计之中。算是一次成功的MINI内训。

回顾位运算

符号 描述 运算规则
& 两个位都为1时,结果才为1
两个位都为0时,结果才为0
^ 异或 两个位相同为0,相异为1
~ 取反 0变1,1变0
<< 左移 各二进位全部左移若干位,高位丢弃,低位补0
>> 右移 各二进位全部右移若干位
阅读全文 »

2022年10月30日,软件学院科协赛事部向新成员们举办了第一次内训。在本次内训中,我作为分享人向科协赛事部的成员分享“举办算法比赛”相关的知识和技术,提高成员对算法比赛的兴趣,让成员熟悉云服务器的基本操作。

遗憾的是,由于疫情影响,本次内训活动线上进行。(感觉自己语速还是太快了,前几页PPT因为直播问题卡住了迟迟没有发现,TAT)

活动流程

第一阶段——关于“如何举办一场算法比赛”的分享

  1. 介绍常见的算法比赛机制

    image-20221118095921835

    image-20221118095945775

  2. 介绍如何评测代码

    image-20221118095747533

    阅读全文 »

HTML+CSS Notes

HTML基础

Web标准

构成 语言 说明
结构 HTML 页面元素和内容
表现 CSS 页面元素的外观和位置等页面样式(如:颜色、大小等)
行为 JavaScript 网页模型的定义和页面交互

HTML骨架

1
2
3
4
5
6
7
8
9
10
11
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>网页标题</title>
</head>

<body>
<p>段落</p>
</body>
</html>

在VScode中,输入!并按键盘上的Tab可快速生成Html的骨架代码。


HTML基本语法

注释

  • 浏览器执行代码时会忽略所有的注释

  • Vscode中快捷键:Ctrl + /

1
<!-- 这是一段注释 -->
阅读全文 »

神经网络基本原理

得分函数

$
f(x;W)=Wx=\begin{pmatrix}W_{1}&W_{2}&… &W_{n}\\\end{pmatrix}\begin{pmatrix}x_{1}\\x_{2}\\ … \\x_{n}\end{pmatrix}=\sum^{n}_{i=1}{W_{i}x_{i}}
$

$
f(x;W)=Wx=\begin{pmatrix}W_{11}&W_{12}&… &W_{1n}\\W_{21}&W_{22}&… &W_{2n}\end{pmatrix}\begin{pmatrix}x_{1}\\x_{2}\\ … \\x_{n}\end{pmatrix}=\begin{pmatrix}Y_{1}\\Y_{2}\end{pmatrix}
$

结果的行数表示类别数,x向量表示训练数据,W为权重参数

线性函数:$f(x;W)=Wx+b(偏置参数矩阵)$

如何根据$\begin{pmatrix}Y_{1}\\Y_{2}\\ … \\Y_{m}\end{pmatrix}$求得对应类别的概率?归一化

$P(Y=k|X=x_{i})=\frac{e^{s_{k}}}{\sum_{j}{e^{s_{j}}}}$

总结:先求指数,再求所占分数

阅读全文 »