前期面试准备
- 算法
- 基础知识
- 项目经验
- 场景分析
1.整体流程
一般三轮技术面和一轮hr面
第一轮:
一般是你同时或者比你级别稍微高一点的。
主要问你一些基础或项目。同时会让你写个算法题。
第二轮:
一般就是你后期的leader
会问你一些业务场景解决方案和项目中的经验,也会有一部分的基础
会让你写算法题
各种解决方案(偏技术)
第三轮:
项目部的技术负责人或者CTO这类的。
会问你项目,各种解决方案。
第四轮:
一般hr面试
会问你工作经历
为啥出来看机会
薪资要求
选择我们的原因是什么?一定要表达出强烈想去它们公司的意图,就是死命舔( = = |||)
最后一轮:
就是给薪资方案了。发offer
发offer后,就接就行,可以后期拒掉
2.自我介绍
每次都会让你做自我介绍,可以从下面角度说:
- 从之前公司是干什么的
- 你是哪个部门的
- 你们这个部门是做什么的
- 你负责什么
- 擅长哪些技能
- 负责过哪些业务难或者技术难的业务
- 你的性格
- 平日是否爱学习、爱思考(需要有证据)
- 是否有自己的博客、git或项目
3.算法
大厂面试主要喜欢考察动态规划、链表、字符串排序,难度一般简单到中等之间
代码行数在10-30行之间(如果解法太长的题目优先级降低)3.1刷题推荐
- leetcode前100道简单和中等难度的
牛客网高频200到题中的前100道(前30道简单和中等必刷)
3.2突击题目
数组
- 两数之和
- 盛水最多的容器
- 三数之和
- 删除有序数组中的重复项
- 下一个排列
- 搜索旋转排序数组
- 移动零
- 链表
- 两数相加
- 删除链表的倒数第N个结点
- 合并两个有序链表
- 合并K个升序链表
- 两两交换链表中的结点
- 环形链表
- 环形链表2
- 反转链表
- 树
- 二叉树的前中后遍历
- 二叉树的层序遍历
- 平衡二叉树
- 对称二叉树
- 剑指Offer 二叉搜索树的第K大结点
- 动态规划
- 接雨水
- 最大子序和
- 乘积最大子数组
- 最小路径和
- 最长递增子序列
- 爬楼梯
- 买卖股票的最佳时机
- 买卖股票的最佳时机2
- 打家劫舍
- 最长递增子序列
- 零钱兑换
- 其他
- 排序
- 设计LRU缓存结构
- 合并类题目:合并有序数组、链表、多个链表或者数组的。并排序
-
4.基础知识(因为是java的总结 从中挑出几个go也有的)
go基础
- 线程
- 同步异步
- 实现一个死锁
- 什么是公平锁和非公平锁
- 垃圾回收
- 基础网络部分
- udp和tcp的区别
- 三次握手和四次握手
- tcp头的结构
- http头的结构
- https的接口
- cdn是什么东西
- 什么是先后端分离,你们项目中怎么实现的
- 讲述一下一次完整的网络请求是什么步骤
- IO
- bio nio aio是什么
- 底层是怎么实现的
- mysql
- 事务的基本要素
- 事务的隔离级别
- 如何解决事务的并发问题(脏读幻读)(必考)
- mvcc多版本并发控制,底层实现(必考)
- binlog、redolog、undolog都是什么,起什么作用
- 给定隔离级别下,加锁的过程,表锁、行锁、间隙锁、排他锁、共享锁
- innodb和myisam的区别和优缺点
- 为什么选择b+树作为索引结构(必考)
- 查询在什么时候不走(预期中的)索引(必考)
- sql如何优化
- sql的执行顺序?或者order by的原理
- 让你写个sql,一般是join子查询居多(必考)
- redis(必问)
- redis的底层数据结构是啥,晋升条件、最大容量是啥
- 它为什么这么快,应用场景
- 它是单线程的吗?单进程的吗?
- redis的持久化机制,参数、流程(必考)
- 主从同步是怎么做的?同步失败了怎么办?还是失败怎么办?
- 热点key、大key是怎么发现和解决的
- 缓存穿透、缓存击穿、缓存失效都是啥
- 淘汰策略都有啥。内存满了还处理请求吗(必考)
- 了解bitmap 布隆表达式 lua 吗
- 分布式锁是怎么实现的?续期和安全性是怎么保证的?
- 他和memcache的区别
- 集群或者哨兵模式下是怎么工作的
- 怎么保持原子性
- kafka
- kafka的整体架构是啥,都有哪些部分促成的,作用是啥
- 怎么保证消息的不丢失
- 怎么保证消息的有序性
- 怎么提高kafka的并发,生产和消费都说一下
- 为什么kafka这么快
- 项目
- 项目里职责
- 会问你部门里有几个人,组成状态
- 这个项目多少人
- 这个项目你负责了啥,占了啥地位或者比重,工期啥的
- 项目细节
- 让你介绍一下项目整体流程
- 一定要有套路,先说架构或者整体,再说细节
- 会提问你难点和亮点,怎么优化或解决的
- 并发大?
- 技术难度大?
- bug或者坑太多?
- 你是怎么发现或者解决的?
- 如果你实际没有用过,但是直到如果用了哪个技术栈会提高并发啥的,可以尽管直接说,还可以怎么怎么优化就行。
- 核心思路:面试官其实不是想问你项目curd,而是你在项目中的亮点和难点
- 你需要让面试官认为你这个项目很难,技术挑战很高,然后你是怎么克服的
- 项目实践
- 如果你的项目实在平平无奇,可以融入下面几个亮点
- 分布式ID是啥?
- 分布式ID一般是解决数据库主键自增的。或者解决异步落库订单重复
- 雪花ID、redis自增、自制ID(时间+外键+随机 拼接的),分布式ID中间件(tiID)
- ID单个获取还是分批获取
- 分布式事务有哪几种
- 你们怎么用的,会问你XA TCC
- 分布式锁
- redis锁、zk
- 是怎么续约的
- 是怎么保证安全的
- 优化点:内存锁+分布式锁,用来降低分布式锁的压力和竞争
- 限流器都有哪些实现方式
- 内存 guava的RateLimiter
- redis自增ID或者lua脚本
- 快速失败还是超时失败,推荐快速
- 多级缓存
- 内存缓存+外置缓存
- 内存缓存:guavaCache Ehcache Caffeine
- 外置缓存:redis memcache
- 你们缓存是怎么更新的:永不失效,异步加锁更新
- 内存泄漏怎么解决的
- 线程、cpu、内存多方面考虑
- 分布式ID是啥?
- 如果你的项目实在平平无奇,可以融入下面几个亮点
- 方案规划
- 面试官会给出各种场景题,有的会给你出智商题,目的是:看看你真没真的用过,你的工作经验
- 场景题:
- 查询类问题
- 上N亿个数,找出其中最大的或者出现最多的前M个数
- 分而治之,先将N个数取hashcode取余,分到多个文件中,然后挨个文件取最值,然后聚合
- 上N亿个数,找出其中最大的或者出现最多的前M个数
- 存储类问题
- 我在群里发了一条聊天记录,怎么将所有查看过的人记录下来。并且要快速查询
- 有可能群里的人很多,或者群里变动很频繁
- 方案1:打印log日志,导入ELK里,借助ES的能力查询
- 方案2:使用redis的set或者map,value就是用户ID
- 方案3:使用bitmap,如果有500人,那么只需要500个位即可
- 方案4:使用布隆表达式,有很小概率误判,查询单个可以快速查询,如果多个的话,就从redis拿来下,自己在内存遍历一遍即可
- 有可能群里的人很多,或者群里变动很频繁
- 我在群里发了一条聊天记录,怎么将所有查看过的人记录下来。并且要快速查询
- 并发类问题
- 高并发系统的限流如何实现
- 高并发秒杀系统的设计
- 负载均衡如何设计
- 智商类问题
- 就是一些类似于数学类的概率或者脑筋急转弯等
- 不要急,自己用几个简单的数模拟一下,应该就能答上来。能否打上来就看运气
- 数学题:随机在一个圆周上选择3个点,构成锐角三角形的概率
- 算法题:
- 在一堆数里找一个方法随机选择一个最大的数
- 一大堆黑兔子还有一些白兔子,所有的黑兔子都喜欢白兔子,白兔子不喜欢任何一只兔子,黑兔子之间可能喜欢或不喜欢,给了一个函数,里面有两个参数A和B,这个函数能判断A是不是喜欢B,让你设计一个算法,最快找出喜欢的兔子
- 有一个整型数组,长度是N,取值范围是1~N,数组里的原数有的出现1次,有的出现2次,让你设计一个算法找出出现2次的;后来又改成了有的出现1次,有的出现2次,有的出现3次,让你找出出现2次的原数
- 不要急,自己用几个简单的数模拟一下,应该就能答上来。能否打上来就看运气
- 就是一些类似于数学类的概率或者脑筋急转弯等
- 查询类问题
- 面试结束提问
- 不要直接说“我没有问题了”
- “你有什么问题要问我”的潜台词是,“你还想了解一些什么?帮助你更好的留在这里?”,换句话说,“你有多想留在这里”
- 很多求职者觉得双方沟通的差不多了,往往会直接回答:我没有问题了,这样的回答有2个负面影响
- 你居然不想知道详细的、切身利益相关的、在公司网站和媒体无法获知的情况?这可能会让面试官认为你对这个职位的兴趣不大。
- 很多公司都非常注重员工的个性和创新能力,回答“没问题”,可能让面试官认为你是一个没有想法的人,给你贴上否定的标签
- 一定不要问很容易在网上搜到答案的问题,如业务、产品
- 提问也是有学问的,千万不要问通过互联网搜索就可以了解的答案,比如公司的主营业务、产品名称、行业地位等,否则会让面试官觉得你信息闭塞,对公司的了解不够,对此次面试准备不足
- 薪酬、加班等问题,不建议上来就问,可以放在提问的最后
- 很多求职者非常关注薪酬福利,第一个问题会问薪资待遇,第二个问题会问是否会加班,这非常不妥
- 像这样问,表现你是一个非常上进的人
- 为了更好的胜任这个岗位,我还需要补充哪些技能?入职之后是否会有产品培训和技能培训?这个职位在公司的发展前景怎么样?晋升机制?在什么条件下会或者晋升机会呢
- 赢得这个岗位需要几轮面试?接下来的流程是什么?开发团队有多少人?大家怎么分工?目前的核心工作是哪些
- 如果我来到公司后,每天的日常工作是什么?公司对我这个职位的期望是什么?如何评估员工在试用期的表现?考核标准是什么?
- 如果沟通的比较顺利,你可以这样提问,加深面试官的印象
- “请问面试官,你为什么会愿意留在这家公司?”这样拉近彼此的距离,面试官不是高高在上的。而是像朋友一样和你分享他的一段经历
- 如果沟通的比较愉快,求职者也可以在最后这样说:我没有其他问题了,与您交流非常愉快,能留您一张名片/方面加一下您的微信吗?
- 在前面沟通的比较好的基础上,面试官一般不会拒绝你的要求。这样做可以和面试官建立长线联系,后续不仅可以咨询面试结果,还可以请教其他问题。无论是否入职这家公司,都可以把面试官当成朋友来相处
- 不要直接说“我没有问题了”
- 让你介绍一下项目整体流程
- 项目里职责