今天小编分享一篇文章关于如何看待Java面试总是问StringBuffer,StringBuilder区别是啥?
文章来源于一点资讯
多人觉得在java面试中总是会被问到StringBuffer,StringBuilder区别是什么,难道国内的java档次就这么低吗?此话一出,引起了广泛讨论,那么事实真是如此吗?
其实这样的基础问题也够刷掉很大部分人,开发不仅仅是你会的东西有多少,多厉害,更多的是在乎你是否了解底层原理,思维方式等。
再者,StringBuffer,StringBuilder问题档次并不低,如果仔细思考的话,这是一个历史悠久,并且至今仍在困扰很多程序员的问题。
这是个字符串内存管理策略问题。
几十年前在C和Pascal的时代,就有字符串存储形式是 \0结尾还是长度+内容的争论,这个问题严重影响了API的设计,内存的管理,甚至程序架构。
字符串是一种非常常用的生命周期通常很短的对象,而且它的size是不固定的,长度为 1或 1GB都有可能,导致内存管理非常麻烦复杂。
用长度+内容表示,每个串都要额外付出4个字节,用\0结尾吧,算长度就很麻烦,万一结尾忘了\0就要崩溃,选哪个好
字符串的长度放哪里,放到起始指针的位置,还是起始指针的前面
如果放前面,那么字符串起始指针和内存块起始不一致怎么解决
字符串拼接的时候把源串复制到目标串结尾,那么目标串剩余内存不够怎么办,重新分配要多一次赋值,频繁拼接性能有问题怎么办
函数返回值如果是字符串,那么这个串是调用者分配内存还是被调用者分配,谁来负责释放。
如果调用者分配,那么调用者怎么知道字符串将有多长。
频繁分配释放大小各异的字符串,会不会导致内存碎片化
对于小字符串是分配在堆上还是栈上
怎么把常量串和变量串分别处理
如果设计面向对象的字符串,字符串加法怎么定义,是在原来对象上加,还是生成一个新对象
如果每加一次都生成新对象会不会导致构造析构太频繁
如果是托管语言会不会太频繁GC
要不要设计单独的辅助类来解决字符串拼接问题
那这个辅助类怎么设计,要不要考虑线程安全
如果考虑线程安全的话,怎么兼顾性能。
所以不要小看了这些基础问题,如果你能了解透彻,在学习更高技术时才会显得不那么吃力,公司往往需要这样的人才!
经常听见有人这样说:
现在JAVA开发工程师前途何在,到底有没有前途呢?
怎样才能做一个好的软件工程师,我的路应该如何去走?
我是新手,不知道这个专业怎么样?
如果你在步入IT行业的路上面临类似以上问题,不要犹豫,点此领取免费试听课,看一下自己是否适合这个行业
网友评论