暑期实习面经汇总

2023年2月中到三月底,战线十分漫长,但是仍然没有斩获offer,记录一些面试过程中的经验与问题梳理,方便复习。

目前还在继续准备。


阿里云多个部门提前批一面挂,包括云中间件,云存储,云网络,GTS,阿里CTO二面泡池子,腾讯PCG二面挂,美团到店二面挂,携程笔试挂,拼多多笔试挂,米哈游笔试挂,深信服简历挂,蔚来简历挂


投递肯定看背景,看方向匹配程度,以及手撕代码的发挥和面试的实际表现。

但是面试下来的体验真的很绝,没有实习经历,可能很难找到一份实习,这就死锁住了。我是为了接触一些更实际的场景,去见识中间件怎样在高压场景下发挥作用的,不是我还没去公司就能在自己的demo下做各种实际猜想。

有没有对消息队列进行过压力测试,有没有大量用户并发的场景以及解决方案,有没有防黑客攻击,有没有数据库防SQL注入,有没有用过微服务解决什么问题。

不过纯粹抱着学习的态度,借助docker部署消息队列集群或者一些数据库节点仍然是可行的,只要摸你的场景demo足够有效,当然是一份实践。


面试的流程

自我介绍

校招与社招还是会分不同的侧重点。

项目介绍

对于项目来说,先说明项目的背景,主要技术栈,解决了什么问题。

比如前后端项目,会问你的角色,你负责的内容,你觉得项目的难点是什么?这张表是怎么设计的?为什么这么设计?

其他专业类的项目可能就是要讲清楚算法,一些工具类有没有用多线程,持久化方式是怎么样的需要说清楚。多线程的集体实现,信号量还是其他的同步互斥方式?

深挖项目这部分灵活性非常大,考验自己,也要看面试官的兴趣点以及业务能力,如果这个人很资深,那么问题可能会一个接一个。有订阅功能吗?有哪些控制器?哪些服务?

比如你们能实现什么搜索功能?用过ES没?看过ES源码,了解其实现原理吗?

Java

Java和Cpp有什么区别?

你当前主要用的jdk版本是什么?有什么特性?

最新版的Java特性知道吗?

集合

HashMap底层源码看过吗?说说其实现方式

说说HashMap的几个核心参数

HashMap为什么线程不安全,多线程操作时,get和put的影响,老版本头插法会带来循环链表

ConcurrentHashMap为什么是线程安全的?jdk1.7前后发生了什么变化?

Integer和int,得说它内涵的缓存机制,装箱和拆箱这种机制带来的好处,什么时候要用包装类?

String a = new String("abc"); 创建了几个对象?

你都用过什么List,各自的特点是什么?底层实现是什么,哪些是线程安全的?

并发

线程有哪些状态? 操作系统的线程和Java的线程都说一说

Java线程多次start()会怎么样?

线程池有哪些状态?分别具体说一说

线程池核心参数有哪些?具体的含义和作用讲一下,什么时候会创建新线程,最大线程数和阻塞队列都满了会怎么样?

线程池拒绝策略是怎么样的?四种策略,分别回答一下,如果可以则可以继续延伸到其他中间件中常见的拒绝策略。

说到阻塞队列,都有哪些实现?Array的和linkedlist的,前者是有界的后者是无界队列,会有OOM的风险。

ThreadLocal知道吗?其作用是什么?为什么ThreadLocal中是弱引用,会有什么问题?(OOM)

线程池中使用ThreadLocal会有什么问题需要注意吗?

Java四种引用分别是什么,有什么区别。

知道JMM是什么吗?一种规范,JVM实现了这种规范,避免了多线程场景下的许多问题。

并发编程三大特点是什么,原子性,有序性,可见性。

synchronized和锁用过吗?分别讲一下区别。高频常见,前者是JVM实践可以锁升级,后者是API,需要人工加锁放锁,但是结合condition可以根据需要的条件释放锁。

锁的底层是什么?知道AQS吗?讲讲?双向链表state来记录状态,并标记哪个线程持有该锁。分共享锁和独占锁的情况。

sleep和wait的区别是什么?前者是Thread的方法,后者是Object的方法,需要在同步代码块中使用

JVM

你知道垃圾回收吗?你常用的垃圾回收器是什么?知道你用的版本的默认垃圾回收期是什么吗?

  • Java 7 - Parallel GC
  • Java 8 - Parallel GC
  • Java 9 - G1 GC
  • Java 10 - G1 GC

Jvm的内存结构式什么?对内存的具体分区是怎么样的?s区有几个?为什么有s区的存在?

Java的编译过程是怎么样的?

什么是双亲委派模型?

volatile知道吗?作用是什么?怎么添加的内存屏障,如何防止的指令重排序。


MySQL

知道有什么引擎吗?不同引擎对比一下,除了MyISAM和InnoDB还知道什么?

什么场景适合MyISAM?插入,读取。

SQL注入如何避免?

索引

知道索引吗?索引的原理是什么?

聚簇索引非聚簇索引,索引覆盖是什么?

怎么设计索引,如果让你的项目上线,应该怎么加索引?

做过慢查询吗?怎么弄?explain

怎么优化索引?最左匹配,设立联合索引,减少回表,找区分度大的字段当索引

为什么用B+树索引?

什么情况下索引会失效?

有MVCC为什么要gaplock? 要区分是当前读还是快照读。

事务

事务隔离级别有什么?分别有什么问题?Mysql怎么解决的这些问题。

MVCC

Mybatis

知道Mybatis的底层实现原理吗?

知道Mybatis中是如何对应MySQL中的不等号吗?


Redis

数据结构

底层数据结构有什么?

SDS底层是怎么实现的?

hash底层是怎么实现的?

压缩链表讲一下

是怎么应用的?

应用到哪?热门文章,点赞记录。

集群数据一致性怎么保证?

讲讲Redis持久化方案, 进行优缺点对比,rdb和aof。


Spring

spring事务是怎么进行管理的?

springboot事务是怎么进行管理的

阅读过源码吗?讲一些你印象深刻的具体的函数或者属性值,或者注解

你知道Java是怎么识别这些注解的吗?如果让你写一个程序去解析每个注解的功能你会怎么写?

Spring循环依赖如何解决


消息队列

持久化,确认消费,按照特定顺序消费


408基础知识

JVM内存管理和虚拟内存是如何交互的?系统调用等

虚拟内存知道吗,分页分段,会不会有碎片,页表,物理内存到虚拟内存的映射是怎么样的?

浏览器输入一个地址后的整个流程,会涉及什么协议?

Java线程是内核态还是用户态?

知道OSPF协议和BGP协议吗?


手撕代码

手写生产者消费者模型

反转链表

整数拆分

后序遍历二叉树非递归

合并区间

用Java实现strcmp函数,不调库来判别字典序

输入字符串,输出各单词及其出现的数目,按单词字典序输出

岛屿数量

接雨水

...

你可能感兴趣的:(面试,Java,redis,java,面试)