大厂面试真题向来都是各大求职者的最佳练兵场,而今天小编带来的便是“HUAWEI”面经!这是一次真实的面试经历,虽然不是我自己亲身经历但是听当事人叙述后便会深有同感(因为我朋友差点就与offer擦肩而过了,总共3面技术4面HR,真的好艰难)。
HUAWEI-Java一面-1H
闲聊偏多,问的技术性问题比较基础
-
重点问了Java线程锁:Synchronized 和ReentrantLock相关的底层实现
-
线程池的底层实现以及常见的参数
-
数据结构基本都问了一遍:链表、队列等
-
Java内存模型:常问的JVM分代模型,以及JDK1.8后的区别,最后还问了JVM相关的调优参数
-
分布式锁的实现比较
题目:
-
自我介绍
-
擅长哪方面的技术?
-
Java有哪些锁种类? (乐观锁&悲观锁、可重入锁&Synchronize等)
-
比较重要的数据结构,如链表,队列,栈的基本理解及大致实现
-
J.U.C下的常见类的使用。ThreadPool的深入考察;BlockingQueue的使用
-
Java内存分代模型,GC算法,JVM常见的启动参数; CMS算法的过程 。
-
volatile关键字有什么用(包括底层原理)
-
线程池的调优策略
-
spring cloud的服务注册与发现是怎么设计的?
-
分布式系统的全局id如何实现
-
分布式锁的方案,redis和zookeeper哪个个好,如果是集群部署,高并发情况下哪个性能更好。
HUAWEI-Java二面 -0.5H
问题深入一些,开始加难度
-
问了项目相关的技术实现细节
-
数据库相关:索引、索引底层实现、mysql相关的行锁、表锁等
-
redis相关:架构设计、数据一致性问题
-
容器:容器的设计原理等
题目:
-
参与的项目,选一个,技术难度在哪里?
-
Collections.sort底层排序方式
-
负载均衡的原理
-
设计模式与重构,谈谈你对重构的理解
-
谈谈Redis相关的集群有哪些成熟方案?
-
再谈谈一致hash算法(redis)?
-
数据库索引,B+树的特性和建树过程。
-
mysq|相关的行锁,表锁;乐观锁,悲观锁
-
谈谈多线程和并发工具的使用
-
讲讲Redis的架构和组件
-
Redis的数据一致性问题(分布式多节点环境&单机环境)
-
docker容器
HUAWEI-Java三面-0.5H
三面问题更为细致了,考察项目经验更多
-
主要谈到了高并发的实现方案
-
以及中间件:redis、rocketmq、kafka等的架构设计思路
-
最后问了平时怎么提升技术的
题目:
-
高并发情况下,系统是如何支撑大量的请求的?
-
接着上面的问题,延伸到了中间件,kafka、 redis、 rocketmq、 mycat等 设计思路和适用场景等
-
最近上过上哪些技术站点:最近在看 哪些书。
-
工作和生活中遇见最大的挑战,怎么去克服?
-
未来有怎样的打算
HUAWEI-Java4面-1H
最后,你懂的,主要就是HR走流程了,主要问了未来的职业规划。
-
聊人生谈理想,HR很ncie,主要交流为什么选择来华为,未来的打算等,交流挺愉快。
看完上述的面试经历,不知你会作何感受?不过给我的最大冲击力就是“面试造火箭,工作拧螺丝” “基础不牢,地动山摇” 说的是真真的有理!如果你深感自己技术不牢固,基础不扎实,刷题不够多,那我建议你往下听我继续分享!
一:分享第一份: Java基础-中级-高级面试集合
-
Java基础(对象+线程+字符+接口+变量+异常+方法)
-
Java中级开发(底层+Spring相关+Redis+分布式+设计模式+MySQL+高并发+锁+线程)
-
Java高级“程序猿”(高并发+Redis缓存+分布式+消息队列+高可用+微服务+分库分表+读写分离)
-
高并发系列(经典面试题:如何设计一个高并发系统?)
-
Redis缓存系列
-
分布式系列
-
消息队列系列
-
高可用系列
-
微服务系列
-
分库分表系列
-
读写分离系列
-
... ...
二:分享第一份: Java高分面试指南-25分类227页1000+题50w+字解析
题目太多,我就不一一列举了,举例部分大家最感兴趣的,觉得不错的记得帮忙点个赞支持一下
第一分类 JavaOOP面试题
第二分类 Java集合/泛型面试题
-
ArrayList和linkedList的区别
-
HashMap和HashTable的区别
-
Collection包结构,与Collections的区别
-
泛型常用特点 (待补充)
-
说说List,Set,Map三者的区别
-
Array与ArrayList有什么不一样?
-
Map有什么特点
-
集合类存放于 Java.util 包中, 主要有几 种接口
-
什么是list接口
-
说说ArrayList(数组)
-
Vector( 数组实现、 线程同步)
-
说说LinkList(链表)
-
什么Set集合
-
HashSet( Hash 表)
-
什么是TreeSet(二叉树)
-
说说LinkHashSet( HashSet+LinkedHashMap)
-
HashMap(数组+链表+红黑树)
-
说说ConcurrentHashMap
-
HashTable(线程安全)
-
TreeMap(可排序)
-
LinkHashMap(记录插入顺序)
-
泛型类
-
类型通配符?
-
类型擦除
第三分类 Java中的IO与NIO面试题
第四分类 Java反射面试题
第五分类 Java序列化面试题
第六分类 Java注解面试题
第七分类 多线程&并发面试题
-
Java中实现多线程有几种方法
-
继承 Thread 类
-
实现 Runnable 接口。
-
ExecutorService、 Callable、 Future 有返回值线程
-
基于线程池的方式
-
4 种线程池
-
如何停止一个正在运行的线程
-
notify()和notifyAll()有什么区别?
-
sleep()和wait() 有什么区别?
-
volatile 是什么?可以保证有序性吗?
-
Thread 类中的start() 和 run() 方法有什么区别?
-
为什么wait, notify 和 notifyAll这些方法不在thread类里面?
-
为什么wait和notify方法要在同步块中调用?
-
Java中interrupted 和 isInterruptedd方法的区别?
-
Java中synchronized 和 ReentrantLock 有什么不同?
-
有三个线程T1,T2,T3,如何保证顺序执行?
-
SynchronizedMap和ConcurrentHashMap有什么区别?
-
什么是线程安全
-
Thread类中的yield方法有什么作用?
-
Java线程池中submit() 和 execute()方法有什么区别?
-
说一说自己对于 synchronized 关键字的了解
-
说说自己是怎么使用 synchronized 关键字,在项目中用到了吗synchronized关键字最主要的三种使用方式
-
什么是线程安全?Vector是一个线程安全类吗?
-
volatile关键字的作用?
-
简述一下你对线程池的理解
-
线程生命周期(状态)
-
新建状态(NEW)
-
就绪状态(RUNNABLE)
-
运行状态(RUNNING)
-
阻塞状态(BLOCKED)
-
线程死亡(DEAD)
-
终止线程 4 种方式
-
start 与 run 区别
-
JAVA 后台线程
-
什么是乐观锁
-
36、什么是悲观锁
-
37、什么是自旋锁
-
Synchronized 同步锁
-
ReentrantLock
-
Condition 类和 Object 类锁方法区别区别
-
tryLock 和 lock 和 lockInterruptibly 的区别
-
Semaphore 信号量
-
Semaphore 与 ReentrantLock 区别
-
可重入锁(递归锁)
-
公平锁与非公平锁
-
ReadWriteLock 读写锁
-
共享锁和独占锁
-
重量级锁(Mutex Lock)
-
轻量级锁
-
偏向锁
-
分段锁
-
锁优化
-
线程基本方法
-
线程等待(wait)
-
线程睡眠(sleep)
-
线程让步(yield)
-
线程中断(interrupt)
-
Join 等待其他线程终止
-
为什么要用 join()方法?
-
线程唤醒(notify)
-
线程其他方法
-
进程
-
上下文
-
寄存器
-
程序计数器
-
PCB-“切换桢”
-
上下文切换的活动
-
引起线程上下文切换的原因
-
同步锁
-
死锁
-
线程池原理
-
线程复
-
线程池的组成
-
拒绝策略
-
Java 线程池工作过程
-
JAVA 阻塞队列原理
-
Java 中的阻塞队列
-
ArrayBlockingQueue(公平、非公平)
-
LinkedBlockingQueue(两个独立锁提高并发)
-
PriorityBlockingQueue(compareTo 排序实现优先)
-
DelayQueue(缓存失效、定时任务 )
-
SynchronousQueue(不存储数据、可用于传递数据)
-
LinkedTransferQueue
-
LinkedBlockingDeque
-
在 java 中守护线程和本地线程区别
-
线程与进程的区别?
-
什么是多线程中的上下文切换?
-
死锁与活锁的区别,死锁与饥饿的区别?
-
Java 中用到的线程调度算法是什么?
-
什么是线程组,为什么在 Java 中不推荐使用?
-
为什么使用 Executor 框架?
-
在 Java 中 Executor 和 Executors 的区别?
-
如何在 Windows 和 Linux 上查找哪个线程使用的 CPU 时间最长?
-
什么是原子操作?在 Java Concurrency API 中有哪些原子类(atomic classes)?
-
Java Concurrency API 中的 Lock 接口(Lock interface)是什么?对比同步它有什么优势?
-
什么是 Executors 框架?
-
什么是阻塞队列?阻塞队列的实现原理是什么?如何使用阻塞队列来实现生产者-消费者模型?
-
什么是 Callable 和 Future?
-
什么是 FutureTask?使用 ExecutorService 启动任务。
-
什么是并发容器的实现?
-
多线程同步和互斥有几种实现方法,都是什么?
-
什么是竞争条件?你怎样发现和解决竞争?
-
为什么我们调用 start()方法时会执行 run()方法,为什么我们不能直接调用 run()方法?
-
Java中,你怎样唤醒一个阻塞的线程?
-
在 Java 中 CycliBarriar 和 CountdownLatch 有什么区别?
-
什么是不可变对象,它对写并发应用有什么帮助?
-
Java 中用到的线程调度算法是什么?
-
什么是线程组,为什么在 Java 中不推荐使用?
第八分类 面试之JVM
第九分类 Mysql面试题
-
数据库存储引擎
-
InnoDB(B+树)
-
TokuDB( Fractal Tree-节点带数据)
-
MyIASM
-
Memory
-
数据库引擎有哪些
-
InnoDB与MyISAM的区别
-
索引
-
常见索引原则有
-
数据库的三范式是什么
-
第一范式(1st NF - 列都是不可再分)
-
第二范式(2nd NF- 每个表只描述一件事情)
-
第三范式(3rd NF- 不存在对非主键列的传递依赖)
-
数据库是事务
-
SQL优化
-
简单说一说drop、delete与truncate的区别
-
什么是视图
-
什么是内联接、左外联接、右外联接?
-
并发事务带来哪些问题?
-
事务隔离级别有哪些?MySQL的默认隔离级别是?
-
大表如何优化?
-
水平分区
-
分库分表之后,id 主键如何处理
-
存储过程(特定功能的 SQL 语句集)
-
存储过程优化思路
-
触发器(一段能自动执行的程序)
-
数据库并发策略
-
MySQL 中有哪几种锁?
-
MySQL 中有哪些不同的表格?
-
简述在 MySQL 数据库中 MyISAM 和 InnoDB 的区别
-
MySQL 中 InnoDB 支持的四种事务隔离级别名称,以及逐级之间的区别?
-
CHAR 和 VARCHAR 的区别?
-
主键和候选键有什么区别?
-
myisamchk 是用来做什么的?
-
MyISAM Static 和 MyISAM Dynamic 有什么区别?
-
如果一个表有一列定义为 TIMESTAMP,将发生什么?
-
你怎么看到为表格定义的所有索引?
-
LIKE 声明中的%和_是什么意思?
-
列对比运算符是什么?
-
BLOB 和 TEXT 有什么区别?
-
MySQL_fetch_array 和 MySQL_fetch_object 的区别是什么?
-
MyISAM 表格将在哪里存储,并且还提供其存储格式?
-
MySQL 如何优化 DISTINCT?
-
如何显示前 50 行?
-
可以使用多少列创建索引?
-
NOW()和 CURRENT_DATE()有什么区别?
-
什么是非标准字符串类型?
-
什么是通用 SQL 函数?
-
MySQL 支持事务吗?
-
MySQL 里记录货币用什么字段类型好
-
MySQL 有关权限的表都有哪几个?
-
列的字符串类型可以是什么?
-
MySQL 数据库作发布系统的存储,一天五万条以上的增量,预计运维三年,怎么优化?
-
锁的优化策略
-
索引的底层实现原理和优化
-
什么情况下设置了索引但无法使用
-
实践中如何优化 MySQL
-
优化数据库的方法
-
简单描述 MySQL 中,索引,主键,唯一索引,联合索引的区别,对数据库的性能有什么影响(从读写两方面)
-
数据库中的事务是什么?
-
SQL 注入漏洞产生的原因?如何防止?
-
为表中得字段选择合适得数据类型
-
存储时期
-
对于关系型数据库而言,索引是相当重要的概念,请回答有关索引的几个问题
-
解释 MySQL 外连接、内连接与自连接的区别
-
Myql 中的事务回滚机制概述
-
SQL 语言包括哪几部分?每部分都有哪些操作关键
-
完整性约束包括哪些?
-
什么是锁?
-
什么叫视图?游标是什么?
-
什么是存储过程?用什么来调用?
-
如何通俗地理解三个范式?
第十分类 Redis面试题
-
什么是 Redis?
-
Redis 与其他 key-value 存储有什么不同?
-
Redis 的数据类型?
-
使用 Redis 有哪些好处?
-
Redis 相比 Memcached 有哪些优势?
-
Memcache 与 Redis 的区别都有哪些?
-
Redis 是单进程单线程的?
-
一个字符串类型的值能存储最大容量是多少?
-
Redis持久化机制
-
缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存降级等问题
-
热点数据和冷数据是什么
-
单线程的redis为什么这么快
-
redis的数据类型,以及每种数据类型的使用场景
-
redis的过期策略以及内存淘汰机制
-
Redis 常见性能问题和解决方案?
-
为什么Redis的操作是原子性的,怎么保证原子性的?
-
Redis事务
-
Redis 的持久化机制是什么?各自的优缺点?
-
Redis 常见性能问题和解决方案:
-
redis 过期键的删除策略?
-
Redis 的回收策略(淘汰策略)?
-
为什么 edis 需要把所有数据放到内存中?
-
Redis 的同步机制了解么?
第十一分类 Memcached面试题
第十二分类 MongoDB面试题
第十三分类 Spring面试题
-
不同版本的 Spring Framework 有哪些主要功能?
-
什么是 Spring Framework?
-
列举 Spring Framework 的优点。
-
Spring Framework 有哪些不同的功能?
-
Spring Framework 中有多少个模块,它们分别是什么?
-
什么是 Spring 配置文件?
-
Spring 应用程序有哪些不同组件?
-
使用 Spring 有哪些方式?
-
什么是 Spring IOC 容器?
-
什么是依赖注入?
-
可以通过多少种方式完成依赖注入?
-
区分构造函数注入和 setter 注入
-
spring 中有多少种 IOC 容器?
-
区分 BeanFactory 和 ApplicationContext。
-
列举 IoC 的一些好处。
-
Spring IoC 的实现机制。
-
什么是 spring bean?
-
spring 提供了哪些配置方式?
-
spring 支持集中 bean scope?
-
spring bean 容器的生命周期是什么样的?
-
什么是 spring 的内部 bean?
-
什么是 spring 装配
-
自动装配有哪些方式?
-
自动装配有什么局限?
-
什么是基于注解的容器配置
第十四分类 Spring Boot面试题
第十五分类 Spring Cloud面试题
第十六分类 RabbitMQ面试题
第十七分类 Dubbo面试题
-
为什么要用 Dubbo?
-
Dubbo的整体架构设计有哪些分层?
-
默认使用的是什么通信框架,还有别的选择吗?
-
服务调用是阻塞的吗?
-
一般使用什么注册中心?还有别的选择吗?
-
默认使用什么序列化框架,你知道的还有哪些?
-
服务提供者能实现失效踢出是什么原理?
-
服务上线怎么不影响旧版本?
-
如何解决服务调用链过长的问题?
-
说说核心的配置有哪些?
-
Dubbo 推荐用什么协议?
-
同一个服务多个注册的情况下可以直连某一个服务吗?
-
画一画服务注册与发现的流程图?
-
Dubbo集群容错有几种方案?
-
Dubbo 服务降级,失败重试怎么做?
-
Dubbo使用过程中都遇到了些什么问题?
-
Dubbo Monitor实现原理?
-
Dubbo用到哪些设计模式?
-
Dubbo 配置文件是如何加载到 Spring 中的?
-
Dubbo SPI和Java SPI区别?
-
Dubbo支持分布式事务吗?
-
Dubbo可以对结果进行缓存吗?
-
服务上线怎么兼容旧版本?
-
Dubbo 必须依赖的包有哪些?
-
Dubbo telnet命令能做什么?
第十八分类 MyBatis面试题
第十九分类 ZooKeeper面试题
第二十分类 数据结构面试题
第二十一分类 算法面试题
第二十二分类 Elasticsearch面试题
-
elasticsearch了解多少,说说你们公司es的集群架构,索引数据大小,分片有多少,以及一些调优手段。
-
elasticsearch的倒排索引是什么
-
elasticsearch索引数据多了怎么办,如何调优,部署
-
elasticsearch是如何实现master 选举的
-
详细描述一下Elasticsearch 索引文档的过程
-
详细描述一下Elasticsearch搜索的过程?
-
Elasticsearch在部署时,对Linux的设置有哪些优化方法
-
lucence内部结构是什么?
-
Elasticsearch是如何实现Master选举的?
-
Elasticsearch中的节点(比如共20个),其中的10个选了一个master,另外10个选了另一个master,怎么办?
-
客户端在和集群连接时,如何选择特定的节点执行请求的?
第二十三分类 Kafka面试题
第二十四分类 微服务面试题
第二十五类 Linux面试题
-
绝对路径用什么符号表示?当前目录、上层目录用什么表示?主目录用什么表示?切换目录用什么命令?
-
怎么查看当前进程?怎么执行退出?怎么查看当前路径?
-
怎么清屏?怎么退出当前命令?怎么执行睡眠?怎么查看当
-
Ls命令执行什么功能?可以带哪些参数,有什么区别?
-
查看文件有哪些命令
-
列举几个常用的Linux命令7、你平时是怎么查看日志的?
-
建立软链接(快捷方式),以及硬链接的命令
-
目录创建用什么命令?创建文件用什么命令?复制文件用什么命令?
-
查看文件内容有哪些命令可以使用?
-
随意写文件命令?怎么向屏幕输出带空格的字符串,比如"hello world"?
-
终端是哪个文件夹下的哪个文件?黑洞文件是哪个文件夹下的哪个命令?
-
移动文件用哪个命令?改名用哪个命令?
-
复制文件用哪个命令?如果需要连同文件夹一块复制呢?如果需要有提示功能呢?
-
删除文件用哪个命令?如果需要连目录及目录下文件—块删除呢?删除空文件夹用什么命令?
-
Linux下命令有哪几种可使用的通配符?分别代表什么含义?
-
用什么命令对一个文件的内容进行统计?(行号、单词数、字节数)
-
Grep命令有什么用?如何忽略大小写?如何查找不含该串的行?
-
Linux中进程有哪几种状态?在ps 显示出来的信息中分别用什么符号表示的?
-
怎么使一个命令在后台运行?
-
利用ps怎么显示所有的进程?怎么利用ps查看指定进程的信息?
-
哪个命令专门用来查看后台任务?
答案解析如下: