有时候需要将一个同步的逻辑打断,然后在需要的时候再接着回来执行,就是将一个同步逻辑改成一个lazy的producer。这种功能的解决方案一般是这样:如果是循环,则采用状态机来改写;如果是递归,则采用栈+状态机来改写。无论怎样,都不是最简单的方法,采用协程才是最简单的方法。这也是本文要介绍的co_yield的功能。
举个例子,有一个简单的排序算法,它是用循环实现的:
void Sort(vector& v)
{
for(i...
阅读全文
为一个软件开发者,最大的挑战就是在不断涌现的新技术中进行取舍,持续学习是从事这一行业的必备技能。在这个领域里,技术更新最快地又非前端莫属了。各种框架的出现、版本的更新此起彼伏,呈现出一派欣欣向荣之景。
在项目中必不可少的便是前端,它是系统的门面、是用户对系统最直接的体验,颜值高低也是决定系统好坏的关键,那么作为一名软件开发攻城狮,怎么能放弃这片蓝海呢?没准了解了解前端的世界,就能多一项技...
阅读全文
记得很久以前,还在jQuery统治前端开发的年代,我曾在网上无意中看到一个Canvas落雪效果的动画算法,非常的简单而且高度逼真,以至于多年过去我再也没有能发现任何其他类似动画能实现与之媲美的效果。
2020元旦刚过,趁着工作不忙的间歇,凭着一些对该算法的记忆,我用TypeScript将其重写,并针对兼容性和性能作了些许微调,封装为npm包,可直接应用于任何前端项目,包括Vue,React,Angular等,亦可直接使用script标签...
阅读全文
堆是什么意思
如果有一个关键码的集合K={k0,k1,k2,.......kn-1},把他所有元素按照完全二叉树的顺序存储方式存储在一个一维数组中,并满足:Ki = K2*i+2) i = 0,1,2…,则称为小堆(或大堆)。
小堆的特点是:任意一节点的数值都要大于堆顶的结点数据(孩子结点大于根节点,左右孩子可以不分大小排序)。堆顶元素最小。从根节点到每个结点的路径上数组元素组成的序列是递增的。
大堆的特点是:任意一节点的数据都...
阅读全文
宏(#define)和内联函数(inline)的理解以及区别:
宏的优缺点
优点:
1.加快了代码的运行效率
2.让代码变得更加的通用
缺点:
1.宏没有类型检测,不安全
2.宏是在预处理时进行简单文本替换,并不是简单的参数传递(很难处理一些特定情况。例如:Add(z++))
3.使代码变长
4.宏不能进行调试
5.当预处理搜索#define定义的符号时,字符串常量并不被搜索
内联函数的优缺点
特点:
...
阅读全文
架构设计在现今已经成为软件开发必不可少的环节,而架构学习和架构选型往往是一个困难的“工程”。若有一天我们想要改善现有软件的架构模式,或对架构的选择感到迷茫,我们应该如何找寻方向,选择合适的架构呢?
认清自己的团队规模
选择合适的架构需要认清团队规模的原因在于:
团队规模代表着新技术的学习成本。
团队规模与软件规模有一定关联。
团队规模强调开发效率和软件可维护性的重要性。
如今敏...
阅读全文
构建过程分为项目初始化,路由组件添加,控制器模块添加,模型组件添加和视图组件添加。
构建laravel框架
项目初始化:
首先在服务器的web目录下创建一个lara文件夹,在根目录下创建一个 composer.json文件,内容如下:
{
"require":{
}
}
除过上面的方法以外 还可以 用 composer 初始化,然后运行 composer update 执行成功以后 lara 文件夹下 会自动生成自动加载文件目录如下:
lara
|
...
阅读全文
软件架构设计是个不老的话题,随着业务驱动,技术展现形式随之变化,从当初的“堆”模式开发到后来有点模型的形式(功能分包但无模式),再到后来MVC的出现,结束了“堆”模式,再到后来MVP模式出现,一部分开发者积极尝试,或重构,或运用,得到了很多的认可,后面又出现了双向绑定架构—MVVM,算是继MVP之后的又一经典架构;当然Android官方也推荐了架构:AAC(AndroidArchitectureComponents),后面,还会继续出其他的架构.....
阅读全文
本篇文章我们来讲讲PHP四大框架的优缺点都有哪些,让你们在开发中更好的去选择使用哪款PHP框架去完成项目,废话不多说,我们一起来看看吧!!
ThinkPHP
ThinkPHP(FCS)是一个轻量级的中型框架,是从Java的Struts结构移植过来的中文PHP开发框架。它使用面向对象的开发结构和MVC模式,并且模拟实现了Struts的标签库,各方面都比较人性化,熟悉J2EE的开发人员相对比较容易上手,适合php框架初学者。 ThinkPHP的宗旨是简化...
阅读全文