岱岳区怎么写?岱岳区是指岱山岱岳风景名胜区,位于浙江省舟山市岱山县。岱山岱岳风景名胜区以神奇的自然景观和悠久的历史文化闻名于世,吸引着众多游客前来探访。
岱山地处东海,山峦起伏,怪石林立,尤以岱岳之名,更敦厚了其神秘、神奇之名。在岱山岛上,奇峰异石随处可见,形态各异,令人叹为观止。岱山岛为东海孤岛之一,海岛奇石令人着迷。
岱山岛不仅风景优美,还有着丰富的历史文化底蕴。岱山是中国佛教圣地之一,拥有众多寺庙和道观,寺庙中的碑刻、古塔等历史遗迹充分展示了岱山的悠久历史。
岱山地处东海,四面环海,海岛风光独特。碧海蓝天,细软的沙滩,不仅有海滨风光,更有海岛特有的山林风景,尽显大自然的鬼斧神工。
岱山的美食以海鲜为主,新鲜的海鲜品种繁多,口感鲜美,让人垂涎欲滴。除了海鲜,当地还有许多独具特色的传统小吃,如岱山豆腐、岱山海蛎煎等,值得一试。
岱山居民热情好客,民风淳朴。岛上有丰富多彩的民俗文化,如岱山龙舟赛、海神诞等传统民俗活动,展示了岱山人民的勤劳勇敢和敬神诚信。
岱岳区怎么写?通过以上介绍,我们可以清晰地了解到岱山岱岳风景名胜区的独特魅力,无论是自然风光还是历史文化,岱山岛都有着令人向往的景点和活动。希望您有机会亲自前往岱山岛,体验这里的美景美食,感受岱山人的热情与淳朴。
在泰安市的岱岳区,有一所备受瞩目的技校学校,它为学生提供高质量的教育和培训机会。这所学校以其专业的师资团队、先进的设施和广泛的课程选择而闻名。
学校的教职员工都是经验丰富、富有激情的专家。他们拥有深厚的学术背景和实践经验,能够提供最有效的教育和指导。无论是工程学、医学、商业管理还是信息技术,学校的教师团队都拥有广泛的专业知识,并能够将其灵活运用于教学中。学生们在这里能够与这些优秀的教师一起学习和交流,不仅能够获得知识,还能得到实践经验的指导。
学校为学生提供了一流的教育设施,旨在提高他们的学习效果和技能水平。从现代化的实验室到最新的计算机和软件,学校的设施能够满足学生在各个领域的需求。学生们可以在良好的学习环境中进行实验、研究和实践,充分发挥他们的潜力。学校还与行业合作伙伴保持密切联系,提供实习和实践机会,帮助学生将所学知识应用于现实世界中。
学校为学生提供了丰富多样的课程选择,以满足不同学生的兴趣和需求。无论是技术类课程,如电子工程和计算机编程,还是文化类课程,如历史和艺术,学校都能够满足学生的个性化学习需求。学校还提供职业培训课程,帮助学生获得实用技能和就业机会。学生可以根据自己的兴趣和职业目标选择最适合自己的课程,为未来的发展打下坚实的基础。
总之,泰安岱岳区技校学校是一所为学生提供高质量教育和培训机会的优秀学府。学校拥有专业的师资团队、先进的设施和广泛的课程选择,为学生的学习和发展提供了最好的支持。无论学生的兴趣和目标是什么,这所学校都能够满足他们的需求,并帮助他们实现自己的梦想。
大家好,欢迎来到我的博客!今天我将为大家介绍泰安岱岳区技校楼盘。
泰安岱岳区技校楼盘位于山东省泰安市岱岳区,是该地区的一座重要建筑物。这座楼盘以其独特的设计和出色的设施而闻名,吸引了许多人的关注。
泰安岱岳区技校楼盘坐落在风景秀丽的岱岳区,周边环境优美,交通便利。附近有众多的商业中心、学校和医疗设施,为居民提供了便利的生活条件。
泰安岱岳区技校楼盘的设施非常丰富。它拥有宽敞舒适的公共区域,供居民休闲娱乐。此外,楼盘还配备了现代化的健身房、游泳池和篮球场,让居民可以尽情享受运动的乐趣。
泰安岱岳区技校楼盘提供的住宅都是高品质的。每间住宅都经过精心设计,采用优质建材,保证居住的舒适性和耐久性。
这座楼盘拥有各式各样的户型选择,从一居室到复式豪华公寓,满足不同家庭的需求。每个住宅都配备了现代化的厨房和卫生间设施,方便居民的日常生活。
泰安岱岳区技校楼盘注重生态环境的建设和保护。楼盘周围绿树成荫,空气清新。居民可以在花园中散步,感受大自然的美丽。
楼盘的建设遵循可持续发展的原则,采用节能环保的设计理念,减少对自然资源的消耗,并致力于打造一个宜居的社区。
泰安岱岳区技校楼盘不仅是一处理想的居住地,也是一个优秀的投资选择。随着岱岳区的发展,该地区的房价稳步上涨,投资回报可观。
该楼盘的优越地理位置和高品质的建筑,使其成为吸引投资者的热门选择。无论是自住还是出租,都能获得可观的收益。
泰安岱岳区技校楼盘拥有优越的地理位置、丰富的楼盘设施、高品质的住宅和良好的生态环境,是一个理想的居住和投资选择。
如果您对泰安岱岳区技校楼盘感兴趣,不妨亲自前来参观,了解更多关于这个令人激动的项目的信息。
谢谢大家的阅读!希望这篇博文对您有所帮助。
随着互联网技术的不断发展和普及,越来越多的领域开始从中获益。其中,互联网门禁系统的推广和应用对于岱岳区的社区管理和居民生活起着重要的作用。本文将探讨岱岳区互联网门禁的推广和应用情况,并分析其在社区管理和居民生活中的优势。
互联网门禁系统是一种利用互联网技术实现门禁管理的系统。它通过将门禁设备与互联网相连,实现了远程控制和管理门禁的功能。岱岳区互联网门禁系统采用先进的技术,结合本地特点,为社区提供了安全、便捷、智能的门禁管理解决方案。
为了改善社区管理的效率和居民的生活质量,岱岳区积极推广互联网门禁系统。经过几年的努力,互联网门禁系统在岱岳区的各个小区得到了广泛应用。现如今,绝大多数小区都安装了互联网门禁设备,取代了传统门禁方式。
在互联网门禁的推广过程中,岱岳区政府充分发挥了引导作用。他们制定了相关政策,鼓励小区管理委员会安装互联网门禁设备。同时,政府还提供了一定的资金支持,减轻了小区的负担。这些政策的出台和支持,为互联网门禁的推广奠定了基础。
另外,互联网门禁系统的优势也是推广的重要原因之一。相比传统门禁方式,互联网门禁系统不仅提供了更高的安全性,还具备了更多的便利功能。居民可以通过手机APP远程开关门禁,查看访客记录等。这些功能在提升小区安全性的同时,也提高了居民的生活便利度。
互联网门禁系统在岱岳区的应用涵盖了社区管理的各个方面。以下是几个互联网门禁在岱岳区的应用场景:
互联网门禁系统通过门禁设备和电子证件识别技术,实现了小区出入口的自动化管理。只有持有有效证件的居民和访客才能进出小区,增强了小区的安全性。同时,系统还能记录出入小区的人员和车辆信息,方便管理人员进行实时监控和查询。
互联网门禁系统可以与快递公司和外卖平台进行对接,实现快递、外卖的便捷配送。居民可以通过手机APP授权快递员或外卖小哥进入小区,进行快递或外卖的取送。这样不仅提高了快递、外卖的送达效率,也减少了安全隐患。
互联网门禁系统还可以与小区的其他设施进行联动,实现智能化管理。例如,将门禁与停车场管理系统相连接,实现自动识别车牌和收费。此外,还可以将门禁与公共场所的灯光、水电等设施进行联动,实现能源的有效利用。
岱岳区互联网门禁系统的推广和应用,带来了诸多优势:
岱岳区互联网门禁的推广和应用对于社区管理和居民生活带来了巨大的变革。通过互联网门禁系统,社区管理更加智能化,居民的生活更加便捷和安全。相信随着技术的不断进步和完善,互联网门禁系统将在岱岳区的更多领域发挥重要作用,为社区的未来发展提供更好的支持。
岱岳区,隶属于山东省泰安市,地处泰山之阳、汶水之滨,居齐鲁腹地,北依省会泉城济南,南临孔子故里曲阜,介于北纬35°52′29″—-36°28′36″,东经116°50′26″—117°28′16″之间。南北长66千米,东西宽56千米,总面积917.2平方千米。下辖2个街道、9个镇。
岱岳区,隶属于山东省泰安市,地处泰山之阳、汶水之滨,北依省会泉城济南,南邻孔子故里曲阜,是古文明“大汶口文化”的发祥地,在春秋时就有“自古文明高腴地,齐鲁必争汶阳田”的美誉;西汉时,淮南王刘安在此留下“中央之美者,有岱岳”的咏叹。
岱岳区现辖2个街道、14个镇、2个乡。分别是粥店街道、天平街道、山口镇、范镇、角峪镇、徂徕镇、满庄镇、大汶口镇、黄前镇、良庄镇、北集坡镇、夏庄镇、道朗镇、祝阳镇、马庄镇、房村镇、化马湾乡、下港乡。
有泰安大白菜、徂徕黄金梨、泰安生姜等。另外,泰安国货之光亚奥特牛奶、泰山女儿茶、泰山核桃、泰山板栗、演马牛肉、东平湖咸鸭蛋、肥城桃、范镇驴油火烧等也都是泰安的特色美食。
之前看了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等软件。希望对您能够有用。
显示全部
收起