11月 19

golang 1.5.1 和C语言 python 学习对比

  测试算法,计算1到10^7的值,如果正序和倒序相同,则计算该值的2幂。
如果该值的2次幂,正序和倒序相同则打印。

Debian 操作系统上。
gcc version 4.7.2 (Debian 4.7.2-5)
Python 2.7.9
golang1.5.1

硬件部分
Intel(R) Core(TM) i7-4790 CPU @ 3.60GHz

golang优化
1.本来要用自己写幂运算。后来放弃了。
2.将字符串倒序完比较,改为每位比较,有不同则返回。
3.不用fmt打印,运行速度没有变,只是体积小了1M。

C和python没有优化。C使用-O3编译。

C代码部分:

/*
# Date:        2015-11-19
# Author:      simonzhang
# Web:         www.simonzhang.net
# Email:       simon-zzm@163.com
# -------------------------------
*/
#include 
#include 
#include 
#include 

int check(long int num)
{
    char str[8];
    sprintf(str, "%ld", num);
    int len = strlen(str);
    int a = len-1;
    int b = 0;
    for (b ; b

golang代码部分:

/*
# Date:        2015-11-19
# Author:      simonzhang
# Web:         www.simonzhang.net
# Email:       simon-zzm@163.com
# -------------------------------
*/

package main

import (
        "strconv"
)

var all int = 1E7 //1E7 = 10^7 = python 10**7

func check(num int) bool{
    str:=strconv.Itoa(num)
    var str_len int = len(str)
    var a int=str_len-1
    for b:=0; b

py代码部分

# -*- coding:utf-8 -*-
# -------------------------------
# Date:        2015-11-19
# Author:      simonzhang
# Web:         www.simonzhang.net
# Email:       simon-zzm@163.com
# -------------------------------

all=xrange(1,10**7)

def check(num):
    a=list(str(num))
    b=a[::-1]
    if a==b:
        return True
    return False

def main():
    for i in all:
        if check(i):
            if check(i**2):
                print i,i**2


if __name__ == '__main__':
    main()

测试结果:
golang
real 0m0.542s
user 0m0.636s
sys 0m0.044s

C
real 0m0.688s
user 0m0.684s
sys 0m0.000s

python
real 0m6.159s
user 0m6.140s
sys 0m0.012s

结论:python体积最小,开发速度最快,运行速度慢。C体积居中,速度居中,开发难度大。golang体积大,速度快,开发难度居中。
个人还是喜欢C,能学习到最基础的计算机原理。但是golang比C还有快是没有想到的。如可以优化,请告知。

源码

11月 13

debian 增加 swap 区

在var中增加一个2G的区
root@test:~# dd if=/dev/zero of=/var/swap_file bs=1024 count=2048000
2048000+0 records in
2048000+0 records out
2097152000 bytes (2.1 GB) copied, 40.1141 s, 52.3 MB/s
格式化为相应格式
root@test:~# mkswap /var/swap_file
Setting up swapspace version 1, size = 2047996 KiB
no label, UUID=7270b69d-6bc8-4311-bbc9-e78949327c21
加载交换分区
root@test:~# swapon /var/swap_file
如果要长期加载修改/etc/fatab配置,如下
UUID=7270b69d-6bc8-4311-bbc9-e78949327c21 none swap sw 0 0

11月 11

tableview cell加载数据

class choiceView:UIViewController,UITableViewDataSource,UITableViewDelegate{
@IBOutlet weak var userTableView: UITableView!
var refreshControl = UIRefreshControl()
var dataArray:[JSON]=[]

override func viewDidLoad() {
super.viewDidLoad()
self.automaticallyAdjustsScrollViewInsets = false
userTableView.delegate=self
userTableView.dataSource=self
refreshControl.addTarget(self, action: “refreshData”, forControlEvents: UIControlEvents.ValueChanged)
refreshControl.attributedTitle = NSAttributedString(string: “松手刷新新闻”)
userTableView.addSubview(refreshControl)
refreshData()
}

override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}

// 刷新数据
func refreshData() {
netManage.request(.GET,url+”/v1/userstocknew”)
.responseJSON{ get in
let get_data=JSON(get.result.value!)[“stockList”]
self.dataArray=get_data.array!
self.userTableView.reloadData()
self.refreshControl.endRefreshing()
}
}

// UITableViewDataSource
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return dataArray.count;
}

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let ut=UITableViewCell(style: UITableViewCellStyle.Subtitle, reuseIdentifier: “cell”)
let stockData=JSON(self.dataArray)
ut.textLabel?.text=stockData[indexPath.row][“name”].stringValue
let one_data=stockData[indexPath.row][“price”].stringValue+” “+stockData[indexPath.row][“floper”].stringValue
ut.detailTextLabel?.text=one_data
return ut
}

}