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

昨天面试指出错误被 diss 了

  •  
  •   10Buns · 2019-02-28 21:11:58 +08:00 · 5555 次点击
    这是一个创建于 2076 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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