首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  职场话题

昨天面试指出错误被 diss 了

  •  
  •   10Buns · 285 天前 · 3725 次点击
    这是一个创建于 285 天前的主题,其中的信息可能已经有所发展或是发生改变。

    昨天面试南京 xx 生活, 面试官是一个业务架构师。

    笔试有一道题目:怎么自定义 java.lang.String 类,从类加载器角度阐述。 我说自定义不行, 首先不允许 java.xxx 开头的包, 其次根据类加载机制, string 类已经加载了, 就不允许再自定义加载。哈哈哈结果把我 diss 一遍说可以的,你回去试试。就让我回去了。

    然后今早面试反馈基础不行,过往项目经验不足。😂好歹做了几年日均交易几百万的系统,真的服气。

    27 回复  |  直到 2019-03-01 16:17:57 +08:00
        1
    saluton   285 天前   ♥ 1
    双向选择,双向选择,膜拜大佬
        2
    xuanchi   285 天前
    这个种问题如果是做代码覆盖率、插桩中专业领域才能够回答的让对方服气,做业务的就算能够回答上,没有实际操作也就是看看博客,就算能够回答上,又有什么用处呢?
    被怼很正常,平常心
        3
    wwfengqi   285 天前 via Android
    哈,艾佳生活吧
        4
    10Buns   285 天前
    @xuanchi 主要题目都错了,非得跟我说可以, 让我回去试试。也是蛋碎
        5
    10Buns   285 天前
    @wwfengqi 哈哈哈兄弟南京人啊
        6
    dongisking   285 天前 via Android   ♥ 1
    毕竟他是面试官,也很可能以后是你的上司。你这么说他以后估计没得混的了。所以你懂的,面试要扮猪吃老虎
        7
    10Buns   285 天前
    @dongisking 可能我太耿直直接说题目错了😂但是的确没发实现啊。还让我抛弃 ioc 选择一个更好的方案,我说实际没操作过,但是 ioc 原理和伪代码我可以写一下,结果说对就是说下这个。😂这不是误导别人么
        8
    Ico945   285 天前
    双亲委派这种东西都问烂了他居然不知道有点不信(狗头··)
        9
    10Buns   285 天前
    @Ico945 哈哈哈这个没必要吹牛逼,我还以为是想自定义实现 string 类功能,还反复确认了下
        10
    lhx2008   285 天前
    这个我还是持保留意见,首先,自定义类加载器是可以不进行父类委托(或者叫双亲委派)的,虽然 Jvm 已经把 java.lang.String 加载了,但是应该还是有办法加载自定义 String 类进来的,不过当然无法替换原来的 String 类。
        11
    lhx2008   285 天前
    当然,自定义加载进来的 String 类,只能通过反射初始化和调用函数,因为默认会执行到的是原来的类。
        12
    lhx2008   285 天前
    当然,实际过程中还有其他 JVM 的限制,不过类加载器这里是可以绕过的,父委托不是必须的。比如 Tomcat 的类加载器就不遵循父委托。
        13
    Cbdy   285 天前
    类加载这个,我表示怀疑
    我没有试过加载 java.lang.String。但是 JVM 区分两个加载到 JVM 里的类的唯一性,是通过:类加载器+全限定名。所以可以加载两个同全限定名的类到同一个 JVM,只要是两个不同的加载器加载的。
        14
    10Buns   285 天前
    @lhx2008 打破双亲委派模型我知道,但是在 jvm 的中不是限制必须由 bootstrp 来加载 java.*开头的类么? 麻烦详细解释下,这一块可能是我理解有问题
        15
    lhx2008   285 天前 via Android
    @10Buns 确实,按照规范,java.*是加载不进来的,但是我觉得那个面试官可能不是想问你这个吧。。哈哈
        16
    lhx2008   285 天前 via Android
    @10Buns 还有另外一种思路,就是用 CGLIB 或者 ASM 动态生成一个子类,这个子类是继承 String 类的,这样子用这个子类创建的类可以用 String 修饰,可以达到所谓修改 String 类的效果,而且不需要 java.*的名字。不过,String 类是 final 的,理论上是无法被继承的,我不太清楚 ASM 或 CGLIB 能否绕过这个限制
        17
    zmj1316   285 天前 via Android
    非要做的话,自定义一个 JVM 总行吧🤣不过可能就是 CPP 了
        18
    chenguoyu   285 天前
    我也对这个持有保留意见,我刚还翻了深入理解 java 虚拟机看了一下,他只说 bootstrap 类加载器根据名称加载。而且双亲委派模型的例子还是 java.lang.object。
        19
    eaglewangl37670   285 天前 via Android
    @lhx2008 有点疑问,String 类不是被 final 修饰了吗,那应该是无法被继承了,你说的继承子类是?
        20
    lhx2008   285 天前 via Android
    @eaglewangl37670 可以的,只是我们自己写的代码是不行的。具体你可以搜索一下 asm 或者 cglib 绕过 final,这个应该也挺常用到的(比如 AOP )。但是呢,改 jdk 类这个,我还真没试过。
        21
    mmdsun   285 天前 via Android
    意思是让你定义一个 your.packge.MyString 的类,做到能和 java.lang.String 一样的效果 ? 如果不是这个意思多半说明面试官水平很差。(考察太深)(或者说让你设法绕过双桥委派机制,可参考 Tomcat 源码
        22
    Miiiz   285 天前
    可以可以,可以不去面试了
        23
    ofblyt   284 天前
    面试者的目的不一定是展示自己的技术水平,技术只是综合能力的一方面,面试者的目的应该是得到面试官的认可
        24
    alvinbone88   284 天前
    那么问题来了,Android SDK 是怎么做到加载自定义 java.lang.Sting 类的
    顺便放个 Android SDK 里 java.lang.String 的源码
    https://github.com/AndroidSDKSources/android-sdk-sources-for-api-level-28/blob/master/java/lang/String.java
        25
    alvinbone88   284 天前
    ……发完贴才发现编译能过,加载不是由标准的 JDK 来做的
        26
    ukyoo   284 天前
    艾佳生活...
        27
    sioncheng   284 天前
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1068 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 34ms · UTC 19:08 · PVG 03:08 · LAX 11:08 · JFK 14:08
    ♥ Do have faith in what you're doing.