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 了解么?(不了解)

原文地址:https://www.cnblogs.com/callmewhat/p/12231626.html

时间: 2024-10-08 10:01:47

Java 商汤面试的相关文章

《Java程序员面试笔试宝典》终于在万众期待中出版啦~

<Java程序员面试笔试宝典>终于在万众期待中出版啦~它是知名畅销书<程序员面试笔试宝典>的姊妹篇,而定价只要48元哦,恰逢求职季节,希望本书的出版能够让更多的求职者能够走进理想的企业 在这里,众多知名企业面试官将为你撕开神秘的求职面纱: 在这里,各种求职达人将现身说法为你揭开求职谜团: 在这里,各种类型的企业招聘细节都会被展露无疑: 在这里,我们将为你抽丝剥茧,还原IT行业的真相: 在这里,我们将为你指点迷津,告诉你职场上的风风雨雨: 在这里,我们将为你点石成金,成为那盏指引你前

Java后台工程师面试杂记——不跳不涨工资星人跳槽经历

经过接近一个月的时间,完成换工作这件“小事”,前后总计面试了多家公司,最后也没接到几个offer,不过最终总算尘埃落定,就对这个过程进行一个总结吧. 在某互联网公司工作了近一年的时间,但是频繁的业务需求和大强度的加班,无聊的工作内容以及公司就要搬家的前景,促成了自己换工作的打算,在做出这个打算之后几乎立即就和老大说了这件事情,这个举动结果有好有坏,正面意义是我请假或是懒得请假去参加面试的时候,显得没啥心理负担,负面影响就是如果短时间找不到就只能先滚犊子了.因为面试的是Java后台开发,而且是属于

美资软件公司JAVA工程师电话面试题目

面试必备基础题目(虽然不一定常用, 仅用于面试, 面试就是把人搞的都不会然后砍价, 当然您可以讲我可以查资料完成, 但是面试的时候就是没道理的, 起码我是经常看到这些题). 如何把一段逗号分割的字符串转换成一个数组?request.getAttribute() 和 request.getParameter() 有何区别?response.sendRedirect() 和 forward() 区别?<%@include file="xxx.jsp"%>和 <jsp:in

Java集合相关面试问题和答案

Java集合相关面试问题和答案 面试试题 1.Java集合框架是什么?说出一些集合框架的优点? 每种编程语言中都有集合,最初的Java版本包含几种集合类:Vector.Stack.HashTable和Array.随着集合的广泛使用,Java1.2提出了囊括所有集合接口.实现和算法的集合框架.在保证线程安全的情况下使用泛型和并发集合类,Java已经经历了很久.它还包括在Java并发包中,阻塞接口以及它们的实现.集合框架的部分优点如下: (1)使用核心集合类降低开发成本,而非实现我们自己的集合类.

金九银十,浅谈关于java程序员面试的一些事项

本篇博文针对的是应届毕业生以及工作两三年左右的java程序员. 为什么要跳槽? 这是一个很广义的问题,每个人心中都有一份答案. 例如: 公司的待遇不好, 薪资涨幅不符合预期要求, 厌倦了出差的荒无天日的繁重工作, 公司的妹子太少, 领导太傲娇, 同事之间关系太逼格, 某某同学跳槽到某某公司之后涨到了多少多少钱, 某某同学的朋友的同事的三姑妈家的大儿子的好基友在某某高就, 等等辞职理由. 咱们就不多说了,还是谈谈怎么应付面试吧. 以下内容是我在面试中总结的一些经验,希望这些可以给各位带来帮助和启迪

《Java程序员面试笔试宝典》之字符串创建与存储的机制是什么

在Java语言中,字符串起着非常重要的作用,字符串的声明与初始化主要有如下两种情况:(1) 对于String s1=new String("abc")语句与String s2=new String("abc")语句,存在两个引用对象s1.s2,两个内容相同的字符串对象"abc",它们在内存中的地址是不同的.只要用到new总会生成新的对象. (2) 对于String s1 = "abc"语句与String s2 = "

Java研发岗位面试归类B(附答案)

本文承接上文:Java研发岗位面试归类A(附答案): http://www.cnblogs.com/wp5719/p/5870243.html 答案自己网上找的,如有纰漏或错误,烦请指教. 七.数据库MySql 1.MySql的存储引擎的不同. MyISAM:拥有较高的插入,查询速度,但不支持事务. InnoDB:5.5版本后Mysql的默认数据库,事务型数据库的首选引擎,支持ACID事务,支持行级锁定. BDB:源自Berkeley DB,事务型数据库的另一种选择,支持COMMIT和ROLLB

《Java程序员面试宝典》学习笔记(基本语法部分)

这是我学习欧立奇<Java程序员面试宝典>第三版的笔记.这篇是基本语法部分. ClassLoader主要对类的请求提供服务,当JVM需要某类时,它根据名称向ClassLoader要求这个类,然后由ClassLoader返回这个类的class对象. 在Java中,字符只以一种形式存在,那就是Unicode.在JVM内部一切都由Unicode表示,而输出到外部后(JVM和OS的交界处就是各种输入/输出流)转换为其他形式的编码. Java用了中间缓存变量的机制,所以,j=j++可换成如下写法: te

《Java程序猿面试笔试宝典》之字符串创建与存储的机制是什么

在Java语言中.字符串起着非常关键的数据.字符串的声明与初始化主要有例如以下两种情况:(1) 对于String s1=new String("abc")语句与String s2=new String("abc")语句,存在两个引用对象s1.s2,两个内容同样的字符串对象"abc".它们在内存中的地址是不同的.仅仅要用到new总会生成新的对象. (2) 对于String s1 = "abc"语句与String s2 = &qu