EagleBear2002 的博客

这里必须根绝一切犹豫,这里任何怯懦都无济于事

日程安排

时间 项目
7 月 17 日 9:30-11:30 报道
7 月 17 日 14:00-16:30(后延时至 18:00 结束) 机试
7 月 17 日 18:30-20:30(后因机试延时而推迟至 19:00 开始) 笔试
7 月 18 日、19 日 面试
8 月 1 日 优秀营员邮件通知

个人经历

  • rank:本院保研线以内
  • 竞赛:ACM-ICPC 金、CCPC 金等
  • 科研:大三独立进行一项教学创新;大二以来在本院参与过若干项目,无论文产出
  • 奖学金:本院两年高额奖学金,无国奖
  • 学工:助教、朋辈导师等

材料准备

阅读全文 »

TODO: 填坑

文档级 JavaScript

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
var levelCount = [0, 0, 0, 0, 0, 0, 0]; // 用于记录各级标题的计数

function PrintBookmarks(bm, nLevel) {
if (nLevel != 0) { // don't print the root
bmReport.absIndent = bmTab * (nLevel - 1);
bm.execute();

// 添加层级序号,从二级标题开始编号
var title = getNumberedTitle(bm.name, nLevel);

var pageNum = (bm.doc.pageNum + 1).toString();

// 计算标题和页码的字符长度,包括中文字符
var titleLen = countCharacters(title);
var pageNumLen = countCharacters(pageNum);

// var rptnum = Math.floor((totalWidth - titleWidth - pageNumWidth) / measureTextWidth('.'));
var dots = '.'.repeat(50 - titleLen - pageNumLen); // 总宽度为50,减去标题长度和页码长度,计算出点号的个数
bmReport.writeText(title + dots + pageNum, { align: "right" });
// bmReport.vspace(12); // 增大行间距
}
if (bm.children != null)
for (var i = 0; i < bm.children.length; i++)
PrintBookmarks(bm.children[i], nLevel + 1);
}

// 获取层级序号,从二级标题开始编号
function getNumberedTitle(title, nLevel) {
if (nLevel === 1) {
return title;
}

levelCount[nLevel]++; // 当前层级计数增加

// 生成层级序号
var numberedTitle = "";
for (var i = 2; i <= nLevel; i++) {
numberedTitle += levelCount[i] + ".";
}

// 添加标题内容
numberedTitle += " " + title;
return numberedTitle;
}

// 计算字符长度,包括中文字符
function countCharacters(str) {
var count = 0;
for (var i = 0; i < str.length; i++) {
if (str.charCodeAt(i) > 127) {
count += 2; // 中文字符占两个字符长度
} else {
count += 1;
}
}
return count;
}

bmTab = 15; // 调整缩进的距离,使目录更美观
bmReport = new Report();
bmReport.size = 2;
bmReport.writeText(this.title);
bmReport.writeText(" ");
bmReport.size = 1.5;
bmReport.writeText("目录");
bmReport.writeText(" ");
bmReport.size = 1;
PrintBookmarks(this.bookmarkRoot, 0);
global.bmRep = bmReport; // make global

// 使用try-catch块确保目录页的生成不会出错
global.wrtDoc = app.setInterval(
'try {' +
' reportDoc = global.bmRep.open("Listing of Bookmarks");' +
' console.println("Executed Report.open");' +
' app.clearInterval(global.wrtDoc);' +
' delete global.wrtDoc;' +
' console.println("Executed App.clearInterval");' +
' reportDoc.info.title = "Bookmark Listings";' +
' reportDoc.info.Author = "List Bookmark Sequence";' +
'} catch (e) {console.println("Waiting...: " + e);}', 100);

问题背景

在使用 Typora 撰写 markdown 文档时,有时需要将其转换成 pdf 格式以便其他平台阅读或打印。

有些文档文本内容比较稀疏,有大量的图片作为辅助说明,这些文档如果作为单栏打印,页面显得稀疏松散且信息量小。

LaTex 对这一问题的解决方案是分栏,视情况分为 2~3 栏。我们希望仿照 LaTex 对 markdown 文本进行分栏,效果如下:

阅读全文 »

摘要

笔者借助 Windows Defender 在使用移动硬盘时发现某目录打开导致死机,分析后确定目录下的安装包携带蠕虫病毒,并对病毒进行溯源和清除。

发现计算机异常

硬盘无法弹出

下午 15:30 前后,我正在实验室安装机试环境,尝试从移动硬盘(WD-My Passport)中拷贝需要的安装包。我想要结束对硬盘的访问并弹出硬盘时,系统始终提示:

阅读全文 »

问题背景

在整理博客过程中,有时需要把博客当中的图片批量替换成更清晰或文件大小更小的图片,这时原有的图片不会被删除,而是被留在原本的目录下。这样的“未使用的图片”积攒的太多,会拖慢博客部署的速度,也会导致博客仓库占用空间膨胀。

例如:笔者在 技术科普 这一主题下写了一篇文章 技术科普/异体汉字成因及处理.md,则该文章引用的所有图片都被放在与文章同名的 技术科普/异体汉字成因及处理 目录下。这一目录下有 1.png, 2.png, 3.png 等图片,其中我真正使用到的只有 3.png。我希望批量删除 1.png, 2.png 等图片。

本文提供了以上问题的两种解决方案。对于需要一次对若干篇文章清除图片的用户,推荐使用方案二。

解决方案一:利用 Typora 的文件重命名机制

阅读全文 »

党委书记要善于当“班长”

党的委员会有一二十个人,像军队的一个班,书记好比是“班长”。要把这个班带好,的确不容易。目前各中央局、分局都领导很大的地区,担负很繁重的任务。领导工作不仅要决定方针政策,还要制定正确的工作方法,有了正确的方针政策,如果在工作方法上疏忽了,还是要发生问题。党委要完成自己的领导任务,就必须依靠党委这“一班人”,充分发挥他们的作用。书记要当好“班长”,就应该很好地学习和研究。书记、副书记如果不注意向自己的“一班人”作宣传工作和组织工作,不善于处理自己和委员之间的关系,不去研究怎样把会议开好,就很难把这“一班人”指挥好。如果这“一班人”动作不整齐,就休想带领千百万人去作战,去建设。当然,书记和委员之间的关系是少数服从多数,这同班长和战士之间的关系是不一样的。这里不过是一个比方。

要把问题摆到桌面上来

不仅“班长”要这样做,委员也要这样做。不要在背后议论。有了问题就开会,摆到桌面上来讨论,规定它几条,问题就解决了。有问题而不摆到桌面上来,就会长期不得解决,甚至一拖几年。“班长”和委员还要能互相谅解。书记和委员,中央和各中央局,各中央局和区党委之间的谅解、支援和友谊,比什么都重要。这一点过去大家不注意,七次代表大会以来,在这方面大有进步,友好团结关系大大增进了。今后仍然应该不断注意。

“互通情报”

阅读全文 »

约束求解问题

给定一组约束,求:

  • 这组约束是否可满足
  • (可选)如果可满足,给出一组赋值
  • (可选)如果不可满足,给出一个较小的矛盾集 unsatisfiable core

总的来说是不可判定的问题,但存在很多可判定的子问题:

如:

阅读全文 »

摘要

由于线程交错的数量很大,分析多线程程序是困难的。偏序关系可用于建模和分析多线程程序。然而,目前尚无专用的决策过程用于解决偏序约束。在本文中,我们提出了一种新颖的有序一致性理论,用于在顺序一致性下验证多线程程序,并详细阐述了其理论求解器。该求解器实现了增量一致性检查、最小冲突子句生成和专用理论传播,以提高 SMT 求解的效率。我们在可信赖的基准测试上进行了大量实验,结果显示我们的方法显著提升了性能。

作者:清华大学软件学院 贺飞、Zhihang Sun、Hongyu Fan

Introduction

现在的计算系统中普遍使用共享内存多线程程序。并发程序的交错数量使得其在实践中很难进行验证。因此,开发技术来缓解并发程序验证中的执行爆炸问题是非常有意义的。

阅读全文 »

Working together

使用模式的最佳方式之一是让他们走出家门,这样他们就可以与其他模式互动。 你使用模式越多,你就会越多地看到它们一起出现在你的设计中。对于在设计中协同工作的一组模式,可以应用于许多问题,我们有一个特殊的名称:复合模式(Compound Pattern)。没错,我们现在说的是模式的模式!

  • 模式经常一起使用,并结合在同一个设计解决方案中。
  • 复合模式将两个或多个模式组合成解决重复出现或一般问题的解决方案。

Duck reunion

  1. 实现 Quackable 接口
  2. a Goose class:需要被 simulation 使用,使用适配器模式
  3. 使用 adapter
  4. 统计鸭叫的次数(要求不能修改原有的代码):装饰器模式(不改变原本代码,而增加功能,装饰者接口与被装饰者接口一致)
    1. 装饰者两个缺点:设计上的缺点(注意)
    2. 想要封装的更好:工厂模式,抽象工厂(所有的行为要么都被观测,要么不被观察)
      1. 抽象工厂
      2. 抽象产品
    3. Counting Duck Factory
      1. 产品都是装饰者鸭
    4. 三个模式的联用
    5. 不同的鸭群要分开管理,想要在一群鸭子上执行操作:组合模式,只是监听(中介者模式),实现对组合的整体操作,结合迭代器模式
  5. 实时跟踪每一个鸭子的叫的行为:观察者模式
阅读全文 »

本文主要内容来自 SpriCoder的博客,修改了一些翻译错误和笔误,修改了一些表格的样式,添加了 2022 年考题和解答。

软件架构简答题

软件架构介绍

  1. 【2015】【2019】软件架构来自哪里?列举五种可能的软件架构的来源 Where do software architecture come from? List five possible sources of software architecture.
  1. NFRs
  2. ASRs
  3. 质量需求
  4. 涉众,组织
  5. 技术环境
  6. 业务目标
  7. 商业与技术决策组合
阅读全文 »