Java 商汤面试
Posted callmewhat
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java 商汤面试相关的知识,希望对你有一定的参考价值。
大三找实习花了大概半个月的时间,最后选择了商汤,因为面试体验最好,从第一轮面试到拿到口头 offer 只用了两天,第二轮结束两个小时就发了,正式 offer 也仅用了两天,感觉效率很高,而且也算是一个不错的成长平台。
我面试的是 Java 后台开发,一共两轮技术面,整体难度适中,面试官很和蔼,而且在我不会的时候也很耐心地引导。
很多问题记不太清了,就尽量写吧。
第一轮
1.简述 Java 的核心特性封装、继承、多态,简单解释一下就可以,顺便解释了下 Java 反射。
2.简述重写和重载
3.HashMap 了解么,简述一下 HashMap 的实现原理。扯了一下散列表,再讲了一下散列表的常用冲突解决方法:1.开放寻址法(发生散列冲突后在散列表上再寻找一个空地址),有线性寻址(冲突的地址索引+1)、幂寻址(冲突的地址索引第一次+1的平方,第二次+2的平方...)、双重散列(用另一种 hash 函数求得索引地址);2.链表法,将冲突的 hash 值放在链表中。HashMap 就是用链表法解决冲突,在 JDK 1.8 以后,当冲突链表数大于 8 以后,将链表改为红黑树。
HashMap 底层是一个名为 Entry 的数组 + 链表的实现结构,因此 HashMap 由 key、value、hash、next 四个值组成。
4.HashSet 了解么,简述一下简述了集合的特征, HashSet 的底层跟 HashMap 一样。
5.你提到过 HashMap 是线程不安全的,那有哪些集合是线程安全的?(没答对)Vector 、HashTable、CurrentHashMap
6.protect 关键字简述了 public 、protect 、default(默认)、private 的区别。
7.Cookies 和 Session 的区别都是用来确定用户身份的, Cookies 是存放在客户端, Session 是存放在服务器端。
8.设计模式了解么(不了解)
9.线程之间通信了解么?锁、信号量、管程通信
10.生产者消费者模型具体怎么实现(当时问的好像不是这个,但我是这么答得:))
11.synchronized 了解么?具体实现有几种方式
简述了一下锁,但没讲出实现
12.线程有几种状态,他们是怎么互相转换的,如何实现他们之间的转换?开始状态(new),就绪状态(runnable),运行状态(running),阻塞状态(blocked),结束状态(dead),简单讲了下sleep() ,wait() ,notify() 。
13.线程池的种类以及参数没回答到点子上,面试官很耐心地提醒了蛮久,但还是没听懂:(
14.Redis 了解么?(不了解)
15.索引相关概念,然后引到 B+ 树
讲了点概念,讲了下 B 树和 B+ 树的区别
16.排序了解么,你会多少种排序时间复杂度 O(n方):冒泡、插入、选择
时间复杂度 O(nlogn):快排,归并,堆排序
线性时间复杂度:桶排序、基数排序、计数排序
详细问了快排和归并,包括最好最坏时间复杂度,实现等等
17.单链表和双向链表有什么区别?彩虹屁了一波双向链表,虽然修改的时间复杂度为常量级,但前驱节点双向链表可以直接找到,单链表还要遍历;双向链表在节点很大的时候多余空间可以不计
18.之前你说到 HashMap 链表节点大于 8 用红黑树,你了解么?提了下红黑树是平衡二叉查找树,以及红黑相间。他问我会写不,果断不会
第二轮
1.JVM 了解么,简单讲讲 Java 的内存机制吧简述了 堆、方法区、栈、PC、本地方法栈
2.讲一下 Java 的垃圾处理机制吧
讲了可达性分析算法、垃圾回收算法、新生代老生代什么的,后来他问我如何在代码层面优化 GC,不会。
3.讲一下乐观锁悲观锁吧
简述乐观锁和悲观锁,还有 CAS 算法和实现逻辑。还有 CAS 的弊端,还简述了幻读、脏读、不可重复读
4.Redis 了解么?(不了解)
以上是关于Java 商汤面试的主要内容,如果未能解决你的问题,请参考以下文章