0%

2018年 ARTS 周周享 (31)

Algorithm

两个数据的交集

给定两个数组,写一个方法来计算它们的交集。

例如:
给定 nums1 = [1, 2, 2, 1], nums2 = [2, 2], 返回 [2, 2].

1
2
3
4
5
6
7
8
9
10
11
12
13
func intersect(nums1 []int, nums2 []int) []int {
result := []int {};
for i := 0; i < len(nums1); i++ {
for j := 0; j < len(nums2); j++ {
if nums1[i] == nums2[j] {
result = append(result, nums1[i])
nums2 = append(nums2[0:j], nums2[j+1:]...)
break
}
}
}
return result
}

就这么简单, 不过确实巩固了切片的用法.

Review

Simple TDD in Laravel with 11 steps is read in this week.
The link https://medium.com/@jsdecena/simple-tdd-in-laravel-with-11-steps-c475f8b1b214

Note: This is TDD for API responses.

It has 11 steps for you, and tell you how to use TDD in Laravel.

Show it.

Step 1: PREPARE LARAVEL TEST SUITE

First, update your phpunit.xml with add code:

1
2
3
4
<env name="DB_CONNECTION" value="sqlite"/>
<env name="DB_DATABASE" value=":memory:"/>
<env name="API_DEBUG" value="false"/>
<ini name="memory_limit" value="512M" />

It means you need sqlite and we use in-memory, it more fast.

Make sure your TestCase.php if prep for it.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34

<?php
namespace Tests;
use Illuminate\Foundation\Testing\DatabaseMigrations;
use Illuminate\Foundation\Testing\DatabaseTransactions;
use Illuminate\Foundation\Testing\TestCase as BaseTestCase;
use Faker\Factory as Faker;
/**
* Class TestCase
* @package Tests
* @runTestsInSeparateProcesses
* @preserveGlobalState disabled
*/
abstract class TestCase extends BaseTestCase
{
use CreatesApplication, DatabaseMigrations, DatabaseTransactions;
protected $faker;
/**
* Set up the test
*/
public function setUp()
{
parent::setUp();
$this->faker = Faker::create();
}
/**
* Reset the migrations
*/
public function tearDown()
{
$this->artisan('migrate:reset');
parent::tearDown();
}
}

STEP 2: WRITE YOUR ACTUAL TEST

STEP 3: CREATE THE URL IN THE ROUTE FILE

STEP 4: DEBUG YOUR CONTROLLER

STEP 5: VALIDATE YOUR INPUTS

STEP 6: RETURN THE CREATED ARTICLE

STEP 7: CREATE THE ARTICLE CLASS

STEP 8: RUN PHPUNIT AGAIN TO SEE WHAT IS GOING ON

STEP 9: CREATE THE DATABASE TABLE

STEP 10: RUN THE PHPUNIT AGAIN

STEP 11: RUN PHPUNIT AND HOPE FOR THE BEST

Tip

其实也不算是 Tip 吧, 就是今天发现维基百科虽然有中文和英文不同的版本, 但是相同的内容, 中英文不同的版本, 内容差距真的是好大的说.

来看下实例

测试驱动开发

Test-driven development

论学好英语的重要性

Share

极限编程

极限编程的主要目标在于降低因需求变更而带来的成本。在传统系统开发方法中,系统需求是在项目开发的开始阶段就确定下来,并在之后的开发过程中保持不变的。这意味着项目开发进入到之后的阶段时出现的需求变更(而这样的需求变更在一些发展极快的领域中是不可避免的)将导致开发成本急速增加。

极限编程透过引入基本价值、原则、方法等概念来达到降低变更成本的目的。一个应用了极限编程方法的系统开发项目在应对需求变更时将显得更为灵活。

极限编程方法的基本特征是:

  • 增量和反复式的开发 - 一次小的改进跟着一个小的改进。
  • 反复性,通常是自动重复的单元测试,回归测试。参见JUnit。
  • 结对程序设计
  • 在程序设计团队中的用户交互(在场的客户)
  • 软件重构
  • 共享的代码所有权
  • 简单
  • 反馈
  • 用隐喻来组织系统
  • 可以忍受的速度

目前还是无法探讨极限编程的具体意义. (算是在这儿埋个坑吧!)