一、背景
本人2018届本科计算机毕业,前面2家待的都是小公司(对于找工作来说可以说是十分不利的),技术水平一般,历经一个月大概面了大概10家公司,其中大中小厂都有(包含蚂蚁、阿里新零售和字节。PS:无奈水平不济深度和算法都太薄弱都挂了)。最终去了个中厂公司,在此记录下面试中碰到的知识点,以便后续复习总结使用,并分享给还在面试中有需要的小伙伴参考。
二、面试
JAVA基础相关
- 重写和重载的区别?重写的话返回值可以变吗?
- 什么时候需要重写hashCode和equals方法?如果不重写的话hashCode和equals比较的是什么值呢?hashCode一样equals一定一样吗?反过来呢?(频繁)
- java8新特性有哪些了解吗?lambda原理是什么?那你知道steam流的工作机制吗?
- 抽象类和接口的关系和区别,以及你在时间开发过程中是怎么使用到的?
- 基本数据类型转换为String时你有几种方法,分别是什么?
集合相关
- java里的集合有哪些?
- arrayList和LinkedList的内部数据结构了解吗?两则之间的区别和使用场景能说下吗?arrayList扩容流程说下?(频繁)
- 你说arrayList用get方法查找时间复杂度是O(1),能说下为什么吗?
- hashMap有了解吗?底层采用什么数据结构?1.8做了哪些优化?能说下调用put方法的大致流程吗?计算哈希时为什么要用key进行高16位异或运算?为什么说hashMap的容量总是2的倍数呢?什么时候节点会转化成红黑树?(频繁)
- linkedHashMap和hashMap有什么区别?链表的特点是什么?linkedHashMap里的元素能保证是有序的吗?(频繁)
- ConcurrentHashMap有使用过吗?能说下1.8的时候他执行put方法的流程吗?什么时候进行锁优化呢?(频繁)
- hashSet和TreeSet有了解过吗?彼此的底层数据结构是怎样的?他是怎么判断去重的呢?(频繁)
并发相关
- 线程池有使用过吗?有哪几个参数?每个参数的作用能说下吗?线程池的处理流程能说下?(频繁)
- 简单谈谈线程的几种状态?以及如何进行状态转换?调用notify方法后线程后立即进入进行状态吗?为什么?(频繁)
- 一个线程连续两次调用start方法会发生什么?
- synchronized关键字的作用?修饰静态方法、普通方法和普通对象的区别是什么? synchronized锁升级过程有了解过没?(频繁)
- volatile的作用是什么?为什么说他可以保证内存的可见性和指令不重排?你知道原理吗?volatile和synchronized的区别是什么?(频繁)
- BlockingQueue有了解吗?有哪些成员?ArrayBlockingQueue和LinkedBlockingQueue的区别是什么?
- AQS了解吗?原理是什么?有哪些同步组件?
- 你知道的java锁有哪些?synchronized和ReentrantLock的区别有哪些?是怎么保证可重入锁的?ReentrantLock是如何保证公平的?(频繁)
- 什么是可重入锁?是如何实现可重入锁的?
- 要实现A,B线程异步执行完再执行C线程你会有哪些方法?
- 保证一个变量或者方法线程安全有哪些方法?
- threadLocal是干嘛用的?会有什么问题?你知道他的底层原理嘛?(频繁)
JVM相关
- JVM内存模型有哪些说一下?程序计数器是干嘛用的?什么区域会发生OOM行为呢?(频繁)
- 对象一定是在堆里创建的吗?什么是逃逸分析?在日常代码写代码中如何避免对象逃逸?
- 对象创建的过程,你能简单说一下吗?(频繁)
- 对象分配内存是哪些策略?JVM是如何保证对象创建内存分配安全问题的呢?
- 创建一个线程需要多少内存?
- 你在项目中有发生oom的情况吗?是为什么发生的?你是怎么定位到问题的呢?(频繁)
spring相关
- beanFactory和factoryBean之间的区别?
- beanFactory和applicationContext之间的区别?
- bean对象的生命周期流程简单说一下?(频繁)
- spring是如何解决循环依赖的?你能简单说下三级缓存的工作流程吗?(频繁)
- spring事务了解吗?事务的四个特性?事务隔离级别讲一下?什么时候事务会失效?在类里使用this调用方法会开启事务吗?为什么?(频繁)
- mybatis方法支持重载吗?
微服务相关
- 微服务的特点是什么?你的项目为什么采用微服务?那你觉得相比单体应用微服务有什么优势吗?(频繁)
- springBoot了解的多吗?能说下相比spring的优势是什么?你知道springboot的自动装配机制吗?springboot的启动流程你能简单说下?(频繁)
- springBoot和springCloud是什么关系?
- 你用过springCloud的哪些组件能说下吗?
- 网关的作用有哪些?
- feign的底层原理是什么?他是如何能调用到你的请求的呢?feign和dubbo有哪些区别?负载均衡的策略有哪些呢?
- 注册中心的作用是什么?
- 在你项目里是如何保证分布式事务一致性的问题?(频繁)
- 微服务调用的时候A模块调用B模块超时的话怎么办,你会怎么处理微服务模块调用超时的问题?比如支付的时候。(频繁)
redis及缓存相关
- 什么是缓存?
- 在你项目中redis使用场景有哪些?redis常用的数据结构有哪些?(频繁)
- redis效率那么高是为什么?什么是IO多路复用呢?
- 本地缓存和redis缓存的差异是什么?为什么说redis也是基于内存操作但效率不如本地缓存呢,主要差异是产生在什么地方?
- redis集群有几种模式?能说下他们之间的区别吗?为什么rediscluster采用哈希槽而不是采用一致性哈希呢?
- 你知道缓存雪崩吗?实际设计系统时,怎么避免缓存雪崩?
- 缓存击穿和缓存穿透是什么?怎么避免?
- 你知道zset的底层原理吗?什么是跳跃表?为什么采用跳跃表不采用红黑树这种数据结构呢?
- 在你项目中是如何设计分布式锁的?如何保证setnx和expire是原子性操作呢?如何保证当前锁不会被其他线程释放?(频繁)
mq及其他中间件相关
- rocketMQ和kafka的区别是什么?
- mq如何保证消息不被丢失?(频繁)
- mq如何保证幂等性问题?(频繁)
- rocketMQ里主要包含哪几个部分?你能简单说下每个部分的作用吗?
- rocketMQ是如何支持分布式事务的?(频繁)
- rocketMQ的rebalance过程你能简单说下吗?
- zookeeper的使用场景?
linux相关
- shell中常用的命令有哪些?
- 如果要在一个有10W行的文本中找出你要的关键字行,你会使用说明命令去查找?
- 进程和线程的区别?(频繁)
- 用户态与内核态?(频繁)
- select、poll、epoll?(频繁)
- shell中如何结束进程?原理是什么?
网络相关
- url请求流程?
- 为什么TCP连接的时候时候需要三次握手和四次挥手?如果握手二次、挥手三次可能会出现什么问题?(频繁)
- ajax是如何实现异步请求的?(频繁)
- http和https的差别?https的流程你知道吗?(频繁)
- get和post请求有什么区别?
- http请求包含哪些内容你知道吗?http2.0相对1.0做了哪些优化?
算法相关
- 你了解的排序算法有哪些?那这些算法哪些是稳定的排序算法?能简单讲下快速排序是怎么实现的吗?
- 两个有序数组排序的话,你会用哪种算法?int[] a = {2,4,8} int[] b={1,3,5,7,9}?
- 给你一个链表1->2->3->->5->6->7->8,我要你做到隔k反转,比如k等于5时输出结果,5->4->3->2-1>8->7->6,请问你怎么实现?
- 盛最多容器的水?(leetcode题目编号:11)
- 手写二叉树前序遍历非递归实现。
- 对称加密和非对称加密的区别?你了解哪些对称加密算法?非对称加密呢?
- 加密和加签有什么区别?
- 你说你了解共识算法,简单讲下raft共识算法的原理?PBFT算法和raft算法的主要区别是什么呢? 为啥说raft可容忍的错误节点数是f=(n-1)/2,而PBFT是f=(n-1)/3呢?
mysql相关
- mysql默认的隔离级别是什么?mysql是如何解决幻读的问题?(频繁)
- MVCC机制的实现原理是什么?(频繁)
- redo log、undo log、binlog三者的区别?(频繁)
- mysql为啥要使用b+树这种数据结构作为索引,为啥不使用b树或者红黑树呢?(频繁)
- mysql执行流程?
- mysql索引失效有哪些场景?(频繁)
- mysql是怎么通过索引找到这条数据的?什么时候会出现全表扫描什么时候比索引还快?
- 你写sql有什么技巧或者需要注意的吗,分享一下。
项目常问问题及闲谈相关
- 你未来的职业生涯规划是什么?是准备都往技术方面发展嘛?
- 在你项目里支付的时候是怎样保证不会出现重复支付的场景?下订单的时候如何避免客户重复下单的呢?
- 如果要你去设计一个高并发的分布式系统?你会从哪几个方面进行考虑?
- 给你10000张优惠券,在高并发情况下你会怎么考虑去发放这些优惠券呢?
- 你们公司有做code view吗?你认为怎样的代码才是好代码?(频繁)
- 你还有什么想问我的吗?(频繁)
HR面相关
- 你自学的方式有哪些?最近在看什么书?看了XX书感觉最大的收获是什么,能给我讲一下吗?(频繁)
- 你觉得你在生活中是一个怎样的人?你觉得你的同事给你的评价是怎样的?
- 你觉得你有哪些优缺点?你觉得你最大的优势是什么?(频繁)
- 在项目中有碰到什么难题吗?最后是怎么解决的?还有吗?(频繁)
- 你做的XX项目大概有几个人,你在里面担当什么职位呢?(频繁)
- 对于加班的看法?(频繁)
- 你未来的职业生涯规划是什么?
- 请问你离职的原因是什么?(频繁)
- 你对我们公司了解多少?对于大概薪资的期望?(频繁)
- 对下一份工作最看重什么?(频繁)
三、总结
以上是两年经验近期面试被问到的大多数技术性基础题,答案的话后续若有空闲的话会慢慢整理并更新,觉得有用的话可以点个赞哦!