- 算法题:这个一般不难,剑指offer或者LeetCode easy题目,喜欢考排序,链表,树(红黑树、二叉排序树、完全二叉树、B+树区别)
- Java基础:集合类、HashMap/HashTable/CurrencyHashMap这几个的区别以及不JDK版本的区别、其他面向对象的语法,NIO,BIO,AIO;
- JVM:虚拟机结构,内存模型,双亲委派模型,内存溢出举例说明,垃圾回收算法,四大引用
- Java并发:三种锁,validate,synchronized,lock,CAS,线程池(原理和拒绝策略),多线程工具类
- 操作系统:死锁条件与避免,页式存储管理,页面置换算法,线程与进程区别,假脱机,存储模型
- 数据库:写SQL,几个join区别,统计类的group by, having count, MySQL的聚簇索引和非聚簇索引覆盖索引,三种锁,InnoDB与MyIsAm区别,索引的原理,B+树与B树,SQL优化
- 网络:TCP三次握手四次挥手,TCP/IP传输原理,拥塞避免算法,DNS原理,访问一个URL的过程,UDP TCP区别,LVS,路由与负载均衡
- 设计模式:工厂模式(三个)、装饰器、代理模式、观察者模式等,这个有时候会手写
- Spring*:IOC、AOP、单例模式、线程安全、常用的几个注解、执行过程、SpringBoot
- 中间件*:负载均衡、消息中间件(分类与区别)、Kafka原理与调参、Redis原理、K8S、大规模分布式系统设计
- 开发的简历,有实习经历的优先写实习经历,可以按照:实习完成的内容,从实习内容、使用的框架和中间件、技术上或者性能上的优化等方面去介绍,可以介绍些新一点的技术,尤其是分布式、Spring Cloud、多线程并发相关的;如果没实习可以介绍项目,但是尽量不要写烂大街的秒杀系统、SSM系统等,如果写了的话建议你写一下在这个项目基础上加入了哪些优化,比如分布式、引入消息队列提高性能、重构了代码提高了可扩展性等;最后写一下你完成了实习/项目哪些内容,技术栈和框架是什么,学到了什么;
- 其他的简历上的内容:学习成绩,比赛,实验室项目(如果是算法的可以不写,写了会被问为啥不去做算法),有论文和专利的话可以写(某些公司会按照这个评级);简历中如果有个人技能,尽量简洁命令分条列举或者用自己的一些获奖去证明;自我评价尽可能少或者用几个关键词代替,别人有你也有的就不要写(勤奋,努力这种),简历最好一页
如果能够把面试的能容和项目结合起来说会很好,如果能把计算机底层原理迁移到系统设计更好(缓存与页面调度算法、工厂模式与服务注册发现机制、网络TCP与Kafka的数据压缩)前提是别挖了不会的坑
前面的面试重视基础和算法,后面的面试注重系统设计和分布式原理
开发考查的基础题目都是小题,两三句就能解释清楚,可以先把答案说一下,然后讲一下思路或者结合项目延伸一下,如果面试官深度遍历去问你,点到为止,不熟悉不要给自己挖坑
(为了防止违反公司面试规定,面经不显示公司名称并随机打乱,面经中不包含在线笔试题目,并且不是特别完整,仅供参考)
- 自我介绍3分钟,项目详细介绍,项目背景,项目技术栈,你完成了哪些事情,遇到的问题及解决,面试问题:
- 垃圾回收机制
- HashMap底层实现,与HashTable区别,为什么安全
- 什么是反射,如何实现
- 红黑树
- Spring IOC AOP DI
- MySQL聚簇索引与非聚簇索引
- MySQL索引失效的情况有哪些
- 日志管理AOP
- Linux基本命令考察,网络相关
- 项目中并发实现机制
- 自我介绍
- 两个栈实现队列,生产者消费者问题
- spring 单例模式,bean依赖注入保证单例
- MySQL分页实现
- MySQL与SQLserver的区别
- 聚类实现学生成绩分类
- static关键字
- 立方体表面积计算
- 多线程JUC包下的一些常见的类,比如CountDownLatch、Semaphore等
- 最大子段和
- 左外连接,右外连接,全连接join
- 快速排序第k个最大数
- 写过的最复杂的sql语句
- 楼上扔两个鸡蛋最优次数
- 对线性代数矩阵的理解
- 判断链表有没有环
- 堆排序
- hashmap与hashtable区别
- 浏览器输入url之后发生了什么,DNS是啥,一个DNS下面有多少个IP,页面长时间等待原因分析
- JVM调优
- Linux命令,top ps aux
- 聚簇索引与非聚簇索引,什么时候用
- lock与synchronized区别
- 线程池两个上限的区别,几种线程池,饱和策略
- lock并发底层实现
- 实现从cached和并发量小的数据库中读取key
- 双重锁的单例模式
- Spring MVC执行流程
- Servlet流程
- Tomcat容器,IIS
- 红黑树实现,红黑树与二叉搜索树的区别
- Kafka的partition设置多少合适
- Kafka性能优势,怎么保证顺序性
- Mysql查询优化,如何避免全表搜索,什么情况下不是全表搜索
- Innodb二级索引
- 垃圾回收机制,OOM发生在哪里,堆内存,栈内存溢出
- 双亲委派模型
- 可重入锁底层实现,为什么是可重入
- 三种设计模式,代理模式,工厂模式,装饰器模式
- ORM模型
- NIO 并发性
- Linux IO实现原理
- Web框架有哪些熟悉的
- Hive表分区
- 反射
- MySQL索引的作用
- 异常的抛出会不会影响其他线程,main里面怎么抛出异常
- 如何降低锁粒度提高并发性
- 如何查异常的bug
- OOM发生在哪里,为什么
- JAVA内存划分,垃圾回收机制,GC发生在哪里
- 操作系统学了哪些东西,操作系统的进程和线程区别,操作系统内存调度算法,页面置换算法,固态硬盘和移动硬盘的区别,如何寻址,MMU是啥,CPU流水线,内核态 用户态
- 计算机网络:七层协议,网络里面如何发送包的,每一层做了什么,TCP三次握手四次挥手,网络层丢包咋办,网络流量如何知道的,DNS如何查询的IP,域名怎么解析的,路由器查询
- 数据库:关系型数据库和非关系型数据库的区别,举例子
- Kafka的基本结构,partition broker配置,底层怎么实现的,
- SpringBoot与Spring区别,配置,如何导入的jar包,xml文件,什么是自动织入,什么是DI, 有哪些常见的组件
- 写过多少行代码?
- Linux熟练吗?说几个命令
- fork底层实现
- 进程之间的通信机制
- 死锁的产生和避免
- socket如何知道连接关闭
- TCP可靠传输的实现
- UDP和TCP的区别
- UDP怎么保证有序
- 垃圾回收机制GC
- 红黑树的插入和删除
- 链表二分查找
- 怎么保证内存可见性
- volatile底层实现
- HashMap哈希函数的认识,JDK1.8采用的hash函数
编程题目:
- 在一个字符串中找到第一个只出现一次的字符。如输入abaccdeff,则输出 b。 hashmap
- 写出快速排序
- 有100本书, 两人轮流拿,每次最多拿5本,最少拿一本。你先拿,能否保证你拿到最后一本,如何保证?
- 千万级的用户,提供一个服务,该服务有很多模块,现在有一个底层模块需要优化,问怎么实现,在不影响其他服务模块以及用户体验的情况下
- 未知大小的文件,翻转整个文件
- 大数据搜索
- KMP算法
- 跳台阶问题
- TCP滑动窗口,拥塞控制
- C++ 虚析构、模板和宏, malloc和new的区别
- 进程与线程的区别,共享的数据, 进程内存空间
- 项目1
- Kafka可靠性怎么实现
- Kafka与RocketMQ区别
- 发送的数据异常怎么处理
- 异常的类型,怎么捕获
- 你们用了哪些架构
- 说一下你用过的设计模式
- 说一下pingback怎么做的
- NIO说一下
- 流式计算平台有哪些好处
- 项目2
- Spring事务怎么实现
- 平时写过并发吗
- 你了解哪些并发容器
- Java1.8 1.7区别
- 对并发包的了解
- HashMap1.8与CurrentHashMap区别
- 为什么会HashMap1.7线程不安全
- 线程池的几种饱和策略
- 实习中遇到的最大的困难
- 你觉得做过的最有挑战的事情
- 自我介绍
- 容器类,HashMap与HashTable区别
- 链表类,LinkList与ArrayList区别
- 聚簇索引和非聚簇索引的区别
- Innodb和MyIsAM的区别
- Java里面锁实现机制,区别
- 垃圾回收算法
- HashMap扩容
- Spring IOC容器
- 项目里面遇到的困难,如何解决
- 分布式问题
- SQL查询时limit用法
- 最近看的论文
- synchronized关键字 lock
- 对称二叉树,非递归实现二叉树后序遍历
- fork底层实现
- 进程之间的通信机制
- 死锁的产生和避免
- TCP可靠传输的实现
- UDP和TCP的区别
- UDP怎么保证有序
- 垃圾回收机制GC
- 实习里推荐系统设计
- 链表二分查找
- JVM怎么保证内存可见性
- volatile底层实现
- 15匹马5个赛道找到最快的三匹
- 项目1里的东西
- kafka原理,数据发送机制
- 每天传输的数据流量,数据丢失,数据去重怎么解决
- kafka的配置,partition多少
- HTTP里吗PUT,HEAD,POST,GET区别
- HTTP状态码代表的含义
- Linux命令,awk,grep,sed,du
- 项目2里的东西
- 项目里你做了什么
- Spring定时任务
- Mysql分区分表怎么实现
- MySQL查询优化
- Spring的IOC,AOP,项目里有用吗,解释
- 日志怎么做的
- Redis常用的数据结构
- 单例模式, 工厂方法, 抽象工厂, 策略模式, 观察者模式, 代理模式, Spring动态代理
- A公司与B公司的区别
- 怎么看加班
- C公司和D公司的区别
- 你未来的打算
- 为什么来这个部门
- 你对部门有了解吗
- 你来了之后做什么
- 你能实习多久
- 如果遇到问题你会怎么解决
- 本科学了哪些东西印象比较深
- 你觉得硕士期间最大的收获是什么
- 自我介绍
- 数据库:数据库的分类,索引和主键,索引建多了有什么坏处,主键和索引的区别,为什么索引会加快查询速度,什么是聚簇索引什么是非聚簇索引,数据库如何恢复;
- 网络:什么是HTTPs, HTTPS建立连接的过程是什么,什么是非对称加密,HTTP请求方式,请求之间的调用关系,Get Post区别
- JVM:虚拟机内存结构,垃圾回收,GCRoot上都有啥,双亲委派模型,对象在堆上还是栈上,Java创建对象的过程,代码编译的过程,static 构造函数父子顺序
- 操作系统:进程和线程的区别,进程线程资源共享吗,操作系统资源调度基本单位,进程之间怎么发生死锁,synchronized的范围,偏向锁、轻量级锁、重量级锁区别;
- Android:四大组件 7 .说几个设计模式并解释,装饰器和适配器的区别
- 项目中遇到的最难解决的问题是什么?并发怎么考虑?
- 编程题,移动一个数字,变成比当前数字大但是最小的数字:思路,找到前面小于后面的然后交换,剩下的升序排序
- 客户端和Web安全性,怎么避免恶意攻击后端网站;
- 反射两种实现方式,class.getName和class.getDeclareName区别,私有变量怎么访问;
- 客户端模拟ip和环境给服务端发请求,怎么避免和识别恶意工具
- 什么时候会初始化一个类?
- static加载顺序?
- Java对象产生的过程
- 创建一个数组一定会给数组中的元素赋默认值吗?
- 双亲委派模型有什么优势,为什么要用它?
- 客户端与服务端连接是长链接还是短连接,怎么保证应用推出之后,还能收到消息提醒?
- 最满意的一个实习经历是什么?
- Spring MVC调用过程?
- 会写前端吗?掌握到什么程度?
- synchronized加在不同的地方有什么效果,怎么锁住一个类?
- kafka零拷贝技术知道吗?怎么在一致性和可用性寻求平衡?
- TCP,UDP区别;为啥看视频用的UDP不保证顺序,但是画面还是一致的?
- 算法题:给一个起点和金矿点的二维数组,里面有障碍物和权重,从起点出发,最短时间内找到最优路径并计算代价 。(说了下思路,时间不够了没写)
- 介绍项目,根据项目提问题Java基本知识或者项目里面的知识
- 介绍CNN算法,决策树算法
- 怎么保证转账一致性,***业务流程,转错账,对方钱到账了而且取出来了怎么办?
- 异地多活容灾怎么保证,CDN,服务降级,服务熔断有没有实现过?
- 负载均衡实现有什么思路吗?
- 主从复制,可用性和一致性怎么解决?
- 遇到的最困难的一个bug是啥?最近遇到的一个bug是啥,怎么解决的?
- 说一下工作用到的设计模式并解释?
- Java字节码分析一下里面都有啥?
- 反射怎么实现?动态代理和静态代理的区别?
- 为啥不找算法岗,说一下你的论文思路和方法,比赛效果好是怎么做到的?
- 怎么快速学习一门技术?
- RPC服务注册中心以及调用过程?
- 支付的消息事务一致性怎么保证?
- 为什么来这边工作而不是留在蚂蚁?
- 工作城市,未来计划,如果来这边工作,你觉得要学些什么?
- 为啥选择我们这边?
- 未来2年的职业规划?
- 我们这边的优势?
- 公司的APP有什么建议?
- 如何提升自己?
- 链表反转
- 快速排序
- 多种方法解决1000万个数据中找出第100万个小的数字并找到;多个方法并说一下复杂度
- 计算机网络三次握手
- 操作系统:进程线程区别,虚拟内存,线程通信
- 两个孩子,其中一个男孩,另外一个女孩的概率
- 个人爱好
- 算法项目里面的逻辑和思路是什么
- ***项目中遇到的问题和思路
- 介绍部门
- 说下项目架构,以及三种实现方式的区别和优缺点
- 怎么做容灾
- 负载均衡的实现
- 事务的类型,中间件的区别
- 配置中心架构图
- AI怎么用到项目里面
- 异地多活高可用
- 怎么查询异常
- 怎么快速学习
- 一致性事务,幂等控制
- 项目架构的改进
- 讲PPT,部门介绍,实习期间框架,业务大图,我完成了哪些任务,重点突出一些任务,开源实现,论文,学校做的东西,怎么用到项目中,未来的规划,想成为什么样的人,为什么做开发,喜欢技术还是喜欢业务
- 讲PPT,每一页要有一个核心的观点去总结,要举例子更有代入感,把握好时间,及时观察听众的感受
- 技术面试:消息中间件设计原理,TCC一致性原理,配置中心
- 业务面试:做什么,解决什么问题,看过源码吗,为什么这样设计,缺点是什么,你怎么改进,画项目架构图
- 你参与了哪些事情,以后有什么打算,怎么解决可配置化,怎么做到服务化,你实习期间的贡献是什么
- 说下在***的实习经历,根据实习经历提几个问题,数据丢失怎么办,怎么保持一致性
- Spring相关:解释下IOC,解释下自动注入的几个方法,多个方法实现@Autowride怎么辨别,解释下@Configure里面@Bean系统调用的时候创建了几个类,怎么保证线程安全
- Java并发相关,几种同步的方式,synchronized方法加在类上和方法上和this上有什么区别,Java同步怎么保证线程安全,说一下几个常用的并发包并解释远离,乐观锁、悲观锁,Java8源码红黑树,Map的put操作,扩容操作, B树与B+树
- 数据库相关:数据库隔离模式并解释;什么是脏读、不可重复读、幻读,什么是聚簇索引和非聚簇索引,说下B+树,不同索引叶子结点是什么,数据库锁有哪几种,两种代码实现事务的方式,索引的查询过程,乐观锁悲观锁的执行过程
- kafka为什么高效,零拷贝技术,kafka的设计架构,kafka拉模式还是推模式,CAP理论,事务型消息
- shell脚本执行原理,定时任务执行原理,说几个Linux命令并解释
- Map Reduce,Spark原理说下
- 分布式缓存的一致性,服务器如何扩容
- Redis缓存和数据库会存在一致性问题吗?怎么解决
- Redis哨兵、集群的设计原理和区别
- 说下项目,根据项目提问几个设计上的方法,消息一致性,幂等性,每天多少业务量
- Java虚拟机,Java内存模型,元空间和方法区的区别,虚拟机各部分都是干嘛的,内存泄漏举例子,虚拟机调优,AtomicInteger怎么实现原子修改的
- kafka,msgbroker区别,高性能的原因,零拷贝技术,异步刷盘,内存换入,说一个最常用的消息中间件的组建
- 数据库索引,间隙锁,B+树原理,数据库底层对查询的优化,聚簇索引和非聚簇索引,数据库,varchar与char的区别,innodb一定会有一个索引吗,索引的目的
- 怎么防止数据丢失,主从复制原理,机器挂掉之后,怎么保证线程出内存中的数据能够正常处理
- 设计一个高性能、高可用的分布式系统,结合CAP理论,根据你的回答会提出问题,比如缓存,并发
- 三个实习过程收获最大的是什么,成长了什么,怎么去学习的?怎么提升自己,有没有开源实现
- 怎么做一个负载均衡中间件,说下SpringCloud,说下怎么限流,怎么熔断,SpringBoot的优势 rpc底层协议 与http传输的区别
- 你有什么问题要问我的吗:你们这边做的业务是什么、技术栈、团队人数
- 说下项目,实习期间做的东西,有什么收获
- 数据库锁,乐观锁,间隙锁
- 网络,四次挥手,长连接,短连接
- 操作系统:内核态,用户态,管程,作业调度算法
- 最近用过的并发包,锁的几种方式
- Java线程池的参数有哪些,解释含义
- 讲一下Dubbo,Nginx,微服务,rpc,你是怎么理解的
- 编程题:旋转数组中的最小数字,分析复杂度,并给出测试用例覆盖了100%
- 目前有哪些offer,说下他们的优势,未来什么打算,做技术还是做业务
- 为什么有论文还做开发不是做算法
- 算法题:求pow(double x, int n)要求内存和时间复杂度尽可能小 (二分法保存中间数据)
- 算法题:字符串abc3(d), 得到字符串dddcba,括号可以嵌套出现,最后结果反序(栈)
- 算法题:给出一个表格,里面有不同的数字表示海拔,给出起点和终点,求起点走到终点有几条路径,下一个地点的海拔必须比上一个地点高(动态规划)
- 项目1:出租车推荐系统中,特征,原理,框架,数据条数,数据清洗,结果,实验的准确率(线上、线下)
- 项目2:文本意图识别:文本的处理,算法框架,CNN,RNN公式原理,标签划分
- 实习经历:资金核对怎么做实时和离线,你做了哪些改进,埋点怎么不影响性能,怎么检测代码变更
- 编程题:统计不同的字符串的个数,按照从小到大排序输出
- 编程题:抽象工厂模式
- 多态实现方式,类与接口区别
- 栈内存溢出和堆内存溢出
- Java内存模型,克隆、深拷贝与浅拷贝
- 垃圾回收算法
- 集合类说一下
- 数组链表区别,不同操作的复杂度
- HashMap CurrentHashMap HashTable
- 二叉树查找树的定义
- 红黑树,B+数
- 讲几个设计模式
- 线程池拒绝策略 14 .项目1; 并发性怎么解决,支付高可用
- 项目2:后端照片存储,权限校验
- 车联网APP项目:功能,时间,难度
- 管理系统项目实现了哪些东西
- 最满意的一个项目
- 项目遇到的困难
- 实验室氛围
- 与导师的关系
- 实习期间与同事之间有没有矛盾
- 项目里面的角色
- 推荐系统算法实现,是独立完成的吗
- 文本意图识别算法
- 实验其他人都去哪里工作了
- 家庭情况,上学期间的事情,未来打算
- 个人爱好,性格
- 社团,社会活动,助教经历
- 介绍项目
- 根据项目介绍实现代码
- 线程池多个参数的含义
- 扔鸡蛋问题动态规划
- 集合类 map list 如何迭代
- Java 多线程 几个关键字解释下synchronized volatile
- 线程之间的通信, 并解释每一个的场景
- 联合索引,建立(a, b, c)这样的索引相当于建立了索引a、ab、abc三个索引
- B+树查找的优势
- 实习和论文怎么平衡
- 某些公司的经验怎么用到其他公司
- 根据分数查找名次
- innodb和myisam区别
- 中间件用过的有什么区别
- Spring ioc aop项目里面怎么用到的
- 设计模式
- 项目里面性能的优化
- 最好有一个实习经历或者项目经历
- 实习期间有好的想法能对项目做出一些优化
- 复习直接按照JD上的内容准备即可
- 回答面试问题要考虑全面,最好能够通过之前做过的例子去讲
- 根据面试官的反馈和语气灵活应对
- 基本功要好,多刷题,有一定的算法基础和计算机基础
- 针对不同公司准备不同简历,大厂深挖项目细节,国企看中基础和广度,外企看中算法能力
- 好好准备,面试题很基础的不能答错,整体90%以上正确率,算法题一定要能写出来
- 计算机网络(TCP/IP协议族,TCPIP协议卷一,计算机网络第六版)
- 操作系统,组成原理,算法与数据结构, 设计模型,Java或者C++,这些本科期间最基础的书
- 阿里巴巴-码出高效
- Java编程**/核心技术卷一卷二
- Java并发编程实战/Java并发编程的艺术/Java多线程编程核心技术
- 深入了解Java虚拟机
- MySQL权威指南
- Redis实战
- HBase实战
- 大规模分布式存储系统
- Spring实战
- 微服务架构设计模式
- 大话设计模式
- Java与模式
- 算法导论
- 剑指Offer或者刷LeetCode
- 轻松学算法
- 程序员代码面试指南
- kafka权威指南
- 从Paxos到Zookeeper分布式一致性原理与实践
- Netty权威指南
- 云原生Java开发
- 机器学习西瓜书
- 统计学习方法
https://github.com/guangxush/Petal/tree/master/image
此外可以通过关注几个比较不错的公众号去学习,及时了解新技术