iOS并发(concurrency)概念浅析

在进行iOS开发过程中,我们常会遇到网络请求、复杂计算、数据存取等比较耗时的操作,如果处理不合理,将对APP的流畅度产生较大影响。除了优化APP架构,并发(concurrency)是一个常用且较好的解决方法,但并发涉及串行、并发、并行、同步、异步、多线程、GCD、NSOperation和NSOperationQueue等诸多容易混淆的概念,为求概念清晰明了,还请茗茶静坐,听我徐徐道来。

线程和任务

线程(thread) 和任务(task)是其他并发概念的基础,因此也是首要需理清的概念,以下是其要点,详细可参考Thread (computing)Task (computing))。

排序算法之Swift实践

当我们站在历史的今天,往过去回顾,总会发现一些在当下习以为常的观念,惊讶在过去竟然没人意识到,比如生产力决定生产关系,比如自由平等,这就是所谓的进步。我生于上世纪九十年代初,年纪尚轻,这些观念的巨大变革,我大多从书上学来的,如果要找一些真正有切身体会的,我想就是当下有点烂大街的用户体验。与过去单纯讲究功能性的时代相比,用户体验绝对是完全颠覆的,它完全变换了产品的核心,给人一种醍醐灌顶的顿悟感,想及此,还是要感谢乔布斯和他的苹果。

算法与用户体验看似没有关系,其实算法是上佳用户体验的基础,因为没有高效的算法,机子会卡。我至今仍是编程小白,为加深对算法的理解,本文尝试用Swift实现大部分常用的排序算法。

经典排序算法

插入排序

//不改变输入数组的状态,返回排序完成的降序数组
func insertionSort(var arr:[Int]) -> [Int] {
    for var i = 1; i < arr.count; i++ {
        let key = arr[i]
        var j = i - 1
        while j >= 0  && arr[j] > key {
            arr[j+1] = arr[j]
            j--
        }
        arr[j+1] = key
    }
    return arr
}

翻转二叉树之Swift实践

Google: 90% of our engineers use the software you wrote(HomeBrew), but you can’t invert a binary tree on a whiteboard so fuck off.

HomeBrew作者,天才程序员Max Howell兴致盎然地去Google面试(估计是刚好路过),结果却因不会在白板上翻转二叉树被Google粗鲁地拒绝了,舆论甚是哗然,其中缘由知乎上也讨论的热火朝天。谁料,始作俑者翻转二叉树这道题目,一时也热地不要不要的。作为程序员小白的我,从未翻过二叉树。最近闲来无事,闲暇之余,想及至此,就顺手用Swift翻转了二叉树。

如果您对二叉树的概念不甚清晰,可以先到维基百科上(不推荐百度百科,因为要养成良好的搜索习惯)再温习温习二叉树相关知识。

二叉树定义

先定义一个二叉树类Tree,主要定义树的三个必要属性,关键值key,左子树leftTree和右子树rightTree

//define Tree class
class Tree {
    var key: Int
    var leftTree: Tree?
    var rightTree: Tree?
    
    init(key: Int) {
        self.key = key
    }
    
}

typealias理解小误区

alias在英语中是别名之意,那typealias,顾名思义,是指类型的别名。Swift的官方文档中对typealias关键词的演示,也是以赋值的形式,给一个现有类型取一个恰当的别名,便于在上下文中使用:

protocol Container {
    typealias ItemType
    //some other things
     …
}

struct IntStack: Container {
    typealias ItemType = Int
     //some other things
    …
}

不可不信缘-2015年度总结

回顾2015,我一直试图告别土木工程,寻找属于我的江湖。

谈及我与土木的相遇,完全是因为高考成绩考砸了的缘故。但相遇即是一种缘分,因此我把这份缘分延续到了现在,可是这是一段不会有结果的旅程。回忆这八年,土木就像是我注定不爱的姑娘,一开始相识并不觉得什么,偶尔牵牵手还有点小愉快,可后来真的在一起了,才发觉一切都那么不自在,每个深夜满心的离开。其实我也不是现在才察觉,只是以前年轻,没有到迫在眉睫非彼即此的境地。现在工作都快整两年了,我也已经25了,我想这是最后的机会,去寻找自己的城。因此,这一年我做了两个大尝试。

一个是创业,一个是学编程。

2014年7月,戴瑞珠宝创业项目正式立项,前前后后累计7个人的小团队,当时干的也是风风火火轰轰烈烈。但后来起起伏伏,坎坷不断,2015年8月7日,我正式退出团队。一年有余的兼职创业,虽然没有期许的结果,却让我深刻的体会到,互联网才是年轻人龙争虎斗的天地,那里有梦想,有远方,有希望。而我所处的建筑行业,已然渐近荒原,很难说得上值得拼搏。我虽非大才,但也不甘沉沦,离开土木工程,跨入心向往之的互联网行业势在必行。只是在互联网行业,我去能干什么呢?八年的土木工程生涯,漫长的浸润,已经快把我体制化了。除了画CAD,似乎我什么都不会。隔行如隔山,此时我方体会至深,我该怎么办呢?

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×