Hot For Coding

Golang在for循环里修改值

Golang是有指针概念的,想写好这门语言,避免空指针的错误还是要花点功夫的。先看看例子

package main

import (
  "fmt"
)

type Student struct {
  Age int
}

func main() {

  arr := [3]Student{
    {
      Age: 10,
    },
    {
      Age: 15,
    },
    {
      Age: 20,
    },
  }

  for _, v := range arr {
    v.Age = 0
  }

  fmt.Println(arr)

}

...

READ ALL

Golang实现斐波那契

JavaScript,Python和PHP实现的都写过了,今天用Go再来一下

什么是斐波那契

斐波那契数列指的是这样一个数列 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368........
这个数列从第3项开始,每一项都等于前两项之和

代码实现

package main

import (
  "fmt"
)

var (
  v1 = 0
  v2 = 0
)

func fibonacci() int {

  if v1 == 0 {
    v1 = 1
  } else {
    v1, v2 = v1+v2, v1
  }

  return v1
}

func main() {
  for i := 0; i < 10; i++ {
    fmt.Println(fibonacci())
  }
}

...

READ ALL

PHP实现斐波那契

前几天我写了一版JavaScript与Python实现的,今天用PHP实现一下

什么是斐波那契

斐波那契数列指的是这样一个数列 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368........
这个数列从第3项开始,每一项都等于前两项之和

代码实现

<?php

$last1 = 0;
$last2 = 0;

function fibonacci() {
  global $last1, $last2;

  if ($last1 == 0) {
    $last1 = 1;
    $ret = $last1;
  } else if ($last2 == 0) {
    $last2 = 1;
    $ret = $last2;
  } else {
    $tmp = $last1 + $last2;
    $last2 = $last1;
    $last1 = $tmp;
    
    $ret = $tmp;
  }

  return $ret;
}

for ($i = 0; $i < 10; $i++) {
  echo fibonacci()."\n";
}

...

READ ALL

关于图片加载进度

这里说的图片加载进度可能有两种含义:

  • 第一种,单张图片实时加载进度(浏览器实现不了)
  • 第二种,多张图片以数量来模拟加载进度(容易实现)

在网上搜索图片加载进度几乎说的都是第二种含义,而谈及第一种的甚少, 原因就是浏览器实现不了!

第一种的图片实时加载进度目前几乎都是与AS交互实现,因为Flash有读取加载进度的功能并且又能与JavaScript交互。因此这种模式就是在网页中嵌入一个不现实的Flash,然后在加载图片的时候出Flash的实时读取已加载数据功能,然后把数据回传给JavaScript,再去计算出百分比,实时的显示在网页上,从而实现图片加载的实时进度。

...

READ ALL

Python socket.error [Errno 98] Address already in use

今天在写一个Python与HTML5 WebSocket实例,每次重新运行脚本总是提示地址已经存在并且被使用!查询相关文档才知道在socket编程中,当通过客户端向服务器端发送消息,关闭了连接后,这时如果马上再去运行服务器端程序,会提示这个错误:

socket.error: [Errno 98] Address already in use

这是因为在TCP/IP终止连接的四次握手中,当最后的ACK回复发出后,有个2MSL的时间等待,MSL指一个片段在网络中最大的存活时间,这个时间一般是30秒,所以基本上过60秒后就可以重新连接!

为什么要等待2MSL?是因为在最后发出ACK回复后,发送方不能确认ACK是否被另一端正常收到,如果另一端没有收到ACK回复的话,将会在1MSL后再次发送FIN片段。所以说发送方等待2MSL时间,也就是刚好它发ACK回复和对方发送FIN片段的时间,如果此时间内都没有再次收到FIN片段的话,发送方就假设对方已经正常接收到了ACK回复,此时它就会正常关闭连接!

...

READ ALL

MySQL的timestamp自动更新时间

通常表中会有一个Create date创建日期的字段,其它数据库均有默认值的选项。MySQL也有默认值timestamp,但在MySQL中,不仅是插入就算是修改也会更新timestamp的值!

Example

CREATE TABLE categories (
  id INT AUTO_INCREMENT PRIMARY KEY,
  name VARCHAR(255) NOT NULL,
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

记得,要改时区

SET time_zone='+08:00';

...

READ ALL

jQuery自定义插件开发

喜欢使用jQuery的朋友,或许在经过一段时间的使用以后,可能会感觉这个插件少一点了自己想要的某些功能。其实jQuery支持插件开发模式,简单容易!

如以下代码:

// 插件代码开始
(function($) {
  // 插件名称命名
  $.fn.plugin_name = function(){ 
    // 代码处理块
  };
})(jQuery);
// 插件代码结束

使用的时候可以直接

// 调用定义的方法名
$('#id').plugin_name();

我们这里主要以颜色赋值的实例来谈谈插件的具体模式开发!我们首先需要两个方法,一个是color前景颜色设置,一个是bgcolor背景颜色设置。

...

READ ALL

新浪微博加关注按钮IE下不能显示

今天产品给我提一个Bug,称在IE浏览器下微博关注按钮出不来,并且有JavaScript报错

full

其它浏览器均正常,唯独IE下有这个报错,但从图片上的错误信息来看,很难判断是哪出了问题?怎么解决?

当时想,微博不会有一个这么严重的Bug吧?在IE下就不能出现按钮?因此怀疑跟我的页面某块地方有冲突了,于是单独写一个html静态页测试

<html>
  <head>
  </head>
  <body>
    <wb:follow-button uid="2619203540" type="red_1" width="67" height="24" ></wb:follow-button>
    <script src="http://tjs.sjs.sinajs.cn/open/api/js/wb.js?appkey=2844920245" type="text/javascript" charset="utf-8"></script>
  </body>
</html>

...

READ ALL

Python实现斐波那契

昨天我写了一版JavaScript实现的,今天用Python实现一下

什么是斐波那契

斐波那契数列指的是这样一个数列 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368........
这个数列从第3项开始,每一项都等于前两项之和

代码实现

arr = []

def fibonacci():
  i = 0
  l = len(arr)
  if l < 2:
    i = 1
  else:
    i = arr[l - 1] + arr[l - 2]
  arr.append(i)

  return i

for i in range(10):
  print(fibonacci())

...

READ ALL

JavaScript实现斐波那契

什么是斐波那契

斐波那契数列指的是这样一个数列 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368........
这个数列从第3项开始,每一项都等于前两项之和

代码实现

function fibonacci() {
  var list = [];
  return function () {
    var i;
    if (list.length < 2) {
      i = 1;
    } else {
      i = list[list.length - 1] + list[list.length - 2]
    }

    list.push(i);
    return i;
  };
}

var f = fibonacci();
for (var i = 0; i < 10; i++) {
  console.log(f());
}

...

READ ALL