颜林林的“左耳听风ARTS”打卡记录

ARTS第十八周(2020年1月20日~26日)

2020-01-21

Algorithm

LeetCode

题库链接:https://leetcode-cn.com/problemset/all/
我的刷题:https://github.com/yanlinlin82/leetcode/

编号 难度 题目 我的解答 执行用时 内存消耗 排名
76 困难 最小覆盖子串 200121-2.cpp 32 ms 9.9 MB 63.18%
77 中等 组合 200121-1,cpp 28 ms 11.5 MB 98.02%
78 中等 子集 200121-1,cpp 4 ms 15.1 MB 96.99%
79 中等 单词搜索 200121-1,cpp 32 ms 11.1 MB 72.65%
80 中等 删除排序数组中的重复项 II 200121-1,cpp 12 ms 8.9 MB 93.37%
81 中等 搜索旋转排序数组 II 200122-1.cpp 8 ms 9.1 MB 69.29%
82 中等 删除排序链表中的重复元素 II 200122-1.cpp 12 ms 9.1 MB 61.70%
83 简单 删除排序链表中的重复元素 200122-1.cpp 12 ms 9.2 MB 90.06%

Review

1. 关于C++中的对象

文章链接:Objects, Their Lifetimes and pointers

这篇文章指出了,C++语言中的对象,与wikipedia和其他面向对象语言中所定义的对象,是有区别的。这些区别来自于C++语言本身的发展历史,对于系统底层的支持,诸如不同内存分配方式、内置类型与自定义类的区别等。其重点在于:

  1. C++类的成员(变量)和类型并不是对象;
  2. 应避免运行时改变某个对象的类型;
  3. 一定要注意对象的生存期,在生存期以外进行使用一定要非常小心。

2. 在C++中实现弱类型

文章链接:std::polymorphic_value + Duck Typing = Type Erasure

这篇文章介绍了“类型消除(Type Erasure)”的实现方法,通过使用智能指针,将自定义类型封装得表现得与内置类型一样,并且避免类型强制转换时造成内存块截断,再配合“鸭子类型(Duck Typing)”,从而在C++这样的强类型语言中,实现了弱类型。

Tip

1. 防止误操作重启服务器

通过配置别名,实现在执行shutdownreboot命令时进行警告:

1
2
alias reboot="echo 'Are you sure?' If so, run /sbin/reboot"
alias shutdown="echo 'Are you sure?' If so, run /sbin/shutdown"

参考:nixCraft: Protects Linux machines from accidental shutdowns/reboots with molly-guard

2. 在Linux下查找Windows OEM验证码

购买笔记本电脑时,预装有Windows。一旦安装Linux后,想要找回该预装Windows的验证码,就可以用如下命令:

1
sudo strings /sys/firmware/acpi/tables/MSDM

参考:nixCraft: Linux find Windows 10 OEM product key command

Share

1. 关于软件测试的趋势预测

文章链接:2020年即将到来的软件测试趋势

这篇文章从多个方面对软件测试做了简单的当前进展描述和未来预测,包括:

  • 人工智能和机器学习的应用
  • 移动应用的自动化测试
  • 物联网测试
  • 自动化API测试
  • 集成各种工具

2. C++20标准相关

3. 关于浮点数精度问题

计算机科学中,浮点数的存储及其精度问题,一直是一个难点,若理解不足,则在实际应用中遇到问题时,往往会感到诧异甚至无助。前些天在微信群里听到有人提及Javascript中“0.1 + 0.2 不等于 0.3”的问题,其实这个问题普遍存在于几乎所有的计算机语言。后来在网上看到了如下文章:

文章链接:JavaScript 浮点数之迷:0.1 + 0.2 为什么不等于 0.3?

为了精确表示浮点数(这里特指有理数,即可以表示成为两个整数相除形式的数),我用C++写了一个有理数类rational-number,用于进一步研究特定精度下浮点数存储中的误差。

4. 常用Linux命令行操作

文章链接:SegmentFault: 让你的 Linux 命令骚起来

这篇文章简要介绍了grepsedawksortcommuniqtrcatheadtailwcfindtsortteexxdiconv等命令。

其中我不太熟悉的命令有commtsort,前者可用于集合运算,后者可用于拓扑排序。