本文主要是介绍ARTS-for-week4-20181109,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
每周完成一个ARTS:
每周至少做一个 leetcode 的算法题、阅读并点评至少一篇英文技术文章、学习至少一个技术技巧、分享一篇有观点和思考的技术文章。(也就是 Algorithm、Review、Tip、Share 简称ARTS)
第四周了,哇咔咔。时间过得好快^_^
由于微信不支持添加外链,所以大家访问有链接的地方直接滑到文章最底部点击阅读原文就可以访问了^_^
一
Algorithm
LeetCode 344. Reverse String
【题意】
Write a function that takes a string as input and returns the string reversed.
Example 1:
|
|
Example 2:
|
|
【思路】比较简单的一道字符串处理题。
方法 1 双向循环,首尾字符交换,时间复杂度为o(n/2)。
方法 2 直接使用StringBuffer类的reverse()方法。
方法 3 异或运算满足交换律。
【参考代码】
|
|
|
|
|
|
二
Review
How to think like a programmer — lessons in problem solving
如何像程序员一样思考 - 解决问题的经验教训
这篇 medium 的文章,我认真的阅读了一遍,读完感觉很有启发,觉得有必要分享给大家。
这篇文章介绍了如何把编程思想和我们日常生活互相结合起来。
总体的观点就是告诉我们,如何拥有向程序员一样,遇到问题划分问题,通过解决子问题,合并子问题之后,然后解决大问题的思维方式。
文章一开始用通俗的语言展示了一个常见的现象,那就是我们大部分人遇到一个问题之后,经常采取的一种解决方式(作者认为这是一种不好的解决方式)。
首先尝试一种解决问题的方法。
如果当前方法不奏效,换一种方法。
如果还不能奏效,那么重复步骤 2,直到问题解决。
通过把我们之前习惯解决问题的方式记录下来,你在回头看看,有时候可能运气好。换几种方法可能就把问题解决了,但是作者却认为这是解决问题的最糟糕方式!这是一个巨大的,浪费时间的一种解决问题的方式。作者认为最好的方法包括:a)建立一个框架,b)实践它。
具体来说
a)
Understand
充分理解你当前要解决的问题。就好比我们开发软件之前我们必须先要了解需求。如果你不能向别人通俗易懂的解释你的问题,只能说明其实你还没有充分理解你的问题。b)
Plan
先不要急着去解决问题,先计划你的解决方案。 让你的大脑有时间分析问题并处理信息。 为了得到一个好的计划,你可以先自己回答一个问题:“给定输入X,返回输出Y所需的步骤是什么?c)
Divide
注意, 这是最重要的一步。不要试图解决一个大问题。相反,更好的方式是将其分解为子问题。 这些子问题更容易解决。 然后,逐个解决每个子问题。 一旦解决了每个子问题,再把每个子问题串起来,大问题也就解决了。d)
Stuck
如果被困住了,甚至无法解决一个子问题时该怎么办呢?不要着急,首先,深吸一口气。第二,在心里给自己说这是太正常不过的事情。那么我们可以尝试从下面三个步骤去实施:
Debug
调试:一步步去调试,逐步完成我们的解决方案,试图找到出错的地方。
Release
重新评估:退后一步。从最初的问题出发,从另一个角度看问题。思考一下是否有任何东西可以抽象为更一般的方法?
Search
搜索:谷歌一下。不管我们遇到什么问题,很有可能别人早就遇到过类似了并且得到了解决。参考一下别人的解决方案,通过慢慢摸索才能一步步更深刻的理解(事实上你可以从其他人的解决方案中学到很多东西)。
三
Tip
sar(System Activity Reporter系统活动情况报告)是目前 Linux 上最为全面的系统性能分析工具之一,可以从多方面对系统的活动进行报告,包括:文件的读写情况、系统调用的使用情况、磁盘I/O、CPU效率、内存使用状况、进程活动及IPC有关的活动等。
总结一些常用的 命令用法
sar options -A -o file t n
其中:
t为采样间隔,n为采样次数,默认值是1;
-o file表示将命令结果以二进制格式存放在文件中,file 是文件名。
options 为命令行选项,sar命令常用选项如下:
-A:所有报告的总和
-u:输出CPU使用情况的统计信息
-v:输出inode、文件和其他内核表的统计信息
-d:输出每一个块设备的活动信息
-r:输出内存和交换空间的统计信息
-b:显示I/O和传送速率的统计信息
-a:文件读写情况
-c:输出进程统计信息,每秒创建的进程数
-R:输出内存页面的统计信息
-y:终端设备活动情况
-w:输出系统交换活动信息
四
Share
压缩算法的解释(英文)
压缩是最常用的功能之一,压缩算法一般分成两大类:基于熵的压缩和基于字典的压缩。本文简单解释这两类算法的原理,以及将它们合在一起的 deflate 算法。
欢迎关注我的公众号 加贝木苇的理想国
这篇关于ARTS-for-week4-20181109的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!