Review

借鉴于:

1.套路:头条的面试特点基本就是一个套路:【自我介绍】->【项目介绍】->【手撕算法】->【基础知识】,屡试不爽。

阿里的面试特点:【自我介绍】->【项目介绍】->【场景解决】->【基础知识】,阿里面试除了基础以外,也很看重候选人的解决问题的思维。还是需要候选人有点积累的,假如                  你写的项目不是自己的,很容易就被问出来。
阿里的面试流程很长,而且一个部门挂了以后,会被另一个部门捞起来,不停的面。总之来说,阿里的面试体验也还不错,就是经常被放鸽子。
2.自我介绍(主要介绍项目)
项目介绍(表现得不太好,疯狂挖项目,项目不一定很大,但一定有充分的思考,为什么这样设计,并且把亮点都挖出来)
项目的时候面试官会问你难点和解决方案,同时会给你提出场景,问你更优化的思路。
针对简历写的东西问
项目难点
讲项目,串起来讲,可能遇到的问题,怎么解决,怎么实现
  1. 再一次聊项目,功能,架构,角色,量级
反问(有什么要问我的
  • 面试官说我不了解源码就没继续追问了

面试官说,不论去哪儿,做的开心是最重要的~







Review-Java:

  • synchronized的原理、synchronized是否可重入、synchronized如何实现可重入、synchronized锁自旋会先来先到吗

  • 对Java并发有什么了解、对哪个了解得比较深(synchronized,他发现上次问过了..)、公平锁非公平锁、ReentrantLock传参后是如何实现的公平锁

  • HashMap等集合在for循环中自己调用remove方法可以不

  1. 线程池的参数
  1. 能不能自己实现一个java.lang.String并加载
  2. IO复用模型有三种:select,poll,epoll; pollepoll的区别
  1. 进程同步的方式
  1. 如何自己实现内存分配和管理?不太懂,然后说了jvm的垃圾回收机制
  1. 如何实现群消息已读(对于每一个messageid,存当前readids + unreadids,当群成员A已读某一条消息时,把A userid从unreadids移除写到readids上就好了,客户端更新到messageid对应的详情列表,就可以展示m人已读,n人未读
  2. JVM内存模型,垃圾回收算法,垃圾收集器的区别,GC调优
  1. 两线程交替打印
  1. 多线程模拟100分钱随机分给20个人,每个人最少分配到2分钱
  1. HashMap和ConcurrentHashMap,HashMap中的红黑树,两者rehash的区别
  • 讲一下ConcurrentHashMap
    • 为什么比HashTable的效率高
    • CAS操作,有什么问题,解决方案
  • concurrentHashMap
    • 1.7 两级hash
    • 1.8 volatile + CAS + synchronized
  1. 刚刚你说了线程池,你线程池是用的什么,参数有哪些,为什么这么设置
  1. 线程池核心线程满了怎么办,里面的阻塞队列是干什么的
  1. 说说ThreadLocal是什么
  1. CAP理论知道吗,为什么不能同时满足
  1. 锁有哪些实现方式
  1. JVM的内存模型,垃圾回收算法垃圾收集器
    1. 如何判断垃圾对象(JVM)

  1. HashMap的原理,其他线程安全的Map
常用集合
Java的语法,OO的思想要熟悉,常用设计模式要知道场景
  1. 线程模型
  1. IO模型(包括操作系统底层IO模型和常见BIO、NIO、AIO、IO多路复用的原理)
  • 类加载机制
    • 为什么需要双亲委派
内存泄露
线程:join、wait、notify等
锁优化(不说synchronized,我说了readwriteLock的锁降级过程)
  • AQS原理
  • 自旋锁的unsafe怎么实现的
  • 什么时候gc会影响应用的可用性
强,软,弱,虚引用
  1. Synchronized   1.8后左了那些优化
  1. 轻量级锁
  1. Java类加载器有哪些种类,每种都用来加载什么
  1. 双亲委派,String 类是由那个类加载器加载的
  1. volatile 关键字原理
  1. 介绍下动态代理
Object类有哪些方法?详细说明
进程和线程和区别
说说Java多态
说一下垃圾回收?如果GC突然很慢怎么排查,比如原来GC完成只需要1秒,现在要5秒?了解哪些gc相关的工具,比如jstack之类的
Java线程有哪些状态
并发和并行的区别
进程调度算法
synchronized关键字的底层实现
为什么需要可重入锁
hashmap不是线程安全的,concurrentMap为什么是线程安全的呢
1. 你知道可重入锁是吧,那你把reentrank的详细原理给我说下
reetranklock不是取代synchronized的,而是在提供比如可饷应中断锁,可轮询锁请求,定时锁等避免多线程死锁的方法;reentranklock通过方法lock0与unlock()来进行加锁与解锁操             作, 与synchronized会被JVM自动解锁机制不同,reentranklock需要手动进行解锁,为了程序异常二出现无法解锁,用reetrankLock必须在finally控制块中进行解锁操作...
2,CMS垃圾回收器回收过程说下:initial mark -> concurrent mark -> remark -> sweep,
i++是原子操作吗


Review-Spring、Springboot、Springcloud:


  • AOP的用法,AOP动态代理的实现方式有哪些以及区别说下

  1. 你们公司内部的RPC框架,介绍一下
  1. RPC是什么,和http调用有什么区别
  1. 如何实现延时任务
  • Spring AOP的了解、Spring如何通过Cglib实现的动态代理

  • 项目的登录逻辑、设置token的过期时间、如果token被拦截伪造登录了咋办、单点登录

  • Spring IOC了解吗

  1. 说一说你项目的架构
  1. Spring里面的bean怎么回事
  1. Spring里面有哪些设计模式
  • 单例模式(写个自己觉得最好的)

  1. SpringMVC和SpringBoot有什么区别
  1. SpringBoot的自动配置是怎么实现的
  1. 怎么做服务拆分,边界怎么划分的
  1. dubbo调用过程是怎样的,PB知道吗
  1. thrift了解过吗
  1. etcd或consul知道吗
  1. 多个服务中如何快速排查问题
  1. rpc怎么实现服务发现
    1. RPC:

    如何实现一个IOC容器
    springboot的过滤、拦截和tomcat的过滤、拦截
    bean的作用域,为什么默认单例(线程考虑)

分布式原理
rpc原理
mybatis sql语句里写 #和$的区别
mybaits怎么防止SQL注入
Spring Boot实现定时任务有哪些方式
Spring Boot好处

Review-Mysql:

  • 写一个SQL语句:student(名字、课程、成绩),找出所有成绩超过80的学生名字

  • 聚簇索引了解不、select * from 表,咋执行

  • MySQL默认的隔离级别,事务的ACID

  • 建立了哪些索引,联合索引哪个放在了前面

  • 索引的底层结构

  • 使用expain时比较关心哪些参数?

  • 什么是覆盖索引
  1. MySQL集群。假如集群出现延迟怎么处理。
  1. MySQL索引,聚簇索引和二级索引
  1. MySql的索引优化,索引失效的情况
  1. 悲观锁和乐观锁
  1. MVCC
  1. Mysql的一致性是什么,数据库redolog,undo log,MySQL的索引结构,为什么二级索引叶子节点不能直接存储行数据的指针,这样可以不回表,怎么考虑的?
  1. MySQL的事务介绍,ACID的实现原理是什么(想问MySQL的日志)
  1. 怎么提高数据库读写性能,SQL调优
  1. MySQL(索引原理,查询优化,三大日志)
普通索引,唯一索引 之间的性能差异
  • 二阶段提交
用户表t_user表,年龄age(int类型),求哪个年龄的用户最多
select age, count(1) from t_user group by age order by count(1) desc limit 1;
  1. 数据库 左连接、右连接、内连接、外连接区别
  1. 项目数据量多少
  1. 分库分表的话查一条数据怎么查?(通过分片键和分片规则,找到这条记录的存储位置,再查找)
  1. SQL题(有一张考试分数记录表exam,包含字段(id,student,subject,score;)选出每个student的最高score记录,需要包含所有字段)
mysql怎么创建索引
说说binlog和redolog,redolog两阶段提交的过程
mysql大数据量分页如何查:先查主键,再查记录
主从复制以及binlog日志主从如何保持一致性

Review-Redis:

  • Redis除了缓存还用在了哪

  • Redis的持久化机制

  1. Redis的zset实现延时任务
  1. Redis的持久化机制,持久化能保证不丢失数据吗
  2. Redis的数据结构,线程模型
  1. Redis高可用方案
  1. 如何实现限流
  1. Redis为什么这么快
  1. 缓存穿透和缓存雪崩
  1. 分布式锁
  1. 如何实现全局的id生成策略
  1. Reids的集群和选主
  1. redis里面的zset,跳表怎么实现,怎么增删,
  1. Redis里面的数据结构有什么场景
  2. Redis怎么实现锁(redis锁的所有坑都说了一遍)
  1. redis是怎么rehash的
  1. 分布式锁的实现方式(MySQL,zk,Redis都说了一遍,并且分析了各自的优缺点,这个问题问的频率太高了)
  1. Redis中的淘汰方式有哪些(淘汰策略
  1. Redis(数据结构的内部实现、淘汰原理策略、持久化、集群、扩容、数据同步、以及一些常见缓存问题的解决方案)
  • mget和pipeline区别
    • mget和pipeline都是多命令一起执行,只有一次往返的网络IO
    • mget在集群下可以并行去获取,pipeline还是串行
  • 主从同步的细节
    • 全同步
    • 增量同步
  • 分布式锁
    • 可重入怎么实现
    • 如何保证原子性
    • 为什么删除的时候要重新get一下
      • 需要保证删的这个服务实例拥有锁
  1. 删除Redis数据的时候没有删除成功怎么办
  2. redis key的过期策略                  (定期删除:定期随机抽取20个key检查过期并删除                 惰性删除:读取key时检查到过期则删除)
zset底层实现,跳表插入数据的流程
Redis数据结构,String底层的考虑
redis、mysql如何保证数据一致性
Redis持久化机制以及如何保证分布式场景下追加AOF文件的一致性


Review-消息队列(Kafka):

  1. 介绍一些Kafka的一些概念
  2. Kafka如何保证消息有序
  1. 消息推送如何保证不重复
  1. Kafka如何保证消息的可靠性(高可用):重复发送,数据落地,确认信号
  1. producer-consumer
  1. 用过什么消息队列,有什么特点
  1. 怎么保证消息幂等消费
  1. zk是什么分布式模型(想问的CAP定理),主从怎么做选举
  1. zk只有一个主节点,写性能不高,zk怎么解决的
  1. zk介绍一下,有哪些节点类型,特点
  1. zk中的watch机制是怎么实现的
  1. 消息队列(内部原理,常见消息问题解决方案)
zookeeper的原理

Review-高并发:


  • 对负载均衡有了解吗、项目瓶颈在哪,如何判断项目瓶颈?

  • 负载均衡的轮询策略

  1. 设计题:秒杀系统
  1. 分布式事务知道吗,有哪些方案(说了2PC,3PC,TCC,MQ) 补偿性事务、后置提交优化 、两阶段提交
设计一个朋友圈,读QPS 1000w,写QPS 10w
  1. 分布式之后会遇到什么问题,CAP的各个情况介绍一下
  1. nginx的upstream是干什么的
  1. 项目量级多大,QPS最高的接口是怎么做的
  • 抢红包设计
    • 超发如何解决

Review-Structure:

  • HashMap结构、扩容操作、如果扩容红黑树节点会转回去吗
  • 红黑树
数据结构(数据增删改查操作的原理具体实现、各参数的含义,以及如何组合使用)

Review-算法:

  • 代码:LeetCode15:三数之和 时间复杂度

  • 代码:LeetCode39:组合总和

  • 智力题:9个人,一枚色子,选出两人,怎么比较公平?

  • 代码:LeetCode79:单词搜索

  1. 提供一个整型数组以及一个整数s,如果该数组中存在n个连续元素,且元素相加之和大于等于s,则返回满足该条件的连续元素的最小长度;否则返回0
  2. 给定m个不重复的字符 [a, b, c, d],以及一个长度为n的字符串tbcacbdata,问能否在这个字符串中找到一个长度为m的连续子串,使得这个子串刚好由上面m个字符组成,顺序无所谓,      返回任意满足条件的一个子串的起始位置,未找到返回-1。比如上面这个例子,acbd,3。给定m个可能重复的字符[a, b, d, d]呢?
  3. Two Sum
  4. K Group反转链表。写了栈和迭代两种实现方式,链表的题写起来真痛苦,很容易边界出错
  1. 第K大的数
分布式一致性算法
二叉树转双向链表
  1. 算法题LFU
  1. 算法题岛屿数量
  1. 算法题比较版本号
  1. 数组
  2. 链表
  3. 位运算
  4. 二叉树(dfs,bfs,相当重要,只要会了二叉树,回溯那些算法也会了)
  5. 设计题
  6. LRU/LFU
  7. 排序
  8. 查找
  • 开根运算 (误差1e-5)
  • 判断二叉搜索树
  • 两枚硬币,甲乙分别扔,然后谁扔正面谁赢,求甲赢的概率    1/2 + 1/(2^3) + 1/(2^5) + ... = 2/3(1-(1/4)^n) => 2/3
  • 用加法实现减法,乘法,除法(加法已经内置好)
  • 复原 IP 地址
LRU Cache
队列实现栈
  • 无序数组,三个数找和为target的情况 (hashMap去做)
  • 一致性hash
    • 一个机器down掉,数据会怎么分布
      • 考虑虚拟节点的情况
  • k个有序数组合并
    • 两种实现,分析算法复杂度
  1. leetCode 2 两数相加

给定一个二维网格和一个单词,找出该单词是否存在于网格中。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个        元格内的字母不允许被重复使用。
board =
[
['A','B','C','E'],
['S','F','C','S'],
['A','D','E','E']
]
给定 word = "ABCCED", 返回 true
给定 word = "SEE", 返回 true
给定 word = "ABCB", 返回 false

算法题:输入一个字符串,至多删除一个字符,该字符串是否是回文串,输出true或者false。比如bab,输出true;babb,输出true
算法题 https://leetcode-cn.com/problems/spiral-matrix/
算法题:输入一个数组,找出A1 A2两个数,使得 A1-A2尽可能大,输出A1-A2的结果。例如 输入[0,2,3,8],输出 -1,即2-3。
  • 手写单例模式(懒汉+双重校验),阿里一道字符串匹配的题(网上能查到)

  • Review-网络:

    • token的结构、项目中登录的逻辑(简述)、token有什么问题、其他保持状态的方式

    1. 为什么要四次挥手
    1. 浏览器打开一个网站的过程中会经历哪些网络处理,DNS的具体过程是啥
    • get和post区别(是否可以缓存)
    • http和https区别
    • 中间人攻击
    • https如何抓包(Fiddler or Charles)
    • TCP如何可靠
      • 滑动窗口,流量控制,拥塞控制
    TIME_CLOSE为什么要
    TCP为什么可靠?三次握手的过程?为什么是三次

    Review-linux:

    1. docker的网络模式
    1. Linux的内存管理
    1. docker的实现原理
  • 统计当前目录下(包含子目录) java 的文件的代码总行数。
    • wc -l `find . -name "*.java"` | awk '{ sum=sum+$1 } END { print sum }'
  • 管道的理解,管道除了存内容还存什么?
    • Linux管道是一个操作方式为文件的内存缓冲区
    • |是匿名管道,父子进程间使用,父进程先打开一个管道,然后fork出子进程,子进程通过拷贝父进程的地址空间拿到管道的描述符,从而可以读写
  • 程序正在跑
    • ctrl + c,会发送SIGINT的信号,等同于kill -2(interrupt),程序那边接收到这个信号后做处理
    • ctrl + z,会发送SIGTSTP的信号

    • socket io模型(select, poll, epoll)

    日志里面第一列是ip, 查询出现次数前10的ip cat xxx.log | awk '{ print $1 }' | sort -n | uniq -c | sort -r -k1 | head 10
    • 负载很高的时候,怎么查
    问了一些linux命令,如何查看进程、杀死进程、su命令,还有一些其他的忘记了,都是些比较基础的
  • Review-HR:

    • 做项目时怎么学习一门技术的,做项目前如何前期调研

    • 读过哪些开源项目的源码

    • 对字节有什么了解?

    • 是否有继续深造的打算,为什么不打算深造

    • 三轮面试的感受,三轮面试除技术外的感受,对哪个面试官印象比较深刻,面试回去后做了什么提升

    • 到岗时间,最快入职时间

    • 学习途径

    • 最有成就感的一件事

    • 简单介绍一下项目,是团队项目吗

    • 有投递其他公司吗

    • 为什么投递字节商业变现后端?为什么选择后端?

    • 用三个词进行自我评价

    • 希望字节这个平台能给自己带来什么

    • 除了实习之外以后的职业规划

    • 心目中的大厂是什么

    • 反问

    • 你周围最欣赏的人,最欣赏的品质是什么?

    1. 为啥离职,怎么想的
    1. 怎么和团队的人沟通,和成员出现冲突时怎么解决。
    1. 期望薪资,你现在的薪资
    1. 说说看,假如你是部门技术经理,线上商户数据丢失怎么办
    1. 怎么将一个产品推荐给其他的团队,怎么界定边界
    2. 怎么样协调关系
      (我才2年啊喂,到这里我已经快冒汗了,生怕最后一关毙掉了)
    3. 你和同事相处的情况怎么样,说说你帮助同事的一次经历
    1. 离职原因
    2. 职业规划
    最近阅读的相关书籍


    总结:

    我给大家的建议就是慢慢来,不管是社招还是校招,制定自己的计划,一定要有自己的知识体系,针对自己薄弱的地方进行强化复习,不放过任何一个细节。
    简历上写的东西一定要会,一般都是针对简历来提问的。如果在预习的过程中感到困难或者吃力,那就对了,等你熬过去了,就是胜利。祝福大家都能拿到满意的offer。

    三面面通过
    8.3号hr面
    8.10号收到感谢信已凉


    全部评论
    哎呦,技术这行,咋感觉就要一直学下去啊
    点赞 回复 分享
    发布于 2022-06-28 13:43

    相关推荐

    评论
    5
    17
    分享

    创作者周榜

    更多
    牛客网
    牛客网在线编程
    牛客网题解
    牛客企业服务