深拷贝链表,python 处理音频信号和数字信号、vim 教程、swift 单元测试和 UI 测试 John 易筋 ARTS 打卡 Week 21
1. Algorithm: 每周至少做一个 LeetCode 的算法题
笔者的文章:
算法:深拷贝链表,其中链表有个随机指向的指针Copy List with Random Pointer
题目
138. Copy List with Random Pointer
A linked list is given such that each node contains an additional random pointer which could point to any node in the list or null.
Return a deep copy of the list.
The Linked List is represented in the input/output as a list of n nodes. Each node is represented as a pair of [val, random_index] where:
val: an integer representing Node.val
random_index: the index of the node (range from 0 to n-1) where random pointer points to, or null if it does not point to any node.
Example 1:
Example 2:
Example 3:
Example 4:
Explanation: Given linked list is empty (null pointer), so return null.
Constraints:
-10000 <= Node.val <= 10000
Node.random is null or pointing to a node in the linked list.
The number of nodes will not exceed 1000.
思路分析
next,random都需要指向对象,那么就需要一个字典,key为对象,value为深拷贝的新对象。两次循环即可:
第一次循环组装字典,
第二次循环设置next,random。
返回结果为dict[head]
解法一:手动复制链表到字典里面
解法二:用系统方法先深拷贝整个链表
2. Review: 阅读并点评至少一篇英文技术文章
PySDR: A Guide to SDR and DSP using Python
https://pysdr.org/content/intro.html
这是一篇介绍python处理音频信号和数字信号的简短教程。说的是如果不想看1000页的教程,用这个教程入门是比较方便的。
Software-Defined Radio (SDR):
A radio that uses software to perform signal-processing tasks that were traditionally performed by hardware
Digital Signal Processing (DSP):
The digital processing of signals, in our case RF signals
3. Tips: 学习至少一个技术技巧
笔者的文章:
说明
Vim是Mac随附的免费且功能强大的文本编辑器。在本教程中,我将向您展示此文本编辑器的基础知识。
Pycharm 开启vim编辑器后,tab功能不起作用,其实是用>
来缩进。
打开文件
您可以像任何命令行编辑器一样在Vim中打开文件。
如果要编辑的文件是life.md,请在“终端”窗口中键入:
Vim将在该终端中打开并加载该文件。Vim是终端程序,而不是图形系统程序。
Vim模式的基础
Vim有四种模式:Normal,Insert,Visual和Command。每种模式都在程序状态栏的左下方显示其名称。
当您启动Vim时,它处于正常模式。您可以使用所有命令键来浏览文件并开始编辑。当您退出任何其他模式时,Vim会返回到普通模式。
Vim使用a,A,i,I,o和O命令处于插入模式。进入插入模式后,编辑器将保持该模式,直到您按Esc键。每按一次其他键将直接插入文件中当前光标所在的位置。
当您在正常模式下使用v,V和Ctrl-v命令时,就会出现可视模式。在可视模式下,您可以选择文本。当您使用导航命令时,从可视模式的开始到退出可视模式的区域是选定的文本。
在正常模式下,只要使用:命令,就会进入命令模式。在命令模式下,您可以执行复杂的编辑功能,文件操作或外壳程序操作。命令模式是唯一一种在状态行上不显示任何内容的模式,但是输入的命令将放置在状态行下,并键入任何其他内容和光标。
保存文件并关闭Vim
在正常模式下,您可以键入ZZ保存所有内容并退出。您也可以使用:w!保存文件。。的:将你置于命令模式中,w ^将写入文件,以及!强制操作写没有问题。或者,您可以键入:wq或:wq!。该q退出编辑器。您也可以使用:q!退出而不保存。
基本光标运动
在普通模式下,您可以在文件中四处移动并对文件进行特定的编辑。该^ h键将光标移动到左边。该升键将光标移动到右侧。所述Ĵ键将光标向下移动一行,而ķ键将光标上移一行。要移至下一个单词,请使用w命令。上一个单词命令是b。
如果要一次移动多个空格,单词或行,请先键入数字,然后再输入方向键。光标将沿该方向移动该次数。例如,如果键入10j,光标将向下移动10行。
通过使用命令模式,您可以将行号切换为绝对或相对:
绝对编号模式是正常的:每行按顺序具有唯一编号。
相对编号模式显示当前编辑行以外的行数。
要使用绝对行编号,可以使用:set number命令。要不显示行号,请使用:set nonumber命令。
要设置相对编号,请输入:set relativenumber。要将其放回绝对编号,请输入:set norelativenumber。
通过使用:set number和:set relativenumber设置两种模式,Vim将显示当前行以外的所有行的相对编号。当前的编辑行将显示其绝对编号。
通过使用相对编号模式,您可以使用j或k命令快速查看要移动的行数。例如,要移至List所在的行,请按2j。
要移至行首,请使用0(即零)命令。要移至行尾,请使用$命令。的GG命令将所述光标移动到文件的开头,而ģ命令将移动到文件的末尾。
4. Share: 分享一篇有观点和思考的技术文章
笔者写的博客链接
翻译:iOS Swift单元测试 从入门到精通 Unit Test和UI测试 UITest
说明
编写测试并不是魅力十足,但是由于测试可以防止您闪亮的应用程序变成臭虫缠身的垃圾,所以这是必要的。如果您正在阅读本教程,您已经知道应该为代码和UI编写测试,但是可能不知道如何做。
您可能有一个正在运行的应用程序,但是您想测试为扩展该应用程序所做的更改。也许您已经编写了测试,但是不确定它们是否是正确的测试。或者,您已经开始开发新的应用程序,并想随身进行测试。
本教程将向您展示:
如何使用Xcode的Test导航器来测试应用程序的模型和异步方法
如何使用存根和模拟来伪造与库或系统对象的交互
如何测试UI和性能
如何使用代码覆盖率工具
在此过程中,您将掌握测试忍者所使用的一些词汇。
找出要测试的内容
在编写任何测试之前,了解基础知识很重要。您需要测试什么?
如果您的目标是扩展现有应用程序,则应首先为计划更改的任何组件编写测试。
通常,测试应涵盖:
核心功能:模型类和方法及其与控制器的交互
最常见的UI工作流程
边界条件
Bug修复
测试最佳实践
首字母缩写词FIRST描述了有效单元测试的一组简明标准。这些标准是:
Fast快速:测试应该快速进行。
Independent/Isolated独立/隔离:测试不应相互共享状态。
Repeatable可重复:每次运行测试时,您都应获得相同的结果。外部数据提供者或并发问题可能会导致间歇性故障。
Self-validating自验证:测试应完全自动化。输出应该是“通过”或“失败”,而不是依赖于程序员对日志文件的解释。
Timely及时:理想情况下,应该在编写要测试的生产代码之前编写测试(测试驱动开发)。
遵循FIRST原则将使您的测试清晰且有用,而不是成为您应用程序的障碍。
版权声明: 本文为 InfoQ 作者【John(易筋)】的原创文章。
原文链接:【http://xie.infoq.cn/article/3adba469228a9c8550975dbf2】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论