科技新闻

小打卡PRD

情到浓时终转凉″ 提交于 2020-02-28 12:02:47
/*--> */ /*--> */ 1.介绍 目标:打造一款不同于市场上的公开打卡 app 的产品 理念:通过监督和鼓励,和相同圈子的人一起互相鼓励、分享及监督,共同进步。 优点: 模板消息通知,网上基本通过小程序中逻辑层 JS 完成推送的请求,小打卡在通知方面采用服务器端异步任务推送,使用了高性能分布式内存队列系统 BEANSTALKD ,来实现模板消息的异步定时推送。 数据库方面,因为要实现每月、每周或者指定时间段的打卡排名系统这个功能,目前数据库单张数据表已经超过几十万条数据记录,通过数据库查询排名统计不可行。这里需要用到 Redis 高性能数据库来缓存数据,并采用 Redis 的 zset 有序集合来进行不同方面的排序和查询 2.功能模块: 3.前端设计: 3.1首页交互设计 点击头像 会toast登陆成功 创建一个新的打卡按钮跳转至新建打卡页 点击我管理的打卡的回收箱在打卡旁边生成删除、取消按钮并隐藏打卡/已打卡按钮,点击取消按钮隐藏删除、取消按钮并恢复打卡、已打卡按钮,再次点击回收箱隐藏删除、取消按钮并恢复打卡/已打卡按钮 点击我管理的打卡列表/我参加的打卡/打卡按钮 跳转至 打卡详情页 打卡按钮打卡成功后变成“已打卡”并灰化 3.2新建打卡页交互设计 可以输入活动标题 开始结束时间为两个选项,点指定开始结束日期时会在下面显示 出开始日期:日期选择器&结束日期

RabbitMQ 整合 SpringCloud实战

泪湿孤枕 提交于 2020-02-28 10:27:22
RabbitMQ 整合 SpringCloud实战 RabbitMQ 整合 SpringCloud实战 rabbitmq-common 子项目 rabbitmq-springcloud-consumer 子项目 rabbitmq-springcloud-producer 子项目 RabbitMQ 整合 SpringCloud实战 注意一点,在发送消息的时候对 template 进行配置 mandatory=true 保证监听有效 生产端还可以配置其他属性,比如发送重试,超时时间、次数、间隔等 消费端核心配置: 首先配置手工确认模式,用于ACK的手工处理,这样我们可以保证消息的可靠性送达,或者在消费端消费失败的时候可以做到重回队列、根据业务记录日志等处理; 可以设置消费端的监听个数和最大个数,用于控制消费端的并发情况 @RabbitListener注解的使用: 消费端监听@RabbitListener注解,这个对于在实际工作中非常的好用 @RabbitListener是一个组合注解,里面可以注解配置(@QueueBinding、@Queue、@Exchange)直接通过这个组合注解一次性搞定消费端交换机、队列、绑定、路由、并且配置监听功能等 注:由于类配置写在代码里非常不友好,所以强烈建议大家使用配置文件配置 <ignore_js_op> rabbitmq-common 子项目

runOnUiThread更新主线程

旧巷老猫 提交于 2020-02-28 07:55:38
更新UI采用Handle+Thread,需要发送消息,接受处理消息(在回调方法中处理),比较繁琐。除此之外,还可以使用runOnUiThread方法。 利用Activity.runOnUiThread(Runnable)把更新ui的代码创建在Runnable中,然后在需要更新ui时,把这个Runnable对象传给Activity.runOnUiThread(Runnable)。 Runnable对像就能在ui程序中被调用。如果当前线程是UI线程,那么行动是立即执行。如果当前线程不是UI线程,操作是发布到事件队列的UI线程。 实现的功能与 上一篇文章 (Handler+Thread)相同。 public class TestActivity extends Activity { Button btn; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.handler_msg); btn = (Button) findViewById(R.id.button1); btn.setOnClickListener(new

JAVA多线程之先行发生原则

最后都变了- 提交于 2020-02-28 07:37:45
一、引子     如果java内存模型中所有的有序性都仅仅依靠volatile和synchronized来完成,那么有一些操作会变得很繁琐,但我们在编写java并发代码时并未感觉到这一点,这是因为java语言中有个先行发生原则(happens-before),通过这个原则,我们可以通过几条规则一揽子解决并发环境下两个操作之间是否可能存在冲突的所有问题。 二、定义   先行发生是java内存模型中定义的两项做错之间的偏序关系,如果说操作A先行发生与操作B,其实就是说在发生操作B之前,操作A产生的影响能被操作B观察到,“影响”包括修改了内存中共享变量的值、发送了消息、调用了方法等。 三、规则   java内存模型中“天然的”的先行发生关系规则如下:   1、程序次序规则:     在一个线程内,按照程序代码顺序,,书写在前面的操作先行发生于书写在后面的操作,准确的说,应该是控制流程序而不是程序代码顺序,因为要考虑分支、循环等结构;   2、管程锁规则:     一个unlock操作先行发生于后面对同一个锁的lock操作,这里必须强调的是同一个锁,“后面”指的是时间上的先后顺序。   3、volatile变量规则:     对一个volatile变量的写操作先行发生于后面对这个变量的读操作,“后面”同样是时间上的先后顺序。   4、线程启动规则:     Thread对象的start(

新浪微博 发微博消息的处理

六眼飞鱼酱① 提交于 2020-02-28 07:33:58
1.普通小众用户 采用pull推送模式 往粉丝消息队列里分别异步推送消息ID。 lpush和 lpop 使用。模拟栈数据结构。先进后出。 lpush user:1 1001 lrange user:1 1 10 取出10条最新消息 同理:微信朋友圈。也可以这办。展示的时候取最近的数据。 2 微博大V粉丝都有500w+,发微博时,数据到底是怎么处理的? 之前了解, 微博一个大V 粉色都有500w+的粉丝, 他每更新一条微博, 都必须推送到关注着的阅读列表中,听说刚开始一次性推送到所有粉丝的列表中,后来用信息队列,先直接发还给用户自己,在异地队列分发给所有在线的用户,然后再出来未登陆的用户, 想问下,这么大的数据量就算异步处理也有很大难度啊。哪个大神知道他的具体数据结构设计和架构设计 好像是综合PUSH和PULL模式。 对于大V用户,采用PULL模式,他发表一条微博,就放在自己的MAIL BOX里。然后他的粉丝登陆后将主动去MAIL BOX里PULL数据,这种情况计算开销会增加,但存储开销极大下降。 另外对于热门用户、热门微博,这些都是热数据,会跟冷数据区别对待的,具体处理方法比如缓存。 二线互联网公司。做缓存大多是redis。丰富的数据结构。可以模拟多种数据结构。适用各种业务场景。以及kafka等消息中间件。异步处理问题。加快相应时间。 一线互联网。缓存和消息中间件大多是自研的产品

微信小助手 2.4 mac版 微信消息防撤回及微信多开的好帮手 中文版

北慕城南 提交于 2020-02-28 04:37:48
微信小助手 2.4 微信消息防撤回及微信多开的好帮手 中文版 微信小助手 for Mac是一款mac微信消息防撤回、禁止微信更新、微信多开、微信窗口置顶、微信免认证登录、禁用微信内置浏览器多功能集于一体的工具集。 软件下载: https://macstore.info/a/weichat-assisant.html 同时支持自定义回复和AI自动撩妹 腾讯AI人工智能(ZZ)自动回复, 能理解上下文语义, 在收到指定对象消息后的5~8秒内自动回复消息(大部分情况下比较智能, 偶尔智障). 自定义自动回复 手机端也能收到被撤回的消息 如果Mac拦截到A发送来的消息, 手机也会同步收到的这条已经拦截的消息(自己发送给自己). 目前只支持同步文字消息与图片消息, 其他类型也可以做, 但意义不大. 可以对同步的消息进行筛选, 以免群消息打扰 免认证登录与多开 消息防撤回 显示小程序详情 Alfred 确保你电脑中有安装Alfred, 双击此文件进行安装. 退群监控 退群提醒, 同一人在同一群里的退出提醒7天内不再重复提示. 屏蔽更新 勾选"禁止更新"后, 微信检测更新的逻辑会被屏蔽掉, 包括手动"检查更新"的按钮. 取消勾选"禁止更新"后并重启微信, 则恢复原有更新检测逻辑. 来源: CSDN 作者: shrug211 链接: https://blog.csdn.net/shrug211

微信公众号实现无限制推送模板消息之免开发的玩法!

女生的网名这么多〃 提交于 2020-02-28 04:16:45
不知道大家会不会因为服务号4次推送机会用完,又遇到老板施压,让发布重要消息,而苦恼? 经过我苦心搜索,找到了一个解决方法!原理就是,利用公众号模板消息,给粉丝推送。 作为运营同学,大多是不会技术的,所以,这个方法,不需要开发,就可以免费模板消息群发!没有48小时的限制,只要是该公众号的粉丝,都可以群发 一、什么是模板消息? 模板消息是微信服务号采用的一种卡片通知形式,包含一些相关的信息,在固定模板下,填写不同的文案后推送。 超强跳转:跳转到指定页面(小程序,链接),产品得到曝光 用户留存:粉丝可以快捷查看,必要的信息(比如商品是否发货等),增强了粘性 降低成本:向指定粉丝推送消息,不用选择发短信打电话等 二、模板消息在哪里用? 在官方的公众号后台 ① 点击【添加功能插件】添加,开通(申请过的,请忽略) ② 进入模板库选择自己本行业的模板(最多25个) 三、借助免开发工具,群发模板消息 进入芝麻小客服后台(位置:群发消息--模板消息群发) ① 选择已和服务号同步的模板 ② 设置模板消息内容(自定义,颜色),分享一个可以直接填 写颜色的地方 ③ 选择跳转效果 跳转链接:如果打开后出现签名错误,请将链接转换为短网址后再试。 跳转小程序:填写小程序的APPID和路径,小程序必须跟公众号保持关联过。 不跳转:可以不任何跳转选项,此时粉丝将看到一个不可点击的提醒通知。 ④ 群发对象

何时使用不同的日志级别

我怕爱的太早我们不能终老 提交于 2020-02-28 04:15:34
按死亡顺序记录消息有不同的方法: FATAL ERROR WARN INFO DEBUG TRACE 我如何决定何时使用哪个? 什么是一个很好的启发式使用? #1楼 我建议采用Syslog严重性级别: DEBUG, INFO, NOTICE, WARNING, ERROR, CRITICAL, ALERT, EMERGENCY 。 请参见 http://en.wikipedia.org/wiki/Syslog#Severity_levels 它们应该为大多数用例提供足够的细粒度严重性级别,并且可以被现有的日志解析器识别。 虽然您当然可以自由地实施一个子集,例如 DEBUG, ERROR, EMERGENCY 具体取决于您的应用程序的要求。 让我们标准化已经存在多年的东西,而不是为我们制作的每个不同的应用程序提出我们自己的标准。 一旦开始聚合日志并尝试检测不同模式的模式,它确实有帮助。 #2楼 您可以从中恢复的警告。 错误你不能。 这是我的启发式,其他人可能有其他想法。 例如,假设您在应用程序中输入/导入名称 "Angela Müller" (请注意 u 的变音符号)。 您的代码/数据库可能只有英文版(虽然它可能 不 应该在这个时代),因此可以警告所有“不寻常”的字符都已转换为普通英文字符。 与此相反,尝试将该信息写入数据库并将网络关闭消息直接返回60秒。 这更像是一个错误

三十七、QT之日志输出

偶尔善良 提交于 2020-02-28 03:15:46
1.创建自定义消息处理器,并注册到系统 在项目的 main.cpp 中设置日志输出 # include "widget.h" # include <QApplication> # include <QMutex> # include <QFile> # include <QDateTime> # include <QTextStream> //消息处理器 QtMessageHandler defaultHandler = NULL ; void outputMessage ( QtMsgType type , const QMessageLogContext & context , const QString & msg ) { QString text ; switch ( type ) { case QtDebugMsg : text = QString ( "Debug:" ) ; break ; case QtInfoMsg : text = QString ( "Info:" ) ; break ; case QtWarningMsg : text = QString ( "Warning:" ) ; break ; case QtCriticalMsg : text = QString ( "Critical:" ) ; break ; case QtFatalMsg

Beats:使用Elastic Stack监控RabbitMQ

旧巷老猫 提交于 2020-02-28 02:31:50
RabbitMQ是一个开放源消息代理,创建于2007年以实现AMQP,并且在过去的十二年中,通过不断增加的插件列表,它已包括HTTP,STOMP,SMTP和其他协议。它也是Kafka的一个强劲的竞争者。在今天的文章中,我们将详述如何使用Elastic Stack来监控RabbitMQ。 RabbitMQ简介 RabbitMQ是消息队列软件,也称为消息代理或队列管理器。 简单地说; 它是定义队列的软件,应用程序连接到该队列以传输一条或多条消息。 一条消息可以包含任何种类的信息。 例如,它可能具有有关应在另一个应用程序(甚至可能在另一个服务器上)上启动的过程或任务的信息,或者可能只是一条简单的文本消息。 队列管理器软件存储消息,直到接收应用程序连接并从队列中取出消息为止。 接收应用程序然后处理该消息。 消息队列的基本体系结构很简单-有一些称之为生产者(producers)的客户端应用程序,它们可以创建消息并将其传递到代理(消息队列)。 其他应用程序(称为消费者,也即consumers)连接到队列并订阅要处理的消息。 软件可以充当消息的生产者或消费者,或者既充当消息的消费者又充当生产者。 存储在队列中的消息将被存储,直到消费者检索到它们为止。 在下面我们来具体介绍如何使用Elastic Stack来把我们想要的RabbitMQ日志导入到Elastic Stack中,并对日志进行分析。