精华内容
下载资源
问答
  • uniapp日期转几分钟前、几小时前 //datetime 格式为2019-11-22 12:23:59样式 timeago = (datetime) => { //dateTimeStamp是一个时间毫秒,注意时间戳是秒的形式,在这个毫秒的基础上除以1000,就是十位数的时间戳...

    uniapp日期转几分钟前、几小时前

    //datetime 格式为2019-11-22 12:23:59样式
    timeago = (datetime) => { //dateTimeStamp是一个时间毫秒,注意时间戳是秒的形式,在这个毫秒的基础上除以1000,就是十位数的时间戳。13位数的都是时间毫秒。
    	var dateTimeStamp = new Date(datetime.replace(/ /, 'T')).getTime()-8 * 60 * 60 * 1000;//这里要减去中国的时区8小时
    	var minute = 1000 * 60; //把分,时,天,周,半个月,一个月用毫秒表示
    	var hour = minute * 60; 
    	var day = hour * 24;
    	var week = day * 7;
    	var halfamonth = day * 15;
    	var month = day * 30;
    	var now = new Date().getTime(); //获取当前时间毫秒
    	var diffValue = now - dateTimeStamp; //时间差
    	
    	if (diffValue < 0) {
    		console.log("diffValue<0",datetime,dateTimeStamp,now,diffValue);
    		return '刚刚';
    	}
    	var minC = diffValue / minute; //计算时间差的分,时,天,周,月
    	var hourC = diffValue / hour;
    	var dayC = diffValue / day;
    	var weekC = diffValue / week;
    	var monthC = diffValue / month;
    	var result = "2";
    	if (monthC >= 1 && monthC <= 3) {
    		result = " " + parseInt(monthC) + "月前"
    	} else if (weekC >= 1 && weekC <= 3) {
    		result = " " + parseInt(weekC) + "周前"
    	} else if (dayC >= 1 && dayC <= 6) {
    		result = " " + parseInt(dayC) + "天前"
    	} else if (hourC >= 1 && hourC <= 23) {
    		result = " " + parseInt(hourC) + "小时前"
    	} else if (minC >= 1 && minC <= 59) {
    		result = " " + parseInt(minC) + "分钟前"
    	} else if (diffValue >= 0 && diffValue <= minute) {
    		result = "刚刚"
    	} else {
    		var datetime = new Date();
    		datetime.setTime(dateTimeStamp);
    		var Nyear = datetime.getFullYear(); {}
    		var Nmonth = datetime.getMonth() + 1 < 10 ? "0" + (datetime.getMonth() + 1) : datetime.getMonth() + 1;
    		var Ndate = datetime.getDate() < 10 ? "0" + datetime.getDate() : datetime.getDate();
    		var Nhour = datetime.getHours() < 10 ? "0" + datetime.getHours() : datetime.getHours();
    		var Nminute = datetime.getMinutes() < 10 ? "0" + datetime.getMinutes() : datetime.getMinutes();
    		var Nsecond = datetime.getSeconds() < 10 ? "0" + datetime.getSeconds() : datetime.getSeconds();
    		result = Nyear + "-" + Nmonth + "-" + Ndate
    	}
    	return result;
    }
    
    
    展开全文
  • 阿里面试官没想到一个HashMap,我能跟他扯半小时

    万次阅读 多人点赞 2019-12-10 00:11:08
    互联网一线大厂HashMap是面试最常问的集合了,你确定你回答这么全面?

    你知道的越多,你不知道的越多

    点赞再看,养成习惯

    本文 GitHub https://github.com/JavaFamily 上已经收录,有一线大厂面试点思维导图,也整理了很多我的文档,欢迎Star和完善,大家面试可以参照考点复习,希望我们一起有点东西。

    前言

    作为一个在互联网公司面一次拿一次Offer的面霸,打败了无数竞争对手,每次都只能看到无数落寞的身影失望的离开,略感愧疚(请允许我使用一下夸张的修辞手法)。

    于是在一个寂寞难耐的夜晚,我痛定思痛,决定开始写互联网技术栈面试相关的文章,希望能帮助各位读者以后面试势如破竹,对面试官进行360°的反击,吊打问你的面试官,让一同面试的同僚瞠目结舌,疯狂收割大厂Offer!

    所有文章的名字只是我的噱头,我们应该有一颗谦逊的心,所以希望大家怀着空杯心态好好学,一起进步。

    正文

    一个婀娜多姿,穿着衬衣的小姐姐,拿着一个精致的小笔记本,径直走过来坐在我的面前。

    看着眼前这个美丽的女人,心想这不会就是Java基础系列的面试官吧,真香。

    不过看样子这么年轻应该问不出什么深度的吧,嘻嘻。(哦?是么😏)

    小伙子,听前面的面试官说了,你Redis和消息队列都回答得不错,看来还是有点东西。

    美丽迷人的面试官您好,您见笑了,全靠看了敖丙的《吊打面试官》系列,不然我还真的回答不上很多原本的知识盲区,他真的有点东西。

    面试官心想:哦,吊打面试官是么,那今天我就让你知道,吊打这两个字怎么写的吧,年轻人啊,提前为你感到惋惜。

    嗯嗯小帅比,虽然前面的技术栈没啥太大的瑕疵,不过未来很长的一段时间我会用一期期的基础教你做人的,你要准备好哟!

    好了我们开始今天的面试吧,小伙子你了解数据结构中的HashMap么?能跟我聊聊他的结构和底层原理么?

    切,这也太看不起我了吧,居然问这种低级问题,不过还是要好好回答。

    嗯嗯面试官,我知道HashMap是我们非常常用的数据结构,由数组和链表组合构成的数据结构。

    大概如下,数组里面每个地方都存了Key-Value这样的实例,在Java7叫Entry在Java8中叫Node。

    因为他本身所有的位置都为null,在put插入的时候会根据key的hash去计算一个index值。

    就比如我put(”帅丙“,520),我插入了为”帅丙“的元素,这个时候我们会通过哈希函数计算出插入的位置,计算出来index是2那结果如下。

    hash(“帅丙”)= 2

    你提到了还有链表,为啥需要链表,链表又是怎么样子的呢?

    我们都知道数组长度是有限的,在有限的长度里面我们使用哈希,哈希本身就存在概率性,就是”帅丙“和”丙帅“我们都去hash有一定的概率会一样,就像上面的情况我再次哈希”丙帅“极端情况也会hash到一个值上,那就形成了链表。

    每一个节点都会保存自身的hash、key、value、以及下个节点,我看看Node的源码。

    说到链表我想问一下,你知道新的Entry节点在插入链表的时候,是怎么插入的么?

    java8之前是头插法,就是说新来的值会取代原有的值,原有的值就顺推到链表中去,就像上面的例子一样,因为写这个代码的作者认为后来的值被查找的可能性更大一点,提升查找的效率。

    但是,在java8之后,都是所用尾部插入了。

    为啥改为尾部插入呢?

    这!!!这个问题,面试官可真会问!!!还好我饱读诗书,不然死定了!

    有人认为是作者随性而为,没啥luan用,其实不然,其中暗藏玄机

    首先我们看下HashMap的扩容机制:

    帅丙提到过了,数组容量是有限的,数据多次插入的,到达一定的数量就会进行扩容,也就是resize。

    什么时候resize呢?

    有两个因素:

    • Capacity:HashMap当前长度。
    • LoadFactor:负载因子,默认值0.75f。

    怎么理解呢,就比如当前的容量大小为100,当你存进第76个的时候,判断发现需要进行resize了,那就进行扩容,但是HashMap的扩容也不是简单的扩大点容量这么简单的。

    扩容?它是怎么扩容的呢?

    分为两步

    • 扩容:创建一个新的Entry空数组,长度是原数组的2倍。
    • ReHash:遍历原Entry数组,把所有的Entry重新Hash到新数组。

    为什么要重新Hash呢,直接复制过去不香么?

    卧槽这个问题!有点知识盲区呀!

    1x1得 1 1x2 得 2 …. 有了,我想起来敖丙那天晚上在我耳边的话了:假如我年少有为不自卑,懂得什么是珍贵,那些美梦没给你,我一生有愧….什么鬼!

    小姐姐:是因为长度扩大以后,Hash的规则也随之改变。

    Hash的公式---> index = HashCode(Key) & (Length - 1)

    原来长度(Length)是8你位运算出来的值是2 ,新的长度是16你位运算出来的值明显不一样了。

    扩容前:

    扩容后:

    说完扩容机制我们言归正传,为啥之前用头插法,java8之后改成尾插了呢?

    卧槽,我以为她忘记了!居然还是被问到了!

    我先举个例子吧,我们现在往一个容量大小为2的put两个值,负载因子是0.75是不是我们在put第二个的时候就会进行resize?

    2*0.75 = 1 所以插入第二个就要resize了

    现在我们要在容量为2的容器里面用不同线程插入A,B,C,假如我们在resize之前打个短点,那意味着数据都插入了但是还没resize那扩容前可能是这样的。

    我们可以看到链表的指向A->B->C

    Tip:A的下一个指针是指向B的

    因为resize的赋值方式,也就是使用了单链表的头插入方式,同一位置上新元素总会被放在链表的头部位置,在旧数组中同一条Entry链上的元素,通过重新计算索引位置后,有可能被放到了新数组的不同位置上。

    就可能出现下面的情况,大家发现问题没有?

    B的下一个指针指向了A

    一旦几个线程都调整完成,就可能出现环形链表

    如果这个时候去取值,悲剧就出现了——Infinite Loop。

    诶卧槽,小伙子难不倒他呀!

    小伙子有点东西呀,但是你都都说了头插是JDK1.7的那1.8的尾插是怎么样的呢?

    因为java8之后链表有红黑树的部分,大家可以看到代码已经多了很多if else的逻辑判断了,红黑树的引入巧妙的将原本O(n)的时间复杂度降低到了O(logn)。

    Tip:红黑树的知识点同样很重要,还是那句话不打没把握的仗,限于篇幅原因,我就不在这里过多描述了,以后写到数据结构再说吧,不过要面试的仔,还是要准备好,反正我是经常问到的。

    使用头插会改变链表的上的顺序,但是如果使用尾插,在扩容时会保持链表元素原本的顺序,就不会出现链表成环的问题了。

    就是说原本是A->B,在扩容后那个链表还是A->B

    Java7在多线程操作HashMap时可能引起死循环,原因是扩容转移后前后链表顺序倒置,在转移过程中修改了原来链表中节点的引用关系。

    Java8在同样的前提下并不会引起死循环,原因是扩容转移后前后链表顺序不变,保持之前节点的引用关系。

    那是不是意味着Java8就可以把HashMap用在多线程中呢?

    我认为即使不会出现死循环,但是通过源码看到put/get方法都没有加同步锁,多线程情况最容易出现的就是:无法保证上一秒put的值,下一秒get的时候还是原值,所以线程安全还是无法保证。

    小伙子回答得很好嘛,这都被你回答道了,面试这么多人都不知道头插和尾插,还是被你说出来了,可以可以。

    面试官谬赞啊,要不是你这样美若天仙的面试官面试我,我估计是想不起来了。

    我*,你套近乎?

    小姐姐抿嘴一笑,小子你offer有了,耶稣都带不走你,我说的!

    那我问你HashMap的默认初始化长度是多少?

    我记得我在看源码的时候初始化大小是16

    你那知道为啥是16么?

    卧*,这叫什么问题啊?他为啥是16我怎么知道???你确定你没逗我?

    我努力回忆源码,不知道有没有漏掉什么细节,以前在学校熬夜看源码的一幕幕在脑海里闪过,想起那个晚上在操场上,跟我好了半个月的小绿拉着我的手说:你就要当爸爸了。

    等等,这都是什么鬼,哦哦哦,想起来了!!!

    在JDK1.8的 236 行有1<<4就是16,为啥用位运算呢?直接写16不好么?

    我再次陷入沉思,疯狂脑暴,叮!

    有了!

    面试官您好,我们在创建HashMap的时候,阿里巴巴规范插件会提醒我们最好赋初值,而且最好是2的幂。

    这样是为了位运算的方便,位与运算比算数计算的效率高了很多,之所以选择16,是为了服务将Key映射到index的算法。

    我前面说了所有的key我们都会拿到他的hash,但是我们怎么尽可能的得到一个均匀分布的hash呢?

    是的我们通过Key的HashCode值去做位运算。

    我打个比方,key为”帅丙“的十进制为766132那二进制就是 10111011000010110100

    我们再看下index的计算公式:index = HashCode(Key) & (Length- 1)

    15的的二进制是1111,那10111011000010110100 &1111 十进制就是4

    之所以用位与运算效果与取模一样,性能也提高了不少!

    那为啥用16不用别的呢?

    因为在使用不是2的幂的数字的时候,Length-1的值是所有二进制位全为1,这种情况下,index的结果等同于HashCode后几位的值。

    只要输入的HashCode本身分布均匀,Hash算法的结果就是均匀的。

    这是为了实现均匀分布

    哟小家伙,知道的确实很多,那我问你个问题,为啥我们重写equals方法的时候需要重写hashCode方法呢?

    你能用HashMap给我举个例子么?

    这都能被他问到,还好我看了敖丙的系列呀,不然真的完了!!!

    但是我想拖延点时间,只能故做沉思,仰望天空片刻,45°仰望天空的样子,说实话,我看到面试官都流口水了!可惜我是他永远得不到的男人,好了不装逼了。

    我想起来了面试官!

    因为在java中,所有的对象都是继承于Object类。Ojbect类中有两个方法equals、hashCode,这两个方法都是用来比较两个对象是否相等的。

    在未重写equals方法我们是继承了object的equals方法,那里的 equals是比较两个对象的内存地址,显然我们new了2个对象内存地址肯定不一样

    • 对于值对象,==比较的是两个对象的值
    • 对于引用对象,比较的是两个对象的地址

    大家是否还记得我说的HashMap是通过key的hashCode去寻找index的,那index一样就形成链表了,也就是说”帅丙“和”丙帅“的index都可能是2,在一个链表上的。

    我们去get的时候,他就是根据key去hash然后计算出index,找到了2,那我怎么找到具体的”帅丙“还是”丙帅“呢?

    equals!是的,所以如果我们对equals方法进行了重写,建议一定要对hashCode方法重写,以保证相同的对象返回相同的hash值,不同的对象返回不同的hash值。

    不然一个链表的对象,你哪里知道你要找的是哪个,到时候发现hashCode都一样,这不是完犊子嘛。

    可以可以小伙子,我记得你上面说过他是线程不安全的,那你能跟我聊聊你们是怎么处理HashMap在线程安全的场景么?

    面试官,在这样的场景,我们一般都会使用HashTable或者ConcurrentHashMap,但是因为前者的并发度的原因基本上没啥使用场景了,所以存在线程不安全的场景我们都使用的是ConcurrentHashMap。

    HashTable我看过他的源码,很简单粗暴,直接在方法上锁,并发度很低,最多同时允许一个线程访问,ConcurrentHashMap就好很多了,1.7和1.8有较大的不同,不过并发度都比前者好太多了。

    那你能跟我聊聊ConcurrentHashMap么?

    好呀,不过今天天色已晚,我觉得我们要不改天再约?

    再说最近敖丙好像双十二比较忙,一次怎么能怼这么多呢?

    好吧好吧,小伙子还挺会为别人着想,而且还喜欢这么优秀的作者,你我觉得来日可期,那我们改日再约,今天表现很好,希望下次能保持住!

    总结

    HashMap绝对是最常问的集合之一,基本上所有点都要烂熟于心的那种,篇幅和时间的关系,我就不多介绍了,核心的点我基本上都讲到了,不过像红黑树这样的就没怎么聊了,但是不代表不重要。

    篇幅和精力的原因我就介绍到了一部分的主要知识点,我总结了一些关于HashMap常见的面试题,大家问下自己能不能回答上来,不能的话要去查清楚哟。

    HashMap常见面试题:

    • HashMap的底层数据结构?

    • HashMap的存取原理?

    • Java7和Java8的区别?

    • 为啥会线程不安全?

    • 有什么线程安全的类代替么?

    • 默认初始化大小是多少?为啥是这么多?为啥大小都是2的幂?

    • HashMap的扩容方式?负载因子是多少?为什是这么多?

    • HashMap的主要参数都有哪些?

    • HashMap是怎么处理hash碰撞的?

    • hash的计算规则?

    白嫖不好,创作不易,各位的点赞就是丙丙创作的最大动力,我们下篇文章见,文末图片有福利

    持续更新,未完待续……


    文章每周持续更新,可以微信搜索「 三太子敖丙 」第一时间阅读,回复【资料】【面试】有我准备的一线大厂面试资料和文章,本文 GitHub https://github.com/JavaFamily 已经收录,有大厂面试完整考点,欢迎Star。

    你知道的越多,你不知道的越多

    展开全文
  • 数据中台被誉为大数据的下站,由阿里兴起,核心思想是数据共享,2015年阿里提出“大中台,小前台”的策略。2018 年因为“腾讯数据中台论”,中台再度成为了人们谈论的焦点。 2019年,似乎人人都在提数据中台,但...

    数据中台被誉为大数据的下一站,由阿里兴起,核心思想是数据共享,2015年阿里提出“大中台,小前台”的策略。2018 年因为“腾讯数据中台论”,中台再度成为了人们谈论的焦点。

    2019年,似乎人人都在提数据中台,但却不是所有人都清楚数据中台到底意味着什么。数据中台是只有大厂才需要考虑的高大上的概念吗?普通企业该不该做数据中台?数据中台的出现会给现有数据从业者们带来颠覆式的挑战吗?

    数据中台不是大数据平台!

    首先它不是一个平台,也不是一个系统,如果有厂商说他们有个数据中台卖给你,对不起,它是个骗子。

    要回答数据中台是什么,首先要探讨一下中台到底是什么。虽然没有明确的定义,但是作为理工直男,我们可以先把中台看作是一种中间层。既然是一种中间层,那么中台确实是一种十足技术用语,我们可以完全从技术角度来探讨了。

    我们可以应用 Gartner 的 Pace Layer 来理解为什么要有中间层,这样可以更好地理解中台的定位和价值。Pace Layer 里提到,可以按照事物变化的速度来分层,这样可以逐层分析并设计合理的边界与服务。

    我花10个小时,写出了小白也能看懂的阿里数据中台分析

     

    在数据开发中,核心数据模型的变化是相对缓慢的,同时,对数据进行维护的工作量也非常大;但业务创新的速度、对数据提出的需求的变化,是非常快速的。

    数据中台的出现,就是为了弥补数据开发和应用开发之间,由于开发速度不匹配,出现的响应力跟不上的问题。

    数据中台解决的问题可以总结为如下三点:

    1. 效率:为什么应用开发增加一个报表,就要十几天时间?为什么不能实时获得用户推荐清单?当业务人员对数据产生一点疑问的时候,需要花费很长的时间,结果发现是数据源的数据变了,最终影响上线时间。
    2. 协作问题:当业务应用开发的时候,虽然和别的项目需求大致差不多,但因为是别的项目组维护的,所以数据还是要自己再开发一遍。
    3. 能力问题:数据的处理和维护是一个相对独立的技术,需要相当专业的人来完成,但是很多时候,我们有一大把的应用开发人员,而数据开发人员很少。

    这三类问题都会导致应用开发团队变慢。这就是中台的关键——让前台开发团队的开发速度不受后台数据开发的影响。

    数据中台是聚合和治理跨域数据,将数据抽象封装成服务,提供给前台以业务价值的逻辑概念。

    如下图所示:

    我花10个小时,写出了小白也能看懂的阿里数据中台分析

     

    DData API 是数据中台的核心,它是连接前台和后台的桥梁,通过 API 的方式提供数据服务,而不是直接把数据库给前台、让前台开发自行使用数据。至于产生 DataAPI 的过程,怎么样让 DataAPI 产生得更快,怎么样让 DATA API 更加清晰,怎么样让 DATA API 的数据质量更好,这些是要围绕数据中台去构建的能力。

    其实这些概念说多了是很虚的,那我们就结合阿里的例子来讲解。

    阿里数据中台详解

    1、阿里数据中台赋能业务全景图

    我花10个小时,写出了小白也能看懂的阿里数据中台分析

     

    在架构图中,看到最下面的内容主要是数据采集和接入,按照业态接入数据(比如淘宝、天猫、盒马等),把这些数据抽取到计算平台;通过OneData体系,以“业务板块+分析维度”为架构去构建“公共数据中心”。

    基于公共数据中心在上层根据业务需求进行建设:消费者数据体系、企业数据体系、内容数据体系等。

    经过深度加工后,数据就可以发挥其价值被产品、业务所用;最后通过统一的数据服务中间件“OneService”提供统一数据服务。

    2、阿里数据中台三大体系

    我花10个小时,写出了小白也能看懂的阿里数据中台分析

     

    经过多年实战,沉淀出了阿里云上数据中台内核能力框架体系:产品+技术+方法论。

    历经阿里生态内各种实战历练后,云上数据中台从业务视角而非纯技术视角出发,智能化构建数据、管理数据资产,并提供数椐调用、数据监控、数据分析与数据展现等多种服务。

    承技术启业务,是建设智能数据和催生数据智能的引擎。在OneData、OneEntity、OneService三大体系,特别是其方法论的指导下,云上数据中台本身的内核能力在不断积累和沉淀。在阿里巴巴,几乎所有人都知道云上数据中台的三大体系,如上图所示。

    OneData致力干统一数据标准,让数据成为资产而非成本;OneEntity致力于统一实体,让数据融通而以非孤岛存在;OneService致力于统一数据服务,让数据复用而非复制。

    这三大体系不仅有方法论,还有深刻的技术沉淀和不断优化的产品沉淀,从而形成了阿里巴巴云上数据中台内核能力框架体系。

    3、阿里数据中台及赋能业务模式支撑

    我花10个小时,写出了小白也能看懂的阿里数据中台分析

     

    阿里数据中台,经历了所有阿里生态内业务的考验,包括新零售、金融、物流、营销、旅游、健康、大文娱、社交等领域。

    数据中台除了建立起自已的内核能力之外,向上赋能业务前台,向下与统一计算后台连接,融为一体。

    4、数据中台六大数据技术领域

    我花10个小时,写出了小白也能看懂的阿里数据中台分析

     

    前文提到,在建设阿里数据公共层之初,规划了六大数据技术领域,即数据模型领域、存储治理领域、数据质量领域、安全权限领域、平台运维领域、研发工程领域。

    而在阿里数据公共层建设项目第二阶段完成存储治理领域,已经被扩大到资源治理领域,进而升级到数据资产管理领域,安全权限领域,升级到数据信任领域,因为很多工作已经在产品中实现,平台运维领域不再作为一个数据技术领域被推进,数据模型领域与数据质量领域还在持续推进中,不过增加了许多新的内涵,智能黑盒领域则是新起之秀。

    由此可见,数据技术领域不是一成不变的,而是随着业务的发展和技术的突破不断扩大、 升华的。

    那么,实时的数据中台怎么做?

    下面是实现实时数据中台的一种逻辑架构,方便你去理解,其实最关键的是实时模型那一层。

    我花10个小时,写出了小白也能看懂的阿里数据中台分析

     

    1、实时接入:

    不同类型的数据需要不同的接入方式,flume+kafka现在是标配,其他还有文件、数据库的DSG等等技术。比如运营商就有B域的订购、通话,O域的位置、上网等各类实时数据。

    2、计算框架:

    这里只列出一种,基于Kappa架构实现实时/离线一体化业务开发能力,相对于传统Lambda架构,开发人员只需面对一个框架,开发、测试和运维的难度都相对较小,且能充分发挥Flink流式计算框架一点执行、高吞吐、毫秒级响应、批流融合的特点。

    比如将流计算组件划分实时数据切片,批处理组件提供离线数据模型(驻留内存),两类数据在处理过程中实现批流关联。

    3、实时模型:

    跟数据仓库模型一样,实时模型肯定首先是面向业务的,比如运营商有流量运营、服务提醒、竞争应对、放好拉新、厅店引流、语音消费、运营评估、实时关怀、实时预警、实时洞察、实时推荐等一系列的实时场景,你总是要基于你的实时业务提炼出具备共性的数据模型要素。

    比如放号拉新中的外来务工实时营销,其中可能的触发场景是针对漫入到某个交通枢纽并驻留10分钟以上的用户进行营销投放,“在某个位置的驻留时长”这个公共要素可能就是一种可复用的实时模型。

    实时模型纵向可以划分为DWD和DW两层,DWD模型做的其实是针对各类实时数据做命名的标准化和过滤字段的操作,方便进行数据的标准化管理,DW模型这里分成了三大类:动态模型、事件模型和时序模型,每种模型适合不同的场景,同时需要采用与之适配的存储格式。

    动态模型:对实时的数据进行汇总统计,适合做实时的统计指标分析,比如实时的业务办理量,一般可存储于Kafka和Hbase。

    事件模型:把实时的数据抽象成一系列业务事件,比如从位置日志轨迹中记录用户的位置变更事件,从而可以触发LBS的位置营销,以下是典型的位置事件模型设计,一般可存储于MQ和Redis:

    我花10个小时,写出了小白也能看懂的阿里数据中台分析

     

    你也可以设计滑动窗口模型,比如保存最新一小时的分钟级的滑动窗口位置信息:

    我花10个小时,写出了小白也能看懂的阿里数据中台分析

     

    时序模型:主要保存用户的在线的时空位置等信息,可以基于业务场景需要进行各种快速的计算,比如非常方便的计算驻留时长,存储于Hbase或TSDB(时序数据库):

    我花10个小时,写出了小白也能看懂的阿里数据中台分析

     

    4、实时服务

    有了实时模型还不够,数据中台还需要提供图形化、流程化、可编排的数据开发工具,才能真正的降低实时数据开发成本。但由于离线和实时数据处理的技术手段不同,导致针对这两种类型的数据开发和管理大多是在不同的平台承载的。

    比如以前我们的离线数据模型是通过DACP平台管理的,但实时数据则游离在DACP平台之外,其往往属于应用本身的一部分,应用需要通过编写特定脚本去消费和处理流处理引擎中的原生数据,这种处理的门槛不仅高,而且资源浪费也挺严重,每个实时应用其实都是流数据的孤岛。

    站在应用的角度看,业务其实需要的是一个统一的数据开发管理平台,离线和实时数据应作为统一的对象进行管理,比如具备混合编排,混合关联等能力,用简单的类SQL定制化输出应用所需的各类数据,从而高效的对外提供实时/离线数据服务。

    我花10个小时,写出了小白也能看懂的阿里数据中台分析

     

    5、实时应用

    数据中台如果能支持实时数据的快速编排,根据我们的测算,其实时场景应用的数据开发、测试、部署周期会由0.5-1个月降低为1-2天,效益是很高的。

    阿里处理的数据量已达EB级,相当于10亿部高清电影的存储量。在 2016年双十一当天,实时计算处理的数据量达到9400万条/秒。而从用户产生数据源头采集、整合并构速数据、提供数据服务,到前台展现完成仅需2.5秒。

    "友盟+”是阿里把收购的几家数据公司整合升级后,组成的一家数据公司。这里仅以2017年“友盟+”对外公开的部分指标为例,其中的数据覆盖14亿部活跃设备、685 万家网站、135万个应用程序,日均处理约280亿条数据,这一切都建立在阿里强大的数据处理技术底座之上。

    如果实时数据足够多,场景足够丰富,建立实时数据中台的必要性还是非常高的。

    随着大数据内外运营的深入,我们发现这种需求越来越多,你会惊奇的发现,很多时候需求是随着你技术能力的加强而增加的,很多时候,技术就是第一生产力。我们很多负责变现的产品、运营经理应是深有体会的。

    从那个时候起,我就在想我们能否建立一个真正的实时数据中台,能够快速高效的创建海量的实时应用,从而将大数据的管理和应用水平提升到一个新的阶段,终于我们现在走到了这条路上。

    展开全文
  • Teamviewer一直是远程协助很好用的软件,安装的时候选择免费许可,画面和速度都有保障,是一个办公利器,但是随着国内代理公司的跟进,这一款远程协助软件免费许可限制的越发疯狂。 teamviewer软件前期免费许可可以...

    Teamviewer一直是远程协助很好用的软件,安装的时候选择免费许可,画面和速度都有保障,是一个办公利器,但是随着国内代理公司的跟进,这一款远程协助软件免费许可限制的越发疯狂。

    teamviewer软件前期免费许可可以一直免费使用,只要不是商用,连接几个小时都没有问题,

    长时间使用会有商用限制,不过万能破解大神,提供了很多的破解版本,让用户可以免费使用。

    但是随着国内代理的加入,免费许可直接被限制在5分钟以内,超过5分钟直接掉线。

    但是这次限制风波来临,这些破解大神也爱莫能助,因为这是官方在服务器中检查连接时间,对比付费用户信息,不是付费用户直接提醒如上信息,升级版本,

    有网友不堪掉线骚扰,想付费但是这个一个月148的费用,价格太高,性价比太差,很多网友表示一个月30-40月都可以接受,但这一个月148不可以。

    难道就没有别的软件进行远程协助了吗,下面我们推荐2款产品:一款向日葵;

    一款是anydesk。

    两款软件都可以使用,免去5分钟就掉线的烦恼。如果你发现还有更好用的远程协助软件请留言

     

    源于:http://3g.163.com/news/article_cambrian/EFJCAAPD05421SCS.html

    展开全文
  • 本文借助easyx库函数(提供下载链接),很方便地用C语言实现了鼠标、按钮、进度条、坐标尺等操作,为普通C程序的友好人机交互界面提供了种简单便捷的方案。
  • MySQL 面试题

    万次阅读 多人点赞 2019-09-02 16:03:33
    当年,我们记着几一定要掌握的重心: 重点的题目添加了【重点】前缀。 索引。 锁。 事务和隔离级别。 因为 MySQL 还会有部分内容和运维相关度比较高,所以本文我们分成两部分【开发】【运维】两部分。 对于...
  • 浦发银行 信息科技岗 面经...1、即兴演讲(结构化面试 3面试官对6学生):每人随机题,思考两分钟后,回答三分钟 今年即兴演讲环节已取消!!! 2、上机测试:道编程题,较为基础,在线编译器只有C、C++和Ja...
  • ubuntu使用教程

    万次阅读 多人点赞 2020-01-15 17:53:05
    Ubuntu(乌班图)是一个基于Debian的以桌面应用为主的Linux操作系统,据说其名称来自非洲南部祖鲁语或科萨语的“ubuntu”一词,意思是“人性”、“我的存在是因为大家的存在”,是非洲传统的一种价值观。 Ubuntu的...
  • 如何获取一个本地服务器上可用的端口? 流量控制相关问题。 数据库TPS是多少,是否进行测试过? 缓存击穿有哪些方案解决? Java怎么挖取回收器相关原理? Java的集合都有哪些,都有什么特点? 分布式锁,...
  • 福田区在辖区14站点开通出入境自助办证一体机,以前需要周时间办理的港澳个人游签注,现在只需3分钟办理。据悉,目前,深圳已有22地点提供港澳通行证自助签注服务。 “24小时”自助办证和“立等可取
  • 因为最近的一个项目需要,类似于发帖回帖的功能,需要用到此贴发布于多少分钟前,几小时之前这种时间描述,以前在网上随便找了一个例子,发现在手机端H5页面中,ios和android对其有不用的解释,android总会解释正确,而ios却...
  • Linux实用教程(第版)

    万次阅读 多人点赞 2019-08-27 22:55:59
    章 Linux系统初步了解 本章内容 1.1 Linux系统简介 1.2 Linux系统的特点和组成 1.3 Linux版本介绍 1.4 Red Hat Linux系统概述 1.1 Linux系统简介 1.1.1 什么是Linux 1.1.2 Linux系统的产生 1.1.3 Linux...
  • 如何快速成为一个运维工程师

    万次阅读 多人点赞 2018-05-24 16:08:49
    首先先看图:下面是运维工程师至少要能做以下的工作:1,网络工程师的工作你至少要配置CISCO 6509以下的设备,熟悉各种网络协议,否则网络出问题的时候你会傻掉。2,系统工程师的工作你至少要理解各种系统服务,在...
  • 19跨考中科大计算机408经验贴

    万次阅读 多人点赞 2019-03-20 11:08:57
    本科双非,专业是信息与计算科学,跨考中科大计算机科学技术专业,408里只学了本数据结构,另外本书自学,本科没项目,英语没什么基础,高中不学英语 考研成绩: 总分383,数124,政治69,英语73,408专业...
  • C#基础教程-c#实例教程,适合初学者

    万次阅读 多人点赞 2016-08-22 11:13:24
    章 C#语言基础 本章介绍C#语言的基础知识,希望具有C语言的读者能够基本掌握C#语言,并以此为基础,能够进一步学习用C#语言编写window应用程序和Web应用程序。当然仅靠章的内容就完全掌握C#语言是不可能的,...
  • 解决Win10一分钟后重启问题

    千次阅读 2018-12-23 11:58:06
    大早起来出去吃早餐,然后带着充满斗志的心情回来,按下电脑的开机键,准备奋斗了… 窝草,怎么这么卡,等了一分钟,终于打开了主页面,不容易啊。图标怎么刷新这么慢,刷不出来??? 3,2,1… 股凉意来...
  • 这篇文章是我今天刚好看到的,还没有读完,但是与上周读的《异类》一书属于同一类思想体系,都系统的研究了如何成为一个领域的专家,原来专家也不是那么遥远,要的就是用正确的高效率的方法,积累、重复、练习,...
  • 博主说:如何做好一个 CTO 真的很重要,这不仅决定着一个公司的技术领导力,更决定着一个公司的技术氛围与成长潜力。 正文陈斌,易宝支付 CTO,历任新加坡航空公司高级系统分析师、日立美国系统集成总监、Abacus ...
  • 2019独角兽企业重金招聘Python工程师标准>>> ...
  • 其实学习是件很私人的事情,每人都应该有套自己的学习方式,而不是照搬照抄别人的。适合别人的不一定适合自己。所以,读这篇分享的时候,请以种【这点是不是对我有帮助】的心态来阅读,而不是【原来我要这样...
  • 一个人做饭有哪些推荐?

    万次阅读 2016-07-13 15:19:32
    Chen Sam ,一个空号。 355 人赞同 -- 2015.12.28. 一个圣诞节长周末多了100个赞..What's going on here..感恩。 有同学私信说需要详细步骤的做饭教程,但是这里篇幅太局限了..如果开一个微信公众号什么...
  • 阿里员工 1 天有 26 个小时,怎么回事?

    万次阅读 多人点赞 2020-01-15 14:47:37
    据说阿里员工 1 天有 26 小时,真的吗? 答案就藏着阿里同学的日常工作中。 阿里人天的工作日常,是场办公黑科技展,更是部“时间减史”。 今天,我们就来号称“宇宙西厂”的阿里巴巴西溪园区逛逛,亲身...
  • 一般情况下不会出现如题所示的问题,既然出现...表示java得到的时间比当前系统时间提前了8个小时,那么我们就要想办法把java得到的时间向后推迟8个小时。解决的办法是: 1、找到你用的jre文件夹,以本机为例:C:\Pr...
  • 效果还是很明显的,呵呵,现在给出另外种解决方案 package cn.zj.project; import java.text.SimpleDateFormat; import java.util.Calendar; public class TestGetTime { public static void main...
  • 罗永浩:谢谢大家。我本来在台上习惯把手背到...今天给大家分享的是我从手机以来到今天这么一个创业历程,大家知道我前几次的演讲都是讲的英语培训,后来发现讲手机这块是非常非常艰难的,因为我们跟手机相关的这块
  • SQL语句查询最近几年和几月的数据select DateAdd(Month,-3,getdate()) –返回一个时间,根据这个时间点去查询想要的数据即可–DateAdd函数的详细说明:–DateAdd(interval, number, date)–interval 必选。...
  • 最近面试了一个31岁8年经验的程序猿,让我有点感慨,大龄程序猿该何去何从。
  • 一个屌丝程序猿的人生(一百一十七)

    千次阅读 热门讨论 2020-07-03 23:41:19
    现在公司里王立新是他的狗腿子,刘舒婷又只是实习的妹子,你说现在关头他想表现勤奋,他不找你他还找谁?”  听完程佳丽的话之后,林萧这才恍然大悟。  原本上次林萧不小心删库,程刚靠实力力挽狂澜,这
  • 全球化背景下的超20多国家地区共同实施的SAP项目概览
  • 除夕之夜,Acme银行的数据库管理员(DBA)John正在和他的...幸好开发团队找出了错误所在,并开发一个应急纠正模块,但这一纠正模块不恢复已经造成的破坏。部门经理问John是否有什么方法往回倒一些时间,将数据库恢

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 49,954
精华内容 19,981
关键字:

以前一个小时能做现在3分钟