mons.math3这一数学工具包来进行拟合。中国的纬度范围在10~60之间,即我们将此区间离散成Length份作为我们的训练集。
//1) 计算三个参数 //2) 计算东西方向距离和南北方向距离(单位:米),东西距离采用三阶多项式 //3) 用平面的矩形对角距离公式计算总距离 我们对此优化方法进行有效性和性能验证。 可以看到在百米尺度上两者几乎未有差别,在千米尺度上仅有分米的区别,在更高尺度上如72千米仅有5.6m米别,在264千米也仅有8.1米区别,因此该优化方法的精度能满足我们的应用需求。 坐标转换方法和简化距离公式方法性能都非常高,相比lucene使用的Haversine算法大大提高了计算效率,然而坐标转换方法存在一些缺点: a)坐标转换后的数据不能被直接用于空间索引。lucene可以直接对经纬度进行geohash空间索引,而通过空间转换变成三维数据后不能直接使用。我们的应用有附近范围筛选功能(例如附近5km的团购单子),通过geohash空间索引可以提高范围筛选的效率; b)坐标转换方法增大内存开销。我们会将坐标写入倒排索引中,之前坐标是2列(经度和纬度),现在变成3列(x,y,z),在使用中我们往往会将这数据放入到cache中,因此会增大内存开销; c)坐标转换方法增大建索引开销。此方法本质上是将计算从查询阶段放至到索引阶段,因此提高了建索引的开销。 基于上述原因我们在实际应用中采用简化距离公式方法(通过三次多项式来拟合cos三角函数),此方法在团购筛选和商家筛选的距离排序、智能排序中已经开始使用,与之前相比,筛选团购时北京全城美食品类距离排序响应时间从40ms下降为20ms。 **问题2.iOS应用架构,我的架构设计?** 可从以下4个方面回答: iOS应用架构谈 view层的组织和调用方案 ? iOS应用架构谈 网络层设计方案 ? iOS应用架构谈 动态部署方案 ? iOS应用架构谈 本地持久化方案? 什么样app的架构叫好架构? 代码整齐,分类明确,没有common,没有core 不用文档,或很少文档,就能让业务方上手 思路和方法要统一,尽量不要多元 没有横向依赖,万不得已不出现跨层访问 对业务方该限制的地方有限制,该灵活的地方要给业务方创造灵活实现的条件 第一类:精简型应用架构 这类架构的文章分析主要还是围绕MVC展开,以苹果自带UIViewController优劣为出发点,再结合主流的MVP,MVVM,MVCS等变种进行分析演变。这类的探讨重点在于M,V,C三类角色的定义以及之间的数据事件流向的规范。很多小型应用所面临的问题及其架构层面的解决方案都集中在这一类。 第二类:综合型应用架构 对于用户量级在千万级或以上的应用来说,MVC这一层面的思考已无法应对业务疯狂增长所带来的负担。这类应用往往需要专业资深的架构师出面进行深层次的思考设计,业内不少大厂如淘宝,天猫,携程等都做过一些分享。不过到了这一层级的战斗,不光考验架构师的技术积累,更重要的是架构师对于业务的整体理解。我姑且把这类架构名之为:综合型应用架构。综合型应用架构一般不会提到MVC,更多是在探讨“层”与“模块”的划分和耦合。后面我会就几个经典样本做下详尽深入的分析。 第三类:深度优化的综合型应用架构 综合型应用架构是应对大规模业务增长的必经之路,一旦架构成型,后期业务膨胀会不停的打磨架构本身,产品本身对体验质量的追求会要求架构师和技术团队不停的优化架构细节。这种优化可以分为两块,第一是组件或模块划分的粒度越来越细,第二是组件模块的深度优化,比如网络层的深度优化,sqlite优化(多线程,FTS,安全等),数据加密,HotFix,Hybrid等,一些开源的第三方库已不能满足要求,需要团队自己重造轮子。这一层面的架构设计涉及面广,对架构师,团队技术人员的技术深度和业务理解能力有较高要求,短短一篇技术文章往往只能走马观花的介绍个大概,每一次优化几乎都可以作为一个专题来讲解。 第四类:组织型应用架构 这类架构在第三类的基础之上更进了一步,除了关注系统层面的架构设计之外,更对团队或部门之间协作方式,各系统模块的演进方式,产品发布流程等都做了规范。除去业务膨胀带来的压力,人员增长,各团队协作依赖增强等都会对app的质量,迭代速度产生影响,这些问题也需要从架构层面去解决。这类结合技术架构和组织架构的分享还比较少。 以上四种类型的架构又可以看做一般App从简至繁,公司规模随之增长的演进过程,技术圈绝大部分的架构类分享文章都可以归为上述四类。 对于什么是架构的学术定义,似乎大家并不太在意,更关心的是如何解决自身项目当下的问题。虽然在我看来第一类架构更像是在讨论设计模式,但这里面确实又有非常多的知识可以深入挖掘,这里就把所有“解决应用整体设计问题”的讨论都归类于架构这一话题。 值得一提的是,架构师的视野和积累一般都受限于自己所经历项目及业务的规模。如果有机会,工程师还是应该尽可能去BAT这类巨头级公司历练一下,知识深度和广度的构建绝非纸上可得。 可从以下方面回答:(举例说明,携程开发提供) 通讯、定位、Hybrid、数据库、登录、分享、基础库等 直接提供给其他BU独立App使用 地图、日历、城市、图片、通讯录等13个公共组件 减少各BU重复开发工作量 网络性能:网络服务成功率、平均耗时、耗时分布 定位:获取经纬度成功率、城市定位成功率 启动时间、内存、流量等指标 多种纬度:系统、App版本、网络状况、位置等 使用TCP长连接实现网络服务 根据连接/读/写不同阶段使用重试机制 使用IP列表避免DNS解析失败或者劫持 根据网络延迟选择服务端IP(使用Ping) **10.说说你了解的第三方原理或底层知识?**