1748847708358317_个人页

个人头像照片 1748847708358317
个人头像照片
0
12
0

个人介绍

暂无个人介绍

擅长的技术

  • Java
获得更多能力
通用技术能力:
  • Java
    中级

    能力说明:

    掌握封装、继承和多态设计Java类的方法,能够设计较复杂的Java类结构;能够使用泛型与集合的概念与方法,创建泛型类,使用ArrayList,TreeSet,TreeMap等对象掌握Java I/O原理从控制台读取和写入数据,能够使用BufferedReader,BufferedWriter文件创建输出、输入对象。

    获取记录:

云产品技术能力:

暂时未有相关云产品技术能力~

阿里云技能认证

详细说明
暂无更多信息

2019年11月

正在加载, 请稍后...
暂无更多信息
  • 回答了问题 2019-11-06

    谁见过mysql中_nextNumberValue()这个函数吗?

    业务要求:查询所有省份: 方法一:distinct排除重复 SELECT DISTINCT(province_code), province_name FROM t_mip_base_area 方法二:group by 根据身份编码分组 SELECT province_code, any_value(province_name) FROM t_mip_base_area GROUP BY province_code
    踩0 评论0
  • 回答了问题 2019-11-06

    请教一下,有没有大牛测试过mongodb的change stream特性?

    Change Stream即变更流,是MongoDB向应用发布数据变更的一种方式。即当数据库中有任何数据发生变化,应用端都可以得到通知。我们可以将其理解为在应用中执行的触发器。至于应用想得到什么数据,以什么形式得到数据,则可以通过聚合框架加以过滤和转换。这点将在后文中讨论。  Change Stream 的原理  我们先来回顾一下MongoDB复制集大致是如何工作的: 应用通过驱动向数据库发起写入请求; 在同一个事务中,MongoDB完成oplog和集合的修改; oplog被其他从节点拉走; 从节点应用得到的oplog,同样在一个事务中完成对oplog和集合的修改; 至此,复制集同步完成。可以发现,整个同步过程是依赖于oplog来进行的。也就是说oplog实际上已经包含了我们需要的所有变更数据。如果观测oplog的变化,是否就能够得到所有变更的数据了呢?对,change stream正是基于这个原理实现的。但事情并没有这么简单!我们来看一下问题有可能出在什么地方。 如何从断点恢复 现实世界中,没有哪个应用是可以不间断运行的。不考虑bug导致的问题,正常的应用升级也会导致应用中断运行。那么在应用恢复的时候,从哪里开始继续获取变更呢?oplog当然是可以帮我们做到这点的,但你必须对MongoDB足够了解,才知道有oplogReplay这样的参数,以及其他一些问题。 如何有效地处理订阅 假设在一个应用中需要订阅10个不同集合的变更情况,是否需要开10个tailable cursor去获取oplog的变更呢?如果是100个集合呢?出于效率考虑显然不应该这么做。那么整个过程就会变成一个生产者-消费者模式,由一个线程负责从oplog获取变更,由订阅的线程负责消费这些变更。虽然实现也不是那么复杂,并且多半可以找到开源实现,但是涉及多线程就已经足够让初学者头疼一阵的了。 公平地说,上面这些还不算严重的问题,下面这些问题可能会更让人头疼。 如何管理权限 想要tail oplog,必须对local.oplog.rs有读权限。实际上这相当于对整个数据库都有了读权限,因为所有的变更都会在这里体现出来。DBA可能会阻止你这么做,因为这实在不是一个很安全的做法。 如何数据回滚 极端情况下,如果应用处理不当,MongoDB中可能发生数据回滚rollback的问题。如果仅仅通过跟踪oplog,则会出现已经通知出去的变更被回滚的情况。 幸运的是上面这些问题现在都不是问题了,因为change stream帮我们规避了这些复杂的细节。 使用方法 由于各种驱动都会有不同的语法和API,从shell中尝试使用change stream可能是最简便的方法。这并不妨碍你随后在各种驱动中的使用,因为shell中能实现的功能在驱动中一定有对应的语法。下面就以shell为例看看change stream应该如何使用。 打开一个shell,订阅你需要关注的集合 比如: var cursor = db.bar.watch(); 为了便于演示,我们在这个shell中不断遍历这个游标以获取新数据: while(true) {    if (cursor.hasNext()) {        print(JSON.stringify(cursor.next()));    } } 打开另一个shell,向bar集合中插入一条数据: db.bar.insert({y: 1}) 此时第一个shell中会立即输出变更数据: {'_id':{'_data': {'$binary':'glzquiIAAAACRmRfaWQAZFzquiK0lDNo+K0DpwBaEARUMrm0ruVACoftuxjt1RtCBA==','$type':'00'}}, 'operationType':'insert','fullDocument':{'_id':{'$oid':'5ceaba22b4943368f8ad03a7'},'y':1},'ns': {'db':'test','coll':'bar'},'documentKey':{'_id':{'$oid':'5ceaba22b4943368f8ad03a7'}}} 这里的一些字段的简单介绍。更完整的介绍请查阅文档change events: _id: 用于恢复断点时使用。即知道这个值,应用断开后下次重启里就可以从这个断点之后开始恢复获得变更; operationType: 操作类型,常见的值包括: insert update delete ns: 正在操作的命名空间 fullDocument: 完整的文档 从断点恢复 var cursor = db.bar.watch([], {resumeAfter: }) 此时使用hasNext()/next()即可获取到随后的变更。
    踩0 评论0
  • 回答了问题 2019-11-06

    RocketMq收不到延时消息

    RocketMQ 支持定时消息,但是不支持任意时间精度,仅支持特定的 level,例如定时 5s, 10s, 1m 等。其中,level=0 级表示不延时,level=1 表示 1 级延时,level=2 表示 2 级延时,以此类推 如何配置 1、可以直接在服务器端的broker.conf中进行配置, 在服务器端(rocketmq-broker端)的属性配置文件中加入以下行: messageDelayLevel=1s 5s 10s 30s 1m 2m 3m 4m 5m 6m 7m 8m 9m 10m 20m 30m 1h 2h 当然这种方式不够灵活,不推荐 2、第二种方式就是在程序中进行指定,这个会在代码中展示,上述的时间配置述了各级别与延时时间的对应映射关系, 这个配置项配置了从1级开始,各级延时的时间,可以修改这个指定级别的延时时间; 时间单位支持:s、m、h、d,分别表示秒、分、时、天; 默认值就是上面声明的,可手工调整; 默认值已够用,不建议修改这个值。 了解了这些基本的概念后,下面通过一段简单的程序演示一下效果,相对于rabbitmq的延迟消息的使用,rocketmq的延迟消息使用起来简单了很多, 3、我们使用一个controller模拟浏览器调用接口发送一个延迟的消息,这里为了演示方便发送消息的操作直接放在了controller里面了,实际开发中不要这样做, @RestController @RequestMapping('/api/order') public class OrderController { //http://localhost:8088/api/v1/order?msg=hello&tag=testtag @Autowired private MsgProducer msgProducer; @Autowired private PayProducer payProducer; /** * @param msg 支付信息 * @param tag 消息二级分类 * @return */ @GetMapping('/order') public Object order(String msg, String tag) throws MQClientException, RemotingException, MQBrokerException, InterruptedException, UnsupportedEncodingException{ Message message = new Message('testTopic',tag, msg.getBytes(RemotingHelper.DEFAULT_CHARSET)); SendResult result = msgProducer.getProducer().send(message); System.out.println('发送响应:MsgId:' + result.getMsgId() + ',发送状态:' + result.getSendStatus()); return JsonData.buildSuccess(); } //http://localhost:8082/api/order/delay?text=hello order /** * 发送延迟消息 * @param text * @return */ @GetMapping('/delay') public Object sendDelayMsg(String text) throws MQClientException, RemotingException, InterruptedException{ Message message = new Message(JmsConfig.TOPIC, 'delay_order',('this is a delay message:' + text).getBytes()); //'1s 5s 10s 30s 1m 2m 3m 4m 5m 6m 7m 8m 9m 10m 20m 30m 1h 2h' message.setDelayTimeLevel(3); payProducer.getProducer().send(message, new SendCallback() { //消息发送成功回调 @Override public void onSuccess(SendResult sendResult) { System.out.printf('发送结果=%s, msg=%s ', sendResult.getSendStatus(), sendResult.toString()); } //消息异常回调 @Override public void onException(Throwable e) { e.printStackTrace(); //补偿机制,根据业务情况进行使用,看是否进行重试 } }); return 'send ok'; } } 2、payProducer类, @Component public class PayProducer { private String producerGroup = 'pay_producer_group'; private DefaultMQProducer producer; public PayProducer(){ producer = new DefaultMQProducer(producerGroup); //生产者投递消息重试次数 producer.setRetryTimesWhenSendFailed(3); //指定NameServer地址,多个地址以 ; 隔开 producer.setNamesrvAddr(JmsConfig.NAME_SERVER); start(); } public DefaultMQProducer getProducer(){ return this.producer; } /** * 对象在使用之前必须要调用一次,只能初始化一次 */ public void start(){ try { this.producer.start(); } catch (MQClientException e) { e.printStackTrace(); } } /** * 一般在应用上下文,使用上下文监听器,进行关闭 */ public void shutdown(){ this.producer.shutdown(); } } 对了,我的rocketmq得服务器地址放在配置类里面了,如下, public class JmsConfig { public static final String NAME_SERVER = '192.168.111.132:9876'; public static final String TOPIC = 'DELAY_TOPIC'; } 基本上就可以了,然后我们启动一下程序,浏览器调用,然后看一下后台打印的日志, http://localhost:8082/api/order/delay?text=hello delayorder
    踩0 评论0
  • 回答了问题 2019-11-06

    关于变更主体的咨询

    可以。
    踩0 评论0
  • 回答了问题 2019-11-06

    阿里云服务器的类型怎么进行区分?

    阿里云服务器分为入门级、通用型、计算型、内存型、大数据型、本地SSD型、高主频计算型、GPU型、FPGA型、弹性裸金属型等多种不同类型。
    踩0 评论0
  • 回答了问题 2019-11-06

    大家对拖动排序有没有好的实现方法

    1.拖拽可以移动item,并且其他item会立即自动补位,快速拖拽也非常流畅 2.item太多时,拖拽到边缘时会自动滚屏. 3.可以自定义被拖拽的的View放大,添加阴影等效果 4.长按启动删除模式,需要自己实现item的删除按钮展示,自己管理删除模式的切换 5.可以放在ScrollView中拖动排序,需要ScrollView继承ListenScrollView,不影响外面控件的大部分事件. 6.可以长按启动item拖拽,也可以触摸直接开始拖动 简单使用方法 dragSortGridView = (DragSortGridView) findViewById(R.id.dragSort1); //长按item响应该item的拖动排序,默认是触摸就开始拖动 dragSortGridView.setDragModel(DragSortGridView.DRAG_BY_LONG_CLICK); dragAdapter = new MyAdapter(); dragSortGridView.setAdapter(dragAdapter); dragAdapter 需要多实现onDataModelMove一个方法,界面排序改变需要提供真实数据排序改变.示例 class MyAdapter extends DragAdapter { @Override public void onDataModelMove(int from, int to) { String s = list.remove(from); list.add(to, s); } @Override public int getCount() { return list.size(); } @Override public String getItem(int position) { return list.get(position); } @Override public long getItemId(int position) { return 0; } @Override public View getView(int position, View convertView, ViewGroup parent) { TextView textView; if (convertView == null) { FrameLayout frameLayout = new FrameLayout(SecondActivity.this); convertView = frameLayout; textView = new TextView(SecondActivity.this); frameLayout.setPadding(20, 20, 20, 20); textView.setPadding(20, 100, 20, 100); frameLayout.addView(textView); textView.setBackgroundColor(0x33ff00ff); textView.setGravity(Gravity.CENTER); } else { textView = (TextView) ((FrameLayout) convertView).getChildAt(0); } textView.setText(getItem(position)); return convertView; } }
    踩0 评论0
  • 回答了问题 2019-11-06

    小程序清除授权

    在支付宝【我的】-【设置】-【安全设置】-【账号授权】里面能看到授权的应用,点进去关闭就行了。 要么接清除缓存重新登录支付宝
    踩0 评论0
  • 回答了问题 2019-11-06

    部署大数据解决方案时应遵循的步骤

    大数据系统部署方法 大数据的部署是个复杂的过程,涉及内容众多,但无论如何都离不开以客户需求为导向。所以我们首先需要从客户的角度去考虑对方的需求,抽取出影响点,如实际运行时大概的数据量,客户的实时性要求怎样,高可用方面的要求如何,如此等等。 进而我们依据上述的要求来考虑硬件的选型、平台软件的版本选择、部署时组件的配合以及组件自身针对业务形态进行的优化配置。 一般来说,对于硬件往往是配置越高越好,但客户往往也关注效费比等经济性方面的问题,因此我们进行大数据部署时也需要寻找一个经济上的均衡点,让硬件能最大效率的发挥出功能和性能。 大数据项目的实施,一般从概念阶段到部署上线主要分为以下几个步骤: 需求分析 首先就需要和使用大数据平台的用户进行充分的沟通,通过沟通了解用户将来运行的上层业务的业务特点以及重点。一般来说,大数据的业务类型基本可分为离线业务和在线业务,离线业务主要为MapReduce,进行数据的分析计算处理;在线业务主要为HBase,HBase对外提供实时的数据查询业务。当然上层业务也可能基于Hive来处理,但Hive实质上还是基于MapReduce。 了解用户业务运行时的数据量,分析数据模型,包括已有的数据量、后续单位时间内增加的数据量,以及用户期望的数据保存时间等要求。 模型设计 基于用户的数据量等信息设计存储和计算模型。 考虑数据的存储方式是通过HDFS进行存储还是通过HBase进行存储,或者两者兼而有之。如果用户的数据较为离散,并且只有存储的简单要求,一般单纯采用HDFS即可满足要求。如果用户数据存在外部查询用途,且实时性要求较高,则可以考虑采用HBase进行存储,通过HBase对外提供在线查询业务。 硬件规划 主要基于用户的需求进行硬件规划、部署设计、以及IP地址的规划。需要考虑每台服务器的单节点的性能要求。如计算要求高,则CPU和内存的配置要求也较高,同时在部署设计上需要把计算节点独立出来,避免存储节点占用过多CPU,导致计算延迟。如存储要求高,则需要加大磁盘的容量,在部署设计上可以多DataNode节点分担文件读写压力,同时将计算节点和DataNode节点合设,以减少服务器数量。 市场上有各种类型的磁盘,性能上存在差异,所以还要考虑磁盘类型的选择,一般来说选用sas盘较多,性能要求较低可考虑sata盘,性能要求较高可考虑采用ssd盘。 另外还可以通过raid来辅助实现磁盘性能的提升以及高可靠性的提升。 同时平台的整体部署离不开高性能网络的支撑,所以网络建议采用万兆网,既可以降低网络部署的复杂性,也可以提高可维护性。特殊情况下,也可以采用多网口绑定的方式,但是往往会大幅提高网络部署的复杂性。 对于实现高可用,我们一般都会对网络采用双网双平面的部署方式,如下图所示(图中略去防火墙等设备,主要保留平台所需的设备)。 干货丨大数据系统部署4大步骤5大原则 软件规划 根据用户的业务,规划采用哪些组件来满足用户的功能要求,并且通过部署来实现业务的高可用,高可扩展。 在各个节点部署服务时,还要注意服务间的依赖关系。如HDFS的QJM方式的HA实现对Zookeeper有依赖。 硬件部署 即完成机架的部署和网络的部署,以及服务器在机架上的部署。如果有raid卡的话还要完成raid卡的设置。 软件部署 当硬件完成部署后,接下来就是部署软件了,包括操作系统的安装配置,以及大数据平台的安装配置。 操作系统安装完后,如果是多网口绑定,那就还需要作网口绑定设置。 然后就是最关键的大数据平台的部署了,中兴通讯自研了一套功能强大的管理系统,可完成大规模的平台部署,同时完成大量节点的部署,自动高效。 为保证大数据系统的稳定可靠运行,在整体部署上应遵循如下隔离原则: 生产环境和测试环境的隔离 系统环境分为生产环境和测试环境。其中生产环境用于实际运营,承载真实业务数据和业务应用;测试环境用于各种功能验证和性能测试等,包括应用在上线前的功能验证。如把两个环境合用,将带来很多不确定性,测试环境容易对生产环境造成干扰,影响生产环境正常业务的提供,甚至测试环境中不成熟的应用和业务运行时可能对环境造成破坏性的影响。因此对两个环境进行物理隔离,两者独立运行,互不干扰,防止因硬件资源的占用或者抢夺对运行造成不必要的影响。 不同集群的隔离 为避免可能存在的机架断电导致集群数据丢失或者停止服务,需要将属于同一个集群的不同节点分别部署到不同的机架上,通过多个机架的方式提供对服务器的承载。每个集群都基于一套独立的HDFS运行,这样从物理上和逻辑上与其他集群都进行了隔离。 在线应用和离线应用的隔离 在大数据平台上运行的应用分为在线应用和离线应用两大类。为保证重点在线应用的正常运行,需要单独规划HBase集群,且该集群基于一套独立的HDFS运行,从物理上和逻辑上和其他集群都进行隔离。 不同在线应用的隔离 对于在线应用,分为一般在线应用和重点在线应用,重点在线应用基于一套独立的HDFS运行,实现物理隔离,用于存储重要的在线数据,保证实时查询服务的持续提供。一般在线应用用于提供普通的HBase查询,对实时性的要求低于重点在线应用,所以可和离线应用部署在一个集群中。 不同应用数据的隔离 集群中的数据都是基于HDFS进行存放的,因此对于属于同一个集群内的应用的数据隔离,可通过设置不同的HDFS目录存放的方式实现不同应用数据的隔离,参见下图: 干货丨大数据系统部署4大步骤5大原则 不同应用属于不同的用户,不同的应用使用不同的目录,然后通过对目录进行权限配置的方式进行隔离和共享。
    踩0 评论0
  • 回答了问题 2019-11-06

    你眼里的大数据是什么?

    对于大多数互联网公司或者工程师而言,大数据实际上只有一个意思,就是把一堆乱七八糟的数据扔到 HDFS 上面然后进行计算。计算的工具有很多,最常见的是 Map-Reduce,但是技术一直在演进,现在还流行 Impala、Spark、Presto 什么的。对于这些搞大数据的工程师而言,这是一个非常好的事情,因为要把这么多异构的数据和系统跑起来,需要很多人写很多代码,还需要有人来做运维。这么一个部门总得需要几十台机器否则还不如单机计算能力强,工程师也得有十来人。然后可能还需要数据分析师,否则这部门跟摆设也没什么区别。如果系统做得不错数据量也有了,总得配个数据科学家搞点数据挖掘或者机器学习什么的吧。所以大数据这件事情可以解决很多就业问题,毕竟很多上了规模的互联网公司都想搞大数据。 但是对于消费者或者互联网所谓的“用户”来说,大数据却是另外一个意思。大数据的意思就是尽可能地搜集跟终端消费者相关的隐私,然后进行营销。从理论上说,大数据公司通过搜集用户行为,可以更好地了解消费者的需求,增强用户体验。但是在实践上,这些所谓的智能推荐还停留在很初级的阶段,因此会有人在淘宝上搜索棺材结果在微博上不停地看到跟丧葬相关的广告。对于微博这样的公司,还意味着它会倾向于通过直接或者间接地暴露你的隐私来获得商业利益。据说,评价一家国内公司的大数据能力是跟被查水表的频繁程度正相关的。就目前而言,大数据对于终端消费者更多的是“被实名”。举一个例子,如果你在 Android 手机上使用 Facebook 账号访问某个 App,那么对不起,你在这个手机上的所有行为都有可能被 Facebook 关联到你真实的身份上。在这种能力上,国内的三巨头排序大概是 T > A >> B。所以最后这家公司的 App 特别流氓甚至超越了数字公司,如果你想帮帮这家公司就多用用他家的地图或者订点外卖。
    踩0 评论0
  • 回答了问题 2019-11-06

    什么是大数据的5V特点?

    大数据的5v特征 大量化Volume :非结构数据的超大规模和增长,总数据的80~90% ,比结构化数据增长快10倍到50倍,是传统数据仓库的10倍到50倍。 价值化Value :大量的不相关信息,对未来趋势与模式的可预测分析,深度复杂分析(机器学习,人工智能vs传统商务智能) 多样化Variety :大数据的异构和多样化,很多不同的形式(文本 图像 视频 机器数据),无模式或者模式不明显,不连贯的语法或句义 快速化Velocity: 实时分析而非批量式分析,数据输入,处理与丢弃,立竿见影而非事后见效。 真实性Veracity:大数据中的内容是与真实世界中的发生息息相关的,研究大数据就是从庞大的网络数据中提取出能够解释和预测现实事件的过程。 一般情况下,大数据是以P8 EB ZB为单位进行计量的 1PB相当于50%的全美学术研究图书馆藏书的信息内容 5EB相当于至今全世界人类所讲过的话语 1ZB如同全世界海滩沙子数量总和 1YB相当于7000位人类体内的微细胞总和
    踩0 评论0
  • 回答了问题 2019-11-06

    大数据分析增加业务收入有什么帮助?

    大数据对企业: 1、实时准确地监控、追踪竞争对手动态,是企业获取竞争情报的利器。 2、及时获取竞争对手的公开信息以便研究同行业的发展与市场需求。 3、为企业决策部门和管理层提供便捷、多途径的企业战略决策工具。 4、大幅度地提高企业获取、利用情报的效率,节省情报信息收集、存储、挖掘的相关费用,是提高企业核心竞争力的关键。 5、提高企业整体分析研究能力、市场快速反应能力,建立起以知识管理为核心的“竞争情报数据仓库”,提高核心竞争力。 大数据对政府机构: 1、实时跟踪、采集与业务工作相关的信息。 2、全面满足内部工作人员对互联网信息的全局观测需求。 3、及时解决政务外网、政务内网的信息源问题,实现动态发布。快速解决政府主网站对各地级子网站的信息获取需求。 4、全面整合信息,实现政府内部跨地区、跨部门的信息资源共享与有效沟通。节约信息采集的人力、物力、时间,提高办公效率。 由此看来,很有帮助。
    踩0 评论0
  • 回答了问题 2019-11-06

    大数据和Hadoop如何相互关联的?

    大数据就是多,就是多。原来的设备存不下、算不动。 ——啪菠萝·毕加索 大数据,不是随机样本,而是所有数据;不是精确性,而是混杂性;不是因果关系,而是相关关系。—— Schönberger 顾名思义“大数据”,从字面意思来理解就是“大量的数据”。 从技术的的角度来解释,大数据就是指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合,是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产。 IBM提出大数据具有5V特点:Volume(大量)、Velocity(高速)、Variety(多样)、Value(低价值密度)、Veracity(真实性)。 我们所谈论的大数据实际上更多是从应用的层面,比如某公司搜集、整理了大量的用户行为信息,然后通过数据分析手段对这些信息进行分析从而得出对公司有利用价值的结果。 比如:头条的推荐机制,就是建立在对海量用户的阅读信息的搜集、分析之上。这就是大数据在现实中具体体现。 那Hadoop又是什么?它和大数据又有什么联系呢? Hadoop是一个对海量数据进行处理的分布式系统架构,可以理解为Hadoop就是一个对大量的数据进行分析的工具,和其他组件搭配使用,来完成对大量数据的收集、存储和计算。 Hadoop框架最核心的设计就是:HDFS 和 MapReduce。 HDFS为海量的数据提供了存储;MapReduce为海量的数据提供了计算。 一套完整的Hadoop大数据生态系统基本包含这些组件。 HDFS:Hadoop分布式文件系统,专门存储超大数据文件,为整个Hadoop生态圈提供了基础的存储服务。 MapReduce:分布式离线计算框架,用来处理大量的已经存储在本地的离线数据。 Storm:分布式实时计算,主要特点是实时性,用来处理实时产生的数据。 ZooKeeper:用于Hadoop的分布式协调服务。Hadoop的许多组件依赖于Zookeeper,它运行在计算机集群上面,用于管理Hadoop操作。 HBase:是一个建立在HDFS之上,面向列的NoSQL数据库,用于快速读/写大量数据。 Hive:基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表。 Sqoop:是一个连接工具,用于在关系数据库、数据仓库和Hadoop之间转移数据。 Pig:它是MapReduce编程的复杂性的抽象。Pig平台包括运行环境和用于分析Hadoop数据集的脚本语言(Pig Latin)。
    踩0 评论0
正在加载, 请稍后...
滑动查看更多
正在加载, 请稍后...
暂无更多信息