面试中的那些坑[答疑 | 篇四]

原创
2020/06/18 09:54
阅读数 0

点击上方“Java知音”,选择“置顶公众号”

技术文章第一时间送达!


本文收录至菜单栏:刚哥面试通关


都说程序员的总结总是言简意赅的,我之前是半信半疑,但年会上程序员的总结PPT确实闪瞎了我的眼睛,平均5分钟讲完一年的工作,最短的只需要3分钟,同志们,只有三分钟。

我们就是那种做了很多事情,但是并没有在关键时刻呈现工作量的孩子们,结果就是年底考评一般般,年终奖自然少的可怜。你们的年度总结啥样的?年底有奖金么?开工有开工利是么?欢迎留言和我互动。

后续我觉得除了跟大家探讨技术问题,还需要跟大家沟通如何更好地跟人沟通问题,希望能帮助大家提升沟通交流能力。

NO1.大家看看这道题输出应该是啥?是否是三个5呢?

解答:结果是输出5,5,5.这个题考察面试者是否了解类加载机制在处理类内部类时的处理方式,虚拟机当加载静态内部类时如果是确定的属性值时,虚拟机会直接将值存放到元存储中(静态方法区),其他未确定值需要在运行时动态计算,由虚拟机分配地址和值。如果设置的值不是static,那么不能直接访问,因为此时值属于对象而不是类。

NO2.看看这道题的输出结果是多少?是100还是99?期待大家参与,下期给出答案。

解答:看了大家的回复结果,有几位小伙伴回答是正确的,输出结果是0.因为赋值运算在自增运算之前已经完成了。 在这里JVM里面有两个存储区,一个是暂存区(以下称为堆栈),另一个是变量区。j=j++是先将j的值0存入堆栈中,然后对变量区中j自加1,这时j的值确实是1,但随后将堆栈中的值赋给变量区的j,所以最后j=0; 而j=++j,是先对变量区中的j加1,再将变量区中的j值(1)存入堆栈,最后将堆栈中的值赋给自变量区的j,所以j=1;

NO3.考察一下你对数组和列表转换的问题,下面的结果输出几呢?

解答:这道题答案是1,你的答案对不对呢?此题考察基本类型数组和引用类型数组,基本数据类型数组在转换为列表时,如果直接传递数组,基本类型数组将被视为一个对象而不会被解析成数组,如果直接传递参数将能正常解析。希望大家看题看仔细。

NO4.此题考察大家对集合的equals的理解,下面程序输出什么?

解答:此题答案输出true.是不是很意外!我也觉得意外呢,两个不同的类型竟然相同,简直是颠覆了我的知识观,其实两个类型都重写了equals方法,比较了内容和元素长度,并未对类型进行首要比对。大家看到两个类型的equals方法就明白为啥相等了。

NO5.switch 是否能作用在 byte 上,是否能作用在 long 上,是否能作用在 String上?

解答:此题主要考察我们是否关注JDK每个升级版本带来的变化,结果是支持byte,1.7(含)以后支持string,但是很遗憾不支持long。

NO6.至少说出三种如何取得从 1970 年 1 月 1 日 0 时 0 分 0 秒到现在的毫秒数?

此题据说难倒了很多工作4年以上的码农!好害怕。坦白说我自己也就知道下面一种,虽然我也是工作了很多年的老鸟....... 面试者:System.currentTimeMillis()。
面试官:亲友团来把答案补上来,这个就是[优必选]面试的一道题,想去智能机器人的看准了。

解答:

  1. System.currentTimeMillis()。

  2. new Date().getTime() 。

  3. Calendar.getInstance().getTimeInMillis()。

NO7.面试官:请说出三种获取java类字节码的方法?

面试者:Class.class,object.getClass(),除此之外没有了吧?! 面试官:你可以想想JDBC知识,也许会帮你想起来。 面试者:没有了......

解答:其实还有一种是通过反射来实现,如图所示

NO8.对JVM也有一些了解了,能简单说下堆(heap)和栈(stack)的区别么?

解答:考察面试者对JVM中两个重要的存储单元的理解,因为篇幅有限,我就不一一描述, 大家可以很简单搜索到答案的。这个地方一般面试官还会问到常量存到哪里,对象存储哪里,类属性存哪里等等。 可以看这篇文章:

https://blog.csdn.net/jasonwang18/article/details/70578647。

NO9. 我看你后端技术还可以,了解前端么?能跟我聊聊HTTP/1.1 与 HTTP/1.0 的区别?

解答:如图所示

NO10.恩,回答的还不错。讲一下大家都听过但不一定能讲的明白的POST方法和GET方法区别?

面试者:

  • POST将请求参数隐藏进行传递,而GET会将参数拼接到请求地址后面传递;

  • POST相对比较安全而GET因为暴露参数容易被篡改;

  • 根据HTTP传输协议两者对参数长度有不同的要求;

面试官:可以再多说一些,点基本讲到了。

解答:其实回答的点基本是回答到了,其实两者在与服务端发生交互时有所不同,POST方法会请求服务端两次,第一次先发送头部进行确认,服务端返回成功后再次发送数据,而GET只需要请求服务端一次。同时强调一下GET方法中http协议并未做参数长度限制,只是不同浏览器和服务端做了限制而已。



加入Java知音技术交流,戳这里:技术交流群

更多Java技术文章,尽在【Java知音】网站。

网址:www.javazhiyin.com  ,搜索Java知音可达!


看完本文有收获?请转发分享给更多人


本文分享自微信公众号 - Java知音(Java_friends)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

展开阅读全文
打赏
0
0 收藏
分享
加载中
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部