双金是指招商银行的金卡客户和金葵花客户,MGM就是已达标客户推荐朋友办理金卡或金葵花卡,即客户推荐客户
总体上是一个大而全的应用,感觉非常臃肿页面太多,体验非常差。下面分享我在掌上生活的一个经历,让大家从事件细节去体会这个平台吧。
···················································
背景:2019年12月我在招商掌上生活平台购买日用品,然后收到货品,我发现产品的生产日期比快递的发货时间要晚,觉得其产品存在篡改生产日期的问题,于是向招行客服反馈,招行觉得这根本不是事,完全没有处理的意愿。
事件详情:
一、2019年12月11日在招商银行掌上生活购买了某产品的纸巾,于12月16日收到货物。打开快递后发现产品生产日期有篡改嫌疑,产品生产日期为2019年12月13日(如图1),而该产品快递公司收发货时间为12月12日,发货时间早于生产日期(如图2)。
二、2019年12月17日向招商银行客服反馈遇到的产品日期问题,招行并不自己处理,而是过了两三天,大约是2019年12月20日,其平台供应商A向我要了照片等材料。后供应商A来电解释为“2019年12月12日在仓库先打了订单,13日生产,14日正式在成都发货,核定产品生产日期没有问题。”这明显跟物流信息对不上,发货时间、地点都对不上,解释没办法站稳脚跟。
三、对于供应商A的解释很扯淡,于是当天向招行再次反馈。招行经过一周的时间,估计是想冷处理,大约是2019年12月25日,招行然后给我回复,认为供应商A的解释合理,认定产品日期不存在问题。
四、过了一两天,大约12月26日,产品的出品方B给本人来电解释“经仓库核实,原发货为老一批产品,后发现产品损坏,然后更换一批新货进行发货,他们一般先打单,后包装发货,所以产品日期没问题”。诸如此类~毫无逻辑,以致后来产品生产方C也知道我投诉他们产品问题,也给我致电,醉了,招行的处理真是骚。
五、经过他们内部认真调查,半个月过去,招行2020年1月2日给我来电,给出最终的反馈“调查确认订单于2019年12月12日产品发货成功,发货后发货方发现该批货品受污染受损,于是紧急退回,紧急向生产厂家提出紧急生产需求,12月13日号紧急生产后,按照原物流单号继续发货,所以结论是产品生产日期不存问题。”
六、对于招行的处理何解释,我当然是不接受,分析如下:(1)根据第三方物流申通快递信息显示(见上图2),货品在2019年12月12日于遂宁即为第三方物流收件,货品进入第三方物流控制状态,当天物流就发往成都转运中心,货品在14号凌晨已经从遂宁运到成都。所以招商银行解释的发货成功后紧急更换产品缺乏物流信息支持,极其不合理及缺乏实际逻辑。(2)关于12月13日紧急生产的产品进行置换,也缺乏足够的常识支持。厂家的生产地位于四川乐山市夹江县,发货地址位于遂宁市,两地将近250公里的距离,在一天的时间内完成从生产-出厂-经销发货-经销仓库装卸-零售包装这么多环节,实际操作根本不可能。此说法缺乏基本的货品生产周转常识。(3)基于其解释没有任何的佐证材料,试想一下,一个业务需要紧急召回,需要紧急生产,期中涉及的业务流程是非常多的,这些的过程至少有一些突发事件或紧急事件处理的留痕报告吧,比如什么人发现了产品污染受损,向谁用什么途径做了报告,哪位做出了紧急召回,提请厂家紧急生产,等等,总有一些沟通及记录和邮件记录吧!全没有!!!
七、更骚的是,招行未经我同意之下,私自给我发了两箱这个品牌的纸巾,以示感谢。我一脸蒙蔽的打开收到的包裹,发现这产品的生产日期是2019年11月30日(图3),也就是说他们仓库还有比2019年12月13日批次还早的产品,那么反推回来,如果2019年12月12日打包装后,发现产品污染受损,他们为什么不直接更改为2019年11月30日批次的产品呢,何苦舍近求远,化简为繁,走紧急生产呢!很明显,再次印证之前所说的紧急召回\紧急生产是扯淡的!
八、尽管如此,招行依然认为他们不存在问题,不愿直面问题本身。好了,码这么多,只想告诉大家,这个APP的体验非常不好,三思而用,最怕遇到产品质量及售后问题,毕竟他们的售后、客服真的非一般的让人无语。
招行的全称为招商银行股份有限公司。
招商银行总行设在深圳市福田区,2002年4月9日,招商银行A股在上海证券交易所挂牌上市。2006年9月8日,招商银行开始在香港公开招股,发行约22亿股H股,集资200亿港元,并在9月22日于港交所上市。资本净额超过2900亿、资产总额超过4.4万亿。 截至2017年上半年,招商银行境内外分支机构逾1800家,在中国大陆的130余个城市设立了服务网点,拥有5家境外分行和3家境外代表处,员工7万余人。此外,招商银行还在境内全资拥有招银金融租赁有限公司,控股招商基金管理有限公司,持有招商信诺人寿保险有限公司50%股权、招联消费金融公司50%股权;在香港全资控股永隆银行有限公司和招银国际金融控股有限公司。
随着科技的迅猛发展,金融行业也在不断变革和创新,招行金融科技作为中国领先的金融科技公司,以其领先的技术和创新的思维方式,为金融行业注入了新的活力。
招行金融科技,也被称为招行Fintech,是招商银行旗下的一家子公司,专注于金融科技领域的研究和开发。作为一家领先的金融科技公司,招行金融科技的使命是通过技术创新和数字化转型,为客户提供全方位、智能化的金融服务。
招行金融科技的核心竞争力之一是其领先的技术实力。公司拥有一支由技术专家和金融专业人士组成的强大团队,致力于研究和开发创新的金融科技解决方案。招行金融科技将人工智能、区块链、云计算、大数据等前沿技术与金融行业相结合,为客户提供更高效、更安全、更便捷的金融服务。
招行金融科技的核心产品包括数字银行解决方案、风险管理解决方案、支付解决方案和智能金融解决方案等。这些产品以其高度智能化和个性化的特点,为不同客户提供定制化的金融服务。
数字银行解决方案是招行金融科技的重要产品之一。随着移动互联网的普及和数字化转型的加速,越来越多的人开始使用手机和其他移动设备进行银行业务操作。招行金融科技的数字银行解决方案通过整合多种技术手段,实现了在移动设备上进行各类金融交易的便捷和安全。
风险管理解决方案是招行金融科技的另一项重要产品。随着金融市场的不断发展和金融风险的增加,风险管理成为金融机构重要的任务之一。招行金融科技的风险管理解决方案通过利用大数据和人工智能等技术手段,帮助金融机构提高风险评估和风险控制能力,降低风险暴露。
除了核心产品外,招行金融科技还为客户提供一系列增值服务。例如,公司通过与金融机构和科技公司的合作,提供金融数据分析和科技咨询等服务,帮助客户了解行业动态、分析市场趋势,并制定相应的战略和决策。
招行金融科技在金融科技领域取得了显著的成绩,并在不同的金融领域实现了多个成功的应用案例。
其中一个成功案例是招行金融科技在数字化银行业务方面的应用。招行金融科技利用其领先的技术和创新的思维方式,开发出了一套高度智能化的数字银行解决方案。这套解决方案通过整合多种技术手段,提供了便捷、安全的数字化银行服务,得到了广大客户的认可。
另一个成功案例是招行金融科技在金融风险管理方面的应用。招行金融科技的风险管理解决方案通过利用大数据和人工智能等技术手段,帮助金融机构提高风险评估和风险控制能力,有效降低风险暴露。这一应用案例对于金融机构来说具有重要的意义,能够帮助它们更好地管理和控制风险,保障资产安全。
招行金融科技的成功案例不仅体现了公司在技术创新和数字化转型方面的实力,也证明了其在金融行业的领导地位。通过不断引入新的技术和创新的思维方式,招行金融科技不断推动金融行业的发展,并为客户提供更优质、更智能的金融服务。
招行金融科技以其领先的技术和创新的思维方式,正在引领金融行业的创新势力。通过技术创新和数字化转型,招行金融科技为金融行业注入了新的活力,并为客户提供全方位、智能化的金融服务。招行金融科技将继续致力于研究和开发创新的金融科技解决方案,推动金融行业的发展,引领未来金融行业的创新潮流。
通过与金融机构和科技公司的合作,招行金融科技还为客户提供金融数据分析和科技咨询等增值服务,帮助客户了解行业动态、分析市场趋势,并制定相应的战略和决策。招行金融科技的成功案例也证明了其在金融行业的领导地位,取得的成绩不仅对公司本身具有重要意义,也对整个金融行业具有积极的推动作用。
近年来,移动互联网的高速发展与普及,以及人们对于休闲娱乐的需求不断增加,使得手机游戏成为当今社会中一种重要的娱乐方式。其中,王者荣耀作为一款深受全球玩家喜爱的手机游戏,早已成为游戏行业的佼佼者。而对于招商银行这样的金融机构来说,也需要顺应时代潮流,与这种热门游戏进行合作,以开拓新的市场。
一直以来,游戏产业被视为一种独特的文化现象,它不仅仅是一种娱乐形式,更是一种参与度高、互动性强、具有社交性的娱乐方式。王者荣耀作为一款多人在线游戏,玩家可以通过这个平台与来自全球各地的玩家进行对战,共同体验游戏的乐趣。这种游戏特性使其成为了一个庞大而活跃的社区,吸引了亿万玩家的加入。
在这样的背景下,招商银行作为一家在金融服务行业中具备广泛影响力的企业,选择与王者荣耀进行合作,为两者的用户带来更好的体验。招商银行早已意识到了游戏产业的巨大潜力,它不仅仅是一个娱乐方式,更是一种可以与金融服务结合的平台。
通过与王者荣耀的合作,招商银行可以将自身的金融服务延伸到游戏中,实现互联网金融的创新与突破。招商银行可以在游戏中提供虚拟货币兑换服务,使玩家能够将游戏内的虚拟财产转化为真实的金融资产,实现游戏价值的变现。
同时,招商银行还可以借助王者荣耀这个庞大的用户群体,进行金融产品的推广与销售。通过游戏内的广告或推送,招商银行可以向玩家们展示自己的金融产品,吸引更多人关注、了解并购买相关金融服务。
此外,招商银行还可以与王者荣耀开展联合营销活动。通过推出专属游戏皮肤、游戏道具等特殊奖励,招商银行可以吸引更多人参与与了解自己的金融产品。这种联合营销的模式不仅可以提升招商银行的品牌知名度,还可以为玩家们带来更多的游戏福利。
与招商银行的合作不仅仅是金融服务的延伸,更关键的是通过王者荣耀这个互动性强的平台,提升用户对于招商银行的粘性。通过游戏中的互动活动,招商银行可以与玩家进行更加丰富有趣的互动,增加用户与品牌之间的黏性。
招商银行可以通过推出线上线下的活动,吸引玩家们参与其中。例如,举办一些有趣的线下活动,邀请玩家们共同参与并获得一些特殊奖励。这种互动活动不仅能够增加用户的参与度,还能够提高品牌的知名度与影响力。
除了活动之外,招商银行还可以借助玩家们的反馈与建议,不断优化自己的产品与服务。通过与玩家们的交流,招商银行可以更好地了解消费者的需求,并根据需求进行产品创新与改进。这种与用户互动的模式可以增强用户对于招商银行的信任感与归属感,提升品牌忠诚度。
王者荣耀与招商银行的合作,是游戏与金融行业碰撞的产物。通过这种合作,招商银行可以借助王者荣耀这个庞大用户群体,开拓新的市场与业务领域。与此同时,玩家们也能够通过游戏获得更好的金融服务与体验。这种融合模式的出现,将游戏与金融行业相互赋能,为用户带来更好的娱乐与便利。
招行季季宝是招行自营。招商银行的季季宝理财从收益来看,其业绩比较基准是2.7%~4.00%之间,这个收益是预期收益,不代表实际的收益,意思就是可能到期后是2.7%,也有可能是4%,具体要看投资的收益情况是怎么样的,并且是不保本、不保息的。
之前看了Mahout官方示例 20news 的调用实现;于是想根据示例的流程实现其他例子。网上看到了一个关于天气适不适合打羽毛球的例子。
训练数据:
Day Outlook Temperature Humidity Wind PlayTennis
D1 Sunny Hot High Weak No
D2 Sunny Hot High Strong No
D3 Overcast Hot High Weak Yes
D4 Rain Mild High Weak Yes
D5 Rain Cool Normal Weak Yes
D6 Rain Cool Normal Strong No
D7 Overcast Cool Normal Strong Yes
D8 Sunny Mild High Weak No
D9 Sunny Cool Normal Weak Yes
D10 Rain Mild Normal Weak Yes
D11 Sunny Mild Normal Strong Yes
D12 Overcast Mild High Strong Yes
D13 Overcast Hot Normal Weak Yes
D14 Rain Mild High Strong No
检测数据:
sunny,hot,high,weak
结果:
Yes=》 0.007039
No=》 0.027418
于是使用Java代码调用Mahout的工具类实现分类。
基本思想:
1. 构造分类数据。
2. 使用Mahout工具类进行训练,得到训练模型。
3。将要检测数据转换成vector数据。
4. 分类器对vector数据进行分类。
接下来贴下我的代码实现=》
1. 构造分类数据:
在hdfs主要创建一个文件夹路径 /zhoujainfeng/playtennis/input 并将分类文件夹 no 和 yes 的数据传到hdfs上面。
数据文件格式,如D1文件内容: Sunny Hot High Weak
2. 使用Mahout工具类进行训练,得到训练模型。
3。将要检测数据转换成vector数据。
4. 分类器对vector数据进行分类。
这三步,代码我就一次全贴出来;主要是两个类 PlayTennis1 和 BayesCheckData = =》
package myTesting.bayes;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.util.ToolRunner;
import org.apache.mahout.classifier.naivebayes.training.TrainNaiveBayesJob;
import org.apache.mahout.text.SequenceFilesFromDirectory;
import org.apache.mahout.vectorizer.SparseVectorsFromSequenceFiles;
public class PlayTennis1 {
private static final String WORK_DIR = "hdfs://192.168.9.72:9000/zhoujianfeng/playtennis";
/*
* 测试代码
*/
public static void main(String[] args) {
//将训练数据转换成 vector数据
makeTrainVector();
//产生训练模型
makeModel(false);
//测试检测数据
BayesCheckData.printResult();
}
public static void makeCheckVector(){
//将测试数据转换成序列化文件
try {
Configuration conf = new Configuration();
conf.addResource(new Path("/usr/local/hadoop/conf/core-site.xml"));
String input = WORK_DIR+Path.SEPARATOR+"testinput";
String output = WORK_DIR+Path.SEPARATOR+"tennis-test-seq";
Path in = new Path(input);
Path out = new Path(output);
FileSystem fs = FileSystem.get(conf);
if(fs.exists(in)){
if(fs.exists(out)){
//boolean参数是,是否递归删除的意思
fs.delete(out, true);
}
SequenceFilesFromDirectory sffd = new SequenceFilesFromDirectory();
String[] params = new String[]{"-i",input,"-o",output,"-ow"};
ToolRunner.run(sffd, params);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("文件序列化失败!");
System.exit(1);
}
//将序列化文件转换成向量文件
try {
Configuration conf = new Configuration();
conf.addResource(new Path("/usr/local/hadoop/conf/core-site.xml"));
String input = WORK_DIR+Path.SEPARATOR+"tennis-test-seq";
String output = WORK_DIR+Path.SEPARATOR+"tennis-test-vectors";
Path in = new Path(input);
Path out = new Path(output);
FileSystem fs = FileSystem.get(conf);
if(fs.exists(in)){
if(fs.exists(out)){
//boolean参数是,是否递归删除的意思
fs.delete(out, true);
}
SparseVectorsFromSequenceFiles svfsf = new SparseVectorsFromSequenceFiles();
String[] params = new String[]{"-i",input,"-o",output,"-lnorm","-nv","-wt","tfidf"};
ToolRunner.run(svfsf, params);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("序列化文件转换成向量失败!");
System.out.println(2);
}
}
public static void makeTrainVector(){
//将测试数据转换成序列化文件
try {
Configuration conf = new Configuration();
conf.addResource(new Path("/usr/local/hadoop/conf/core-site.xml"));
String input = WORK_DIR+Path.SEPARATOR+"input";
String output = WORK_DIR+Path.SEPARATOR+"tennis-seq";
Path in = new Path(input);
Path out = new Path(output);
FileSystem fs = FileSystem.get(conf);
if(fs.exists(in)){
if(fs.exists(out)){
//boolean参数是,是否递归删除的意思
fs.delete(out, true);
}
SequenceFilesFromDirectory sffd = new SequenceFilesFromDirectory();
String[] params = new String[]{"-i",input,"-o",output,"-ow"};
ToolRunner.run(sffd, params);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("文件序列化失败!");
System.exit(1);
}
//将序列化文件转换成向量文件
try {
Configuration conf = new Configuration();
conf.addResource(new Path("/usr/local/hadoop/conf/core-site.xml"));
String input = WORK_DIR+Path.SEPARATOR+"tennis-seq";
String output = WORK_DIR+Path.SEPARATOR+"tennis-vectors";
Path in = new Path(input);
Path out = new Path(output);
FileSystem fs = FileSystem.get(conf);
if(fs.exists(in)){
if(fs.exists(out)){
//boolean参数是,是否递归删除的意思
fs.delete(out, true);
}
SparseVectorsFromSequenceFiles svfsf = new SparseVectorsFromSequenceFiles();
String[] params = new String[]{"-i",input,"-o",output,"-lnorm","-nv","-wt","tfidf"};
ToolRunner.run(svfsf, params);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("序列化文件转换成向量失败!");
System.out.println(2);
}
}
public static void makeModel(boolean completelyNB){
try {
Configuration conf = new Configuration();
conf.addResource(new Path("/usr/local/hadoop/conf/core-site.xml"));
String input = WORK_DIR+Path.SEPARATOR+"tennis-vectors"+Path.SEPARATOR+"tfidf-vectors";
String model = WORK_DIR+Path.SEPARATOR+"model";
String labelindex = WORK_DIR+Path.SEPARATOR+"labelindex";
Path in = new Path(input);
Path out = new Path(model);
Path label = new Path(labelindex);
FileSystem fs = FileSystem.get(conf);
if(fs.exists(in)){
if(fs.exists(out)){
//boolean参数是,是否递归删除的意思
fs.delete(out, true);
}
if(fs.exists(label)){
//boolean参数是,是否递归删除的意思
fs.delete(label, true);
}
TrainNaiveBayesJob tnbj = new TrainNaiveBayesJob();
String[] params =null;
if(completelyNB){
params = new String[]{"-i",input,"-el","-o",model,"-li",labelindex,"-ow","-c"};
}else{
params = new String[]{"-i",input,"-el","-o",model,"-li",labelindex,"-ow"};
}
ToolRunner.run(tnbj, params);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("生成训练模型失败!");
System.exit(3);
}
}
}
package myTesting.bayes;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import org.apache.commons.lang.StringUtils;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.fs.PathFilter;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.mahout.classifier.naivebayes.BayesUtils;
import org.apache.mahout.classifier.naivebayes.NaiveBayesModel;
import org.apache.mahout.classifier.naivebayes.StandardNaiveBayesClassifier;
import org.apache.mahout.common.Pair;
import org.apache.mahout.common.iterator.sequencefile.PathType;
import org.apache.mahout.common.iterator.sequencefile.SequenceFileDirIterable;
import org.apache.mahout.math.RandomAccessSparseVector;
import org.apache.mahout.math.Vector;
import org.apache.mahout.math.Vector.Element;
import org.apache.mahout.vectorizer.TFIDF;
import com.google.common.collect.ConcurrentHashMultiset;
import com.google.common.collect.Multiset;
public class BayesCheckData {
private static StandardNaiveBayesClassifier classifier;
private static Map<String, Integer> dictionary;
private static Map<Integer, Long> documentFrequency;
private static Map<Integer, String> labelIndex;
public void init(Configuration conf){
try {
String modelPath = "/zhoujianfeng/playtennis/model";
String dictionaryPath = "/zhoujianfeng/playtennis/tennis-vectors/dictionary.file-0";
String documentFrequencyPath = "/zhoujianfeng/playtennis/tennis-vectors/df-count";
String labelIndexPath = "/zhoujianfeng/playtennis/labelindex";
dictionary = readDictionnary(conf, new Path(dictionaryPath));
documentFrequency = readDocumentFrequency(conf, new Path(documentFrequencyPath));
labelIndex = BayesUtils.readLabelIndex(conf, new Path(labelIndexPath));
NaiveBayesModel model = NaiveBayesModel.materialize(new Path(modelPath), conf);
classifier = new StandardNaiveBayesClassifier(model);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("检测数据构造成vectors初始化时报错。。。。");
System.exit(4);
}
}
/**
* 加载字典文件,Key: TermValue; Value:TermID
* @param conf
* @param dictionnaryDir
* @return
*/
private static Map<String, Integer> readDictionnary(Configuration conf, Path dictionnaryDir) {
Map<String, Integer> dictionnary = new HashMap<String, Integer>();
PathFilter filter = new PathFilter() {
@Override
public boolean accept(Path path) {
String name = path.getName();
return name.startsWith("dictionary.file");
}
};
for (Pair<Text, IntWritable> pair : new SequenceFileDirIterable<Text, IntWritable>(dictionnaryDir, PathType.LIST, filter, conf)) {
dictionnary.put(pair.getFirst().toString(), pair.getSecond().get());
}
return dictionnary;
}
/**
* 加载df-count目录下TermDoc频率文件,Key: TermID; Value:DocFreq
* @param conf
* @param dictionnaryDir
* @return
*/
private static Map<Integer, Long> readDocumentFrequency(Configuration conf, Path documentFrequencyDir) {
Map<Integer, Long> documentFrequency = new HashMap<Integer, Long>();
PathFilter filter = new PathFilter() {
@Override
public boolean accept(Path path) {
return path.getName().startsWith("part-r");
}
};
for (Pair<IntWritable, LongWritable> pair : new SequenceFileDirIterable<IntWritable, LongWritable>(documentFrequencyDir, PathType.LIST, filter, conf)) {
documentFrequency.put(pair.getFirst().get(), pair.getSecond().get());
}
return documentFrequency;
}
public static String getCheckResult(){
Configuration conf = new Configuration();
conf.addResource(new Path("/usr/local/hadoop/conf/core-site.xml"));
String classify = "NaN";
BayesCheckData cdv = new BayesCheckData();
cdv.init(conf);
System.out.println("init done...............");
Vector vector = new RandomAccessSparseVector(10000);
TFIDF tfidf = new TFIDF();
//sunny,hot,high,weak
Multiset<String> words = ConcurrentHashMultiset.create();
words.add("sunny",1);
words.add("hot",1);
words.add("high",1);
words.add("weak",1);
int documentCount = documentFrequency.get(-1).intValue(); // key=-1时表示总文档数
for (Multiset.Entry<String> entry : words.entrySet()) {
String word = entry.getElement();
int count = entry.getCount();
Integer wordId = dictionary.get(word); // 需要从dictionary.file-0文件(tf-vector)下得到wordID,
if (StringUtils.isEmpty(wordId.toString())){
continue;
}
if (documentFrequency.get(wordId) == null){
continue;
}
Long freq = documentFrequency.get(wordId);
double tfIdfValue = tfidf.calculate(count, freq.intValue(), 1, documentCount);
vector.setQuick(wordId, tfIdfValue);
}
// 利用贝叶斯算法开始分类,并提取得分最好的分类label
Vector resultVector = classifier.classifyFull(vector);
double bestScore = -Double.MAX_VALUE;
int bestCategoryId = -1;
for(Element element: resultVector.all()) {
int categoryId = element.index();
double score = element.get();
System.out.println("categoryId:"+categoryId+" score:"+score);
if (score > bestScore) {
bestScore = score;
bestCategoryId = categoryId;
}
}
classify = labelIndex.get(bestCategoryId)+"(categoryId="+bestCategoryId+")";
return classify;
}
public static void printResult(){
System.out.println("检测所属类别是:"+getCheckResult());
}
}
1. 请介绍一下WebGIS的概念和作用,以及在实际应用中的优势和挑战。
WebGIS是一种基于Web技术的地理信息系统,通过将地理数据和功能以可视化的方式呈现在Web浏览器中,实现地理空间数据的共享和分析。它可以用于地图浏览、空间查询、地理分析等多种应用场景。WebGIS的优势包括易于访问、跨平台、实时更新、可定制性强等,但也面临着数据安全性、性能优化、用户体验等挑战。
2. 请谈谈您在WebGIS开发方面的经验和技能。
我在WebGIS开发方面有丰富的经验和技能。我熟悉常用的WebGIS开发框架和工具,如ArcGIS API for JavaScript、Leaflet、OpenLayers等。我能够使用HTML、CSS和JavaScript等前端技术进行地图展示和交互设计,并能够使用后端技术如Python、Java等进行地理数据处理和分析。我还具备数据库管理和地理空间数据建模的能力,能够设计和优化WebGIS系统的架构。
3. 请描述一下您在以往项目中使用WebGIS解决的具体问题和取得的成果。
在以往的项目中,我使用WebGIS解决了许多具体问题并取得了显著的成果。例如,在一次城市规划项目中,我开发了一个基于WebGIS的交通流量分析系统,帮助规划师们评估不同交通方案的效果。另外,在一次环境监测项目中,我使用WebGIS技术实现了实时的空气质量监测和预警系统,提供了准确的空气质量数据和可视化的分析结果,帮助政府和公众做出相应的决策。
4. 请谈谈您对WebGIS未来发展的看法和期望。
我认为WebGIS在未来会继续发展壮大。随着云计算、大数据和人工智能等技术的不断进步,WebGIS将能够处理更大规模的地理数据、提供更丰富的地理分析功能,并与其他领域的技术进行深度融合。我期望未来的WebGIS能够更加智能化、个性化,为用户提供更好的地理信息服务,助力各行各业的决策和发展。
这块您需要了解下stm32等单片机的基本编程和简单的硬件设计,最好能够了解模电和数电相关的知识更好,还有能够会做操作系统,简单的有ucos,freeRTOS等等。最好能够使用PCB画图软件以及keil4等软件。希望对您能够有用。
1.负责区域大客户/行业客户管理系统销售拓展工作,并完成销售流程;
2.维护关键客户关系,与客户决策者保持良好的沟通;
3.管理并带领团队完成完成年度销售任务。