用户接口

消息推送

冷暖自知 提交于 2019-12-05 02:46:19
一个不具备消息推送功能的APP不能称之为APP,消息推送是产品和运营人员常用用户运营工具。消息推送的目的在于: 通知某件事已发生。如支付成功的扣款提醒,发货提醒等等。 通知平台有什么东西,促进用户进入查看或参与,提升平台活跃、转化和留存。如某条资讯,某个打折活动。 APP推送从是否有前置触发条件看,分为2类: 业务推送,需要触发某个业务逻辑后,程序自动完成推送。如上文提到的发货提醒,程序监控到订单已经产生运单号或已出库,会主动给用户发推送。 营销推送,无前置触发条件,运营人员促进用户转化、活跃、留存为目的而发的非业务推送。如某个抽奖活动,目的在于引导用户打开APP来参与。 对于不同手机操作系统,Android和iOS的消息推送流程有差异,下面分别来介绍。 一、Android推送流程 开发者一般直接使用第三方推送平台服务来完成。当然你也可以选择自己开发一套消息推送方案,这是技术性很强、复杂度很高的项目,大公司可尝试,中小企业就不要想了。从在技术投入、人力成本、实现速度以及最终的效果来看,专业的第三方推送服务商是更好的选择。 Android的消息推送流程如下: 运营人员按照运营目标,确定推送对象和内容。这里的推送对象可以是不同维度的,设备id、账号、标签等。推送对象的数量称为“发送总数”。 推送对象和内容给到第三方推送平台后,并不是直接下发,而是对发送对象对应的设备做有效性筛选

Java中如何更优雅的处理空值

眉间皱痕 提交于 2019-12-05 02:30:54
本文来源:https://lrwinx.github.io/ 经常看到项目中存在到处空值判断的情况,这些判断,会让人觉得摸不着头绪,它的出现很有可能和当前的业务逻辑并没有关系。但它会让你很头疼。有时候,更可怕的是系统因为这些空值的情况,会抛出空指针异常,导致业务系统发生问题。 此篇文章总结了几种关于空值的处理手法 业务中的空值 场景 存在一个UserSearchService用来提供用户查询的功能: public interface UserSearchService{ List<User> listUser(); User get(Integer id); } 问题现场 对于面向对象语言来讲,抽象层级特别的重要。尤其是对接口的抽象,它在设计和开发中占很大的比重,我们在开发时希望尽量面向接口编程。 对于以上描述的接口方法来看,大概可以推断出可能它包含了以下两个含义: listUser(): 查询用户列表 get(Integer id): 查询单个用户 在所有的开发中,XP推崇的TDD模式可以很好的引导我们对接口的定义,所以我们将TDD作为开发代码的”推动者”。 对于以上的接口,当我们使用TDD进行测试用例先行时,发现了潜在的问题: listUser() 如果没有数据,那它是返回空集合还是null呢? get(Integer id) 如果没有这个对象,是抛异常还是返回null呢?

mybatis实战教程(mybatis in action),mybatis入门到精通

倖福魔咒の 提交于 2019-12-05 00:33:50
转自: http://www.yihaomen.com/article/java/302.htm (读者注:其实这个应该叫做很基础的入门一下下,如果你看过Hibernate了那这个就非常的简单) (再加一条,其实大家可以看官方的教程更好些: http://mybatis.github.io/mybatis-3/ ,而且如果英文不是很好的那就看中文的: http://mybatis.github.io/mybatis-3/zh/sqlmap-xml.html ) 写在这个系列前面的话: 以前曾经用过ibatis,这是mybatis的前身,当时在做项目时,感觉很不错,比hibernate灵活。性能也比hibernate好。而且也比较轻量级,因为当时在项目中,没来的及做很很多笔记。后来项目结束了,我也没写总结文档。已经过去好久了。但最近突然又对这个ORM 工具感兴趣。因为接下来自己的项目中很有可能采用这个ORM工具。所以在此重新温习了一下 mybatis, 因此就有了这个系列的 mybatis 教程. 什么是mybatis MyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis使用简单的XML或注解用于配置和原始映射,将接口和Java的POJOs(Plan Old Java

关于网络存储技术和存储的协议

本秂侑毒 提交于 2019-12-04 21:43:04
关于网络存储技术和存储的协议 网络存储技术 网络存储技术(Network Storage Technologies)是基于数据存储的一种通用网络术语。网络存储结构大致分为三种: 直连式存储(DAS:Direct Attached Storage)、网络存储设备(NAS:Network Attached Storage)和存储网络(SAN:Storage Area Network)。 直连式存储(DAS) 这是一种直接与主机系统相连接的存储设备,如作为服务器的计算机内部硬件驱动。到目前为止,DAS 仍是计算机系统中最常用的数据存储方法。 DAS即直连方式存储,英文全称是Direct Attached Storage。中文翻译成“直接附加存储”。顾名思义,在这种方式中,存储设备是通过电缆(通常是SCSI接口电缆)直接到服务器的。I/O(输入/输出)请求直接发送到存储设备。DAS,也可称为 SAS(Server-Attached Storage,服务器附加存储) 。它依赖于服务器,其本身是硬件的堆叠,不带有任何存储操作系统。 网络存储设备(NAS) NAS 是一种采用直接与网络介质相连的特殊设备实现数据存储的机制。由于这些设备都分配有 IP 地址,所以客户机通过充当数据网关的服务器可以对其进行存取访问,甚至在某些情况下,不需要任何中间介质客户机也可以直接访问这些设备。 最大存储容量

.NET Core前后端分离快速开发框架(Core.3.0+AntdVue)

喜欢而已 提交于 2019-12-04 19:49:11
.NET Core前后端分离快速开发框架(Core.3.0+AntdVue) 目录 引言 简介 环境搭建 开发环境要求 基础数据库构建 数据库设计规范 运行 使用教程 全局配置 快速开发 管理员登录 系统用户管理 系统角色管理 权限管理 接口秘钥管理 系统日志 单库事务 跨库事务 读写分离分库分表 常见疑问 如何进行联表查询 如何切换数据库类型 如何使用多个数据库 引言 时间真快,转眼今年又要过去了。回想今年,依次开源发布了 Colder.Fx.Net.AdminLTE(254Star) 、 Colder.Fx.Core.AdminLTE(335Star) 、 DotNettySocket(82Star) 、 IdHelper(47Star) ,这些框架及组件都是本着以实际出发,实事求是的态度,力求提高开发效率(我自己都是第一个使用者),目前来看反响不错。但是随着前端和后端技术的不断变革,尤其是前端,目前大环境已经是前后端完全分离为主的开发模式,在这样的大环境和必然趋势之下,传统的MVC就显得有些落伍了。在这样的背景下,一款前后端分离的.NET开发框架就显得尤为必要,由此便定了框架的升级目标: 前后端分离 。 首先后端技术的选择,从目前的数据来看,.NET Core的发展远远快于.NET Framework,最简单的分析就是Colder.Fx.Core

后台权限验证功能测试

喜你入骨 提交于 2019-12-04 19:49:00
功能模块缩略图 测试用例 用户 用户状态 测试接口1 接口类型 测试接口2 接口类型 测试接口2 接口类型 无 匿名用户 getRegisterUserList 管理接口 getPunchChrat 用户接口 register 匿名接口 201731062631 普通用户 getRegisterUserList 管理接口 getPunchChrat 用户接口 register 匿名接口 201731062632 管理员 getRegisterUserList 管理接口 getPunchChrat 用户接口 register 匿名接口 未登录状态下进行接口请求操作 测试结果:用户在未登录的情况下无法进行接口访问,返回结果为403状态码 普通用户登录状态下进行权限验证 这里返回的role代表了用户所拥有的权限角色。 1:管理员 (拥有用户权限和管理权限) 2:普通用户(拥有用户权限) 3:注册用户(只有注册接口的权限) 用户接口权限测试 管理员权限接口测试 管理员登录状态下进行权限验证 用户接口测试 管理员接口测试 测试结果 用户登录状态 匿名接口(注册接口) 用户接口权限验证 用户管理接口权限验证 未登录(匿名用户) 通过 不通过 不通过 普通用户 通过 通过 不通过 管理员 通过 通过 通过 测试小结 :因为在之前Alpha1版本当中就进行了较多的单元测试

一文详解微服务架构

帅比萌擦擦* 提交于 2019-12-04 13:33:49
本文将介绍微服务架构和相关的组件,介绍他们是什么以及为什么要使用微服务架构和这些组件。本文侧重于简明地表达微服务架构的全局图景,因此不会涉及具体如何使用组件等细节。 要理解微服务,首先要先理解不是微服务的那些。通常跟微服务相对的是单体应用,即将所有功能都打包成在一个独立单元的应用程序。从单体应用到微服务并不是一蹴而就的,这是一个逐渐演变的过程。本文将以一个网上超市应用为例来说明这一过程。 最初的需求 几年前,小明和小皮一起创业做网上超市。小明负责程序开发,小皮负责其他事宜。当时互联网还不发达,网上超市还是蓝海。只要功能实现了就能随便赚钱。所以他们的需求很简单,只需要一个网站挂在公网,用户能够在这个网站上浏览商品、购买商品;另外还需一个管理后台,可以管理商品、用户、以及订单数据。 我们整理一下功能清单: 网站 用户注册、登录功能 商品展示 下单 管理后台 用户管理 商品管理 订单管理 由于需求简单,小明左手右手一个慢动作,网站就做好了。管理后台出于安全考虑,不和网站做在一起,小明右手左手慢动作重播,管理网站也做好了。总体架构图如下: 小明挥一挥手,找了家云服务部署上去,网站就上线了。上线后好评如潮,深受各类肥宅喜爱。小明小皮美滋滋地开始躺着收钱。 随着业务发展…… 好景不长,没过几天,各类网上超市紧跟着拔地而起,对小明小皮造成了强烈的冲击。 在竞争的压力下

javaBean和数据层的DAO设计模式

人盡茶涼 提交于 2019-12-04 10:40:12
jsp:javaBean 一、javaBean简介 javaBean是使用java语言开发的一个人可重用的组件,在jsp开发中可以使用javaBean减少重复的代码,是一种特殊的java类,使用java语言编写,遵循javaBean API规范 优点 将html和java代码分离,这主要是为了日后的维护方便 减少代码重复 在jsp中如果要应用jsp提供的javaBean的标签来操作简单类,则此类要满足以下要求: 所有类都要在一个包中,在web项目中没有包的类时不存在的。 所有类必须是public修饰,这样才能被外界访问。 提供一个默认的无参构造函数。 需要被序列化并且实现了 Serializable 接口。 可能有一系列可读写属性。(可能的意思就是除了private修饰的字段,也可以有其他修饰符修饰的字段,但是必须至少要有一个private修饰的字段) 可能有一系列的 getter 或 setter 方法。 二、在jsp中使用javaBean 一个javaBean编写结束后,需要进行打包编译,那么存放到哪里呢? classes目录保存所有的javaBean,如果不存在则可以手动创建(WEBAPP/WEB-INFO/classes) 引入useBean 打包编译 直接使用javac -d.类名,根据该类的路径的定义来打包编译变为class文件,在web开发中

springboot+swagger接口文档企业实践(上)

£可爱£侵袭症+ 提交于 2019-12-04 10:34:28
tags: springboot swagger doc 一句话概括:对于产品开发,特别是前后端分离的开发模式,接口文档是连接前后端的枢纽,本文对springboot+swagger在企业的实践进行详细描述。 1.引言 在软件开发过程中,接口设计与接口文档编写是重要的一环,特别是在前后端分离的情况下,接口说明文档是开发人员之间的连接点。接口文档的编写有很多方式,可以使用word,也可以使用编写工具如小幺鸡,这些基本属于脱离代码编写的文档,如果接口变化,需要额外修改文档,增加工作量。如何提高写接口文档效率,在springboot开发中,结合swagger来提供接口文档说明是一个很好的实践,通过配置与注解,在编写接口代码过程中,同时也把接口文档写好,接口需要变更时,文档也同时变更,具有工作量少,效率高,接口文档直观简洁,可实时调用验证等好处。本文基本springboot2+swagger2,结合在企业中的实践,对接口文档的编写进行详细说明,具体有如下内容: swagger介绍及文档生成说明 使用springboot2+swagger2构建示例工程及配置描述 使用注解添加文档内容说明 使用全局参数进行接口认证 如需看源码,本文 示例工程地址 : https://github.com/mianshenglee/my-example 2.swagger简介 2.1 swagger 介绍

Jmeter让压测随时做起来(转载)

 ̄綄美尐妖づ 提交于 2019-12-04 08:49:33
为什么要压测 这个问题问的其实挺没有必要的,做开发的同学应该都很清楚,压测的必要性,压力测试主要目的就是让我们在上线前能够了解到我们系统的承载能力,和当前、未来系统压力的提升情况,能够评估出当前系统的承载情况能不能满足当前和未来一段时间的正常运行。压力测试也让架构师和开发人员能够对自己负责的系统做到心中有数,当有大并发需求的活动或者其他突发事件导致的访问暴增,能够提前做好预估和准备应急预案。 压测难点 说了那么多,都是压测的必要性,那么既然要测那么重要,我们每次发版本都做一下压测不就好了,这么说的同学一定是没真正参与过压测的,参与过压测的同学都是谈压测色变,不管是测试人员还是开发人员都很害怕压测。大家为什么这么害怕压测,主要原因主要有下面这些压测的难点导致的: 1)压测环境难准备 在日常工作过程中,我们肯定遇到过压测环境难申请的问题,为什么难申请主要是因为压测一般要求环境和生产环境一致,那么就意味着压测机器资源的稀缺,没有哪家公司会长期准备所有系统的压测环境,毕竟成本太高,所以一般公司都是准备一些机器让所有系统共用压测环境,每次一个系统要做压测之前都要把上一个压测系统的数据和应用版本、中间件、数据库停掉或删掉,这是非常浪费时间的工作,所以很多公司现在在压测的环境准备都使用docker来准备环境,只需要定期更新docker image就可以,这就可以做到快速还原环境