面向接口、面向泛型。 团队意识和技术水平。
编程思想。Java/Android基础,学完设计模式了,学完《effective Java》了,不妨看一些更深层的书,比如《深入理解java虚拟机》、《Android设计与实现》、《Java并发编程实战》、《Android软件安全与逆向分析》、《Android系统源代码情景分析》等。
平时多注意和多关心一些架构方面的知识,最好能自己手动写一个自己的框架,数据请求、图片加载、view注解之类的,把写好的这些运用到自己的项目里,然后在开发的过程中发现问题,不断提高自己,优化自己的框架。
类比医学超分辨率,深度学习领域也是一门交叉学科,能否就您自身的工作经验谈谈,在跨学科领域如何高效地自我提升?
• 施闻哲:我觉得最重要的是行动起来。初次进入一个研究课题我一般把它分成三个阶段。第一个阶段是阅读,了解最新的技术。但是很多人都停留在这一步。无论你读了多少文章,了解了多少知识,不通过实际操作你就没有办法真正吸收他们成为自己的知识。所以如果你的目标是提升自我,创造新的价值,你就要早早地进入第二阶段:实践。这一阶段的目标是挑选最有代表性或者是你觉得最有发展前景的的一个或者几个算法,亲手实现它。如果暂时做不到,即使是找到相关的开源项目,跑上几次实验也好。在这个阶段你要确保你能重现别人的结果,或者理解每一个参数和论文里的细节,这样你就站到了和大家一样的起跑线上。最后一个阶段是最有趣的部分,就是通过到这里为止学到的经验,去总结和思考,这个算法的问题在哪里,有哪些问题没有解决,如何解决这些问题,如何在前人的基础上更进一步。
1.消息推送问题。手机功耗问题主要涉及两个点,第一个是流量,第二个是电量。
》重复消息的话,客户端发送应答,服务端没有接到这个应答,而网络好的时候,再推送一次,那就出现重复了。那怎么解决这个问题?设置了消息基于序列号的交互方式,首先推送消息的时候,不是把消息直接推送下去,是发一个通知到客户端,告诉你有消息,客户端拿到这个通知,发送一个指令上来,说获取这个消息,会带上一个收到最近消息的最大的序列号。这里有一个大坑,也就是DNS也容易出现问题,相信很多人都碰到过这样的情况。怎么解决这个问题?用全IP的方式,要接入服务器的话,我们这边有一个WEBService,里面有很多的IP列表,IP列表都拉下来,客户端直接选取一个IP地址直接去连接,看下面第一个图的第一步,通过HTTP访问客户端的,但是也存在一个域名的问题,我们做了预埋,直接用DNS访问,如果这个DNS访问不通,就可以用预埋的IP来访问,就可以拿到一个IP地址。
》海量连接和负载均衡
根据自身的负载情况来做延迟响应,负载达到一定的阀值的时候,比如说是300万,每超过10万,延迟时间稍微加50毫秒,收到你的响应包,我晚个50毫秒之后再回应答,这样跑马策略是可以解决整个的负载均衡。
系统的监控和灰度发布
2. 优秀工程师的品质:基本功扎实,思维严谨,敬业,勤奋,技术精湛,而且能保持对新技术的好奇心。oracle:adapt to change(适应改变),Oracle数据库
首先,要对Oracle所提供的各类对象有比较清晰的了解,例如,表,不止有大家平时所知道的堆表,还有临时表、IOT表、Cluster表、分区表、外部表等等;还要要了解Oracle所提供的各类索引,例如,B*Tree Index, Bitmap Index, Domain Index等;对于Oracle支持的数据类型也要有所了解,便于在建模时使用恰当的数据类型。 有的时候在处理问题的过程中会看到,在应用系统中,适合用临时表的时候却用了物理表;也遇到过因为使用字符串存储日期而带来的严重的性能问题。另外,对Oracle提供的各类SQL、PL/SQL语法最好有个全面的了解,便于在不同的环境下,采用最优的语法来实现,不但可以减少开发时间,提高性能,也可以减少编码Bug的产生。SQL函数是每个Oracle开发人员都应该了解的一部分内容,我曾经遇到过由于对Oracle提供的函数不了解,通过大量代码实现Oracle函数的例子。最后,推荐各位开发人员能够多看看Oracle的官方文档,多了解一些和Oracle开发的相关知识。
》 android学习,转载网址:http://blog.csdn.net/singwhatiwanna/article/details/49560409
学习路线和技术书籍的缺乏。Android的知识点比较琐碎,如何从琐碎的知识点中理解Android的本质并形成一个完整的知识体系。碎片化的知识未形成一个完整的体系的表现。自定义View、滑动冲突、IPC、源码阅读等??
源码下载回来后,就可以阅读了,怎么阅读呢?给两个建议,第一:不要纠结太多的代码细节,第二:选择一个自己感兴趣的入口看下去。因此看源码前期主要以整体流程为主,尽量把系统的工作机制搞懂。为什么要选择一个入口看下去呢?因为Android源码很庞大,从哪里开始呢?我的建议是找一个自己感兴趣的入口,比如Activity的启动过程,从startActivity方法看下去,直到底层的AMS。
在Android开发的学习过程中,我主要通过如下几种方式来学习:
- 在公司进行产品开发;
- 阅读Android源码和Android官方文档;
- 在CSDN写技术博客对知识进行总结和分享;
- 关注Github中优秀的开源项目并提交自己的项目;
- 在公司内部做技术分享;
- 阅读相关技术书籍;
- 业余时间持续学习。
...Android学习路线的探讨,找到自己适合的学习方式,对Android学习过程的理解分享
倾向于先广度、再深度、最后再广度。比如在学校时可以多学一点技术来扩展广度,工作后肯定要专注于深度,当对一门技术达到一定深度后,可能又需要加强下广度来扩展自己的思维方式。
----------------
接下来谈一下自己的看法
Java 基础(这不废话嘛),但是要学到什么程度,可以参考以前我提问的一个问题(如何成为一名合格的 Android 开发工程师? - 王文品的回答),
Java 基础,设计模式,当然可以看一下《Think In Java》,提升一下逼格;
算法和数据结构
特别是互联网公司,对算法要求的会特别高,比如基本的排序算法,查找算法等等;数据结构,常见的数据结构会不会自己实现;
计算机网络,现在App 不联网都不好意思叫互联网公司,那么招人就会要求熟悉TCP/IP,还有HTTP;
Android 基础比 如基本的组件,数据处理,文件读写,
网络编程,多线程,UI 等等;
特殊的 根据业务,比如有的会要求多媒体,有多会要求Web,有的要求Open GL等等,这要看情况而定;
要关注Android 最新的动态
比如Android L 的了解,特性呀,Android 4.0 的Fragment;关注官方的博客,和Android 的发展动向;比如Android Studio 使用Gradle 构建的呀,都要了解;
最后啦 要会学会使用Google,遇到问题,知道怎么解决;要知道Stackoverflow,Github,多向大牛学习学习,涨涨见识;学会使用Git 版本管理软件;
知识结构不该是标准,毕竟Android工程师的知识结构不该是固定的 ,那么多方面那么多东西,总有侧重,不同领域都有不同
做framework的和做应用层的不一样
做系统安全的和做逆向工程的不一样
做应用的和做游戏的不一样
做电视的和做手机的不一样
你不能因为一个做手机App的工程师回答不了不破坏签名篡改包是怎么做到的就说他不合格,也不能因为一个做framework的工程师不懂得cocos2d-x不太会用lua就说人家不合格……
如果是做应用之外的东西,那么你需要read the fuck source code。
1.需要熟悉framework、hal的套路,core services的业务逻辑,这个需要大量的阅读理解源码。
2.熟悉Binder等神奇的androi的扩展的一些功能,从而更好的理解”框架“
3.调试手段,这个也是非常重要的,工具类需要掌握很多,基本的ddms、mat、herxxxx、traceview、systrace、Ds-5等,还需要掌握一些命令行工具以及分析log、现场的方法和套路(神马三板斧分析重启定屏ANR之类的。。)
4. 最重要的是要有想法!编程的想法~~
hahaha,如果你变成了啥都懂一点啥都不懂的,别后悔,比如我现在就比较困惑。
横向了解一些数据库,后台开发语言,服务器配置。
纵向了解一些设计,切图等基础知识等。
当然重点要理解android应用层面,最好可以往系统框架层面走。
主要还是基础性的东西,例如算法数据结构,java基础,art虚拟机。
还有多敲代码。。