华为公共开发部Java开发面经
一面 40min
项目相关
你有很多线程(大于1000),但是你只有16个内核线程,这有什么问题吗?
(线程切换带来的消耗)
泛型是用来做什么的?
用过泛型吗?稍微讲讲
线程池的核心线程满了以后什么情况下会新增线程
线程安全的集合
用过什么设计模式?
ThreadLocal介绍一下
我看你用过Springboot,SpringBoot的Bean怎么加载?(完全没有复习
有用过数据库吗?(直接答没怎么用过
算法题:给定一个数组gropuSize = [1,3,3,3,3,3,3];
groupSize[i]=size, 表示i从属与一个size为3的group,打印出一个可能的组
[0],[1,2,3,],[4,5,6];
思路:HashMap+一次遍历。
本来觉得一面回答的不好,感觉可能没机会,没想到居然过了,觉得很走运。
二面 1h30min
项目相关
HashMap的内部结构
HashMap怎么实现O(1)的数据查找?
HashMap求index怎么取模呢?(答位运算,n - 1 & hash, n为hashMap容量)
Java有哪几种锁?
讲一下读写锁
synchronized和读写锁有什么区别?
volatile怎么实现原子操作(答volatile的内存语义
CAS又是怎么实现原子操作的呢?
AutomicInteger的原子自增怎么实现的
我看你用过Springboot,讲一下对象加载(实在没复习到)
说一下序列化和反序列化
为什么不存储二进制信息而是存储对象信息?有什么好处?
用过什么设计模式吗?
讲一下开闭原则
用过UML吗?说一下继承、组合、聚合
多线程中如何实现先完成几个线程在继续工作?(答CountDownLatch
还有呢?(Thread.join)
用过数据库吗?讲一下数据库中的索引
为什么用索引很快?
说一下死锁
如何检测死锁?(答环路检测
实际开发中怎么发现死锁呢?
算法题:
1.对于一个String,存在字母,+/-,数字,求出第一个整数,整数不会溢出。
条件判断+遍历
2.在上一题的基础上,求出所有整数,整数会溢出。
使用StringBuilder存储整数
3.在上一题的基础上,求出所有整数之和。
有两种情况,同符合相加,不同符号相加。
同符号比较简单,逆序遍历+进位信息。
异符号其实也类似,逆序遍历+借位信息。(可惜时间不够,只给面试官讲了思路)
最后使用归并求和。
二面结束很快就通知二面通过了,今天的面试官人都很好,给我的感觉非常不错,这也是最近面试进度最好的了。希望后天的主管面也能通过,许愿OC。
#华为##面经##java工程师#