昨天面试指出错误被 diss 了

2019-02-28 21:11:58 +08:00
 10Buns

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

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

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

5365 次点击
所在节点    职场话题
27 条回复
saluton
2019-02-28 21:18:01 +08:00
双向选择,双向选择,膜拜大佬
xuanchi
2019-02-28 21:18:30 +08:00
这个种问题如果是做代码覆盖率、插桩中专业领域才能够回答的让对方服气,做业务的就算能够回答上,没有实际操作也就是看看博客,就算能够回答上,又有什么用处呢?
被怼很正常,平常心
wwfengqi
2019-02-28 21:21:04 +08:00
哈,艾佳生活吧
10Buns
2019-02-28 21:29:58 +08:00
@xuanchi 主要题目都错了,非得跟我说可以, 让我回去试试。也是蛋碎
10Buns
2019-02-28 21:30:12 +08:00
@wwfengqi 哈哈哈兄弟南京人啊
dongisking
2019-02-28 21:32:18 +08:00
毕竟他是面试官,也很可能以后是你的上司。你这么说他以后估计没得混的了。所以你懂的,面试要扮猪吃老虎
10Buns
2019-02-28 21:34:46 +08:00
@dongisking 可能我太耿直直接说题目错了😂但是的确没发实现啊。还让我抛弃 ioc 选择一个更好的方案,我说实际没操作过,但是 ioc 原理和伪代码我可以写一下,结果说对就是说下这个。😂这不是误导别人么
Ico945
2019-02-28 21:38:37 +08:00
双亲委派这种东西都问烂了他居然不知道有点不信(狗头··)
10Buns
2019-02-28 21:43:57 +08:00
@Ico945 哈哈哈这个没必要吹牛逼,我还以为是想自定义实现 string 类功能,还反复确认了下
lhx2008
2019-02-28 21:47:58 +08:00
这个我还是持保留意见,首先,自定义类加载器是可以不进行父类委托(或者叫双亲委派)的,虽然 Jvm 已经把 java.lang.String 加载了,但是应该还是有办法加载自定义 String 类进来的,不过当然无法替换原来的 String 类。
lhx2008
2019-02-28 21:57:49 +08:00
当然,自定义加载进来的 String 类,只能通过反射初始化和调用函数,因为默认会执行到的是原来的类。
lhx2008
2019-02-28 21:59:08 +08:00
当然,实际过程中还有其他 JVM 的限制,不过类加载器这里是可以绕过的,父委托不是必须的。比如 Tomcat 的类加载器就不遵循父委托。
Cbdy
2019-02-28 22:14:11 +08:00
类加载这个,我表示怀疑
我没有试过加载 java.lang.String。但是 JVM 区分两个加载到 JVM 里的类的唯一性,是通过:类加载器+全限定名。所以可以加载两个同全限定名的类到同一个 JVM,只要是两个不同的加载器加载的。
10Buns
2019-02-28 22:14:55 +08:00
@lhx2008 打破双亲委派模型我知道,但是在 jvm 的中不是限制必须由 bootstrp 来加载 java.*开头的类么? 麻烦详细解释下,这一块可能是我理解有问题
lhx2008
2019-02-28 22:17:55 +08:00
@10Buns 确实,按照规范,java.*是加载不进来的,但是我觉得那个面试官可能不是想问你这个吧。。哈哈
lhx2008
2019-02-28 22:21:49 +08:00
@10Buns 还有另外一种思路,就是用 CGLIB 或者 ASM 动态生成一个子类,这个子类是继承 String 类的,这样子用这个子类创建的类可以用 String 修饰,可以达到所谓修改 String 类的效果,而且不需要 java.*的名字。不过,String 类是 final 的,理论上是无法被继承的,我不太清楚 ASM 或 CGLIB 能否绕过这个限制
zmj1316
2019-02-28 22:22:25 +08:00
非要做的话,自定义一个 JVM 总行吧🤣不过可能就是 CPP 了
chenguoyu
2019-02-28 22:24:38 +08:00
我也对这个持有保留意见,我刚还翻了深入理解 java 虚拟机看了一下,他只说 bootstrap 类加载器根据名称加载。而且双亲委派模型的例子还是 java.lang.object。
eaglewangl37670
2019-02-28 22:50:31 +08:00
@lhx2008 有点疑问,String 类不是被 final 修饰了吗,那应该是无法被继承了,你说的继承子类是?
lhx2008
2019-02-28 23:00:24 +08:00
@eaglewangl37670 可以的,只是我们自己写的代码是不行的。具体你可以搜索一下 asm 或者 cglib 绕过 final,这个应该也挺常用到的(比如 AOP )。但是呢,改 jdk 类这个,我还真没试过。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/539787

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX