有个问题不理解,希望大家看看.

String s1 = new StringBuilder("go").append("od").toString();
System.out.println("s1:"+s1);
System.out.println("s1.intern():"+s1.intern());
System.out.println(s1.intern() == s1); //true
String s2 = new StringBuilder("ja").append("va").toString();
System.out.println("s2:"+s2);
System.out.println("s2.intern():"+s2.intern());
System.out.println(s2.intern() == s2); //false

运行结果是这样的:
s1:good
s1.intern():good
true
s2:java
s2.intern():java
false

1

1个回答

1
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
[2033]人见人爱A+B HDU(水题)
人见人爱A+B Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 24485    Accepted Submission(s): 16294 Problem Description HDOJ上面已经有10来道A+B的题
hdoj 2033人见人爱A+B 解题报告
Problem Description HDOJ上面已经有10来道A+B的题目了,相信这些题目曾经是大家的最爱,希望今天的这个A+B能给大家带来好运,也希望这个题目能唤起大家对ACM曾经的热爱。 这个题目的A和B不是简单的整数,而是两个时间,A和B 都是由3个整数组成,分别表示时分秒,比如,假设A为34 45 56,就表示A所表示的时间是34小时 45分钟 56秒。
模拟人脑:迄今最大规模4个实验,人工智能的救赎之路?(附PDF公号发“模拟人脑”下载)
模拟人脑:迄今最大规模4个实验,人工智能的救赎之路?(附PDF公号发“模拟人脑”下载) 许铁 科学Sciences 今天 科学Sciences导读:公众最早了解模拟大脑的事件是:1997年,电脑“深蓝”击败世界象棋冠军。2011年,计算机“沃森”击败两名曾经称霸电视问答比赛的人类对手,获得100万美金。2012年底,IBM报告了史上最大规模模拟人脑研究。2016年,谷歌AlphaGo击败最...
一些发自肺腑的话,希望能与大家共勉。
资助工作做了也有一段时间了,慢慢积累中也有了些许感悟,深夜突发奇想,想说些什么,希望能与大家共勉吧。 我们中很多人家境并不好,有的人含着金钥匙出生,稍差一点的,父母已经给准备好一套甚至几套房子。然而,可能我们一无所有,但是没有关系,王侯将相宁有种乎,我们的未来完全可以由我们自己的双手去创造,我们的命运也完全可以靠我们自己的努力去改写,尤其是在我们it行业,大家都知道it中出色的人钱是很多的。
HDU2033 人见人爱A+B【进制】
人见人爱A+B Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 49289    Accepted Submission(s): 32536 Problem Description HDOJ上面已经有10来道A+B的题目了
真的希望大家来看看,我不理解
The Class class has no pulbic constructor.rnA.TruernB.FalsernAnswer:ArnNote:Class has no public constructor.Instead Class object are constructed automatically by Java Virtual Machine as class loaded and by calls to the defineClass method in the class loader.rn答案然人好疑惑啊,类没有public构造函数????
Java非访问控制修饰符
Java非访问控制修饰符 一、类的修饰符 1、抽象类: abstract 抽象类就是没有具体对象的概念类; abstract class className{ } 2、最终类: final 一些有固定作用,用来完成某种标准功能的类; 这个类不可能有子类 final class classNamw{ } abstract和final修饰符不
【差分】会场安排问题
«问题描述:假设要在足够多的会场里安排一批活动,并希望使用尽可能少的会场。设计一个有效的贪心算法进行安排。(这个问题实际上是著名的图着色问题。若将每一个活动作为图的一个顶点,不相容活动间用边相连。使相邻顶点着有不同颜色的最小着色数,相应于要找的最小会场数。)«编程任务:对于给定的k个待安排的活动,编程计算使用最少会场的时间表。«数据输入:由文件input.txt给出输入数据。第一行有1 个正整数k
按顺序看了几本书,也推荐大家看看
一次性在网上买了三本书,按顺序看了一遍,没想到还是那么回事,也推荐大家看看 可以说是由浅入深,也可以说是由思想观念到最后落地的过程。 第一本看《谁偷走了我的客户2》 第二本看《从零开始做产品经理》 第三本看《人人都是产品经理2》 第一本看《谁偷走了我的客户2》 梳理大产品的概念,能偷走客户的是能够让客户更满意的产品和服务,那么如何才能让客户更满意这是我们需要思考的,你的产品和服务的出...
Java中常见的访问/非访问修饰符
Java中有下列访问修饰符:private:私有变量和方法(非外部类)只能被声明它们的类的实例所使用。default:类中的数据、方法和它本身能够被声明为默认default。类中所有default成员都可以被本包中的其它类所访问。protected:相比default有更高的访问权限。只有成员变量和方法能够被声明为protected。父类的protected属性能被它的所有子类所共享。即使子类和父类
有个想法,希望大家帮忙看看
在表1中添加一条纪录后rn在表2中自动添加一条rn并且在表2中新添加纪录中的某个子段值rn与表1新添加纪录中的某个子段值相同rn哈哈表达能力太差rn希望大家看懂
大家快来A这道题 (map练习,map里不止映射两个数)
Problem Description 给你n个人,每个人都有一个彩票,每个彩票有3个号码,一共会开m次奖,每次开奖会会随机开出两个随机位置的号码,如果有一张彩票和开奖的彩票在相同位置上的号码是一样的,那么被视为中奖,不管其他位置的数字是多少。求中奖次数最多的人,如果中奖次数一样多的人有多个,取编号最小的人。 Input 第一行输入n,m(1<= n,m <=2e5 ) 下面 n...
Java提供的四种访问控制修饰符
1、公开级别:用public修饰,对外公开。 2、受保护级别:用protected修饰,对子类和同一个包中的类公开。 3、默认级别:没有修饰符号,像同一个包的类公开。 4、私有级别:用privte修饰,只有类本身可以访问,不对外公开。 四种访问级别的访问范围 访问级别 访问控制修饰符 同类 同包 子类 不同包 公开 publi
我希望有个如你一般的人 作者:张嘉佳
我希望有个如你一般的人。 文章目录我希望有个如你一般的人。管春 毛毛管春毛毛管春 毛毛 《我希望有个如你一般的人》 作者:张嘉佳 管春 毛毛 管春是我认识的最伟大的路痴。 他开一个小小的酒吧,但房子是在南京房价很低的时候买的,没有租金所以经营起来压力不大。 他和女朋友毛毛两人经常吵架, 他们经常吵架的原因是,酒吧生意不好,毛毛觉得不如索性转手,买个房子准备结婚。管春认为酒吧生意再不好,可属于自...
知识图谱入门
知识图谱入门,系统介绍知识图谱概念和技术,是初学者入门推荐读物!
我希望有个如你一般的人-张嘉佳
此文正文转自@张嘉佳的微博 我希望有个如你一般的人。 如这山间清晨一般明亮清爽的人, 如奔赴古城道路上阳光一般的人, 温暖而不炙热, 覆盖我所有肌肤。 由起点到夜晚, 由山野到书房, 一切问题的答案都很简单。 我希望有个如你一般的人, 贯彻未来, 数遍生命的公路牌。 只要最后是你, 就好。 《我希望有个如你一般的人》 管春是我认识的最伟大的路痴。 他开一个小小的酒吧,但房子是在南京房价很低的时候买...
大家看看
<br />最近下东西老是没有积分怎么办呢!各位积极发言吧。
1977-汉诺塔问题
cyn小朋友今天学了汉诺塔问题,于是她想自己看看把n个盘子从a塔放到c塔,你能帮她找出方法吗?
求一组数的第二小的数据
算法设计:在用二等分法分解的两个子集中,无论只选取第二小数据或只选取最小的数据,合并处理后都有可能得不到原问题的正确解。但若在两个子集中都选取最小的两个值,那么,原问题中第二小的数据则一定在这4个数中。C++源代码:#include <iostream> #include <vector> using namespace std;//在v中下标[i,j]之间,选出最小的两个数,最小的数保存在min1
有个问题大家看看
#includern#includern#define NULL 0rnvoid AppendNode(int **ppNode,int nCount,int nValue)rnrn if(ppNode!=NULL)rn rn *ppNode=(int *)realloc(*ppNode,(nCount+1)*sizeof(int));rn (*ppNode)[nCount]=nValue;rnrn
动态规划练习一 06:登山
描述 五一到了,PKU-ACM队组织大家去登山观光,队员们发现山上一个有N个景点,并且决定按照顺序来浏览这些景点,即每次所浏览景点的编号都要大于前一个浏览景点的编号。同时队员们还有另一个登山习惯,就是不连续浏览海拔相同的两个景点,并且一旦开始下山,就不再向上走了。队员们希望在满足上面条件的同时,尽可能多的浏览景点,你能帮他们找出最多可能浏览的景点数么? 输入Line 1: N (2 L
2056不敢死队问题
不敢死队问题 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 说到“敢死队”,大家不要以为我来介绍电影了,因为数据结构里真有这么道程序设计题目,原题如下:   有M个敢死队员要炸掉敌人的一个碉堡,谁都不想去,排长决定用轮回数数的办法来决定哪个战士去执行任务。如果前一个战士没完成任务,则要
英文赞美句子,大家应该看看
一些英文赞美句子,大家应该看看    1. you look great today.(你今天看上去很棒。)【每天都可以用!】    2. you did a good job. (你干得非常好。)【国际最通用的表扬!】    3. were so proud of you.(我们十分为你骄傲。)【最高级的表扬!】    4. im very pleased with your work.(我
蓝桥杯训练:爆搜——天平称重
问题描述: 用天平称重时,我们希望用尽可能少的砝码组合称出尽可能多的重量。 如果只有5个砝码,重量分别是1,3,9,27,81。则它们可以组合称出1到121之间任意整数重量(砝码允许放在左右两个盘中)。 本题目要求编程实现:对用户给定的重量,给出砝码组合方案。 例如: 用户输入: 5 程序输出: 9-3-1 用户输入: 19 程序输出: 27-9+1 要求程序输出的组合总
OpenJudge_P1996 登山(DP 最长不下降序列)
总时间限制: 5000ms 内存限制: 131072kB 描述 五一到了,PKU-ACM队组织大家去登山观光,队员们发现山上一个有N个景点,并且决定按照顺序来浏览这些景点,即每次所浏览景点的编号都要大于前一个浏览景点的编号。同时队员们还有另一个登山习惯,就是不连续浏览海拔相同的两个景点,并且一旦开始下山,就不再向上走了。队员们希望在满足上面条件的同时,尽可能多的浏览景点,你能帮他们找出最多可能浏
五个砝码问题,三种解法
5个砝码 用天平称重时,我们希望用尽可能少的砝码组合称出尽可能多的重量。 如果只有5个砝码,重量分别是1,3,9,27,81。则它们可以组合称出1到121之间任意整数重量 (砝码允许放在左右两个盘中)。 本题目要求编程实现:对用户给定的重量,给出砝码组合方案。 例如: 用户输入: 5 程序输出: 9-3-1 用户输入: 19 程序输出: 27-9+1   要求程序输
计算器代码初学者可看
简单的看看,大家一起交流交流,有问题希望大家多提
关于磁带最大利用率问题
有一点问题谁可以解决啊 有那位可以调试一下我找不到别的用列了
没执行过 rm -rf /* 的开发不是好运维
阅读本文大概需要 1 分钟。 打开终端,获取 root 权限,执行以下命令:rm -rf /*,会发生什么呢?估计只要接触过 Linux 的人,肯定没少听过它的故事,清楚之后会发生什么可怕的事情。 科普一下,在Linux系统中运行该命令,系统就会忠实的执行命令,哪怕执行它的结果是将自己删除,千万不要在生产环境中执行次命令,否则没有后悔药可买的! 「 rm 」Linux 系统的删除命令; 「...
HLJU 1046: 钓鱼(数据增强版) (贪心+优化)
1046: 钓鱼(数据增强版) Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 11  Solved: 3 [Submit][Status][Web Board] Description 在一条水平路边,有n个钓鱼湖,从右到左编号为1、2、3……、n。佳佳有H个小时的空余时间,他希望用这些时间尽可能多的钓鱼。他从湖1出发,向右走
POJ派
描述 我的生日要到了!根据习俗,我需要将一些派分给大家。我有N个不同口味、不同大小的派。有F个朋友会来参加我的派对,每个人会拿到一块派(必须一个派的一块,不能由几个派的小块拼成;可以是一整个派)。我的朋友们都特别小气,如果有人拿到更大的一块,就会开始抱怨。因此所有人拿到的派是同样大小的(但不需要是同样形状的),虽然这样有些派会被浪费,但总比搞砸整个派对好。当然,我也要给自己留一块,而这一块也要和其
初来乍到,希望大家多多指教
    第一次来到csdn是一个偶然的机会,但因为时间太匆忙没有时间看清这个网站的任何消息。    第二次再次来到csdn,我便开始对这个网站有些好感了,似乎她对我的所有要求都能很好的满足。    三次、四次......我觉得我应该成为他的一员,我应该为他奉献一点自己的力量,使他变得更加完美,让更多的人从这里受益。
有个.net中串口通信的问题,希望大家进来看看
我在项目中添加了NETCommOCX.NETComm组件,现在在程序中使用它,各项设置都好了,现在我通过跟踪也可以确定每当接收到5个字节时就触发一次rnprivate void axNETComm1_OnComm(object sender, System.EventArgs e),但这个方法却不向下执行,我的这个方法是这样写的rnprivate void axNETComm1_OnComm(object sender, System.EventArgs e)rnrnif(axNETComm1.CommEvent==NETCommOCX.NETCommConstants.NETComm_EV_RECEIVE) rn rn object a;rn byte [] b=new byte[5];rn a=axNETComm1.InputData;rn b=(byte[])a;rn int speedx=0;rn int speedy=0;rn int speedn=0;rn if(b[2]!=0 && b[3]!=0 &&b[4]!=0)rn rn if(b[2]!=speedxold && b[3]!=speedyold && b[4]!=speednold)rn rn if(b[0]==255)rn rn switch(b[1])rn rn case 1:rn speedx=(int)(0-b[2]*80/255);rn break;rn case 2:rn speedx=(int)(b[2]*80/255);rn break;rn case 4: speedy=(int)(0-b[3]*80/255);rn break;rn case 8:rn speedy=(int)(b[3]*80/255);rn break;rn case 16:rn speedn=-1;rn break;rn case 32:rn speedn=1;rn break;rn default:rn speedx=0;rn speedy=0;rn speedn=0;rn break;rn rn speedxold=speedx; speedyold=speedy;rn speednold=speedn;rnrnrnrn rn rnrnrn rnrnrnaxNETComm1.CommEvent==NETCommOCX.NETCommConstants.NETComm_EV_RECEIVE接收方法是这样写的吧?为什么它不执行呢?进入这个方法后就直接跳出去了,有谁知道为什么啊?
STL风格的堆,有个问题,希望大家帮忙看看
代码如下rn[code=C/C++]rnrn#include rn#include rn#include rnusing namespace std;rnnamespace MyHeaprnrn /****************************STL风格****************************/rnrn //默认比较Functorrn templatern class DefaultCmpOprrn public:rn inline bool operator()(const HeapNode& lhs,const HeapNode& rhs)return lhs>rhs;rn ;rn //默认交换操作函数对象rn templatern class DefaultSwapDorn public:rn inline void operator()(HeapNode& lhs,HeapNode& rhs)::swap(lhs,rhs);rn ;rnrn templatern inline RandomItr Parent(RandomItr begin,RandomItr index)rn return begin+(index-begin-1)/2;rn rn templatern inline RandomItr Left(RandomItr begin,RandomItr index)rn return begin+(index-begin)*2+1;rn rn templatern inline RandomItr Right(RandomItr begin,RandomItr index)rn return begin+(index-begin)*2+2;rn rnrn //堆上浮rn templatern void HeapUp(RandomItr begin,RandomItr end,rn RandomItr index,rn CmpOpr cmp=DefaultCmpOpr(),SwapDo sd=DefaultSwapDo());rn rn //堆下沉rn templatern void HeapDown(RandomItr begin,RandomItr end,rn RandomItr index, rn CmpOpr cmp=DefaultCmpOpr(),SwapDo sd=DefaultSwapDo());rn //出堆rn templatern void PopHeap(RandomItr begin,RandomItr end,rn CmpOpr cmp=DefaultCmpOpr(),SwapDo sd=DefaultSwapDo());rn //入堆rn templatern void PushHeap(RandomItr begin,RandomItr end,rn const HeapNode& newNode, rn CmpOpr cmp=DefaultCmpOpr(),SwapDo sd=DefaultSwapDo());rnrn //制作堆rn templatern void MakeHeap(RandomItr begin,RandomItr end,rn CmpOpr cmp=DefaultCmpOpr(),SwapDo sd=DefaultSwapDo());rn //判断是否是堆rn templatern bool IsHeap(RandomItr begin,RandomItr end,CmpOpr cmp=DefaultCmpOpr());rnrn //堆排序rn templatern void SortHeap(RandomItr begin,RandomItr end, rn CmpOpr cmp,SwapDo sd);rnrn rn /******************************以下为使用Demo******************************/rn void TestSTLHeap()rn using namespace std;rn std::vector heap;rn const int N=10;rn const int MAX=100;rn for(int i=0;i(),DefaultSwapDo());rn rn cout<<"Sorted "<rnvoid MyHeap::HeapUp(RandomItr begin,RandomItr end,rn RandomItr index,rn CmpOpr cmp,SwapDo sd)rn RandomItr parItr=Parent(begin,index);rn while(parItr>=begin && cmp(*index,*parItr))rn sd(*index,*parItr);rn index=parItr;rn parIdx=Parent(begin,index);rn rnrnrntemplaternvoid MyHeap::HeapDown(RandomItr begin,RandomItr end,rn RandomItr index, rn CmpOpr cmp,SwapDo sd)rn RandomItr sonItr=Left(begin,index);rn while(sonItrrnvoid MyHeap::PopHeap(RandomItr begin,RandomItr end,rn CmpOpr cmp,SwapDo sd)rn if(begin==end)rn return;rn rn --end;rn sd(*begin,*end);//do after swappingrn HeapDown(begin,end,begin,cmp,sd);//stl 风格rnrnrn//容器的真实大小必须大于逻辑大小rn//入堆rntemplaternvoid MyHeap::PushHeap(RandomItr begin,RandomItr end,rn const HeapNode& newNode, rn CmpOpr cmp,SwapDo sd)rn *end=newNode;rn ++end;rn HeapUp(begin,end,end-1,cmp,sd);rnrnrn//制作堆rntemplaternvoid MyHeap::MakeHeap(RandomItr begin,RandomItr end,rn CmpOpr cmp,SwapDo sd)rn for(RandomItr itr=begin+(end-begin)/2-1;itr>=begin;--itr)rn HeapDown(begin,end,itr,cmp,sd);rn rnrnrn//判断是否是堆rntemplaternbool MyHeap::IsHeap(RandomItr begin,RandomItr end,CmpOpr cmp)rn for(RandomItr itr=begin+(end-begin)/2-1;itr>=begin;--itr)rn if(cmp(*itr,*Left(begin,itr)))rn return false;rn rn if(Right(begin,itr)rnvoid MyHeap::SortHeap(RandomItr begin,RandomItr end, rn CmpOpr cmp,SwapDo sd)rn //建堆rn MakeHeap(begin,end,cmp,sd);rn //排序rn for(RandomItr newEnd=end-1;newEnd>=begin+1;--newEnd)rn sd(*newEnd,*begin);rn HeapDown(begin,newEnd,begin,cmp,sd);rn rnrnrnrnrnvoid main()rn MyHeap::TestSTLHeap();rn system("pause");rnrn[/code]rnrn编译可以通过,但是运行时就有错误,问题出现在模板的迭代器没有按照预期的方式工作。rn
会场安排问题(贪心法)
问题描述: 假设要在足够多的会场里安排一批活动,并希望使用尽可能少的会场。设计一个有效的贪心算法进行安排(这个问题实际上是著名的图着色问题。若将每一个活动作为图的一个顶点,不相容活动间用边相连。使相邻顶点着有不同颜色的最小着色数,相应于要找的最小会场数)。 来换一个描述 为了能够更加生动说明问题的整个过程,所以换一个类似的描述来契合《算法图解》一书中的描述。 你没法让这些课...
2017年去过的地方
西安上学 深圳工作 珠海测试 惠州测试 大连出差 大连-广鹿岛 青岛出差 上海出差 北京出差 来去匆匆,好像没有照片 另外经停了南京,苏州,扬州,吉...
有一个问题,希望大家帮我看看
我编写完后,编译没有问题,运行时在输入账号和密码时出现了问题. 希望大家来看看,请指导一下 谢谢rnrn1、实现用户的登录功能,要求用户输入账号和密码。登录失败应给出提示信息。rn2、只允许同一个账号连续密码输入错误三次,超过三次程序结束。rn3、登录成功后,提供以下功能:1为查询余额;2为存款功能;3为取款功能;4为修改密码;5为转账功能。(4和5为选做项目)。rn部分核心代码如下:rnrnrn[code=C/C++]#includern#includern#includern#includern#define AN 9rn#define PN 7rn#define ASN 3rnstruct Accountrnrn char accountnumber[AN];rn char password[PN];rn double balance;rn;rnAccount ats[ASN]="00000001","123456",100,"00000002","123456",200,"00000003","123456",300;rnint isCorrect(char*an,char*psd)rnrn int i;rn for(i=0;i=amount)rn rn ats[i].balance-=amount;rn return 1;rn rn elsern return 0;rnrnvoid main()rnrn char AccountNumber[AN]='\0';rn char psd[PN]='\0';rn int i,errorcount=0;rn int tag,amount;rn while(1)rn rn printf("请输入8位帐号:");rn for(i=0;i<8;i++)rn AccountNumber[i]=getche();rn printf("请输入6位密码:");rn for(i=0;i<6;i++)rn rn psd[i]=getch();rn putchar('*');rn rn if(isCorrect(ats[i].accountnumber,psd)==1)rn rn while(1)rn rn rn printf("\n欢迎登陆银行账户管理系统,请选择您要的服务:1,查询;2,存款;3,取款;4退出\n");rn scanf("%d",&tag);rn switch(tag)rn rn case 1:rn printf("余额为%f\n",ats[i].balance);rn break;rn case 2:rn printf("输入存款金额:");rn scanf("%d\n",&amount);rn deposit(ats[i].accountnumber,amount);rn printf("成功,余额为%f\n",ats[i].balance);rn break;rn case 3:rn printf("取款金额");rn scanf("%d\n",&amount);rn if(amount>0)rn printf("%f\n",ats[i].balance);rn elsern printf("失败\n");rn break;rn case 4:rn break;rn rn if(tag==4)rn break;rn rn rn elsern rn errorcount++;rn if(errorcount==3)rn rn printf("关闭\n");rn exit(0);rn rn rn rn[/code]
[ACM]2033人见人爱A+B
Problem Description HDOJ上面已经有10来道A+B的题目了,相信这些题目曾经是大家的最爱,希望今天的这个A+B能给大家带来好运,也希望这个题目能唤起大家对ACM曾经的热爱。 这个题目的A和B不是简单的整数,而是两个时间,A和B 都是由3个整数组成,分别表示时分秒,比如,假设A为34 45 56,就表示A所表示的时间是34小时 45分钟 56秒。   Input
面试题:如果要画一只鸟和一个人,你会如何构图?
      1.一个人正看着笼中的鸟      2.一个人正追赶飞走的鸟      3.一只鸟停在一个人的肩上或手上      4.一个人正在向飞远的鸟招手      5.一只鸟在上空飞着,而这个人对这只鸟并不在意 看答案请按 Ctrl + A  1. 选“一个人正看着笼中的鸟”  你的幸福已经近在眼前,但它却受到一些阻碍而让你无法如愿以偿。原因当然很多,也
我的情感经历
今天下午我听歌的时候,听到灰姑娘这首歌,就想起了上大二的时候,有一个大一的迎新晚会,我上台唱歌,就是这首灰姑娘。那时候我和我对象还没有确认关系,虽然唱的不是很好,但记忆却是那么深刻。我想她了。我们异地恋,我在深圳,她在河南。一年也就见几次面。“我总在上伤你的心,我总是”...
文章热词 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型 设计制作学习
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 程序员和产品经理大家视频 nlp培训师大家有谁