css溢出机制探究

2018-09-17
阅读 6 分钟
3.8k
在实际开发的过程中,内容溢出是经常见到的。如果不深入了解这个机制,你经常会碰到这样的问题:为什么这个元素没有受到祖先元素的overflow:hidden的影响?这里出现的滚动条是哪个元素的?如何消除这个滚动条?如何在指定的元素上增加滚动功能?在这篇文章,我们将会从CSS标准出发,讨论CSS溢出机制的细节。

防抖和节流的实现

2018-09-06
阅读 5 分钟
2.5k
如果距离上次debounced调用已经过去了waitTime的时间,则说明该轮连续调用已经结束(进入稳定状态)。这个时间点也被称为trailing edge。

JavaScript类型转换原理

2018-09-04
阅读 6 分钟
3.3k
本文修改自本人以前写的文章。 从类型说起 js只有7种类型: 原始类型(primitives types) boolean number 包括Infinity和NaN,你可以通过typeof Infinity;来验证 string null undefined Symbol (ECMAScript 6 新定义,暂时用不上,这篇文章不讨论) Object 类型 js内置了很多对象供你使用,MDN文档列举了所有ES标准定义...

对Flex布局的总结与思考

2018-08-29
阅读 4 分钟
3.6k
一维布局模型(one-dimensional layout model),元素项沿着水平或垂直方向来排列,就像一条沿着一个方向的“流”。与之对应的,CSS Grid Layout是一个二维布局模型。两者互为补充。

【组件复用性】原型的可扩展性与可增强性

2018-08-17
阅读 1 分钟
3.7k
工具组件,本质上来说,是将那些经常重复的代码封装起来,提供一个组件原型,以便复用。高可复用性的一个决定性因素,就是组件不能“写死”,留有配置余地,最终组件的行为应该接受使用者的配置。

【Vue技巧】利用Proxy自动添加响应式属性

2018-08-16
阅读 7 分钟
4.2k
初始化Vue实例时,Vue将递归遍历data对象,通过Object.defineProperty将其中已有的属性转化为响应式的属性(getter/setter)。响应式属性的变化才能够被Vue观察到。这就是为什么,Vue文档建议我们在初始化Vue实例之前,提前初始化data中所有可能用到的属性。如果想要在Vue实例创建以后添加响应式属性,需要使用Vue.set(o...

最优质的学习资源 收录整理

2018-08-06
阅读 1 分钟
5.7k
作为开发者,我们主要通过网络和书籍来学习。在学习的过程中,我发现有一些优质的学习资料是经常用到、经常被人推荐的。这些优质的学习资料繁多而零散,而且还在不断地被挖掘。因此我决定用GitHub来收集和整理最优质的计算机学习资源!本收集目前主要关注前端开发、计算机基础、机器学习的内容。收录的依据主要是:在领...

【算法剖析】Virtual DOM

2018-07-30
阅读 5 分钟
3k
Virtual dom相当于框架API与运行环境之间的中间层,将框架渲染与DOM API进行解耦,增加了跨平台能力。(可以将virtual dom映射为DOM的步骤,改为映射到其他的执行环境,比如安卓、IOS)

用css控制元素高度:自底向上和自顶向下的方法

2018-06-17
阅读 3 分钟
6.2k
在css中,vh是一个特殊的长度单位,100vh的值就是【浏览器内容窗口高度】。因此height:100vh;就使得目标元素拥有【浏览器内容窗口高度】。

【docker】小技巧:在宿主机器上直接查看docker容器的进程

2018-06-10
阅读 2 分钟
19k
容器内的进程,与相对应的宿主进程,由相同的uid、gid拥有。也就是说,如果在容器内主进程属于用户uid=1000,那么这个容器进程在宿主机器上也属于用户uid=1000。容器内的用户uid=1000就是容器外的用户uid=1000,也是其他容器内的用户uid=1000。上面链接的文章介绍了很多这样的例子。

【docker】 bind-mount或者COPY时需要注意 用户、文件权限 的问题

2018-06-09
阅读 3 分钟
11.9k
最近在使用docker的时候经常遇到权限问题。通过这个stackoverflow回答,我明白了问题出现的主要原因:Docker在进行bind mount的时候,或者在进行COPY的时候,会保持文件的权限比特位(比如755)、owner ID(比如1000)、group ID(比如1000)与宿主机器上的来源文件相同。而【docker容器主进程的owner ID】(比如www-dat...

【linux】与 用户、权限 有关的常用命令

2018-06-08
阅读 4 分钟
5.8k
执行id命令以后你会看到返回结果包括gid和groups。关于gid 与groups 的区别:gid只是当前登陆群组, 而groups列出了用户所在的所有群组。用户所在的群组可以有很多,但是在任何一个时刻,一个用户只能登陆一个群组。后面面会介绍newgrp命令,使用它,用户可以切换到其他群组。

【Andrew Ng 机器学习】 cs229-notes1 Equation(3) 的证明

2018-05-19
阅读 3 分钟
5k
在cs229-notes1的第9页给出了以下等式:$$ \nabla_A trABA^TC = CAB + C^TAB^T $$ 后面推导线性回归的正规方程(Normal Equation)的时候,需要用到这个等式。 我在它的证明上纠结了很久,因此在这里写下我的证明,希望对正在纠结这个证明的同学有所帮助。 以下标题是为了(希望)搜索引擎能将一些模糊的公式输入索引到这个...

Angular进阶:View的概念

2018-05-10
阅读 2 分钟
2.9k
在Angular中,只有两种View:Host Views(也叫作Component View)和Embedded View。这点从源码中的isComponentView和isEmbeddedView也能得到证实。

详解REST架构风格

2018-05-08
阅读 11 分钟
8.3k
作为Web开发者,你可能或多或少了解一些REST的知识,甚至已经非常习惯于它,以至于在正式地学习REST的时候,你可能心里会想:“本来就是这样做的啊,不然还能怎么做呢?”确实是这样,REST已经成为Web世界的一种内在架构原则。这主要是因为REST的产生确实与HTTP有着密不可分的联系。REST的提出者Roy Fielding在Web界是一位...

【机器学习】4. 卷积神经网络基础

2018-05-05
阅读 6 分钟
7k
全连接神经网络不太适合图像识别、语音识别这种任务,这种任务的特征是:输入大量数值,且需要识别的事物相对于输入数值来说,非常高层次和抽象。比如人脸(需要识别的事物)相对于像素灰度值(输入数值)来说,非常高层次和抽象;完整语句(需要识别的事物)相对于音调和音量(输入数值)来说,非常高层次和抽象。

【机器学习】3. 神经网络基础

2018-05-02
阅读 4 分钟
5.5k
在神经网络中每个神经元都有相同的结构:每个神经元接受多个输入信号,对输入信号进行线性运算:$$output = wx+b = \sum_i w_i x_i + b$$然后,经过激活函数$f$(一般为非线性函数)处理,再输出。

【机器学习】1. 线性分类和SVM

2018-04-28
阅读 5 分钟
13.2k
线性分类器的原理可以扩展到神经网络甚至是卷积神经网络,因此了解线性分类器是学习后者的基础。线性分类的方法包含2个重要的组成部分:score function和loss function。

【机器学习】2. Softmax分类器

2018-04-28
阅读 6 分钟
29.4k
$$f(x_i; W) = W x_i$$可以看出,它的score function与Multiclass SVM是相同的,毕竟它们都属于“线性分类器”,计算score的公式必定是这种线性的公式。

面试题反思:随机打乱数组顺序(考察随机数的使用)

2018-04-19
阅读 2 分钟
13.1k
前段时间面试碰到一道题,题目主要就是随机打乱一个数组的顺序。乍一听我觉得挺简单的,但是到写代码的时候却有种“无从下手”的感觉,原因在于自己其实之前并没有使用过(也没有仔细思考过)“随机性”。

ts/js归并排序实现(稳定排序)

2018-04-19
阅读 3 分钟
4.8k
稳定排序是指,如果原数组中有多个元素是“相等的”,那么这些元素在排序后数组的相对顺序应该保持不变。比如:我们对{name:string, age:number}[]数组用age进行排序,有很多人是25岁,那么在排序后的数组中,这些25岁的人应该按照它们【在原数组中出现的顺序】来排列。

柯里化的理解和实现

2018-03-27
阅读 2 分钟
1.9k
很多人对于柯里化的理解仅仅停留在“复用参数”上。但我认为函数式编程思想更重要作用的是:解除函数对执行时参数的依赖,增强函数的泛化能力,让函数仅仅包含“纯粹的操作逻辑”,这些操作逻辑要用在什么样的输入上,使用函数时再决定。

Angular源码分析:使用数组来存储节点树、对它进行后序遍历

2018-03-27
阅读 4 分钟
2.6k
虽然DOM是以树的方式来组织,但Angular是以平数组的方式来存储view中各个节点(包括DOM节点,也包括Directive节点、Provider节点等)的。数组中每个节点有一个childCount属性,表示在这个数组项的后面有多少个节点是它的后代。举个例子,下面的平数组

深入理解 Angular 变化检测(change detection)

2018-03-23
阅读 5 分钟
8.4k
Angular Change Detection发生的时机:基本上所有的异步事件发生(并且回调函数已经执行完毕)以后,都需要触发change detection(因为此时进程的状态可能已经发生改变): Events - click, submit, …

算法:一个好理解、不用记忆边界情况的快排(10行)

2018-03-18
阅读 2 分钟
3.3k
思路就是,每次划分(将数组小于等于pivot和大于pivot的元素分开)的时候,用一个慢指针和一个快指针。每当快指针扫描到小于等于pivot的元素,就将这个元素丢到慢指针的位置(同时慢指针增加)。慢指针指向的元素以及其左边的元素,全都是被快指针丢过来的(也就是小于等于pivot的)。

警示后人系列:为什么我没有catch到回调函数中抛出的错误?

2018-03-09
阅读 2 分钟
5.3k
今天犯了一个js中的错误,记录一下警示后人:) 事情是这样,koa会帮我们捕获中间件中抛出的错误,从而不让服务器崩溃,如下图:服务器为此次请求返回500,仍然能够处理后续的请求。 从这一点出发,我就认为,我可以在中间件里面随便throw,这样koa就能在控制台帮我打印出所有错误的信息,反正也不会对后续请求造成影响。 ...

Angular源码剖析:DefaultKeyValueDiffer和DefaultIterableDiffer的变更检测算法

2018-03-05
阅读 13 分钟
4.4k
Angular原生实现了两个工具类:DefaultKeyValueDiffer和DefaultIterableDiffer,它们分别用来检查两个对象或两个数组之间的差别(也就是diff)。典型的使用场景是:检查某个变量在两个时刻之间是否发生了改变、发生了什么样的改变,在这篇文章中,我们称它为变更检测。

Angular 进阶:从源码理解@Input绑定是如何被编译和实现的

2018-03-01
阅读 6 分钟
3.3k
阅读本文需要已经对ngc输出的代码、Angular packages/core源码有所熟悉。这是我搭建的一个直接可以使用的Angular aot demo项目,具体功能和用法可以看README,我认为它对于深入学习Angular源码十分有帮助。本文也使用这个项目开始做实验。

Angular 注入器层次结构

2018-01-29
阅读 2 分钟
2k
官方文档:If you only specify providers at the top level (typically the root AppModule), the tree of injectors appears to be flat. All requests bubble up to the root NgModule injector that you configured with the bootstrapModule method.

Angular Query黑魔法

2018-01-29
阅读 1 分钟
2.1k
更进一步地,通过Query,可以从指定的Element的Injector(View Injector)中获取你想要的服务:在这个例子中,我们想要query的服务就是Component实例。