OS
缓存
1 | cache狭义指的是CPU和RAM主存之间的Cache(利用比较昂贵的SRAM) 而且在内存和硬盘之间也有Cache(磁盘缓存) |
ASCII
1 | ASCII = 美国信息交换标准代码 |
unicode
1 | Unicode=国际码=国际字符和二进制数字的对应关系 |
UTF-8
1 | UTF-8 就是在互联网上使用最广的一种 Unicode 的实现方式。 |
1 | UTF-8 最大的一个特点,就是它是一种变长的编码方式。它可以使用1~4个字节表示一个符号,根据不同的符号而变化字节长度。 |
1 | UTF-8 的编码规则很简单 只有二条: |
URL 编码
1 | URL编码 == 百分号编码 |
网络
HTTP
使用同一个[TCP连接]来发送和接收多个[HTTP请求/应答]
1 | HTTP 1.0 => 如果浏览器支持 keep-alive => 请求头中添加 Connection: Keep-Alive => 服务器收到请求添加 Connection: Keep-Alive => 保持连接 |
1 | HTTP 2.0 不会线头阻塞 同时通过单一的 HTTP/2 连接发起多重的请求-响应消息 |
CGI & WSGI
CGI: 通用网关接口 连接web服务器和应用程序的接口
WSGI: Python的CGI包装
内网 IP 网段
1 | 但是在IPv4地址协议中预留了3个IP地址段,作为私有地址,供组织机构内部使用。 |
http 状态码
1 | 1**(信息类):表示接收到请求并且继续处理 |
四种 POST 编码方式
1 | 服务端通常是根据请求头(headers)中的 Content-Type 字段来获知请求中的消息主体是用何种方式编码 |
1 | 1.application/x-www-form-urlencoded |
DNS污染
1 | DNS污染主要原理: |
补充:绕过DNS后如果遇到了IP封锁仍然会访问失败。
NAT
NAT=网络地址转换(Network Address Translation)
wifi=内网ip->公网ip->请求主机
浏览器
浏览器的5个常驻线程
1 | 浏览器的五个常驻线程: |
OPTIONS方法
区别于GET, POST, DELETE, PUT
1 | 跨域资源共享标准新增了一组 HTTP 首部字段,允许服务器声明哪些源站有权限访问哪些资源。 |
如何减少OPTIONS预检频率? 答案:Access-Control-Max-Age: 86400
输入URL按回车后都发生了什么
1 | -DNS解析 (查询 DNS 浏览器缓存,系统缓存,路由器缓存,IPS服务器缓存,根域名服务器缓存,顶级域名服务器缓存,主域名服务器缓存) -> |
浏览器渲染流程
1 | // T0 |
1 | // T1.0 |
Reflow 和 Repaint
1 | 回流: reflow, 浏览器得知元素产生了对文档树排版有影响的样式变化,对所有受影响的dom节点进行重新排版工作 |
浏览器缓存
1 | 1.通过 Meta 标签控制: |
各大浏览器厂商内核
IE4-9: Trident
IE10+: EdgeHTML
FireFox: Gecko
Opera: Presto
Safari: Webkit
Chrome: Webkit
Tap 与 Click
1 | 触屏网页的 tap 与 click : |
LocalStorage SessionStorage 两页面通信
1 | LocalStorage 同源则 => 可以 |
同源定义
1 | [协议]+[端口]+[域名] 都相同 |
JavaScript
ES6 ES7 ES8
1 | ES6常用新特性: |
throttle & debounce
1 | // throttle 节流 |
ES6的模块化
1 | ES6的模块化的基本规则或特点 |
ES6 import
1 | import 命令会被 JavaScript 引擎静态分析 先于模块内的其他语句执行 |
symbol
1 | Symbol可以在set对象property的时候保证不会发生覆盖 |
Array.prototype.sort
1 | //错误用法 |
JavaScript This
1 | 1.纯粹的函数调用: this === 全局对象 |
Event Loop机制
1 | (1)所有同步任务都在主线程上执行,形成一个执行栈(execution context stack)。 |
macrostasks和microtasks
1 | 除了广义的同步任务和异步任务,我们对任务有更精细的定义: |
1 | setTimeout(() => {console.log(1)}, 0); |
setImmediate
1 | console.log(0); |
原型 与 prototype
1 | function DOG(name){ |
实现简易 Promise
1 | // Promise 是包含 pending fufilled rejected 三种状态的状态机 开发者可以指定未来发生的事件 |
JavaScript内存回收
1.标记清除: 变量离开执行环境就收回
2.引用计数: 简单粗暴 会受循环引用影响//(中虽然JavaScript对象通过标记清除的方式进行垃圾回收,但BOM与DOM对象却是通过引用计数回收垃圾的, 也就是说只要涉及BOM及DOM就会出现循环引用问题)
js的[按值传递]与[按引用传递]
1 |
|
1 | //本质原理 |
typeof 对照表
1 | typeof(undefined); // undefined |
判断是否 Array
1 | let arr = [1, 2, 3] |
判断是否空对象
1 | let obj = {}; |
如何正确遍历对象属性
1 | Object.prototype.c = 1; // 把属性c放在 Object 原型链上 |
箭头函数
1 | 1.箭头函数不会创建自己的this 只会从自己的作用域链的上一层继承this ☆ |
XSS
1 | XSS: 跨站脚本攻击 |
CSRF
1 | CSRF: 跨站请求伪造 |
前端路由原理
1 | hash模式: [hash 改变] + [监听 hashChange] + [route map 执行回调] |
CSS3旋转
1 | -webkit-animation: ani-load 0.2s linear infinite; |
CSS3 transform
1 | transform: rotate(-25deg) translateX(30px); // 这种先rotate的写法 会把整个坐标系先旋转-25°再平移30px 也就是会向斜上方平移 |
box-sizing
1 | <div class="wrap-a"> |
1 | .wrap-a { |
圣杯布局
经典圣杯
1 | <div class="wrap"> |
1 | .wrap { |
Flex圣杯
1 | <div class="container"> |
1 | .container{ |
一线天
中间固定-两端自适应(PC打开移动页面)
1 | <div class="container"> |
1 | #left, #right { |
Flex 一线天
1 | <div class="container"> |
1 | .container { |
绝对居中
经典居中
1 | .container { |
transform居中
1 | .container { |
flex居中
1 | .container { |
flex property
1 | flex: flex-grow flex-shrink flex-basis|auto|initial|inherit; |
jsonp
1 | 为了便于客户端使用数据,逐渐形成了一种非正式传输协议,人们把它称作JSONP。 |
1 | 误解: jQuery Zepto之类的库把Ajax方法和jsonp方法封装在一起是容易产生误解的。 |
多核处理上 node 如何榨干处理器资源?
1 | => 多进程 |
Express 原理
1 | Express 有几个比较重要的概念: 中间件 路由 模版引擎 |
Express 中间件原理
1 | app.use: |
Express 路由原理
1 | router对象的主要作用: |
Express 模板引擎原理
1 | ejs / jade 将数据和模板整合最终生成 html 文件 |
JavaScript 谷歌规范
[1]声明式和表达式规范
结构:应符合[变量-业务逻辑-函数声明]的结构规范
[函数声明式]与[函数表达式]在js解释器预编译阶段存在区别
[函数声明式]函数声明和他的赋值都会被提前
1 |
|
[函数表达式]和变量一样[声明被提前]而[赋值并不被提前]
1 |
|
结构:应符合[变量-业务逻辑-函数声明]的结构规范
[2]注释规范
注释:用醒目多行注释对函数表达式的[参数类型]和[返回值类型]进行注释
1 |
|
Objective-C
iOS中文键盘滚动
解决iOS中文键盘滚动的遮挡问题
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43#import "ViewController.h"
#import <WebKit/WebKit.h>
#import <objc/runtime.h>
@interface ViewController ()
@property(strong,nonatomic) WKWebView *webView;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
_webView = [[WKWebView alloc] initWithFrame:CGRectMake(0, 60, 320, 508)];
_webView.navigationDelegate = self;
_webView.scrollView.bounces= NO;
NSURL *nsurl=[NSURL URLWithString:@"https://XXXXXX..."];
NSURLRequest *nsrequest=[NSURLRequest requestWithURL:nsurl];
[_webView loadRequest:nsrequest];
[self.view addSubview:_webView];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(boardWillShow:) name:UIKeyboardWillShowNotification object:nil];
}
-(void)boardWillShow:(NSNotification *)sender{
//获得键盘的尺寸
CGRect keyBoardRect=[sender.userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue];
_webView.scrollView.contentOffset = CGPointMake(0, keyBoardRect.size.height);
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end
iOS存储区
iOS存储区
1
2
3
4
5
6
7
8
9
10
11Documents/
//使用这个目录来保存用户生成的文件。用户可以通过文件分享功能访问这个目录的内容。因此,这个目录你应该只放一些你希望展示给用户的文件。这个目录的文件会被 iTunes 和 iCloud 备份。
Library/ (后来发现在wkwebview下会有坑)
//使用 Library 子文件夹来存放任何你不想被用户看到的文件。你的app不应该使用这些文件夹来存放用户数据文件。
//除了 Caches 子文件夹,Library 文件夹下的内容会被 iTunes 和 iCloud 备份。
tmp/
//使用这个文件夹来存放在临时文件,系统也可能会在你的 app 不再运行的时候清除这个文件夹。
//这个目录的文件 不会 被 iTunes 和 iCloud 备份。
算法
JavaScript 类似[列表生成式]版本的[快排]
1 | function qsort(arr) { |
JavaScript [空间最优]版本的[快排]
1 | Array.prototype.copy = function() { |
JavaScript 归并排序
1 | function mergeSort(arr){ |
JavaScript 二分查找
1 | function bin (list, target) { |
JavaScript [递归]版本斐波那契
1 | function fib (x) { |
JavaScript [循环+有缓存]版本斐波那契
1 | function fib (x) { |
JavaScript [柯里化]版本斐波那契
1 | function kvcf() { |
0 - 3,999,999 长度为 4,000,000 的数组中出现过多少个字符 ‘1’ ?
1 | 求解: |
框架
Vue
React
Redux reducer 必须是纯函数
1 | reducer 必须是纯函数 必须返回一个新state 不能直接修改老state |
vue 对比 Angular、 React
1 | 1. vue的设计倾向于一个Library | 而Angular倾向于一个Framework |
vue生命周期
1 | beforeCreate => created => beforeMount => mounted => beforeDestroy => destroyed |
vue生命周期 - 数据与Dom节点驱动关系
1 | // <div id="app"> |
vue observer/dep/watcher 以及 nextTick
1 | Observer: 数据的观察者,让数据对象的读写操作都处于自己的监管之下 |
Angular在什么时刻更新视图?
1 | // 主要在执行异步事件时 |
vue key
1 | v-for => 使用就地复用原则 |
vue 异步组件原理
1 | Vue 异步组件只在实际需要渲染组件时 才触发调用工厂函数 |
Cordova / RN 如何通信
1 | // Cordova |
1 | // RN |
Tips
weinre远端调试
1 | 安装 |
1 | 启动 |
safari无痕模式
1 | safari无痕浏览模式 |
强类型 弱类型 静态类型 动态类型
1 | 强类型: 偏向于[不容忍][隐式类型转换] |
设计模式
1 | 1.单体/单例模式: 一个类只能保证有一个实例 例如对象字面量的方式创建一个单例 |
1 | 2.1.观察者模式 |
1 | 3.工厂模式 |
ES Include Has In
1 | '2' in {'2': 2}; // true |
(hybrid)app项目-上线流程
1 | 开发=>开发打包=>开发自测=>测试环境打包=>测试(测试同学直接去下载测试包)=>正式发版本=>更新到渠道 |
nvm
1 | nvm管理node版本 |
package.json版本固化
1.2.2 => 大版本号.次要版本号.小版本号
1
2
3波浪号(tilde)+指定版本:安装时不改变大版本号和次要版本号。
插入号(caret)+指定版本:安装时不改变大版本号。
latest:安装最新版本。
console.log的lazy
1 | 控制台打印的[折叠的][按引用传]的对象,把折叠打开后才拿到折叠起来的值。 |
hybrid-本地xhr
1 | 可以在服务端配跨域access-allow-origin为'null' |
CORS 如何带 Cookie
1 | xhr.withCredentials |
hybird-base64
1 | base64图片为纯本地图片-不需要发网路请求 |
HTML5 废弃的标签
1 | 1.可以使用css代替的标签 |
CSS3 硬件加速
1 | transform => 不会触发 repaint |
CSS 实现 Retina 1px
1 | 1.border-image |
node 如何读取一个 2G 的文件
1 | 一次读取一行 边读边处理边写 |
Git 冲突
1 | <<<<<<< HEAD |
Git 切换到远程分支操作
1 | git checkout -b apple origin/apple |
Git 工作区 暂存区
1 | 工作区 (Working Directory): |
Webpack Cool Plugin
1 | 1.Tree Shaking: 剔除无用 JS 死代码 |
node调试
1 | 移动端调试:直接localhost换成真实ip访问 |