mvvm bug很难被调试,应该如何定位问题?

2014年最新前端开发面试题(题目列表+答案 完整版)p25.doc


前言 本文总结了一些优质的前端面试题(多数源于网络),初学者阅后也要用心钻研其中的原理,重要知识需要系统学习,透彻学习,形成自己的知识链。万不可投机取巧,只求面试过关是错误的! 面试注意点 面试题目: 根据你的等级和职位变化,入门级到专家级:范围↑、深度↑、方向↑。 题目类型: 技术视野、项目细节、理论知识题,算法题,开放性题,案例题。 进行追问: 可以确保问到你开始不懂或面试官开始不懂为止,这样可以大大延展题目的区分度和深度,知道你的实际能力。因为这种关联知识是长时期的学习,绝对不是临时记得住的。 回答问题再棒面试官(可能是你的直接领导面试),会考虑我要不要这个人做我的同事?所以态度很重要。(感觉更像是相亲) 资深的工程师能把absolute和relative弄混,这样的人不要也罢,因为团队需要的你这个人具有可以依靠的才能(靠谱)。(来源程劭非老师 github:@wintercn) ? 前端开发面试知识点大纲 HTML&CSS 对Web标准的理解、浏览器内核差异、兼容性、hack、CSS基本功:布局、盒子模型、选择器优先级及使用、HTML5、CSS3、移动端适应 JavaScript 数据类型、面向对象、继承、闭包、插件、作用域、跨域、原型链、模块化、自定义事件、内存泄漏、事件机制、异步装载回调、模板引擎、Nodejs、JSON、ajax等。 其他 HTTP、安全、正则、优化、重构、响应式、移动端、团队协作、可维护、SEO、UED、架构、职业生涯 必备知识点 作为一名前端工程师,无论工作年头长短都应该必须掌握的知识点:此条由 王子墨 发表在? HYPERLINK 这是什么、怎样完整地执行一次GET请求、怎样检测错误。 严格模式与混杂模式 —— 如何触发这两种模式,区分它们有何意义。 盒模型 —— 外边距、内边距和边框之间的关系,及IE8以下版本的浏览器中的盒模型 块级元素与行内元素 —— 怎么用CSS控制它们、以及如何合理的使用它们 浮动元素——怎么使用它们、它们有什么问题以及怎么解决这些问题。 HTML与XHTML——二者有什么区别,你觉得应该使用哪一个并说出理由。 JSON —— 作用、用途、设计结构。 ? 备注: 根据自己需要选择性阅读,面试题是对理论知识的总结,让自己学会应该如何表达。资料答案不够正确和全面,欢迎补充答案、题目;最好是现在网上没有的。格式不断修改更新中。 ? HTML Doctype作用? 严格模式与混杂模式如何区分?它们有何意义? <!DOCTYPE> 声明位于文档中的最前面,处于 <html> 标签之前。告知浏览器的解析器, 用什么文档类型 规范来解析这个文档 严格模式的排版和 JS 运作模式是 以该浏览器支持的最高标准运行。 在混杂模式中,页面以宽松的向后兼容的方式显示。模拟老式浏览器的行为以防止站点无法工作。 (4)、DOCTYPE不存在或格式不正确会导致文档以混杂模式呈现。 ? 行内元素有哪些?块级元素有哪些? 空(void)元素有那些? CSS规范规定,每个元素都有display属性,确定该元素的类型,每个元素都有默认的display值, 比如div默认display属性值为“block”,成为“块级”元素; span默认display属性值为“inline”,是“行内”元素。 行内元素有:a b span img input select 页面被加载的时,link会同时被加载,而@import引用的CSS会等到页面被加载完再加载; import只在IE5以上才能识别,而link是XHTML标签,无兼容问题; link方式的样式的权重 高于@import的权重. ? 浏览器的内核分别是什么? * IE浏览器的内核Trident、Mozil

    • M:模型model的对象通常非常的简单。根据Apple的文档,model应包括数据和操作数据的业务逻辑。而在实践中,model层往往非常薄,不管怎样,model层的业务逻辑不应被拖入到controller。

    • V:视图view通常是UIKit控件(component,这里根据习惯译为控件)或者编码定义的UIKit控件的集合。View的如何构建(PS:IB或者手写界面)何必让Controller知晓,同时View不应该直接引用model(PS:现实中,你懂的!),并且仅仅通过IBAction事件引用controller。业务逻辑很明显不归入view,视图本身没有任何业务。

    • C:控制器controller。Controller是app的“胶水代码”:协调模型和视图之间的所有交互。控制器负责管理他们所拥有的视图的视图层次结构,还要响应视图的loading、appearing、disappearing等等,同时往往也会充满我们不愿暴露的model的模型逻辑以及不愿暴露给视图的业务逻辑。网络数据的请求及后续处理,本地数据库操作,以及一些带有工具性质辅助方法都加大了Massive

  • 遗失(无处安放)的网络逻辑
    苹果使用的MVC的定义是这么说的:所有的对象都可以被归类为一个model,一个view,或是一个controller。

你可能试着把它放在Model对象里,但是也会很棘手,因为网络调用应该使用异步,这样如果一个网络请求比持有它的model生命周期更长,事情将变的复杂。显然View里面做网络请求那就更格格不入了,因此只剩下Controller了。若这样,这又加剧了Massive View Controller的问题。若不这样,何处才是网络逻辑的家呢?

由于View Controller混合了视图处理逻辑和业务逻辑,分离这些成分的单元测试成了一个艰巨的任务。

一种可以很好地解决Massive View Controller问题的办法就是将 Controller 中的展示逻辑抽取出来,放置到一个专门的地方,而这个地方就是 viewModel 。MVVM衍生于MVC,是对 MVC 的一种演进,它促进了 UI 代码与业务逻辑的分离。它正式规范了视图和控制器紧耦合的性质,并引入新的组件。他们之间的结构关系如下:

  • viewModel 是一个放置用户输入验证逻辑,视图显示逻辑,发起网络请求和其他代码的地方
  • 使用MVVM会轻微的增加代码量,但总体上减少了代码的复杂性
  • MVVM 可以兼容你当下使用的MVC架构。
  • MVVM 增加你的应用的可测试性。
  • MVVM 配合一个绑定机制效果最好(PS:你值得拥有)。
  • viewModel 绝对不能包含视图 view(UIKit.h),不然就跟 view 产生了耦合,不方便复用和测试。
  • viewModel避免过于臃肿,否则重蹈Controller的覆辙,变得难以维护。
  • 可重用性:可以把一些视图逻辑放在一个 viewModel里面,让很多 view 重用这段视图逻辑
  • 独立开发:开发人员可以专注于业务逻辑和数据的开发 viewModel,设计人员可以专注于页面设计
  • 可测试:通常界面是比较难于测试的,而 MVVM 模式可以针对 viewModel来进行测试
  • 数据绑定使得Bug 很难被调试。你看到界面异常了,有可能是你 View 的代码有 Bug,也可能是 Model 的代码有问题。数据绑定使得一个位置的 Bug 被快速传递到别的位置,要定位原始出问题的地方就变得不那么容易了。
  • 对于过大的项目,数据绑定和数据转化需要花费更多的内存(成本)。主要成本在于:
  • 数组内容的转化成本较高:数组里面每项都要转化成Item对象,如果Item对象中还有类似数组,就很头疼。
  • 转化之后的数据在大部分情况是不能直接被展示的,为了能够被展示,还需要第二次转化。
  • 只有在API返回的数据高度标准化时,这些对象原型(Item)的可复用程度才高,否则容易出现类型爆炸,提高维护成本。
  • 调试时通过对象原型查看数据内容不如直接通过NSDictionary/NSArray直观。
  • 同一API的数据被不同View展示时,难以控制数据转化的代码,它们有可能会散落在任何需要的地方。
  • MVC的设计模式也并非是病入膏肓,无药可救的架构,最起码目前MVC设计模式仍旧是iOS开发的主流框架,存在即合理。针对文章所述的弊端,我们依旧有许多可行的方法去避免和解决,从而打造一个轻量级的ViewController

  • MVVMMVC的升级版,完全兼容当前的MVC架构,MVVM虽然促进了UI 代码与业务逻辑的分离,一定程度上减轻了ViewController的臃肿度,但是ViewViewModel之间的数据绑定使得 MVVM变得复杂和难用了,如果我们不能更好的驾驭两者之间的数据绑定,同样会造成Controller 代码过于复杂,代码逻辑不易维护的问题。

  • 一个轻量级的ViewController是基于MVCMVVM模式进行代码职责的分离而打造的。MVC和MVVM有优点也有缺点,但缺点在他们所带来的好处面前时不值一提的。他们的低耦合性,封装性,可测试性,可维护性和多人协作便利大大提高了开法效率。

  • 同时,我们需要保持的是一个拥抱变化的心,以及理性分析的态度。在新技术的面前,不盲从,也不守旧,一切的决策都应该建立在认真分析的基础上,这样才能应对技术的变化。

精选全网 · iOS面试题答案PDF文集
  • 最新 初级iOS 面试题
  • 最新 中级iOS 面试题
  • 最新 高级iOS 面试题
  • 《BAT面试资料全集》
  • 《BAT大厂常问iOS面试题》
  • 《2021年面试真题》
  • 《iOS中级到高级面试题完整版》
  • 字节跳动,京东,小米,腾讯、头条、阿里、美团等公司21年的面试真题
  • 作为一个开发者,有一个学习的氛围跟一个交流圈子特别重要,这是一个我的iOS交流群:,不管你是小白...

  • 设计模式是什么? 你知道哪些设计模式,并简要叙述? 设计模式是一种编码经验,就是用比较成熟的逻辑去处理某一种类型的...

  • 最近有在整理一些基础的东西,也打算准备跳槽,,,所以抽了点时间弄了下 面试题 面试题 有的是网上搜的 有的 找从事...

  • 今天青石的票圈出镜率最高的,莫过于张艺谋的新片终于定档了。 一张满溢着水墨风的海报一次次的出现在票圈里,也就是老谋...

  • 插打法原为少林六合门打法,一代宗师万籁声将少林六合门、罗汉门、自然门等内外家之所长融为一家,自然门本无固定招式,然...

  • 董多娇第226天坚持分享,焦点相信,每个人在每一刻都会为自己做出一个决定与选择,是他们当时认为最合适自己的,所以任...

  • 一、jQuery简介 JQ是JS的一个优秀的库,大型开发必备。在此,我想说的是,JQ里面很多函数使用和JS类似,所...

我要回帖

更多关于 此软件无法运行于被调试状态 的文章

 

随机推荐