昨天面试指出错误被 diss 了 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
10Buns
V2EX    职场话题

昨天面试指出错误被 diss 了

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

    昨天面试南京 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
      &nbs; 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     Solana     3137 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 12:04 PVG 20:04 LAX 05:04 JFK 08:04
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86