学习笔记

JavaScript ES6函数式编程(二):柯里化、偏应用、组合、管道

上一篇介绍了闭包和高阶函数,这是函数式编程的基础核心。这一篇来看看高阶函数的实战场景。 首先强调两点: 注意闭包的生成位置,清楚作用域链,知道闭包生成后缓存了哪些变量 高阶函数思想:以变量作用域作为根基,以闭包为工具来实现各种功能 回到顶部 柯里化(curry) 定义:柯里化是把一个多参数函数转换为一个嵌套的一元函数的过程。 先看个简单的例子,这是一个名为 add 的函数:const add = (x, y) => x + y;调用该函数 add(1, 1)、add(1, 2)、add(1, 3)...很普通,缺乏灵活性。 ...

你真的知道并发问题产生的源头吗?

本文从计算机系统层面来讲述在提升性能的过程中,引发的一系列问题。读完本文你将get到并发编程过程中的原子性,可见性,有序性三大问题的来源。 随着硬件发展速度的放缓,摩尔定律已经不在生效,各个硬件似乎已经到了瓶颈;然而随着互联网的普及,网民数量不断增加,对系统的性能带来了巨大的挑战。因此我们要通过各种方式来压榨硬件的性能,从而提高系统的性能进而提升用户体验,提升企业的竞争力。 由于CPU,内存,IO三者之间速度差异,为了提高系统性能,计算机系统对这三者速度进行平衡。 CPU 增加了缓存,以均衡与内存的速度差异; ...

AOP框架Dora.Interception 3.0 [3]: 拦截器设计

对于所有的AOP框架来说,多个拦截器最终会应用到某个方法上。这些拦截器按照指定的顺序构成一个管道,管道的另一端就是针对目标方法的调用。从设计角度来将,拦截器和中间件本质是一样的,那么我们可以按照类似的模式来设计拦截器。 一、InvocationContext 我们为整个拦截器管道定义了一个统一的执行上下文,并将其命名为InvocationContext。如下面的代码片段所示,我们可以利用InvocationContext对象得到方法调用上下文的相关信息,其中包括两个方法(定义在接口和实现类型),目标对象、参数列表(含输入和输出参数)、返回值(可读写)。Properties 属性提供了一个自定义的属性容器,我们可以利用它来存放任意与当前方法调用上下文相关的信息。如果需要调用后续的拦截器或者目标方法(如果当前为最后一个拦截器),我们只需要直接调用ProceedAsync方法即可。 ...

Redis分布式篇

Redis分布式篇 1 为什么 需要 Redis 集群 1.1 为什么需要集群? 1.1.1 性能 ​ Redis 本身的 QPS 已经很高了,但是如果在一些并发量非常高的情况下,性能还是会受到影响。这个时候我们希望有更多的 Redis 服务来完成工作。 1.1.2 扩展 ​ 第二个是出于存储的考虑。因为 Redis 所有的数据都放在内存中,如果数据量大,很容易受到硬件的限制。升级硬件收效和成本比太低,所以我们需要有一种横向扩展的方法 1.1.3 可用性 ​ 第三个是可用性和安全的问题。如果只有一个 Redis 服务,一旦服务宕机,那么所有的客户端都无法访问,会对业务造成很大的影响。另一个,如果硬件发生故障,而单机的数据无法恢复的话,带来的影响也是灾难性的。 ...

小白学 Python(4):变量基础操作

人生苦短,我选Python 引言 前文传送门 小白学 Python(1):开篇 小白学 Python(2):基础数据类型(上) 小白学 Python(3):基础数据类型(下) 前面的文章中,我们介绍了基础数据类型中最常用的数字和字符串,不知道大家还记得什么是变量不?不记得变量也应该记得那被奶茶吧~~~都不记得自己去翻翻前面的文章吧。 变量 在 Python 中使用变量,有一个和 Java 最大的不同是无需先声明,直接在赋值的时候就完成了声明。 如果我们直接使用一个没有赋值的变量,会直接报错。 ...

.NET实时2D渲染入门·动态时钟

 从小以来“坦克大战”、“魂斗罗”等游戏总令我魂牵梦绕。这些游戏的基础就是2D实时渲染,以前没意识,直到后来找到了Direct2D。我的2D实时渲染入门,是从这个动态时钟开始的。...

[UWP]使用CompositionLinearGradientBrush实现渐变画笔并制作动画

1. 什么是 CompositionBrush# CompositionBrush(合成画笔)是操作可视化层时用于绘制 SpriteVisual 区域的画笔。 使UWP 应用时可以选择使用 XAML 画笔或 CompositionBrush(合成画笔) 绘制 UIElement。很多时候XAML画笔和合成画笔都能实现同样的效果,在官方文档 使用 XAML 画笔 vs。CompositionBrush 这一节中有详细的对比介绍。 CompositionBrush性能更好且能做更复杂的动画。XAML Brush的能力是有极限的,我从短暂的UWP生涯当中学到一件事,XAML Brush越是玩弄动画,动画就越可能因为没有料到的事态而失败……除非超越XAML Brush。所以我不做XAML Brush动画啦。 ...

让我们一起揭开算法的神秘面纱

让我们一起揭开算法的神秘面纱 前言 其实我一直想写一篇揭秘算法的文章,因为,据我所见,大多数写算法的软件工程师,其实,就是普通程序员,并非高人一等。 但我一直不知道从何下手,今天姑且尝试着乱写一点。 最唬人的高大上 算法最唬人的东西莫过于公式了。 而公式中最唬人的摸过于∑了;这个符号叫sigma,如下图: 举个例子: 某公司开会讨论项目功能实现,与会人员有:一个项目经理,三个A组成员,三个B组成员和一个算法工程师。 然后,讨论着,讨论着,就遇到了一个争议功能。 A组成员认为该功能应该循环来处理,B组成员认为应该使用递归来处理,双方争议不下。 ...
青岛软件培训

可能你正在寻找一家靠谱的IT培训机构,学习一些专业的软件开发技术,找一份得体的工作。恰巧我们就是一家踏踏实实做教育的IT人才培养机构,我们咨询电话是 0532-85025005,如果你确实对IT感兴趣,我们不妨交流一下。

申请免费试听课程