软件开发工程师是当今社会的热门职业,各大IT企业和非IT企业,都有不同程度的软件工程师的需求。特别是在信息化速度加快的今天,软件开发工程师更是成为了一个高薪的岗位。那么,如何成为一名优秀的软件开发工程师?想要胜任这一高薪职业,我们应该具备什么样的素质呢?
根据调查,想要成为一名优秀的软件开发工程师,就必须具备以下能力:
— 知识储备 —
1
一个良好的态度
·主动
·认真
·负责
2
解决问题的能力
·思路
·自我钻研
·上网搜索
·寻求帮助
3
动手实践
多去阅读别人的代码。一个优秀的作家一定是读过万卷书的,同样,一个优秀的程序员也一定是大量的阅读过别人的代码,github是个好地方。
4
擅于总结
·总结开发问题,思考如何解决,并总结方案。
·总结项目问题,思考如何解决,并总结方案。
5
深入了解原理
对于软件工程师而言,理解需求就可以完成合格的代码,但是对于研发项目的组织和管理者,他们不但要理解客户需求,更多时候还要自行制定一些需求。必须能够掌握不少于两到三种的项目设计方法,并能够根据项目需求和资源搭配来选择合适的设计方法进行项目的整体设计。
6
持续学习
·关注行业动态
·翻看技术文档
7
身体健康、心情舒畅
·作息良好
·睡眠充足
·心情愉悦
— React Native —
React Native 诞生于 2015 年,名副其实的富二代,主要使命是为父出征,与 Apple 和 Google 抗衡,为开发者带去一套跨平台、动态更新的 Javascript 框架,口号是:Learn once, write anywhere:Build mobile apps with React。在试图推翻 Android 和 iOS 压制的同时,还提携了一把自家兄弟:React。
1
React Native
·React Native:基于React开发的App
·优点:跳过App Store审核,远程更新代码,提高迭代频率和效率,既有Native的体验,又保留React的开发效率。
·缺点:对于不熟悉前端开发的人员上手比较慢,不能真正意义上做到跨平台,使用后,对app体积增加。
·要想彻底搞明白,需要了解React Native底层实现原理,又来了,想知道原理,继续往下看。
2
React Native原理
·React Native原理其实跟Weex差不多,底层也会把React转换为原生API
·React Native和Weex区别在于跨平台上面,Weex只要写一套代码,React Native需要iOS,安卓都写,说明React Native底层解析原生API是分开实现的,iOS一套,安卓一套。
3
React Native是如何做到JS和OC交互
·iOS原生API有个JavaScriptCore框架,通过它就能实现JS和OC交互。
·首先写好JSX代码(React框架就是使用JSX语法)
·把JSX代码解析成javaScript代码
·OC读取JS文件
·把javaScript代码读取出来,利用JavaScriptCore执行
·javaScript代码返回一个数组,数组中会描述OC对象,OC对象的属性,OC对象所需要执行的方法,这样就能让这个对象设置属性,并且调用方法。
4
React NativeUI控件渲染流程(iOS)
·[RCTRootView runApplication:bridge] -> 通知JS运行App
·[RCTBatchedBridge _processResponse:json error:error] ->处理执行完JS代码(runApplication)返回的相应,包含需要添加多少子控件的信息。
·[RCTBatchedBridge batchDidComplete] ->批量桥架对象调用批量处理完成方法
·[RCTUIManager batchDidComplete] -> RCTUIManager调用批量处理完成的方法,就会开始去加载rootView的子控件。
·[RCTUIManager createView:viewName:rootTag:props] -> 通过JS执行OC代码,让UI管理者创建子控件View ,通过RCT_EXPORT_METHOD宏定义createView这个方法
·RCT_EXPORT_METHOD宏:会在JS中生成对应的OC方法,这样JS就能直接调用
·注意每创建一个UIView,就会创建一RCTShadowView,与UIView一一对应
·RCTShadowView:保存对应UIView的布局和子控件,管理UIView的加载
·[RCTUIManager _layoutAndMount] -> 布局RCTRootView和增加子控件
·[RCTUIManager setChildren:reactTags:] -> 给RCTRootView对应的RCTRootShadowView设置子控件
·[RCTRootShadowView insertReactSubview:view atIndex:index++] -> 遍历子控件数组,给RCTRootShadowView插入所有子控件
·[RCTShadowViewprocessUpdatedProperties:parentProperties:] -> 处理保存在RCTShadowView中属性,就会去布局RCTShadowView对应UIView的所有子控件
·[RCTView didUpdateReactSubviews] -> 给原生View添加子控件
·完成UI渲染
5
React Native事件处理流程(iOS)
·在创建RCTRootContentView的时候,内部会创建RCTTouchHandler
RCTTouchHandler:继承UIGestureRecognizer,也就是它就是一个手势,它会作为RCTRootContentView的手势,这样点击RCTRootContentView,就会触发RCTTouchHandler,RCTTouchHandler:内部实现了touchBegin等触摸方法,用来处理触摸事件。
·在创建RCTTouchHandler的时候,内部会创建RCTEventDispatcher
RCTEventDispatcher:用来把事件处理传递给JS的方法处理,也就是当UI界面产生事件,就会执行JS的代码处理。
·通过RCTRootContentView截获点击事
产生事件就会去触犯RCTRootContentView中的RCTTouchHandler对象。
·当产生事件的时候,会执行[RCTTouchHandler touchBegin]
·RCTTouchHandler的touch方法,会执行[RCTTouchHandler _updateAndDispatchTouches:eventName:]
内部会创建RCTTouchEvent事件对象
·[RCTEventDispatcher sendEvent:event] -> 让事件分发对象调用发送事件对象
内部会把事件保存到_eventQueue(事件队列中)
·[RCTEventDispatcher flushEventsQueue] -> 让事件分发对象冲刷事件队列,就是获取事件队列中所有事件执行
·[RCTEventDispatcher dispatchEvent:event] -> 遍历事件队列,一个一个分发事件
分发事件的本质:就是去执行JS的代码,相应事件。
·[RCTBatchedBridge enqueueJSCall:[[event class] moduleDotMethod] args:[event arguments]]; -> 让桥架对象调用JS处理事件
·这样就能完成把UI事件交给JS代码相应
END