Flutter 中的状态管理

状态管理是 Flutter 中一个非常火热的话题。随着应用程序规模的逐渐扩大,业务逻辑也随之变得复杂,比如在用户登陆后,应用各个页面的状态都需要得到及时的更新。传统的 UI 和业务逻辑纠缠在一起的做法,使得代码变得复杂冗余,也为各种潜在 bug 埋下了伏笔。因此将状态和业务逻辑分离,统一地对状态进行管理,使得编程实现和应用结构都更加清晰简明。在 Flutter 的官方文档中也对状态管理进行了讨论,列举了 Flutter 中几种常见的状态管理的框架。 继续阅读“Flutter 中的状态管理”

Flutter 开发初探

Flutter 开发初探

Flutter 是谷歌推出的新一代跨平台开发框架,一经推出就凭借媲美原生的性能、广泛的第三方库的支持、良好的跨平台能力等特性,受到了众多开发者的关注,其火热程度甚至超过了之前由 Facebook 推出的 React Native。在过去的两周内,我对 Flutter 进行了学习,了解了一些基础知识,并将我之前做的一个简单的 App 用 Flutter 进行了重写。下面就谈谈我在重写这个简单 App 时的过程及感受。 继续阅读“Flutter 开发初探”

Aspects 源码分析

Aspects是一个用于实现面向切片编程(AOP, Aspect-oriented programming )思想的第三方库。面向切片编程,指的是在运行时,动态地将代码切入到类的指定方法、指定位置上,从而得到改变方法的实现的目的。由于 Objective-C 本身是一门非常动态的语言,因此 AOP 在 Objective-C 这门语言中很容易利用 Runtime 进行实现。 继续阅读“Aspects 源码分析”

EasyTuple 源代码分析

EasyTuple是由美团开源的一个第三方库,它给Objective-C 添加了元组的能力,可以将几个对象包裹在一个对象中,这样我们就可以从一个函数中返回多个值。它的使用非常简单,比如我们想创建一个由两个元素组成的元组,那么可以这样写:

如果使用 Xcode 辅助编辑器查看预编译后的代码,那么上面的例子在预编译后,会被展开为

可以看到原来的宏的写法会自动被转换成 Objective-C 中的类的创建语法了,那么这个转换过程是怎样发生的呢?下面让我们一步步地去分析这个转换的过程。 继续阅读“EasyTuple 源代码分析”

一张图搞定 HTTP2

在看完了《HTTP2基础教程》后,一直想写篇文章来总结下 HTTP2的特性和用法,但是我又不想把书上的内容往博客上照搬一遍,因此迟迟没有动笔。正好看到这么一个 PPT,是谷歌的一位 Web性能优化专家Ilya Grigorik 所做的分享,该 PPT 把 HTTP2的性能、特点等都介绍了一下,内容非常详实具体。我把这个 PPT 做成了一个拼图,贴在了这里(右键图片在新标签页中打开,可以看到更加清晰的大图哦):

LeetCode上几道和字符串有关的动态规划问题

Word Break

题意

给出一个字符串s和一个词典,判断字符串s是否可以被空格切分成一个或多个出现在字典中的单词。 给出

s = “leetcode”,dict = [“leet”,”code”],返回 true 因为“leetcode”可以被空格切分成“leet code”

思路

凡是和字符串有关的题,在应用动态规划方法时主要有两种思路:

  • dp[i][j]表示子串s[i,j]满足某一要求
  • dp[i]表示子串s[0,i]满足某一要求

继续阅读“LeetCode上几道和字符串有关的动态规划问题”

LeetCode上几道经典的回溯法题目

把相同类型的题目放在一起总结,可以便于整理思路,理解异同。下面是LeetCode上几道比较经典的可以使用回溯法来解决的题目,也是笔试面试时常考常问的。

在找实习时我就被问了两次Subsets这道题。因此熟练掌握这几道题,面试时遇到类似的题目即使是不能一下子写出正确的代码,至少也能按照正确的思路去思考。 继续阅读“LeetCode上几道经典的回溯法题目”

LeetCode 上几道经典的排列组合题

LeetCode 上有几道题都和排列组合有关,非常经典,值得放在一起总结一下。这几道题分别是:

  • Permutations。给定一组各不相同的数字,求这些数字的所有排列。
  • Permutations II。给定一组数字,这些数字中可能有重复的,求这些数字的所有不重复的排列。
  • Next Permutation。给定一组数字的全排列中的一个排列,求这个排列的下一个排列。
  • Permutation Sequence。给定一组数字和一个数字 K,求这组数字的全排列中,按照字典序顺序排序的第 K 个排列。

继续阅读“LeetCode 上几道经典的排列组合题”

shared_ptr 的实现

智能指针

shared_ptr 是C++11后引入的智能指针。智能指针的出现大大简化了C++程序员进行内存管理的逻辑,同时也避免了低级C++程序员可能写出的各种bug。陈硕老师在《Linux多线程服务器端编程》中总结道:

C++里可能出现的内存问题大致有这么几个:
1. 缓冲区溢出。
2. 空悬指针/悬挂指针
3. 重复释放
4. 内存泄漏
5. 不配对的new[]/delete
6. 内存碎片

正确使用智能指针能很轻易地解决前面5个问题。

shared_ptr 是智能指针中比较典型的一个。下面我们将从源代码的角度来进行分析,看看它是怎么实现的。源代码可以从GNU 处进行下载。 继续阅读“shared_ptr 的实现”