百科问答小站 logo
百科问答小站 font logo



国内Java面试总是问StringBuffer,StringBuilder区别是啥?档次为什么这么低? 第1页

  

user avatar   yao-dong-27 网友的相关建议: 
      

StringBuffer,StringBuilder 问题档次并不低,如果仔细思考的话,这是一个历史悠久,并且至今仍在困扰很多程序员的问题。

这是个字符串内存管理策略问题。

几十年前 在C和Pascal的时代,就有字符串存储形式 是 结尾还是 长度+内容的争论,这个问题严重影响了API的设计,内存的管理,甚至程序架构。

字符串是一种非常常用的 生命周期通常很短的对象,而且它的size是不固定的,长度为 1 或 1GB都有可能,导致内存管理非常麻烦复杂。

用长度+内容表示,每个串都要额外付出4个字节,用结尾吧,算长度就很麻烦,万一结尾忘了就要崩溃,选哪个好

字符串的长度放哪里,放到起始指针的位置,还是起始指针的前面

如果放前面,那么字符串起始指针和内存块起始不一致怎么解决

字符串拼接的时候把源串复制到目标串结尾,那么目标串剩余内存不够怎么办,重新分配要多一次赋值,频繁拼接性能有问题怎么办

函数返回值如果是字符串,那么这个串是调用者分配内存还是被调用者分配,谁来负责释放。

如果调用者分配,那么调用者怎么知道字符串将有多长。

频繁分配释放大小各异的字符串,会不会导致内存碎片化

对于小字符串是分配在堆上还是栈上

怎么把常量串和变量串分别处理

如果设计面向对象的字符串,字符串加法怎么定义,是在原来对象上加,还是生成一个新对象

如果每加一次都生成新对象会不会导致构造析构太频繁

如果是托管语言会不会太频繁GC

要不要设计单独的辅助类来解决字符串拼接问题

那这个辅助类怎么设计,要不要考虑线程安全

如果考虑线程安全的话,怎么兼顾性能

你把这些问题都思考透彻了,再遇到问此类问题的面试官,就给他上上课,保证他懵逼。


user avatar   hollis-11 网友的相关建议: 
      

这么多赞,受宠若惊了。

大家可以关注我的公众号:Hollis,和我交流。关注后,在后台回复:成神导图,可以获得Java工程师进阶的整套思维导图哦。


这个问题只是开个场,热个身而已啊。

StringBuffer,StringBuilder区别是啥?

什么是线程安全?

如何保证线程安全?

什么是锁?死锁?

synchronized的实现原理是什么?

有了synchronized,还要volatile干什么?

synchronized的锁优化是怎么回事?(锁粗化?锁消除?自旋锁?偏向锁?轻量级锁?)

知道JMM吗?(原子性?可见性?有序性?)

Java并发包了解吗?

那什么是fail-fast?什么是fail-safe?

什么是CopyOnWrite?

那AQS呢?那CAS呢?

CAS都知道,那乐观锁一定知道了?

乐观锁悲观锁区别是什么?

数据库如何实现悲观锁和乐观锁?

数据库锁有了解么?行级锁?表级锁?共享锁?排他锁?gap锁?next-key lock?

数据库锁和隔离级别有什么关系?

数据库锁和索引有什么关系?

什么是聚簇索引?非聚簇索引?最左前缀是什么?B+树索引?联合索引?回表?

分布式锁有了解吗?

Redis怎么实现分布式锁?

为什么要用Redis?

Redis和memcache区别是什么?

Zookeeper怎么实现分布式锁?

什么是Zookeeper?

什么是CAP?

什么是BASE?和CAP什么区别?

CAP怎么推导?如何取舍?

分布式系统怎么保证数据一致性?

啥是分布式事务?分布式事务方案?

那么,最后了,来手写一个线程安全的单例吧?

不用synchronized和lock能实现线程安全的单例吗?

这你都能答上?那好吧,你给我解释下什么是Paxos算法吧?


卒~!


我回答过的其他问题:

Java学到什么程度才能叫精通?

现在程序员这么多,我学习java这块应该学到什么程度才能不被淘汰呢?

作为程序员的你,常用的工具软件有哪些?

Java内存模型和Java内存区域的区别和联系?

Java 到底是值传递还是引用传递?

你遇到过哪些质量很高的 Java 面试?


user avatar   tim-chen-21 网友的相关建议: 
      

这类问题,就算是我这样根本不懂java的,给我5分钟bing一下也能了解个大概了。问这样的问题,万一人家真的很厉害只是恰巧不知道这个知识点,那岂不是错过人才了。

我面试的时候,看中的是应聘者自身的资质而不是他是否知道某些技术点或者掌握某个特定技能。比方说虽然我们大部分时候都会用c#来开发,但你完全不会c#也没有任何关系,算法题写java都行,只要你能让我相信你可以在短时间内学会就行了。而事实上招进来的人,从完全不会开始,基本上1~2个月就能有实际产出了。

记得以前一个老板和我说过,我们公司招人看的是长期的培养前途,比如你觉得这个人以后有没有机会升到senior,能的话就招。

局限在某个具体的知识技能,就限制了你获取人才的范围。


user avatar   yuantj 网友的相关建议: 
      

被各种朋友嘲笑订阅太低,比如跳舞:哥均订比你高订高,比如香蕉:我有四五万均订,七万高订,比如某表姐:日订阅破十一万人民币,比如三少:我每个月订阅都有好几十万呢,都是零花钱,比如奥斯卡:断更涨订阅,真的涨订阅……

感觉特别屈辱。

最屈辱的是经常有些新人跑过来,兴高采烈的说:蛤蟆哥哥,我均订破万了。你嫉妒的恨不得掐死他……




  

相关话题

  中国的软件业落后美国 50 年吗? 
  设计模式是不是有点太「玄」了? 
  你在阅读源代码或设计文档时,看到哪些惊艳的技巧? 
  Java 不能实现真正泛型的原因是什么? 
  如何评价博客园关于 C++ 的这篇热门文章? 
  孩子一年级成绩不理想,朋友建议可以学学少儿编程,学习少儿编程对提高孩子的逻辑思维能力真的有帮助吗? 
  一百行以下有哪些给力代码? 
  如何样对DAL(数据访问层)进行单元测试? 
  在测试驱动开发中 如果测试写错了导致单元测试过不了怎么办?如何保证测试的正确性呢? 
  如何通过面试辨识一个人的责任心? 

前一个讨论
如何通俗易懂地解释遗传算法?有什么例子?
下一个讨论
读完硕士,工作稳定,但待遇不高,在亲朋“挣得真少,读书没用”的评价面前,如何回答?





© 2024-11-21 - tinynew.org. All Rights Reserved.
© 2024-11-21 - tinynew.org. 保留所有权利