当前位置:编程学习 > JAVA >>

Java 面试题(A)——Java SE

大家好:

很久没在技术区发过帖子了。看到很多人比较喜欢看面试题之类的帖子,趁着有空我也草拟了几道题目跟大家一起分享(过过面试官的隐,哈哈)。问题均为自创,如有雷同,实属巧合(老套,汗一把)。

题目主要以 Java 中的基础为主。但不会出现 new String 产生了多少个对象,Collection 与 Collections 有什么区别之类的题目。

作为试验性质(并不是真正的面试题),大多数都是主观题。


----------- 我 - 是 - 废 - 话 - 与 - 正 - 文 - 之 - 间 - 的 - 分 - 隔 - 符 -----------

1. 使用 JDBC 时一般会有一句 Class.forName("xxx.xxx.xxx.xxx"); 的代码,问一下这句代码有什么作用?这行代码需要在每次获取 Connection 时都需要写么?
或:1. 为什么 JDBC 规范称从 javax.sql.DataSource 对象是获取连接的首选方法(javax.sql.DataSource 的 API 文档上有说),而不是从 java.sql.DriverManager 获取是首先方法?

目的:JDBC 是各种 ORM 工具的基础,而这两个问题是 JDBC 的基础


2. 如果让你设计一个数据库连接池,你可能会考虑到哪些方面的问题?

目的:考查对于类库设计时,能考虑到问题的深度和广度


3. 在 JDK 1.4 中引入了一个 NIO 的类库,使得 Java 涉及 IO 的操作拥有阻塞式和非阻塞式两种,问一下阻塞 IO 与非阻塞 IO 有什么区别?有什么优缺点?

目的:网络编程的概念问题


4. 简单地说一下使用 JDK 工具 javadoc 生成的 API 文档主要包括哪些内容?
或:4. 我们都知道 keySet() 是 java.util.Map 中的一个方法,通过 HTML 版本的 J2SE API 文档你能否找出所有含有 keySet 方法的类和接口呢?

目的:Java API 文档是 Java 开发人员最常使用的文档,掌握 API 文档的使用非常有必要


5. J2SE 的 API 中没有提供实现 LRU 算法的 Map 数据结构,如果让你实现一个 LRU 算法的 Map 你会怎么做?(LRU, least recently used 最近最少被使用。指的是在固定容量的容器中,在容量达到上限时且有新的数据需要放进来时,将最不常使用的那条数据移除,以腾出空位给新数据的算法。)

目的:考查对于类库的熟悉程度


6. JDK 5 中增加了很多语言特性,比如说可变参数就是其中之一,问一下可变参数你感觉在什么地方可能会被用到?

目的:考查对于 JDK 中新增语言特性的掌握程度,并能否灵活运用


7. 锁是具有可重入性的,能否说一下什么是锁的可重入性?如果不具有重入性,那会出现什么样的问题?
或:7. 简单地说一下读写锁中读锁和写锁有什么特点,他们是如何保护共享变量的?读写锁可以应用于什么样的代码之中?

目的:锁是并发编程中最为重要的问题的,考查一下对于锁的认识。读写锁在读取数据方面相较于独占锁来说性能较高,考查对于并发编程的能力。


8. 能否简单地说一下开发过程中使用诸如 CVS、SVN、VSS、Git 等版本管理工具有什么好处?

目的:考查开发人员是否有团队合作及开发经验


9. 我们写代码时一般都会在代码中嵌入日志,能否谈一下在代码中的日志编写过程中有什么使用心得?

目的:考查开发人员对于日志是否足够重视,是否能灵活使用日志工具


10. 结束题

a. 很多软件都会给不同的版本取个名字,你知道 JDK 各种版本的名字有哪些?比如 JDK 5 叫 Tiger。

目的:知识面问题,了解一下开发人员知识的广度


b. JDK 中有很多工具,比如 javac 是 Java 的编译器工具,你能否说一下 JDK 中还有哪些工具,那些工具主要是干什么用的?

目的:JDK 的 bin 目录中有 40 余种工具,掌握一下对于 JDK 工具的了解程度
--------------------编程问答-------------------- 这样的题目比较适合我,呵呵。 --------------------编程问答--------------------
引用 1 楼 zangxt 的回复:
这样的题目比较适合我,呵呵。


谢谢支持。

10 道题目,涉及面有限,呵呵 --------------------编程问答-------------------- 题目还是有些深度的 受用了哈! --------------------编程问答-------------------- JDBC 4 之前的 需要 Class.forName(.........)。 --------------------编程问答--------------------
引用 4 楼 huntor 的回复:
JDBC 4 之前的 需要 Class.forName(.........)。


嗯,从 JDBC 4 使用了 J2EE 中的 Service Provider 机制,在支持 JDBC 4.0 规范的 JDBC 驱动 jar 的 META-INF 中加了东西。使用时会自动搜寻 classpath 中 META-INF/services 以及 classpath 中所有 jar 的 META-INF/services 目录里文件名为 java.sql.Driver 的文件,使用这个文件中的数据来加载 JDBC 驱动。 --------------------编程问答-------------------- 这贴要顶! --------------------编程问答-------------------- mark下

果果的题目有点意思 明天上班看。 --------------------编程问答-------------------- 不发答案吗?。。 --------------------编程问答-------------------- 给答案哈.. --------------------编程问答-------------------- 支持楼主,题目比较深入哦,呵呵 --------------------编程问答-------------------- 支持楼主,题目有深度!学学! --------------------编程问答-------------------- 学习了。。。先收藏。。。 --------------------编程问答-------------------- mark下,火龙果大哥发帖还真不常见,不过对于我这种水平来说真有难度…… --------------------编程问答-------------------- 看看,学学,嘿嘿 --------------------编程问答-------------------- 呵呵!很好的问题让感触良多啊! --------------------编程问答-------------------- 顶! --------------------编程问答--------------------
引用 1 楼 zangxt 的回复:
这样的题目比较适合我,呵呵。

强!感觉自己能做出一半就不错了! --------------------编程问答-------------------- 顶,等答案 --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- 收藏,学习,等答案。 --------------------编程问答-------------------- 马克先 
晚上再来看 --------------------编程问答-------------------- 有个别题能说个一二,等楼主答案 --------------------编程问答-------------------- 学习...... --------------------编程问答-------------------- --------------------编程问答-------------------- 学习。。。很多不会。。。 --------------------编程问答-------------------- 我正在找工作中......看完这几题压力倍增...... --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- 2. 如果让你设计一个数据库连接池,你可能会考虑到哪些方面的问题?
目的:考查对于类库设计时,能考虑到问题的深度和广度
a.到底是用代理还是重写close方法来实现连接的回收,
不知道apache的数据库连接池是用的哪个
b.并发的情况下如何正确分配连接
c.连接是否有效的定时检测机制,估计要起专门的线程
d.对于连接池内部的异常如何处理
e.初始化的时候数据库异常及数据库连接掉线重连
f.可配置性,例如最大连接数目等



5. J2SE 的 API 中没有提供实现 LRU 算法的 Map 数据结构,如果让你实现一个 LRU 算法的 Map 你会怎么做?(LRU, least recently used 最近最少被使用。指的是在固定容量的容器中,在容量达到上限时且有新的数据需要放进来时,将最不常使用的那条数据移除,以腾出空位给新数据的算法。)

目的:考查对于类库的熟悉程度
这个用类库?没想到,第一感觉是堆,优先队列


6. JDK 5 中增加了很多语言特性,比如说可变参数就是其中之一,问一下可变参数你感觉在什么地方可能会被用到?

目的:考查对于 JDK 中新增语言特性的掌握程度,并能否灵活运用
这个。。。还真没有在程序中用到可变参数。。。
比如最近的人口普查,某人亲属身份证号码列表,
在设计方法时可以搞成可变参数,因为并不固定其有多少亲属






--------------------编程问答-------------------- 还有一堆不会,等答案。。。 --------------------编程问答-------------------- 强帖留名,等答案 --------------------编程问答-------------------- 唉,学了这么久java方面的知识,原来什么都不知道啊。。。。。。 --------------------编程问答-------------------- 我不是来接分的,看了看题也就对其中的一两个还有点了解,其他的就别说主观意思,也只有对这些东西熟悉或者熟练之后才能谈的上自己的想法。

随便问LZ一声,知识是如何学得如此深入的,刻有见解!谢谢!!!! --------------------编程问答-------------------- 我没有权利推荐精华贴呀! --------------------编程问答-------------------- 希望能给答案参考一下,一定会让我们受益非浅! --------------------编程问答-------------------- 晕,字还打错了,是受益匪浅! --------------------编程问答--------------------
不错不错 --------------------编程问答-------------------- 绝妙好帖,找时间做做。
--------------------编程问答-------------------- --------------------编程问答-------------------- 还不错的题目,可见楼主是精心准备发帖的。 --------------------编程问答-------------------- 哈哈,太好了,我正需要这个帖子
 谢谢! --------------------编程问答-------------------- mark,需要学习的还真多 --------------------编程问答-------------------- 很是强力啊,涉及的内容果然多 --------------------编程问答-------------------- mark,感觉很有深度。很难 --------------------编程问答-------------------- --------------------编程问答-------------------- 这是招什么的面试题啊我倒和我有距离啊 --------------------编程问答-------------------- 好难~mark了再说。 --------------------编程问答-------------------- 问的面挺广的,呵呵。学到东西了。。。 --------------------编程问答-------------------- 楼主强悍,正在强化... --------------------编程问答-------------------- --------------------编程问答-------------------- 作为一个菜鸟,不懂 --------------------编程问答-------------------- 有借鉴作用~不过题目都挺老了~都6.0了~ --------------------编程问答-------------------- 顶上,题目还是有点深度的,刚接触java的人,肯定是答不上来的 --------------------编程问答-------------------- 求答案..... --------------------编程问答--------------------
引用 53 楼 javathing 的回复:
有借鉴作用~不过题目都挺老了~都6.0了~


不会吧,这是昨天出炉,应该还很新鲜吧 :( --------------------编程问答-------------------- 有些用,谢啦~~~ --------------------编程问答--------------------
引用 8 楼 lanapr 的回复:
不发答案吗?。。


引用 9 楼 quanquanfly 的回复:
给答案哈..


引用 18 楼 hongke1490 的回复:
顶,等答案


引用 21 楼 gujinf2008 的回复:
收藏,学习,等答案。


引用 23 楼 pengchengjiji 的回复:
有个别题能说个一二,等楼主答案


引用 31 楼 yaoweijq 的回复:
还有一堆不会,等答案。。。


引用 32 楼 yuliangxin 的回复:
强帖留名,等答案


引用 55 楼 wyang1991 的回复:
求答案.....


晕倒,我发帖之前以为大家会给我答案呢! --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- 正在找工作,受用啦!谢谢分享! --------------------编程问答-------------------- mark+collect --------------------编程问答-------------------- 就要毕业了,做做看吧 --------------------编程问答-------------------- 哎,自己出题自己做吧。

1. 使用 JDBC 时一般会有一句 Class.forName("xxx.xxx.xxx.xxx"); 的代码,问一下这句代码有什么作用?这行代码需要在每次获取 Connection 时都需要写么?

这一句的作用是加载一个类,并且注册 JDBC 驱动,但是这个方法没有注册驱动的功能。

我想大家应该都知道在类加载的过程中会初始化类中所有的静态部分,比如静态成员、静态代码块、静态方法,以及静态内部类。而 JDBC 规范规定,所有实现 java.sql.Driver 的驱动需要在类加载的过程使用 DriverManager.registerDriver 方法将自己注册给 DriverManager (详见 java.sql.Driver 的 API 文档),而大多数的 JDBC 驱动是在实现 java.sql.Driver 接口的驱动类的静态块中做这件事情的。

由于这里只需要加载一个类,并不需要生成这个类驱动类的实例的,因此就采用 Class.forName 方法来加载了,这样 JDBC 的驱动管理器才能使用这个驱动程序。

在实现 JDBC 4.0 规范的 JDBC 驱动不再这行代码了,当然了,你所使用 JDK 在 6.0 或以上版本才行。至于 JDBC 4.0 为什么可以不使用这种方式加载驱动,可以参考我在 5 楼的回复。

这一行代码并不需要每次写,这代码只需要在最初的地方写一次就可以了,虽然 JVM 保证一个类不会被加载两次,即便是这样,我们也不该每次都去写。


1. 为什么 JDBC 规范称从 javax.sql.DataSource 对象是获取连接的首选方法(javax.sql.DataSource 的 API 文档上有说),而不是从 java.sql.DriverManager 获取是首先方法?

javax.sql.DataSource 除了 DriverManager 固有的功能之外,还有其他的功能,比如:可以作为数据库连接池的实现,可以是基于分布式事务的实现。而且 DataSource 对象一般是从 JNDI 上查找而来,这样就能保证服务器迁移时数据库连接参数的修改不依赖于应用程序。


2. 如果让你设计一个数据库连接池,你可能会考虑到哪些方面的问题?

30 楼的朋友提到了很多,我再细化一下,当然了,这绝对不是连接池实现全部的问题:

a. 连接池需要实现前面提到的 javax.sql.DataSource 接口,以适合于不同的场合。

b. Connection#close 问题。使用者使用连接池与不使用连接池,除了从哪获得 Connection 对象不一样之外,其他 JDBC 的代码是完全相同的,并不能因为使用连接池而改变既有的 JDBC 代码。如果不能改变 JDBC 代码,就带来了一个 Connection close 的问题,大家都知道这个调用是关闭数据库连接,如果在连接池中这么做的话就会关闭连接,使用连接得不到重用。

c. 连接被动关闭问题。为了保证连接的复用性,将连接一直保存在池中。有些数据库服务器会将已经连接很久的客户端连接主动踢掉,如果碰到这种情况,在池中的这个连接池就会变为不可用状态,如果被客户端使用的话将会抛出连接被关闭的 SQLException。

d. 连接回收问题。假如我们的连接池最大设为 50 个,在某一并发很高的时段达到了 50 个,但是过后并发率就降下去了,对于连接池来说池中还是 50 个连接,实际上后面根本不需要那么多连接。这时连接池白白地浪费了几十个数据库宝贵的连接(数据库对于客户端的连接数是有限制的),如果连接池占用了很多的连接,那么可能会导致其他应用程序因为数据库客户端的连接数到了限制而无法再获得连接。我们应该及时地将不需要使用的连接关闭还给数据库服务器,保留一些基本连接数。

e. 网络中断重连问题。连接池中的连接在网络中断时,池中连接会全部断开,数据库服务端也会回收断开的连接。但是网络中断后,过了一些时间又连上了,这时池中的连接依然是断开的,如果取出来用的话,不用说就会抛出异常的。一个可用的连接需要有实现自动重连功能,否则就没有可用的价值。


3. 在 JDK 1.4 中引入了一个 NIO 的类库,使得 Java 涉及 IO 的操作拥有阻塞式和非阻塞式两种,问一下阻塞 IO 与非阻塞 IO 有什么区别?有什么优缺点?

在阻塞模式下,若从网络流中读取不到指定大小的数据量,阻塞 IO 就在那里阻塞着。比如,已经后面会有 10 个字节的数据发过来,但是我现在只收到 8 个字节,那么当前线程就在那傻傻地等到下一个字节的到来,对,就在那等着,啥事也不做,直到把这 10 个字节读取完,这才将阻塞放开通行。

在非阻塞模式下,若从网络流中读取不到指定大小的数据量,非阻塞 IO 就立即通行。比如,已经后面会有 10 个字节的数据发过来,但是我现在只收到 8 个字节,那么当前线程就读取这 8 个字节的数据,读完后就立即返回,等另外两个字节再来的时候再去读取。

从上面可以看出,阻塞 IO 在性能方面是很低下的,如果要使用阻塞 IO 完成一个 Web 服务器的话,那么对于每一个请求都必须启用一个线程进行处理。而使用非阻塞 IO 的话,一到两个线程基本上就够了,因为线程不会产生阻塞,好比一下接收 A 请求的数据,另一下接收 B 请求的数据,等等,就是不停地东奔西跑,直接到把数据接收完了。

虽然说,非阻塞 IO 比阻塞 IO 有更高的性能,但是对于开发来的,难度就成数倍递增了。由于是有多少数据就读取多少数据,这样在读取完整之前需要将已经读取到的数据保存起来,而且需要与其他地方来的数据隔离开来不能混在一起,否则就不知道这数据是谁的了,呵呵。


先做三道吧,剩下的明天再做,如有错误之处,请指正,谢谢! --------------------编程问答--------------------  也喜欢这种能够稍微即兴一点的题目 要是纯考jdk api就感觉有点烦 --------------------编程问答-------------------- --------------------编程问答-------------------- 学些了,还是菜鸟,接触jdbc不久,对以后的学习有帮助啊 --------------------编程问答-------------------- 简单的做一下,楼主看我能得多少分,哈
1. 使用 JDBC 时一般会有一句 Class.forName("xxx.xxx.xxx.xxx"); 的代码,问一下这句代码有什么作用?这行代码需要在每次获取 Connection 时都需要写么?

class.forName是为了加载驱动类,从java的类加载机制来说,一个类第一次时使用时加载,以后使用就不用加载了,所以说不是每次获取连接时都要加载类。


或:1. 为什么 JDBC 规范称从 javax.sql.DataSource 对象是获取连接的首选方法(javax.sql.DataSource 的 API 文档上有说),而不是从 java.sql.DriverManager 获取是首先方法?

目的:JDBC 是各种 ORM 工具的基础,而这两个问题是 JDBC 的基础


第一效率高,因为创建一个数据库连接很费资源,如果使用传统JDBC,每次使用连接时都要创建,使用完后又要关闭连接,这一步会销毁数据库连接。而数据源使用连接时一般不会再创建,关闭连接时不会销毁数据库连接,只是把它放回连接池中以备下次再用。
第二可维护性好


2. 如果让你设计一个数据库连接池,你可能会考虑到哪些方面的问题?

目的:考查对于类库设计时,能考虑到问题的深度和广度

第一怎样缓存数据库连接对象

第二怎样提供数据库连接对象

第三怎样回收数据库连接对象




3. 在 JDK 1.4 中引入了一个 NIO 的类库,使得 Java 涉及 IO 的操作拥有阻塞式和非阻塞式两种,问一下阻塞 IO 与非阻塞 IO 有什么区别?有什么优缺点?

目的:网络编程的概念问题


4. 简单地说一下使用 JDK 工具 javadoc 生成的 API 文档主要包括哪些内容?

包名,类名及类的文档注释,属性名及属性的文档注释,方法名、参数名及方法的文档注释,等等。

或:4. 我们都知道 keySet() 是 java.util.Map 中的一个方法,通过 HTML 版本的 J2SE API 文档你能否找出所有含有 keySet 方法的类和接口呢?

目的:Java API 文档是 Java 开发人员最常使用的文档,掌握 API 文档的使用非常有必要

能,首先找java.util包,然后在包中找Map类,在类中就可以找到对应方法了,如果要找到所用的keySet方法,首先要做的可能是查看Map类实现的接口中哪个接口包含keySet方法通过接口就可以找到所有实现了此接口的类了。


5. J2SE 的 API 中没有提供实现 LRU 算法的 Map 数据结构,如果让你实现一个 LRU 算法的 Map 你会怎么做?(LRU, least recently used 最近最少被使用。指的是在固定容量的容器中,在容量达到上限时且有新的数据需要放进来时,将最不常使用的那条数据移除,以腾出空位给新数据的算法。)

目的:考查对于类库的熟悉程度

在我自已的实现类中包含一个Map类,再包含一个treeMap类,前者当容器用,后者记录某个对象的使用情况,两者都是以Key取值,而前者取出的是实际对象,后者取出的是对应对象使用的次数,利用后者放入的数据会自动排好序的性质,就可以很容易得到Map中哪个对象最近最少使用。


6. JDK 5 中增加了很多语言特性,比如说可变参数就是其中之一,问一下可变参数你感觉在什么地方可能会被用到?

目的:考查对于 JDK 中新增语言特性的掌握程度,并能否灵活运用

参数可有可无时可以使用,或个数不确定,但业务含义又大体相当时。


7. 锁是具有可重入性的,能否说一下什么是锁的可重入性?如果不具有重入性,那会出现什么样的问题?
或:7. 简单地说一下读写锁中读锁和写锁有什么特点,他们是如何保护共享变量的?读写锁可以应用于什么样的代码之中?

目的:锁是并发编程中最为重要的问题的,考查一下对于锁的认识。读写锁在读取数据方面相较于独占锁来说性能较高,考查对于并发编程的能力。


如果没有重入性,并发访问数据会出现结果不一致的现象。读锁可以保证当有人读取数据时,数据不会被修改,写锁可以保证只有一个人可以修改数据。


8. 能否简单地说一下开发过程中使用诸如 CVS、SVN、VSS、Git 等版本管理工具有什么好处?

目的:考查开发人员是否有团队合作及开发经验


方便团队一起开发一个项目,也方便维护代码


9. 我们写代码时一般都会在代码中嵌入日志,能否谈一下在代码中的日志编写过程中有什么使用心得?

目的:考查开发人员对于日志是否足够重视,是否能灵活使用日志工具


嵌入代码中的日志,必须要有足够的可控性,比如可以控制是否输出日志,把日志输出到哪里,都输出什么样的日志。一般会使用dom4J来做日志


10. 结束题

a. 很多软件都会给不同的版本取个名字,你知道 JDK 各种版本的名字有哪些?比如 JDK 5 叫 Tiger。

目的:知识面问题,了解一下开发人员知识的广度


b. JDK 中有很多工具,比如 javac 是 Java 的编译器工具,你能否说一下 JDK 中还有哪些工具,那些工具主要是干什么用的?

目的:JDK 的 bin 目录中有 40 余种工具,掌握一下对于 JDK 工具的了解程度
 
我知道的并常用的java javac jar --------------------编程问答-------------------- 好贴需要回复; --------------------编程问答-------------------- 来晚啦,先回复 再看题  --------------------编程问答--------------------
引用 70 楼 kokobox 的回复:
来晚啦,先回复 再看题

+1 --------------------编程问答-------------------- 标题:文字信息处理及编辑3000/月 
本公司现承接一批商务旧书籍,文字手写资料,
现须要从新整理成为电子文档,
须招若干名有充足时间的资料整理员
具体招聘事宜请发个人简历到我司邮箱或登陆公司网站了解详情 www.59791.com 
(请放心,本公司所有招聘职位不需要交纳任何费用)
公司每天工资发放记录:http://www.59791.com/gongzi.htm
(绝不以任何理由收取押金,手续费,更不会拖欠工资)
--------------------编程问答-------------------- --------------------编程问答-------------------- 只会第一题~废废了 --------------------编程问答-------------------- 哎 水平太低 答不出来啊··· --------------------编程问答-------------------- 很久没在技术区发过帖子了。看到很多人比较喜欢看面试题之类的帖子,趁着有空我也草拟了几道题目跟大家一起分享(过过面试官的隐,哈哈)。问题均为自创,如有雷同,实属巧合(老套,汗一把)。 --------------------编程问答-------------------- 学习 看看 --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- 好贴。。。。
我这种水平就围观一下好了。。。。。 --------------------编程问答-------------------- --------------------编程问答-------------------- 好贴,学习了... --------------------编程问答-------------------- 学习了,收藏 --------------------编程问答-------------------- 不错相当好。呵呵 --------------------编程问答-------------------- 绝妙好帖,学习学习了 --------------------编程问答-------------------- 值得看看! --------------------编程问答-------------------- 谢谢大家,已解决 --------------------编程问答-------------------- 好好学习一下 --------------------编程问答-------------------- --------------------编程问答-------------------- 支持一下啊,我觉得 ! --------------------编程问答-------------------- 分隔符有创意~! --------------------编程问答-------------------- --------------------编程问答-------------------- 这个时间段招聘的很多,这些东西都以一定的帮助,我就默默的帮顶了,也顺便打酱油得到那10分!

题目主要以 Java 中的基础为主。但不会出现 new String 产生了多少个对象
这个东西,我笔试的时候来过几次! --------------------编程问答-------------------- 顶,,学习了 --------------------编程问答-------------------- 看看。。。 --------------------编程问答-------------------- 很这用啊,我面试的时候,里面就有一两题中了。 --------------------编程问答-------------------- 这个东西对于我来说,我觉得不错! --------------------编程问答--------------------   顶        答案 --------------------编程问答-------------------- --------------------编程问答-------------------- 好贴,学习了.期待楼主明天的解析
补充:Java ,  Java SE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,