发表于: 2020-07-16 22:56:33
1 1401
任务七深度思考
1.什么是Annotation,怎么自定义Annotation,Annotation和XML的优缺点各是什么?
Annotation :注解
自定义注解格式:
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public@interfaceAccessLog{
intlimit()default50;
}
Annotation 比较直观,就和写代码一样,但是自定义的注解同样需要自己去写解析类,可能就麻烦一点。
Xml 文件同样可以进行注入,可以很方便的进行引用,套娃式的对类进行配置,但是问题就是出现了问题的话特别不好排查,这个也可能是我太菜了,总之 xml 配置要么跑通,要么整个系统都歇菜。
2.如何调用第三方API实现图片上传?
引入 sdk,看第三方的文档。参照最简单的 demo 跑通,在这个基础之上再去添加功能做成自己需要的样子。
3.怎么用Python写一个图片迁移脚本?
没有用 python 去写,最后是用 java 实现了一个。
主要使用的功能在做上传下载的时候都做好了,改一改就做成了图片迁移。
4.第三方的服务可靠吗,如果出现错误该怎么处理?
大厂的服务还是比较可靠的,但是还是要做好错误处理。
在我的项目中,如果可用则用,不可用则可以进行切换,全部不可用的时候切换到本地存储。
但是像 sms email 这样的功能就比较难做了,挂了可以做到切换,但是真遇到都挂了的情况那就只能是暂停服务了。
5.怎么快速集成第三方服务组件,API和SDK的区别是什么?
Api 是直接访问第三方的在线服务,这是一个接口。
SDK 则是第三方封装的一个工具类,我们需要自己引入 SDK,然后去编码实现我们需要的功能。
6.上传图片应该由前端或客户端直接上传到第三方存储服务,还是应该先上传到服务器,再由服务器上传到第三方?
上传图片主要还是看图片的大小与自有服务器的状态,如果说需要频繁的图片存取或者图片比较大,上传结束后不需要做处理只做展示,那么我还是觉得直传第三方比较好。不符合前面三点的话还是需要先上传服务器。
7.怎么实现图片防盗链,缩略图,水印等功能?
图片的防盗链实际上是第三方去检测请求的 Referer,如果发现请求不来自我们所允许的域名那么第三方可以不处理这个请求。
缩略图我看到第三方基本上都有这样的处理方法,可以在后台进行设置。
水印同上。
8.为什么要使用第三方图片存储服务,好处是什么?
大厂的服务比较稳定。
减轻开发的压力。
维护简单。
可以把内容分发到不同的区域,访问更快。
9.怎么样将短信发送服务抽像成公共代码,可以在多个项目中复用?
/**
*@ClassNameSendSms
*@Description腾讯云验证码工具类
*@Authorowlwinter
*@Date2020/7/611:02
*@Version1.0
**/
@Component
publicclassTencentSms{
privatestaticfinalLoggerlogger=LogManager.getLogger(TencentSms.class);
privatestaticCredentialcredential;
privatestaticStringtemplateID;
privatestaticStringsmsSdkAppid;
privatestaticStringsign;
privatestaticStringregion;
privatestaticStringendpoint;
publicStringtencentCode(StringphoneNumber,Stringcode)throwsTencentCloudSDKException{
HttpProfilehttpProfile=newHttpProfile();
httpProfile.setEndpoint(endpoint);
ClientProfileclientProfile=newClientProfile();
clientProfile.setHttpProfile(httpProfile);
SmsClientclient=newSmsClient(credential,region,clientProfile);
Stringparams="{\"PhoneNumberSet\":[\"+86"+phoneNumber+"\"],\"TemplateID\":\""+templateID
+"\",\"Sign\":\""+sign+"\",\"TemplateParamSet\":[\""+code+"\"],\"SmsSdkAppid\":\""+smsSdkAppid+"\"}";
SendSmsRequestreq=SendSmsRequest.fromJsonString(params,SendSmsRequest.class);
logger.info("发送参数:{}",params);
SendSmsResponseresp=client.SendSms(req);
logger.info("验证码发送成功!phoneNumber:{}code:{}",phoneNumber,code);
returnSendSmsRequest.toJsonString(resp);
}
//属性注入
publicvoidsetCredential(Credentialcredential){
TencentSms.credential=credential;
}
publicvoidsetTemplateID(StringtemplateID){
TencentSms.templateID=templateID;
}
publicvoidsetSmsSdkAppid(StringsmsSdkAppid){
TencentSms.smsSdkAppid=smsSdkAppid;
}
publicvoidsetSign(Stringsign){
TencentSms.sign=sign;
}
publicvoidsetRegion(Stringregion){
TencentSms.region=region;
}
publicvoidsetEndpoint(Stringendpoint){
TencentSms.endpoint=endpoint;
}
}
xml注入
-------
<beanid="credential"class="com.tencentcloudapi.common.Credential">
<constructor-argindex="0"value="${tencent.secretId}"/>
<constructor-argindex="1"value="${tencent.secretKey}"/>
</bean>
<beanclass="cn.mogeek.util.sms.TencentSms">
<propertyname="credential"ref="credential"/>
<propertyname="smsSdkAppid"value="${tencent.smsSdkAppid}"/>
<propertyname="templateID"value="${tencent.templateID}"/>
<propertyname="sign"value="${tencent.sign}"/>
<propertyname="region"value="${tencent.smsRegion}"/>
<propertyname="endpoint"value="${tencent.smsEndpoint}"/>
</bean>
10.点对点短信和群发短信的通道区别是什么,怎么支持多种短信通道?
在 腾讯云的短信通道中点对点与群发是没有区别的,如果是同一个短信模板的话,手机号码与验证码都是可以传入数组的,只需要自己做好存储与生成,拼接好了 json 就可以一次发送。
短信通道是由中国移动、联通、电信等运营商直接提供的短信发送接口,实现与客户指定号码进行短信批量发送和自定义发送的目的。
三网合一通道 10 秒内能够送达,无延迟无丢包。
评论