ARTS_Week_One

ARTS_Week_One

This is my first ARTS,It is hard for me to complete it,but i will try my best to do it in the future.

1.Algorithm

Question:

给你一个仅包含小写英文字母和 '?' 字符的字符串 s,请你将所有的 '?' 转换为若干小写字母,使最终的字符串不包含任何 连续重复 的字符。
注意:你 不能 修改非 '?' 字符。
题目测试用例保证 除 '?' 字符 之外,不存在连续重复的字符。
在完成所有转换(可能无需转换)后返回最终的字符串。如果有多个解决方案,请返回其中任何一个。可以证明,在给定的约束条件下,答案总是存在的。

Example:

输入:s = "?zs"
输出:"azs"
解释:该示例共有 25 种解决方案,从 "azs" 到 "yzs" 都是符合题目要求的。只有 "z" 是无效的修改,因为字符串 "zzs" 中有连续重复的两个 'z' 。

My Solution in C#:

 public string ModifyString(string s)
        {
            if (string.IsNullOrEmpty(s))
            {
                return "";
            }
            char[] chars = s.ToCharArray();
            for (int i = 0; i < chars.Length; i++)
            {
                if (chars[i] == '?')
                {
                    char ahead = i == 0 ? ' ': chars[i - 1];
                    char behind = i == chars.Length - 1 ? ' ' : chars[i + 1];
                    char temp = 'a';
                    while (temp == ahead || temp == behind)
                    {
                        temp++;
                    }
                    chars[i] = temp; 
                }
            }
            return new string(chars);
        }
///测试用例:
 [TestClass()]
    public class MyClassTests
    {
        MyClass myclass ;

        [TestInitialize]
        public void Initialize()
        {
            myclass = new MyClass();          
        }

        [TestMethod()]
        public void ModifyStringTest()
        {
            string result = myclass.ModifyString("w?r");         
            Assert.AreEqual(result,"war");          
        }
    }

2.Review

​ I read this article about “Unit testing best practices with .NET Core and .NET Standard”, The origin url is:https://docs.microsoft.com/en-us/dotnet/core/testing/unit-testing-best-practices,you can also read this Article:https://www.kiltandcode.com/2019/06/16/best-practices-for-writing-unit-tests-in-csharp-for-bulletproof-code/

​ There are numerous benefits to writing unit tests; they help with regression, provide documentation, and facilitate good design. However, hard to read and brittle unit tests can wreak havoc on your code base. This article describes some best practices regarding unit test design for your .NET Core and .NET Standard projects.

Characteristics of a good unit test

  • Fast. It is not uncommon for mature projects to have thousands of unit tests. Unit tests should take very little time to run. Milliseconds.
  • Isolated. Unit tests are standalone, can be run in isolation, and have no dependencies on any outside factors such as a file system or database.
  • Repeatable. Running a unit test should be consistent with its results, that is, it always returns the same result if you do not change anything in between runs.
  • Self-Checking. The test should be able to automatically detect if it passed or failed without any human interaction.
  • Timely. A unit test should not take a disproportionately long time to write compared to the code being tested. If you find testing the code taking a large amount of time compared to writing the code, consider a design that is more testable.

3.Tips

oracle中误删数据如何恢复:

在实际工作中,我们经常会遇到误删数据的情况,比如:

  • 在生产中运行测试脚本
  • 将where子句错误地删除

数据库的备份还原是一个漫长的过程。幸运的是,Oracle可以帮助我们快速从许多错误中恢复(无备份)

我们将研究在以下情况下如何消除损害:

那就让我们开始吧。

如何恢复整个表

在这里,我们需要恢复所有数据。使用闪回表,您可以将整个表恢复到较早的状态。我们需要做的就是运行:

flashback table <table> to timestamp <when it was good>;   
eg:flashback table DICT_CONFIG_test to timestamp sysdate -5/(60*24); 
先决条件:需要开启改表行移动权限,并且当前用户需要有该表的增、删、改权限
alter table DICT_CONFIG_test enable row movement;
如果没有此权限会报错:
ORA-08189: cannot flashback the table because row movement is not enabled

如何恢复几行

那么,如果需要还原的行数很少,该怎么办?显然,闪回表是过大的。您需要更细微的东西。

输入闪回查询。这使您可以查看过去某个时间点的表内容。为此,您只需在表后面添加“ as of”子句。

要在给定时间查看它,请使用“截止日期”。例如,要查看一小时前的外观,请使用:

select * from <table> as of timestamp systimestamp - interval '1' hour;

或者,您可以将数据库SCN用于:

select * from <table> as of scn 1234567;

挽救已删除的行

如果您知道删除了哪些行,请在SQL中添加适当的where子句。然后将其结果传递给插入。例如:

insert into table
  select * from <table> as of timestamp sysdate – interval '1' hour
  where <conditions to find the rows>;

然后您将丢失丢失的数据!

如果不确定哪些行已消失,可以使用减号找到已删除的行。这使您可以比较表的当前状态在灾难发生之前的外观。SQL查找一个小时前在表中的行,但现在不再是:

select * from <table> as of timestamp sysdate – interval '1' hour
minus 
select * from <table>;

要恢复这些,请插入此查询的结果!

insert into <table> 
  select * from <table> as of timestamp sysdate – interval '1' hour
  minus 
  select * from <table>;

请注意,这将包括过去一个小时删除的所有行。如果有真正的删除,则需要再次删除它们。

恢复覆盖的值

如果没有删除行,而是更新了行怎么办?您需要还原原始值,但不知道它们是什么吗?

然后,您也可以在更新中使用闪回查询:

update <table> cur
set (col1, col2, col3) = (
  select col1, col2, col3 from <table> 
    as of timestamp systimestamp – interval '1' hour old
  where cur.primary_key = old.primary_key
)
where <rows to update>;

这是太棒了。但是闪回查询有两个限制:

  • Oracle仅确保您可以查询回溯到“ undo_retention”参数的值。
  • Oracle无法跨多种形式的DDL查询。因此,如果您更改表的结构,闪回查询很有可能会失败。

默认情况下,撤消保留时间为900秒。只有15分钟。除非您很快,否则在繁忙的生产系统中很可能会错过此窗口。

SQL>  show parameter undo_
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
undo_management                      string      AUTO
undo_retention                       integer     900
undo_tablespace                      string      UNDOTBS1

您可以通过增加保留时间来克服这一问题。例如,要将其增加到一天,请运行:

alter system set undo_retention = 86400 scope = both;

在执行此操作之前请多加注意。Oracle使用撤消表空间来运行闪回查询。因此,增加保留意味着您需要将其增大以支持闪回。这可能会导致存储需求的大幅增长。

第二个问题通常是释放后抬起头。如果对表运行了DDL,则很有可能会得到:

ORA-01466: unable to read data - table definition has changed

这真令人沮丧。能够在发布前后比较表是很有用的。特别是出现问题时!如果您可以比较表的前后状态,则可以使诊断变得简单。

还要注意,截断是Oracle中的DDL。因此,如果您使用了这种方法来擦拭桌子,那将是无路可退的!

幸运的是,您可以克服这两个问题。

如何恢复几行

闪回数据存档启动了闪回查询。它通过将更改存储在表中来实现。这意味着您拥有永久性存储,而不是依赖于撤消。

要使用此功能,首先需要创建一个存档。您可以使用以下SQL执行此操作:

create flashback archive <archive> tablespace <tablespace> retention 1 year;

保留条款说明您要保留历史记录多长时间。您可以将其指定为几天,几个月或几年。

归档到位后,只需更改表即可使用它:

alter table <table> flashback archive <archive>;

大功告成!

然后,您可以使用上述相同的方法恢复数据。但是有以下好处:

  • 能够跨DDL查询
  • 有更长的时间来恢复数据

最重要的是,自11.2.0.4起,闪回数据存档是免费的*!

一个警告:启用后,Oracle将创建历史记录表。它在后台进程中执行此操作。因此,此设置可能会失败而不会给您错误。依靠它之前,请确保检查它是否有效!

到目前为止,我们已经研究了恢复行。但是,如果您删除表怎么办?闪回可以帮助吗?

如何恢复删除的表

在10g中,Oracle引入了回收站。就像“收藏夹”操作系统中的回收站一样,您可以恢复放置在此处的对象。

为此,只需运行:

flashback table <table> to before drop; --执行这条语句的话 回收站的数据就没有了 

我们可以使用以下SQL查看回收站的内容:

select * from recyclebin;

要查看已删除的表的名称,请检查original_name。

它仅包含用户拥有的对象。如果您具有适当的权限,则可以查询dba_recyclebin。这使您可以查看所有用户的已删除对象。

回收站中的表仍然占用空间。如果确定要永久删除表,请使用清除选项:

drop table <table> purge;

或者,使用以下命令将其从回收站中删除:

purge table <table>;

如果要恢复回收站正在使用的所有空间,请使用以下命令清除它:

purge recyclebin;

请注意,回收站仅在使用放置表时适用。如果我们采取其他删除表的操作,例如删除用户或删除表空间,它们将永远消失。

如果您要处理单个表,那么这些解决方案都很好。但是,如果发生了更严重的事情该怎么办?如果有人设法运行一个截断级联,将整个数据库清除掉了怎么办?

单独恢复表可能需要一些时间。

如何还原数据库,请参见:https://blogs.oracle.com/sql/how-to-recover-data-without-a-backup

4、Share

​ 学习金字塔是美国缅因州的国家训练实验室研究成果,它用数字形式形象显示了:采用不同的学习方式,学习者在两周以后还能记住内容(平均学习保持率)的多少。它是一种现代学习方式的理论。最早它是由美国学者、著名的学习专家爱德加·戴尔1946年首先发现并提出的。
ARTS_Week_One

从此图中我们可以看出【听讲】【阅读】【视听】这些常见的能带给人快感的学习方式知识留存读最多只有30%,真正有效的学习方式在于【讨论】【实践】【教授给他人】此可掌握知识的90%以上。因此我们要克服DNA中的懒惰,需要更多的参与主动学习的方式来思考成长。

上一篇:电子时钟


下一篇:[2020BUAA软工助教]助教每周小结(week 9)