d1 自己对领域设置的理解
背景 前端项目日益复杂,功能多 业务逻辑,数据流,渲染,交互等等功能都是放在一块, 没有经过成熟的设计,杂乱无章,功能多了之后, 改一个小东西要把逻辑从头到尾都动一遍 理解 是一个抽象概念一种思想,只在项目设计阶段存在,就是去划分项目每个模块的职责 核心点 建模,建模是整个ddd最重要的部分 需要去区分一个业务中的各个概念,为不同的概念建立不同类型的模型,并且找到它们之间的关系,通过建模,建立起我们编程的基础工程,后续所有的开发,都是在这些模型的基础上完成的 前端建模核心思想:分层思想(Layered Architecture) 比如一些常见的想法: 定义业务对象 控制数据流 界面渲染 用户交互��染 用户交互 相关概念领域驱动设计(domain-driven-design)是软件代码的结构及语言需要符合业务领域中的习惯用法 领域驱动设计可以将实现对应到持续进化的模型 领域驱动设计的前提是: 把项目的主要重点放在核心领域(core...
d2 业务模块
...
d4 单一功能原则
单一功能原则在面向对象编程领域中,单一功能原则(Single responsibility principle)规定每个类都应该有一个单一的功能,并且该功能应该由这个类完全封装起来。所有它的(这个类的)服务都应该严密的和该功能平行(功能平行,意味着没有依赖)。 这个术语由罗伯特·C·马丁(Robert Cecil Martin)在他的《敏捷软件开发,原则,模式和实践》一书中的一篇名为〈面向对象设计原则〉的文章中给出。 [1]...
vue常见API原理分析
数据绑定 oberserverObject.defineProperty() depdep.notify() watcheruser-watcher render-watcher computed-watcher nextTick nextTick 会在DOM更新完毕之后执行一个回调,确保我们操作的是更新之后的DOM vue用异步队列的方式来控制DOM更新和nextTick回调先后执行microtask因为其高优先级特性,能确保队列中的微任务在一次事件循环前被执行完毕因为兼容性问题,vue不得不做了microtask向macrotask的降级方案 (Promise,MutationObserver,setTimeout) MutationObserver 用于监听DOM修改事件,能够监听到节点的属性,文本内容,子节点等的改动 Event Loop MutationObserver 每次监听到变更的时候会往 microtask 添加一个事件 降级方案 Promise => MutationObserver =>...
面试记录
浏览器多进程+多线程DNS寻址方式,DNS 缓存, dns-prefetch建立 tcp/ip 链接,三次握手,四次挥手,滑动窗口,接收窗口,收发帧的策略,为什么关闭要等待 2MSL,get post 区别,并发限制传输数据,展开计算机网络 5 层/7 层模型,五层:http -> tcp/ip -> ip -> data frames -> 物理介质服务器收到请求,负载均衡,tomcat 容器,后端统一拦截过滤展开 http 报文,实体,http 1.0, 1,1 2之间的区别,gzip,长连接/短连接,展开 cookie 及优化,多子域名拆分等展开 https 中 SSL/TLS 链接步骤展开 http 缓存,强缓存,协商缓存,from memory/disk cache等DOM 树的构建过程,bytes -> characters -> tokens -> nodes -> DOMcss rule tree: bytes -> characters ->...
vue2 父子组件的生命周期顺序
加载渲染过程 同步加载父组件 beforeCreate, created, beforMount子组件 beforeCreate, created, beforMount孙子组件 beforeCreate, created, beforMount孙子组件 mounted子组件 mounted父组件 mounted 异步加载父组件 beforeCreate, created, beforMount, mounted子组件 beforeCreate, created, beforMount, mounted 更新过程父组件 beforeUpdate子组件 beforeUpdate子组件 updated父组件 updated 销毁过程父组件 beforeDestroy子组件 beforeDestroy子组件 destroyed父组件 destroyed
JS 普通函数跟箭头函数的区别
箭头函数不会产生this, 会捕捉当前的执行上下文中的this当做自己的this 箭头函数不能做为构造函数 箭头函数不能绑定 arguments call/apply/bind 对箭头函数不起作用 箭头函数没有原型属性 箭头函数不能当作 Generator 函数,不能使用 yield 关键字
JS 常见手撕代码题
这种题目,除了多练,没别的方法 1. 实现一个类似 emiter 的类123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778class EventEmiter { constructor() { this.emiterMap = {} } on(event, callback) { if (this.emiterMap[event]) { this.emiterMap[event].push(callback) } else { this.emiterMap[event] = [callback] } } emit() { let [event,...
JS 执行过程习题
执行过程,就是要理解js的执行上下文 构造函数12345678910111213141516171819202122function Person1(name) { this.name = name;}function Person2(name) { if (name) { this.name = name; }}function Person3(name) { this.name = name || 'jack'; return { name: 'lilei', };}Person1.prototype.name = 'Tom';Person2.prototype.name = 'Tom';Person3.prototype.name = 'Tom';console.log(new Person1().name,...