志在指尖
用双手敲打未来

java 面试题(java面试基础问题)

java面试题

这份面试清单是从我2015年做了TeamLeader之后开始搜集的,一方面是给公司招聘用,另一方面是想用它来发掘在Java技能栈中,还有那些常识点是我不知道的,我想找到这些技能盲点,然后修正它,以此来进步自己的技能水平。虽然我是从2009年就开始参与编程作业了,但我仍旧觉得自己现在要学的东西很多,并且学习这些常识,让我很有成就感和满意感,那所以何乐而不为呢?
说回面试的事,这份面试清单本来是只有我们内部运用的,可到后来有很多朋友在微信上联络到我,让我帮他们找一些面试方面的材料,并且这些关系也不太好回绝,一呢,是由于这些找我的人要么是我的朋友的弟弟妹妹,要么是我的表弟表妹们;二呢,我也不想敷衍了事的对付,俗语说的好“受人之事忠人之命”,不能孤负这份信赖。但最终就有了这么一个想法,要不要把我收拾的这200多道Java面试题分享出去,去帮助更多的人。
说实话刚开始的时分是比较犹疑的,首要这么做会不会有点帮人“作弊”的嫌疑,最终我总算想通了,觉得这未必是一件坏事。
榜首:有更多的人因此而学到了更多的常识,这不算是一件坏事,刚好相反。
第二:这仅仅一种经验的高度提炼,让那些有技能才能的人,学会怎样表达自己所把握的常识,这也是一件好事。
第三:假如仅仅死记硬背这些面试题,假如面试官能再深入问纠一些细节,也可识破之中的“玄机”。
第四:学习有很多种办法,但只有好学者才会临池学书。假如是不想学的人,无论你提供什么材料,他都会视若无睹,我仅仅为好学者,提供一份自我完成的学习材料罢了。
就像之前听过的一个故事,为什么在美国有些企业只需看你是哈佛的学历就会直接选取你呢?由于在美国上大学仍是挺贵的,首要你能上的起哈佛阐明你的家境还不错;第二,你能进入哈佛,也阐明你脑子不笨;再者就是,哈佛的确能给你提供不错的教育环境。综合以上特质,所以这些企业才敢直接聘请那些有哈佛学历的人。
所以对应到我们这份面试题也是相同,首要你假如能真的记住其间大部分的答案:榜首,阐明你的脑子不笨;第二,阐明你有上进心,也乐意学习;第三,记住了这份面试题之后,即便你的才能刚开始没有那么好,但有了理论支撑之后,再去作业实践的时分,就有了理论指导,结果也不会太差。
所以假如您是面试官,刚好又看到这里,假如条件允许的话,请多给这样乐意学又很聪明的年轻人一些时机,即便他们现在并没有太多的实践经验。
面试题模块介绍
说了这么多,下面进入我们本文的主题,我们这份面试题,包括的内容了十九了模块:Java根底、容器、多线程、反射、目标复制、JavaWeb模块、反常、网络、规划形式、Spring/SpringMVC、SpringBoot/SpringCloud、Hibernate、Mybatis、RabbitMQ、Kafka、Zookeeper、MySql、Redis、JVM。如下图所示:
或许对于初学者不需要后边的结构和JVM模块的常识,读者朋友们可根据自己的状况,选择对应的模块进行阅览。
适宜阅览人群
需要面试的初/中/高级java程序员
想要查漏补缺的人
想要不断完善和扩充自己java技能栈的人
java面试官
具体面试题
下面一起来看208道面试题,具体的内容。
一、Java根底
1.JDK和JRE有什么差异?
2.==和equals的差异是什么?
3.两个目标的hashCode()相同,则equals()也一定为true,对吗?
4.final在java中有什么效果?
5.java中的Math.round(-1.5)等于多少?
6.String属于根底的数据类型吗?
7.java中操作字符串都有哪些类?它们之间有什么差异?
8.Stringstr=”i”与Stringstr=newString(“i”)相同吗?
9.怎样将字符串反转?
10.String类的常用办法都有那些?
11.抽象类有必要要有抽象办法吗?
12.普通类和抽象类有哪些差异?
13.抽象类能运用final润饰吗?
14.接口和抽象类有什么差异?
15.java中IO流分为几种?
16.BIO、NIO、AIO有什么差异?
17.Files的常用办法都有哪些?
二、容器
18.java容器都有哪些?
19.Collection和Collections有什么差异?
20.List、Set、Map之间的差异是什么?
21.HashMap和Hashtable有什么差异?
22.怎样决定运用HashMap仍是TreeMap?
23.说一下HashMap的完成原理?
24.说一下HashSet的完成原理?
25.ArrayList和LinkedList的差异是什么?
26.怎样完成数组和List之间的转换?
27.ArrayList和Vector的差异是什么?
28.Array和ArrayList有何差异?
29.在Queue中poll()和remove()有什么差异?
30.哪些调集类是线程安全的?
31.迭代器Iterator是什么?
32.Iterator怎样运用?有什么特点?
33.Iterator和ListIterator有什么差异?
34.怎样确保一个调集不能被修改?
三、多线程
35.并行和并发有什么差异?
36.线程和进程的差异?
37.守护线程是什么?
38.创立线程有哪几种办法?
39.说一下runnable和callable有什么差异?
40.线程有哪些状况?
41.sleep()和wait()有什么差异?
42.notify()和notifyAll()有什么差异?
43.线程的run()和start()有什么差异?
44.创立线程池有哪几种办法?
45.线程池都有哪些状况?
46.线程池中submit()和execute()办法有什么差异?
47.在java程序中怎样保证多线程的运转安全?
48.多线程锁的晋级原理是什么?
49.什么是死锁?
50.怎样防止死锁?
51.ThreadLocal是什么?有哪些运用场景?
52.说一下synchronized底层完成原理?
53.synchronized和volatile的差异是什么?
54.synchronized和Lock有什么差异?
55.synchronized和ReentrantLock差异是什么?
56.说一下atomic的原理?
四、反射
57.什么是反射?
58.什么是java序列化?什么状况下需要序列化?
59.动态署理是什么?有哪些运用?
60.怎样完成动态署理?
五、目标复制
61.为什么要运用克隆?
62.怎样完成目标克隆?
63.深复制和浅复制差异是什么?
六、JavaWeb
64.jsp和servlet有什么差异?
65.jsp有哪些内置目标?效果别离是什么?
66.说一下jsp的4种效果域?
67.session和cookie有什么差异?
68.说一下session的作业原理?
69.假如客户端禁止cookie能完成session还能用吗?
70.springmvc和struts的差异是什么?
71.怎样防止sql注入?
72.什么是XSS进犯,怎样防止?
73.什么是CSRF进犯,怎样防止?
七、反常
74.throw和throws的差异?
75.final、finally、finalize有什么差异?
76.try-catch-finally中哪个部分能够省略?
77.try-catch-finally中,假如catch中return了,finally还会执行吗?
78.常见的反常类有哪些?
八、网络
79.http响应码301和302代表的是什么?有什么差异?
80.forward和redirect的差异?
81.简述tcp和udp的差异?
82.tcp为什么要三次握手,两次不行吗?为什么?
83.说一下tcp粘包是怎样产生的?
84.OSI的七层模型都有哪些?
85.get和post恳求有哪些差异?
86.怎样完成跨域?
87.说一下JSONP完成原理?
九、规划形式
88.说一下你熟悉的规划形式?
89.简略工厂和抽象工厂有什么差异?
十、Spring/SpringMVC
90.为什么要运用spring?
91.解释一下什么是aop?
92.解释一下什么是ioc?
93.spring有哪些首要模块?
94.spring常用的注入办法有哪些?
95.spring中的bean是线程安全的吗?
96.spring支持几种bean的效果域?
97.spring自动装配bean有哪些办法?
98.spring事务完成办法有哪些?
99.说一下spring的事务阻隔?
100.说一下springmvc运转流程?
101.springmvc有哪些组件?
102.@RequestMapping的效果是什么?
103.@Autowired的效果是什么?
十一、SpringBoot/SpringCloud
104.什么是springboot?
105.为什么要用springboot?
106.springboot核心配置文件是什么?
107.springboot配置文件有哪几种类型?它们有什么差异?
108.springboot有哪些办法能够完成热布置?
109.jpa和hibernate有什么差异?
110.什么是springcloud?
111.springcloud断路器的效果是什么?
112.springcloud的核心组件有哪些?
十二、Hibernate
113.为什么要运用hibernate?
114.什么是ORM结构?
115.hibernate中怎样在控制台查看打印的sql语句?
116.hibernate有几种查询办法?
117.hibernate实体类能够被界说为final吗?
118.在hibernate中运用Integer和int做映射有什么差异?
119.hibernate是怎样作业的?
120.get()和load()的差异?
121.说一下hibernate的缓存机制?
122.hibernate目标有哪些状况?
123.在hibernate中getCurrentSession和openSession的差异是什么?
124.hibernate实体类有必要要有无参构造函数吗?为什么?
十三、Mybatis
125.mybatis中#{}和${}的差异是什么?
126.mybatis有几种分页办法?
127.RowBounds是一次性查询全部结果吗?为什么?
128.mybatis逻辑分页和物理分页的差异是什么?
129.mybatis是否支持推迟加载?推迟加载的原理是什么?
130.说一下mybatis的一级缓存和二级缓存?
131.mybatis和hibernate的差异有哪些?
132.mybatis有哪些执行器(Executor)?
133.mybatis分页插件的完成原理是什么?
134.mybatis怎样编写一个自界说插件?
十四、RabbitMQ
135.rabbitmq的运用场景有哪些?
136.rabbitmq有哪些重要的角色?
137.rabbitmq有哪些重要的组件?
138.rabbitmq中vhost的效果是什么?
139.rabbitmq的音讯是怎样发送的?
140.rabbitmq怎样保证音讯的稳定性?
141.rabbitmq怎样防止音讯丢掉?
142.要保证音讯持久化成功的条件有哪些?
143.rabbitmq持久化有什么缺点?
144.rabbitmq有几种广播类型?
145.rabbitmq怎样完成推迟音讯队列?
146.rabbitmq集群有什么用?
147.rabbitmq节点的类型有哪些?
148.rabbitmq集群搭建需要留意哪些问题?
149.rabbitmq每个节点是其他节点的完整复制吗?为什么?
150.rabbitmq集群中仅有一个磁盘节点崩溃了会发生什么状况?
151.rabbitmq对集群节点中止顺序有要求吗?
十五、Kafka
152.kafka能够脱离zookeeper单独运用吗?为什么?
153.kafka有几种数据保留的战略?
154.kafka同时设置了7天和10G清除数据,到第五天的时分音讯达到了10G,这个时分kafka将怎样处理?
155.什么状况会导致kafka运转变慢?
156.运用kafka集群需要留意什么?
十六、Zookeeper
157.zookeeper是什么?
158.zookeeper都有哪些功用?
159.zookeeper有几种布置形式?
160.zookeeper怎样保证主从节点的状况同步?
161.集群中为什么要有主节点?
162.集群中有3台服务器,其间一个节点宕机,这个时分zookeeper还能够运用吗?
163.说一下zookeeper的通知机制?
十七、MySql
164.数据库的三范式是什么?
165.一张自增表里面总共有7条数据,删除了最终2条数据,重启mysql数据库,又插入了一条数据,此刻id是几?
166.怎样获取当前数据库版别?
167.说一下ACID是什么?
168.char和varchar的差异是什么?
169.float和double的差异是什么?
170.mysql的内衔接、左衔接、右衔接有什么差异?
171.mysql索引是怎样完成的?
172.怎样验证mysql的索引是否满意需求?
173.说一下数据库的事务阻隔?
174.说一下mysql常用的引擎?
175.说一下mysql的行锁和表锁?
176.说一下达观锁和悲观锁?
177.mysql问题排查都有哪些手段?
178.怎样做mysql的功用优化?
十八、Redis
179.redis是什么?都有哪些运用场景?
180.redis有哪些功用?
181.redis和memecache有什么差异?
182.redis为什么是单线程的?
183.什么是缓存穿透?怎样处理?
184.redis支持的数据类型有哪些?
185.redis支持的java客户端都有哪些?
186.jedis和redisson有哪些差异?
187.怎样保证缓存和数据库数据的一致性?
188.redis持久化有几种办法?
189.redis怎样完成分布式锁?
190.redis分布式锁有什么缺陷?
191.redis怎样做内存优化?
192.redis筛选战略有哪些?
193.redis常见的功用问题有哪些?该怎样处理?
十九、JVM
194.说一下jvm的首要组成部分?及其效果?
195.说一下jvm运转时数据区?
196.说一下仓库的差异?
197.队列和栈是什么?有什么差异?
198.什么是双亲派遣模型?
199.说一下类加载的执行过程?
200.怎样判别目标是否能够被收回?
201.java中都有哪些引用类型?
202.说一下jvm有哪些废物收回算法?
203.说一下jvm有哪些废物收回器?
204.具体介绍一下CMS废物收回器?
205.新生代废物收回器和老生代废物收回器都有哪些?有什么差异?
206.简述分代废物收回器是怎样作业的?
207.说一下jvm调优的东西?
208.常用的jvm调优的参数都有哪些?

java面试基础问题

1、String类能够被承继吗?
String类在声明时运用final关键字润饰,被final关键字润饰的类无法被承继。
接下来咱们能够看一下String类的源代码片段:
publicfinalclassStringimplementsjava.io.Serializable,Comparable<String>,CharSequence{/**Thevalueisusedforcharacterstorage.*/privatefinalcharvalue[];/**Cachethehashcodeforthestring*/privateinthash;//Defaultto0/**useserialVersionUIDfromJDK1.0.2forinteroperability*/privatestaticfinallongserialVersionUID=-6849794470754667710L;
●为什么Java语言的开发者,把String类界说为final的呢?
由于只有当字符串是不行变的,字符串池才有可能完成。字符串池的完成能够在运转时节约许多heap空间,由于不同的字符串变量都指向池中的同一个字符串。但假如字符串是可变的,那么Stringinterning将不能完成,由于这样的话,假如变量改动了它的值,那么其它指向这个值的变量的值也会一同改动。假如字符串是可变的,那么会引起很严重的安全问题。譬如,数据库的用户名、暗码都是以字符串的办法传入来取得数据库的连接,或许在socket编程中,主机名和端口都是以字符串的办法传入。由于字符串是不行变的,所以它的值是不行改动的,否则黑客们能够钻到空子,改动字符串指向的目标的值,形成安全漏洞。
由于字符串是不行变的,所以是多线程安全的,同一个字符串实例能够被多个线程同享。这样便不必由于线程安全问题而运用同步。字符串自己便是线程安全的。
由于字符串是不行变的,所以在它创立的时分HashCode就被缓存了,不需求从头核算。这就使得字符串很合适作为Map中的键,字符串的处理速度要快过其它的键目标。这便是HashMap中的键往往都运用字符串。
●final关键字除了润饰类之外,还有哪些用法呢?
final润饰的变量,一旦赋值,不行从头赋值;
final润饰的办法无法被掩盖;
final润饰的实例变量,有必要手动赋值,不能采用体系默许值;
final润饰的实例变量,一般和static联用,用来声明常量;
留意:final不能和abstract关键字联合运用。
总归,final表明终究的、不行变的。
2、&和&&的差异?
●&运算符是:逻辑与;&&运算符是:短路与。
●&和&&在程序中终究的运算成果是完全一致的,只不过&&存在短路现象,当&&运算符左面的表达式成果为false的时分,右边的表达式不履行,此时就发生了短路现象。假如是&运算符,那么不论左面的表达式是true仍是false,右边表达式是一定会履行的。这便是他们俩的本质差异。
●当然,&运算符还能够运用在二进制位运算上,例如按位与操作。
3、两个目标值相同equals成果为true,但却可有不同的hashCode,这句话对不对?
不对,假如两个目标x和y满意x.equals(y)==true,它们的哈希值(hashCode)应当相同。Java关于equals办法和hashCode办法是这样规定的:
(1)假如两个目标相同(equals办法回来true),那么它们的hashCode值一定要相同;
(2)假如两个目标的hashCode相同,它们并不一定相同。当然,你未必依照要求去做,但是假如你违反了上述准则就会发现在运用调集时,相同的目标能够出现在Set调会集,同时增加新元素的效率会大大下降(关于运用哈希存储的体系,假如哈希码频繁的冲突将会形成存取功能急剧下降)。
关于equals和hashCode办法,许多Java程序员都知道,但许多人也便是只是了解罢了,在JoshuaBloch的大作《EffectiveJava》(《EffectiveJava》在许多公司,是Java程序员必看书本,假如你还没看过,那就赶紧去买一本吧)中是这样介绍equals办法的:
首要equals办法有必要满意自反性(x.equals(x)有必要回来true)、对称性(x.equals(y)回来true时,y.equals(x)也有必要回来true)、传递性(x.equals(y)和y.equals(z)都回来true时,x.equals(z)也有必要回来true)和一致性(当x和y引证的目标信息没有被修正时,屡次调用x.equals(y)应该得到相同的回来值),而且关于任何非null值的引证x,x.equals(null)有必要回来false。完成高质量的equals办法的诀窍包括:
运用==操作符查看”参数是否为这个目标的引证”;
运用instanceof操作符查看”参数是否为正确的类型”;
关于类中的关键特点,查看参数传入目标的特点是否与之相匹配;
编写完equals办法后,问自己它是否满意对称性、传递性、一致性;
重写equals时总是要重写hashCode;
不要将equals办法参数中的Object目标替换为其他的类型,在重写时不要遗忘@Override注解。
4、在Java中,如何跳出当前的多重嵌套循环?
在最外层循环前加一个标记如outfor,然后用breakoutfor;能够跳出多重循环。例如以下代码:
publicclassTestBreak{publicstaticvoidmain(String[]args){
outfor:for(inti=0;i<10;i++){for(intj=0;j<10;j++){if(j==5){breakoutfor;
}
System.out.println(“j=”+j);
}
}
}
}
运转成果如下所示:
j=0
j=1
j=2
j=3
j=4
5、重载(overload)和重写(override)的差异?重载的办法能否依据回来类型进行差异?
办法的重载和重写都是完成多态的办法,差异在于前者完成的是编译时的多态性,而后者完成的是运转时的多态性。
重载发生在一个类中,同名的办法假如有不同的参数列表(类型不同、个数不同、次序不同)则视为重载。
重写发生在子类与父类之间,重写要求子类重写之后的办法与父类被重写办法有相同的回来类型,比父类被重写办法更好拜访,不能比父类被重写办法声明更多的反常(里氏代换准则)。重载对回来类型没有特殊的要求。
●办法重载的规则:
办法名一致,参数列表中参数的次序,类型,个数不同。
重载与办法的回来值无关,存在于父类和子类,同类中。
能够抛出不同的反常,能够有不同润饰符。
●办法重写的规则:
参数列表、办法名、回来值类型有必要完全一致;
结构办法不能被重写;
声明为final的办法不能被重写;
声明为static的办法不存在重写(重写和多态联合才有意义);
拜访权限不能比父类更低;
重写之后的办法不能抛出更广泛的反常;
6、当一个目标被当作参数传递到一个办法后,此办法可改动这个目标的特点,并可回来变化后的成果,那么这里是值传递仍是引证传递?
是值传递。Java语言的办法调用只支撑参数的值传递。当一个目标实例作为一个参数被传递到办法中时,参数的值便是对该目标的内存地址。这个值(内存地址)被传递后,同一个内存地址指向堆内存当中的同一个目标,所以经过哪个引证去操作这个目标,目标的特点都是改动的。
7、为什么办法不能依据回来类型来差异重载?
咱们来看以下的代码:
publicvoidtestMethod(){
doSome();
}publicvoiddoSome(){
}publicintdoSome(){return1;
}
在Java语言中,调用一个办法,即便这个办法有回来值,咱们也能够不接收这个回来值,例如以上两个办法doSome(),在testMethod()中调用的时分,Java编译器无法差异调用的具体是哪个办法。所以关于编译器来说,doSome()办法不是重载而是重复了,编译器报错。所以差异这两个办法不能依托办法的回来值类型。
8、笼统类(abstractclass)和接口(interface)有什么异同?
不同点:
●笼统类中能够界说结构器,接口不能;
●笼统类能够有笼统办法和具体办法,接口不能有具体办法;
●接口中的成员全都是public的,笼统类中的成员能够运用private、public、protected、默许等润饰;
●笼统类中能够界说成员变量,接口中只能是常量;
●有笼统办法的类有必要被声明为笼统类,而笼统类未必要有笼统办法;
●笼统类中能够包含静态办法,接口中不能有静态办法;
●一个类只能承继一个笼统类,一个类能够完成多个接口;
相同点:
●不能够实例化;
●能够将笼统类和接口类型作为引证类型;
●一个类假如承继了某个笼统类或许完成了某个接口都需求对其中的笼统办法悉数进行完成,否则该类依然需求被声明为笼统类;
9、char型变量中能不能存储一个中文汉字,为什么?
char类型能够存储一个中文汉字,由于Java中运用的编码是Unicode(不选择任何特定的编码,直接运用字符在字符会集的编号,这是一致的仅有办法),一个char类型占2个字节(16比特),所以放一个中文是没问题的。
补充:运用Unicode意味着字符在JVM内部和外部有不同的表现办法,在JVM内部都是Unicode,当这个字符被从JVM内部转移到外部时(例如存入文件体系中),需求进行编码转化。所以Java中有字节省和字符流,以及在字符流和字节省之间进行转化的转化流,如InputStreamReader和OutputStreamReader,这两个类是字节省和字符流之间的适配器类,承当了编码转化的使命。
10、笼统的(abstract)办法是否可同时是静态的(static),是否可同时是本地办法(native),是否可同时被synchronized?
都不能。
●笼统办法需求子类重写,而静态的办法是无法被重写的,因而二者是对立的。
●本地办法是由本地代码(如C++代码)完成的办法,而笼统办法是没有完成的,也是对立的。
●synchronized和办法的完成细节有关,笼统办法不触及完成细节,因而也是彼此对立的。
11、==和equals的差异?
equals和==最大的差异是一个是办法一个是运算符。
●==:假如比较的目标是基本数据类型,则比较的是数值是否相等;假如比较的是引证数据类型,则比较的是目标的地址值是否相等。
●equals():用来比较办法两个目标的内容是否相等。equals办法不能用于基本数据类型的变量,假如没有对equals办法进行重写,则比较的是引证类型的变量所指向的目标的地址。
12、阐述静态变量和实例变量的差异?
不论创立多少个目标,静态变量在内存中有且仅有一个;实例变量有必要依存于某一实例,需求先创立目标然后经过目标才能拜访到它。静态变量能够完成让多个目标同享内存。
13、break和continue的差异?
●break和continue都是用来控制循环的句子。
●break用于完全完毕一个循环,跳出循环体履行循环后边的句子。
continue用于越过本次循环,继续下次循环。
14、Strings=”Hello”;s=s+”world!”;这两行代码履行后,原始的String目标中的内容变了没有?
没有。
由于String被规划成不行变类,所以它的一切目标都是不行变目标。
在这段代码中,s原先指向一个String目标,内容是”Hello”,然后咱们对s进行了“+”操作,那么s所指向的那个目标是否发生了改动呢?
答案是没有。这时s不指向本来那个目标了,而指向了另一个String目标,内容为”Helloworld!”,本来那个目标还存在于内存之中,只是s这个引证变量不再指向它了。
经过上面的说明,咱们很简单导出另一个定论,假如经常对字符串进行各种各样的修正,或许说,不行预见的修正,那么运用String来代表字符串的话会引起很大的内存开支。由于String目标树立之后不能再改动,所以关于每一个不同的字符串,都需求一个String目标来表明。这时,应该考虑运用StringBuffer/StringBuilder类,它答应修正,而不是每个不同的字符串都要生成一个新的目标。并且,这两种类的目标转化十分简单。同时,咱们还能够知道,假如要运用内容相同的字符串,不必每次都new一个String。例如咱们要在结构器中对一个名叫s的String引证变量进行初始化,把它设置为初始值,应当这样做:
s=newString(“动力节点,口口相传的Java黄埔军校”);
而不是这样做:
s=newString(“动力节点,口口相传的Java黄埔军校”);
后者每次都会调用结构器,生成新目标,功能低下且内存开支大,并且没有意义,由于String目标不行改动,所以关于内容相同的字符串,只要一个String目标来表明就能够了。也就说,屡次调用上面的结构器创立多个目标,他们的String类型特点s都指向同一个目标。
上面的定论还根据这样一个事实:关于字符串常量,假如内容相同,Java认为它们代表同一个String目标。而用关键字new调用结构器,总是会创立一个新的目标,不管内容是否相同。
至于为什么要把String类规划成不行变类,是它的用处决议的。其实不只String,许多Java规范类库中的类都是不行变的。在开发一个体系的时分,咱们有时分也需求规划不行变类,来传递一组相关的值,这也是面向目标思维的体现。不行变类有一些长处,比方由于它的目标是只读的,所以多线程并发拜访也不会有任何问题。当然也有一些缺点,比方每个不同的状态都要一个目标来代表,可能会形成功能上的问题。所以Java规范类库还提供了一个可变版别,即StringBuffer。

未经允许不得转载:IT技术网站 » java 面试题(java面试基础问题)
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!

 

志在指尖 用双手敲打未来

登录/注册IT技术大全

热门IT技术

C#基础入门   SQL server数据库   系统SEO学习教程   WordPress小技巧   WordPress插件   脚本与源码下载