阿里,腾讯和百度的互联网大数据应用有何不同

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了阿里,腾讯和百度的互联网大数据应用有何不同相关的知识,希望对你有一定的参考价值。

参考技术A

阿里,腾讯和百度的互联网大数据应用有何不同

百度、阿里巴巴和腾讯三大互联网企业都拥有大数据,三大互联网巨头的数据都用来优化自己业务的运营效果,从这个层面看,其数据价值应用场景比较类似。但由于其业务和商业模式的不同决定了三者数据资产的不同,也决定了三者未来大数据策略的不同,尤其是基于大数据的开放和合作角度看,百度和阿里巴巴相对更加开放。对于重视大数据开放和合作的互联网企业,他们最为期待的是借着大数据开放的策略,与更多的传统行业交换更多的数据,从而更好的丰富其在线下数据,形成线上和线下数据的协同,从中拓展新的商业模式,如智能硬件和大数据健康。

BAT的互联网大数据应用有何不同

从数据类型看,腾讯数据最为全面,这与其互联网业务全面相关,其最为突出的是社交数据和游戏数据,其中:社交数据最为核心的是关系链数据、用户间的互动数据、用户产生的文字、图片和视频内容;游戏数据主要包括大型网游数据、网页游戏数据和手机游戏数据,游戏数据中最为核心的是游戏的活跃行为数据和付费行为数据,腾讯的数据最大的特点是基于社交的各种用户行为和娱乐数据。阿里最为突出的是电商数据,尤其是用户在淘宝和天猫上的商品浏览、搜索、点击、收藏和购买等数据,其数据最大特点是从浏览到支付形成的用户漏斗式转化数据。百度的数据以用户搜索的关键词、爬虫抓取的网页、图片和视频数据为主,百度的数据特点是通过搜索关键词更直接反映用户兴趣和需求,百度的数据以非结构化数据更多。
百度、阿里巴巴和腾讯的数据应用场景
百度、阿里巴巴和腾讯的数据应用场景都有共同的体系,该体系一共分为七层,代表了企业不同层面的数据价值应用场景,形成了企业运营的数据价值金字塔:
(1)数据基础平台层。金字塔的最底层也是整个金字塔的基础层,如果基础层搭建不好,上面的应用层也很难在企业运营中发挥效果,这一层的技术目标是实现数据的有效存储、计算和质量管理;业务目标是把企业的所有用户(客户)数据用唯一的ID串起来,包括用户(客户)的画像(如性别、年龄等)、行为以及兴趣爱好等,以达到全面的了解用户(客户)的目的;
(2)业务运营监控层。这一层首要的是搭建业务运营的关键数据体系,在此基础上通过智能化模型开发出来的数据产品,监控关键数据的异动,通过各种分析模型等可以快速定位数据异动的原因,辅助运营决策;
(3)用户/客户体验优化层。这一层主要是通过数据来监控和优化用户/客户的体验问题。这里面既运用了结构化的数据来监控,也运用非结构化的数据(如文本)来监控体验的问题。前者更多的是应用各种用户(客户)体验监测的模型或者工具来实现,后者更多的是通过监测微博、论坛和企业内部的客户反馈系统的文本来发现负面的口碑,以及时的优化产品或服务;
(4)精细化运营和营销层。这一层主要通过数据驱动业务精细化运营和营销。主要可以分为四方面:第一,构建基于用户的数据提取和运营工具,以方便运营和营销人员通过人群定向把客户提取出来,从而对客户进行营销或运营活动;第二方面,通过数据挖掘的手段提升客户对活动的响应;第三,通过数据挖掘的手段进行客户生命周期管理;第四,主要是用个性化推荐算法基于用户不同的兴趣和需求推荐不同的商品或者产品,以实现推广资源效率和效果最大化,如淘宝商品的个性化推荐;
(5)数据对外服务和市场传播层面。数据对外服务一般为服务该互联网企业的客户或用户,如百度通过提供百度舆情、百度代言人、百度指数等服务其广告主客户;淘宝通过数据魔方、淘宝情报和在云端等产品服务其客户;腾讯通过腾讯分析和腾讯云分析等服务其开放商客户。在市场传播层面,主要通过有趣的数据信息图谱和数据可视化产品来实现(如淘宝指数、百度指数、百度春节迁徙地图)。
(6)经营分析层面。主要通过分析师对大数据进行统计,形成经验分析周报、月报和季度报告等,对用户经营情况和收入完成等情况进行分析,发现问题,优化经营策略。
(7)战略分析层面。这方面既要结合内部的大数据形成决策层的数据视图,也要结合外部数据尤其是各种竞争情报监控数据、国外趋势研究数据来辅助决策层进行战略分析。
虽然百度、阿里巴巴和腾讯在企业运营的数据价值的应用体系上有共同的特点,但由于企业的商业模式以及数据资产不同,他们在整体的大数据发展策略也有显著的不同。
百度大数据策略
百度大数据最重要的是来源是通过爬虫搜集的100多个国家的近万亿网页数据,数据量是在EB级的规模。百度的数据非常多样化,其收集的数据既有为非结构化的或者半结构化的数据,包括网页数据、视频和图片等数据,也有结构化的数据,如用户的点击行为数据,广告客户的付费行为数据等。
百度大数据主要服务三类人群:一类是互联网网民,通过大数据和自然语言处理技术让网民的搜索更加准确;第二类是广告主,通过大数据让广告主的广告和搜索关键词的匹配度更高,或者和网民正在看的网页内容匹配度更高;第三类是,也是在重点推进的百度大数据引擎,重点是服务传统行业拥有一定规模数据的企业。
百度大数据引擎代表了互联网企业数据服务能力开放和合作的趋势,百度大数据引擎由以下三方面构成:
开放云:百度的大规模分布式计算和超大规模存储云,开放云大数据开放的是基础设施和硬件能力。过去的百度云主要面向开发者,大数据引擎的开放云则是面向有大数据存储和处理需求的“大开发者”。据百度相关人员称,百度开放云还拥有CPU利用率高、弹性高、成本低等特点。百度是全球首家大规模商用ARM服务器的公司,而ARM架构的特征是能耗小和存储密度大,同时百度还是首家将GPU(图形处理器)应用在机器学习领域的公司,实现了能耗节省的目的。
数据工厂:数据工厂为百度将海量数据组织起来的软件能力,与数据库软件的作用类似,不同的是数据工厂是被用作处理TB级甚至更大的数据。百度数据工厂支持超大规模异构数据查询,支持SQL-like以及更复杂的查询语句,支持各种查询业务场景。同时百度数据工厂还将承载对于TB级别大表的并发查询和扫描,大查询、低并发时每秒可达百GB。
百度大脑:百度大脑将百度此前在人工智能方面的能力开放出来,主要是大规模机器学习能力和深度学习能力。此前它们被应用在语音、图像、文本识别,以及自然语言和语义理解方面,并通过百度Inside等平台开放给了智能硬件。现在这些能力将被用来对大数据进行智能化的分析、学习、处理、利用,并对外开放。
百度将基础设施能力、软件系统能力以及智能算法技术打包在一起,通过大数据引擎开放出来之后,拥有大数据的行业可以将自己的数据接入到这个引擎进行处理。从架构来看,企业或组织也可以只选择三件套中的一种来使用,例如数据存放在自己的云,但要运用百度大脑的一些智能算法或者数据存放在百度云,自己写算法。
百度大数据引擎的作用
我们可以从两方面来具体看百度大数据引擎的作用:
(1)对于 *** 机构:如交通部门有车联网、物联网、路网监控、船联网、码头车站监控等地方的大数据,如果这些数据与百度的搜索记录、全网数据、LBS数据结合,在利用百度大数据引擎的大数据能力,则可以实现智能路径规划和运力管理;卫生部门拥有流感法定报告数据、全国流感样病例哨点监测和病原学监测数据,如果和百度的搜索记录及全网数据结合,便可进行流感预测、疫苗接种指导。
(2)对于企业:很多企业也拥有海量大数据,不过很多企业的大数据处理和挖掘能力比较弱,如果应用百度大数据引擎,则可以对海量数据进行可靠低成本的存储,进行智能化的由浅入深的价值挖掘。如在2014年4月的百度技术开放日上,中国平安便介绍了如何利用百度的大数据能力加强消费者理解和预测,细分客户群制定个性化产品和营销方案。
阿里巴巴大数据策略
阿里巴巴大数据整体发展方向是以激活生产力为目的的DT(data technology,数据技术驱动)数据时代发展。阿里巴巴大数据未来将由“基于云计算的数据开放+大数据工具化应用”组成:
(1)基于云计算的数据开放。云计算使中小企业可以在阿里云上获得数据存储、数据处理服务,也可以构建自己的数据应用。云计算是数据开放的基础,云计算可以为全球的数据开发者提供数据工作平台,阿里分布式的存储平台和在这个平台上的算法工具,可以更好的为数据开发者所用;同时,阿里巴巴还需要做好数据的脱敏,把数据的商业定义,每个标签打得足够清晰,能够让全球的数据开发者在阿里巴巴平台展开数据思维,让数据为 *** 所用、消费者所用以及行业所用。阿里的大数据开放之后,线上线下的数据能够串联起来,所有人都是数据提供方,也是数据的使用者。
(2)在大数据应用上,马云已经在整个数据应用上确定了两个方针:
第一个方针:从IT到DT(数据技术),DT就是点燃整个数据和激发整个数据的力量,被管理所用,被社会所用,被销售所用,为制造业所用,为消费者信用所用。前文已经分析道,阿里巴巴的数据资产是以电商为主,其中,淘宝和天猫每天会产生丰富多样的数据,阿里巴巴已经沉淀了包括交易、金融、生活服务等多种类型的数据。这些数据能够帮助阿里巴巴进行数据化运营(如下图)。
另外一个其最为重要的应用是金融领域——小微金融。在小微金融企业融资领域。由于银行无法掌握小微企业真实的经营数据,不仅导致很多企业无法拿到贷款,还因为数据类型的不足导致整个判断流程过长,阿里已经通过其电商数据中的交易、信用、SNS等多种数据来决定是否可以发放贷款以及放贷的额度。
第二个方针:让阿里巴巴的数据、让阿里巴巴的工具能够成为中国商业的基础设施。阿里巴巴已经开始在转型,阿里将由自己直接面对消费者变成支持网商面对消费者,阿里会根据其已有的运营和数据经验,开发更多的工具,帮助网商成长,让网商们更懂得用最好的工具、服务去服务好消费者。正如马云所言“我相信没有一个网商不希望拥有自己的客户,没有一个网商不希望知道客户对自己的体验到底好还是坏,如何持久的拥有这些客户,我们觉得一个国家的经济,应该让给企业家群体去做,我们觉得淘宝网商未来的经济,是应该留给网商们去决定,而不是我们去做决定”。
腾讯大数据策略
腾讯的大数据目前更多的是为腾讯企业内部运营服务,相对于阿里和百度,数据开放程度并不高。因此,对于腾讯我们主要重点介绍腾讯大数据在服务企业内部的应用场景和服务。
腾讯90%以上的数据已经实现集中化管理,数据集中在数据平台部,有超过100多个产品的数据已经集中管理起来,而且是集中存储在腾讯自研数据仓库(TDW)。腾讯大数据从数据应用的不同环节可以分为四个层面,包括数据分析、数据挖掘、数据管理和数据可视化:
(1)数据分析层有四个产品:自助分析、用户画像、实时多维度分析和异动智能定位工具。自助分析可以帮助非技术人员通过简单的条件配置实现数据的统计和展示功能;用户画像则是对某一群用户或者某一业务的用户实现自动化的人群画像;实时多维度分析工具则是可以对某一指标可以实现实时的多个维度的切分,方便分析人员从不同角度对某一指标进行多维度分析;异动智能定位工具则实现数据异动问题的智能化定位。
(2)数据挖掘层面的产品应用有:精准广告系统、用户个性化推荐引擎和客户生命周期管理。精准广告系统如广点通,是基于腾讯大社交平台的海量数据为基础,通过精准推荐算法,以智能定向推广位导向实现广告精准投放;用户个性化推荐引擎根据每位用户的兴趣和喜好,通过个性化推荐算法(协同过滤、基于内容推荐、图算法、贝叶斯等),实现产品的个性化推荐需求;客户生命周期管理系统,则是基于大数据,根据用户/客户的所处的不同生命周期进行数据挖掘,建立预测、预警和用户特征模型,以根据用户/客户所处的不同生命周期特点进行精细化运营和营销。
(3)在数据管理层面则有:TDW(腾讯数据仓库)、TDBank(数据银行)、元数据管理平台和任务调度系统和数据监控。这一层面主要是实现数据的高效集中存储、数据的业务指标定义管理、数据质量管理、计算任务的及时调度和计算以及数据问题的监控和告警。
(4)在数据可视化层面有:自助报表工具、腾讯罗盘、腾讯分析和腾讯云分析等工具。自助报表工具可以自助化的实现结构相对简单和逻辑相对简单的报表。腾讯罗盘分为内部版和外部版,内部版则是服务于腾讯内部用户(产品经理、运营人员和技术人员等)的高效报表工具,外部版则是服务于腾讯合作伙伴如开发商的报表工具。腾讯分析是网站分析工具,帮助网站主进行网站的全方位分析。腾讯云分析则是帮助应用开发商决策和运营优化的分析工具。
总的来看,百度、阿里巴巴和腾讯三大互联网企业都拥有大数据,三大互联网巨头的数据都用来优化自己业务的运营效果,从这个层面看,其数据价值应用场景比较类似。但由于其业务和商业模式的不同决定了三者数据资产的不同,也决定了三者未来大数据策略的不同,尤其是基于大数据的开放和合作角度看,百度和阿里巴巴相对更加开放。对于重视大数据开放和合作的互联网企业,他们最为期待的是借着大数据开放的策略,与更多的传统行业交换更多的数据,从而更好的丰富其在线下数据,形成线上和线下数据的协同,从中拓展新的商业模式,如智能硬件和大数据健康。

bat的互联网大数据应用有何不同

这个得从BAT各自的基因来分析。百度主要是以搜索产品,所以大数据对于百度来说主要用于搜索方面,使搜索更加的精准和匹配;阿里巴巴以电子商务为主,所以大数据对于阿里巴巴来说会主要用户商品方面;腾讯主要是社交,所以大数据对于腾讯来说可能更多的应用于社会网络分析。大数据的主要用途为预测,所以BAT对于大数据的共同点都是为了通过对用户的分析,进行更加准确的服务和营销。

看百度,阿里与腾讯是如何利用互联网大数据应用

阿里有数据魔方,为卖家提供收费服务。

百度里,“互联网”和“所有空间”有何不同?

“互联网”

“所有空间”
互联网 就是指Inter上所有的信息
对百度来说
主要就是中文信息
所有空间
就是指百度中的所有用户
建了百度空间
(博客+相册+留言板)
显然搜索后者
是不包括百度空间 以外的博客的

如何获取并应用互联网大数据

大数据是大量、高速、多变的信息,它需要新型的处理方式去促成更强的决策能力、洞察力与最佳化处理。大数据为企业获得更为深刻、全面的洞察能力提供了前所未有的空间与潜力。
借助大数据及相关技术,我们可针对不同行为特征的客户进行针对性营销,甚至能从“将一个产品推荐给一些合适的客户”到“将一些合适的产品推荐给一个客户”,得以更聚焦客户,进行个性化精准营销。
大数据时代下的精准营销是指通过大数据获取对象的喜好,行为偏好,对不同对象进行不同营销。大数据精准营销的核心可以概括为几大关键词:用户、需求、识别、体验。
亿美软通推出数据云服务,延续亿美的客户服务、客户营销、客户管理的公司经营理念,通过庞大的消费数据资源,为客户提供数据验证,精准营销等数据级服务。简单说就是为企业提供数据验证和数据筛选业务。
-

互联网大数据培训应用前景如何?

不用担心,学好了就会有好的前景。{变量9}

大数据和小数据有何不同?

1.大数据重预测,小数据重解释;2.大数据重发现,而小数据重实证;3.大数据重相关,小数据重因果;4.大数据重全体,小数据重抽样;5.大数据重感知,小数据重精确。

企业数据中心和互联网数据中心有何不同

DCCI互联网数据中心(DCCI DATA CENTER OF CHINA INTERNET,简称DCCI),互联网监测研究权威机构&数据平台,互动营销之测量、分析、优化服务提供者。以Panel软件、代码嵌入、海量数据挖掘、语义信息处理等多种领先技术手段为基础,进行网站、用...

互联网数据中心:是idc 他是主要存放网络数据的(网站+数据+下载站点等)囊括比较广泛,任何的正规企业或者是中小型站长都是可以进行选择的。
企业数据中心:它的更加具有针对性,它可以隶属于互联网数据中心的一部分的。

互联网大型公司(阿里腾讯百度等)android面试题目(有答案)

又到年底了,这几天不是很忙,就整理一下面试题目,供大家学习了解,哈哈年后想换工作的,你们懂得。

Android 基础与底层机制

  1. 数据库的操作类型有哪些,如何导入外部数据库?

数据库的操作类型:增、删、改、查;
把原数据库包括在项目源码的 res/raw
android系统下数据库应该存放在 /data/data/com..(package name)/ 目录下,所以我们需要做的是把已有的数据库传入那个目录下.操作方法是用FileInputStream读取原数据库,再用FileOutputStream把读取到的东西写入到那个目录.

  1. 是否使用过本地广播,和全局广播有什么差别?

全局广播(BroadcastReceiver):发出去的广播可以被任何应用程序接收到,也可以接受来自任何应用程序的广播;
本地广播(LocalBroadcastManager):发送的广播只会在自己App内传播,不会泄露给其他App,确保隐私数据不会泄露;其他App也无法向你的App发送该广播,不用担心其他App会来搞破坏;比系统全局广播更加高效;

  1. 是否使用过 IntentService,作用是什么, AIDL 解决了什么问题?

Service是在主线程中而没有另开新的线程执行任务,不能处理耗时操作;
而IntentServicee是有替代Service处理耗时操作的作用,从IntentService的源码中我们也可以看到IntentService实际也是通过Handler来进行主线程的UI更新等操作;IntentServicee有一个抽象方法onHandleIntent,在这里可以处理耗时操作;

AIDL 可以跨进程访问其他应用程序,和其他应用程序通讯,多进程间通讯;

  1. Activity、 Window、 View 三者的差别, fragment 的特点?

Activity是Android应用程序的载体,允许用户在其上创建一个用户界面,并提供用户处理事件的API,如onKeyEvent, onTouchEvent等。 并维护应用程序的生命周期。
当我们调用Acitivity的 setContentView方法的时候实际上是调用的Window对象的setContentView方法,所以我们可以看出Activity中关于界面的绘制实际上全是交给Window对象来做的。
Activity--->Window--->DecorView
Activity像一个工匠(控制单元),Window像窗户(承载模型),View像窗花(显示视图) LayoutInflater像剪刀,Xml配置像窗花图纸。

  • 在Activity中调用attach,创建了一个Window

  • 创建的window是其子类PhoneWindow,在attach中创建PhoneWindow

  • 在Activity中调用setContentView(R.layout.xxx)

  • 其中实际上是调用的getWindow().setContentView()

  • 调用PhoneWindow中的setContentView方法

  • 创建ParentView:作为ViewGroup的子类,实际是创建的DecorView(作为 FramLayout的子类)

  • 将指定的R.layout.xxx进行填充通过布局填充器进行填充【其中的parent指的>* 就是DecorView】

  • 调用到ViewGroup

  • 调用ViewGroup的removeAllView(),先将所有的view移除掉

  • 添加新的view:addView()

fragment 特点

  • Fragment可以作为Activity界面的一部分组成出现;

  • 可以在一个Activity中同时出现多个Fragment,并且一个Fragment也可以在多个Activity中使用;

  • 在Activity运行过程中,可以添加、移除或者替换Fragment;

  • Fragment可以响应自己的输入事件,并且有自己的生命周期,它们的生命周期会受宿主Activity的生命周期影响。

  1. 描述一次网络请求的流程(新浪)

  • 域名解析

  • TCP的三次握手

  • 建立TCP连接后发起HTTP请求

  • 服务器响应HTTP请求

  • 浏览器解析html代码

  • 同时请求html代码中的资源(如js、css、图片等)

  • 最后浏览器对页面进行渲染并呈现给用户
    参考:

  1. Handler、 Thread 和 HandlerThread 的差别(小米)

  • Thread是一个线程;

  • 我们知道Handler是用来异步更新UI的,更详细的说是用来做线程间的通信的,更新UI时是子线程与UI主线程之间的通信。那么现在我们要是想子线程与子线程之间的通信要怎么做呢?当然说到底也是用Handler+Thread来完成(不推荐,需要自己操作Looper)

  • HandlerThread就是(Handler+Thread结合),HandlerThread其实还是一个线程,它跟普通线程有什么不同之处是多了一个Looper,这个是子线程独有的Looper,用来做消息的取出和处理。

  1. 低版本 SDK 实现高版本 api(小米)

在使用高于minSdkVersion API level的方法需要:

  • 用@TargeApi($API_LEVEL) 使可以编译通过, 不建议使用@SuppressLint("NewApi");

  • 运行时判断API level; 仅在足够高,有此方法的API level系统中,调用此方法;

  • 保证功能完整性,保证低API版本通过其他方法提供功能实现。

  1. launch mode 应用场景(百度、小米、乐视)

  • standard:每次激活Activity时都会创建Activity实例,并放入任务栈中。这个是默认的;

  • singleTop:如果已经存在在栈顶在对方的任务一个同类型的活动实例,不会有任何新的activity创造,而是被发送到一个存在的activity实例通过onNewIntent() 方法的意图,即会重用该实例调用当前activity的onNewIntent() 方法。适合接收通知启动的内容显示页面。
    例如,某个新闻客户端的新闻内容页面,如果收到10个新闻推送,每次都打开一个新闻内容页面是很烦人的。

  • singleTask:如果系统中有一个存在的活动实例,整个任务将实例将被移动到顶部,Intent将通过onnewintent()方法交付。否则,新的activity将被创建并放置在适当的任务中。适合作为程序入口点。
    例如浏览器的主界面。不管从多少个应用启动浏览器,只会启动主界面一次,其余情况都会走onNewIntent,并且会清空主界面上面的其他页面。

  • singleInstance适合需要与程序分离开的页面。
    例如闹铃提醒,将闹铃提醒与闹铃设置分离。
    singleInstance不要用于中间页面,如果用于中间页面,跳转会有问题,比如:A -> B (singleInstance) -> C,完全退出后,在此启动,首先打开的是B。

  1. touch 事件传递流程(小米)

    互联网大型公司(阿里腾讯百度等)android面试题目(有答案)
    image.png
  2. view 绘制流程(百度)

    互联网大型公司(阿里腾讯百度等)android面试题目(有答案)
    image.png

https://www.jianshu.com/p/5a71014e7b1b

  1. 什么情况导致内存泄漏(美团)

  • 1.单例造成的内存泄漏
    由于单例的静态特性使得其生命周期和应用的生命周期一样长,如果一个对象已经不再需要使用了,而单例对象还持有该对象的引用,就会使得该对象不能被正常回收,从而导致了内存泄漏。

  • 2.非静态内部类创建静态实例造成的内存泄漏
    例如,有时候我们可能会在启动频繁的Activity中,为了避免重复创建相同的数据资源,可能会出现如下写法:

 1public class MainActivity extends AppCompatActivity {
2   private static TestResource mResource = null;
3   @Override
4  protected void onCreate(Bundle savedInstanceState) {
5     super.onCreate(savedInstanceState);
6       setContentView(R.layout.activity_main);
7       if(mResource == null){
8          mResource = new TestResource();
9       }
10      //...
11   }
12 class TestResource {
13  //...
14   }
15}

这样在Activity内部创建了一个非静态内部类的单例,每次启动Activity时都会使用该单例的数据。虽然这样避免了资源的重复创建,但是这种写法却会造成内存泄漏。因为非静态内部类默认会持有外部类的引用,而该非静态内部类又创建了一个静态的实例,该实例的生命周期和应用的一样长,这就导致了该静态实例一直会持有该Activity的引用,从而导致Activity的内存资源不能被正常回收。

解决方法:将该内部类设为静态内部类或将该内部类抽取出来封装成一个单例,如果需要使用Context,就使用Application的Context。

  • 3.Handler造成的内存泄漏

示例:创建匿名内部类的静态对象

 1public class MainActivity extends AppCompatActivity {
2   private final Handler handler = new Handler() {
3    @Override
4   public void handleMessage(Message msg) {
5        // ...
6    }
7  };
8  @Override
9   protected void onCreate(Bundle savedInstanceState) {
10       super.onCreate(savedInstanceState);
11      setContentView(R.layout.activity_main);
12      new Thread(new Runnable() {
13          @Override
14          public void run() {
15             // ...
16             handler.sendEmptyMessage(0x123);
17           }
18     });
19  }
20}

1、从Android的角度
当Android应用程序启动时,该应用程序的主线程会自动创建一个Looper对象和与之关联的MessageQueue。当主线程中实例化一个Handler对象后,它就会自动与主线程Looper的MessageQueue关联起来。所有发送到MessageQueue的Message都会持有Handler的引用,所以Looper会据此回调Handle的handleMessage()方法来处理消息。只要MessageQueue中有未处理的Message,Looper就会不断的从中取出并交给Handler处理。另外,主线程的Looper对象会伴随该应用程序的整个生命周期。
2、 Java角度
在Java中,非静态内部类和匿名类内部类都会潜在持有它们所属的外部类的引用,但是静态内部类却不会。

对上述的示例进行分析,当MainActivity结束时,未处理的消息持有handler的引用,而handler又持有它所属的外部类也就是MainActivity的引用。这条引用关系会一直保持直到消息得到处理,这样阻止了MainActivity被垃圾回收器回收,从而造成了内存泄漏。

解决方法:将Handler类独立出来或者使用静态内部类,这样便可以避免内存泄漏。

  • 4.线程造成的内存泄漏

示例:AsyncTask和Runnable
AsyncTask和Runnable都使用了匿名内部类,那么它们将持有其所在Activity的隐式引用。如果任务在Activity销毁之前还未完成,那么将导致Activity的内存资源无法被回收,从而造成内存泄漏。
解决方法:将AsyncTask和Runnable类独立出来或者使用静态内部类,这样便可以避免内存泄漏。

  • 5.资源未关闭造成的内存泄漏

对于使用了BraodcastReceiver,ContentObserver,File,Cursor,Stream,Bitmap等资源,应该在Activity销毁时及时关闭或者注销,否则这些资源将不会被回收,从而造成内存泄漏。
1)比如在Activity中register了一个BraodcastReceiver,但在Activity结束后没有unregister该BraodcastReceiver。
2)资源性对象比如Cursor,Stream、File文件等往往都用了一些缓冲,我们在不使用的时候,应该及时关闭它们,以便它们的缓冲及时回收内存。它们的缓冲不仅存在于 java虚拟机内,还存在于java虚拟机外。如果我们仅仅是把它的引用设置为null,而不关闭它们,往往会造成内存泄漏。
3)对于资源性对象在不使用的时候,应该调用它的close()函数将其关闭掉,然后再设置为null。在我们的程序退出时一定要确保我们的资源性对象已经关闭。
4)Bitmap对象不在使用时调用recycle()释放内存。2.3以后的bitmap应该是不需要手动recycle了,内存已经在java层了。

  • 6.使用ListView时造成的内存泄漏

初始时ListView会从BaseAdapter中根据当前的屏幕布局实例化一定数量的View对象,同时ListView会将这些View对象缓存起来。当向上滚动ListView时,原先位于最上面的Item的View对象会被回收,然后被用来构造新出现在下面的Item。这个构造过程就是由getView()方法完成的,getView()的第二个形参convertView就是被缓存起来的Item的View对象(初始化时缓存中没有View对象则convertView是null)。
构造Adapter时,没有使用缓存的convertView。
解决方法:在构造Adapter时,使用缓存的convertView。

  • 7.集合容器中的内存泄露

我们通常把一些对象的引用加入到了集合容器(比如ArrayList)中,当我们不需要该对象时,并没有把它的引用从集合中清理掉,这样这个集合就会越来越大。如果这个集合是static的话,那情况就更严重了。
解决方法:
在退出程序之前,将集合里的东西clear,然后置为null,再退出程序。

  • 8.WebView造成的泄露

当我们不要使用WebView对象时,应该调用它的destory()函数来销毁它,并释放其占用的内存,否则其长期占用的内存也不能被回收,从而造成内存泄露。
解决方法:
为WebView另外开启一个进程,通过AIDL与主线程进行通信,WebView所在的进程可以根据业务的需要选择合适的时机进行销毁,从而达到内存的完整释放。

  1. ANR 定位和修正

如果开发机器上出现问题,我们可以通过查看/data/anr/traces.txt即可,最新的ANR信息在最开始部分。

  • 主线程被IO操作(从4.0之后网络IO不允许在主线程中)阻塞。

  • 主线程中存在耗时的计算

  • 主线程中错误的操作,比如Thread.wait或者Thread.sleep等 Android系统会>* 监控程序的响应状况,一旦出现下面两种情况,则弹出ANR对话框

  • 应用在5秒内未响应用户的输入事件(如按键或者触摸)

  • BroadcastReceiver未在10秒内完成相关的处理

  • Service在特定的时间内无法处理完成 20秒
    修正

  • 使用AsyncTask处理耗时IO操作。

  • 使用Thread或者HandlerThread时,调用Process.setThreadPriority(Process.THREADPRIORITYBACKGROUND)设置优先级,否则仍然会降低程序响应,因为默认Thread的优先级和主线程相同。

  • 使用Handler处理工作线程结果,而不是使用Thread.wait()或者Thread.sleep()来阻塞主线程。

  • Activity的onCreate和onResume回调中尽量避免耗时的代码

  • BroadcastReceiver中onReceive代码也要尽量减少耗时,建议使用IntentService处理。

  1. 什么情况导致 oom(乐视、美团)

这个跟11好像差不多

  1. Android Service 与 Activity 之间通信的几种方式

  • 通过Binder对象

  • 通过Intent

  • 通过Broadcast广播

  • 自定义接口回调

  1. Android 各个版本 API 的区别
    http://blog.csdn.net/u012964796/article/details/50662564

  2. 如何保证一个后台服务不被杀死,比较省电的方式是什么?(百度)

  • 双进程守护(就是开启二个service,二个service是不同的进程中,用aidl监听,有一个service杀死了,另一个service监听到了就重新启动刚杀死的service),这个有时间时专门写文章介绍;

  • service绑定通知栏成为前台服务,

  • 还有一个就是锁屏时启动一个像素的activity,哈哈,好像某应用就是这么干的;

  • AlarmManager不断启动service

  • 通过jni调用,在c层启动多进程

  1. Requestlayout, onlayout, onDraw, DrawChild 区别与联系(猎豹)

requestLayout()方法 :会导致调用measure()过程 和 layout()过程 。 将会根据标志位判断是否需要ondraw
onLayout()方法(如果该View是ViewGroup对象,需要实现该方法,对每个子视图进行布局)
调用onDraw()方法绘制视图本身 (每个View都需要重载该方法,ViewGroup不需要实现该方法)
drawChild()去重新回调每个子视图的draw()方法

  1. invalidate()和 postInvalidate() 的区别及使用(百度)

postInvalidate() 方法在非 UI 线程中调用,通知 UI 线程重绘。 
invalidate() 方法在 UI 线程中调用,重绘当前 UI。

  1. Android 动画框架实现原理
    Animation框架定义了透明度,旋转,缩放和位移几种常见的动画,而且控制的是整个View,实现原理是每次绘制视图时View所在的ViewGroup中的drawChild函数获取该View的Animation的Transformation值,然后调用canvas.concat(transformToApply.getMatrix()),通过矩阵运算完成动画帧,如果动画没有完成,继续调用invalidate()函数,启动下次绘制来驱动动画,动画过程中的帧之间间隙时间是绘制函数所消耗的时间,可能会导致动画消耗比较多的CPU资源,最重要的是,动画改变的只是显示,并不能相应事件。

  1. Android 为每个应用程序分配的内存大小是多少?(美团)

android程序内存一般限制在16M,也有的是24M

  1. Android View 刷新机制(百度、美团)

由ViewRoot对象的performTraversals()方法调用draw()方法发起绘制该View树,值得注意的是每次发起绘图时,并不会重新绘制每个View树的视图,而只会重新绘制那些“需要重绘”的视图,View类内部变量包含了一个标志位DRAWN,当该视图需要重绘时,就会为该View添加该标志位。

调用流程 :

mView.draw()开始绘制,draw()方法实现的功能如下:

绘制该View的背景为显示渐变框做一些准备操作(见5,大多数情况下,不需要改渐变框)调用onDraw()方法绘制视图本身 (每个View都需要重载该方法,ViewGroup不需要实现该方法)调用dispatchDraw ()方法绘制子视图(如果该View类型不为ViewGroup,即不包含子视图,不需要重载该方法)值得说明的是,ViewGroup类已经为我们重写了dispatchDraw ()的功能实现,应用程序一般不需要重写该方法,但可以重载父类函数实现具体的功能。

  1. LinearLayout 对比 RelativeLayout(百度)(Ricky)

RelativeLayout会让子View调用2次onMeasure,LinearLayout 在有weight时,也会调用子View2次onMeasure,RelativeLayout的子View如果高度和RelativeLayout不同,则会引发效率问题,当子View很复杂时,这个问题会更加严重。如果可以,尽量使用padding代替margin。在不影响层级深度的情况下,使用LinearLayout和FrameLayout而不是RelativeLayout。
最后再思考一下文章开头那个矛盾的问题,为什么Google给开发者默认新建了个RelativeLayout,而自己却在DecorView中用了个LinearLayout。因为DecorView的层级深度是已知而且固定的,上面一个标题栏,下面一个内容栏。采用RelativeLayout并不会降低层级深度,所以此时在根节点上用LinearLayout是效率最高的。而之所以给开发者默认新建了个RelativeLayout是希望开发者能采用尽量少的View层级来表达布局以实现性能最优,因为复杂的View嵌套对性能的影响会更大一些。

  1. 优化自定义 view(百度、乐视、小米)

为了加速你的view,对于频繁调用的方法,需要尽量减少不必要的代码。先从onDraw开始,需要特别注意不应该在这里做内存分配的事情,因为它会导致GC,从而导致卡顿。在初始化或者动画间隙期间做分配内存的动作。不要在动画正在执行的时候做内存分配的事情。

你还需要尽可能的减少onDraw被调用的次数,大多数时候导致onDraw都是因为调用了invalidate().因此请尽量减少调用invaildate()的次数。如果可能的话,尽量调用含有4个参数的invalidate()方法而不是没有参数的invalidate()。没有参数的invalidate会强制重绘整个view。

另外一个非常耗时的操作是请求layout。任何时候执行requestLayout(),会使得Android UI系统去遍历整个View的层级来计算出每一个view的大小。如果找到有冲突的值,它会需要重新计算好几次。另外需要尽量保持View的层级是扁平化的,这样对提高效率很有帮助。

如果你有一个复杂的UI,你应该考虑写一个自定义的ViewGroup来执行他的layout操作。与内置的view不同,自定义的view可以使得程序仅仅测量这一部分,这避免了遍历整个view的层级结构来计算大小。这个PieChart 例子展示了如何继承ViewGroup作为自定义view的一部分。PieChart 有子views,但是它从来不测量它们。而是根据他自身的layout法则,直接设置它们的大小。

  1. ContentProvider(乐视)

http://blog.csdn.net/coder_pig/article/details/47858489
https://www.jianshu.com/p/f5ec75a9cfea

  1. fragment 生命周期

    image.png
  2. volley 解析(美团、乐视)

https://www.jianshu.com/p/15e6209d2e6f

  1. Android Glide 源码解析

http://blog.csdn.net/guolin_blog/article/details/53759439

  1. Android 属性动画特性(乐视、小米)

https://www.jianshu.com/p/8076fe970a0c

  1. Handler 机制及底层实现

http://blog.csdn.net/lmj623565791/article/details/38377229

  1. Binder 机制及底层实现

http://blog.csdn.net/weijinqian0/article/details/52233529

Java 基础

  1. 接口的意义(百度)

1、重要性:在Java语言中, abstract class 和interface 是支持抽象类定义的两种机制。正是由于这两种机制的存在,才赋予了Java强大的 面向对象能力。

2、简单、规范性:如果一个项目比较庞大,那么就需要一个能理清所有业务的架构师来定义一些主要的接口,这些接口不仅告诉开发人员你需要实现那些业务,而且也将命名规范限制住了(防止一些开发人员随便命名导致别的程序员无法看明白)。

3、维护、拓展性:比如你要做一个画板程序,其中里面有一个面板类,主要负责绘画功能,然后你就这样定义了这个类。可是在不久将来,你突然发现这个类满足不了你了,然后你又要重新设计这个类,更糟糕是你可能要放弃这个类,那么其他地方可能有引用他,这样修改起来很麻烦。

如果你一开始定义一个接口,把绘制功能放在接口里,然后定义类时实现这个接口,然后你只要用这个接口去引用实现它的类就行了,以后要换的话只不过是引用另一个类而已,这样就达到维护、拓展的方便性。

4、安全、严密性:接口是实现软件松耦合的重要手段,它描叙了系统对外的所有服务,而不涉及任何具体的实现细节。这样就比较安全、严密一些(一般软件服务商考虑的比较多)。

  1. 抽象类的意义(乐视)

抽象类往往用来表征对问题领域进行分析、设计中得出的抽象概念,是对一系列看上去不同,但是本质上相同的具体概念的抽象。具体分析如下:

1.因为抽象类不能实例化对象,所以必须要有子类来实现它之后才能使用。这样就可以把一些具有相同属性和方法的组件进行抽象,这样更有利于代码和程序的维护。

2.当又有一个具有相似的组件产生时,只需要实现该抽象类就可以获得该抽象类的那些属性和方法。

  1. 内部类的作用(百度,乐视)

定义:放在一个类的内部的类我们就叫内部类。

作用:

1.内部类可以很好的实现隐藏,一般的非内部类,是不允许有 private 与protected权限的,但内部类可以

2.内部类拥有外围类的所有元素的访问权限

3.可是实现多重继承

4.可以避免修改接口而实现同一个类中两种同名方法的调用。

  1. 父类的静态方法能否被子类重写,为什么?(猎豹)

父类的静态方法是不能被子类重写的,其实重写只能适用于实例方法,不能用于静态方法,对于上面这种静态方法而言,我们应该称之为隐藏。

Java静态方法形式上可以重写,但从本质上来说不是Java的重写。因为静态方法只与类相关,不与具体实现相关。声明的是什么类,则引用相应类的静态方法(本来静态无需声明,可以直接引用)。并且static方法不是后期绑定的,它在编译期就绑定了。换句话说,这个方法不会进行多态的判断,只与声明的类有关。

  1. 举 1-2 个排序算法,并使用 java 代码实现(美团)

  2. 列举 java 的集合和继承关系(百度、美团)

  3. java 虚拟机的特性(百度、乐视)

Java语言的一个非常重要的特点就是与平台的无关性。而使用Java虚拟机是实现这一特点的关键。一般的高级语言如果要在不同的平台上运行,至少需要编译成不同的目标代码。而引入Java语言虚拟机后,Java语言在不同平台上运行时不需要重新编译。Java语言使用模式Java虚拟机屏蔽了与具体平台相关的信息,使得Java语言编译程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。Java虚拟机在执行字节码时,把字节码解释成具体平台上的机器指令执行。

  1. 哪些情况下的对象会被垃圾回收机制处理掉(乐视、美团、小米)

Java 垃圾回收机制最基本的做法是分代回收。内存中的区域被划分成不同的世代,对象根据其存活的时间被保存在对应世代的区域中。一般的实现是划分成3个世代:年轻、年老和永久。内存的分配是发生在年轻世代中的。当一个对象存活时间足够长的时候,它就会被复制到年老世代中。对于不同的世代可以使用不同的垃圾回收算法。进行世代划分的出发点是对应用中对象存活时间进行研究之后得出的统计规律。一般来说,一个应用中的大部分对象的存活时间都很短。比如局部变量的存活时间就只在方法的执行过程中。基于这一点,对于年轻世代的垃圾回收算法就可以很有针对性。
(1)超出对象的引用句柄的作用域时,这个引用句柄引用的对象就变成垃圾。

(2)没有超出对象的引用句柄的作用域时,给这个引用句柄赋值为空时,这个引用句柄引用的对象就变成垃圾。

(3)创建匿名对象时,匿名对象用完以后即成垃圾。

  1. 进程和线程的区别(猎豹)

进程和线程都是一个时间段的描述,是CPU工作时间段的描述,不过是颗粒大小不同。

  1. 简而言之,一个程序至少有一个进程,一个进程至少有一个线程.

  2. 线程的划分尺度小于进程,使得多线程程序的并发性高。

  3. 另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。

  4. 线程在执行过程中与进程还是有区别的。每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。

  5. 从逻辑角度来看,多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。但操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理以及资源分配。这就是进程和线程的重要区别。

  1. Java 中==和 equals 的区别, equals 和 hashCode 的区别(乐视)

http://blog.csdn.net/tiantiandjava/article/details/46988461

  1. ArrayList 和 HashMap 的实现原理(美团,百度)

https://www.jianshu.com/p/f174d49b391c

  1. java 中 int char long 各占多少字节数

short 2个字节
int 4个字节
long 8个字节

  1. java int 与 integer 的区别

http://blog.csdn.net/chenliguan/article/details/53888018

  1. string stringbuffer stringbuilder 区别(小米、乐视、百度)

String:适用于少量的字符串操作的情况
StringBuilder:适用于单线程下在字符缓冲区进行大量操作的情况(非线程安全)
StringBuffer:适用多线程下在字符缓冲区进行大量操作的情况(线程安全)
在大部分情况下 StringBuilder > StringBuffer
https://www.cnblogs.com/su-feng/p/6659064.html

  1. Java 多态(乐视)
    http://blog.csdn.net/Jian_Yun_Rui/article/details/52937791

  2. 什么导致线程阻塞(58、美团)
    http://blog.csdn.net/sinat_22013331/article/details/45740641

  3. 抽象类接口区别(360)
    https://www.cnblogs.com/yongjiapei/p/5494894.html

  4. 容器类之间的区别(乐视、美团)
    https://www.cnblogs.com/sunliming/archive/2011/04/05/2005957.html

  5. Java 中 HashMap 和 HashTable 的区别(乐视、小米)
    https://www.cnblogs.com/lchzls/p/6714335.html
    http://blog.csdn.net/u012050154/article/details/50905364

  6. ArrayMap VS HashMap
    http://blog.csdn.net/vansbelove/article/details/52422087

数据结构与算法

  1. 堆和栈在内存中的区别是什么(数据结构方面以及实际实现方面)

  2. 最快的排序算法是哪个?给阿里 2 万多名员工按年龄排序应该选择哪个算法?堆和树的区别;写出快排代码;链表逆序代码(阿里)

  3. 求 1000 以内的水仙花数以及 40 亿以内的水仙花数(百度)

  4. 子串包含问题(KMP 算法)写代码实现

  5. 万亿级别的两个 URL 文件 A 和 B,如何求出 A 和 B 的差集 C,(Bit 映射->hash 分组->多文件读写效率->磁盘寻址以及应用层面对寻址的优化)

  6. 蚁群算法与蒙特卡洛算法

  7. 写出你所知道的排序算法及时空复杂度,稳定性(小米)

其他

  1. 死锁的四个必要条件

1)互斥条件,即某个资源在一段时间内只能由一个线程占有,不能同时被两个或两个以上的线程占有

2)不可抢占条件,线程所获得的资源在未使用完毕之前,资源申请者不能强行地从资源占有者手中夺取资源,而只能由该资源的占有者线程自行释放

3)占有且申请条件,线程至少已经占有一个资源,但又申请新的资源;由于该资源已被另外线程占有,此时该线程阻塞;但是,它在等待新资源之时,仍继续占用已占有的资源。

4)循环等待条件,存在一个线程等待序列{P1,P2,…,Pn},其中P1等待P2所占有的某一资源,P2等待P3所占有的某一源,……,而Pn等待P1所占有的的某一资源,形成一个线程循环等待环

解决死锁的办法:加锁顺序,死锁检测

  1. 常见编码方式; utf-8 编码中的中文占几个字节;数字几个字节

一个utf8数字占1个字节,一个utf8英文字母占1个字节,少数是汉字每个占用3个字节,多数占用4个字节。

  1. 实现一个 Json 解析器(可以通过正则提高速度)

 1String json = "{name:\"jason\",father:\"jason\",age:18}";
2//name:"jason"
3//age:18
4//\"\\w+\" 字符串属性
5Pattern p = Pattern.compile("\\w+:(\"\\w+\"|\\d*)");
6Matcher m = p.matcher(json);
7while(m.find()){
8    String text = m.group();
9    int dotPos= text.indexOf(":");
10    String key = text.substring(0, dotPos);
11    String value = text.substring(dotPos+1, text.length());
12    //替换字符串的开始结束的双引号
13    value = value.replaceAll("^\\\"|\\\"$", "");
14    System.out.println(key);
15    System.out.println(value);
16}
  1. Android App 的设计架构: MVC,MVP,MVVM 与架构经验谈(搜狐)

  2. 写出观察者模式的代码

  3. TCP 的 3 次握手和四次挥手; TCP 与 UDP 的区别

http://blog.csdn.net/whuslei/article/details/6667471

2、TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付

3、TCP面向字节流,实际上是TCP把数据看成一连串无结构的字节流;UDP是面向报文的

4、每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信

5、TCP首部开销20字节;UDP的首部开销小,只有8个字节

6、TCP的逻辑通信信道是全双工的可靠信道,UDP则是不可靠信道

  1. HTTP 协议; HTTP1.0 与 2.0 的区别;HTTP 报文结构

  2. HTTP 与 HTTPS 的区别以及如何实现安全性

https://www.jianshu.com/p/be7a20cc8468

本人做android开发多年,以后会陆续更新关于android高级UI,NDK开发,性能优化等文章,更多请关注我的微信公众号:谢谢!


以上是关于阿里,腾讯和百度的互联网大数据应用有何不同的主要内容,如果未能解决你的问题,请参考以下文章

阿里,百度,腾讯等一线互联网公司中,Java开发的招聘标准

腾讯,阿里,百度哪个厉害?

中心化存储淡出市场,分布式存储开启万亿蛋糕

百度、阿里、腾讯、华为,智慧交通领域的终战即将被引爆?

预见未来—— 互联网大数据应用 商业计划书

国内各大互联网公司相关技术博客3.0版 (集合腾讯阿里百度搜狐新浪网易360等共29个)