Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
  • Loading branch information
luzhipeng committed Dec 3, 2019
2 parents d13e678 + c8e39cb commit a1a65d8
Show file tree
Hide file tree
Showing 7 changed files with 488 additions and 39 deletions.
2 changes: 1 addition & 1 deletion docs/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -154,7 +154,7 @@ JavaScript 是前端基础中的基础了, 这里的面试题目层出不穷,
- [作用域与闭包](./topics/js/scope&closures.md)
- [引用和操作符优先级](./topics/js/reference&priority.md)
- [原型和继承](./topics/js/prototype.md)
- [this](./topics/js/this.md)(施工中)
- [this](./topics/js/this.md)
- [执行上下文(EC)](./topics/js/EC.md)(施工中)
- [ES6+](es6+.md)(施工中)

Expand Down
10 changes: 6 additions & 4 deletions docs/daily/2019-08-01.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,13 +17,15 @@ JS中Number是双精度浮点型, 意味着可以表示的范围是2^63次方
JavaScript 的 Number 类型为 IEEE 754 64 位浮点类型。
最近出了 stage3 `BigInt` 任意精度数字类型,已经进入 stage3 规范。

JavaScript 的 Number 类型使用 53 位表示小数位,10 位表示指数位,1 位表示符号位。
因此指数部分最大值为`2^10 = 1024`
因此对于 Number 的范围,应该是 `2^1024`, 也就是`1.7976931348623157e+308`.
JavaScript 的 Number 类型使用 52 位表示小数位,11 位表示指数位,1 位表示符号位。
因此指数部分最大值为`2^11 - 1 = 2047`。当指数部分全部是1的时候,实际上表示的数字是`NaN,Infinite或者-Infinite`


因此最大值为2^1023 * (1 * 2^0 + 1 * 2^-1 + ... + 1 * 2^-52),也就是2^971 * (2^53 - 1),这个值就是javascript能表示的最大数字1.7976931348623157e+308

> 这个数字在计算器中是打印不出来的, 至于原因,大家自己想一下。
其实我们可以稍微估算一下`2 ^ 1024`的值。
这个数字非常接近`2^1024` ,其实我们可以稍微估算一下`2 ^ 1024`的值。

```
log(2^1024) = 1024*log(2) = 1024 * 0.30102999566398114 = 308.2547155599167
Expand Down
27 changes: 27 additions & 0 deletions docs/daily/2019-11-14.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
## 每日一题 - 删除文件是否需要对该文件具有写权限,为什么?

### 信息卡片

- 时间:2019-11-14
- tag:`OS`

### 题目描述

删除文件是否需要对该文件具有写权限,为什么?

### 参考答案

删除文件不需要该文件的写权限,需要文件所在目录的写权限以及执行权限。

因为删除文件修改的该文件父级即其所在目录的内容,所以需要目录的写权限。
同时,删除文件先要进入到目录,进入是目录的一个操作,所以需要该目录的执行操作。

##### bash 验证

```bash
mkdir a && touch a/b #新建a目录,a下有b文件
chmod -w a && rm a/b #去掉a的写权限,尝试去删除a/b,报 rm: a/b: Permission denied,说明删除文件需要文件所在目录有写权限
chmod +w a && chmod -w a/b && rm a/b #恢复a写权限,去掉b写权限,尝试去删除b, 删除成功,说明删除文件不需要写权限
touch b && chmod -x a && rm a/b #去掉a的执行权限 报rm: a/b: Permission denied,说明删除文件需要目录的执行权限

```
94 changes: 94 additions & 0 deletions docs/daily/2019-11-25.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
# 每日一题 - 2019-11-25 - 写一个debounce的装饰器

### 信息卡片

- 时间:2019-11-25
- tag:`编程题`

### 问题描述
实现一个debounce装饰器

### 参考实现

##### 代码实现
```typescript
/**
* 装饰器的debounce
* @param delay
*/
export function debounce(delay: number): Function {
return (
target: Function,
propertyKey: string,
propertyDesciptor: PropertyDescriptor
) => {
const method = propertyDesciptor.value;
let timer = null;
propertyDesciptor.value = (...args) => {
if (timer) {
clearTimeout(timer);
timer = null;
}
timer = setTimeout(() => method(...args), delay);
};
return propertyDesciptor;
};
}
```

##### 单元测试

``` typescript
import { debounce } from './index';

jest.useFakeTimers();

let a: any;
let mockFunc: jest.Mock;
beforeEach(() => {
mockFunc = jest.fn();
class Test {
@debounce(1000)
sayHi() {
mockFunc();
}
}
a = new Test();
});

describe('debounce:', () => {
test('debounced function should be called after the delay time', () => {
a.sayHi();
expect(mockFunc).toHaveBeenCalledTimes(0);
jest.advanceTimersByTime(1000);
expect(mockFunc).toHaveBeenCalledTimes(1);
});

test('debounced function should not be called before the delay time', () => {
a.sayHi();
expect(mockFunc).toHaveBeenCalledTimes(0);
let count = 100;
while (count--) {
a.sayHi();
}
expect(mockFunc).toHaveBeenCalledTimes(0);

count = 100;
while (count--) {
jest.advanceTimersByTime(999);
a.sayHi();
}
expect(mockFunc).toHaveBeenCalledTimes(0);
});
});
```

执行结果
![](assets/2019-11-25 - 写一个debounce的装饰器-unit-test.png)


### 扩展

- 写一个throttle的装饰器


62 changes: 28 additions & 34 deletions docs/daily/README.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
## 每日一题
每日一题是在交流群(包括微信和qq)里进行的一种活动,大家一起

每日一题是在交流群(包括微信和 qq)里进行的一种活动,大家一起
解一道题,这样讨论问题更加集中,会得到更多的反馈。而且
这些题目可以被记录下来,日后会进行筛选添加到仓库的《编程题》模块。

## 综合认领区

这里你可以看到所有的每日一题的状态信息。地址: https://github.com/azl397985856/fe-interview/projects/1

如果想要认领“未认领”的题目,请参考下方的认领步骤。
Expand All @@ -12,38 +14,50 @@

1. 首先到领取区查看有哪些待领取的,传送门https://github.com/azl397985856/fe-interview/projects/1
2. 选择一个你感兴趣的
3. 然后到对应issue下留言“认领”
3. 然后到对应 issue 下留言“认领”
4. 这个时候我会把你领取的从”待领取”移动到”进行中”,并把你分配为解决者
5. 开始整理,关于格式可以参考:https://github.com/azl397985856/fe-interview/pull/6/files
6. 整理完成你可以提一个pr
6. 整理完成你可以提一个 pr
7. 我合并之后会将其从”进行中”移动到”已合并”
8. 你会成为项目的”贡献者”

注意:

题目描述以及优秀答案可以从issue的讨论中收集
题目描述以及优秀答案可以从 issue 的讨论中收集

### 历史汇总

#### [以下关于Javascript执行引擎描述正确的是](./2019-09-24.md)
#### [写一个 debounce 的装饰器](./2019-11-25.md)

tag: `编程题`

时间: 2019-11-25

#### [删除文件是否需要对该文件具有写权限,为什么](./2019-11-14.md)

tag: `OS`

时间: 2019-11-14

#### [以下关于 Javascript 执行引擎描述正确的是](./2019-09-24.md)

tag:`阿里前端校招笔试`

时间:2019-09-24

#### [【编程题】实现高阶函数combinedFetcher](./2019-09-02.md)
#### [【编程题】实现高阶函数 combinedFetcher](./2019-09-02.md)

tag:`编程题`

时间:2019-09-02

#### [实现querySelector](./2019-09-11.md)
#### [实现 querySelector](./2019-09-11.md)

tag:`编程题` `造轮子`

时间:2019-09-11

#### [如何令a ==1 && a== 2 && a==3 返回true](./2019-08-26.md)
#### [如何令 a ==1 && a== 2 && a==3 返回 true](./2019-08-26.md)

tag:`开放问题` `值比较`

Expand All @@ -55,19 +69,19 @@ tag:`位运算` `开放问题` `数学`

时间:2019-08-23

#### [100 * 100 的 Canvas 占内存多大](https://mp.weixin.qq.com/s/EGgsMBjGCG8l9JViYxvX3g)
#### [100 \* 100 的 Canvas 占内存多大](https://mp.weixin.qq.com/s/EGgsMBjGCG8l9JViYxvX3g)

tag:`图像` `开放问题`

时间:2019-08-21

#### [实现一个简单的移动端debug工具](./2019-08-14.md)
#### [实现一个简单的移动端 debug 工具](./2019-08-14.md)

tag:`开放问题` `设计`

时间:2019-08-14

#### [数值0的正负判断](./2019-08-13.md)
#### [数值 0 的正负判断](./2019-08-13.md)

tag: `Number`

Expand Down Expand Up @@ -109,15 +123,15 @@ tag: `非对称加密` `加密算法`

时间: 2019-07-29

#### [页面注入50万个li怎么做提升性能](./2019-07-26.md)
#### [页面注入 50 万个 li 怎么做提升性能](./2019-07-26.md)

tag: `性能优化` `开放问题`

时间: 2019-07-26

#### [以下四个promise有什么不同](./2019-07-25.md)
#### [以下四个 promise 有什么不同](./2019-07-25.md)

tag: `ES6 ` `Promise`
tag: `ES6` `Promise`

时间: 2019-07-25

Expand All @@ -126,23 +140,3 @@ tag: `ES6 ` `Promise`
tag: `Array`

时间: 2019-07-22




















Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading

0 comments on commit a1a65d8

Please sign in to comment.