本文来自作者投稿,作者是是双非院校且非科班的大三学生,以下是他最近的面试总结:
先说下我的面试准备经历,为了保证自己简历有较大一定的概率通过筛选,我在去年11月面试多家公司,去了一家小公司实习到今年3月
但其实用处还是不太大,京东、贝壳、猿辅导等好多大厂在简历筛选挂了我
目前面试过的大厂有阿里、腾讯、字节、美团、网易、shopee;也投过中小厂去练练手,但面试的问题有些水,后面便不投了,有那时间还不如多刷几道算法题;虽然面试的大厂不多,但是还是比较幸运的拿到了腾讯csig、美团支付平台、网易杭州研究院的三个大厂offer
一月我开始刷算法题;整理知识点;和回顾项目;但是我忘记了最重要的网络协议操作系统最重要的知识部分;这也会后面的面试失败留下伏笔
我目前的简历技能模块上重点强调自己对redis、多线程、jvm、MySQL这些知识点有比较熟练的掌握(后面淘宝一面后我被挖底层挖怕了,简历改成了熟悉掌握)
项目模块:准备的项目是两个其实业务层面上比较简单都是比较平常的CRUD,但我的项目亮点是第一个项目是不用ssm框架,自己基于原生的web 去做了开发,大概模拟了三大框架思想进行了工具的封装帮助自己进行开发;以及第二个项目我将redis用在自己的项目,网上学习redis实现消息队列,自己封装了简易RPC框架;这些都算是项目的小亮点;
2月末开始进行的春招,先阿里面试开启春招,整个春招持续2月多,不断的复盘和补漏,这个春招是我技术增长最快的一阵子
下面我展示下经历大厂的面试题,并对一些面试题说下我个人觉得比较好的答题思路
面试思路: 面试官抛出一道面试题,需要回答三部分: 1.它是什么作用是什么 2.原理是什么 3.在实战中是怎样的(技术选型的考量),如果可以最好举一反三,这样子的涉及跟哪方面的知识有共通之处
阿里淘宝一面
1.redis消息队列你是如何实现的
消息队列是什么,作用是什么(解耦、控流、异步);redis 怎么实现(redis 的list 以及生产消费者模型);redis 实现消息队列的缺点(消息重复消费、消息丢失、)解决方式
2.如何保证缓存与数据库一致性、(这块面试官追问了很久)
这块我不敢说自己能解决的很明白,没有绝对固定的答案,重点是有自己的考量
3.InnoDB与myslarm区别
事务、锁、索引文件(myslarm索引和数据文件不在同一地方); InnoDB 特性:两次写(解决表持久化到一半出事);change buffer;
4.jvm内存结构
八股文系列;在此之外我加点自己的料证明自己不是背的面试题 栈的两种异常:不能动态扩展是StackOutOfMemery ,能动态扩展导致OutOfMemery 方法区 1.7 与1.8区别,直接内存,堆内存不是绝对意义上的共享(H神有相关文章),PC寄存器在多线程调度层面的意义作用
5.堆内存内部结构、栈内存涉及的异常、堆外内存的接口
6.垃圾发现算法和垃圾回收算法CMS 和G1 垃圾回收器区别以及底层原理、
7.jvm调优实战用什么工具主要涉及什么参数、
8.MySQL索引在业务中的运用、
9.布隆过滤器底层原理、
10.如果有亿级别的数据,布隆过滤器初始化怎么办、
11.布隆过滤器的误判概率是固定的么
因为本身的数据结构BitMap,会有所谓的重合;意思是证明不存在有误判
阿里中台一面 (挂在算法)
1.数组跟链表区别 2.说说hashmap 3.concurrentHashmap 跟hashmap区别; 4.你项目中有什么你觉得可以的亮点 5.NIO与BIO区别:原理层面的聊就是操作系统了 6.Dubbo如何实现节点的管理 7.Dubbo服务暴露原理、 8.mysql索引需要注意的事情、:索引的创建和索引的使用(避免失效) 9.redis 消息队列如何保证消息不丢失 10,让服务端单独消费队列 11.redis 与DB如何同步、 12.redis缓存产生的相关问题 13.PrepareStatement和statement区别、 14.jvm内存结构、 15.jvm垃圾回收、 16.线程wait 与sleep 区别、 17.线程什么时候死亡、 18.如何描述MVC、缓存穿透缓存雪崩缓存击穿的解决方式 19.异常分类、 catch 出现return finally的return还会执行么 20.编程题:LRU算法和多线程ABC顺序输出
整个的面试流程我完成度比较高,聊的挺开心,但是面试过后让我写笔试题,这个我写的太差,部门没再让我进入二面流程;
腾讯TEG一面
(经过这场面试开始意识到操作系统网络协议这些的重要性)
1.什么是内存抖动、
2.什么是内存泄漏
java党可以说下ThreadLocal
3.进程与线程区别;
4.线程模型:五种Future、forkjoin(递归回溯思想)、actor(基于消息传递)、生产者消费者模型、master-worker模型
5.62bit 和32bit区别:
除了性能控制的内存,至于为什么的操作系统层面的原理说一下子
7.syn和volatile区别
8.i++ 如何保证原子性
原子类;
9.什么是AQS
10.聊到原子类肯定会谈到AQS;一个维护这state和阻塞队列进行线程状态管理的类
11.HTTPS和HTTP区别、HTTP1.0 和HTTP1.1HTTP2.0区别、
12.网络协议层级:主要是TCP网络模型和原理体系结构各个层干什么说一下;然后面试官根据你的回答聊下一步,一般会转到聊TCP
13.一个URL 输入后的整个流程:浏览器解析、DNS协议、ICMP协议、路由选择协议、MAC和IP、ARP路由解析协议这些主要过程中设计的主要协议聊下
14.你如何设计一个秒杀系统
15.hashmap、 hashtable 、concurrenthashmap 区别
16.mysql为什么高可用
17.主从、binlog;备份恢复
18.mysql 索引结构
19.B+树与B树区别
20.mysql三范式:
21.什么会导致索引失效:
22.高并发与长连接导致的问题是什么如何解决
23.长连接与短链接区别
腾讯TEG二面
1.问项目:rpc框架怎么实现
2.你是怎么用java远程爬取数据的
3.redis有什么数据结构
4.布隆过滤器原理
5.mysql数据库主从同步如何实现
6.redis 主从同步
7.进程之间如何通信
8.如果RT 过大你会想到什么原因呢
9.抽象类与接口区别
10.反转链表
11.linux如何查看文件状态
12.StackOverFlow 产生原因
因为底层基础差遗憾挂掉
腾讯微信一面:
1.环形链表、两数相加
2.类加载、协程与协程区别
3.协程定义
4.事务是什么解决了什么问题
5一个URL 发送之后到响应的流程是什么
6.死锁是什么如何解决(信号量睡眠巴拉巴拉)
7.sql如何优化select * from student 的问题在哪
8.分布式:paxos 和拜占庭问题
(以上建议全从计网的角度解答)
腾讯CSIG一面
1.说下一个URL输入后整个过程
2.MySQL 的B+树特性
3.left join right join join 区别
4.进程与线程区别
腾讯CSIG二面
1.项目中你觉得挑战性大的问题
2.抽象类与接口区别
3、面向对象理解
面向对象三大特征
4、权限修饰符
5.常用设计模式
6.hashmap原理
7、mysql常用引擎
InnoDB、MyISAM、Memory(一个只在内存的key-value 表)
8、Innodb和MyISAM区别
9、你在本机如何配置主从,如何实现主从复制
10、B+和B树索引结构的区别
11、回表
12、最左前缀原则
13、主从复制原理、如何做主从配置更改了什么文件
14、事务原理特性
15、MVCC中回滚是怎么做的;
16、(a,b,c)联合索引:ac访问能击中索引么
17、HTTP1.0 与1.1区别
18、HTTPS的具体实现、SSL的握手
19、三次握手四次挥手
20、nginx 原理
21、反向代理
22、nginx命令配置文件
23、持久化策略
24、redis所有数据结构
25、持久化配置
26、集群配置和原理;主从、哨兵、Codis、Cluster
27、主要的Linux命令
28、操作系统内存管理
29、如果一个接口很慢你会怎么排查和解决问题
腾讯CSIG三面
(偏向比较宏观的问问了) Linux常用命令:
redis 缓存和数据库如何保证一致性:这方面跟面试官聊了20min
问问项目
考研吗
平时怎么学习的
字节抖音一面:
字节一面: 疯狂问项目:你项目的大概结构、用了什么技术获得什么感受
1.redis用在什么业务场景上面
2.你如何主从同步的
3.什么数据放缓存什么数据放数据库
4.你业务中哪里用到了事务
5.业务中哪里用到了锁
6.业务中哪里用到了索引
你对mvc 的理解、你对spring springmvc springboot 的理解、spirngAOP在实战中的应用、
一个url请求到响应的所有流程、 知道其他并发模型么
八皇后、用两个栈实现队列(以及高并发的设计)
(面试官问的特别偏实战,完全不按正常的套路出牌就有些蒙)
字节企业服务部门一面:
1.常见的异常、错误
2.StackOverFlow和OutoFmemery产生原因
3、abc联合索引 a=? b= ? 能击中联合索引么
4.抽象类与接口区别
5.项目中比较亮眼的点、list消费端你是阻塞读获取么
6、异常与Error区别
7、如果一条语句执行特别慢是为什么
8、你会用什么去查询数据库 的状态
9、NoClassDefFoundError 和ClassNotFoundException 效果和原因
10、int [] a1
,int []b
,b[i] = (a[0]*a[1]*a[i]**a[n-1]) /a[i]
求b 数组 (n) 空间O(n)
shopee一面
1、盛水最多容器
2、进程与线程区别、
3、页缺失
4、页替换算法
5、块表和多级页表的机制和作用
6、TCP 如何实现可靠性
7、进程之间通信
8、虚拟内存
9、发送端发送接收端没有recevice会怎样;
10、TCP重试机制
11、如果一堆数据大于内存,如何拿到前面的数据
12、hashmap 与 线程安全的concurrentHashmap
13、msyql索引类型
14、为什么选择B+树
15、mysql事务、mysql幻读是什么如何解决、事务原理、
shopee 二面
1、IO多路复用
2、虚拟内存整体流程
3、HTTP 2.0 新特性、 HTTP3.0新特性(UDP配合TCP 替换掉)
4、算法:10G乱序数据、1G内存、找出中位数
5、新增频繁的表怎么设计
6、 事务是如何保证原子性的、
7、B+树结构
8、redis zset数据结构
9、消息队列实现、
10、你的远程登录设计
11、两个请求放在一起发给服务、
12、服务端业务层面如何保证有序
13、平时怎么学技术的、有无参与开源项目
美团一面
1、面向对象三大特性
2、Integer a = 20 Intger b = 20 ,a == b; true还是false
3、与equals重写重载区别
4、权限修饰符的区别
5、基本数据类型都有什么
6、异常的同一接口
7、异常分类两种区别
8、我们需要抛出的异常是什么异常
9、线程池原理
10、jvm内存结构
11、mysql事务特性 和隔离级别
12、msyql事务隔离级别
13、SpringAop 和SpringIOC
14、对反射的理解
15、写一个嵌套的sql语句(where groupby oreder by 执行顺序)
16、两个栈实现队列
美团二面
(主要问项目巴啦啦问了一堆)
1、站内信设计
2、你那个站内信的消息为什么用list 不用其他
3、同样是消息队列不用mq?redis 的list 爆出异常怎么办
4、双亲委派模型,为什么要双亲委派模型;
5、聚簇索引和非聚簇索引区别、
6、谁可以形成聚簇索引、
7、谁不可以做索引、
8、联合索引的索引失效问题
9、数据库层面通过锁防止重复insert
网易一面
1.ArrayList和LinkedList区别
2.进程和线程区别
3.你刚刚跟我说进程的切换比线程的切换更耗费资源你说说上下文切换是什么吧
4.进程在内存中的结构
4.说下一个URL输入后整个过程
5.网络协议的OSI 分层结构说下吧
6.HTTPS与HTTP区别
7.HTTPS原理
8.TCP三次握手是什么,为什么三次握手
9.TCP四次挥手是什么,
10.TCP四次挥手中客户端最后发送消息后等2MESL是因为什么
11.TCP的拥塞控制与流量控制区别
12.JVM内存结构都有些什么
13.堆内存结构?一定线程共享么?
14.垃圾回收器CMS和G1区别在哪
15.你觉得垃圾回收期现在不断的发展是处理优化那些问题
16.你平常怎么学习的
网易二面
1.hashmap的put和get流程
2.hashmap 与concurrenthashmap区别
3.说下其他并发包
4.说下Semphore cycricbarrier
5.垃圾回收算法都有什么
6.redis都有什么数据结构
7.redis 缓存 与数据库同步你是怎么做的
8.redis缓存可能出现的问题,以及你是怎么解决的
9.redis String 数据结构底层是什么
10.你项目中封装了orm框架模拟mybatis,你说说你的连接池怎么处理的,比mybatis有什么区别
11.你的消息队列是怎么实现的
12.你的 消息队列如何保证可靠性:不重复消费、消息不丢失
13.redis中布隆过滤器原理
多场面试总结
大学如何准备:
春招时期我的压力很大,在3月末还没有收到大厂offer 时候我是很慌的,如果在没有任何大厂实习经历情况下去竞争极大的秋招是有很大的风险。加上我自己科班基础和算法非常弱(leetcode也就刷了100不到应付不了笔试) 所以春招是我进大厂最好的机会
说下大学应该怎么做相关准备吧
我是大二下的疫情期间才真正意义上开始做准备的,大一也就学了java基础;
期间其实走了很多弯路。太执着于java底层基础,对算法和科班基础没花时间,太在意想找什么实习;
如今我个人不建议学生大一大二急着找实习,先把基础打牢固。数据结构与算法、网络协议、操作系统是校招最重要的部分。
大三尝试找找日常,然后在这个难度不怎么高竞争不大的春招争取拿到大厂暑期实习offer;
当然鸡蛋不能放在一个篮子里,秋招肯定是要准备的
对于java的学生我认为需要掌握的知识如下:
1.算法:剑指offer(面试);动态规划、递归分治回溯(笔试);
2.操作系统:进程线程;内存管理;文件系统;
3.网络协议:HTTP协议(HTTPS、HTTP迭代版本);TCP协议;IP相关协议(ARP、ICMP、路由控制);网络分层模型
4.java基础(面向对象思想,包装类等等的语言基础尤其是hashmap集合)
5.jvm:jvm内存结构;垃圾回收(垃圾发现回收算法、调优思路、垃圾回收器尤其是G1和CMS);类加载(类加载器,类和对象加载流程,双亲委派和如何破坏)三大部分;最好学下性能监控工具和调优思路;
6.MySql: innodb引擎;索引;日志log;锁;事务;
7.多线程(synchronize 、volatile、ReecentLock 原理区别;线程调度方法;JMM内存模型;JUC并法包和原理AQS;线程池)
8.基础框架 :spring 、spirngmvc、mybatis
9.redis(会了的话特别加分)
10.设计模式
11.分布式(这块根据公司来如果是阿里会喜欢问问dubbo、zk这种框架;腾讯字节可能就是nginx 或者CAP原理啥的)
推荐看的书
1.深入理解java虚拟机(看完主要章节处理大厂面试是够了)
2.Msyql技术内幕(初步掌握MySQL大部分基础知识)
3.高性能MySQL(我非常喜欢这本书,除了基础知识比较深入外还有很大偏实战的东西,比如查询优化,高可用等等)
4.java并发编程艺术(之前看过一本并发编程实战但是太过理论了,编程艺术基本涵盖了我目前所有的相关面试题);
5.疯狂java讲义(我的java入门书)
6.图解HTTP 和图解TCP (我学习网络协议,不看教科书太过理论了难以掌握;这两本图文结合非常不错)
7.Redis 深度历险:核心原理与应用实践(redis的第一本书能对redis大部分知识有广度和深度的理解)
推荐的博主:
我个人比较推荐先看看博主写的文章,能有个大概的了解对后面看书有帮助,而且好文章真的能帮你快速理解知识点建立知识网络
1.Hollis:java成神之路是帮我构建知识网络的利器,还有很多单知识点的深度都非常可以,而且讲的很好理解
2.三太子敖丙:在学完java基础后很多新知识的学习了解都是从这里开始的
3.小林coding:我的操作系统和网络协议是在这里看的
面试如何准备
1.建议可以多看看面试题,一是在时间不够掌握一部分知识情况下,能较短时间处理一些面试(可以说成是八股文)二是帮助你在全面学习知道什么部分知识是重点需要投入更多成本
2.简历上最好有项目或者实习经验吧,写好 个人信息、个人技能、项目实习经历三部分;
3.准备两版自我介绍一个给技术面试官一个给HR,技术面试官的自我介绍我主要说下自己的项目实习经验和自己的擅长的技术,面试官还是很愿意跟你聊你会的技术点的。
4.最好能提前根据公司部门技术做相应的准备,比如阿里基本java技术栈为主,字节腾讯面试可能部门不是做java的,如果你是学java的,会问你java基础但问的没那么深;
如何面试
1.一个问题面试官问了,先想想面试官想问什么,有的可能考深度有的可能考知识之间的串联;回答一个知识点 分三部分:是什么、这个技术原理怎样、基于这样的原理适用于什么样的业务或者技术的优缺点(举一反三);比如谈到LRU我就喜欢聊到msyql的内存淘汰和redis的内存淘汰的区别给面试官展示我不仅仅有一点知识的深度也有比较完善的知识网络
2.最后的你问面试官环节:可以问部门的信息部门涉及的技术栈、实习生入职之后学什么做什么、然后就是自己觉得没打好的问题(比如一些开放式的问题)问问面试官的想法;
最后关于送给未来有大厂梦的学弟学妹们几句话:校招是我们进大厂付出成本相对社招最少的时候一定要好好珍惜;好好沉淀自己不要被身边同学玩了些很炫酷的技术做项目或者进了实习所着急,自己的基础才是最最重要的;最后一定要好好的坚持做好每一次复盘,多问问进入大厂的学长学姐;
广告时间 》》》》
阿里巴巴2022届校招内推正式启动已正式启动!我这边是场景金融技术部门,主要招Java开发工程师,欢迎同学们来投递!
简历格式:岗位_姓名_手机号_邮箱
投递邮箱:hollischuang@gmail.com
大家也可以扫描二维码,自行进行简历的投递。期待优秀的同学的加入。
重要!!!! 收到确认邮件后,请第一志愿选择 新零售-CTO线 ,我们期待你的加入!!!!
全部评论
(3) 回帖