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:   TridentIE10+:   EdgeHTMLFireFox: GeckoOpera:   PrestoSafari:  WebkitChrome:  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访问  |