不会飞的章鱼

熟能生巧,勤能补拙,静能生慧;念念不忘,必有回响。

题目链接

merge-sorted-array

解题思路

Golang

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
func merge(nums1 []int, m int, nums2 []int, n int)  {
nums := make([]int,n+m) //创建一个混合数组,长度是nums1和nums2的和
//三个变量i,j,k,分别指向nums1,nums2,和混合数组的末尾
for i,j,k := 0,0,0;i < m || j < n;k++ {
if i < m && j < n {
if nums1[i] < nums2[j] {
nums[k] = nums1[i]
i++
} else {
nums[k] = nums2[j]
j++
}
} else if i < m {
nums[k] = nums1[i]
i++
} else {
nums[k] = nums2[j]
j++
}
}
copy(nums1,nums) //把nums的数拷贝到nums1里
}

阅读全文 »

起因

周五在做go test测试时,碰到个问题,我要对一个xxx函数写测试样例,然而它的首字母是小写的,没有导出,单元测试过不去,而这个xxx函数外面还有一个YYY函数首字母是大写的,但要经过很长的逻辑才能到xxx函数。这时我又要完成对xxx函数进行测试,又不想经过YYY函数走逻辑,该怎么办呢?

实现过程

首先,绝对不能做的事:

  • xxx函数改为首字母大写的Xxx函数
    原因:很多地方都在调这个函数,你改了这一处只满足你这次的测试,那其他基本业务流程也就崩了。
阅读全文 »

起因

周五在做go test测试时,碰到个问题,我要对一个xxx函数写测试样例,然而它的首字母是小写的,没有导出,单元测试过不去,而这个xxx函数外面还有一个YYY函数首字母是大写的,但要经过很长的逻辑才能到xxx函数。这时我又要完成对xxx函数进行测试,又不想经过YYY函数走逻辑,该怎么办呢?

实现过程

首先,绝对不能做的事:

  • xxx函数改为首字母大写的Xxx函数
    原因:很多地方都在调这个函数,你改了这一处只满足你这次的测试,那其他基本业务流程也就崩了。
阅读全文 »

起因

本地代码推送到远程仓库地址时,有时地址会发生变更,所以需要更改,git命令如下

命令

查看远程仓库地址

git remote -v

阅读全文 »

核心

  • 01:面对问题时,用思考框架问问自己,现状、目标和路径。
    1
    2
    3
    Where are we?(我们现在在哪?)
    Where are we going?(我们要到哪儿去?)
    How can we get there?(我们如何到达那里?)
  • 02:遇到事情,倒着想。
  • 03:在做任何事之前,先定义完成的标准。
  • 04:在做任何需求或任务之前,先定好验收标准。
  • 05:尽早提交代码去集成。
  • 06:默认所有需求都不做,直到弄清楚为什么要做这件事。
  • 07:扩大自己工作的上下文,别把自己局限在一个“程序员”的角色上。
  • 08:在动手做一件事之前,先推演一番。
  • 09:问一下自己,我的工作是不是可以用数字衡量。
  • 10:设计你的迭代0清单,给自己的项目做体检。
  • 11:动手做一个工作之前,请先对它进行任务分解。
  • 12:多写单元测试。
  • 13:我们应该编写可测的代码。
  • 14:将任务拆小,越小越好。
  • 15:按照完整实现一个需求的顺序去安排分解出来的任务。
  • 16:要想写好测试,就要写简单的测试。
  • 17:想要管理好需求,先把需求拆小。
  • 18:尽量做最重要的事。
  • 19:做好产品开发,最可行的方式是采用 MVP(最小可行产品)。
  • 20:通过沟通反馈,不断升级自己的编解码能力。
  • 21:用业务的语言写代码。
  • 22:多面对面沟通,少开会。
    1
    2
    3
    我昨天做了什么?  
    我今天打算做什么?
    我在过程中遇到了什么问题,需要请求帮助。
  • 23:多尝试用可视化的方式进行沟通。
  • 24:做好持续集成的关键在于,快速反馈。
  • 25:定期复盘,找准问题根因,不断改善。
  • 26:多走近用户。
  • 27:事情往前做,有问题尽早暴露。
  • 28:多输出,让知识更有结构。
  • 29:请谨慎地将工作自动化。
  • 30:将你的工作过程自动化。
  • 31:有体系地学习运维知识。
  • 32:将部署纳入开发的考量。
  • 33:将验收测试自动化。
  • 34:把函数写短。
  • 35:构建好你的领域模型。
    1
    2
    3
    4
    5
    6
    7
    万维钢有期节目里提到芯片设计时讲到了分层以及模型的概念。分层或模型,实质是因为人的认知能力有
    限不得已而为之的。学习计算机,我们都知道晶体管,即便早就忘了它的原理。实际上晶体管涉及非常深
    奥的物理学知识,这是绝大多数人一辈子都不需要了解的物理学。抛开复杂艰深的物理学,晶体管的本质
    却很简单,它就是一个包含通和不通两个状态的开关,这就是它构建的模型。
    在开关的模型基础之上,信息论的创立者香农用一篇硕士论文构建了逻辑门这层。他证明了可以用最简单
    的开关,实现所有逻辑运算。
    逻辑运算层次之上,就是我们所知道的CPU模型。再往上,就是我们所熟悉的信息世界
  • 36:用简单技术解决问题,直到问题变复杂。
    1
    2
    3
    4
    一方面,有人会因为对业务量级理解不足,盲目低估其他人系统的复杂度;另一方面,也有人会盲目应用技
    术,给系统引入不必要的复杂度,让自己陷入泥潭。
    作为拥有技术能力的程序员,我们都非常在意个人技术能力的提升,但却对在什么样情形下,什么样的技术
    更加适用考虑得不够。采用恰当的技术,解决当前的问题,是每个程序员都应该仔细考虑的问题。
  • 37:学习领域驱动设计。
  • 38:了解一个项目,从大图景开始。
  • 39:小步改造遗留系统,不要回到老路上。
    1
    2
    3
    4
    构建测试防护网,保证新老模块功能一致;
    分成小块,逐步替换;
    构建好领域模型;
    寻找行业中关于系统构建的最新理解。
  • 40:在学习区工作和成长。
    1
    2
    3
    4
    5
    从目前的发展来看,IT 行业依然是一个非常有前景的行业,但想在这条路上走好,需要我们成为 “T ”型
    人才,也就是“一专多能”。一专多能的前提是“一专”,让自己成为某个方面的专家。这个专家要放在行
    业的标准去看,这才能降低因为一个公司的波动而造成的影响。
    成为行业专家,要向行业的大师学习,给自己定下一个高的目标,然后是脚踏实地,找适合自己的问题去解
    决,让自己一直在学习区成长。

答疑解惑

单元测试做不好,是否会影响到 CI 的效果?

1
2
CI 作为一个单独的实践,本身是很简单的,但它可以成为提纲挈领的主线,帮助团队不断改善自己
的开发过程。
阅读全文 »

题目

905. Sort Array By Parity

解析

  • Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Solution(object):
def sortArrayByParity(self, A):
"""
:type A: List[int]
:rtype: List[int]
"""
i, j = 0, len(A) - 1
while i < j:
if A[i] % 2 > A[j] % 2:
A[i], A[j] = A[j], A[i] #互换

if A[i] % 2 == 0: i += 1
if A[j] % 2 == 1: j -= 1

return A
阅读全文 »

问题描述

有一个仓库A,我经过fork后变成了仓库B,当仓库A已经有了新提交时,我需要更新仓库B,该怎么办呢?

解决

1,首先,检查一下当前的配置,看看当前有没有已经设置了上游,这要使用git remote -v命令。

2,将原repository设置为自己fork出的repository的上游(upstream)。运用如下的命令:

阅读全文 »